M1与V的解释与应用

关于M1的基地址数据:(KOF2K2)
1600番台 (NN×6) + 6090
.1700番台 (NN×6) + 5AF0
.1800番台 (NN×6) + 3FE4
.1A00番台 (NN×6) + 4470
.1B00番台 (NN×6) + 5550
.1C00番台 (NN×6) + 4A10
.1D00番台 (NN×B) + 6BF0
.1E00番台 (NN×6) + 4FB0
.1F00番台 (NN×6) + 6630
关于M1的基地址数据:(KOF2K1)
.1600番台 (NN×6) + 61A4
.1700番台 (NN×6) + 5C04
.1800番台 (NN×6) + 3FE4
.1A00番台 (NN×6) + 4584
.1B00番台 (NN×6) + 5664
.1C00番台 (NN×6) + 4B24
.1D00番台 (NN×B) + 6C0E
.1E00番台 (NN×6) + 50C4
.1F00番台 (NN×6) + 664E
关于M1的基地址数据:(KOF98)
1600番台 (NN×6) + 604C
.1700番台 (NN×6) + 5A4C
.1800番台 (NN×6) + 3C4C
.1A00番台 (NN×6) + 424C
.1B00番台 (NN×6) + 544c
.1C00番台 (NN×6) + 484c
.1D00番台 (NN×B) + 65fa
.1E00番台 (NN×6) + 4E4C
.1F00番台 (NN×6) + 65FA
关于M1的基地址数据:(KOF97)
1600番台 (NN×6) + 7218
.1700番台 (NN×6) + 66f8
.1800番台 (NN×6) + 48d8
.1A00番台 (NN×6) + 4ed8
.1B00番台 (NN×6) + 60d8
.1C00番台 (NN×6) + 54d8
.1D00番台 (NN×B) + 66F8
.1E00番台 (NN×6) + 5ad8
.1F00番台 (NN×6) + 4838
关于M1的基地址数据:(KOF99)
1600番台 (NN×6) + 65d9
.1700番台 (NN×6) + 6075
.1800番台 (NN×6) + 432f
.1A00番台 (NN×6) + 492f
.1B00番台 (NN×6) + 5a75
.1C00番台 (NN×6) + 4e75
.1D00番台 (NN×B) + 74aa
.1E00番台 (NN×6) + 5475
.1F00番台 (NN×6) + 6995
关于M1的基地址数据:(KOF2K)
.1600番台 (NN×6) + 61A4
.1700番台 (NN×6) + 5C04
.1800番台 (NN×6) + 3FE4
.1A00番台 (NN×6) + 4584
.1B00番台 (NN×6) + 5664
.1C00番台 (NN×6) + 4B24
.1D00番台 (NN×B) + 6d04
.1E00番台 (NN×6) + 50C4
.1F00番台 (NN×6) + 6744
关于M1的基地址数据:(KOF96)
1600番台 (NN×6) + 5e38
.1700番台 (NN×6) + 5b9a
.1800番台 (NN×6) + 3edc
.1A00番台 (NN×6) + 447c
.1B00番台 (NN×6) + 55aa
.1C00番台 (NN×6) + 49aa
.1D00番台 (NN×B) + 3edc
.1E00番台 (NN×6) + 4faa
.1F00番台 (NN×6) + 3e3c
嗯,
计算方法:
98 BGM
jsr $7a6e.l ;场景音乐写入
就拿98的8神暗勾手为例:
根据暗勾手的招式程序里
0713EC 303C 03BC MOVE.W #0x3BC,D0
0713F0 4EB8 7A98 JSR 0x7A98
在程序7A98里,得到声音转换ID的基地址为A9BCE。
007A98: 41F9 000A 9BCE lea $a9bce.l, A0
007A9E: 3200 move.w D0, D1
007AA0: D040 add.w D0, D0
007AA2: 3B70 0000 593C move.w (A0,D0.w), ($593c,A5) ;;;
007AA8: 41ED 5940 lea ($5940,A5), A0
007AAC: 7000 moveq #$0, D0
007AAE: 102D 5938 move.b ($5938,A5), D0
007AB2: 31AD 593C 0000 move.w ($593c,A5), (A0,D0.w) ;新声音寻址参数(id+声音编号)
007AB8: 542D 5938 addq.b #2, ($5938,A5) ;新声音启动标志
007ABC: 4E75 rts
所以,3BC*2+A9BCE=AA346,在AA346里,得暗勾手的声音ID:1B9B。即($593c,A5)的写入值为1B9B
007A46: 7000 moveq #$0, D0
007A48: 41ED 5940 lea ($5940,A5), A0
007A4C: 102D 5939 move.b ($5939,A5), D0
007A50: B02D 5938 cmp.b ($5938,A5), D0 ;新声音启动标志,不一样,启动
007A54: 6716 beq $7a6c
007A56: 522D 5939 addq.b #1, ($5939,A5)
007A5A: 1030 0000 move.b (A0,D0.w), D0 ;新声音的人物id号,为0?
007A5E: 67EC beq $7a4c
007A60: 0C00 0001 cmpi.b #$1, D0
007A64: 6706 beq $7a6c
007A66: 13C0 0032 0000 move.b D0, $320000.l ;68K芯片音频输出端口
007A6C: 4E75 rts
DASM kof98z80.asm,0,ffff,0,AUDIOCPU
获得z80芯片反汇编源码
因为,1B9B=1B00+9B,所以,查找公式得
1B00番台 (NN×6) + 544c
所以,9B*6+544C=57EE
013C: ld a,($FD67)
013F: ld b,a
0140: ld a,($FD66)
0143: cp b
0144: jr z,$012B
0146: ld hl,$FD66 ;新声音启动
0149: inc (hl)
014A: and $3F
014C: ld e,a
014D: ld d,$00
014F: ld hl,$FD25
0152: add hl,de
0153: ld a,(hl)
0121: ld ($FD18),a ;AF==1B ,1b为音轨类型
0124: call $0175
0175: cp $20
0177: jr nc,$017C ;音轨超20为BGM,20为静音,21+为实际bgm
0179: jp $0D6B ;
0D6B: ld a,($FD18)
0D6E: ld e,a
0D6F: ld d,$00
0D71: ld hl,$0D7B
0D74: add hl,de
0D75: add hl,de ;$0D7B+1B*2
0D76: ld e,(hl) ;2位地址低位
0D77: inc hl
0D78: ld d,(hl) ;2位地址高位
0D79: ex de,hl ;获得完整2位地址
0D7A: jp (hl) ;不同音轨,初始寻址载入
0EE5: call $0F1A ;DE==9B
0EE8: ret z
0EE9: ld a,$04
0EEB: ld ix,($2E16) ;ix写入544C
0EEF: jp $0EB6
0EB6: ld ($FD68),a ;
0EB9: ld a,$18
0EBB: ld ($FD19),a
0EBE: ld a,($FD18)
0EC1: di
0EC2: jp $0204 ;
0217: ld l,e
0218: ld h,$00
021A: ld d,h
021B: add hl,hl
021C: add hl,de
021D: add hl,hl
021E: ex de,hl ;9B*6
021F: add ix,de ;9B*6+544C=57EE
0221: call $0439
0224: ret c
0439: push iy
043B: ld c,(ix+$00)
043E: ld a,($FD68)
0441: ld e,a
0442: call $0463
0445: jr nc,$044A
0447: pop iy
0449: ret
这个57ED就是暗勾手的M1调用V声音地址了
-------------------------------------------------------
在M1地址:57EE得以下数据:50 77 6E 92 6E DC
50为优先顺序;
77 6E为开始地址;926E为结束地址;V的地址数据为,6E77---6E92
DC中的C为音量大小,是特殊值,D的二进制是1101左声道,右声道,不扩展,开启增益
(开启扩展,只在开启双声道+增益才有效。也就是Fx才有效
正常使用v1~v4。开启扩展,会寻址v5~v8)
得这个M1调用V的地址数据为,6E77---6E92
这6E77--6E92代表的V的地址为
6E77*100---(6E93*100-1)
这个就是暗勾手的V的声音代码的地址范围了。
50 77 6E 92 6E DC
V地址是6E77-6E92
50 77 6E 92 6E FC
V地址是16E77-16E92
因为V的文件只有4M,也就是说一个V的地址只有3FFFFF,
所以得到的地址如果比3FFFFF大,就减去3FFFFF,然后再与3FFFFF比较,如果小的话
就在V2,并且减了得到的地址就是V2的地址;如果还是大于,就再减3FFFFF,再与3FFFFFF比较,如果小于的话,就在V3,并且减了得到的地址就是V3的地址;如果大于。。。。。。。。。。。。。。。。。。。。。
-------------------------------------------
98 BGM分析
0121: ld ($FD18),a ;AF==1B ,1b为音轨类型
0124: call $0175
0175: cp $20
0177: jr nc,$017C ;音轨超20为BGM,20为静音,21+为实际bgm
0179: jp $0D6B ;
017C: ld d,a
017D: sub $20 ;id-20
017F: ld e,a
0180: ld a,d
0181: ld d,$00
0183: ld hl,$3038
0186: add hl,de ;3038+id-20
0187: ld e,a ;id
0188: ld a,(hl) ;(3038+id-20)
0189: or a
018A: ret z
018B: dec a
018C: jp z,$0D6B
018F: dec a
0190: jp z,$01A4
0193: dec a
0194: jp z,$01D3
0197: dec a
0198: jp z,$06CD
019B: dec a
019C: jp z,$0AC0
019F: xor a
01A0: ld ($FD18),a
01A3: ret
01A4: ld b,e
01A5: xor a
01A6: ld ($FD0E),a
01A9: jp $10E5
10E5: di
10E6: ld a,($FD11)
10E9: or a
10EA: ret nz
10EB: ld a,$00
10ED: ld ($FDA2),a
10F0: ld a,b ;id
10F1: sub $20 ;id-20
10F3: ld hl,$2BA2
10F6: or a
10F7: jr z,$1108
10F9: ld b,a
10FA: ld e,a
10FB: ld d,$00
10FD: ld hl,$329E
1100: add hl,de
1101: add hl,de ;BGM寻址329E+2*(id-20)
1102: ld a,(hl) ;BGM寻址低位
1103: inc hl
1104: ld h,(hl) ;BGM寻址高位
1105: ld l,a ;BGM寻址完整地址
1106: or h
1107: ret z
1108: ld a,($FA19)
110B: or a
110C: jr nz,$111D
110E: xor a
110F: ld ($FA1D),a
1112: ld de,$1001
1115: call $26AE
1118: ld e,$00
111A: call $26AE
111D: push hl
111E: ld a,($FDA2)
1121: or a
1122: jr nz,$1144
1124: ld hl,($2E06) ;($2E06)=33de
1127: ld e,b
1128: ld d,$00
112A: add hl,de ;33de+id-20
112B: ld a,(hl) ;m1切区参数
112C: rlca
112D: rlca
112E: ld e,a
112F: ld d,$00
1131: ld hl,$2708
1134: add hl,de ;2708+4*m1切区参数
1135: ld a,(hl)
1136: in a,($08)
1138: inc hl
1139: ld a,(hl)
113A: in a,($09)
113C: inc hl
113D: ld a,(hl)
113E: in a,($0A)
1140: inc hl
1141: ld a,(hl)
1142: in a,($0B) ;m1切区
1144: pop ix
1146: call $0C52
1149: ld b,(ix+$0b)
114C: xor a
114D: CD 56 26 call $2656
1150: 3E FF ld a,$FF
1152: 32 DD FD ld ($FDDD),a
1155: 3E C0 ld a,$C0
1157: 32 4E F9 ld ($F94E),a
115A: 32 4F F9 ld ($F94F),a
115D: 32 D5 F9 ld ($F9D5),a
1160: 32 D6 F9 ld ($F9D6),a
1163: 06 05 ld b,$05
1165: 21 00 F8 ld hl,$F800
1168: AF xor a
1169: 11 0D 00 ld de,$000D
116C: 77 ld (hl),a
116D: 19 add hl,de
116E: 10 FC djnz $116C
1170: 06 05 ld b,$05
1172: 21 68 F8 ld hl,$F868
1175: 77 ld (hl),a
1176: 19 add hl,de
1177: 10 FC djnz $1175
1179: DD E5 push ix
117B: E1 pop hl
117C: FD 21 24 FA ld iy,$FA24
1180: 06 0B ld b,$0B
1182: 11 0E 00 ld de,$000E
1185: 19 add hl,de
1186: DD E5 push ix
1188: D1 pop de
1189: FD 36 00 00 ld (iy+$00),$00
118D: FD 36 08 C1 ld (iy+$08),$C1
1191: FD 36 02 FF ld (iy+$02),$FF
1195: 1A ld a,(de) ;BGM寻址完整地址
1196: 13 inc de
1197: D5 push de
1198: B7 or a
1199: 20 04 jr nz,$119F
119B: 23 inc hl
119C: 23 inc hl
119D: 18 36 jr $11D5