MM Debug Notes1
Will spam posts containing addresses and code/data descriptions.
case 0x1f681230: /* Zelda OoT / Zelda MM (J, J RevA) */ alist_process_nead_oot(hle); return true; case 0x1f801250: /* Zelda MM (except J, J RevA, E Beta), PokemonStadium 2 */ alist_process_nead_mm(hle); return true; case 0x109411f8: /* Zelda MM (E Beta) */ alist_process_nead_mmb(hle); return true; case 0x1eac11b8: /* AnimalCrossing */ alist_process_nead_ac(hle); return true;
00260010 is changing the tempo at which music plays back. WTF
set 80260014 to 02300210 BAM 60fps WTF
0x32 read from 80260124 by 801CD340 into T0, used for part of calculation WE GETTING CLOSE, BOYS
set to 0x32 by 801D0F70
00000030 in ROM -> 5A534501 (P to E) 00DAF4B0 in ROM -> 240E003C (0x32 to 0x3C) Game runs at 20FPS, but music tempo fast. Examining 00260010 from this perspective.
>know where sequences are in rom
>know what they look like
>search in ram
>read breakpoint
>sequence reading code
>directly connected to sequence playback because has to handle realtime things like music fading
>and music track changes like hyrule field
>sequence reading speed defined by waits that are interpreted by the sequence file reader
This is my plan, by the way.
803D98E0 address of file menu sequence file in ram while on file menu
003D993E 16-bit command; second byte is actual tempo command of said sequence
80261C08 music tempo after loading from tempo command, first 16 bits
The after-loading music tempo value stores the same value on NTSC and PAL
8026005C Address of tempo controller. BAM. Set to 2A120000, we're good!
Stored by 801CD548.
Reversed the NTSC and PAL tempo controller calculation code, found the differing dependency (which was a floating point value; hence pointing out that I reversed the algorithm. it was a bitch). ctrl+f 41A03E4D in PAL ROM, it's 4185B439 in NTSC. Set it to 4185B439. Music now runs at the correct speed!