+#if 0\r
+static int had_irq = 0, z80_ppc, z80_ops_done = 0;\r
+int z80_cycles_left = 0;\r
+\r
+void z80_int(void)\r
+{\r
+ had_irq = 1;\r
+}\r
+\r
+static void xfail(void)\r
+{\r
+ printf("PC: %04x, %04x\n", Cz80_Get_Reg(&CZ80, CZ80_PC), z80_ppc);\r
+ printf("z80_ops_done done: %i\n", z80_ops_done);\r
+ exit(1);\r
+}\r
+\r
+int z80_run(int cycles)\r
+{\r
+ int fail = 0;\r
+ int cdrz, ccz;\r
+\r
+ z80_cycles_left = cycles;\r
+ z80_ppc = Cz80_Get_Reg(&CZ80, CZ80_PC);\r
+\r
+ if (had_irq) {\r
+ printf("irq @ %04x\n", Cz80_Get_Reg(&CZ80, CZ80_PC));\r
+ Cz80_Set_IRQ(&CZ80, 0, HOLD_LINE);\r
+ drZ80.Z80_IRQ = 1;\r
+ had_irq = 0;\r
+ }\r
+\r
+ while (z80_cycles_left > 0)\r
+ {\r
+ ccz = Cz80_Exec(&CZ80, 1);\r
+ cdrz = 1 - DrZ80Run(&drZ80, 1);\r
+\r
+ if (drZ80.Z80_IRQ && (drZ80.Z80IF&1))\r
+ cdrz += 1 - DrZ80Run(&drZ80, 1); // cz80 processes IRQ after EI, DrZ80 does not\r
+\r
+ if (cdrz != ccz) {\r
+ printf("cycles: %i vs %i\n", cdrz, ccz);\r
+ fail = 1;\r
+ }\r
+\r
+ if (drZ80.Z80PC - drZ80.Z80PC_BASE != Cz80_Get_Reg(&CZ80, CZ80_PC)) {\r
+ printf("PC: %04x vs %04x\n", drZ80.Z80PC - drZ80.Z80PC_BASE, Cz80_Get_Reg(&CZ80, CZ80_PC));\r
+ fail = 1;\r
+ }\r
+\r
+ if (fail) xfail();\r
+\r
+ z80_ops_done++;\r
+ z80_cycles_left -= ccz;\r
+ z80_ppc = Cz80_Get_Reg(&CZ80, CZ80_PC);\r
+ }\r
+\r
+ return co - z80_cycles_left;\r
+}\r
+#endif\r
+\r