流水线mips模拟器_PPSSPP模拟器基本架构(一)

流水线mips模拟器_PPSSPP模拟器基本架构(一),第1张

版权

一、索尼PSP的软硬件体系

PSP首发于2004年,外观属于直板形式的一体式掌上游戏主机,支持插入卡带(一种特制小光盘UMD)。主要有3个系列,游戏彼此兼容。主要提升是更轻薄和更好的硬件特性。同时支持wlan无线网络和网络浏览器。

硬件体系采用两颗333MHZ的基于MIPS32 r4000的处理器,一颗作为主处理器,一颗做为图形和多媒体加速处理器使用。主内存容量为32M,图形显存为4M,后期升级型机器内存升级到64M,但是为了保持兼容性一般额外升级的内存作为缓存使用。最开始为了续航和维持电池寿命,CPU锁频为222MHZ,后期锁频被索尼解除。基中战神系列游戏必须运行在高主频模式上。

软件上使用裁剪的类BSD结构的UNIX操作系统,主要是底层函数接口部分和库的loader部分被索尼大量定制,二进制文件格式对ELF进行了一定的修改,不过整体上还是保留了BSD的系统结构。

PSP因为出色的图形表现和便携性,同时对多媒体音频视频支持良好,成为苹果iPhone出现之前最畅销的手持电子设备,不算后代的PSV,总销量大概8000万部。

PSV是索尼2011年发售的的掌机,同时兼容PSP游戏。因为外观相似度太高总是被人混为一谈,实际上PSV的硬件基于ARM平台,PPSSPP不可以运行针对PSV的游戏。

二、关于PPSSPP模拟器

PPSSPP是Henrik Rydgård设计的开源PSP模拟器,作者也是Dolphin模拟器的创建者之一,所以在系统架构上PPSSPP和Dolphin大致类似。PPSSPP通过对PSP的系统API进行高层行为模拟同时对MIPS的指令进行动态翻译即时编译执行的方式模拟运行PSP的游戏镜像。PPSSPP的性能非常高,在2019年主流手机运行PPSSPP都非常流畅,同时软件还支持扩展游戏分辨率,贴图分辨率调整,图像后期渲染,即时存档等功能。

三、PPSSPP的系统架构

1. 反汇编与即时编译模块

这一块位于源码目录Core/MIPS内,此模块为整个模拟器十分核心和对性能影响极其巨大的模块。位于子目录IR中的是PPSSPP设计的简单中间指令集,反编译的目标为中间指令集,之后再由中间指令集进行即时翻译或是编译到目标平台运行。IRinst.h文件定义了指令的操作码,实际上这层IR仅仅是对MIPS指令进行一定的抽象封装,寄存器也是直接使用MIPS的寄存器定义。精简指令集MIPS本身非常容易设计解释器,因此设计IR解释器也很容易。IRInterpreter.h和IRInterpreter.cpp定义了中间代码的解释器,不过一般此解释器为调试使用,在目标平台一般不启用此解释器。即时编译的架构如下图所示:

对于IR的优化主要是合并一些指令的操作,因为x86和ARM平台都有不少向量指令集的扩展,可以极大加速向量类的操作。同时针对指令流水线也可以进行一定不破坏语义的重排。对于即时编译部分作者没有利用开源的ASMJIT或是LLVM,而是重用了之前Dolphin模拟器中的已有模块。基本的即时编译过程并不复杂,主要是对虚拟的寄存器变量和内存变量进行操作,里面的关键是性能调优。

定义即时编译的相关接口类都在JitCommon.h头文件中,即时编译的基本模块是基本块,之后将之连接成函数并保存。为了让即时编译实现更加模块化,定义了即时编译的前端接口MIPSFrontendInterface,对于不同分类的指令分割到不同函数中实现而不用制造一下巨大的switch跳转表。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 流水线mips模拟器_PPSSPP模拟器基本架构(一)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情