A while back, I posted about some unused sound data in Sonic 1. A lot of people asked me to look at Sonic 2/3 to see if there was anything interesting. On the subject of Sonic 2, it was difficult to find unused data as the sound driver changed significantly for the final version so that the unused sound data can't be located the same way I was able to for Sonic 1. However, the Simon Wai prototype still uses something similar to the Sonic 1 driver (I think?) and so I could find unused sound data in that version. If I recall, the only thing I was able to find were unused voices (instruments) in many of the songs. I might go back to revisit Sonic 2, but for now I wanted to focus on Sonic 3 since that game holds a lot of oddities in the sound data. However, I need help this time. Sonic 3 changed the sound format a little but and so it makes things a bit harder to manipulate/interpret without investing time which I don't really have anymore. I'm pointing out the data that I find so that hopefully someone with more knowledge and time can see what the data actually is. The impression that I get when looking at the sound data for Sonic 3 is that the process for programming the music became more streamlined, possibly for the relatively new people who hopped on board the SEGA SOUND TEAM. As such, I suspect that at this point tools were created to make converting common tracker/midi formats easier. In comparison to the early Mega Drive titles, where it was likely that many of the games were sequenced using macro'd assembler. The reason for bringing this up is due to the fact that using such tools can introduce common intricacies that rear up in every song. As such, the most common thing that I noticed when looking at the sound data this time around is that there are many instances where a "cfStopTrack" command ($F2) is issued but never called because the music will call "cfJumpTo" ($F6) before it occurs. Many, but not all, songs do this which is interesting. I believe this might've been a leftover from the conversion tools that were used, or part of some asm macro that included the cfStopTrack after certain jumps by default. So, instead of noting where there are unused cfStopTracks (because it would take me forever and aren't that interesting), I will note when songs don't have any unused cFStopTracks at all. With that out of the way, let's begin. ------------------------------------------------------------------------------------------------------------------------ (Note: I'm going to go by when the sequence data itself appears in the ROM. It's interesting to note the order in which the data is presented in the ROM. All offsets are based on Sonic 3 stand alone. All unused bytes were found using BizHawk so there's always room for error. I believe in some cases my script might be off by one byte so I'll try to include the last marked byte where possible (which will be labeled with the "Z80 Data" comment). I'll try to interpret most of the data by hand, but for the most part I'll be leaving it as raw byte code). 1.) (2E) Sonic 3 Miniboss - 0xC71A0 Unused Voice. Code (ASM): ROM:000C79E3 dc.b $80 ; Z80 Data ROM:000C79E4 dc.b 5 ROM:000C79E5 dc.b 0 ROM:000C79E6 dc.b 0 ROM:000C79E7 dc.b 0 ROM:000C79E8 dc.b 0 ROM:000C79E9 dc.b $1F ROM:000C79EA dc.b $1F ROM:000C79EB dc.b $1F ROM:000C79EC dc.b $1F ROM:000C79ED dc.b $12 ROM:000C79EE dc.b $C ROM:000C79EF dc.b $C ROM:000C79F0 dc.b $C ROM:000C79F1 dc.b $12 ROM:000C79F2 dc.b $18 ROM:000C79F3 dc.b $1F ROM:000C79F4 dc.b $1F ROM:000C79F5 dc.b $1F ROM:000C79F6 dc.b $1F ROM:000C79F7 dc.b $1F ROM:000C79F8 dc.b $1F ROM:000C79F9 dc.b 7 ROM:000C79FA dc.b $80 ; Ç ROM:000C79FB dc.b $80 ; Ç ROM:000C79FC dc.b $80 ; Ç 2.) (30) Final Boss (Big Arms) - 0xC7A61 No other unused data aside from unused cfStopTrack calls. 3.) (01) Angel Island Zone Act 1 - 0xC8000 No other unused data aside from unused cfStopTrack calls. 4.) (02) Angel Island Zone Act 2 - 0xC9B6D No other unused data aside from unused cfStopTrack calls. 5.) (03) Hydrocity Zone Act 1 - 0xCB0BC Unused cfJumpTo with cfStopTrack: Code (ASM): ROM:000CBFFC dc.b $F6 ; cfJumpTo BFF9 ROM:000CBFFD dc.b $F9 ROM:000CBFFE dc.b $BF ROM:000CBFFF dc.b $F2 ; cfStopTrack 6.) (04) Hydrocity Zone Act 2 - 0xCC0C6 Unused cfJumpTo with cfStopTrack: Code (ASM): ROM:000CD10D dc.b $F6 ; cfJumpTo D10A ROM:000CD10E dc.b $A ROM:000CD10F dc.b $D1 ROM:000CD110 dc.b $F2 ; cfStopTrack 7.) (05) Marble Garden Zone Act 1 - 0xCD364 No other unused data aside from unused cfStopTrack calls. 8.) (06) Marble Garden Zone Act 2 - 0xCD97B No other unused data aside from unused cfStopTrack calls. 9.) (08) Carnival Night Zone Act 2 - 0xCDDA9 Yeah, Act 2's sound data comes before Act 1. Weird. There's only one unused cfStopTrack in the whole song. Maybe this song was programmed manually instead of converted? A partially used cfModulation call? cfModulation uses four 1 byte parameters, but for some reason here only the first and last byte are used. The 1 and the 5 are unused. Code (ASM): ROM:000CDDD9 dc.b $F0 ; Z80 Data ROM:000CDDDA dc.b 2 ; Z80 Data ROM:000CDDDB dc.b 1 ROM:000CDDDC dc.b 5 ROM:000CDDDD dc.b 4 ; Z80 Data Unused notes? $F9 is a cfJumpReturn (which takes no parameters) which is used, but it precedes byte $C2 which is marked used as well for some reason (I believe this was a mistake with Bizhawk). What follows the $C2 is unused. If the bytes are notes, I added what I think the music notation correlates to as well as the duration. Code (ASM): ROM:000CDF37 dc.b $F9 ; Z80 Data - cfJumpReturn ROM:000CDF38 dc.b $C2 ; Z80 Data - 5F, duration of 7 ROM:000CDF39 dc.b 7 ROM:000CDF3A dc.b $C1 ; 5E, with a duration of 5 ROM:000CDF3B dc.b 5 ROM:000CDF3C dc.b $C0 ; 5D?/E? with a duration of 0 ROM:000CDF3D dc.b $80 ; Rest, with a duration of 7 ROM:000CDF3E dc.b 7 ROM:000CDF3F dc.b $BF ; 5D, with a duration of 5 ROM:000CDF40 dc.b 5 ROM:000CDF41 dc.b $80 ; Rest, with a duration of 7 ROM:000CDF42 dc.b 7 ROM:000CDF43 dc.b $BE ; 5C?/D?, with a duration of 0? ROM:000CDF44 dc.b $BF ; 5D, with a duration of 5 ROM:000CDF45 dc.b 5 ROM:000CDF46 dc.b $BE ; 5C?/D?, with a duration of 7? ROM:000CDF47 dc.b 7 ROM:000CDF48 dc.b $BD ; 5C, with a duration of 5 ROM:000CDF49 dc.b 5 ROM:000CDF4A dc.b $F9 ; cFJumpReturn 10.) (07) Carnival Night Zone Act 1 - 0xCE48F No other unused data aside from an unused cfStopTrack call. 11.) (09) Flying Battery Zone Act 1 - 0xCEBF1 No other unused data aside from unused cfStopTrack calls. 12.) (0a) Flying Battery Zone Act 2 - 0xCF189 No other unused data aside from unused cfStopTrack calls. 13.) (1a) Doomsday Zone - 0xCF6F0 Not sure why Doomsday Zone's data appears here. Perhaps the size left remaining in the other banks was an issue? No other unused data aside from unused cfStopTrack calls. 14.) (0c) Ice Cap Zone Act 2 - 0xD0000 Another instance where Act 2's data appears before Act 1. Weird. No unused data whatsoever. Not even an unused cfStopTrack call, suggesting this might've been programmed by hand. 15.) (0b) Ice Cap Zone Act 1 - 0xD06AA No unused cfStopTrack calls, suggesting this might've been programmed by hand. Two partially unused cfModulation calls. cfModulation requires four 1 byte parameters, but only the first one is used. Everything is set to 0 though. Code (ASM): ROM:000D0BC1 dc.b $F0 ; Z80 Data ROM:000D0BC2 dc.b 0 ; Z80 Data ROM:000D0BC3 dc.b 0 ROM:000D0BC4 dc.b 0 ROM:000D0BC5 dc.b 0 Code (ASM): ROM:000D0C20 dc.b $F0 ; Z80 Data ROM:000D0C21 dc.b 0 ; Z80 Data ROM:000D0C22 dc.b 0 ROM:000D0C23 dc.b 0 ROM:000D0C24 dc.b 0 16.) (0e) Launch Base Zone Act 2 - 0xD0DC8 Another instance where Act 2's data is located before Act 1's. No unused cfStopTrack calls, suggesting this one was programmed by hand. Two partially unused cfModulation calls. Only the first parameter seems to be read. Code (ASM): ROM:000D0F79 dc.b $F0 ; Z80 Data ROM:000D0F7A dc.b 1 ; Z80 Data ROM:000D0F7B dc.b 1 ROM:000D0F7C dc.b 1 ROM:000D0F7D dc.b 4 Code (ASM): ROM:000D1001 dc.b $F0 ; Z80 Data ROM:000D1002 dc.b 1 ; Z80 Data ROM:000D1003 dc.b 1 ROM:000D1004 dc.b 1 ROM:000D1005 dc.b 4 Unused Voice data: Code (ASM): ROM:000D129B dc.b $C ROM:000D129C dc.b $AB ; ½ ROM:000D129D dc.b $12 ROM:000D129E dc.b $A8 ; ¿ ROM:000D129F dc.b 6 ROM:000D12A0 dc.b $AC ; ¼ ROM:000D12A1 dc.b $12 ROM:000D12A2 dc.b $AB ; ½ ROM:000D12A3 dc.b 6 ROM:000D12A4 dc.b $AB ; ½ ROM:000D12A5 dc.b $18 ROM:000D12A6 dc.b $F9 ; · ROM:000D12A7 dc.b $80 ; Ç ROM:000D12A8 dc.b $80 ; Ç ROM:000D12A9 dc.b $AB ; ½ ROM:000D12AA dc.b $80 ; Ç ROM:000D12AB dc.b $80 ; Ç ROM:000D12AC dc.b $80 ; Ç ROM:000D12AD dc.b $AB ; ½ ROM:000D12AE dc.b $80 ; Ç ROM:000D12AF dc.b $80 ; Ç ROM:000D12B0 dc.b $80 ; Ç ROM:000D12B1 dc.b $AB ; ½ ROM:000D12B2 dc.b $80 ; Ç ROM:000D12B3 dc.b $80 ; Ç ROM:000D12B4 dc.b $80 ; Ç ROM:000D12B5 dc.b $AB ; ½ ROM:000D12B6 dc.b $80 ; Ç ROM:000D12B7 dc.b $A8 ; ¿ ROM:000D12B8 dc.b 6 ROM:000D12B9 dc.b $80 ; Ç ROM:000D12BA dc.b $AB ; ½ ROM:000D12BB dc.b $80 ; Ç ROM:000D12BC dc.b $A8 ; ¿ ROM:000D12BD dc.b $80 ; Ç ROM:000D12BE dc.b $AB ; ½ ROM:000D12BF dc.b $A8 ; ¿ ROM:000D12C0 dc.b $80 ; Ç ROM:000D12C1 dc.b $80 ; Ç ROM:000D12C2 dc.b $AB ; ½ ROM:000D12C3 dc.b $80 ; Ç ROM:000D12C4 dc.b $80 ; Ç ROM:000D12C5 dc.b $80 ; Ç ROM:000D12C6 dc.b $AB ; ½ ROM:000D12C7 dc.b $A8 ; ¿ Unused voice: Code (ASM): ROM:000D132C dc.b $F5 ; ) ROM:000D132D dc.b $24 ; $ ROM:000D132E dc.b $30 ; 0 ROM:000D132F dc.b $10 ROM:000D1330 dc.b $32 ; 2 ROM:000D1331 dc.b $1F ROM:000D1332 dc.b $1F ROM:000D1333 dc.b $1F ROM:000D1334 dc.b $1F ROM:000D1335 dc.b 5 ROM:000D1336 dc.b $18 ROM:000D1337 dc.b 9 ROM:000D1338 dc.b 2 ROM:000D1339 dc.b 6 ROM:000D133A dc.b $F ROM:000D133B dc.b 6 ROM:000D133C dc.b 2 ROM:000D133D dc.b $1F ROM:000D133E dc.b $2F ; / ROM:000D133F dc.b $4F ; O ROM:000D1340 dc.b $2F ; / ROM:000D1341 dc.b $F ROM:000D1342 dc.b $E ROM:000D1343 dc.b $E ROM:000D1344 dc.b $80 ; Ç 17.) (0D) Launch Base Zone Act 1 - 0xD1345 No unused cfStopTrack calls, suggesting this one was programmed by hand. Two partially unused cfModulation calls. Only the first parameter is used. Code (ASM): ROM:000D14E1 dc.b $F0 ; Z80 Data ROM:000D14E2 dc.b 1 ; Z80 Data ROM:000D14E3 dc.b 1 ROM:000D14E4 dc.b 1 ROM:000D14E5 dc.b 4 Code (ASM): ROM:000D1562 dc.b $F0 ; Z80 Data ROM:000D1563 dc.b 1 ; Z80 Data ROM:000D1564 dc.b 1 ROM:000D1565 dc.b 1 ROM:000D1566 dc.b 4 18.) (0F) Mushroom Hill Zone Act 1 - 0xD17A7 No other unused data aside from unused cfStopTrack calls. 19.) (10) Mushroom Hill Zone Act 2 - 0xD1DAF No other unused data aside from unused cfStopTrack calls. 20.) (11) Sandopolis Zone Act 1 - 0xD2331 No other unused data aside from unused cfStopTrack calls. 21.) (12) Sandopolis Zone Act 2 - 0xD299B No other unused data aside from unused cfStopTrack calls. 22.) (13) Lava Reef Zone Act 1 - 0xD2F8E No other unused data aside from unused cfStopTrack calls. 23.) (14) Lava Reef Zone Act 2 - 0xD399C No other unused data aside from unused cfStopTrack calls. 24.) (15) Sky Sanctuary Zone - 0xD4B29 No other unused data aside from unused cfStopTrack calls. 25.) (16) Death Egg Zone Act 1 - 0xD4F4F Unused voice. Code (ASM): ROM:000D5421 dc.b 3 ROM:000D5422 dc.b $61 ; a ROM:000D5423 dc.b $51 ; Q ROM:000D5424 dc.b $23 ; # ROM:000D5425 dc.b $41 ; A ROM:000D5426 dc.b $10 ROM:000D5427 dc.b $10 ROM:000D5428 dc.b $F ROM:000D5429 dc.b $15 ROM:000D542A dc.b $1C ROM:000D542B dc.b 1 ROM:000D542C dc.b 6 ROM:000D542D dc.b 5 ROM:000D542E dc.b 5 ROM:000D542F dc.b 1 ROM:000D5430 dc.b 5 ROM:000D5431 dc.b 1 ROM:000D5432 dc.b $C9 ; + ROM:000D5433 dc.b $C ROM:000D5434 dc.b $D9 ; + ROM:000D5435 dc.b $C9 ; + ROM:000D5436 dc.b $18 ROM:000D5437 dc.b $17 ROM:000D5438 dc.b $17 ROM:000D5439 dc.b $83 ; â 26.) (17) Death Egg Zone Act 2 - 0xD5439 Unused voice. Code (ASM): ROM:000D5833 dc.b 3 ROM:000D5834 dc.b $61 ; a ROM:000D5835 dc.b $51 ; Q ROM:000D5836 dc.b $23 ; # ROM:000D5837 dc.b $41 ; A ROM:000D5838 dc.b $10 ROM:000D5839 dc.b $10 ROM:000D583A dc.b $F ROM:000D583B dc.b $15 ROM:000D583C dc.b $1C ROM:000D583D dc.b 1 ROM:000D583E dc.b 6 ROM:000D583F dc.b 5 ROM:000D5840 dc.b 5 ROM:000D5841 dc.b 1 ROM:000D5842 dc.b 5 ROM:000D5843 dc.b 1 ROM:000D5844 dc.b $C9 ; + ROM:000D5845 dc.b $C ROM:000D5846 dc.b $D9 ; + ROM:000D5847 dc.b $C9 ; + ROM:000D5848 dc.b $18 ROM:000D5849 dc.b $17 ROM:000D584A dc.b $17 ROM:000D584B dc.b $83 ; â 27.) (18) Sonic & Knuckles Mini Boss - 0xD584C No other unused data aside from unused cfStopTrack calls. 28.) (19) Act 2 Boss - 0xD5B7C No other unused data aside from unused cfStopTrack calls. 29.) (1b) Bonus Stage (Orbs) - 0xD6078 Partially unused cfModulation call, only the first parameter is used. Code (ASM): ROM:000D6538 dc.b $F0 ; Z80 Data ROM:000D6539 dc.b $D ; Z80 Data ROM:000D653A dc.b 1 ROM:000D653B dc.b 1 ROM:000D653C dc.b 6 30.) (1c) Special Stage - 0xD65DB No other unused data aside from unused cfStopTrack calls. 31.) (29) Act Clear - 0xD6E73 Unused notes. Code (ASM): ROM:000D6FBD dc.b $EF ; cfSetVoice to voice #1 ROM:000D6FBE dc.b 1 ROM:000D6FBF dc.b $A7 ; 3D, with a duration of 6 ROM:000D6FC0 dc.b 6 ROM:000D6FC1 dc.b $A7 ; 3D, with a duration of 0? ROM:000D6FC2 dc.b $A7 ; 3D, with a duration of 0? ROM:000D6FC3 dc.b $A7 ; 3D, with a duration of 5 ROM:000D6FC4 dc.b 5 ROM:000D6FC5 dc.b $80 ; Rest, with a duration of 7 ROM:000D6FC6 dc.b 7 ROM:000D6FC7 dc.b $A7 ; 3D, with a duration of 5 ROM:000D6FC8 dc.b 5 ROM:000D6FC9 dc.b $80 ; Rest, with a duration of 7 ROM:000D6FCA dc.b 7 ROM:000D6FCB dc.b $A9 ; 3E, with a duration of 3 ROM:000D6FCC dc.b 3 ROM:000D6FCD dc.b $80 ; Rest, with a duration of 9 ROM:000D6FCE dc.b 9 ROM:000D6FCF dc.b $A9 ; 3E, with a duration of 3 ROM:000D6FD0 dc.b 3 ROM:000D6FD1 dc.b $80 ; Rest, with a duration of 9 ROM:000D6FD2 dc.b 9 ROM:000D6FD3 dc.b $A9 ; 3E, with a duration of 5 ROM:000D6FD4 dc.b 5 ROM:000D6FD5 dc.b $80 ; Rest, with a duration of 7 ROM:000D6FD6 dc.b 7 ROM:000D6FD7 dc.b $A9 ; 3E, with a duration of 11 ROM:000D6FD8 dc.b $11 ROM:000D6FD9 dc.b $80 ; Rest, with a duration of 1 ROM:000D6FDA dc.b 1 ROM:000D6FDB dc.b $AC ; 3G, with a duration of 5 ROM:000D6FDC dc.b 5 ROM:000D6FDD dc.b $80 ; Rest, with a duration of 13 ROM:000D6FDE dc.b $D ROM:000D6FDF dc.b $AE ; 3A, with a duration of 5 ROM:000D6FE0 dc.b 5 ROM:000D6FE1 dc.b $80 ; Rest, with a duration of 13 ROM:000D6FE2 dc.b $D ROM:000D6FE3 dc.b $B1 ; 4C, with a duration of 17 ROM:000D6FE4 dc.b $11 ROM:000D6FE5 dc.b $80 ; Rest, with a duration of 1 ROM:000D6FE6 dc.b 1 ROM:000D6FE7 dc.b $B3 ; 4D, with a duration of 95 ROM:000D6FE8 dc.b $5F ROM:000D6FE9 dc.b $80 ; Rest, with a duration of 1 ROM:000D6FEA dc.b 1 ROM:000D6FEB dc.b $F2 ; cfStopTrack 32.) (2F) Data Select - 0xD7027 No other unused data aside from unused cfStopTrack calls. 33.) (1D) Bonus Stage (Slot Machine) - 0xD8000 No unused data whatsoever. 34.) (1E) Bonus Stage (Gumball) - 0xD8AE8 No unused data whatsoever. 35.) (1F) Sonic 3 - Knuckles' Theme - 0xD97FD The most interesting of the bunch, in my opinion. There seem to be unused notes (comes after a cfJumpTo, which is why it's never used): Code (ASM): ROM:000D9861 dc.b $F7 ; cfRepeatAtPos with an loop counter index of 0, a repeat count of 2, and a target of 0x9861 ROM:000D9862 dc.b 0 ROM:000D9863 dc.b 2 ROM:000D9864 dc.b $61 ; a ROM:000D9865 dc.b $98 ; ÿ ROM:000D9866 dc.b $F6 ; cfJumpTo 982D ROM:000D9867 dc.b $2D ; - ROM:000D9868 dc.b $98 ; ÿ ROM:000D9869 dc.b $EF ; cfSetVoice to voice #1 ROM:000D986A dc.b 1 ROM:000D986B dc.b $8D ; 1C, with a duration of 12 ROM:000D986C dc.b $C ROM:000D986D dc.b $80 ; Rest, with a duration of 7 ROM:000D986E dc.b 7 ROM:000D986F dc.b $8D ; 1C, with a duration of 5 ROM:000D9870 dc.b 5 ROM:000D9871 dc.b $80 ; Rest with a duration of 12 ROM:000D9872 dc.b $C ROM:000D9873 dc.b $8D ; 1C, with a duration of 0? ROM:000D9874 dc.b $80 ; Rest, with a duration of 0? ROM:000D9875 dc.b $8D ; 1C, with a duration of 0? ROM:000D9876 dc.b $80 ; Rest, with a duration of 24? ROM:000D9877 dc.b $18 ROM:000D9878 dc.b $F9 ; cfJumpReturn ROM:000D9879 dc.b $EF ; cfSetVoice to voice #1 ROM:000D987A dc.b 1 ROM:000D987B dc.b $8D ; 1C, with a duration of 12 ROM:000D987C dc.b $C ROM:000D987D dc.b $80 ; Rest, with a duration of 7 ROM:000D987E dc.b 7 ROM:000D987F dc.b $8D ; 1C, with a duration of 5 ROM:000D9880 dc.b 5 ROM:000D9881 dc.b $80 ; Rest, with a duration of 12 ROM:000D9882 dc.b $C ROM:000D9883 dc.b $8D ; 1C, with a duration of 0? ROM:000D9884 dc.b $80 ; Rest, with a duration of 7 ROM:000D9885 dc.b 7 ROM:000D9886 dc.b $8D ; 1C, with a duration of 5 ROM:000D9887 dc.b 5 ROM:000D9888 dc.b $8D ; 1C, with a duration of 12 ROM:000D9889 dc.b $C ROM:000D988A dc.b $80 ; Rest, with a duration of 24 ROM:000D988B dc.b $18 ROM:000D988C dc.b $F9 ; cfJumpReturn ROM:000D988D dc.b $EF ; cfSetVoice to voice #1 ROM:000D988E dc.b 1 ROM:000D988F dc.b $8D ; 1C, with a duration of 12 ROM:000D9890 dc.b $C ROM:000D9891 dc.b $80 ; Rest, with a duration of 24 ROM:000D9892 dc.b $18 ROM:000D9893 dc.b $80 ; Rest, with a duration of 12 ROM:000D9894 dc.b $C ROM:000D9895 dc.b $80 ; Rest, with a duration of 0? ROM:000D9896 dc.b $80 ; Rest, with a duration of 0? ROM:000D9897 dc.b $80 ; Rest, with a duration of 0? ROM:000D9898 dc.b $80 ; Rest, with a duration of 0? ROM:000D9899 dc.b $F9 ; cfJumpReturn ROM:000D989A dc.b $EF ; cfSetVoice to #1 ROM:000D989B dc.b 1 ROM:000D989C dc.b $8D ; 1C, with a duration of 24 ROM:000D989D dc.b $18 ROM:000D989E dc.b $80 ; Rest, with a duration of 0? ROM:000D989F dc.b $8D ; 1C, with a duration of 3 ROM:000D98A0 dc.b 3 ROM:000D98A1 dc.b $8D ; 1C, with a duration of 0? ROM:000D98A2 dc.b $8D ; 1C, with a duration of 0? ROM:000D98A3 dc.b $8D ; 1C, with a duration of 0? ROM:000D98A4 dc.b $8D ; 1C, with a duration of 0? ROM:000D98A5 dc.b $8D ; 1C, with a duration of 0? ROM:000D98A6 dc.b $8D ; 1C, with a duration of 0? ROM:000D98A7 dc.b $8D ; 1C, with a duration of 0? ROM:000D98A8 dc.b $8D ; 1C, with a duration of 24 ROM:000D98A9 dc.b $18 ROM:000D98AA dc.b $F9 ; cfJumpReturn ROM:000D98AB dc.b $EF ; cfSetVoice to voice #1 ROM:000D98AC dc.b 1 ROM:000D98AD dc.b $8D ; 1C, with a duration of 9 and 3 ROM:000D98AE dc.b 9 ROM:000D98AF dc.b 3 ROM:000D98B0 dc.b $80 ; Rest, with a duration of 7 ROM:000D98B1 dc.b 7 ROM:000D98B2 dc.b $8D ; 1C, with a duration of 5 ROM:000D98B3 dc.b 5 ROM:000D98B4 dc.b $EF ; cfSetVoice to voice #2 ROM:000D98B5 dc.b 2 ROM:000D98B6 dc.b $A9 ; 3E with a duration of 12 ROM:000D98B7 dc.b $C ROM:000D98B8 dc.b $EF ; cfSetVoice to voice #1 ROM:000D98B9 dc.b 1 ROM:000D98BA dc.b $8D ; 1C, with a duration of 0? ROM:000D98BB dc.b $80 ; Rest, with a duration of 0? ROM:000D98BC dc.b $8D ; 1C, with a duration of 0? ROM:000D98BD dc.b $EF ; cfSetVoice to voice #2 ROM:000D98BE dc.b 2 ROM:000D98BF dc.b $A9 ; 3E, with a duration of 24 ROM:000D98C0 dc.b $18 ROM:000D98C1 dc.b $F9 ; cfJumpReturn ROM:000D98C2 dc.b $EF ; cfSetVoice to voice #1 ROM:000D98C3 dc.b 1 ROM:000D98C4 dc.b $8D ; 1C, with a duration of 12 ROM:000D98C5 dc.b $C ROM:000D98C6 dc.b $80 ; Rest, with a duration of 7 ROM:000D98C7 dc.b 7 ROM:000D98C8 dc.b $8D ; 1C, with a duration of 5 ROM:000D98C9 dc.b 5 ROM:000D98CA dc.b $EF ; cfSetVoice to voice #2 ROM:000D98CB dc.b 2 ROM:000D98CC dc.b $A9 ; 3E, with a duration of 12 ROM:000D98CD dc.b $C ROM:000D98CE dc.b $EF ; cfSetVoice to voice #1 ROM:000D98CF dc.b 1 ROM:000D98D0 dc.b $8D ; 1C, with a duration of 0? ROM:000D98D1 dc.b $80 ; Rest, with a duration of 7 ROM:000D98D2 dc.b 7 ROM:000D98D3 dc.b $80 ; Rest, with a duration of 5 ROM:000D98D4 dc.b 5 ROM:000D98D5 dc.b $8D ; 1C, with a duration of 12 ROM:000D98D6 dc.b $C ROM:000D98D7 dc.b $EF ; cfSetVoice to voice #2 ROM:000D98D8 dc.b 2 ROM:000D98D9 dc.b $A9 ; 3E, with a duration of 19 ROM:000D98DA dc.b $13 ROM:000D98DB dc.b $80 ; Rest, with a duration of 5 ROM:000D98DC dc.b 5 ROM:000D98DD dc.b $F9 ; cfJumpReturn ROM:000D98DE dc.b $EF ; cfSetVoice to voice #1 ROM:000D98DF dc.b 1 ROM:000D98E0 dc.b $8D ; 1C, with a duration of 12 ROM:000D98E1 dc.b $C ROM:000D98E2 dc.b $80 ; Rest, with a duration of 0? ROM:000D98E3 dc.b $EF ; cFSetVoice to voice #2 ROM:000D98E4 dc.b 2 ROM:000D98E5 dc.b $A9 ; 3E. with a duration of 0? ROM:000D98E6 dc.b $EF ; cfSetVoice to voice #1 ROM:000D98E7 dc.b 1 ROM:000D98E8 dc.b $8D ; 1C, with a duration of 0? ROM:000D98E9 dc.b $8D ; 1C, with a duration of 0? ROM:000D98EA dc.b $8D ; 1C, with a duration of 0? ROM:000D98EB dc.b $EF ; cfSetVoice to voice #2 ROM:000D98EC dc.b 2 ROM:000D98ED dc.b $A9 ; 3E, with a duration of 0? ROM:000D98EE dc.b $EF ; cfSetVoice to voice #1 ROM:000D98EF dc.b 1 ROM:000D98F0 dc.b $8D ; 1C, with a duration of 5 ROM:000D98F1 dc.b 5 ROM:000D98F2 dc.b $EF ; cfSetVoice to voice #2 ROM:000D98F3 dc.b 2 ROM:000D98F4 dc.b $80 ; Rest, with a duration of 7 ROM:000D98F5 dc.b 7 ROM:000D98F6 dc.b $F9 ; cfJumpReturn ROM:000D98F7 dc.b $EF ; cfSetVoice to voice #1 ROM:000D98F8 dc.b 1 ROM:000D98F9 dc.b $8D ; 1C, with a duration of 12 ROM:000D98FA dc.b $C ROM:000D98FB dc.b $80 ; Rest, with a duration of 7 ROM:000D98FC dc.b 7 ROM:000D98FD dc.b $8D ; 1C, with a duration of 5 ROM:000D98FE dc.b 5 ROM:000D98FF dc.b $EF ; cfSetVoice to voice #2 ROM:000D9900 dc.b 2 ROM:000D9901 dc.b $A9 ; 3E, with a duration of 12 ROM:000D9902 dc.b $C ROM:000D9903 dc.b $EF ; cfSetVoice to voice #1 ROM:000D9904 dc.b 1 ROM:000D9905 dc.b $8D ; 1C, with a duration of 0? ROM:000D9906 dc.b $80 ; Rest, with a duration of 7 ROM:000D9907 dc.b 7 ROM:000D9908 dc.b $80 ; Rest, with a duration of 5 ROM:000D9909 dc.b 5 ROM:000D990A dc.b $8D ; 1C, with a duration of 12 ROM:000D990B dc.b $C ROM:000D990C dc.b $EF ; cfSetVoice to a voice of #2 ROM:000D990D dc.b 2 ROM:000D990E dc.b $A9 ; 3E, with a duration of 19 ROM:000D990F dc.b $13 ROM:000D9910 dc.b $A9 ; 3E, with a duration of 5 ROM:000D9911 dc.b 5 ROM:000D9912 dc.b $F9 ; cfJumpReturn 36.) (20) Azure Lake - 0xD99F7 No other unused data aside from unused cfStopTrack calls. 37.) (21) Balloon Park - 0xDA4FD This song has a huge chunk of unused data. This seems to be related to one of the PSG channels. Again, this follows after a used cfStopTrack but for some reason BizHawk marked the byte after the cfStopTrack as used. I'm not sure if all of this is note data or if there's some voice data thrown in. Code (ASM): ROM:000DAE03 dc.b $F2 ; Z80 Data ROM:000DAE04 dc.b $F3 ; Z80 Data - cfSetPSGNoise to $E7 ROM:000DAE05 dc.b $E7 ROM:000DAE06 dc.b $80 ; Rest, with a duration of 48 ROM:000DAE07 dc.b $30 ROM:000DAE08 dc.b $80 ; Rest, with a duration of 48 ROM:000DAE09 dc.b $30 ROM:000DAE0A dc.b $80 ; Rest, with a duration of 0? ROM:000DAE0B dc.b $80 ; Rest, with a duration of 0? ROM:000DAE0C dc.b $80 ; Rest, with a duration of 0? ROM:000DAE0D dc.b $80 ; Rest, with a duration of 0? ROM:000DAE0E dc.b $80 ; Rest, with a duration of 0? ROM:000DAE0F dc.b $80 ; Rest, with a duration of 0? ROM:000DAE10 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE11 dc.b $BB ; 4A?/B?, with a duration of 5 ROM:000DAE12 dc.b 5 ROM:000DAE13 dc.b $80 ; Rest, with a duration of 19 ROM:000DAE14 dc.b $13 ROM:000DAE15 dc.b $BB ; 4A?/B?, with a duration of 4 ROM:000DAE16 dc.b 4 ROM:000DAE17 dc.b $80 ; Rest, with a duration of 2 ROM:000DAE18 dc.b 2 ROM:000DAE19 dc.b $BB ; 4A?/B?, with a duration of 4 ROM:000DAE1A dc.b 4 ROM:000DAE1B dc.b $80 ; Rest, with a duration of 14 ROM:000DAE1C dc.b $E ROM:000DAE1D dc.b $BB ; 4A?/B?, with a duration of 5 ROM:000DAE1E dc.b 5 ROM:000DAE1F dc.b $80 ; Rest, with a duration of 19 ROM:000DAE20 dc.b $13 ROM:000DAE21 dc.b $BB ; 4A?/B?, with a duration of 6 and 1 ROM:000DAE22 dc.b 6 ROM:000DAE23 dc.b 1 ROM:000DAE24 dc.b $80 ; Rest, with a duration of 17 ROM:000DAE25 dc.b $11 ROM:000DAE26 dc.b $BB ; 4A?/B?, with a duration of 7 ROM:000DAE27 dc.b 7 ROM:000DAE28 dc.b $80 ; Rest, with a duration of 17 ROM:000DAE29 dc.b $11 ROM:000DAE2A dc.b $BB ; 4A?/B?, with a duration of 4 ROM:000DAE2B dc.b 4 ROM:000DAE2C dc.b $80 ; Rest, with a duration of 2 ROM:000DAE2D dc.b 2 ROM:000DAE2E dc.b $BB ; 4A?/B?, with a duration of 4 ROM:000DAE2F dc.b 4 ROM:000DAE30 dc.b $80 ; Rest, with a duration of 14 ROM:000DAE31 dc.b $E ROM:000DAE32 dc.b $BB ; 4A?/B?, with a duration of 7 ROM:000DAE33 dc.b 7 ROM:000DAE34 dc.b $80 ; Rest, with a duration of 17 ROM:000DAE35 dc.b $11 ROM:000DAE36 dc.b $BB ; 4A?/B?, with a duration of 6 and 1 ROM:000DAE37 dc.b 6 ROM:000DAE38 dc.b 1 ROM:000DAE39 dc.b $80 ; Rest, with a duration of 17 ROM:000DAE3A dc.b $11 ROM:000DAE3B dc.b $80 ; Rest, with a duration of 48 ROM:000DAE3C dc.b $30 ROM:000DAE3D dc.b $80 ; Rest, with a duration of 0? ROM:000DAE3E dc.b $80 ; Rest, with a duration of 0? ROM:000DAE3F dc.b $80 ; Rest, with a duration of 0? ROM:000DAE40 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE41 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE42 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE43 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE44 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE45 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE46 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE47 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE48 dc.b $BA ; 4A, with a duration of 5 ROM:000DAE49 dc.b 5 ROM:000DAE4A dc.b $80 ; Rest, with a duration of 19 ROM:000DAE4B dc.b $13 ROM:000DAE4C dc.b $BA ; 4A, with a duration of 4 ROM:000DAE4D dc.b 4 ROM:000DAE4E dc.b $80 ; Rest, with a duration of 2 ROM:000DAE4F dc.b 2 ROM:000DAE50 dc.b $BA ; 4A, with a duration of 4 ROM:000DAE51 dc.b 4 ROM:000DAE52 dc.b $80 ; Rest, with a duration of 14 ROM:000DAE53 dc.b $E ROM:000DAE54 dc.b $BA ; 4A, with a duration of 5 ROM:000DAE55 dc.b 5 ROM:000DAE56 dc.b $80 ; Rest, with a duration of 19 ROM:000DAE57 dc.b $13 ROM:000DAE58 dc.b $BA ; 4A, with a duration of 6 and 1 ROM:000DAE59 dc.b 6 ROM:000DAE5A dc.b 1 ROM:000DAE5B dc.b $80 ; Rest, with a duration of 17 ROM:000DAE5C dc.b $11 ROM:000DAE5D dc.b $BA ; 4A, with a duration of 7 ROM:000DAE5E dc.b 7 ROM:000DAE5F dc.b $80 ; Rest, with a duration of 17 ROM:000DAE60 dc.b $11 ROM:000DAE61 dc.b $BA ; 4A, with a duration of 4 ROM:000DAE62 dc.b 4 ROM:000DAE63 dc.b $80 ; Rest, with a duration of 2 ROM:000DAE64 dc.b 2 ROM:000DAE65 dc.b $BA ; ¦ 4A, with a duration of 4 ROM:000DAE66 dc.b 4 ROM:000DAE67 dc.b $80 ; Rest, with a duration of 14 ROM:000DAE68 dc.b $E ROM:000DAE69 dc.b $BA ; 4A, with a duration of 7 ROM:000DAE6A dc.b 7 ROM:000DAE6B dc.b $80 ; Rest, with a duration of 17 ROM:000DAE6C dc.b $11 ROM:000DAE6D dc.b $BA ; 4A, with a duration of 6 and 1 ROM:000DAE6E dc.b 6 ROM:000DAE6F dc.b 1 ROM:000DAE70 dc.b $80 ; Rest, with a duration of 17 ROM:000DAE71 dc.b $11 ROM:000DAE72 dc.b $80 ; Rest, with a duration of 48 ROM:000DAE73 dc.b $30 ROM:000DAE74 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE75 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE76 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE77 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE78 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE79 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE7A dc.b $80 ; Rest, with a duration of 0? ROM:000DAE7B dc.b $80 ; Rest, with a duration of 0? ROM:000DAE7C dc.b $80 ; Rest, with a duration of 0? ROM:000DAE7D dc.b $80 ; Rest, with a duration of 0? ROM:000DAE7E dc.b $80 ; Rest, with a duration of 0? ROM:000DAE7F dc.b $80 ; Rest, with a duration of 0? ROM:000DAE80 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE81 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE82 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE83 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE84 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE85 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE86 dc.b $80 ; Rest, with a duration of 0? ROM:000DAE87 dc.b $80 ; Rest, with a duration of 12 ROM:000DAE88 dc.b $C ROM:000DAE89 dc.b $BA ; 4A, with a duration of 6 ROM:000DAE8A dc.b 6 ROM:000DAE8B dc.b $BA ; 4A, with a duration of 0? ROM:000DAE8C dc.b $80 ; Rest, with a duration of 12 ROM:000DAE8D dc.b $C ROM:000DAE8E dc.b $BA ; 4A, with a duration of 6 ROM:000DAE8F dc.b 6 ROM:000DAE90 dc.b $BA ; 4A, with a duration of 0? ROM:000DAE91 dc.b $80 ; Rest, with a duration of 12 ROM:000DAE92 dc.b $C ROM:000DAE93 dc.b $BA ; 4A, with a duration of 6 ROM:000DAE94 dc.b 6 ROM:000DAE95 dc.b $BA ; 4A, with a duration of 0? ROM:000DAE96 dc.b $80 ; Rest, with a duration of 12 ROM:000DAE97 dc.b $C ROM:000DAE98 dc.b $BA ; 4A, with a duration of 6 ROM:000DAE99 dc.b 6 ROM:000DAE9A dc.b $BA ;4A, with a duration of 0 ROM:000DAE9B dc.b $80 ; Rest, with a duration of 12 ROM:000DAE9C dc.b $C ROM:000DAE9D dc.b $BA ; 4A, with a duration of 6 ROM:000DAE9E dc.b 6 ROM:000DAE9F dc.b $BA ; 4A, with a duration of 0 ROM:000DAEA0 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEA1 dc.b $C ROM:000DAEA2 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEA3 dc.b 6 ROM:000DAEA4 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEA5 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEA6 dc.b $C ROM:000DAEA7 dc.b $BA ; 4A, with a duration of 6 ROM:000DAEA8 dc.b 6 ROM:000DAEA9 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEAA dc.b $80 ; Rest, with a duration of 12 ROM:000DAEAB dc.b $C ROM:000DAEAC dc.b $BA ; 4A, with a duration of 6 ROM:000DAEAD dc.b 6 ROM:000DAEAE dc.b $BA ; 4A, with a duration of 0 ROM:000DAEAF dc.b $80 ; Rest, with a duration of 12 ROM:000DAEB0 dc.b $C ROM:000DAEB1 dc.b $BA ; 4A, with a duration of 6 ROM:000DAEB2 dc.b 6 ROM:000DAEB3 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEB4 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEB5 dc.b $C ROM:000DAEB6 dc.b $BA ; 4A, with a duration of 6 ROM:000DAEB7 dc.b 6 ROM:000DAEB8 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEB9 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEBA dc.b $C ROM:000DAEBB dc.b $BA ; 4A, with a duration of 6 ROM:000DAEBC dc.b 6 ROM:000DAEBD dc.b $BA ; 4A, with a duration of 0 ROM:000DAEBE dc.b $80 ; Rest, with a duration of 12 ROM:000DAEBF dc.b $C ROM:000DAEC0 dc.b $BA ; 4A, with a duration of 6 ROM:000DAEC1 dc.b 6 ROM:000DAEC2 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEC3 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEC4 dc.b $C ROM:000DAEC5 dc.b $BA ; 4A, with a duration of 6 ROM:000DAEC6 dc.b 6 ROM:000DAEC7 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEC8 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEC9 dc.b $C ROM:000DAECA dc.b $BA ; 4A, with a duration of 6 ROM:000DAECB dc.b 6 ROM:000DAECC dc.b $BA ; 4A, with a duration of 0 ROM:000DAECD dc.b $80 ; Rest, with a duration of 12 ROM:000DAECE dc.b $C ROM:000DAECF dc.b $BA ; 4A, with a duration of 6 ROM:000DAED0 dc.b 6 ROM:000DAED1 dc.b $BA ; 4A, with a duration of 0 ROM:000DAED2 dc.b $80 ; Rest, with a duration of 12 ROM:000DAED3 dc.b $C ROM:000DAED4 dc.b $BA ; 4A, with a duration of 6 ROM:000DAED5 dc.b 6 ROM:000DAED6 dc.b $BA ; 4A, with a duration of 0 ROM:000DAED7 dc.b $80 ; Rest, with a duration of 12 ROM:000DAED8 dc.b $C ROM:000DAED9 dc.b $BA ; 4A, with a duration of 6 ROM:000DAEDA dc.b 6 ROM:000DAEDB dc.b $BA ; 4A, with a duration of 0 ROM:000DAEDC dc.b $80 ; Rest, with a duration of 12 ROM:000DAEDD dc.b $C ROM:000DAEDE dc.b $BA ; 4A, with a duration of 6 ROM:000DAEDF dc.b 6 ROM:000DAEE0 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEE1 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEE2 dc.b $C ROM:000DAEE3 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEE4 dc.b 6 ROM:000DAEE5 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEE6 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEE7 dc.b $C ROM:000DAEE8 dc.b $BA ; 4A, with a duration of 6 ROM:000DAEE9 dc.b 6 ROM:000DAEEA dc.b $BA ; 4A, with a duration of 0 ROM:000DAEEB dc.b $80 ; Rest, with a duration of 12 ROM:000DAEEC dc.b $C ROM:000DAEED dc.b $BA ; 4A, with a duration of 6 ROM:000DAEEE dc.b 6 ROM:000DAEEF dc.b $BA ; 4A, with a duration of 0 ROM:000DAEF0 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEF1 dc.b $C ROM:000DAEF2 dc.b $BA ; 4A, with a duration of 6 ROM:000DAEF3 dc.b 6 ROM:000DAEF4 dc.b $BA ; 4A, with a duration of 0 ROM:000DAEF5 dc.b $80 ; Rest, with a duration of 12 ROM:000DAEF6 dc.b $C ROM:000DAEF7 dc.b $BA ; 4A, with a duration of 6 ROM:000DAEF8 dc.b 6 ROM:000DAEF9 dc.b $BA ;4A, with a duration of 0 ROM:000DAEFA dc.b $80 ; Rest, with a duration of 12 ROM:000DAEFB dc.b $C ROM:000DAEFC dc.b $BA ; 4A, with a duration of 6 ROM:000DAEFD dc.b 6 ROM:000DAEFE dc.b $BA ; 4A, with a duration of 0 ROM:000DAEFF dc.b $80 ; Rest, with a duration of 12 ROM:000DAF00 dc.b $C ROM:000DAF01 dc.b $BA ; 4A, with a duration of 6 ROM:000DAF02 dc.b 6 ROM:000DAF03 dc.b $BA ; 4A, with a duration of 0 ROM:000DAF04 dc.b $80 ; Rest, with a duration of 12 ROM:000DAF05 dc.b $C ROM:000DAF06 dc.b $BA ; 4A, with a duration of 6 ROM:000DAF07 dc.b 6 ROM:000DAF08 dc.b $BA ; 4A, with a duration of 0 ROM:000DAF09 dc.b $80 ; Rest, with a duration of 12 ROM:000DAF0A dc.b $C ROM:000DAF0B dc.b $BA ; 4A, with a duration of 6 ROM:000DAF0C dc.b 6 ROM:000DAF0D dc.b $BA ; 4A, with a duration of 0 ROM:000DAF0E dc.b $80 ; Ç ROM:000DAF0F dc.b $C ROM:000DAF10 dc.b $BA ; 4A, with a duration of 6 ROM:000DAF11 dc.b 6 ROM:000DAF12 dc.b $BA ; 4A, with a duration of 0 ROM:000DAF13 dc.b $80 ; Rest, with a duration of 12 ROM:000DAF14 dc.b $C ROM:000DAF15 dc.b $BA ; 4A, with a duration of 6 ROM:000DAF16 dc.b 6 ROM:000DAF17 dc.b $BA ; 4A, with a duration of 0 ROM:000DAF18 dc.b $80 ; Rest, with a duration of 12 ROM:000DAF19 dc.b $C ROM:000DAF1A dc.b $BA ; 4A, with a duration of 6 ROM:000DAF1B dc.b 6 ROM:000DAF1C dc.b $BA ; 4A, with a duration of 0 ROM:000DAF1D dc.b $80 ; Rest, with a duration of 12 ROM:000DAF1E dc.b $C ROM:000DAF1F dc.b $BA ; 4A, with a duration of 6 ROM:000DAF20 dc.b 6 ROM:000DAF21 dc.b $BA ; 4A, with a duration of 0 ROM:000DAF22 dc.b $80 ; Rest, with a duration of 12 ROM:000DAF23 dc.b $C ROM:000DAF24 dc.b $BA ; 4A, with a duration of 6 ROM:000DAF25 dc.b 6 ROM:000DAF26 dc.b $BA ; 4A, with a duration of 0? ROM:000DAF27 dc.b $F6 ; cfJumpTo AE08 ROM:000DAF28 dc.b 8 ROM:000DAF29 dc.b $AE 38.) (22) Desert Palace - 0xDB0EC No other unused data aside from unused cfStopTrack calls. 39.) (23) Chrome Gadget - 0xDC324 Unused cfJumpTo. This is never called because it follows after another cfJumpTo that's used. Code (ASM): ROM:000DCD2F dc.b $F6 ; Z80 Data - cfJumpTo CA33 ROM:000DCD30 dc.b $33 ; Z80 Data ROM:000DCD31 dc.b $CA ; Z80 Data ROM:000DCD32 dc.b $F6 ; cfJumpTo CD2F ROM:000DCD33 dc.b $2F ; / ROM:000DCD34 dc.b $CD ; - ROM:000DCD35 dc.b $F2 ; cfStopTrack 40.) (24) Endless Mine - 0xDDA47 No other unused data aside from unused cfStopTrack calls. 41.) (25) Sonic 3 Title - 0xDE18F There are no unused cfStopTrack calls so this might've been programmed by hand. Unused voice. Code (ASM): ROM:000DE555 dc.b $3C ; < ROM:000DE556 dc.b $71 ; q ROM:000DE557 dc.b $31 ; 1 ROM:000DE558 dc.b $12 ROM:000DE559 dc.b $11 ROM:000DE55A dc.b $17 ROM:000DE55B dc.b $1F ROM:000DE55C dc.b $19 ROM:000DE55D dc.b $2F ; / ROM:000DE55E dc.b 4 ROM:000DE55F dc.b 1 ROM:000DE560 dc.b 7 ROM:000DE561 dc.b 1 ROM:000DE562 dc.b 0 ROM:000DE563 dc.b 0 ROM:000DE564 dc.b 0 ROM:000DE565 dc.b 0 ROM:000DE566 dc.b $F7 ; ˜ ROM:000DE567 dc.b $F8 ; ° ROM:000DE568 dc.b $F7 ; ˜ ROM:000DE569 dc.b $F8 ; ° ROM:000DE56A dc.b $1D ROM:000DE56B dc.b $84 ; ä ROM:000DE56C dc.b $19 ROM:000DE56D dc.b $84 ; ä 42.) (26) Sonic 3 Credits - 0xDE587 Another interesting song. This also lacks unused cfStopTrack calls and is filled with random unused notes. Possibly programmed by hand. Unused notes: Code (ASM): ROM:000DE5D7 dc.b $E6 ; cfChangeVolume to 9 ROM:000DE5D8 dc.b 9 ROM:000DE5D9 dc.b $A1 ; 2G?/A? with a duration of 96 ROM:000DE5DA dc.b $60 ROM:000DE5DB dc.b $A1 ; 2G?/A? with a duration of 0? ROM:000DE5DC dc.b $E6 ; cfChangeVolume to -9? ROM:000DE5DD dc.b $F7 ROM:000DE5DE dc.b $EF ; cfSetVoice to voice #0 ROM:000DE5DF dc.b 0 ROM:000DE5E0 dc.b $F8 ; cfJumpToGosub to E5E6 ROM:000DE5E1 dc.b $E6 ROM:000DE5E2 dc.b $E5 ROM:000DE5E3 dc.b $F6 ; cfJumpTo E5E0 ROM:000DE5E4 dc.b $E0 ROM:000DE5E5 dc.b $E5 Unused notes, these are just commands to jump: Code (ASM): ROM:000DE69D dc.b $F8 ; cfJumpToGosub to E6FD ROM:000DE69E dc.b $FD ROM:000DE69F dc.b $E6 ROM:000DE6A0 dc.b $F6 ; cfJumpTo E69D ROM:000DE6A1 dc.b $9D ROM:000DE6A2 dc.b $E6 Code (ASM): ROM:000DE7BE dc.b $C0 ; 5D?/E?, with a duration of 96 ROM:000DE7BF dc.b $60 ROM:000DE7C0 dc.b $E7 ; cfPreventAttack but with a param? This doesn't take a param though... ROM:000DE7C1 dc.b $60 ROM:000DE7C2 dc.b $F8 ; cfJumpToGosub E7D8 ROM:000DE7C3 dc.b $D8 ROM:000DE7C4 dc.b $E7 ; cfPreventAttack ROM:000DE7C5 dc.b $F8 ; cfJumpToGosub E7F7 ROM:000DE7C6 dc.b $F7 ROM:000DE7C7 dc.b $E7 ROM:000DE7C8 dc.b $F6 ; cfJumpTo E7C2 ROM:000DE7C9 dc.b $C2 ROM:000DE7CA dc.b $E7 Unused notes Code (ASM): ROM:000DE857 dc.b $AF ; 3A?/B?, with a duration of 96 ROM:000DE858 dc.b $60 ROM:000DE859 dc.b $B1 ; 4C, with a duration of 0? ROM:000DE85A dc.b $FB ; cfChangeTransposition to 0xF4? ROM:000DE85B dc.b $F4 ROM:000DE85C dc.b $F8 ; cfJumpToGosub E7D8 ROM:000DE85D dc.b $D8 ROM:000DE85E dc.b $E7 ROM:000DE85F dc.b $FB ; cfChangeTransposition to 0xC? ROM:000DE860 dc.b $C ROM:000DE861 dc.b $E6 ; cfChangeVolume to -3? ROM:000DE862 dc.b $FD ROM:000DE863 dc.b $AB ; 3F?/G?, with a duration of 36 ROM:000DE864 dc.b $24 ROM:000DE865 dc.b $AF ; 3A?/B?, with a duration of 0? ROM:000DE866 dc.b $B2 ; 4C?/D?, with a duration of 24 ROM:000DE867 dc.b $18 ROM:000DE868 dc.b $B1 ; 4C, with a duration of 36 ROM:000DE869 dc.b $24 ROM:000DE86A dc.b $AD ; 3G?/A?, with a duration of 0? ROM:000DE86B dc.b $A8 ; 3D?/E?, with a duration of 24 ROM:000DE86C dc.b $18 ROM:000DE86D dc.b $E6 ; cfChangeVolume to 3 ROM:000DE86E dc.b 3 ROM:000DE86F dc.b $F6 ; cfJumpTo E85A ROM:000DE870 dc.b $5A ROM:000DE871 dc.b $E8 Some unused jumps Code (ASM): ROM:000DE8BC dc.b $F8 ; cfJumpToGosub E8C2 ROM:000DE8BD dc.b $C2 ROM:000DE8BE dc.b $E8 ROM:000DE8BF dc.b $F6 ; cfJumpTo E8BC ROM:000DE8C0 dc.b $BC ROM:000DE8C1 dc.b $E8 Unused notes: Code (ASM): ROM:000DE9C0 dc.b $C0 ; 5D?/E?, with duration 24 ROM:000DE9C1 dc.b $18 ROM:000DE9C2 dc.b $A3 ; 2A?/B? ROM:000DE9C3 dc.b $A4 ; 2B ROM:000DE9C4 dc.b $A3 ; 2A?/B? ROM:000DE9C5 dc.b $F7 ; cfRepeatAtPos with index 0, a repeat count of 3, and a jump targe of E9C0 ROM:000DE9C6 dc.b 0 ROM:000DE9C7 dc.b 3 ROM:000DE9C8 dc.b $C0 ; 5D?/E?, with a duration of 0? ROM:000DE9C9 dc.b $E9 ; cfSpindashRev (rev's up the track) ROM:000DE9CA dc.b $C0 ; 5D?/E?, with duration of 24 ROM:000DE9CB dc.b $18 ROM:000DE9CC dc.b $A3 ; 2A?/B?, with a duration of 12 ROM:000DE9CD dc.b $12 ROM:000DE9CE dc.b $80 ; Rest, with a duration of 0 ROM:000DE9CF dc.b $12 ROM:000DE9D0 dc.b $C0 ; 5D?/E?, with a duration of 0 ROM:000DE9D1 dc.b $C0 ; 5D?/E?, with a duration of 0 ROM:000DE9D2 dc.b $F6 ; cfJumpto E9C0 ROM:000DE9D3 dc.b $C0 ROM:000DE9D4 dc.b $E9 43.) (27) Game Over - 0xDEA20 No unused bytes whatsoever. 44.) (28) Continue - 0xDEC7B Just some unused rests I think, with a cFStopTrack: Code (ASM): ROM:000DED31 dc.b $80 ; Ç ROM:000DED32 dc.b $7F ; ROM:000DED33 dc.b $80 ; Ç ROM:000DED34 dc.b $80 ; Ç ROM:000DED35 dc.b $80 ; Ç ROM:000DED36 dc.b $53 ; S ROM:000DED37 dc.b $F2 ; = [/code] Code (ASM): ROM:000DEE6E dc.b $80 ; Ç ROM:000DEE6F dc.b $7F ; ROM:000DEE70 dc.b $80 ; Ç ROM:000DEE71 dc.b $80 ; Ç ROM:000DEE72 dc.b $80 ; Ç ROM:000DEE73 dc.b $80 ; Ç ROM:000DEE74 dc.b $80 ; Ç ROM:000DEE75 dc.b $41 ; A ROM:000DEE76 dc.b $F2 ; = Code (ASM): ROM:000DEEE6 dc.b $80 ; Ç ROM:000DEEE7 dc.b $7F ; ROM:000DEEE8 dc.b $80 ; Ç ROM:000DEEE9 dc.b $80 ; Ç ROM:000DEEEA dc.b $5C ; \ ROM:000DEEEB dc.b $F2 ; = Code (ASM): ROM:000DEF48 dc.b $80 ; Ç ROM:000DEF49 dc.b $7F ; ROM:000DEF4A dc.b $80 ; Ç ROM:000DEF4B dc.b $80 ; Ç ROM:000DEF4C dc.b $5C ; \ ROM:000DEF4D dc.b $F2 ; = 45.) (2A) - Sonic 3 1UP - 0xDF095 Unused voice. Code (ASM): ROM:000DF266 dc.b $3C ; < ROM:000DF267 dc.b 1 ROM:000DF268 dc.b 2 ROM:000DF269 dc.b $F ROM:000DF26A dc.b 4 ROM:000DF26B dc.b $8D ; ì ROM:000DF26C dc.b $52 ; R ROM:000DF26D dc.b $9F ; ƒ ROM:000DF26E dc.b $1F ROM:000DF26F dc.b 9 ROM:000DF270 dc.b 0 ROM:000DF271 dc.b 0 ROM:000DF272 dc.b $D ROM:000DF273 dc.b 0 ROM:000DF274 dc.b 0 ROM:000DF275 dc.b 0 ROM:000DF276 dc.b 0 ROM:000DF277 dc.b $23 ; # ROM:000DF278 dc.b 8 ROM:000DF279 dc.b 2 ROM:000DF27A dc.b $F7 ; ˜ ROM:000DF27B dc.b $15 ROM:000DF27C dc.b $80 ; Ç ROM:000DF27D dc.b $1D ROM:000DF27E dc.b $87 ; ç 46.) (2B) Chaos Emerald - 0xDF298 Some unused notes. I have no idea why this is unused, as I didn't think it was unused when I looked at the data in Sonic 1? It's possible the song stops during the fade out so these don't get to play. The first cFSetVoice that is set to 1 was marked used by BizHawk, which is probably a mistake. Code (ASM): ROM:000DF301 dc.b $F2 ; Z80 Data - cFStopTrack ROM:000DF302 dc.b $EF ; Z80 Data - cFSetVoice to voice #1 ROM:000DF303 dc.b 1 ROM:000DF304 dc.b $C4 ; 5G, with duration 12 ROM:000DF305 dc.b $C ROM:000DF306 dc.b $C4 ; 5G, with duration 6 ROM:000DF307 dc.b 6 ROM:000DF308 dc.b $C9 ; 6C, with duration 6 ROM:000DF309 dc.b 6 ROM:000DF30A dc.b $80 ; Rest, with duration 0? ROM:000DF30B dc.b $C9 ; 6C, with duration 0? ROM:000DF30C dc.b $80 ; Rest, with duration 0? ROM:000DF30D dc.b $CD ; 6E, with duration 42? ROM:000DF30E dc.b $2A ; ROM:000DF30F dc.b $F2 ; cFStopTrack 47.) (2C) Sonic 3 Invincibility - 0xDF364 No other unused data aside from unused cfStopTrack calls. 48.) (2D) Competition Menu - 0xDF5E4 Unused voice: Code (ASM): ROM:000DFA5A dc.b 3 ROM:000DFA5B dc.b 2 ROM:000DFA5C dc.b 2 ROM:000DFA5D dc.b 2 ROM:000DFA5E dc.b 2 ROM:000DFA5F dc.b $1F ROM:000DFA60 dc.b $1F ROM:000DFA61 dc.b $1F ROM:000DFA62 dc.b $1F ROM:000DFA63 dc.b 8 ROM:000DFA64 dc.b 8 ROM:000DFA65 dc.b 0 ROM:000DFA66 dc.b $E ROM:000DFA67 dc.b 0 ROM:000DFA68 dc.b 0 ROM:000DFA69 dc.b 0 ROM:000DFA6A dc.b 5 ROM:000DFA6B dc.b $3F ; ? ROM:000DFA6C dc.b $3F ; ? ROM:000DFA6D dc.b $F ROM:000DFA6E dc.b $7F ; ROM:000DFA6F dc.b $81 ; ü ROM:000DFA70 dc.b $20 ROM:000DFA71 dc.b $1D ROM:000DFA72 dc.b $82 ; é 49.) (31) Drowning - 0xDFABE No unused bytes whatsoever. 50.) (32) Sonic 3 All Clear - 0xDFBFE Unused voice. Code (ASM): ROM:000DFE7A dc.b $3C ; < ROM:000DFE7B dc.b $71 ; q ROM:000DFE7C dc.b $31 ; 1 ROM:000DFE7D dc.b $12 ROM:000DFE7E dc.b $11 ROM:000DFE7F dc.b $17 ROM:000DFE80 dc.b $1F ROM:000DFE81 dc.b $19 ROM:000DFE82 dc.b $2F ; / ROM:000DFE83 dc.b 4 ROM:000DFE84 dc.b 1 ROM:000DFE85 dc.b 7 ROM:000DFE86 dc.b 1 ROM:000DFE87 dc.b 0 ROM:000DFE88 dc.b 0 ROM:000DFE89 dc.b 0 ROM:000DFE8A dc.b 0 ROM:000DFE8B dc.b $F7 ; ˜ ROM:000DFE8C dc.b $F8 ; ° ROM:000DFE8D dc.b $F7 ; ˜ ROM:000DFE8E dc.b $F8 ; ° ROM:000DFE8F dc.b $1D ROM:000DFE90 dc.b $84 ; ä ROM:000DFE91 dc.b $19 ROM:000DFE92 dc.b $84 ; ä ------------------------------------------------------------------------------------------------------------------------ It'd be interesting to see if anyone could take a look at those notes for S3 Knuckles theme and the Staff Credits, if those turn out to be anything at all. />
I don't think this is a likely case, as there is no reason for an automated tool to insert these artifacts into the sequence data. Indeed, it is far more likely that the music programmers used stop and jump commands to test the music in production stage, make sure it will loop correctly, and that everything will sound alright, and simply never went to remove the extra commands. This was a very common occurrence in Mega Drive titles, so much so that from the songs I've converted from game to another, I see this more often than not. And much unlike GEMS, SMPS was not designed to work with common formats (at the time), such as MIDI. I find it most likely sound programmers made the music by hand, and this is why you can find these unused oddities in the first place. Something that might help you in continued research though, is SMPS2ASM. These should help you with research to the actual tracker code, rather than having to look at hex dumps.
Double posting because I wanted to share this (so it doesn't get lost in the big post). Alternate Ending to the Sonic 3 Staff Credits So I looked into the unused sequence data for the Sonic 3 credits because I was genuinely curious what it was. I went in the ROM and changed the cFJumpTos that come before the unused bytes at 000DE5D7, 000DE857, and 000DE9C0 so that it jumps right to the unused sequencing data. I didn't modify the other sections, although I probably should have to see if it sounded any different. After the song loops once, this additional ending gets added. It might sound like it works, but it messed up a few seconds into the second loop so it's not exactly correct. I still don't know if this is actually how it's supposed to sound or if there's something missing, but it's definitely unused. /> Hmm, I didn't think about that but it makes a lot more sense. Woah this is great, thanks! This would've saved me a few hours. :P
Very neat find with the Sonic 3 staff credits. I like that transition! When I first heard that, I thought, "oh wow, there's actually an ending to the tune?", but then it looped. Could you modify the other sections to let us know how it sounds?
I gave it a try with SMPS2ASM and MDMusicPlayer. I modified the asm by eliminating the jumps and just leaving the unused parts as is. It still doesn't sound exactly right because I don't know what's meant to be there and what's there for some other reason (for testing, etc). One thing to note, the song will repeat a bar after the unused section instead of looping the song like it does originally. It looks like the unused calls/jumps were put there to loop that section of the song specifically, so I don't know if that was meant for testing or if the song was originally supposed to loop just that bar forever after the unused section.
I already checked S2. The credits music has a small section that I couldn't make sense of, but there's not much else. There's nothing hidden in S1/S2's SFX either. Anyhow, I figured I'd clarify a few SMPS things: Saying S2 Simon Wai's driver is more like S1's driver is a bit of a stretch. It's just S2 Final's driver without compression support, and a few tiny S1 features/bugs left in. I don't think SMPS music ever stopped being hand-written. There's a Sega Pico SDK floating around that actually contains an SMPS driver, and all its music is in macro'd ASM format. There are no tools in the SDK to convert anything. The ASM music also looks hand-edited: there's an inconsistent number of values per dc.b, cfModulation parameters aren't consistent, and parts are commented-out. On the subject of unused music stuff, this has been found before but I figure it'd be nice to keep it centralised here: Azure Lake has a section that uses an instrument that doesn't exist. It probably makes it inaudible. It's weird. With a number that high, you'd think it was maybe trying to use an instrument from the Universal Voice Bank, but even that tops out at $22. That reminds me, Chaotix has a similar issue too: 'Have Some Fun' tries to use a PSG envelope that doesn't exist. Heck, speaking of Chaotix, one song has three of its PWM channels dummied out.
Hehe, I posted about the Azure Lake one almost seven years a go from the date. The other interesting thing about that is that the part that's using the instrument number that doesn't exist actually exists in the PC port's midi file. Which was one of the reasons why I thought they might've used a conversion tool, at least to help speed things a long. Since having the notes there in the PC port's midi file might mean they had something to use as reference in making the PC port, either the original midi files before conversion (which was what I assumed even back then) or they just looked at the handwritten .asm data. Speaking of weird PSG stuff, so that Balloon Park data. I didn't realize that the third PSG channel goes completely unused in the song, even though it has data! Code (ASM): Snd_BPZ_PSG3: smpsStop ; Unreachable smpsPSGform $E7 dc.b nRst, $30 Snd_BPZ_Jump05: dc.b nRst, $30, nRst, nRst, nRst, nRst, nRst, nRst, nRst, nBb4, $05, nRst dc.b $13, nBb4, $04, nRst, $02, nBb4, $04, nRst, $0E, nBb4, $05, nRst dc.b $13, nBb4, $06, $01, nRst, $11, nBb4, $07, nRst, $11, nBb4, $04 dc.b nRst, $02, nBb4, $04, nRst, $0E, nBb4, $07, nRst, $11, nBb4, $06 dc.b $01, nRst, $11, nRst, $30, nRst, nRst, nRst, nRst, nRst, nRst, nRst dc.b nRst, nRst, nRst, nRst, nA4, $05, nRst, $13, nA4, $04, nRst, $02 dc.b nA4, $04, nRst, $0E, nA4, $05, nRst, $13, nA4, $06, $01, nRst dc.b $11, nA4, $07, nRst, $11, nA4, $04, nRst, $02, nA4, $04, nRst dc.b $0E, nA4, $07, nRst, $11, nA4, $06, $01, nRst, $11, nRst, $30 dc.b nRst, nRst, nRst, nRst, nRst, nRst, nRst, nRst, nRst, nRst, nRst, nRst dc.b nRst, nRst, nRst, nRst, nRst, nRst, nRst, nRst, $0C, nA4, $06, nA4 dc.b nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C dc.b nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06 dc.b nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst dc.b $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4 dc.b $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4 dc.b nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C dc.b nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06 dc.b nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst dc.b $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4 dc.b $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4 dc.b nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C dc.b nA4, $06, nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06 dc.b nA4, nRst, $0C, nA4, $06, nA4, nRst, $0C, nA4, $06, nA4 smpsJump Snd_BPZ_Jump05 There's a command in the beginning of the channel to stop the channel before it plays anything. Removing the smpsStop will allow the data in the channel to play but it sounds almost inaudible. It seems to change PSG3 into a noise channel with parameter E7 and tries to play something that resembles percussion but it doesn't sound good at all. I removed the cfSetPSGNoise command just to see when/where the sequence data plays in the song, and came up with this: https://tinyurl.com/y872jfqm https://tinyurl.com/ycgfk5zd <- the original psg3 I looked at the PC collection's midi file for this song just in case it might appear there, but it doesn't. Very weird.
Sorry about the bump, but there's another song on the s3k soundtrack that suggests that they had some sort of very basic tool for converting songs to SMPS format -- Chrome Gadget. What makes me think this, is that while the DAC and PSG3 channels are nice and optimised, with heavy use of loops and calls for repeated sections, the data for every other channel is from start to finish "note,note length" bytes over and over, even when it seems it'd be a no-brainer that if a person was typing all of this out they'd use the loop coordination flag. So my theory is that there was some sort of automated tool (that wasn't necessarily used all the time), that could be used to convert songs from some other format to a SMPS asm file, that would spit out pretty badly optimised data that would then be fixed up by hand, and they ran out of time to fix this one song up. The song even feels kind of rushed from a mixing standpoint, with the brass chords being way louder than the actual lead instrument, and that nice little solo that plays on PSG2 just before the song loops but it's almost inaudibly quiet.
https://drive.google.com/file/d/1m-9WCRriNWltZ0ecFSTgP1r5Cw6tKWyh/view?usp=sharing Pretty sure this is how the unused Carnival Night Zone 2 data is meant to be constructed. Used the Flamedriver (with PCM support for better drum quality) and kept changing/removing the used notes until I found a perfect fit.
It sounds like the changed notes in CNZ2 would actually sound better an octave lower that what they are in that recording. My quick Audacity edit... https://soundcloud.com/sonic18571237/cnz2-edit
Sounds like the song is having a stroke now. Shame we don't have the original tape of the recording(probably never will happen) before they converted it into Genesis format since it's so weird.
I would love to hear a version of this used in the segment of Act 2 where the lights are out. As if everything is off-kilter, lol.