don't click here

Adding >$1F songs (Sonic 2)

Discussion in 'Engineering & Reverse Engineering' started by Tamkis, Jun 27, 2011.

  1. Tamkis

    Tamkis

    Misfit
    116
    0
    0
    Pennsylvania
    Megaman 2: The Robotnik Wars, Unnamed S3&K hack
    For the past 2 months, I have been struggling to add even more music into my sonic 2 hack, Sonic Loco 2. I need this featuer implemented into my hack before I submit it into the hacking contest. I plan on using different songs per boss (like in Megamix), and having a music monitor like in S1Nineko for a hidden song per zone. These new songs will total more than the original limit of Sonic 2 of $1F songs.

    Below is the code for my attempt of adding more than $1F songs. FYI, I am using the Sonic 2 clone driver, which is based upon the simpler Sonic 1 Sound driver, and one of the latest .svn disasms for Sonic 2. What am I doing wrong, and could anybody help me fix it?

    s2.constants.asm:

    <!--g1--><div class='geshitop'>Syntax Highlighted Code: ASM</div><div class='geshimain'><!--eg1--><pre class="asm" style="font-family:monospace;">&nbsp;
    <span style="color: #adadad; font-style: italic;">; Music IDs</span>
    <span style="color: #00CC66;">offset</span> := zMasterPlaylist
    ptrsize := <span style="color: #ff0000;">1</span>
    idstart := <span style="color: #ff0000;">$</span><span style="color: #ff0000;">68</span>
    <span style="color: #adadad; font-style: italic;">; $80 is reserved for silence, so if you make idstart $80 or less,</span>
    <span style="color: #adadad; font-style: italic;">; you may need to insert a dummy zMusIDPtr in the $80 slot</span>
    &nbsp;
    MusID__First = idstart
    MUsID_EHZH = id<span style="">(</span>zMusIDPtr_EHZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 68** "H" stands for "hidden"</span>
    MUsID_CPZH = id<span style="">(</span>zMusIDPtr_CPZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 69</span>
    MUsID_ARZH = id<span style="">(</span>zMusIDPtr_ARZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 70</span>
    MUsID_CNZH = id<span style="">(</span>zMusIDPtr_CNZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 71</span>
    MUsID_HTZH = id<span style="">(</span>zMusIDPtr_HTZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 72</span>
    MusID_MCZH = id<span style="">(</span>zMusIDPtr_MCZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 73</span>
    MusID_OOZH = id<span style="">(</span>zMusIDPtr_OOZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 74</span>
    MusID_MTZH = id<span style="">(</span>zMusIDPtr_MTZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 75</span>
    MusID_Boss1 = id<span style="">(</span>zMusIDPtr_Boss1<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 76</span>
    MusID_Boss2 = id<span style="">(</span>zMusIDPtr_Boss2<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 77</span>
    MusID_Boss3 = id<span style="">(</span>zMusIDPtr_Boss3<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 78</span>
    MusID_Boss4 = id<span style="">(</span>zMusIDPtr_Boss4<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 79</span>
    MusID_Boss5 = id<span style="">(</span>zMusIDPtr_Boss5<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 7a</span>
    MusID_Boss6 = id<span style="">(</span>zMusIDPtr_Boss6<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 7b</span>
    MusID_Boss7 = id<span style="">(</span>zMusIDPtr_Boss7<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 7c</span>
    MusID_Boss8 = id<span style="">(</span>zMusIDPtr_Boss8<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 7d</span>
    MusID_Boss9 = id<span style="">(</span>zMusIDPtr_Boss9<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 7e</span>
    MusID_Boss10 = id<span style="">(</span>zMusIDPtr_Boss10<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 7f</span>
    MusID_Dum = id<span style="">(</span>zMusIDPtr_Dum<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 80</span>
    &nbsp;
    MusID_2PResult = id<span style="">(</span>zMusIDPtr_2PResult<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 81</span>
    MusID_EHZ = id<span style="">(</span>zMusIDPtr_EHZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 82</span>
    MusID_MCZ_2P = id<span style="">(</span>zMusIDPtr_MCZ_2P<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 83</span>
    MusID_OOZ = id<span style="">(</span>zMusIDPtr_OOZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 84</span>
    MusID_MTZ = id<span style="">(</span>zMusIDPtr_MTZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 85</span>
    MusID_HTZ = id<span style="">(</span>zMusIDPtr_HTZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 86</span>
    MusID_ARZ = id<span style="">(</span>zMusIDPtr_ARZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 87</span>
    MusID_CNZ_2P = id<span style="">(</span>zMusIDPtr_CNZ_2P<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 88</span>
    MusID_CNZ = id<span style="">(</span>zMusIDPtr_CNZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 89</span>
    MusID_DEZ = id<span style="">(</span>zMusIDPtr_DEZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8A</span>
    MusID_MCZ = id<span style="">(</span>zMusIDPtr_MCZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8B</span>
    MusID_EHZ_2P = id<span style="">(</span>zMusIDPtr_EHZ_2P<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8C</span>
    MusID_SCZ = id<span style="">(</span>zMusIDPtr_SCZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8D</span>
    MusID_CPZ = id<span style="">(</span>zMusIDPtr_CPZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8E</span>
    MusID_WFZ = id<span style="">(</span>zMusIDPtr_WFZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8F</span>
    MusID_HPZ = id<span style="">(</span>zMusIDPtr_HPZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 90</span>
    MusID_Options = id<span style="">(</span>zMusIDPtr_Options<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 91</span>
    MusID_SpecStage = id<span style="">(</span>zMusIDPtr_SpecStage<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 92</span>
    MusID_Boss = id<span style="">(</span>zMusIDPtr_Boss<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 93</span>
    MusID_EndBoss = id<span style="">(</span>zMusIDPtr_EndBoss<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 94</span>
    MusID_Ending = id<span style="">(</span>zMusIDPtr_Ending<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 95</span>
    MusID_SuperSonic = id<span style="">(</span>zMusIDPtr_SuperSonic<span style="">)</span><span style="color: #adadad; font-style: italic;">; 96</span>
    MusID_Invincible = id<span style="">(</span>zMusIDPtr_Invincible<span style="">)</span><span style="color: #adadad; font-style: italic;">; 97</span>
    MusID_ExtraLife = id<span style="">(</span>zMusIDPtr_ExtraLife<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 98</span>
    MusID_Title = id<span style="">(</span>zMusIDPtr_Title<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 99</span>
    MusID_EndLevel = id<span style="">(</span>zMusIDPtr_EndLevel<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 9A</span>
    MusID_GameOver = id<span style="">(</span>zMusIDPtr_GameOver<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 9B</span>
    MusID_Continue = id<span style="">(</span>zMusIDPtr_Continue<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 9C</span>
    MusID_Emerald = id<span style="">(</span>zMusIDPtr_Emerald<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 9D</span>
    MusID_Credits = id<span style="">(</span>zMusIDPtr_Credits<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 9E</span>
    MusID_Countdown = id<span style="">(</span>zMusIDPtr_Countdown<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 9F</span>
    MusID__End = id<span style="">(</span>zMusIDPtr__End<span style="">)</span> <span style="color: #adadad; font-style: italic;">; a0</span>
    &nbsp;</pre><!--gc2--><!--CjsgTXVzaWMgSURzCm9mZnNldCA6PQl6TWFzdGVyUGxheWxpc3QKcHRyc2l6ZSA6PQkxCmlkc3RhcnQg
    Oj0JJiMwMzY7NjgKOyAmIzAzNjs4MCBpcyByZXNlcnZlZCBmb3Igc2lsZW5jZSwgc28gaWYgeW91IG1ha
    2UgaWRzdGFydCAmIzAzNjs4MCBvciBsZXNzLAo7IHlvdSBtYXkgbmVlZCB0byBpbnNlcnQgYSBkdW1teS
    B6TXVzSURQdHIgaW4gdGhlICYjMDM2OzgwIHNsb3QKCk11c0lEX19GaXJzdCA9IGlkc3RhcnQKTVVzSUR
    fRUhaSCA9CQlpZCh6TXVzSURQdHJfRUhaSCkJOyA2OCoqICZxdW90O0gmcXVvdDsgc3RhbmRzIGZvciAm
    cXVvdDtoaWRkZW4mcXVvdDsKTVVzSURfQ1BaSCA9CQlpZCh6TXVzSURQdHJfQ1BaSCkJOyA2OQpNVXNJR
    F9BUlpIID0JCWlkKHpNdXNJRFB0cl9BUlpIKQk7IDcwCk1Vc0lEX0NOWkggPQkJaWQoek11c0lEUHRyX0
    NOWkgpCTsgNzEKTVVzSURfSFRaSCA9CQlpZCh6TXVzSURQdHJfSFRaSCkJOyA3MgpNdXNJRF9NQ1pIID0
    JCWlkKHpNdXNJRFB0cl9NQ1pIKQk7IDczCk11c0lEX09PWkggPQkJaWQoek11c0lEUHRyX09PWkgpCTsg
    NzQKTXVzSURfTVRaSCA9CQlpZCh6TXVzSURQdHJfTVRaSCkJOyA3NQpNdXNJRF9Cb3NzMSA9CQlpZCh6T
    XVzSURQdHJfQm9zczEpCTsgNzYKTXVzSURfQm9zczIgPQkJaWQoek11c0lEUHRyX0Jvc3MyKQk7IDc3Ck
    11c0lEX0Jvc3MzID0JCWlkKHpNdXNJRFB0cl9Cb3NzMykJOyA3OApNdXNJRF9Cb3NzNCA9CQlpZCh6TXV
    zSURQdHJfQm9zczQpCTsgNzkKTXVzSURfQm9zczUgPQkJaWQoek11c0lEUHRyX0Jvc3M1KQk7IDdhCk11
    c0lEX0Jvc3M2ID0JCWlkKHpNdXNJRFB0cl9Cb3NzNikJOyA3YgpNdXNJRF9Cb3NzNyA9CQlpZCh6TXVzS
    URQdHJfQm9zczcpCTsgN2MKTXVzSURfQm9zczggPQkJaWQoek11c0lEUHRyX0Jvc3M4KQk7IDdkCk11c0
    lEX0Jvc3M5ID0JCWlkKHpNdXNJRFB0cl9Cb3NzOSkJOyA3ZQpNdXNJRF9Cb3NzMTAgPQkJaWQoek11c0l
    EUHRyX0Jvc3MxMCkJOyA3ZgpNdXNJRF9EdW0gPQkJaWQoek11c0lEUHRyX0R1bSkJOyA4MAoKTXVzSURf
    MlBSZXN1bHQgPQlpZCh6TXVzSURQdHJfMlBSZXN1bHQpCTsgODEKTXVzSURfRUhaID0JCWlkKHpNdXNJR
    FB0cl9FSFopCTsgODIKTXVzSURfTUNaXzJQID0JCWlkKHpNdXNJRFB0cl9NQ1pfMlApCTsgODMKTXVzSU
    RfT09aID0JCWlkKHpNdXNJRFB0cl9PT1opCTsgODQKTXVzSURfTVRaID0JCWlkKHpNdXNJRFB0cl9NVFo
    pCTsgODUKTXVzSURfSFRaID0JCWlkKHpNdXNJRFB0cl9IVFopCTsgODYKTXVzSURfQVJaID0JCWlkKHpN
    dXNJRFB0cl9BUlopCTsgODcKTXVzSURfQ05aXzJQID0JCWlkKHpNdXNJRFB0cl9DTlpfMlApCTsgODgKT
    XVzSURfQ05aID0JCWlkKHpNdXNJRFB0cl9DTlopCTsgODkKTXVzSURfREVaID0JCWlkKHpNdXNJRFB0cl
    9ERVopCTsgOEEKTXVzSURfTUNaID0JCWlkKHpNdXNJRFB0cl9NQ1opCTsgOEIKTXVzSURfRUhaXzJQID0
    JCWlkKHpNdXNJRFB0cl9FSFpfMlApCTsgOEMKTXVzSURfU0NaID0JCWlkKHpNdXNJRFB0cl9TQ1opCTsg
    OEQKTXVzSURfQ1BaID0JCWlkKHpNdXNJRFB0cl9DUFopCTsgOEUKTXVzSURfV0ZaID0JCWlkKHpNdXNJR
    FB0cl9XRlopCTsgOEYKTXVzSURfSFBaID0JCWlkKHpNdXNJRFB0cl9IUFopCTsgOTAKTXVzSURfT3B0aW
    9ucyA9CQlpZCh6TXVzSURQdHJfT3B0aW9ucykJOyA5MQpNdXNJRF9TcGVjU3RhZ2UgPSAgIAlpZCh6TXV
    zSURQdHJfU3BlY1N0YWdlKQk7IDkyCk11c0lEX0Jvc3MgPQkJaWQoek11c0lEUHRyX0Jvc3MpCTsgOTMK
    TXVzSURfRW5kQm9zcyA9CQlpZCh6TXVzSURQdHJfRW5kQm9zcykJOyA5NApNdXNJRF9FbmRpbmcgPQkJa
    WQoek11c0lEUHRyX0VuZGluZykJOyA5NQpNdXNJRF9TdXBlclNvbmljID0JICAgICAgICAgICAgICAgIG
    lkKHpNdXNJRFB0cl9TdXBlclNvbmljKTsgOTYKTXVzSURfSW52aW5jaWJsZSA9CSAgaWQoek11c0lEUHR
    yX0ludmluY2libGUpOyA5NwpNdXNJRF9FeHRyYUxpZmUgPQlpZCh6TXVzSURQdHJfRXh0cmFMaWZlKQk7
    IDk4Ck11c0lEX1RpdGxlID0JCWlkKHpNdXNJRFB0cl9UaXRsZSkJOyA5OQpNdXNJRF9FbmRMZXZlbCA9C
    WlkKHpNdXNJRFB0cl9FbmRMZXZlbCkJOyA5QQpNdXNJRF9HYW1lT3ZlciA9CWlkKHpNdXNJRFB0cl9HYW
    1lT3ZlcikJOyA5QgpNdXNJRF9Db250aW51ZSA9CWlkKHpNdXNJRFB0cl9Db250aW51ZSkJOyA5QwpNdXN
    JRF9FbWVyYWxkID0JCWlkKHpNdXNJRFB0cl9FbWVyYWxkKQk7IDlECk11c0lEX0NyZWRpdHMgPQkJaWQo
    ek11c0lEUHRyX0NyZWRpdHMpCTsgOUUKTXVzSURfQ291bnRkb3duID0JaWQoek11c0lEUHRyX0NvdW50Z
    G93bikJOyA5RgpNdXNJRF9fRW5kID0JCWlkKHpNdXNJRFB0cl9fRW5kKQk7IGEwCg==--><!--egc2--><!--g2--></div><!--eg2-->

    After I tried to compile that, I got errors such as "zMusIDPtr_EHZH, symbol undefined". So, after more searching, in the s2.sounddriver.asm, I changed this:

    <!--g1--><div class='geshitop'>Syntax Highlighted Code: ASM</div><div class='geshimain'><!--eg1--><pre class="asm" style="font-family:monospace;">&nbsp;
    <span style="color: #adadad; font-style: italic;">; Music IDs</span>
    <span style="color: #00CC66;">offset</span> := MusicPoint2
    ptrsize := <span style="color: #ff0000;">2</span>
    idstart := 68h <span style="color: #adadad; font-style: italic;">;Is this correct?</span>
    <span style="color: #adadad; font-style: italic;">; note: +20h means uncompressed, here</span>
    &nbsp;
    &nbsp;
    ZMusIDPtr_EHZH: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_EHZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">;??</span>
    ZMusIDPtr_cPZH: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_CPZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">;??</span>
    ZMusIDPtr_ARZH: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_ARZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">;??</span>
    ZMusIDPtr_CNZH: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_CNZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">;??</span>
    ZMusIDPtr_HTZH: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_HTZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_MCZH: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_MCZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_OOZH: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_OOZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_MTZH: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_MTZH<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss1: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss1<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss2: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss2<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss3: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss3<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss4: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss4<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss5: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss5<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss6: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss6<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss7: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss7<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss8: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss8<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss9: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss9<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Boss10: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss10<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    ZMusIDPtr_Dum: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Dum<span style="">)</span> <span style="color: #adadad; font-style: italic;">;</span>
    &nbsp;
    <span style="color: #adadad; font-style: italic;">;WTF is with these psuedo-random music IDs??</span>
    &nbsp;
    zMusIDPtr_2PResult: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_2PResult<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 92</span>
    zMusIDPtr_EHZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_EHZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 81</span>
    zMusIDPtr_MCZ_2P: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_MCZ_2P<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 85</span>
    zMusIDPtr_OOZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_OOZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8F</span>
    zMusIDPtr_MTZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_MTZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 82</span>
    zMusIDPtr_HTZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_HTZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 94</span>
    zMusIDPtr_ARZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_ARZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 86</span>
    zMusIDPtr_CNZ_2P: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_CNZ_2P<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 80</span>
    zMusIDPtr_CNZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_CNZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 83</span>
    zMusIDPtr_DEZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_DEZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 87</span>
    zMusIDPtr_MCZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_MCZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 84</span>
    zMusIDPtr_EHZ_2P: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_EHZ_2P<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 91</span>
    zMusIDPtr_SCZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_SCZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8E</span>
    zMusIDPtr_CPZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_CPZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8C</span>
    zMusIDPtr_WFZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_WFZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 90</span>
    zMusIDPtr_HPZ: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_HPZ<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 9B</span>
    zMusIDPtr_Options: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Options<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 89</span>
    zMusIDPtr_SpecStage: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_SpecStage<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 88</span>
    zMusIDPtr_Boss: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Boss<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8D</span>
    zMusIDPtr_EndBoss: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_EndBoss<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8B</span>
    zMusIDPtr_Ending: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Ending<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 8A</span>
    zMusIDPtr_SuperSonic: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_SuperSonic<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 93</span>
    zMusIDPtr_Invincible: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Invincible<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 99</span>
    zMusIDPtr_ExtraLife: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_ExtraLife<span style="">)</span>+20h<span style="color: #adadad; font-style: italic;">; B5</span>
    zMusIDPtr_Title: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Title<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 96</span>
    zMusIDPtr_EndLevel: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_EndLevel<span style="">)</span> <span style="color: #adadad; font-style: italic;">; 97</span>
    zMusIDPtr_GameOver: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_GameOver<span style="">)</span>+20h <span style="color: #adadad; font-style: italic;">; B8</span>
    zMusIDPtr_Continue: <span style="color: #00CC66;">db</span> <span style="">(</span>MusPtr_Continue-MusicPoint1<span style="">)</span>/ptrsize <span style="color: #adadad; font-style: italic;">; 0</span>
    zMusIDPtr_Emerald: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Emerald<span style="">)</span>+20h <span style="color: #adadad; font-style: italic;">; BA</span>
    zMusIDPtr_Credits: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Credits<span style="">)</span>+20h <span style="color: #adadad; font-style: italic;">; BD</span>
    zMusIDPtr_Countdown: <span style="color: #00CC66;">db</span> id<span style="">(</span>MusPtr_Drowning<span style="">)</span>+40h <span style="color: #adadad; font-style: italic;">; DC</span>
    zMusIDPtr__End:
    &nbsp;</pre><!--gc2--><!--CjsgTXVzaWMgSURzCm9mZnNldCA6PQlNdXNpY1BvaW50MgpwdHJzaXplIDo9CTIKaWRzdGFydCA6PQk2
    OGggICAgICAgICAgICAgICAgICAgO0lzIHRoaXMgY29ycmVjdD8KOyBub3RlOiArMjBoIG1lYW5zIHVuY
    29tcHJlc3NlZCwgaGVyZQoKClpNdXNJRFB0cl9FSFpIOglkYglpZChNdXNQdHJfRUhaSCkJOz8/ClpNdXNJRFB0cl9jUFpIOglkYglpZChNdXNQdHJfQ1BaSCkJOz8/ClpNdXNJRFB0cl9BUlpIOglkYglpZChNdXNQdHJfQVJaSCkJOz8/ClpNdXNJRFB0cl9DTlpIOglkYglpZChNdXNQdHJfQ05aSCkJOz8/ClpNdXNJRFB0cl9IVFpIOglkYglpZChNdXNQdHJfSFRaSCkJOwpaTXVzSURQdHJfTUNaSDoJZGIJaWQo
    TXVzUHRyX01DWkgpCTsKWk11c0lEUHRyX09PWkg6CWRiCWlkKE11c1B0cl9PT1pIKQk7ClpNdXNJRFB0c
    l9NVFpIOglkYglpZChNdXNQdHJfTVRaSCkJOwpaTXVzSURQdHJfQm9zczE6CWRiCWlkKE11c1B0cl9Cb3
    NzMSkJOwpaTXVzSURQdHJfQm9zczI6CWRiCWlkKE11c1B0cl9Cb3NzMikJOwpaTXVzSURQdHJfQm9zczM
    6CWRiCWlkKE11c1B0cl9Cb3NzMykJOwpaTXVzSURQdHJfQm9zczQ6CWRiCWlkKE11c1B0cl9Cb3NzNCkJ
    OwpaTXVzSURQdHJfQm9zczU6CWRiCWlkKE11c1B0cl9Cb3NzNSkJOwpaTXVzSURQdHJfQm9zczY6CWRiC
    WlkKE11c1B0cl9Cb3NzNikJOwpaTXVzSURQdHJfQm9zczc6CWRiCWlkKE11c1B0cl9Cb3NzNykJOwpaTX
    VzSURQdHJfQm9zczg6CWRiCWlkKE11c1B0cl9Cb3NzOCkJOwpaTXVzSURQdHJfQm9zczk6CWRiCWlkKE1
    1c1B0cl9Cb3NzOSkJOwpaTXVzSURQdHJfQm9zczEwOglkYglpZChNdXNQdHJfQm9zczEwKQk7ClpNdXNJ
    RFB0cl9EdW06CQlkYglpZChNdXNQdHJfRHVtKQkJOwoKO1dURiBpcyB3aXRoIHRoZXNlIHBzdWVkby1yY
    W5kb20gbXVzaWMgSURzPz8KCnpNdXNJRFB0cl8yUFJlc3VsdDoJZGIJaWQoTXVzUHRyXzJQUmVzdWx0KQ
    k7IDkyCnpNdXNJRFB0cl9FSFo6CQlkYglpZChNdXNQdHJfRUhaKQkJOyA4MQp6TXVzSURQdHJfTUNaXzJ
    QOglkYglpZChNdXNQdHJfTUNaXzJQKQk7IDg1CnpNdXNJRFB0cl9PT1o6CQlkYglpZChNdXNQdHJfT09a
    KQkJOyA4Rgp6TXVzSURQdHJfTVRaOgkJZGIJaWQoTXVzUHRyX01UWikJCTsgODIKek11c0lEUHRyX0hUW
    joJCWRiCWlkKE11c1B0cl9IVFopCQk7IDk0CnpNdXNJRFB0cl9BUlo6CQlkYglpZChNdXNQdHJfQVJaKQ
    kJOyA4Ngp6TXVzSURQdHJfQ05aXzJQOglkYglpZChNdXNQdHJfQ05aXzJQKQk7IDgwCnpNdXNJRFB0cl9
    DTlo6CQlkYglpZChNdXNQdHJfQ05aKQkJOyA4Mwp6TXVzSURQdHJfREVaOgkJZGIJaWQoTXVzUHRyX0RF
    WikJCTsgODcKek11c0lEUHRyX01DWjoJCWRiCWlkKE11c1B0cl9NQ1opCQk7IDg0CnpNdXNJRFB0cl9FS
    FpfMlA6CWRiCWlkKE11c1B0cl9FSFpfMlApCTsgOTEKek11c0lEUHRyX1NDWjoJCWRiCWlkKE11c1B0cl
    9TQ1opCQk7IDhFCnpNdXNJRFB0cl9DUFo6CQlkYglpZChNdXNQdHJfQ1BaKQkJOyA4Qwp6TXVzSURQdHJ
    fV0ZaOgkJZGIJaWQoTXVzUHRyX1dGWikJCTsgOTAKek11c0lEUHRyX0hQWjoJCWRiCWlkKE11c1B0cl9I
    UFopCQk7IDlCCnpNdXNJRFB0cl9PcHRpb25zOglkYglpZChNdXNQdHJfT3B0aW9ucykJOyA4OQp6TXVzS
    URQdHJfU3BlY1N0YWdlOglkYglpZChNdXNQdHJfU3BlY1N0YWdlKQk7IDg4CnpNdXNJRFB0cl9Cb3NzOg
    kJZGIJaWQoTXVzUHRyX0Jvc3MpCQk7IDhECnpNdXNJRFB0cl9FbmRCb3NzOglkYglpZChNdXNQdHJfRW5
    kQm9zcykJOyA4Qgp6TXVzSURQdHJfRW5kaW5nOglkYglpZChNdXNQdHJfRW5kaW5nKQk7IDhBCnpNdXNJ
    RFB0cl9TdXBlclNvbmljOglkYglpZChNdXNQdHJfU3VwZXJTb25pYykJOyA5Mwp6TXVzSURQdHJfSW52a
    W5jaWJsZToJZGIJaWQoTXVzUHRyX0ludmluY2libGUpCTsgOTkKek11c0lEUHRyX0V4dHJhTGlmZToJZG
    IJaWQoTXVzUHRyX0V4dHJhTGlmZSkrMjBoOyBCNQp6TXVzSURQdHJfVGl0bGU6CWRiCWlkKE11c1B0cl9
    UaXRsZSkJOyA5Ngp6TXVzSURQdHJfRW5kTGV2ZWw6CWRiCWlkKE11c1B0cl9FbmRMZXZlbCkJOyA5Nwp6
    TXVzSURQdHJfR2FtZU92ZXI6CWRiCWlkKE11c1B0cl9HYW1lT3ZlcikrMjBoCTsgQjgKek11c0lEUHRyX
    0NvbnRpbnVlOglkYgkoTXVzUHRyX0NvbnRpbnVlLU11c2ljUG9pbnQxKS9wdHJzaXplCTsgMAp6TXVzSU
    RQdHJfRW1lcmFsZDoJZGIJaWQoTXVzUHRyX0VtZXJhbGQpKzIwaAk7IEJBCnpNdXNJRFB0cl9DcmVkaXR
    zOglkYglpZChNdXNQdHJfQ3JlZGl0cykrMjBoCTsgQkQKek11c0lEUHRyX0NvdW50ZG93bjoJZGIJaWQo
    TXVzUHRyX0Ryb3duaW5nKSs0MGgJOyBEQwp6TXVzSURQdHJfX0VuZDoK--><!--egc2--><!--g2--></div><!--eg2-->

    Even after this, some symbols were still "undefined". After more searching, I changed this in s2.asm:

    <!--g1--><div class='geshitop'>Syntax Highlighted Code: ASM</div><div class='geshimain'><!--eg1--><pre class="asm" style="font-family:monospace;">&nbsp;
    <span style="color: #adadad; font-style: italic;">; ------------------------------------------------------------------------------</span>
    <span style="color: #adadad; font-style: italic;">; Music pointers</span>
    <span style="color: #adadad; font-style: italic;">; ------------------------------------------------------------------------------</span>
    <span style="color: #00CC66;">align</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">8000</span>
    soundBankStart := *
    &nbsp;
    <span style="color: #adadad; font-style: italic;">; loc_F8000:</span>
    MusicPoint2:
    <span style="color: #adadad; font-style: italic;">;**</span>
    MusPtr_EHZH: rom_ptr_z80 Mus_EHZH
    MusPtr_CPZH: rom_ptr_z80 Mus_CPZH
    MusPtr_ARZH: rom_ptr_z80 Mus_ARZH
    MusPtr_CNZH: rom_ptr_z80 Mus_CNZH
    MusPtr_HTZH: rom_ptr_z80 Mus_HTZH
    MusPtr_MCZH: rom_ptr_z80 Mus_MCZH
    MusPtr_OOZH: rom_ptr_z80 Mus_OOZH
    MusPtr_MTZH: rom_ptr_z80 Mus_MTZH
    MusPtr_Boss1: rom_ptr_z80 Mus_Boss1
    MusPtr_Boss2: rom_ptr_z80 Mus_Boss2
    MusPtr_Boss3: rom_ptr_z80 Mus_Boss3
    MusPtr_Boss4: rom_ptr_z80 Mus_Boss4
    MusPtr_Boss5: rom_ptr_z80 Mus_Boss5
    MusPtr_Boss6: rom_ptr_z80 Mus_Boss6
    MusPtr_Boss7: rom_ptr_z80 Mus_Boss7
    MusPtr_Boss8: rom_ptr_z80 Mus_Boss8
    MusPtr_Boss9: rom_ptr_z80 Mus_Boss9
    MusPtr_Boss10: rom_ptr_z80 Mus_Boss10
    MusPtr_Dum: rom_ptr_z80 Mus_Dum
    &nbsp;
    MusPtr_CNZ_2P: rom_ptr_z80 Mus_CNZ_2P
    MusPtr_EHZ: rom_ptr_z80 Mus_EHZ
    MusPtr_MTZ: rom_ptr_z80 Mus_MTZ
    MusPtr_CNZ: rom_ptr_z80 Mus_CNZ
    MusPtr_MCZ: rom_ptr_z80 Mus_MCZ
    MusPtr_MCZ_2P: rom_ptr_z80 Mus_MCZ_2P
    MusPtr_ARZ: rom_ptr_z80 Mus_ARZ
    MusPtr_DEZ: rom_ptr_z80 Mus_DEZ
    MusPtr_SpecStage: rom_ptr_z80 Mus_SpecStage
    MusPtr_Options: rom_ptr_z80 Mus_Options
    MusPtr_Ending: rom_ptr_z80 Mus_Ending
    MusPtr_EndBoss: rom_ptr_z80 Mus_EndBoss
    MusPtr_CPZ: rom_ptr_z80 Mus_CPZ
    MusPtr_Boss: rom_ptr_z80 Mus_Boss
    MusPtr_SCZ: rom_ptr_z80 Mus_SCZ
    MusPtr_OOZ: rom_ptr_z80 Mus_OOZ
    MusPtr_WFZ: rom_ptr_z80 Mus_WFZ
    MusPtr_EHZ_2P: rom_ptr_z80 Mus_EHZ_2P
    MusPtr_2PResult: rom_ptr_z80 Mus_2PResult
    MusPtr_SuperSonic: rom_ptr_z80 Mus_SuperSonic
    MusPtr_HTZ: rom_ptr_z80 Mus_HTZ
    MusPtr_ExtraLife: rom_ptr_z80 Mus_ExtraLife
    MusPtr_Title: rom_ptr_z80 Mus_Title
    MusPtr_EndLevel: rom_ptr_z80 Mus_EndLevel
    MusPtr_GameOver: rom_ptr_z80 Mus_GameOver
    MusPtr_Invincible: rom_ptr_z80 Mus_Invincible
    MusPtr_Emerald: rom_ptr_z80 Mus_Emerald
    MusPtr_HPZ: rom_ptr_z80 Mus_HPZ
    MusPtr_Drowning: rom_ptr_z80 Mus_Drowning
    MusPtr_Credits: rom_ptr_z80 Mus_Credits
    &nbsp;</pre><!--gc2--><!--CjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
    LS0tLS0tLS0tLS0tLS0tLS0tLS0tCjsgTXVzaWMgcG9pbnRlcnMKOyAtLS0tLS0tLS0tLS0tLS0tLS0tL
    S0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCW
    FsaWduICYjMDM2OzgwMDAKc291bmRCYW5rU3RhcnQJOj0gKgoKOyBsb2NfRjgwMDA6Ck11c2ljUG9pbnQ
    yOgo7KioKTXVzUHRyX0VIWkg6CQlyb21fcHRyX3o4MAlNdXNfRUhaSApNdXNQdHJfQ1BaSDoJCXJvbV9w
    dHJfejgwCU11c19DUFpICk11c1B0cl9BUlpIOgkJcm9tX3B0cl96ODAJTXVzX0FSWkgKTXVzUHRyX0NOW
    kg6CQlyb21fcHRyX3o4MAlNdXNfQ05aSApNdXNQdHJfSFRaSDoJCXJvbV9wdHJfejgwCU11c19IVFpICk
    11c1B0cl9NQ1pIOgkJcm9tX3B0cl96ODAJTXVzX01DWkgKTXVzUHRyX09PWkg6CQlyb21fcHRyX3o4MAl
    NdXNfT09aSApNdXNQdHJfTVRaSDoJCXJvbV9wdHJfejgwCU11c19NVFpICk11c1B0cl9Cb3NzMToJCXJv
    bV9wdHJfejgwCU11c19Cb3NzMQpNdXNQdHJfQm9zczI6CQlyb21fcHRyX3o4MAlNdXNfQm9zczIKTXVzU
    HRyX0Jvc3MzOgkJcm9tX3B0cl96ODAJTXVzX0Jvc3MzCk11c1B0cl9Cb3NzNDoJCXJvbV9wdHJfejgwCU
    11c19Cb3NzNApNdXNQdHJfQm9zczU6CQlyb21fcHRyX3o4MAlNdXNfQm9zczUKTXVzUHRyX0Jvc3M2Ogk
    Jcm9tX3B0cl96ODAJTXVzX0Jvc3M2Ck11c1B0cl9Cb3NzNzoJCXJvbV9wdHJfejgwCU11c19Cb3NzNwpN
    dXNQdHJfQm9zczg6CQlyb21fcHRyX3o4MAlNdXNfQm9zczgKTXVzUHRyX0Jvc3M5OgkJcm9tX3B0cl96O
    DAJTXVzX0Jvc3M5Ck11c1B0cl9Cb3NzMTA6CQlyb21fcHRyX3o4MAlNdXNfQm9zczEwCk11c1B0cl9EdW
    06CQlyb21fcHRyX3o4MAlNdXNfRHVtCgpNdXNQdHJfQ05aXzJQOgkJcm9tX3B0cl96ODAJTXVzX0NOWl8
    yUApNdXNQdHJfRUhaOgkJcm9tX3B0cl96ODAJTXVzX0VIWgpNdXNQdHJfTVRaOgkJcm9tX3B0cl96ODAJ
    TXVzX01UWgpNdXNQdHJfQ05aOgkJcm9tX3B0cl96ODAJTXVzX0NOWgpNdXNQdHJfTUNaOgkJcm9tX3B0c
    l96ODAJTXVzX01DWgpNdXNQdHJfTUNaXzJQOgkJcm9tX3B0cl96ODAJTXVzX01DWl8yUApNdXNQdHJfQV
    JaOgkJcm9tX3B0cl96ODAJTXVzX0FSWgpNdXNQdHJfREVaOgkJcm9tX3B0cl96ODAJTXVzX0RFWgpNdXN
    QdHJfU3BlY1N0YWdlOglyb21fcHRyX3o4MAlNdXNfU3BlY1N0YWdlCk11c1B0cl9PcHRpb25zOgkJcm9t
    X3B0cl96ODAJTXVzX09wdGlvbnMKTXVzUHRyX0VuZGluZzoJCXJvbV9wdHJfejgwCU11c19FbmRpbmcKT
    XVzUHRyX0VuZEJvc3M6CQlyb21fcHRyX3o4MAlNdXNfRW5kQm9zcwpNdXNQdHJfQ1BaOgkJcm9tX3B0cl
    96ODAJTXVzX0NQWgpNdXNQdHJfQm9zczoJCXJvbV9wdHJfejgwCU11c19Cb3NzCk11c1B0cl9TQ1o6CQl
    yb21fcHRyX3o4MAlNdXNfU0NaCk11c1B0cl9PT1o6CQlyb21fcHRyX3o4MAlNdXNfT09aCk11c1B0cl9X
    Rlo6CQlyb21fcHRyX3o4MAlNdXNfV0ZaCk11c1B0cl9FSFpfMlA6CQlyb21fcHRyX3o4MAlNdXNfRUhaX
    zJQCk11c1B0cl8yUFJlc3VsdDoJcm9tX3B0cl96ODAJTXVzXzJQUmVzdWx0Ck11c1B0cl9TdXBlclNvbm
    ljOglyb21fcHRyX3o4MAlNdXNfU3VwZXJTb25pYwpNdXNQdHJfSFRaOgkJcm9tX3B0cl96ODAJTXVzX0h
    UWgpNdXNQdHJfRXh0cmFMaWZlOglyb21fcHRyX3o4MAlNdXNfRXh0cmFMaWZlCk11c1B0cl9UaXRsZToJ
    CXJvbV9wdHJfejgwCU11c19UaXRsZQpNdXNQdHJfRW5kTGV2ZWw6CXJvbV9wdHJfejgwCU11c19FbmRMZ
    XZlbApNdXNQdHJfR2FtZU92ZXI6CXJvbV9wdHJfejgwCU11c19HYW1lT3ZlcgpNdXNQdHJfSW52aW5jaW
    JsZToJcm9tX3B0cl96ODAJTXVzX0ludmluY2libGUKTXVzUHRyX0VtZXJhbGQ6CQlyb21fcHRyX3o4MAl
    NdXNfRW1lcmFsZApNdXNQdHJfSFBaOgkJcm9tX3B0cl96ODAJTXVzX0hQWgpNdXNQdHJfRHJvd25pbmc6
    CXJvbV9wdHJfejgwCU11c19Ecm93bmluZwpNdXNQdHJfQ3JlZGl0czoJCXJvbV9wdHJfejgwCU11c19Dc
    mVkaXRzCg==--><!--egc2--><!--g2--></div><!--eg2-->

    Even after that, I got a new error:

    "> > >s2.asm(88541): error: soundBank must fit in $8000 bytes but was $8012. Try moving something to the other bank.
    > > > fatal "soundBank must fit in $8000 bytes but was $\{*-soundBankStart}. Try moving something to the other bank."
    fatal error, assembly terminated"

    As suggested in the Q&A thread, I commented out this fatal error to see what would happen. What happened was that the new songs were inserted, BUT any of the old songs that were shifted past sound test ID $1F were omitted! Any value >=$20 in the sound test was still sfx. How can I add more songs? I believe that the game still thinks that the music is banked, even though the S1Snd driver was ported...


    Below are some useful resources, including my hack disasm, which you can use to try to fix the problem. It isn't the latest version of my disasm, so you will need to give me steps to implement the fix into the latest version of my hack. Also below is my OST, complete with the new songs (boss songs and hidden songs) for testing.

    <a href="http://forums.sonicretro.org/index.php?showtopic=6310&hl=bank" target="_blank">S2 z80 sound driver info</a> (if you want to fix this problem in z80)
    <a href="http://www.mediafire.com/?3599v5uv3p2dc0q" target="_blank">lMy hack disasm for testing purposes</a> (password is "Loco")
    <a href="http://www.mediafire.com/?613awpgkmi8xmm0" target="_blank">Sonic 2 Loco OST</a>
     
  2. Spanner

    Spanner

    The Tool Member
    3,350
    157
    43
    United Kingdom
    Sonic Hacking Contest
    <a href="http://info.sonicretro.org/SCHG How-to:Expand the music index to start at $00 instead of $80 (Sonic 2 Clone Driver version)" target="_blank" style="background: url(http://info.sonicretro.org/images/5/50/Reticon.png) right no-repeat; padding-right: 20px; border-bottom: 1px dotted #3366BB; color: #3366BB; cursor:pointer; text-decoration:none;" class="wiki">SCHG How-to:Expand the music index to start at $00 instead of $80 (Sonic 2 Clone Driver version)</a>

    This should help you in extending the music list.
     
  3. Tamkis

    Tamkis

    Misfit
    116
    0
    0
    Pennsylvania
    Megaman 2: The Robotnik Wars, Unnamed S3&K hack
    I knew about this guide, haven't tried it yet, but doesn't all this guide does is enumerate the pointers? I will try it in a bit and get back if I have problems. Hope it works
     
  4. SegaLoco

    SegaLoco

    W)(at did you say? Misfit
    Sonic Loco......shouldn't that be a name I would be expected to use for a hack?
     
  5. flamewing

    flamewing

    Emerald Hunter Tech Member
    1,161
    65
    28
    France
    Sonic Classic Heroes; Sonic 2 Special Stage Editor; Sonic 3&K Heroes (on hold)
    There is a whole lot that needs to be changed to be able to add more than 1F songs to the S2 sound driver, or more than 120 songs+SFX. There is also the work that needs to be done to get bank switching working right to deal with bank size issues correctly -- in your case, for example, the $12 bytes past the end of the bank will never be reachable by the z80 and hence will be "lost".

    Here is the full guide on how to extend the S2 sound driver to have better bank switching for music, more space for SFX, easier maintenance of song lists and more than $1F songs (or more than 120 songs + SFX). I do not, however, explain how to fix sound test; you will have to do that yourself.

    Lets start by moving SFX to a sound bank of their own:
    in s2.sounddriver.asm, look for zsub_600 and replace the following 'bankswitch MusicPoint2' by 'bankswitch SoundIndex'
    in s2.sounddriver.asm, look for zloc_F1D and do the same replacement
    In s2.asm, just above label 'SoundIndex', add code as needed to make it look like this:

    Code (Text):
    1.    if * > soundBankStart + $8000
    2.        fatal soundBank must fit in $8000 bytes but was ${*-soundBankStart}. Try moving something to the other bank."
    3.    elseif MOMPASS= 2
    4.        message soundBank has ${$8000+soundBankStart-*} bytes free at end."
    5.    endif
    6.  
    7. ; ------------------------------------------------------------------------------------------
    8. ; Sound effect pointers
    9. ; ------------------------------------------------------------------------------------------
    10.    align   $8000
    11. soundBankStart := *
    12. ; WARNING the sound driver treats certain sounds specially
    13. ; going by the ID of the sound.
    14. ; SndID_Ring, SndID_RingLeft, SndID_BlockPush, SndID_Gloop, SndID_SpindashRev
    15. ; are referenced by the sound driver directly.
    16. ; If needed you can change this in s2.sounddriver.asm
    17.  
    18. ; NOTE: the exact order of this list determines the priority of each sound, since it determines the sound's SndID.
    19. ;       a sound can get dropped if a higher-priority sound is already playing.
    20. ;   see zSFXPriority for the priority allocation itself.
    21.  
    22. ; loc_FEE91: SoundPoint:
    23.  
    24. SoundIndex:

    Doing that will give you some space for the songs and SFX. And please, after you do these, restore the warning you deleted at the end of the file. BTW, I just applied items 1 and 2 to the SVN version because it makes no difference for it without also doing item 3.

    From now on, I will be assuming the SVN version of s2.sounddriver.asm due to the much better labels and comments. You can use it as reference, as it keeps the old labels. At this point, I will be improving the workings of the master playlist in the S2 sound driver so that it behaves more like the S&K sound driver (I.e., better) with regards to song banks. This will essentially allow you to add as many songs as you can without worrying about bank sizes.

    First, scroll down to zMasterPlaylist definition on s2.sounddriver.asm. Before it, define the following macros:

    Code (Text):
    1. zmake68kBank function addr,(((addr&3F8000h)/zROMWindow))
    2. zmakePlaylistEntry macro addr,val
    3.    db   zmake68kBank(addr),val
    4.    dw   zmake68kPtr(addr)
    5.    endm
    You will have to edit the master playlist; here are 3 examples of how to do it: edit this:

    Code (Text):
    1. zMusIDPtr_EndLevel: db id(MusPtr_EndLevel); 97
    2. zMusIDPtr_GameOver: db id(MusPtr_GameOver)+20h ; B8
    3. zMusIDPtr_Continue: db (MusPtr_Continue-MusicPoint1)/ptrsize   ; 0
    into this:
    Code (Text):
    1. zMusIDPtr_EndLevel: zmakePlaylistEntry Mus_EndLevel,0
    2. zMusIDPtr_GameOver: zmakePlaylistEntry Mus_GameOver,20h
    3. zMusIDPtr_Continue: zmakePlaylistEntry Mus_Continue,0
    Basically, the +20h (or +40h) gets shunted to after the comma, while a zero is there if neither is present, also removing the 'Ptr' from 'MusPtr'. You can also delete the comments at the end of the line, as they are misleading now. The continue music was an exception, so I fixed it in the example. You can also delete these lines:

    Code (Text):
    1. ; Music IDs
    2. offset :=   MusicPoint2
    3. ptrsize :=   2
    4. idstart :=   80h
    We now have a table that has, as entries: bank ID (byte); song flags (1 byte); song pointer, relative to bank start (2 bytes). We must now make the game use this. So now find the line after label zBGMLoad that refers to zMasterPlaylist. You can just search for zMasterPlaylist, it is the only line other than the definition that has it. Modify it so that this:


    Code (Text):
    1.    ld   hl,zMasterPlaylist       ; Get address of the zMasterPlaylist
    2.  
    3.    add   hl,de               ; Add the 16-bit offset here
    4.    ld   a,(hl)               ; Get "fixed" index
    5.    ld   b,a               ; 'a' -> 'b'
    6.    ; The following instructions enable a bankswitch routine
    7.    and   80h               ; Get only 'bank' bit
    8.    ld   (zAbsVar.MusicBankNumber),a   ; Store this (use to enable alternate bank)
    9.    ld   a,b               ; Restore 'a'
    10.    add   a,a               ; Adding a+a causes a possible overflow and a multiplication by 2
    11.    add   a,a               ; Now multiplied by 4 and another possible overflow
    12.    ld   c,a               ; Result -> 'c'
    13.    ccf                   ; Invert carry flag...
    14.    sbc   a,a               ; ... so that this sets a to FFh if bit 6 of original a was clear (allow PAL double-update), zero otherwise (do not allow PAL double-update)
    15.    ld   (zAbsVar.IsPalFlag),a       ; Set IsPalFlag
    16.    ld   a,c               ; Put prior multiply result back in
    17.    add   a,a               ; Now multiplied by 8!
    18.    sbc   a,a               ; This is FFh if bit 5 of original a was set (uncompressed song), zero otherwise (compressed song)
    19.    push   af               ; Backing up result...?
    20.    ld   a,b               ; Put 80h based index -> 'a'
    21.    and   1Fh               ; Strip the flag bits
    22.    add   a,a               ; multiply by 2; now 'a' is offset into music table, save for the $8000
    23.    ld   e,a
    24.    ld   d,0               ; de = a
    25.    ld   hl,zROMWindow
    26.    add   hl,de               ; "hl" now contains 2-byte offset for music address table lookup
    27.    push   hl               ; Save 'hl' (will be damaged by bank switch)
    28.    call   zBankSwitchToMusic       ; Bank switch to start of music in ROM!
    29.    pop   hl               ; Restore 'hl'
    30.    ld   e,(hl)
    31.    inc   hl
    32.    ld   d,(hl)               ; Getting offset within bank to music -> de
    becomes this:


    Code (Text):
    1.   ld   hl,zMasterPlaylist; Get address of the zMasterPlaylist
    2.    add   hl,de           ; Add the 16-bit offset here
    3.    add   hl,de           ; Add the 16-bit offset here
    4.    add   hl,de           ; Add the 16-bit offset here
    5.    add   hl,de           ; Add the 16-bit offset here
    6.    ld   a,(hl)           ; Get bank index
    7.    inc   hl               ; Advance pointer
    8.    ld   (zAbsVar.MusicBankNumber),a; Store bank index
    9.    ld   a,(hl)           ; Get song flags
    10.    inc   hl               ; Advance pointer
    11.    add   a,a               ; Adding a+a causes an overflow and a multiplication by 2
    12.    add   a,a               ; Now multiplied by 4
    13.    ld   c,a               ; Result -> 'c'
    14.    ccf                   ; Clear carry flag...
    15.    sbc   a,a               ; ... reverse subtract with carry that was set to zero ... umm.. a=0 in a funny way?
    16.    ld   (zAbsVar.IsPalFlag),a   ; Clear zIsPalFlag?
    17.    ld   a,c               ; Put prior multiply result back in
    18.    add   a,a               ; Now multiplied by 8!
    19.    sbc   a,a               ; This is nonzero if bit 5 of original a is set, zero otherwise (uncompressed song flag)
    20.    push   af           ; Backing up result...?
    21.    ld   e, (hl)           ; Read low byte of pointer into e
    22.    inc   hl               ; Advance pointer
    23.    ld   d, (hl)           ; Read high byte of pointer into d
    24.    push   hl; Save 'hl' (will be damaged by bank switch)
    25.    call   zBankSwitchToMusic; Bank switch to start of music in ROM!
    26.    pop   hl ; Restore 'hl'
    This is because we went from 1 byte per entry to 4 bytes per entry. We also skipped several steps due to the new organization, including one that caps the number of songs to $1F (the limit is still there, in another place, though). We now have to fix the zBankSwitchToMusic routine to work with the new index. So go to it, and replace this:

    Code (Text):
    1.    ld   a,(zAbsVar.MusicBankNumber)
    2.    or   a
    3.    jr   nz,+
    4.  
    5.    bankswitch MusicPoint1
    6.    ret
    7. +
    8.    bankswitch MusicPoint2
    9.    ret
    with this:
    Code (Text):
    1.    ld   a,(zAbsVar.MusicBankNumber)
    2.    ld   hl, zBankRegister
    3.    ld   (hl), a
    4.    rept 7
    5.        rra
    6.        ld   (hl), a
    7.    endm
    8.    xor   a
    9.    ld   (hl), a
    10.    ret
    Now go to s2.constants.asm and search for zMasterPlaylist. Right under it, change ptrsize to 4.
    Now go to s2.asm. Find MusicPoint1 and delete the line starting as 'MusPtr_Continue:' then go to MusicPoint2 and delete all lines starting as 'MusPtr_'; none of that is needed now. You are now free to move songs to different banks as you please, and can create new banks at will.

    To create a new bank, go anywhere you want (except the middle of another bank) and add the following lines:

    Code (Text):
    1.    align  $8000
    2. soundBankStart := *
    3.    ; songs go here
    4.  
    5.  
    6.    if  * > soundBankStart + $ 8000
    7.    fatal "soundBank must fit in $8000 bytes but was $\{*-soundBankStart}. Try moving something to the other bank."
    8.    elseif  MOMPASS=2
    9.    message "soundBank has $\{$8000+soundBankStart-*} bytes free at end."
    10.    endif

    Add the songs in the indicated location on the new bank.

    If you build the ROM right now and test, everything should be working correctly.

    To add songs now is rather simple:
    add the music in any bank you want, creating one if needed
    add the entry for the song in zMasterPlaylist
    add an entry to zSpedUpTempoTable for the new song, in the same order as it is found on the master playlist (it is right below the master playlist)
    add the entry in the music ID list in s2.constants.asm.
    It is so easy now to get space for songs that you can, if you want, decompress all songs and split them into banks as you see fit (as long as you change the second parameter to have bit 5 (20h) set in the second entry on the master playlist).

    All we need to do now is lift the song + SFX limit. We already took care of one problem. Starting here, things are minimally tested; I moved song IDs around to test and it worked, but I would love to know if it works in a more extreme case.
    If you are using the SVN disassembly, this is done already, so skip to step 2; otherwise, go to s2.sounddriver.asm, find sub zPlaySoundByIndex and replace the first line 'ret p' by this:
    Code (Text):
    1.  cp MusID__First
    2.  ret   c
    in s2.constants.asm, find the line containing zMasterPlaylist; you will edit idstart to be the value you want.
    back to s2.sounddriver.asm, go to the master playlist and add a dummy entry for music ID $80 (you will have to find where it goes on your own). You should also not use a music ID of $00 (you won't be able to, anyway). Here is a suitable dummy entry:

    Code (Text):
    1.    dw  0 , 0
    To have more SFX ids allowed, go to line 'offset := SoundIndex' in s2.constants.asm and change the value of idstart below to what you want. A good value is 'idstart := MusID__End', as this will always allow you to add SFX and songs as you please. You must also watch for SFX ID of $80 depending on when exactly music ends (you will have to add a dummy entry to SoundIndex table in s2.asm instead of in zMasterPlaylist if ID $80 falls on SFX range).

    That sums it all, I think.

    Edit: Fixed mistake in master playlist format.

    Edit 2: code->asm,z80 tags.

    Edit 3: fixed formatting for new forum, provided by Caverns.
     
    Last edited: Jul 18, 2019
  6. Tamkis

    Tamkis

    Misfit
    116
    0
    0
    Pennsylvania
    Megaman 2: The Robotnik Wars, Unnamed S3&K hack
    Wow, you are right, there is a lot that needs to be changed for >$1F songs. How much research did you have to do to code this? This is amazing; no wonder why you are a tech member! I've followed most of the steps at this point, but am having some minor problems:

    <!--quoteo--><div class='quotetop'>QUOTE </div><div class='quotemain'><!--quotec-->First, scroll down to zMasterPlaylist definition on s2.sounddriver.asm. Before it, define the following macros:
    Code (Text):
    1. zmake68kBank function addr,(((addr&3F8000h)/zROMWindow))
    2. zmakePlaylistEntry macro addr,val
    3. &nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;&nbsp;&nbsp;&nbsp;zmake68kBank(addr),val
    4. &nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;&nbsp;&nbsp;&nbsp;zmake68kPtr(addr)
    5. &nbsp;&nbsp;&nbsp;&nbsp;endm
    <!--QuoteEnd--></div><!--QuoteEEnd-->

    Even though I added this macro above zmasterplaylist, the assembler is ignoring it and generating errors like (in the s2.log)

    Code (Text):
    1. > > >s2.sounddriver.asm(3118): error: unknown opcode
    2. > > > ZMAKEPLAYLISTENTRY(MUS_2PRESULT,0)
    3. > > > zMusIDPtr_2PResult:&nbsp;&nbsp;&nbsp;&nbsp;zmakePlaylistEntry(Mus_2PResult,0)
    4. > > >s2.sounddriver.asm(3119): error: unknown opcode
    5. > > > ZMAKEPLAYLISTENTRY(MUS_EHZ,0)
    6. > > > zMusIDPtr_EHZ:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zmakePlaylistEntry(Mus_EHZ,0)
    <!--quoteo--><div class='quotetop'>QUOTE </div><div class='quotemain'><!--quotec-->Now go to s2.constants.asm and search for zMasterPlaylist. Right under it, change ptrsize to 4. Now go to s2.asm. Find MusicPoint1 and delete the line starting as 'MusPtr_Continue:' then go to MusicPoint2 and delete all lines starting as 'MusPtr_'; none of that is needed now. You are now free to move songs to different banks as you please, and can create new banks at will.

    To create a new bank, go anywhere you want (except the middle of another bank) and add the following lines:
    Code (Text):
    1. &nbsp;&nbsp;&nbsp;&nbsp;align $8000
    2. soundBankStart&nbsp;&nbsp;&nbsp;&nbsp;:= *
    3. ; songs
    4. ; go
    5. ; here
    6. &nbsp;&nbsp;&nbsp;&nbsp;if * > soundBankStart + $8000
    7. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fatal "soundBank must fit in $8000 bytes but was $\{*-soundBankStart}. Try moving something to the other bank."
    8. &nbsp;&nbsp;&nbsp;&nbsp;elseif MOMPASS=2
    9. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message "soundBank has $\{$8000+soundBankStart-*} bytes free at end."
    10. &nbsp;&nbsp;&nbsp;&nbsp;endif
    Add the songs in the indicated location on the new bank.

    If you build the ROM right now and test, everything should be working correctly.

    To add songs now is rather simple:
    <ol type='1'><li>add the music in any bank you want, creating one if needed;</li><li>add the entry for the song in zMasterPlaylist;</li><li>add an entry to zSpedUpTempoTable for the new song, in the same order as it is found on the master playlist (it is right below the master playlist);</li><li>add the entry in the music ID list in s2.constants.asm.</li></ol><!--QuoteEnd--></div><!--QuoteEEnd-->

    Dumb question, but what is the new format of the songs in the bank under "songs go here"? Could you give me some examples? This is as far as I have gotten so far, but other than those few errors, everything is working.
     
  7. flamewing

    flamewing

    Emerald Hunter Tech Member
    1,161
    65
    28
    France
    Sonic Classic Heroes; Sonic 2 Special Stage Editor; Sonic 3&K Heroes (on hold)
    <!--quoteo(post=600807:date=Jun 29 2011, 06:04 PM:name=Tamkis)--><div class='quotetop'>QUOTE (Tamkis @ Jun 29 2011, 06:04 PM) <a href="index.php?act=findpost&pid=600807">[​IMG]</a></div><div class='quotemain'><!--quotec-->Wow, you are right, there is a lot that needs to be changed for >$1F songs. How much research did you have to do to code this? This is amazing; no wonder why you are a tech member!<!--QuoteEnd--></div><!--QuoteEEnd-->
    Quite a bit. Things got a bit faster since I found out Rob Jinnai had done a lot of research on the S2 sound driver; his work (which I merged to SVN recently) gave me quite a head start for figuring out the S&K sound driver (still going on); both of these combined led to the changes I wrote about on my previous post.

    <!--quoteo(post=600807:date=Jun 29 2011, 06:04 PM:name=Tamkis)--><div class='quotetop'>QUOTE (Tamkis @ Jun 29 2011, 06:04 PM) <a href="index.php?act=findpost&pid=600807">[​IMG]</a></div><div class='quotemain'><!--quotec--><!--quoteo--><div class='quotetop'>QUOTE </div><div class='quotemain'><!--quotec-->First, scroll down to zMasterPlaylist definition on s2.sounddriver.asm. Before it, define the following macros:
    Code (Text):
    1. zmake68kBank function addr,(((addr&3F8000h)/zROMWindow))
    2. zmakePlaylistEntry macro addr,val
    3. &nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;&nbsp;&nbsp;&nbsp;zmake68kBank(addr),val
    4. &nbsp;&nbsp;&nbsp;&nbsp;dw&nbsp;&nbsp;&nbsp;&nbsp;zmake68kPtr(addr)
    5. &nbsp;&nbsp;&nbsp;&nbsp;endm
    <!--QuoteEnd--></div><!--QuoteEEnd-->
    Even though I added this macro above zmasterplaylist, the assembler is ignoring it and generating errors like (in the s2.log)<!--QuoteEnd--></div><!--QuoteEEnd-->
    Ah, sorry; that is my fault: macros like that do not use parenthesis. So instead of what I said earlier, use this format for the master playlist instead:
    <!--g3--><div class='geshitop'>Syntax Highlighted Code: Z80</div><div class='codemain'><!--eg3--><pre class="z80" style="font-family:monospace;">zMusIDPtr_EndLevel: zmakePlaylistEntry Mus_EndLevel,<span style="color: #22bbff;">0</span>
    zMusIDPtr_GameOver: zmakePlaylistEntry Mus_GameOver,<span style="color: #dd22dd;">2</span><span style="color: #22bbff;">0</span>h
    zMusIDPtr_Continue: zmakePlaylistEntry Mus_Continue,<span style="color: #22bbff;">0</span></pre><!--gc4--><!--ek11c0lEUHRyX0VuZExldmVsOgl6bWFrZVBsYXlsaXN0RW50cnkgTXVzX0VuZExldmVsLDAKek11c0lE
    UHRyX0dhbWVPdmVyOgl6bWFrZVBsYXlsaXN0RW50cnkgTXVzX0dhbWVPdmVyLDIwaAp6TXVzSURQdHJfQ
    29udGludWU6CXptYWtlUGxheWxpc3RFbnRyeSBNdXNfQ29udGludWUsMA==--><!--egc4--><!--g4--></div><!--eg4-->
    (basically, remove the parenthesis) I fixed it in my previous post.

    <!--quoteo--><div class='quotetop'>QUOTE </div><div class='quotemain'><!--quotec-->Dumb question, but what is the new format of the songs in the bank under "songs go here"? Could you give me some examples? This is as far as I have gotten so far, but other than those few errors, everything is working.<!--QuoteEnd--></div><!--QuoteEEnd-->
    If you mean the format of the entries, then it is one of the following:
    <!--g1--><div class='geshitop'>Syntax Highlighted Code: ASM</div><div class='geshimain'><!--eg1--><pre class="asm" style="font-family:monospace;">Mus_DoomsdayZone: BINCLUDE <span style="color: #CC33CC;">"sound/music/DoomsdayZone.bin"</span>
    Mus_FinalZone: <span style="color: #00CC66;">include</span> <span style="color: #CC33CC;">"sound/music/FinalZone.asm"</span>
    <span style="color: #adadad; font-style: italic;">; Since following is uncompressed, master playlist entry must have a 20h</span>
    Mus_GameOver: <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGO_Voices<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0603</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">02F2</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_DAC<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0000</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_FM1<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">E80A</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_FM2<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">F40F</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_FM3<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">F40F</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_FM4<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">F40D</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_FM5<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">DC16</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_PSG<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D003</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0005</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_PSG<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">DC06</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0005</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_PSG<span style="">)</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">DC00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0004</span>
    MusGOver_FM1: <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">EF</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">F0</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">20</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">04</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">05</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">CA</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">12</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">06</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">CA</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">CB</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">12</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">C8</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1E</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">CA</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">06</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">CA</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">CA</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">C6</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">C4</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">12</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">C8</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">0C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">12</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">C9</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">04</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">C9</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">C8</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">06</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">C7</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">C6</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">F0</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">28</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">18</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">05</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">C5</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">60</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">F2</span>
    MusGOver_FM2: <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">EF</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D9</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">06</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D9</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D6</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D6</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D7</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">15</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D7</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1B</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D9</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">06</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D9</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D6</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">D6</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">DC</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">15</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">DC</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1B</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">F2</span>
    MusGOver_FM3: <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">EF</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D6</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D6</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D2</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D2</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D4</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">15</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D4</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1B</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D6</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">0C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D6</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D2</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D2</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D7</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">15</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D7</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1B</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">F2</span>
    MusGOver_FM4: <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">EF</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">02</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">E2</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AE</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">06</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AE</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">A9</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">A9</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AC</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">15</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AB</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AC</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">03</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AB</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AE</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">06</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">AE</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">A9</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">A9</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">B3</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">15</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">B2</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">B3</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">03</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">B2</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AE</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">04</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AE</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AD</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">06</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AC</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AB</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">AB</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">60</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">E2</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">F2</span>
    MusGOver_FM5: <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">EF</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">03</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">30</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D7</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">12</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">03</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">D7</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1B</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">30</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">DC</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">12</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">03</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">DC</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1B</span>
    MusGOver_PSG: <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">F2</span>
    MusGOver_DAC: <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">18</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">81</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">F7</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">04</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">w</span> z80_ptr<span style="">(</span>MusGOver_DAC<span style="">)</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">F2</span>
    MusGO_Voices: <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">3A</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">51</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">51</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">08</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">02</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1E</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1E</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1E</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">10</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1F</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">02</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">18</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">22</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">24</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">81</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">3C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">33</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">73</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">30</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">70</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">94</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">96</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">9F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">9F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">12</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">14</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">04</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">04</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0A</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0D</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">2F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">4F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">2F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">33</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1A</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">3A</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">07</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">01</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">8E</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">8D</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">8E</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">53</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0E</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0E</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0E</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">03</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">07</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">FF</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">27</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">28</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">80</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">1F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">66</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">53</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">31</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">22</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">98</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">1F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">12</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>
    <span style="color: #00bfff;">dc</span>.<span style="color: #00bfff;">b</span> <span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">00</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">FF</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">0F</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">8C</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">8A</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">8D</span>,<span style="color: #ff0000;">$</span><span style="color: #ff0000;">8B</span></pre><!--gc2--><!--TXVzX0Rvb21zZGF5Wm9uZToJQklOQ0xVREUJJnF1b3Q7c291bmQvbXVzaWMvRG9vbXNkYXlab25lLmJp
    biZxdW90OwpNdXNfRmluYWxab25lOgkJaW5jbHVkZQkmcXVvdDtzb3VuZC9tdXNpYy9GaW5hbFpvbmUuY
    XNtJnF1b3Q7CjsgU2luY2UgZm9sbG93aW5nIGlzIHVuY29tcHJlc3NlZCwgbWFzdGVyIHBsYXlsaXN0IG
    VudHJ5IG11c3QgaGF2ZSBhIDIwaApNdXNfR2FtZU92ZXI6CWRjLncgejgwX3B0cihNdXNHT19Wb2ljZXM
    pLCYjMDM2OzA2MDMsJiMwMzY7MDJGMgoJCWRjLncgejgwX3B0cihNdXNHT3Zlcl9EQUMpLCYjMDM2OzAw
    MDAKCQlkYy53IHo4MF9wdHIoTXVzR092ZXJfRk0xKSwmIzAzNjtFODBBCgkJZGMudyB6ODBfcHRyKE11c
    0dPdmVyX0ZNMiksJiMwMzY7RjQwRgoJCWRjLncgejgwX3B0cihNdXNHT3Zlcl9GTTMpLCYjMDM2O0Y0ME
    YKCQlkYy53IHo4MF9wdHIoTXVzR092ZXJfRk00KSwmIzAzNjtGNDBECgkJZGMudyB6ODBfcHRyKE11c0d
    PdmVyX0ZNNSksJiMwMzY7REMxNgoJCWRjLncgejgwX3B0cihNdXNHT3Zlcl9QU0cpLCYjMDM2O0QwMDMs
    JiMwMzY7MDAwNQoJCWRjLncgejgwX3B0cihNdXNHT3Zlcl9QU0cpLCYjMDM2O0RDMDYsJiMwMzY7MDAwN
    QoJCWRjLncgejgwX3B0cihNdXNHT3Zlcl9QU0cpLCYjMDM2O0RDMDAsJiMwMzY7MDAwNApNdXNHT3Zlcl
    9GTTE6CWRjLmIgJiMwMzY7RUYsJiMwMzY7MDAKCQlkYy5iICYjMDM2O0YwLCYjMDM2OzIwLCYjMDM2OzA
    xLCYjMDM2OzA0LCYjMDM2OzA1CgkJZGMuYiAmIzAzNjs4MCwmIzAzNjswQywmIzAzNjtDQSwmIzAzNjsx
    MiwmIzAzNjs4MCwmIzAzNjswNiwmIzAzNjtDQSwmIzAzNjs4MCwmIzAzNjtDQiwmIzAzNjsxMiwmIzAzN
    jtDOCwmIzAzNjsxRQoJCWRjLmIgJiMwMzY7Q0EsJiMwMzY7MDYsJiMwMzY7ODAsJiMwMzY7Q0EsJiMwMz
    Y7ODAsJiMwMzY7Q0EsJiMwMzY7ODAsJiMwMzY7QzYsJiMwMzY7ODAsJiMwMzY7QzQsJiMwMzY7MTIsJiM
    wMzY7QzgKCQlkYy5iICYjMDM2OzBDLCYjMDM2OzgwLCYjMDM2OzEyLCYjMDM2O0M5LCYjMDM2OzA0LCYj
    MDM2OzgwLCYjMDM2O0M5LCYjMDM2O0M4LCYjMDM2OzA2LCYjMDM2OzgwLCYjMDM2O0M3LCYjMDM2OzgwC
    gkJZGMuYiAmIzAzNjtDNiwmIzAzNjs4MAoJCWRjLmIgJiMwMzY7RjAsJiMwMzY7MjgsJiMwMzY7MDEsJi
    MwMzY7MTgsJiMwMzY7MDUKCQlkYy5iICYjMDM2O0M1LCYjMDM2OzYwLCYjMDM2O0YyCk11c0dPdmVyX0Z
    NMjoJZGMuYiAmIzAzNjtFRiwmIzAzNjswMSwmIzAzNjs4MCwmIzAzNjswMSwmIzAzNjtEOSwmIzAzNjsw
    NiwmIzAzNjs4MCwmIzAzNjtEOSwmIzAzNjs4MCwmIzAzNjtENiwmIzAzNjs4MCwmIzAzNjtENgoJCWRjL
    mIgJiMwMzY7ODAsJiMwMzY7RDcsJiMwMzY7MTUsJiMwMzY7RDcsJiMwMzY7MUIsJiMwMzY7RDksJiMwMz
    Y7MDYsJiMwMzY7ODAsJiMwMzY7RDksJiMwMzY7ODAsJiMwMzY7RDYsJiMwMzY7ODAKCQlkYy5iICYjMDM
    2O0Q2LCYjMDM2OzgwLCYjMDM2O0RDLCYjMDM2OzE1LCYjMDM2O0RDLCYjMDM2OzFCLCYjMDM2O0YyCk11
    c0dPdmVyX0ZNMzoJZGMuYiAmIzAzNjtFRiwmIzAzNjswMSwmIzAzNjtENiwmIzAzNjswQywmIzAzNjtEN
    iwmIzAzNjtEMiwmIzAzNjtEMiwmIzAzNjtENCwmIzAzNjsxNSwmIzAzNjtENCwmIzAzNjsxQiwmIzAzNj
    tENgoJCWRjLmIgJiMwMzY7MEMsJiMwMzY7RDYsJiMwMzY7RDIsJiMwMzY7RDIsJiMwMzY7RDcsJiMwMzY
    7MTUsJiMwMzY7RDcsJiMwMzY7MUIsJiMwMzY7RjIKTXVzR092ZXJfRk00OglkYy5iICYjMDM2O0VGLCYj
    MDM2OzAyLCYjMDM2O0UyLCYjMDM2OzAxLCYjMDM2O0FFLCYjMDM2OzA2LCYjMDM2OzgwLCYjMDM2O0FFL
    CYjMDM2OzgwLCYjMDM2O0E5LCYjMDM2OzgwLCYjMDM2O0E5CgkJZGMuYiAmIzAzNjs4MCwmIzAzNjtBQy
    wmIzAzNjsxNSwmIzAzNjtBQiwmIzAzNjswQywmIzAzNjtBQywmIzAzNjswMywmIzAzNjtBQiwmIzAzNjs
    wQywmIzAzNjtBRSwmIzAzNjswNiwmIzAzNjs4MAoJCWRjLmIgJiMwMzY7QUUsJiMwMzY7ODAsJiMwMzY7
    QTksJiMwMzY7ODAsJiMwMzY7QTksJiMwMzY7ODAsJiMwMzY7QjMsJiMwMzY7MTUsJiMwMzY7QjIsJiMwM
    zY7MEMsJiMwMzY7QjMsJiMwMzY7MDMKCQlkYy5iICYjMDM2O0IyLCYjMDM2OzBDLCYjMDM2O0FFLCYjMD
    M2OzA0LCYjMDM2OzgwLCYjMDM2O0FFLCYjMDM2O0FELCYjMDM2OzA2LCYjMDM2OzgwLCYjMDM2O0FDLCY
    jMDM2OzgwLCYjMDM2O0FCCgkJZGMuYiAmIzAzNjs4MCwmIzAzNjtBQiwmIzAzNjs2MCwmIzAzNjtFMiwm
    IzAzNjswMSwmIzAzNjtGMgpNdXNHT3Zlcl9GTTU6CWRjLmIgJiMwMzY7RUYsJiMwMzY7MDMsJiMwMzY7O
    DAsJiMwMzY7MzAsJiMwMzY7RDcsJiMwMzY7MTIsJiMwMzY7ODAsJiMwMzY7MDMsJiMwMzY7RDcsJiMwMz
    Y7MUIsJiMwMzY7ODAsJiMwMzY7MzAKCQlkYy5iICYjMDM2O0RDLCYjMDM2OzEyLCYjMDM2OzgwLCYjMDM
    2OzAzLCYjMDM2O0RDLCYjMDM2OzFCCk11c0dPdmVyX1BTRzoJZGMuYiAmIzAzNjtGMgpNdXNHT3Zlcl9E
    QUM6CWRjLmIgJiMwMzY7ODAsJiMwMzY7MTgsJiMwMzY7ODEKCQlkYy5iICYjMDM2O0Y3LCYjMDM2OzAwL
    CYjMDM2OzA0CgkJZGMudyB6ODBfcHRyKE11c0dPdmVyX0RBQykKCQlkYy5iICYjMDM2O0YyCk11c0dPX1
    ZvaWNlczoJZGMuYiAmIzAzNjszQSwmIzAzNjs1MSwmIzAzNjs1MSwmIzAzNjswOCwmIzAzNjswMiwmIzA
    zNjsxRSwmIzAzNjsxRSwmIzAzNjsxRSwmIzAzNjsxMCwmIzAzNjsxRiwmIzAzNjsxRiwmIzAzNjsxRgoJ
    CWRjLmIgJiMwMzY7MEYsJiMwMzY7MDAsJiMwMzY7MDAsJiMwMzY7MDAsJiMwMzY7MDIsJiMwMzY7MEYsJ
    iMwMzY7MEYsJiMwMzY7MEYsJiMwMzY7MUYsJiMwMzY7MTgsJiMwMzY7MjIsJiMwMzY7MjQsJiMwMzY7OD
    EKCQlkYy5iICYjMDM2OzNDLCYjMDM2OzMzLCYjMDM2OzczLCYjMDM2OzMwLCYjMDM2OzcwLCYjMDM2Ozk
    0LCYjMDM2Ozk2LCYjMDM2OzlGLCYjMDM2OzlGLCYjMDM2OzEyLCYjMDM2OzE0LCYjMDM2OzAwCgkJZGMu
    YiAmIzAzNjswRiwmIzAzNjswNCwmIzAzNjswNCwmIzAzNjswQSwmIzAzNjswRCwmIzAzNjsyRiwmIzAzN
    js0RiwmIzAzNjswRiwmIzAzNjsyRiwmIzAzNjszMywmIzAzNjsxQSwmIzAzNjs4MCwmIzAzNjs4MAoJCW
    RjLmIgJiMwMzY7M0EsJiMwMzY7MDEsJiMwMzY7MDEsJiMwMzY7MDcsJiMwMzY7MDEsJiMwMzY7OEUsJiM
    wMzY7OEQsJiMwMzY7OEUsJiMwMzY7NTMsJiMwMzY7MEUsJiMwMzY7MEUsJiMwMzY7MEUKCQlkYy5iICYj
    MDM2OzAzLCYjMDM2OzAwLCYjMDM2OzAwLCYjMDM2OzAwLCYjMDM2OzA3LCYjMDM2OzFGLCYjMDM2OzFGL
    CYjMDM2O0ZGLCYjMDM2OzBGLCYjMDM2OzFDLCYjMDM2OzI3LCYjMDM2OzI4LCYjMDM2OzgwCgkJZGMuYi
    AmIzAzNjsxRiwmIzAzNjs2NiwmIzAzNjs1MywmIzAzNjszMSwmIzAzNjsyMiwmIzAzNjsxQywmIzAzNjs
    xRiwmIzAzNjs5OCwmIzAzNjsxRiwmIzAzNjsxMiwmIzAzNjswRiwmIzAzNjswRgoJCWRjLmIgJiMwMzY7
    MEYsJiMwMzY7MDAsJiMwMzY7MDAsJiMwMzY7MDAsJiMwMzY7MDAsJiMwMzY7RkYsJiMwMzY7MEYsJiMwM
    zY7MEYsJiMwMzY7MEYsJiMwMzY7OEMsJiMwMzY7OEEsJiMwMzY7OEQsJiMwMzY7OEI=--><!--egc2--><!--g2--></div><!--eg2-->
    If you mean the format of the songs: these would be normal S2 SMPS format. You can put the song compressed or uncompressed, it is your choice -- if uncompressed, the song's entry in the master playlist must have a 20h instead of a 0, if compressed, it must be <strike>Kosinski</strike>saxman-compressed, with all pointers assuming that the song starts at offset $1380.

    Edit: fixed stupid mistake. What was I thinking, 'Kosinski'?