mednafen 模拟器
https://github.com/pce-devel/mednafenPceDev/releases
分析 PCE 游戏的话,不推荐下官网的 mednafen 模拟器,推荐上面链接的改版 mednafen。因为原版模拟器的调试器文字比较小,这个版本做了大字优化,并新增了一些调试功能。
使用方法:
命令行输入:mednafen.exe "游戏cue文件路径" 开始游戏,或者在 mednafen.exe 上右键 => 创建快捷方式,在快捷方式上右键 => 属性,在目标这里追加后缀:"游戏cue文件路径"
其它命令行参数:https://mednafen.github.io/documentation/#Section_command_line
常用快捷键:
Alt + D:调出调试器
Alt + D,Alt + 1:切到调试器的汇编页
Alt + D,Alt + 3:切到调试器各种内存的信息页,用 "逗号" 和 "句号" 快捷键切换内存,显存,调色板等信息
Alt + D,Alt + 4:切换到调试器的日志页,按 T 后,可以在输出文字时看到相关日志
G:汇编页上跳到指定汇编地址
空格:在当前汇编地址下断点
S:单步执行
R:继续执行
Ctrl + 0:精灵图边框高亮
Ctrl + 1:开关背景图
Ctrl + 2:开关精灵图
完整快捷键:https://mednafen.github.io/documentation/debugger.html,还有内存/显存读取/写入断点,导出/导入内存/显存等功能
注意:使用 Alt + D 打开调试器时,默认会自动暂停游戏,如果想继续游戏,就 Alt + 1 切到汇编页,然后按 R 继续;如果不想每次一调试就自动暂停游戏,可找到模拟器目录下的 mednafen.cfg,把 debugger.haltondebug 的值从 1 改成 0,重启
PCE 官方文档集
https://pan.baidu.com/s/14naspu-6n31qGFalZAHRDQ?pwd=jwba
核心资料,如果只选一个链接的话我会给这个,因为后面很多博客和网站不过是它一些内容的重复,且里面提供的信息可与 mednafen 调试器相互印证
一、《HuC6280 - CMOS 8-bit Microprocessor Software Manual.pdf》:调试器汇编页说明书
二、《HuC6270 - CMOS Video Display Controller Manual.pdf》:调试器 "VRAM" 页,"SAT" 页说明书。主要知道图片有两种格式,精灵图和背景图。显存由精灵图属性表(SAT),背景图属性表(BAT),精灵图(SG)和背景图(CG)四部分组成
三、《HuC6260 - CMOS Video Color Encoder Manual.pdf》:调试器 "VCE Palette RAM" 页说明书。PCE 的两种图片格式都是是索引图像。索引图像并不直接存储每个像素的RGB颜色值,而是每像素存储一个颜色索引值。这些索引值结合一个预定义的调色板(颜色查找表)得到RGB颜色,颜色表就存在 VCE
四、《HuC6280 - CMOS Programmable Sound Generator Manual.pdf》:调试器 "PSG ..." 页说明书,音频文档
五、《Hu7 CD System - BIOS Manual.pdf》:bios 文件的函数文档。bios 文件之于 pce,就像 dll 文件之于 windows,它提供函数实现,ROM 只管调用
比如搜索 GETFNT (一个重要的文字打印的 bios 函数)
可以知道这个函数接受一个 sjis 编码,字体尺寸和一个内存地址。然后找到字库里 sjis 码对应的字模数据,复制到指定内存地址;
可以知道这个函数编号是 E060,意味着可在调试器下断点 E060 断到;
可以知道输入参数 _AX (对应零页内存 F8 F9) 是 sjis 编码,_BX (对应 FA FB) 是字模数据输出地址,_DH(对应 FF)是字体尺寸,输出参数 AREG(对应寄存器 A)是编码是否正确

