●Step 2:移植XIP
利用XIPPort,点击dump xip.bin(图3 ),得到OUT文件夹。先按write maps纪录修改前面的地址,将MAP.txt文件另存后再按make pkgs进行整理。替换除OEMXIPKernel文件夹之外的其它文件后,按“undo”→“realloc P”重排地址。
图3
若提示出错,可能是地址重排时出现地址重叠,只要按照之前另存的MAP.txt文件中的顺序,按照新替换的文件大小,重新计算后修改新替换文件的imageinfo.txt中的地址“e32_vbase:”和“o32[1].o32_realaddr:”,然后再次进行realloc P地址重排即可。有时出错是因为替换的新文件超过原来的限制,这时有两个方法:一是删除并不需要的文件后再重排地址;二就是对XIP的大小进行扩容,具体操作为:
打开romhdr.txt,我们主要修改这几个内容:
physfirst: P=80000000
physlast: 803E1A3C
nummods: (00000022)
ulRAMStart: R=803E2000
ulRAMFree: 80487000
ulRAMEnd: 83400000
physfirst是起始地址,physlast是结束地址,我们要增大1M的空间,就要把physlast的地址改后1M(即修改成804E1A3C),后面的ulRAMStart和ulRAMFree也要顺着延后1M地址才行,结果如下:
physfirst: P=80000000
physlast: 804E1A3C
nummods: (00000022)
ulRAMStart: R=804E2000
ulRAMFree: 80587000
ulRAMEnd: 83400000
保存关闭后,点击xipport的realloc P,若没有再报错,则说明空间足够大了。点击write maps,将重新分配模板位置的值写进map.txt。然后再进入out目录,打开map.txt查看有没有地址冲突。如果有冲突,需要修改新替换文件的imageinfo.txt中的地址。
对比修改前后的map.txt文件,可以发现原本在RAM里有几个模块而现在没有了。这是因为加大地址后把那些文件都挤出了地址范围,为此我们要将这些模块加回来。
此外,从修改后的map.txt文件中不难看出physlast从地址80477e8a就已经结束了,后面多出“80477e8a - 804e1a3c L00069bb2 NUL”,重新修改一下ROMHDR.txt,将physlast修改成80477e8c,保存退出后再用xipport realloc P、write maps。打开ROMHDR.txt,把ulRAMStart修改成80478000。
接下来需要往map.txt中加入nk、hd.dll、osaxst0.dd和osaxst1.dll模块,后用xipport realloc P、write maps处理,得到如下结果:
80478000 - 80478000 L00000000 Sart: start of RAM
80478000 - 80479000 L00001000 nitialized data of region_1 hd.dll
80479000 - 8047d000 L00004000 nitialized data of region_1 osaxst0.dll
8047d000 - 8047e000 L00001000 nitialized data of region_1 osaxst1.dll
8047e000 - 80480000 L00002000 NUL
80480000 - 80486000 L00006000 uninitialized data of region_1 nk.exe
80486000 - 80504000 L0007e000 initialized data of region_2 nk.exe
80504000 - 80517000 L00013000 initialized data of region_1 kd.dll
80517000 - 80517000 L00000000 ------ start of RAM free space
80517000 - 83400000 L02ee9000 NUL
83400000 - 83400000 L00000000 End: end of RAM
点击xipport的build xip_out.bin,会生成一个xip_out.bin,这就是替换后的新XIP了,接着我们要导入xip_out.bin到os.nb.payload里。如图4所示,在xipport的“write xip_out.bin to:”两个框填00320000(XIP的起始地址)及OS.NB.payload(要导入的文件名),然后按一下write xip_out.bin就可以了。
图4
SYS移植
SYS的移植其实很简单,不管从任何渠道得到的SYS文件,只需要保留原SYS文件夹中的.VM和.ROM文件夹即可,其余部分可以完全替换。
PRB模式下的ROM移植
前文已反复多次提到,在PRB模式下可自动移植并对模块文件进行重新排列,那么在PRB模式下进行ROM移植将会是一件非常简单的事情,这也是为什么众多的ROM爱好者喜欢用PRB生成ROM的原因之一。在PRB模式下,仅需替换掉MSXIPKernel内的所有文件,即可完成ROM移植。