From 34931c4eac8a39ea7029662c5f4a2e6a39a0b94f Mon Sep 17 00:00:00 2001 From: Henny022p Date: Mon, 22 Mar 2021 04:55:21 +0100 Subject: [PATCH] extracted m4a rodata --- asm/m4a_asm.s | 14 ++++---- data/data_089FC6C4.s | 78 -------------------------------------------- linker.ld | 1 + src/gba/m4a.c | 65 ++++++++++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 85 deletions(-) diff --git a/asm/m4a_asm.s b/asm/m4a_asm.s index 824258b2..31496bf4 100644 --- a/asm/m4a_asm.s +++ b/asm/m4a_asm.s @@ -502,7 +502,7 @@ _080AF73A: MPlayJumpTableCopy: @ 0x080AF744 mov ip, lr movs r1, #0x24 - ldr r2, _080AF774 @ =gUnk_089FC6C4 + ldr r2, _080AF774 @ =gMPlayJumpTableTemplate _080AF74A: ldr r3, [r2] bl _080AF75E @@ -520,7 +520,7 @@ _080AF75E: push {r0} lsrs r0, r2, #0x19 bne _080AF770 - ldr r0, _080AF774 @ =gUnk_089FC6C4 + ldr r0, _080AF774 @ =gMPlayJumpTableTemplate cmp r2, r0 blo _080AF76E lsrs r0, r2, #0xe @@ -531,7 +531,7 @@ _080AF770: pop {r0} bx lr .align 2, 0 -_080AF774: .4byte gUnk_089FC6C4 +_080AF774: .4byte gMPlayJumpTableTemplate thumb_func_start sub_080AF778 sub_080AF778: @ 0x080AF778 @@ -931,7 +931,7 @@ _080AF9FA: beq _080AFA82 b _080AFA26 _080AFA1C: - ldr r0, _080AFB78 @ =gUnk_089FC938 + ldr r0, _080AFB78 @ =gClockTable subs r1, #0x80 adds r1, r1, r0 ldrb r0, [r1] @@ -1126,7 +1126,7 @@ _080AFB64: sub_080AFB74: @ 0x080AFB74 bx r3 .align 2, 0 -_080AFB78: .4byte gUnk_089FC938 +_080AFB78: .4byte gClockTable _080AFB7C: .4byte 0x03007FF0 _080AFB80: .4byte 0x68736D53 @@ -1219,7 +1219,7 @@ ply_note: @ 0x080AFC00 ldr r1, _080AFDF8 @ =0x03007FF0 ldr r1, [r1] str r1, [sp, #4] - ldr r1, _080AFDFC @ =gUnk_089FC938 + ldr r1, _080AFDFC @ =gClockTable adds r0, r0, r1 ldrb r0, [r0] strb r0, [r5, #4] @@ -1482,7 +1482,7 @@ _080AFDE6: bx r0 .align 2, 0 _080AFDF8: .4byte 0x03007FF0 -_080AFDFC: .4byte gUnk_089FC938 +_080AFDFC: .4byte gClockTable thumb_func_start ply_endtie ply_endtie: @ 0x080AFE00 diff --git a/data/data_089FC6C4.s b/data/data_089FC6C4.s index b5d488de..cf127310 100644 --- a/data/data_089FC6C4.s +++ b/data/data_089FC6C4.s @@ -4,84 +4,6 @@ .section .rodata .align 2 -gUnk_089FC6C4:: @ 089FC6C4 -@ replacing .incbin "baserom.gba", 0x009fc6c4, 0x90 -.4byte ply_fine -.4byte ply_goto -.4byte ply_patt -.4byte ply_pend -.4byte ply_rept -.4byte ply_fine -.4byte ply_fine -.4byte ply_fine -.4byte ply_fine -.4byte ply_prio -.4byte ply_tempo -.4byte ply_keysh -.4byte ply_voice -.4byte ply_vol -.4byte ply_pan -.4byte ply_bend -.4byte ply_bendr -.4byte ply_lfos -.4byte ply_lfodl -.4byte ply_mod -.4byte ply_modt -.4byte ply_fine -.4byte ply_fine -.4byte ply_tune -.4byte ply_fine -.4byte ply_fine -.4byte ply_fine -.4byte ply_port -.4byte ply_fine -.4byte ply_endtie -.4byte SampleFreqSet -.4byte TrackStop -.4byte FadeOutBody -.4byte TrkVolPitSet -.4byte RealClearChain -.4byte SoundMainBTM - -gScaleTable:: @ 089FC754 - .incbin "baserom.gba", 0x9FC754, 0x00000B4 - -gFreqTable:: @ 089FC808 - .incbin "baserom.gba", 0x9FC808, 0x0000030 - -gPcmSamplesPerVBlankTable:: @ 089FC838 - .incbin "baserom.gba", 0x9FC838, 0x0000018 - -gCgbScaleTable:: @ 089FC850 - .incbin "baserom.gba", 0x9FC850, 0x0000084 - -gCgbFreqTable:: @ 089FC8D4 - .incbin "baserom.gba", 0x9FC8D4, 0x0000018 - -gNoiseTable:: @ 089FC8EC - .incbin "baserom.gba", 0x9FC8EC, 0x000003C - -gCgb3Vol:: @ 089FC928 - .incbin "baserom.gba", 0x9FC928, 0x0000010 - -gUnk_089FC938:: @ 089FC938 - .incbin "baserom.gba", 0x9FC938, 0x0000034 - -gXcmdTable:: @ 089FC96C -@ replacing .incbin "baserom.gba", 0x009fc96c, 0x30 -.4byte ply_xxx -.4byte ply_xwave -.4byte ply_xtype -.4byte ply_xxx -.4byte ply_xatta -.4byte ply_xdeca -.4byte ply_xsust -.4byte ply_xrele -.4byte ply_xiecv -.4byte ply_xiecl -.4byte ply_xleng -.4byte ply_xswee - gUnk_089FC99C:: @ 089FC99C .incbin "baserom.gba", 0x9FC99C, 0x0000060 diff --git a/linker.ld b/linker.ld index 2e16be52..26c2eb53 100644 --- a/linker.ld +++ b/linker.ld @@ -1040,6 +1040,7 @@ SECTIONS { data/data_081320FC.o(.rodata); data/strings.o(.rodata); data/sprite_table.o(.rodata); + src/gba/m4a.o(.rodata); data/data_089FC6C4.o(.rodata); src/eeprom.o(.rodata); } >rom diff --git a/src/gba/m4a.c b/src/gba/m4a.c index 5e43e4a0..9fac2854 100644 --- a/src/gba/m4a.c +++ b/src/gba/m4a.c @@ -424,6 +424,71 @@ extern SoundInfo gSoundInfo; #define CGB_NRx2_ENV_DIR_DEC 0x00 #define CGB_NRx2_ENV_DIR_INC 0x08 +void* const gMPlayJumpTableTemplate[] = { + ply_fine, ply_goto, ply_patt, ply_pend, ply_rept, ply_fine, ply_fine, ply_fine, ply_fine, + ply_prio, ply_tempo, ply_keysh, ply_voice, ply_vol, ply_pan, ply_bend, ply_bendr, ply_lfos, + ply_lfodl, ply_mod, ply_modt, ply_fine, ply_fine, ply_tune, ply_fine, ply_fine, ply_fine, + ply_port, ply_fine, ply_endtie, SampleFreqSet, TrackStop, FadeOutBody, TrkVolPitSet, RealClearChain, SoundMainBTM, +}; + +const u8 gScaleTable[] = { + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, + 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, + 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, + 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, +}; + +const u32 gFreqTable[] = { + 2147483648u, 2275179671u, 2410468894u, 2553802834u, 2705659852u, 2866546760u, + 3037000500u, 3217589947u, 3408917802u, 3611622603u, 3826380858u, 4053909305u, +}; + +const u16 gPcmSamplesPerVBlankTable[] = { + 96, 132, 176, 224, 264, 304, 352, 448, 528, 608, 672, 704, +}; + +const u8 gCgbScaleTable[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4A, 0x4B, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x60, 0x61, 0x62, 0x63, + 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, + 0x7B, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, + 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, +}; + +const s16 gCgbFreqTable[] = { + -2004, -1891, -1785, -1685, -1591, -1501, -1417, -1337, -1262, -1192, -1125, -1062, +}; + +const u8 gNoiseTable[] = { + 0xD7, 0xD6, 0xD5, 0xD4, 0xC7, 0xC6, 0xC5, 0xC4, 0xB7, 0xB6, 0xB5, 0xB4, 0xA7, 0xA6, 0xA5, + 0xA4, 0x97, 0x96, 0x95, 0x94, 0x87, 0x86, 0x85, 0x84, 0x77, 0x76, 0x75, 0x74, 0x67, 0x66, + 0x65, 0x64, 0x57, 0x56, 0x55, 0x54, 0x47, 0x46, 0x45, 0x44, 0x37, 0x36, 0x35, 0x34, 0x27, + 0x26, 0x25, 0x24, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, +}; + +const u8 gCgb3Vol[] = { + 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x20, 0x20, +}; + +const u8 gClockTable[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x1C, 0x1E, 0x20, 0x24, 0x28, 0x2A, 0x2C, 0x30, 0x34, + 0x36, 0x38, 0x3C, 0x40, 0x42, 0x44, 0x48, 0x4C, 0x4E, 0x50, 0x54, 0x58, 0x5A, 0x5C, 0x60, +}; + +const XcmdFunc gXcmdTable[] = { + ply_xxx, ply_xwave, ply_xtype, ply_xxx, ply_xatta, ply_xdeca, + ply_xsust, ply_xrele, ply_xiecv, ply_xiecl, ply_xleng, ply_xswee, +}; + void nullsub_544(); u32 MidiKeyToFreq(WaveData* wav, u8 key, u8 fineAdjust) {