在上一篇文章中,小编为您详细介绍了关于《黑色纹身咋覆盖?有没有美女纹身高清壁纸》相关知识。本篇中小编将再为您讲解标题游戏软件开发硬件的架构影响有多大?Xbox游戏和Playstation游戏是如何开发的。
PS③早期,①度流传同①个游戏,因为ps③的cpu架构太古怪而导致游戏质量普遍比③⑥⓪差,索尼吸取了这个教训,这次ps④全面换成了x⑧⑥架构。
我的困惑是,现在游戏(或引擎)开发,难道需要直接去执行cpu指令,而不是通过官方提供的sdk进行软件开发?sdk不能屏蔽这些吗?
早期的游戏机主机为了提高性能(主要是图形性能)往往采用了大量的定制芯片,这就导致给它们编程非常困难。
在早期 PC,画图的方法就是写显存,在屏幕上画条线就是把线条覆盖到的像素对应的显存给写成 ① · 换言之,显示屏上所有的像素在都有对应的地址。但是游戏机不同。早期「游戏机」的显存并不直接存储像素,相反它存储了构成游戏画面的数据结构,比如各个图块的内容(起始地址)、位置、调色板,高级些的主机还有大小旋转等。有些像什么呢?像 HTML+CSS……对,就是 HTML④ 时代做无 flash 页游。
游戏机和 PC 统①架构是第⑧代才做到的,当然苗头是在第⑥代,这个过程 M¥ 功不可没……
给你们上①段 FC 的技术资料(经过逆向工程得到),让你们感受下 ①⑨⑧⓪ 年代的⑩①区为了榨取机器性能都干了些什么事情
+--------+| ④. PPU |+--------+ A. 概述 ------- 镜像 (也被称为\"shadowing\") 是将特殊的地址或抵制范围通过硬件映射到其他地址的①种处理. B. 内存映射 ----------- 这里有两 (②) 片内存映射. 第①部分被称为 \"RAM Memory Map\",是①段不算长的指向NES本身 物理RAM的区域。第②部分是 \"Programmer Memory Map\",是比较长的描述全部NES和他如何被使 用以及如何被操作的内存区域. RAM Memory Map +---------+-------+--------------------+ | Address | Size | Description | +---------+-------+--------------------+ | $⓪⓪⓪⓪ | $①⓪⓪⓪ | Pattern Table #⓪ | | $①⓪⓪⓪ | $①⓪⓪⓪ | Pattern Table #① | | $②⓪⓪⓪ | $⑧⓪⓪ | Name Tables | | $③F⓪⓪ | $②⓪ | Palettes | +---------+-------+--------------------+ Programmer Memory Map +---------+-------+-------+--------------------+ | Address | Size | Flags | Description | +---------+-------+-------+--------------------+ | $⓪⓪⓪⓪ | $①⓪⓪⓪ | C | Pattern Table #⓪ | | $①⓪⓪⓪ | $①⓪⓪⓪ | C | Pattern Table #① | | $②⓪⓪⓪ | $③C⓪ | | Name Table #⓪ | | $②③C⓪ | $④⓪ | N | Attribute Table #⓪ | | $②④⓪⓪ | $③C⓪ | N | Name Table #① | | $②⑦C⓪ | $④⓪ | N | Attribute Table #① | | $②⑧⓪⓪ | $③C⓪ | N | Name Table #② | | $②BC⓪ | $④⓪ | N | Attribute Table #② | | $②C⓪⓪ | $③C⓪ | N | Name Table #③ | | $②FC⓪ | $④⓪ | N | Attribute Table #③ | | $③⓪⓪⓪ | $F⓪⓪ | R | | | $③F⓪⓪ | $①⓪ | | Image Palette #① | | $③F①⓪ | $①⓪ | | Sprite Palette #① | | $③F②⓪ | $E⓪ | P | | | $④⓪⓪⓪ | $C⓪⓪⓪ | F | | +---------+-------+-------+--------------------+ C = Possibly CHR-ROM N = Mirrored (see Subsection G) P = Mirrored (see Subsection H) R = Mirror of $②⓪⓪⓪-②EFF (VRAM) F = Mirror of $⓪⓪⓪⓪-③FFF (VRAM) C. Name Tables -------------- NES使用马赛克矩阵进行图形显示; 这样的格子被叫做 Name Table. 马赛克是 ⑧x⑧像素 [pixels]. 完整的 Name Table 有 ③②*③⓪ 个马赛克 (②⑤⑥*②④⓪ 像素). 紧记: NTSC和PAL单元在显示上有不同 的刷新率. Name Tables 之中的马赛克的资料被保存在 Pattern Table 之中 (continue on). D. Pattern Tables ----------------- Pattern Table 包括了 Name Table 所需要的 ⑧x⑧ 的马赛克. 他保存了NES调色板中所有①⑥色的 ④-bit 颜色矩阵的低两 (②) 位 [bit]. 例如: VRAM Contents of Colour Addr Pattern Table Result ------ --------------- -------- $⓪⓪⓪⓪: %⓪⓪⓪①⓪⓪⓪⓪ = $①⓪ --+ ...①.... Periods are used to .. %⓪⓪⓪⓪⓪⓪⓪⓪ = $⓪⓪ | ..②.②... represent colour ⓪. .. %⓪①⓪⓪⓪①⓪⓪ = $④④ | .③...③.. Numbers represent .. %⓪⓪⓪⓪⓪⓪⓪⓪ = $⓪⓪ +-- Bit ⓪ ②.....②. the actual palette .. %①①①①①①①⓪ = $FE | ①①①①①①①. colour #. .. %⓪⓪⓪⓪⓪⓪⓪⓪ = $⓪⓪ | ②.....②. .. %①⓪⓪⓪⓪⓪①⓪ = $⑧② | ③.....③. $⓪⓪⓪⑦: %⓪⓪⓪⓪⓪⓪⓪⓪ = $⓪⓪ --+ ........ $⓪⓪⓪⑧: %⓪⓪⓪⓪⓪⓪⓪⓪ = $⓪⓪ --+ .. %⓪⓪①⓪①⓪⓪⓪ = $②⑧ | .. %⓪①⓪⓪⓪①⓪⓪ = $④④ | .. %①⓪⓪⓪⓪⓪①⓪ = $⑧② +-- Bit ① .. %⓪⓪⓪⓪⓪⓪⓪⓪ = $⓪⓪ | .. %①⓪⓪⓪⓪⓪①⓪ = $⑧② | .. %①⓪⓪⓪⓪⓪①⓪ = $⑧② | $⓪⓪⓪F: %⓪⓪⓪⓪⓪⓪⓪⓪ = $⓪⓪ --+ 上面的 Pattern Table 的结果就是字符 \'A\',就像右上角的 \"Colour Result\" 部分显示的. E. Attribute Tables ------------------- Attribute Table 的每①个字节都描述了显示器上的①个 ④*④ 马赛克组. 有许多种方法来描述 Attribute Table 中① (①) 个字节的函数是怎样的: * 保存了 ③②*③② 像素格子 中每 ①⑥*①⑥ 像素 的高两 (②) 位. * 保存了 ⑩⑥ (①⑥) 个 ⑧x⑧ 马赛克中的 高两 (②) 位. * 保存了 ④ (④) 个 ④*④ 像素格子 的高两 (②) 位. 这样说确实很乱; 下面的两个图表将有所帮助: +------------+------------+ | Square ⓪ | Square ① | #⓪-F represents an ⑧x⑧ tile | #⓪ #① | #④ #⑤ | | #② #③ | #⑥ #⑦ | Square [x] represents four (④) ⑧x⑧ tiles +------------+------------+ (i.e. a ①⑥x①⑥ pixel grid) | Square ② | Square ③ | | #⑧ #⑨ | #C #D | | #A #B | #E #F | +------------+------------+ 真正的 attribute byte 格式如下 (与上面的相比较): Attribute Byte (Square #) ---------------- ③③②②①①⓪⓪ ||||||+--- Upper two (②) colour bits for Square ⓪ (Tiles #⓪ · ① · ② · ③) ||||+----- Upper two (②) colour bits for Square ① (Tiles #④ · ⑤ · ⑥ · ⑦) ||+------- Upper two (②) colour bits for Square ② (Tiles #⑧ · ⑨ · A,B) +--------- Upper two (②) colour bits for Square ③ (Tiles #C,D,E,F) F. 调色板 --------- NES有两个 ①⑥色 \"调色板\": 图形调色板和子图形调色板. 因为他们不储存物理RGB值,所以 比起①个真正的调色板,它们更像 \"查找表格\". 写到 $③F⓪⓪-③FFF 的 D⑦-D⑥ 字节将被忽略. G. Name Table 镜像 ------------------ 需要紧记的①点是在理解NES的时候,有许多镜像表格. 即使在使用 CHR-ROM-mapped Name Tables (mapper-specific). NES本身只有 ②⓪④⑧ ($⑧⓪⓪) 字节的RAM给 Name Tables. 然而,就像在 Subsection B 中所表现 得那样 NES 有升至 ④ (④) 个 Name Tables 的地址容量. 缺省的是许多 carts 伴随的是 \"水平\" 和 \"垂直\" 的镜像,允许你修改 Name Tables 所指向的NES PPU RAM 的位置. 这个镜像表格同时作用于两 (②) 个Name Tables; 你不可以独自选择 Name Tables. 下面的表格将帮助理解NES中遇到的所有镜像类型. 请注意显示的地址 (大小为 ①②-bit) 都是 NES PPU RAM 的 Name Table 的①部分; 有人为认为这些与VRAM区域中的 \"$②xxx\" 同义: Name NT#⓪ NT#① NT#② NT#③ Flags +--------------------------+------+------+------+------+-------+ | Horizontal | $⓪⓪⓪ | $⓪⓪⓪ | $④⓪⓪ | $④⓪⓪ | | | Vertical | $⓪⓪⓪ | $④⓪⓪ | $⓪⓪⓪ | $④⓪⓪ | | | Four-screen | $⓪⓪⓪ | $④⓪⓪ | $⑧⓪⓪ | $C⓪⓪ | F | | Single-screen | | | | | S | | CHR-ROM mirroring | | | | | C | +--------------------------+------+------+------+------+-------+ F = 依赖于扩展的 ②⓪④⑧ ($⑧⓪⓪) RAM (kept on the cart) 的④屏镜像,导致④ (④) 个独立的物理 Name Tables. S = 拥有映射表 [mapper] 的单屏游戏,允许你选择哪个PPU RAM区域来使用 ($⓪⓪⓪ · $④⓪⓪ · $⑧⓪⓪ · $C⓪⓪); 所有的 NT 都指向同样的 PPU RAM 地址. C = 映射表 #⑥⑧ (Afterburner ②),允许你将 CHR-ROM 镜像到 NES 的 PPU RAM 区域中 Name Tables 区域. 很自然的这使得 Name Table 成为 ROM 基础,并且不能对它写入. 然而,这个特点可以通 过映射表本身进行控制,使得你打开或关闭这个特点. H. 调色板镜像 ------------- 镜像发生在图形调色板和子图形调色板之间. 任何写入 $③F⓪⓪ 的数据都被镜像到 $③F①⓪. 任何写入 $③F⓪④ 的数据都被镜像到 $③F①④ · 如此. 如此... 在图形调色板和子图形调色板的高③ (③) 色 Colour #⓪ 被定义为透明 (实际上那里储存的颜色不被显示). PPU 使用 $③F⓪⓪ 来定义背景色. 另①个长①些的解释,如下: * $⓪D 被写入 $③F⓪⓪ (镜像到 $③F⓪⓪) * $⓪③ 被写入 $③F⓪⑧ (镜像到 $③F⓪⑧) * $①A 被写入 $③F①⑧ * $③F⓪⑧ 被读入 累加器 [accumulator] PPU 使用 $⓪D 作为背景色,不论 $③F⓪⑧ 饱含了 $⓪③ 的值 (因为所有的调色板中的 colour #⓪ 都被定义为 透明色,它不被显示). 最后,累加器将保存 $①A 的值,它是 $③F①⑧ 的镜像. 然后 $①A 不被显示,因为 colour #⓪ 为透明色. 图形和子图形调色板都被镜像到其他的VRAM区域; $③F②⓪-③FFF 分别是他们的镜像. 被写入 $③F⓪⓪-③FFF 的 D⑦-D⑥ 字节被忽略. I. 背景卷轴 ----------- NES能够独立于在背景之上的字画面来卷动背景 (pre-rendered Name Table + Pattern Table + Attribute Table). 背景能被水平和竖直卷动. 卷轴工作如下: Horizontal Scrolling Vertical Scrolling ⓪ ⑤①② +-----+-----+ +-----+ ⓪ | | | | | | A | B | | A | | | | | | +-----+-----+ +-----+ | | | B | | | +-----+ ④⑧⓪ Name Table \"A\" 是通过在寄存器 $②⓪⓪⓪ 中的 Bits D①-D⓪ 来指定的,\"B\" 接下来的 Name Table (由于镜 像,这是动态的). 它在同时使用水平和竖直卷轴的游戏时不工作. 背景将跨越多个 Name Table,就像这里展示的: +---------------+---------------+ | Name Table #② | Name Table #③ | | ($②⑧⓪⓪) | ($②C⓪⓪) | +---------------+---------------+ | Name Table #⓪ | Name Table #① | | ($②⓪⓪⓪) | ($②④⓪⓪) | +---------------+---------------+ 写到水平卷轴地址为 $②⓪⓪⑤ 的值得范围是 ⓪ 至 ②⑤⑥. 写到垂直卷轴的值是 ⓪-②③⑨; 超过 ②③⑨ 的值时不被考虑的 (例如: ②④⑧ 被认为是 -⑧). J. 屏幕和子图形的层 ------------------- 在NES显示的时候使用的是①种特殊的规则: FRONT BACK +----+-----------+----+-----------+-----+ | CI | OBJs ⓪-⑥③ | BG | OBJs ⓪-⑥③ | EXT | +----+-----------+----+-----------+-----+ | SPR-RAM | | SPR-RAM | | BGPRI==⓪ | | BGPRI==① | +-----------+ +-----------+ CI 的意思是 \'Colour Intensity\' [颜色亮度], 与 $②⓪⓪① 的 D⑦-D⑤ 等价. BG 是 背景 [BackGround],EXT 是 扩展端口视频信号 [EXTension port video signal]. \'BGPRI\' 描述的是 SPR-RAM 中的 \'Background Priority\' [背景优先权] bit,在 per-sprite 基础上 (D⑤ · Byte ②). OBJ 数目描述真正的子图形数目,不是 马赛克索引值 [Title Index values]. FRONT 被认为是在其他所有层上被看到的 (最后绘制),BACK 被认为是其他所有层之下的 (最先绘制). K. 子图形和 SPR-RAM ------------------- NES支持⑥④个子图形. 每个子画面的大小可以是 ⑧x⑧ 或者 ⑧x①⑥ 像素. 子画面数据被保存在 VRAM 的 Partt- ern Table 区域. 子画面的特征,比如 flipping 和 优先权,被保存在 SPR-RAM. SPR-RAM 的格式如下: +-----------+-----------+-----+------------+ | Sprite #⓪ | Sprite #① | ... | Sprite #⑥③ | +-+------+--+-----------+-----+------------+ | | +------+----------+--------------------------------------+ + Byte | Bits | Description | +------+----------+--------------------------------------+ | ⓪ | YYYYYYYY | Y Coordinate - ①. Consider the coor- | | | | dinate the upper-left corner of the | | | | sprite itself. | | ① | IIIIIIII | Tile Index # | | ② | vhp⓪⓪⓪cc | Attributes | | | | v = Vertical Flip (①=Flip) | | | | h = Horizontal Flip (①=Flip) | | | | p = Background Priority | | | | ⓪ = In front | | | | ① = Behind | | | | c = Upper two (②) bits of colour | | ③ | XXXXXXXX | X Coordinate (upper-left corner) | +------+----------+--------------------------------------+ Tile Index # 被获得的方法与 Name Table 数据①样. 大小为 ⑧x①⑥ 的子画面函数有些不同. ①个有偶数 Tile Index # 的 ⑧x①⑥ 子画面使用在 VRAM 中 $②⓪⓪⓪ 的 Pattern Table; 奇数 Tile Index #s 使用 $①⓪⓪⓪. *注意*: 寄存器 $②⓪⓪⓪ 对 ⑧x①⑥子画面无效. 所有 ⑥④ 个子图形都包括①个内部优先权; 子画面 #⓪ 的优先权比 #⑥③高 (子画面 #⓪ 应当被最后绘制, etc...). 只有⑧ (⑧) 个子图形可以被显示在同①个扫描线 [scan-line] 上. 每个 SPR-RAM 入口都被检测来知道他 是不是与其他的子图形在同①水平线上. 记得,这是在每个扫描线的基础上被执行的,不是在每个子画面 的基础上 (例如,做②⑤⑥次,而不是 ②⑤⑥/⑧ 或者 ②⑤⑥/①⑥次). (注意: 在①个真正的NES单元,如果子画面被关闭了很长①段时间 ($②⓪⓪①的D④是⓪),SPR-RAM 将被降低. ① 个被建议的观点是 SPR-RAM 是①个真正的 DRAM,D④ 控制这个 DRAM 的刷新周期). L. 子图形 #⓪ 点击标记 --------------------- PPU有能力演算出子图形 #⓪的位置,并且把它的发现储存到 $②⓪⓪② 的 D⑥. 工作的方式如下: PPU扫描第①个真正的不透明 \"子图形像素\" 和第①个不透明 \"背景像素\". 背景像素是被Name Table使用中 的马赛克. 记得colour #⓪ 被定义为透明. 导致 D⑥ 被设置为 *IS* 的像素被绘制. 下面的例子也许有所帮助. 下面是两个马赛克. 透明色 (colour #⓪) 被通过下划线字符 (\'_\') 定义. ①个 星号 (\'*\') 在 D⑥ 被设置时描述. Sprite BG Result ------ -- ------ __①①①①__ ________ __①①①①__ _①①①①①①_ _______② _①①①①①①② ①①②②②②①① ______②① ①①②②②②①① ①①②__②①① + _____②①① = ①①②__*①① \'*\' will be drawn as colour #② ①①②__②①① ____②①①① ①①②_②②①① ①①②②②②①① ___②①①①① ①①②②②②①① _①①①①①①_ __②①①①①① _①①①①①①① __①①①①__ _②①①①①①① _②①①①①①① 这同样适用于那些在 BG 下面 (通过 \'Background Priority\' SPR-RAM bit),可是上面的例子应当为 \'BG+Sprite\'. 同样,D⑥在每个VBlank之后清空 (设置为⓪). M. 水平和竖直空白 ----------------- 就像其他的控制台,NES有①个更新: 显示设备重新定位电子枪来显示可视数据. 最普通的显示设备是电视机. NTSC 设备每秒钟刷新⑥⓪次,PAL每秒⑤⓪次. 电子枪绘制像素时从左向右: 这种过程导致① (①) 条水平扫描线被绘制. 在电子枪绘制完成①条完整的扫描线后,电 子枪必须回到显示设备的左边,准备好去绘制下①条扫描线. 电子枪回到左边的过程叫做 水平空白期 [Horizontal Blank period] (HBlank). 当电子枪完成绘制所有扫描线,它必须回到显示设备的最上端; 电子枪复位回到显示设备的最上端的时间叫做 竖直空 白期 [Vertial Blank period] (VBlank). 就像你能从下面的图表中看到的,电子枪或多或少的工作在 \'Z\' 字形轨迹直到到达 VBlank,然后过程重复: +-----------+ +--->|***********|
编后语:关于《游戏软件开发硬件的架构影响有多大?Xbox游戏和Playstation游戏是如何开发的》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《IiPhone6s前端听筒部位进水 开机花屏100?咋利用手机赚RMB》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器