Emulator 板


LINE

【前言】 要修改自然得找到想修改的目标, 例如要制作生命不减的ROM至少得知道储放生命值的记忆体在哪, 故找到目标便是首要作业; 仔细想想,这讲完好像就没了 XD 【正文】 我们要找到的目标大致有两个,一个是字库,一个是文本, 这两个在画面显示时,肯定都在PPU里, 其中字库在显示当下会放在PPU的0x0000~0x1FFF (不只字库,包含背景、人物图像都会在此), 而文本则会放在PPU的0x2000~0x3FFF (不只文本,包含背景、人物组成以及调色盘都会在此)。 一、字库 说是字库,其实也就是图形长得像文字,和其他包括背景或人物图形没什麽差别; 由於画面上所有东西肯定都在PPU里,使用PPUViewer(或检视PPU Memory)可以找到; 不过大部分的案例直接开启tlp工具通常就找的到。 1. 透过tlp或YYCHR之类的工具找 由於红白机的ROM,通常未压缩,或者说未编码过, 所以使用工具直接开启ROM档,即可直接看到图形部分。 图为光神话,红框的数字即是图形在档案中的起始位置 https://meee.com.tw/b2tmFpR 2. 透过PPU Viewer找到 开启Mesen的PPU Viewer,切到CHR Viewer页签, 此页签显示的即是PPU的0x0000~0x1FFF的内容, 很直观可以看到0~9、A~z等等文字, 我们可以在0上面按右键→Edit in Memory Viewer, 这样模拟器会自动帮我们开启Memory Tools,并且定位到0这个字的位置, 其中位於0x1000~0x100F这16Bytes (38 4C C6 C6 C6 64 38 00 00 00 00 00 00 00 00 00)便是0的pixel data, 此时使用任意16进位编辑器(UltraEdit之类的软体)开启ROM, 并且搜寻38 4C C6 C6 C6 64 38 00 00 00 00 00 00 00 00 00 高机率可以找到0在ROM里的位置, 实际搜寻可以发现位置在ROM的0x1010,和第1点的方式显示的位置一致。 (图为PPU Viewer) https://meee.com.tw/Hf5aWZq (图为PPU Viewer的右键选单,选择使用Edit in Memory Viewer) https://meee.com.tw/mqTGueL (图为Memory Tools for PPU,已定位到字库位置) https://meee.com.tw/yCiZlc4 (图为搜寻到字库在ROM档里的位置) https://meee.com.tw/wIMO6I7 3. 如果以上方法找不到,那代表图形有压缩或是编码过,在红白机很少见, 这代表图像肯定是1 byte 1byte写进PPU的,得要追踪程式。 4. 找到後就可以建立所谓的码表, 其实就是每一单位(红白机叫做Tile,一Tile为8x8像素,实际占用16bytes) 的图片编号表,依前面找到的可以建立出这样的编号表 00 = 0 01 = 1 … 0F = - … 2F = Z … ========================================================================== 二、文字 1. 文字的找寻方式大致可参考前述第一项第2点, 一样是开启PPU Viewer,透过PPU Viewer快速跳到Memory Tools, 就可以看到显示在画面上的文字实际的的编码 图为指标选中PUSH START的P时的资讯, 其中可以看到P的编码是0x31,位置(PPU Addr)在0x21E7 https://meee.com.tw/NiYS6hx 图为Memory Tools显示PPU, https://meee.com.tw/rJduFxz 其中 0x31 = P 0x5D = U 0xC0 = S 0x64 = H .... 2. 找到文字的编码後,一样可以在ROM档里搜寻到 https://meee.com.tw/vP2uH0q ========================================================================== 三、如果前面方法找不到,如何分析 0. 首先稍微说明一下CPU如何读写PPU CPU是透过两个Port来读写PPU, 0x2006: 决定要写入的PPU位置 0x2007: 要写入的值 也就是如果CPU想要将0x31写到PPU的0x21E7这个位置时, 首先得先透过0x2006将欲读写的位置指定成0x21E7, 然後再往0x2007这个位置写入0x31即可; 实际程式码会是, LDA #$21 STA $2006 LDA #$E7 STA $2006 LDA #$31 STA $2007 可以看到2006被写两次,肇因於红白机能读写的数值是1byte, 但PPU位置是2Bytes, 所以红白机分两次写入(先写高byte再写低byte)来达到目的。 1. 首先使用debugger针对PPU做写入侦测的中断点 图为如何设定中断点 https://meee.com.tw/C3scTqY 2. 让程式回到文字显示之前重跑 此处案例为开头画面,故只要reset即可, 其他时候会在显示文字前先即时存档来方便重跑, 如果中断点设定正确,程式会在对应的位置中断; 图为程式中断 https://meee.com.tw/bjWV8u6 此处案例可以看到如下程式码, … LDA ($43),Y @ $A2E8 = $31 STA PpuData 2007 = $00 INY … 并且会停在在STA PpuData 2007这行,这就是前面说的CPU正透过$2007写入PPU, 写入值是0x31也符合我们已知道的文字P的编码,故可确认此找到的程式正确 3. 检视记忆体 前面找到的程式码, 其中LDA ($43),Y @ $A2E8 = $31是资料来源, 意思是读取0xA2E8位置的值放进暂存器A, 所以P(0x31)来自0xA2E8这个位置, 此时可以打开Memory Tools,并跳到0xA2E8这个位置 图为0xA2E8的记忆体内容 https://meee.com.tw/XPmLRuF 4. 依样画葫芦便能在ROM中找到位置 图为在ROM中搜寻31 5D C0 64 12 C0 C3 A7,并确实找到 https://meee.com.tw/r7pHSGY 以上,字库跟文本都找到了,只要异动这两个地方, 就可以达到在画面上显示自己要的东西,当然也包括中文字。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.192.217.145 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Emulator/M.1733198181.A.7C1.html
1F:推 gfneo: 推 12/03 11:59
2F:推 msun: 推 12/03 13:17
3F:推 tinyfan: 看不懂但还是要推 12/03 13:40
4F:推 djboy: 先推再说 12/03 16:23
5F:推 if4: 谢谢心得 XD 12/03 16:52
6F:推 articlebear: 推 12/03 19:21
7F:推 sdbsy14242: 长知识,感谢分享 12/04 08:48
8F:推 picefun: 这必须推 12/04 11:41
9F:推 samyes: 推~ 12/04 12:27
10F:推 kf0916: 不明觉厉 12/04 13:41
11F:推 EDGE: 推分享~ 12/04 19:43
12F:推 bgworld: 推,虽然不懂 12/04 20:20
13F:推 if4: 是啊,我也不懂 XD 12/04 22:39
14F:推 xxgreen: 推 12/05 00:31
15F:推 edaeda: 不懂但是推 12/07 11:52
16F:→ reiden: 好像有点懂,但真的大感谢分享 12/08 12:02
17F:推 aaaaagw: 推,真的辛苦QQ 12/11 05:46
18F:→ aaaaagw: 抽屉和上面的标签都得找到才能换 12/11 05:48
※ 编辑: ADHI (123.192.216.201 台湾), 06/20/2025 14:31:14







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP