sound fixes for Ferrari GP
[picodrive.git] / Pico / sound / ym2612.c
index 754f496..f626260 100644 (file)
@@ -1637,8 +1637,7 @@ void YM2612Init_(int clock, int rate)
        ym2612_dacen = &ym2612.dacen;\r
        ym2612_dacout = &ym2612.dacout;\r
 \r
-       /* clear everything but the regs */\r
-       memset(ym2612.CH, 0, sizeof(ym2612)-sizeof(ym2612.REGS)-4);\r
+       memset(&ym2612, 0, sizeof(ym2612));\r
        init_tables();\r
 \r
        ym2612.OPN.ST.clock = clock;\r
@@ -1654,8 +1653,11 @@ void YM2612ResetChip_(void)
 {\r
        int i;\r
 \r
+       memset(ym2612.REGS, 0, sizeof(ym2612.REGS));\r
+\r
        OPNSetPres( 6*24 );\r
        set_timers( 0x30 ); /* mode 0 , timer reset */\r
+       ym2612.REGS[0x27] = 0x30;\r
 \r
        ym2612.OPN.eg_timer = 0;\r
        ym2612.OPN.eg_cnt   = 0;\r
@@ -1666,6 +1668,8 @@ void YM2612ResetChip_(void)
        {\r
                OPNWriteReg(i      ,0xc0);\r
                OPNWriteReg(i|0x100,0xc0);\r
+               ym2612.REGS[i      ] = 0xc0;\r
+               ym2612.REGS[i|0x100] = 0xc0;\r
        }\r
        for(i = 0xb2 ; i >= 0x30 ; i-- )\r
        {\r
@@ -1675,6 +1679,7 @@ void YM2612ResetChip_(void)
        for(i = 0x26 ; i >= 0x20 ; i-- ) OPNWriteReg(i,0);\r
        /* DAC mode clear */\r
        ym2612.dacen = 0;\r
+       ym2612.addr_A1 = 0;\r
 }\r
 \r
 \r
@@ -1852,7 +1857,7 @@ int YM2612PicoTick_(int n)
 void YM2612PicoStateLoad_(void)\r
 {\r
 #ifndef EXTERNAL_YM2612\r
-       int i, old_A1 = ym2612.addr_A1;\r
+       int i, real_A1 = ym2612.addr_A1;\r
 \r
        reset_channels( &ym2612.CH[0], 6 );\r
 \r
@@ -1861,12 +1866,13 @@ void YM2612PicoStateLoad_(void)
                YM2612Write_(0, i);\r
                YM2612Write_(1, ym2612.REGS[i]);\r
        }\r
+\r
        for(i = 0; i < 0x100; i++) {\r
                YM2612Write_(2, i);\r
                YM2612Write_(3, ym2612.REGS[i|0x100]);\r
        }\r
 \r
-       ym2612.addr_A1 = old_A1;\r
+       ym2612.addr_A1 = real_A1;\r
 #else\r
        reset_channels( &ym2612.CH[0], 6 );\r
 #endif\r