罗德里戈·科佩蒂(Rodrigo Copetti)的实用分析
如果您使用辅助工具,可切换到“经典”版本;若使用旧版浏览器,尝试“blink”版本。文章有英语、西班牙语、葡萄牙语(巴西)、简体中文、俄语版本,也欢迎添加翻译。
书籍版本
本文也在许多书店出版,方便离线读者阅读。电子书无DRM限制,印刷版汇编了多篇文章,并配有高分辨率的原创照片。您可在这里找到印刷版合集,在 Amazon Kindle、Apple Books、Kobo 和其他书店找到单本电子书,所得收益将用于改进现有文章和开发新文章。更多信息,查看这里。
目录
- 辅助图片
- 快速介绍
- CPU
- 起源
- 一点历史
- MIPS与索尼
- LSI与委托
- 产品特性
- 接管CPU
- 核心补充
- 系统控制协处理器
- 几何变换引擎
- 运动解码器
- 缺失的单元?
- 大量延迟
- 核心理念
- 起源
- 图形处理
- 内容组织
- 绘制场景
- 指令
- 可见性处理方式
- 光栅化
- 着色器
- 纹理
- 剩余步骤
- 设计示例
- 利用VRAM
- 秘密与限制
- 扭曲的模型/纹理
- 相互矛盾的说法
- 预渲染图形
- 视频输出
- 音频处理
- 流媒体时代
- 输入/输出
- CD子系统
- 前置端口
- 操作系统
- BIOS/内核
- 启动过程
- 游戏
- 开发生态系统
- 防盗版/区域锁定
- 破解方法
- 反制措施
- 总结
- 版权与许可
- 参考资料/延伸阅读
- 贡献方式
- 更新日志
辅助图片
主机模型
有原版和轻薄版两种。原版PlayStation于1994年12月3日在日本发布,1995年9月9日在北美发布,1995年9月29日在欧洲发布;PS One(轻薄版)于2000年7月7日在日本发布,2000年9月19日在北美发布,2000年9月29日在欧洲发布,它是将众多定制集成电路整合到一个芯片后的成果。
主板
有原版和标注版。展示的主板型号为 'SCPH - 1000',其余芯片安装在背面,后期型号使用SG - RAM代替了VRAM,并移除了大部分外部输入/输出和视频输出接口。还有标注了重要部件的主板。
架构图
主要架构图中,总线接口单元还连接到GPU和SPU的特殊端口。
快速介绍
索尼深知3D硬件开发可能复杂,所以推出的这款游戏机设计上“简单”又“实用”,不过可能有代价!
CPU
本节剖析索尼CXD8530BQ,它是游戏机中的两大芯片之一,即“片上系统”(System - on - Chip)。
起源
主处理器采用“由Y设计、基于Z架构、由W提供第二货源的X”模式,较难概括。先从历史背景说起。
一点历史
20世纪90年代初,许多流行CPU命运转折。8位处理器如Z80和6502风光不再;摩托罗拉68000及其他16位设计面临被取代;当时PC领域,安德鲁·S·塔嫩鲍姆(Andrew S. Tanenbaum)预测英特尔x86架构在家庭市场寿命只剩“五年”。此时,一波源于学术界的CPU进入主流设备市场,如MIPS、PowerPC、SPARC、ARM等,它们都遵循精简指令集计算机(Reduced Instruction Set Computer,RISC)架构,该架构规定单条指令不能同时进行内存访问和寄存器操作,使硬件设计师能简化执行指令电路并优化。
MIPS与索尼
MIPS计算机系统源于创始人将研究成果转化为实际处理器的热情,契合20世纪80年代硅谷风险投资家对创新的投资热情。其首款CPU “MIPS R2000”是首款采用RISC设计的商用CPU,用于许多UNIX工作站。1987年,硅图公司(SGI)采用并收购MIPS芯片,用于其设备,SGI在计算机图形市场有重要影响力。PlayStation开发前,MIPS转向基于IP授权的商业模式,其R3000A CPU属低端产品,从成本看是有吸引力的选择。索尼自行设计音频和图形芯片,需一款强大且价格合理的CPU驱动,以展示芯片能力并使游戏机有竞争力。
LSI与委托
LSI Logic是MIPS授权方,提供“自定义CPU”计划CoreWare服务,客户可从构建模块中组装定制CPU包。CoreWare库中“CW33300”模块源自LSI LR33300,LR33300和CW33300与MIPS R3000A系列二进制兼容,编程接口(MIPS I ISA)不变。最终,索尼委托LSI构建CPU包,选CW33300并修改,与其他模块集成到PlayStation主板芯片。
产品特性
最终CPU核心运行频率为33.87 MHz,有以下特性:
- MIPS I ISA:MIPS指令集架构首个版本,用32位字,含乘法和除法指令。
- 32个通用寄存器和2个乘/除寄存器:均为32位,一个通用寄存器 (`R0`) 硬连线为零。
- 32位数据总线:PS1中分为主总线(32位,连接MDEC和GPU)和副总线(16/8位,连接其余组件和输入/输出设备,由总线接口单元桥接,可访问GPU和SPU特殊端口)。
- 32位地址总线:可访问高达4 GB物理内存。
- 5级流水线:可同时处理多达五条指令。
- 4 KB指令缓存:可“隔离”,允许程序直接操作。
- 无数据缓存:1 KB内存映射到固定地址,称暂存器,作“快速SRAM”。
索尼提供2 MB RAM供通用使用,主板安装扩展数据输出(Extended Data Out,EDO)芯片,比典型DRAM效率略高、延迟更低。
接管CPU
图形、音频或CD驱动器等子系统需快速获取大量数据时,CPU可能无法满足。CD - ROM控制器、MDEC、GPU、SPU和并行端口可访问专用DMA控制器,直接内存访问(Direct Memory Access,DMA)接管主总线独立传输数据,吞吐量比通过CPU高,但CPU需设置DMA操作。DMA启动后,CPU无法访问主总线,除非暂存器有任务。
核心补充
CW33300支持最多配置四个协处理器,索尼定制了三个:
系统控制协处理器
“CP0”系统控制协处理器是MIPS CPU常见模块,在基于R3000的系统中,负责管理缓存实现,可直接访问数据缓存(暂存器形式)和指令缓存(缓存隔离),还处理中断、异常和断点。R3000核心依赖它使用许多组件,协处理器可控制CPU周边设备,是系统组成部分。后来基于R4000的系统将内存管理单元(Memory Management Unit,MMU)和转换后备缓冲器(Translation Lookaside Buffer,TLB)集成到该模块。
几何变换引擎
“CP2”几何变换引擎(Geometry Transformation Engine,GTE)是专门数学处理器,加速向量和矩阵计算。虽只处理定点类型,但为3D图形提供有用操作,如矩阵或向量运算、透视变换、外积、插值函数、深度提示和颜色值计算、Z/深度平均等,负责图形流水线初始阶段,为GPU渲染生成数据。
运动解码器
运动解码器(MDEC或宏块解码器)与CPU相邻,将“宏块”解压缩为GPU能理解的格式,宏块类似JPEG编码图像。MDEC可解压缩8x8像素、每像素24位的位图,每秒处理9000个宏块,能以每秒30帧的速度流式传输320x240像素的全动态视频(Full - Motion Video,FMV)。DMA用于传输压缩数据,数据也可反向传输到VRAM。它不是MIPS协处理器,CPU和DMA通过内存映射访问。更多信息可参考萨宾(Sabin)和切坎斯基(Czekański)的资料。
缺失的单元?
“CP1”为浮点运算单元(Floating - Point Unit,FPU)保留,但索尼未提供。CPU可用软件例程或定点运算进行小数运算,游戏逻辑可用定点运算,在精度和性能间权衡合理。想回顾“定点”“浮点”等概念,可阅读加布里埃尔·伊万切斯库(Gabriel Ivancescu)的文章。
大量延迟
CW33300是流水线处理器,会排队并并行执行多条指令,提高吞吐量,但可能导致流水线冒险。MIPS I架构易受控制冒险(指令可能在不该执行时执行)和数据冒险(指令可能用过时数据操作)影响。MIPS I CPU表现为:
- 任何跟随“分支”或“跳转”操作码的指令无条件执行,开发者需用简单指令填充流水线,称分支延迟槽。现代CPU可利用分支预测,条件不满足时丢弃推测性计算,满足时节省时间。
- “加载”指令获取数据时不使流水线停顿,当下一条指令依赖前一条“加载”指令数据时,需插入填充指令确保获取正确操作数。部分延迟槽填充有意义指令,并非浪费周期。
核心理念
RISC哲学将CPU编程负担转移到编译器,MIPS优先开发高质量编译器配合新CPU,设想开发者用高级语言,工具链自动处理冒险。向开发者暴露CPU流水线是MIPS核心设计策略,虽有缺点,但应对巧妙,不过暴露流水线使向后兼容性变棘手。
图形处理
图形流水线很大部分由GTE完成,处理后数据送索尼专有图形处理器单元(Graphics Processor Unit,GPU)渲染。
内容组织
系统有1 MB视频随机存取存储器(Video Random Access Memory,VRAM),存帧缓冲区、纹理等资源,CPU可用DMA填充。VRAM是双端口的,用两条16位总线,允许多方同时访问。后期版本改用同步图形随机存取存储器(Synchronous Graphics Random Access Memory,SGRAM)芯片(单端口,用单个32位数据总线),各有优缺点。后期游戏在基于VRAM的系统上运行可能有图形故障,马丁·科思(Martin Korth)的《Nocash PSX规格》文档记录了相关时序信息。
绘制场景
以失眠症工作室(Insomniac)的《小龙斯派罗:龙年》(Spyro: Year of the Dragon)为例说明。
指令
……(此处原文未完整,保持原文状态)