作者:0 DAY-S[EGCG] 转载请注明出处 工具:NO$ GBA,EmuCheat,晓月中文版(基于日版汉化)
在晓月的SOUND MODE(见图一)中,BGM 一项可播放游戏中的背景音乐,共29首(0-28); VOICE一项可播放游戏中的声音,共87个(0-86).美中不足的是,VOICE中仅仅包含游戏中的人声(和怪物声),其他的诸如打击音效移动音效都无法在此模式下播放,非常不爽. 如何才能播放全声音呢?Do it yourself.通过EmuCheat搜索得到如下关键内存地址:(须加上2000000h.)
2000604: 00 BGM 01 VOICE 02 EXIT 2000606: BGM 调用NUMBER 00-28 2000608: VOICE调用NUMBER 00-86 200060E: BGM 调用参数
设断 [2000608] ! 在SOUND MODE中按下十字键右或左,游戏中断.得到以下程序: 程序比较长,但只需注意有注释的部分.
0800AC24 B5F0 push r4-r7,lr 0800AC26 4657 mov r7,r10 0800AC28 464E mov r6,r9 0800AC2A 4645 mov r5,r8 0800AC2C B4E0 push r5-r7 0800AC2E B084 add sp,-10h 0800AC30 490A ldr r1,=84BCA78h 0800AC32 6808 ldr r0,[r1] 0800AC34 22CE mov r2,0CEh 0800AC36 00D2 lsl r2,r2,3h 0800AC38 1887 add r7,r0,r2 0800AC3A 4B09 ldr r3,=6F4h 0800AC3C 181B add r3,r3,r0 0800AC3E 469A mov r10,r3 0800AC40 2401 mov r4,1h 0800AC42 4264 neg r4,r4 0800AC44 9403 str r4,[sp,0Ch] 0800AC46 7C40 ldrb r0,[r0,11h] 0800AC48 1C0E mov r6,r1 0800AC4A 2805 cmp r0,5h 0800AC4C D900 bls 800AC50h 0800AC4E E2AC b 800B1AAh 0800AC50 0080 lsl r0,r0,2h 0800AC52 4904 ldr r1,=800AC68h 0800AC54 1840 add r0,r0,r1 0800AC56 6800 ldr r0,[r0] 0800AC58 4687 mov r15,r0 0800AC5A 0000 lsl r0,r0,0h 0800AC5C CA78 ldmia [r2]!,r3-r6 0800AC5E 084B lsr r3,r1,1h 0800AC60 06F4 lsl r4,r6,1Bh 0800AC62 0000 lsl r0,r0,0h 0800AC64 AC68 add r4,sp,1A0h 0800AC66 0800 lsr r0,r0,20h 0800AC68 AC80 add r4,sp,200h 0800AC6A 0800 lsr r0,r0,20h 0800AC6C ACE4 add r4,sp,390h 0800AC6E 0800 lsr r0,r0,20h 0800AC70 AE14 add r6,sp,50h 0800AC72 0800 lsr r0,r0,20h 0800AC74 AE5C add r6,sp,170h 0800AC76 0800 lsr r0,r0,20h 0800AC78 B130 ???? 0800AC7A 0800 lsr r0,r0,20h 0800AC7C B174 ???? 0800AC7E 0800 lsr r0,r0,20h 0800AC80 4913 ldr r1,=3002C80h 0800AC82 2300 mov r3,0h 0800AC84 20D8 mov r0,0D8h 0800AC86 0140 lsl r0,r0,5h 0800AC88 8008 strh r0,[r1] 0800AC8A 4912 ldr r1,=3002C30h 0800AC8C 1C0A mov r2,r1 0800AC8E 3248 add r2,48h 0800AC90 4811 ldr r0,=3FFFh 0800AC92 8010 strh r0,[r2] 0800AC94 314C add r1,4Ch 0800AC96 2010 mov r0,10h 0800AC98 8008 strh r0,[r1] 0800AC9A 6831 ldr r1,[r6] 0800AC9C 2001 mov r0,1h 0800AC9E 7448 strb r0,[r1,11h] 0800ACA0 6830 ldr r0,[r6] 0800ACA2 7483 strb r3,[r0,12h] 0800ACA4 2080 mov r0,80h 0800ACA6 0140 lsl r0,r0,5h 0800ACA8 F0CBF91E bl 80D5EE8h 0800ACAC 6830 ldr r0,[r6] 0800ACAE 25CE mov r5,0CEh 0800ACB0 00ED lsl r5,r5,3h 0800ACB2 1940 add r0,r0,r5 0800ACB4 F7F6F8AC bl 8000E10h 0800ACB8 6830 ldr r0,[r6] 0800ACBA 4908 ldr r1,=5ECh 0800ACBC 1840 add r0,r0,r1 0800ACBE F7F6F8A7 bl 8000E10h 0800ACC2 6830 ldr r0,[r6] 0800ACC4 4A06 ldr r2,=6F4h 0800ACC6 1880 add r0,r0,r2 0800ACC8 F7F6F8A2 bl 8000E10h 0800ACCC E26D b 800B1AAh 0800ACCE 0000 lsl r0,r0,0h 0800ACD0 2C80 cmp r4,80h 0800ACD2 0300 lsl r0,r0,0Ch 0800ACD4 2C30 cmp r4,30h 0800ACD6 0300 lsl r0,r0,0Ch 0800ACD8 3FFF sub r7,0FFh 0800ACDA 0000 lsl r0,r0,0h 0800ACDC 05EC lsl r4,r5,17h 0800ACDE 0000 lsl r0,r0,0h 0800ACE0 06F4 lsl r4,r6,1Bh 0800ACE2 0000 lsl r0,r0,0h 0800ACE4 2300 mov r3,0h 0800ACE6 9302 str r3,[sp,8h] 0800ACE8 4833 ldr r0,=40000D4h 0800ACEA AC02 add r4,sp,8h 0800ACEC 6004 str r4,[r0] 0800ACEE 4933 ldr r1,=600E800h 0800ACF0 6041 str r1,[r0,4h] 0800ACF2 4A33 ldr r2,=85000200h 0800ACF4 6082 str r2,[r0,8h] 0800ACF6 6881 ldr r1,[r0,8h] 0800ACF8 9302 str r3,[sp,8h] 0800ACFA 6004 str r4,[r0] 0800ACFC 4931 ldr r1,=600F000h 0800ACFE 6041 str r1,[r0,4h] 0800AD00 6082 str r2,[r0,8h] 0800AD02 6881 ldr r1,[r0,8h] 0800AD04 9302 str r3,[sp,8h] 0800AD06 6004 str r4,[r0] 0800AD08 492F ldr r1,=600F800h 0800AD0A 6041 str r1,[r0,4h] 0800AD0C 6082 str r2,[r0,8h] 0800AD0E 6880 ldr r0,[r0,8h] 0800AD10 4A2E ldr r2,=3002C80h 0800AD12 8811 ldrh r1,[r2] 0800AD14 482E ldr r0,=0FBFFh 0800AD16 4008 and r0,r1 0800AD18 2400 mov r4,0h 0800AD1A 8010 strh r0,[r2] 0800AD1C 4A2D ldr r2,=3002C30h 0800AD1E 1C11 mov r1,r2 0800AD20 3148 add r1,48h 0800AD22 482D ldr r0,=853h 0800AD24 8008 strh r0,[r1] 0800AD26 3102 add r1,2h 0800AD28 482C ldr r0,=0A06h 0800AD2A 8008 strh r0,[r1] 0800AD2C 1C10 mov r0,r2 0800AD2E 304C add r0,4Ch 0800AD30 8003 strh r3,[r0] 0800AD32 482B ldr r0,=1D01h 0800AD34 8050 strh r0,[r2,2h] 0800AD36 482B ldr r0,=1E02h 0800AD38 8090 strh r0,[r2,4h] 0800AD3A 482B ldr r0,=1F03h 0800AD3C 80D0 strh r0,[r2,6h] 0800AD3E 482B ldr r0,=80E3854h 0800AD40 21C0 mov r1,0C0h 0800AD42 04C9 lsl r1,r1,13h 0800AD44 2200 mov r2,0h 0800AD46 F034F8B3 bl 803EEB0h 0800AD4A 4829 ldr r0,=80E385Ch 0800AD4C 4929 ldr r1,=6002000h 0800AD4E 2200 mov r2,0h 0800AD50 F034F8AE bl 803EEB0h 0800AD54 4828 ldr r0,=80E3864h 0800AD56 4929 ldr r1,=6004000h 0800AD58 2200 mov r2,0h 0800AD5A F034F8A9 bl 803EEB0h 0800AD5E 4828 ldr r0,=80E3AC8h 0800AD60 F030FE30 bl 803B9C4h 0800AD64 4927 ldr r1,=80E4D60h 0800AD66 2003 mov r0,3h 0800AD68 2200 mov r2,0h 0800AD6A 2300 mov r3,0h 0800AD6C F033FE26 bl 803E9BCh 0800AD70 4925 ldr r1,=80E4580h 0800AD72 2002 mov r0,2h 0800AD74 2200 mov r2,0h 0800AD76 2300 mov r3,0h 0800AD78 F033FE20 bl 803E9BCh 0800AD7C 4923 ldr r1,=80E4610h 0800AD7E 2001 mov r0,1h 0800AD80 2200 mov r2,0h 0800AD82 2300 mov r3,0h 0800AD84 F033FE1A bl 803E9BCh 0800AD88 20EB mov r0,0EBh 0800AD8A 0080 lsl r0,r0,2h 0800AD8C F7FFFE74 bl 800AA78h 0800AD90 4A1F ldr r2,=84BCA78h 0800AD92 6811 ldr r1,[r2] 0800AD94 2010 mov r0,10h 0800AD96 8088 strh r0,[r1,4h] 0800AD98 2002 mov r0,2h 0800AD9A 7448 strb r0,[r1,11h] 0800AD9C 6810 ldr r0,[r2] 0800AD9E 7484 strb r4,[r0,12h] 0800ADA0 1C38 mov r0,r7 0800ADA2 210E mov r1,0Eh 0800ADA4 F03CFBE2 bl 804756Ch 0800ADA8 1C39 mov r1,r7 0800ADAA 3142 add r1,42h 0800ADAC 2052 mov r0,52h 0800ADAE 8008 strh r0,[r1] 0800ADB0 3104 add r1,4h 0800ADB2 2034 mov r0,34h 0800ADB4 8008 strh r0,[r1] 0800ADB6 E1F8 b 800B1AAh 0800ADB8 00D4 lsl r4,r2,3h 0800ADBA 0400 lsl r0,r0,10h 0800ADBC E800 ???? 0800ADBE 0600 lsl r0,r0,18h 0800ADC0 0200 lsl r0,r0,8h 0800ADC2 8500 strh r0,[r0,28h] 0800ADC4 F0000600 ???? 0800ADC6 0600 lsl r0,r0,18h 0800ADC8 F8000600 ???? 0800ADCA 0600 lsl r0,r0,18h 0800ADCC 2C80 cmp r4,80h 0800ADCE 0300 lsl r0,r0,0Ch 0800ADD0 FBFF0000 ???? 0800ADD2 0000 lsl r0,r0,0h 0800ADD4 2C30 cmp r4,30h 0800ADD6 0300 lsl r0,r0,0Ch 0800ADD8 0853 lsr r3,r2,1h 0800ADDA 0000 lsl r0,r0,0h 0800ADDC 0A06 lsr r6,r0,8h 0800ADDE 0000 lsl r0,r0,0h 0800ADE0 1D01 add r1,r0,4 0800ADE2 0000 lsl r0,r0,0h 0800ADE4 1E02 sub r2,r0,0 0800ADE6 0000 lsl r0,r0,0h 0800ADE8 1F03 sub r3,r0,4 0800ADEA 0000 lsl r0,r0,0h 0800ADEC 3854 sub r0,54h 0800ADEE 080E lsr r6,r1,20h 0800ADF0 385C sub r0,5Ch 0800ADF2 080E lsr r6,r1,20h 0800ADF4 2000 mov r0,0h 0800ADF6 0600 lsl r0,r0,18h 0800ADF8 3864 sub r0,64h 0800ADFA 080E lsr r6,r1,20h 0800ADFC 4000 and r0,r0 0800ADFE 0600 lsl r0,r0,18h 0800AE00 3AC8 sub r2,0C8h 0800AE02 080E lsr r6,r1,20h 0800AE04 4D60 ldr r5,=0E010h 0800AE06 080E lsr r6,r1,20h 0800AE08 4580 cmp r8,r0 0800AE0A 080E lsr r6,r1,20h 0800AE0C 4610 ???? 0800AE0E 080E lsr r6,r1,20h 0800AE10 CA78 ldmia [r2]!,r3-r6 0800AE12 084B lsr r3,r1,1h 0800AE14 6831 ldr r1,[r6] 0800AE16 8888 ldrh r0,[r1,4h] 0800AE18 2800 cmp r0,0h 0800AE1A D001 beq 800AE20h 0800AE1C 3802 sub r0,2h 0800AE1E E1AE b 800B17Eh 0800AE20 4A0A ldr r2,=3002C80h 0800AE22 8811 ldrh r1,[r2] 0800AE24 25F0 mov r5,0F0h 0800AE26 012D lsl r5,r5,4h 0800AE28 1C28 mov r0,r5 0800AE2A 2300 mov r3,0h 0800AE2C 4308 orr r0,r1 0800AE2E 8010 strh r0,[r2] 0800AE30 4907 ldr r1,=3002C30h 0800AE32 1C0A mov r2,r1 0800AE34 3248 add r2,48h 0800AE36 4807 ldr r0,=844h 0800AE38 8010 strh r0,[r2] 0800AE3A 314A add r1,4Ah 0800AE3C 4806 ldr r0,=0A06h 0800AE3E 8008 strh r0,[r1] 0800AE40 6831 ldr r1,[r6] 0800AE42 2003 mov r0,3h 0800AE44 7448 strb r0,[r1,11h] 0800AE46 6830 ldr r0,[r6] 0800AE48 7483 strb r3,[r0,12h] 0800AE4A E1AE b 800B1AAh 0800AE4C 2C80 cmp r4,80h 0800AE4E 0300 lsl r0,r0,0Ch 0800AE50 2C30 cmp r4,30h 0800AE52 0300 lsl r0,r0,0Ch 0800AE54 0844 lsr r4,r0,1h 0800AE56 0000 lsl r0,r0,0h 0800AE58 0A06 lsr r6,r0,8h 0800AE5A 0000 lsl r0,r0,0h 0800AE5C 6833 ldr r3,[r6] 0800AE5E 8AD9 ldrh r1,[r3,16h] 0800AE60 2008 mov r0,8h 0800AE62 4008 and r0,r1 0800AE64 2800 cmp r0,0h ;是否按START 0800AE66 D005 beq 800AE74h ;没有 0800AE68 2000 mov r0,0h ;返回 0800AE6A 2104 mov r1,4h 0800AE6C 7459 strb r1,[r3,11h] 0800AE6E 6831 ldr r1,[r6] 0800AE70 7488 strb r0,[r1,12h] 0800AE72 E19A b 800B1AAh 0800AE74 2080 mov r0,80h 0800AE76 4905 ldr r1,=604h 0800AE78 185A add r2,r3,r1 0800AE7A 2400 mov r4,0h 0800AE7C 2502 mov r5,2h 0800AE7E 8B19 ldrh r1,[r3,18h] 0800AE80 4008 and r0,r1 0800AE82 2800 cmp r0,0h ;是否按下 0800AE84 D004 beq 800AE90h 0800AE86 8810 ldrh r0,[r2] 0800AE88 3001 add r0,1h 0800AE8A E007 b 800AE9Ch 0800AE8C 0604 lsl r4,r0,18h 0800AE8E 0000 lsl r0,r0,0h 0800AE90 2040 mov r0,40h 0800AE92 4001 and r1,r0 0800AE94 2900 cmp r1,0h ;是否按上 0800AE96 D002 beq 800AE9Eh 0800AE98 8810 ldrh r0,[r2] 0800AE9A 3801 sub r0,1h 0800AE9C 8010 strh r0,[r2] 0800AE9E 2300 mov r3,0h 0800AEA0 5ED0 ldsh r0,[r2,r3] 0800AEA2 42A8 cmp r0,r5 0800AEA4 DD01 ble 800AEAAh 0800AEA6 8014 strh r4,[r2] 0800AEA8 E002 b 800AEB0h 0800AEAA 2800 cmp r0,0h 0800AEAC DA00 bge 800AEB0h 0800AEAE 8015 strh r5,[r2] 0800AEB0 6834 ldr r4,[r6] 0800AEB2 4D0C ldr r5,=604h 0800AEB4 1961 add r1,r4,r5 0800AEB6 2200 mov r2,0h 0800AEB8 5E88 ldsh r0,[r1,r2] 0800AEBA 2801 cmp r0,1h 0800AEBC DC3B bgt 800AF36h 0800AEBE 4A0A ldr r2,=80DF334h 0800AEC0 0081 lsl r1,r0,2h 0800AEC2 1889 add r1,r1,r2 0800AEC4 2210 mov r2,10h 0800AEC6 0040 lsl r0,r0,1h 0800AEC8 1903 add r3,r0,r4 0800AECA 3502 add r5,2h 0800AECC 195B add r3,r3,r5 0800AECE 2000 mov r0,0h 0800AED0 4680 mov r8,r0 0800AED2 2002 mov r0,2h 0800AED4 5E0D ldsh r5,[r1,r0] 0800AED6 8B21 ldrh r1,[r4,18h] 0800AED8 400A and r2,r1 0800AEDA 2A00 cmp r2,0h ;是否按B取消播放 0800AEDC D006 beq 800AEECh 0800AEDE 8818 ldrh r0,[r3] 0800AEE0 3001 add r0,1h 0800AEE2 E009 b 800AEF8h 0800AEE4 0604 lsl r4,r0,18h 0800AEE6 0000 lsl r0,r0,0h 0800AEE8 F334080D ???? 0800AEEA 080D lsr r5,r1,20h 0800AEEC 2020 mov r0,20h 0800AEEE 4001 and r1,r0 0800AEF0 2900 cmp r1,0h ;是否按左 0800AEF2 D002 beq 800AEFAh ;没有,继续 0800AEF4 8818 ldrh r0,[r3] ; 0800AEF6 3801 sub r0,1h ;编号减1 0800AEF8 8018 strh r0,[r3] ;保存 0800AEFA>6830 ldr r0,[r6] 0800AEFC 8B00 ldrh r0,[r0,18h] 0800AEFE 2180 mov r1,80h 0800AF00 0049 lsl r1,r1,1h 0800AF02 4008 and r0,r1 0800AF04 2800 cmp r0,0h ;是否按R 0800AF06 D002 beq 800AF0Eh ;没有,继续 0800AF08 8818 ldrh r0,[r3] 0800AF0A 300A add r0,0Ah ;编号加10 0800AF0C 8018 strh r0,[r3] 0800AF0E 6830 ldr r0,[r6] 0800AF10 8B00 ldrh r0,[r0,18h] 0800AF12 2180 mov r1,80h 0800AF14 0089 lsl r1,r1,2h 0800AF16 4008 and r0,r1 0800AF18 2800 cmp r0,0h ;是否按L 0800AF1A D002 beq 800AF22h ;没有,继续 0800AF1C 8818 ldrh r0,[r3] 0800AF1E 380A sub r0,0Ah ;编号减10 0800AF20 8018 strh r0,[r3] 0800AF22 2100 mov r1,0h 0800AF24 5E58 ldsh r0,[r3,r1] 0800AF26 42A8 cmp r0,r5 0800AF28 DD02 ble 800AF30h 0800AF2A 4642 mov r2,r8 0800AF2C 801A strh r2,[r3] 0800AF2E E002 b 800AF36h 0800AF30 2800 cmp r0,0h 0800AF32 DA00 bge 800AF36h 0800AF34 801D strh r5,[r3] 0800AF36 6834 ldr r4,[r6] 0800AF38 4B0B ldr r3,=604h 0800AF3A 18E2 add r2,r4,r3 0800AF3C 2500 mov r5,0h 0800AF3E 5F50 ldsh r0,[r2,r5] 0800AF40 0100 lsl r0,r0,4h 0800AF42 3034 add r0,34h 0800AF44 1C39 mov r1,r7 0800AF46 3146 add r1,46h 0800AF48 8008 strh r0,[r1] 0800AF4A 8AE1 ldrh r1,[r4,16h] 0800AF4C 2001 mov r0,1h 0800AF4E 4008 and r0,r1 0800AF50 2800 cmp r0,0h ;是否按A播放 0800AF52 D065 beq 800B020h ;没有,继续 0800AF54 2000 mov r0,0h 0800AF56 5E13 ldsh r3,[r2,r0] ;2000604,得到当前选择项 0800AF58 2B00 cmp r3,0h ;是BGM 0800AF5A DB61 blt 800B020h 0800AF5C 2B01 cmp r3,1h ;是VOICE 0800AF5E DD05 ble 800AF6Ch ; 0800AF60 2B02 cmp r3,2h ;是EXIT 0800AF62 D053 beq 800B00Ch ;返回 0800AF64 E05C b 800B020h 0800AF66 0000 lsl r0,r0,0h 0800AF68 0604 lsl r4,r0,18h 0800AF6A 0000 lsl r0,r0,0h 0800AF6C 2100 mov r1,0h 0800AF6E 5E50 ldsh r0,[r2,r1] ;2000604,得到当前选择项 0800AF70 2800 cmp r0,0h ;不是BGM 0800AF72 D10F bne 800AF94h ;跳 0800AF74 4A05 ldr r2,=80DF340h ;BGM相关指针 0800AF76 0059 lsl r1,r3,1h 0800AF78 4B05 ldr r3,=606h 0800AF7A 18E0 add r0,r4,r3 ;2000606,BGM编号 0800AF7C 1840 add r0,r0,r1 0800AF7E 2400 mov r4,0h 0800AF80 5F00 ldsh r0,[r0,r4] 0800AF82 0080 lsl r0,r0,2h 0800AF84 1880 add r0,r0,r2 0800AF86 8804 ldrh r4,[r0] 0800AF88 E010 b 800AFACh 0800AF8A 0000 lsl r0,r0,0h 0800AF8C F340080D ???? 0800AF8E 080D lsr r5,r1,20h 0800AF90 0606 lsl r6,r0,18h 0800AF92 0000 lsl r0,r0,0h 0800AF94 4817 ldr r0,=80DF334h ;VOICE相关指针 0800AF96 0099 lsl r1,r3,2h 0800AF98 1809 add r1,r1,r0 0800AF9A 005A lsl r2,r3,1h 0800AF9C 4D16 ldr r5,=606h 0800AF9E 1960 add r0,r4,r5 0800AFA0 1880 add r0,r0,r2 ;2000608,VOICE编号 0800AFA2 8800 ldrh r0,[r0] ;声音参数基址,190H 0800AFA4 8809 ldrh r1,[r1] 0800AFA6 1840 add r0,r0,r1 0800AFA8 0400 lsl r0,r0,10h 0800AFAA 0C04 lsr r4,r0,10h 0800AFAC 4E13 ldr r6,=84BCA78h 0800AFAE 6830 ldr r0,[r6] 0800AFB0 4D13 ldr r5,=604h 0800AFB2 1941 add r1,r0,r5 0800AFB4 2200 mov r2,0h 0800AFB6 5E89 ldsh r1,[r1,r2] 0800AFB8 0049 lsl r1,r1,1h 0800AFBA 4B12 ldr r3,=60Eh 0800AFBC 18C0 add r0,r0,r3 0800AFBE 1840 add r0,r0,r1 0800AFC0 8801 ldrh r1,[r0] 0800AFC2 2200 mov r2,0h 0800AFC4 5E80 ldsh r0,[r0,r2] 0800AFC6 2800 cmp r0,0h 0800AFC8 D006 beq 800AFD8h 0800AFCA 4B0F ldr r3,=0FFFF8000h 0800AFCC 1C18 mov r0,r3 0800AFCE 4308 orr r0,r1 0800AFD0 0400 lsl r0,r0,10h 0800AFD2 0C00 lsr r0,r0,10h 0800AFD4 F0CAFF88 bl 80D5EE8h ;声音调用 0800AFD8 6830 ldr r0,[r6] 0800AFDA 1941 add r1,r0,r5 0800AFDC 2500 mov r5,0h 0800AFDE 5F49 ldsh r1,[r1,r5] 0800AFE0 0049 lsl r1,r1,1h 0800AFE2 4A08 ldr r2,=60Eh 0800AFE4 1880 add r0,r0,r2 0800AFE6 1840 add r0,r0,r1 0800AFE8 8004 strh r4,[r0] 0800AFEA 1C20 mov r0,r4 0800AFEC F0CAFF7C bl 80D5EE8h ;声音调用 0800AFF0 E016 b 800B020h 0800AFF2 0000 lsl r0,r0,0h 0800AFF4 F334080D ???? 0800AFF6 080D lsr r5,r1,20h 0800AFF8 0606 lsl r6,r0,18h 0800AFFA 0000 lsl r0,r0,0h 0800AFFC CA78 ldmia [r2]!,r3-r6 0800AFFE 084B lsr r3,r1,1h 0800B000 0604 lsl r4,r0,18h 0800B002 0000 lsl r0,r0,0h 0800B004 060E lsl r6,r1,18h 0800B006 0000 lsl r0,r0,0h 0800B008 8000 strh r0,[r0] 0800B00A FFFF2080 ????
至此我们找到声音调用的一般格式:
mov r0,??h ;声音参数,??h可能为数字,也可能为寄存器 bl 80D5EE8h ;声音调用程序
那么我们在程序中查找 bl 80D5EE8h就可以找到大部分的声音调用了。
图一 (修改前)
图二 (修改后)
回到正题.我们注意到这里:
0800AF94 4817 ldr r0,=80DF334h ;VOICE相关指针 0800AF96 0099 lsl r1,r3,2h 0800AF98 1809 add r1,r1,r0 0800AF9A 005A lsl r2,r3,1h 0800AF9C 4D16 ldr r5,=606h 0800AF9E 1960 add r0,r4,r5 0800AFA0 1880 add r0,r0,r2 ;2000608,VOICE编号 0800AFA2 8800 ldrh r0,[r0] ;声音参数基址,190H 0800AFA4 8809 ldrh r1,[r1] 0800AFA6 1840 add r0,r0,r1 0800AFA8 0400 lsl r0,r0,10h 0800AFAA 0C04 lsr r4,r0,10h
在数据窗口查看80DF334h后的内容,发现:
80DF338h :190h ;人声参数基址 80DF33Ah: 56h ;MAX声音编号
根据声音调用的一般格式,我们猜测声音参数是从00h开始的,将80DF338h:190h改为00h,通过范围测试将max声音编号修改为1F4h(500),回到游戏,果然能播放其他的声音了,但声音编号的切换显示却不正常.因为原显示程序只支持两位十进制数的刷新,而修改后的声音编号则达到三位了. 对VRAM的相应地址设断,中断后来到如下程序: Relax,下面又到了我们的猜参数时间.(我为什么要说"又"?)
0800B102 2012 mov r0,12h ;刷新显示的位数,两位 0800B104 1C29 mov r1,r5 0800B106 2302 mov r3,2h ;刷新控制的位数,两位 0800B108 F03AFB68 bl 80457DCh ;SOUND MODE编号显示程序 0800B10C 3502 add r5,2h 0800B10E 3401 add r4,1h 0800B110 2C01 cmp r4,1h 0800B112 DDE9 ble 800B0E8h 0800B114 E049 b 800B1AAh
修改程序为:
0800B102 2013 mov r0,13h ;刷新显示的位数,三位 0800B104 1C29 mov r1,r5 0800B106 2302 mov r3,3h ;刷新控制的位数,三位 0800B108 F03AFB68 bl 80457DCh ;SOUND MODE编号显示程序
回到游戏,BINGO,显示刷新正确.(见图二)收工.有兴趣的朋友可以尝试加上按SELECT编号加100的程序^^^ 这个修改的主要作用并不仅限于此.修改后VOICE编号正好等于游戏中声音调用的参数,为查找程序提供了便利.
附表一 修改地址及数据:
80DF338h :9001 -> 0000 80DF33Ah: 5600 -> F401 800B102h: 12 -> 13 800B106h: 02 -> 03
附表二 BGM编号参数对照表:
编号 曲名 声音参数 备注
00 漆黑的太阳 1B 标题画面 01 输入名字 0E 02 开场--弥娜主题曲 15(1D) 03 荒城回廊 02 04 礼拜堂 08 05 恶魔城藏书库 07 06 舞踏馆 05 07 幻梦宫 06 08 忘却之庭园 09 09 时计塔 01 10 地下水域 03 11 炼狱斗技场 0A 12 恶魔城最上阶 04 13 不可侵洞穴 0B(1C) 14 原初之混沌 0C 15 哈马商会 0D(1E) 16 游戏结束 0F 17 对决 10 18 强敌登场 11 19 王座之战 13 20 混沌之战 1F 21 最终决战 12 22 等不到晚上 14 JULIUS专用 23 预感 16(17,19) 24 魔王之宿命 21(22) 25 你并不孤独 23(24) 26 净化 20 27 结局 18 28 制作人员表 1A
其中 参数 17,19,1C,1D,1E,22,24是重复调用,25h是游戏开始时的风声。
0DAY-S 原写于2006-06-17 00:32 |
回复Comments
作者:
{commentrecontent}