注:_AX, _BX 等符号对应的内存含义,在 bios 文档 44 页,或者 https://blockos.github.io/HuDK/doc/files/include/system-inc.html 可以查到
6502 汇编语言入门
https://codediy.github.io/nes-zh/easy6502/index.html
看完这个教程就可以上手分析游戏的汇编了,不过 Huc6280 的汇编语言是 6502 的超集,一些专有指令教程没提到,可以把 《HuC6280 - CMOS 8-bit Microprocessor Software Manual.pdf》上传 deepseek 之类的 AI,然后问具体指令什么意思
Translation Patch Post 2: Isolating Text & Print Function
https://www.pcengine-fx.com/forums/index.php?topic=23355.0
https://www.pcengine-fx.com/forums/index.php?topic=23352.0
https://www.pcengine-fx.com/forums/index.php?topic=23357.0
https://www.pcengine-fx.com/forums/index.php?topic=23364.0
新手翻译教学,作者一共发了 4 篇,Post 2 这篇最有用,其它的大概看下就行,因为我们不是英化,不用搞打印函数
Lesson 1 - Hacking Team Innocent PCFX (Part 1)
https://www.youtube.com/watch?v=KR8fRpvbFKU&t=574s&ab_channel=esperknight
虽然是 pc-fx 游戏,但同样用的是 mednafen 工具,领会操作和思路就行
PC Engine/TurboGrafx-16 架构
https://www.copetti.org/zh-hans/writings/consoles/pc-engine/
PC Engine 架构科普文,虽然里面提到的官方文档集都有,但它总结得很好,而且还是中文的
MagicKit Homepage
www.magicengine.com/mkit/
nes 和 pce 程序编译器,但工具不是重点,重点是这个网站 DOC 页面的电子书文档。它讲解了 CPU,内存结构,图片数据结构等细节,虽然在官方文档也有,但这里写得更好
Huc6280 Assembly programming for the PC Engine
https://www.chibiakumas.com/6502/pcengine.php
换个角度讲 pce 的内存和显存结构
PC-Engine ASM programming (Youtube)
https://www.chrismcovell.com/PCEdev/
pce 自制程序系列教学视频。不止汇编,还讲了调试器使用,声音,图像,文字等细节
online guide for PC Engine homebrew
https://obeybrew.com/tutorials.html
pce 自制程序教程
Elmer's PC Engine Programming Resource Links
https://pcengine.proboards.com/thread/218/elmers-engine-programming-resource-links
pc engine 论坛神贴
《PC 机汇编语言实战精解》字模原理
genie52.com/asmbook/page240.html
知乎 - 游戏汉化时使用的像素字体
https://zhuanlan.zhihu.com/p/573922877
pce-cd 的 bios 有两个字库,一个是 16x16 字库,每个字模是 (16x16=)256 比特,占 (256/8=)32 字节;一个是 12x12 字库,每个字模占 18 字节。之前提过 GETFNT 会把字模数据输出到指定地址,字模数据指的就是这 32 或 18 字节
16x16 字库从 bios 文件的 0x10000 处开始,12x12 字库从 0x30000 开始,每个字库都是 3418 个字
如果你做到修改字库这一步,那么一定会考虑这个问题——“字库里每个字的 sjis 编码,与这个字的位置序号的映射关系是什么?”。这个问题我分析过,整理在:https://pan.baidu.com/s/1tYPd3SBQWwENrgbR9VgkCg?pwd=bhwi
注意:修改字库时,16x16 字库要选择 16x16 点阵的字体,12x12 字库要选 12x12 点阵字体。因为如果字库尺寸不是所选字体的点阵尺寸的整数倍,做出的字形会出现粗细划。
光盘数据结构
https://wenku.baidu.com/view/9fc3a2b2d7d8d15abe23482fb4daa58da0111ca2.html
https://blog.csdn.net/markduan/article/details/5436615
https://fenying.net/post/2013/11/15/cue-file-format/
PCE-CD 的游戏 bin/iso 数据结构,遵循 CD-ROM 黄皮书标准。简单讲,就是 bin/iso 文件 = 2352(一个扇区) * N,而每个扇区 2352 = 12 + 4 + 2048(数据) + 4(EDC) + 8(8 个 00) + 276(ECC)。其中,EDC 是校验码,ECC 是纠错码
光盘检验码与纠错码
https://github.com/pce-devel/mednafenPceDev/blob/main/mednafen/src/cdrom/crc32.cpp
https://github.com/DigiDigi/mode1_ECCregen
https://github.com/pce-devel/mednafenPceDev/blob/main/mednafen/src/cdrom/scsicd.cpp#L592
https://blog.csdn.net/ggbondg/article/details/3933336
校验码是用 crc32 算出,纠错码是对扇区 2352 中,跳过前 12 字节后的 2064 字节(4 + 2048 + 4 + 8 = 2064) 用 RSPC(Reed-Solomon Product Code) 算法得到的 276 字节。其中,RS 算法可参考《二维码的秘密》
其它模拟器不清楚,如果只看 mednafen,会发现只要算对检验码即可(参考第 3 个链接 edc_lec_check_and_correct 函数),不用算纠错码。
PCE 游戏下载站点1 myabandomware
https://www.myabandonware.com/browse/platform/turbografx-cd/
部分分级游戏默认搜索不到,可在搜索框下的 theme 这里选 adult 显示隐藏
PCE 游戏下载站点2 planetemu
https://www.planetemu.net/roms/nec-pc-engine-cd-turbografx-cd-games
YYCHR
https://3q.9527.tw/155
我用它看 bios 文件的 16x16 字库,还有 mednafen 导出的 VRAM 里的图片
看字库

看显存
