【前言】
看了lula大的SFC中文化经验谈后就有想法也写一下自己做FC中文化的一些心得,
但一直没付诸行动,趁著最近有点动力,赶快让自己动手,
希望不要烂尾 XD
【正文】
本篇想先说些开始作业前一些我觉得先了解会有帮助的事项,
当然仅止于我了解的,可能有所谬误,还请协助指正。
==========================================================================
一、关于红白机
1. NES格式的档案区块
NES格式分三个区块,依存放顺序为Header、PRG-ROM、CHR-ROM,
通常情况下PRG是储存程式码及资料的,CHR是储存图形,
但本质上都是资料,所以也有把非图形资料存在CHR的案例,
而Header应该是给模拟器使用的,
主要用来标示游戏的Mapper、PRG和CHR的大小等资讯,
因此如果没有Header,有些模拟器会无法开启;
PRG、CHR个别游戏大小不一定,Header则是固定16Bytes放在档案前。
(图:光神话的Header资讯,标示[iNes]的内容皆来自前16Bytes)
https://meee.com.tw/sirFyzT
(图:超级玛利欧将部分资料写在CHR里(红框处))
https://meee.com.tw/YjpseBr
2. 主机的内存
CPU RAM: 要执行的程式或资料都要放进这里,
其中0x8000~0xFFFF(后32KByte)会映射卡匣里的PRG-ROM
PPU RAM: 要显示的图形都要放进这里
其中0x0000~0x1FFF放Tile,中文化要改动的字库就在这里
3. Mapper
由于主机能映射卡匣的PRG位置只有0x8000~0xFFFF(32KByte),
Tile也只能放进PPU的0x0000~0x1FFF(8Kbyte),
初期游戏如超级玛利欧1(PRG:32K、CHR:8K)刚刚好可以全部加载没什么问题,
但大一点的游戏就会爆掉,例如前述提到的光神话PRG就有128K,超出FC的规格,
所以FC用Mapper来让开发者决定哪一区块的PRG或CHR放进RAM里,
除非可以维持档案大小不变(卡匣未使用的空间够多),
不然要做中文化大概率避免不了要跟Mapper打交道。
4. CHR-ROM
开发者可以决定把哪一区块(Bank)的CHR-ROM放进内存,
所以每次要切换进PPU的大小是以区块为单位,
而每区块实际多大要看使用的Mapper规范,
这种方式好处是不管多大的图形量都可以在一瞬间全部切进VRam,
坏处就是不灵活,每一区块内容一开始就固定了,
所以得预先将要同时出现的图形整理在同一区块里,
但我个人喜欢这类型的ROM。
5. CHR-RAM
有些游戏没有CHR-ROM,图形资料是存PRG-ROM里,
要显示时是1Byte 1Byte写进PPU RAM的,
这类游戏使用的就是CHR-RAM,前述提到的光神话也在此列。
==========================================================================
二、工具
工具方面,lula大提到的的工具除模拟器外都可以适用,
故只需挑选好用的FC模拟器即可,
我个人目前是用Mesen,
但其实任一款有附带debugger的模拟器都可以,
只是更强大的工具自然可以更好的完成工作,
所以除了debugger(用来看程式码)外,
最好也要有Memory edit(直接修改CPU、PPU的内存内容)、
PPU Viewer(图形化显示PPU RAM)等功能;
一开始我使用fceuxdsp,后来使用fceux(fceu系列的最终版),现在则使用Mesen
==========================================================================
三、Mesen
大概介绍一下会用到的功能
1. Tools -> Log Window(查看ROM的格式)
https://meee.com.tw/sirFyzT
2. Debug -> Debugger(查看原始码、中断点设定)
https://meee.com.tw/AQtO7VN
3. Debug -> Memory Tools (检视所有内存内容,最常会观察的是CPU和PPU)
https://meee.com.tw/xWyvhAq
4. Debug -> PPU Viewer(图形化显示PPU RAM)
https://meee.com.tw/lapLSVj
大概就先这样。