I/O 指令输入系统:
1、在主循环中通过0x30000和0x340000找到0x9F68:
A:0x9F68 翻译:UpdateP1P2KeyState。
B:0x9F68 是从IO的0x300000、0x340000接口读取P1,P2的输入。
2、往下找到0x9FC8:
A:5A44 翻译:P1KeyAnd2Frames。
B:5A48 翻译:P1CheckResult。
C:0x9FC8 move.b D1,($5A44,A5) 其中A5=108000,找到108000+5A44=10DA44。
3、0x12914 代码是做出招判定的,断下0x12914可看出A0,A1,A2,A3寄存器的内容:
A:A0 0xA6E38 ROM地址是一个数组翻译CheckTable。
B:分左检查表,右检查表,不同人物地址不一样。
4、A1 0x10DA48 翻译:CheckResult,是出招结果00A8 2A02:
A、二进制表示00 00 00 00 10 10 10 00 00 10 10 10 00 00 00 00
B、00 00 00 00 表示:0xA6E38 - 0xA6E44的出招。
C、10 10 10 00 表示:0xA6E48 - 0xA6E54,其中1是系统用的。
D、00 10 10 10 表示:0xA6E58 - 0xA6E64
E、00 00 00 00 表示:0xA6E68 - 0xA6E74
5、A2 0x10E79C 翻译:ACT队列,输入缓存区,来自0x10DA44。
6、A3 0x10DA44
输入存储地址,每一帧从IO的0x300000接口读取输入到WORKRAM区域,AP2位置的人物输入:
A、10DA5B a1CheckResult。
B、10e9ea 判断0x10 0x20,然后通过0xA6E38地址找到ROM里对应的出招表。
7、在wiki上找到的对应键:
8、草薙详细分析 00A8 2A02:
A、0x10E79C + 0x40 + 0x4 = 0x10E7DC
0 = equal
4 = contain
8 = containABCD
C = loc_12AA2
10 = hold
14 = containDirections
18 = containDirectionsNotABCD
1C = containABCDNotDirections
20 = loc_12C8A
24 = loc_12CCA
28 = loc_12D0A
B、0xA6E38 - 0xA6E44
A7BFC:0308 0000 0008 0000 0008 = 前跑 01
A7BF2:0308 0000 0004 0000 0004 = 后跳 04
A7C06:0312 0000 0000 0402 0401 = 小跳 10
A7BF0:FF00
C、0xA6E48 - 0xA6E54
A7BF0:FF00
A7CD2:040E 0000 1408 2802 0408 04F0 = 828X 鬼燃烧 AC
04 = 4个word;e = 15帧;0000 = 蓄力;14、28、4、4 = 比较方式;F0 = 表示ABCD一起按,按任意一个。
A7CC6:040E 0000 1404 2802 0404 04F0 = 424X 独乐屠 B8
A7C64:624X 雷韧拳 居合蹴 C8
D、0xA6E58 - 0xA6E64
A7C30 = 236X 琴月阳 2B
A7C24 = 214X 鹤摘 2C
A7D6E = 2426X 大蛇雉 3A
A7BF0 FF00
E、0xA6E68 - 0xA6C
F、A7E3A = 26236x 无式