proper ym2612 save hopefully done
[picodrive.git] / Pico / Memory.c
index fe87ab9..06806cb 100644 (file)
@@ -937,11 +937,23 @@ void ym2612_unpack_state(void)
   YM2612PicoStateLoad();\r
 \r
   // feed all the registers and update internal state\r
-  for (i = 0x20; i < 0xB8; i++) {\r
+  for (i = 0x20; i < 0xA0; i++) {\r
     ym2612_write_local(0, i, 0);\r
     ym2612_write_local(1, ym2612.REGS[i], 0);\r
   }\r
-  for (i = 0x30; i < 0xB8; i++) {\r
+  for (i = 0x30; i < 0xA0; i++) {\r
+    ym2612_write_local(2, i, 0);\r
+    ym2612_write_local(3, ym2612.REGS[i|0x100], 0);\r
+  }\r
+  for (i = 0xAF; i >= 0xA0; i--) { // must apply backwards\r
+    ym2612_write_local(2, i, 0);\r
+    ym2612_write_local(3, ym2612.REGS[i|0x100], 0);\r
+    ym2612_write_local(0, i, 0);\r
+    ym2612_write_local(1, ym2612.REGS[i], 0);\r
+  }\r
+  for (i = 0xB0; i < 0xB8; i++) {\r
+    ym2612_write_local(0, i, 0);\r
+    ym2612_write_local(1, ym2612.REGS[i], 0);\r
     ym2612_write_local(2, i, 0);\r
     ym2612_write_local(3, ym2612.REGS[i|0x100], 0);\r
   }\r
@@ -952,7 +964,10 @@ void ym2612_unpack_state(void)
   else\r
 #endif\r
     ret = YM2612PicoStateLoad2(&tat, &tbt);\r
-  if (ret != 0) return; // no saved timers\r
+  if (ret != 0) {\r
+    elprintf(EL_STATUS, "old ym2612 state");\r
+    return; // no saved timers\r
+  }\r
 \r
   tac = (1024 - ym2612.OPN.ST.TA) << 16;\r
   tbc = (256  - ym2612.OPN.ST.TB) << 16;\r