游戏软件开发硬件的架构影响有多大?Xbox游戏和Playstation游戏是如何开发的

发表时间:2018-02-06 04:30:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《黑色纹身咋覆盖?有没有美女纹身高清壁纸》相关知识。本篇中小编将再为您讲解标题游戏软件开发硬件的架构影响有多大?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》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题