handle dbra wait loops, update cyclone
[picodrive.git] / pico / pico_int.h
index 1acc1b0..3a530ca 100644 (file)
@@ -51,6 +51,9 @@ extern struct Cyclone PicoCpuCM68k, PicoCpuCS68k;
 #define SekIsStoppedS68k() (PicoCpuCS68k.state_flags&1)\r
 #define SekShouldInterrupt() (PicoCpuCM68k.irq > (PicoCpuCM68k.srh&7))\r
 \r
+#define SekNotPolling     PicoCpuCM68k.not_pol\r
+#define SekNotPollingS68k PicoCpuCS68k.not_pol\r
+\r
 #define SekInterrupt(i) PicoCpuCM68k.irq=i\r
 #define SekIrqLevel     PicoCpuCM68k.irq\r
 \r
@@ -79,6 +82,9 @@ extern M68K_CONTEXT PicoCpuFM68k, PicoCpuFS68k;
 #define SekIsStoppedS68k() (PicoCpuFS68k.execinfo&FM68K_HALTED)\r
 #define SekShouldInterrupt() fm68k_would_interrupt()\r
 \r
+#define SekNotPolling     PicoCpuFM68k.not_polling\r
+#define SekNotPollingS68k PicoCpuFS68k.not_polling\r
+\r
 #define SekInterrupt(irq) PicoCpuFM68k.interrupts[0]=irq\r
 #define SekIrqLevel       PicoCpuFM68k.interrupts[0]\r
 \r
@@ -108,6 +114,9 @@ extern m68ki_cpu_core PicoCpuMM68k, PicoCpuMS68k;
 #define SekIsStoppedS68k() (PicoCpuMS68k.stopped==STOP_LEVEL_STOP)\r
 #define SekShouldInterrupt() (CPU_INT_LEVEL > FLAG_INT_MASK)\r
 \r
+#define SekNotPolling     PicoCpuMM68k.not_polling\r
+#define SekNotPollingS68k PicoCpuMS68k.not_polling\r
+\r
 #define SekInterrupt(irq) { \\r
        void *oldcontext = m68ki_cpu_p; \\r
        m68k_set_context(&PicoCpuMM68k); \\r
@@ -134,8 +143,6 @@ extern unsigned int SekCycleAim;
 #define SekCyclesBurn(c)    SekCycleCnt += c\r
 #define SekCyclesBurnRun(c) { \\r
   SekCyclesLeft -= c; \\r
-  if (SekCyclesLeft < 0) \\r
-    SekCyclesLeft = 0; \\r
 }\r
 \r
 // note: sometimes may extend timeslice to delay an irq\r
@@ -704,6 +711,7 @@ void ym2612_unpack_state(void);
 \r
 \r
 // videoport.c\r
+extern int line_base_cycles;\r
 PICO_INTERNAL_ASM void PicoVideoWrite(unsigned int a,unsigned short d);\r
 PICO_INTERNAL_ASM unsigned int PicoVideoRead(unsigned int a);\r
 PICO_INTERNAL_ASM unsigned int PicoVideoRead8(unsigned int a);\r
@@ -835,9 +843,9 @@ void sh2_peripheral_reset(SH2 *sh2);
 unsigned int sh2_peripheral_read8(unsigned int a, SH2 *sh2);\r
 unsigned int sh2_peripheral_read16(unsigned int a, SH2 *sh2);\r
 unsigned int sh2_peripheral_read32(unsigned int a, SH2 *sh2);\r
-void sh2_peripheral_write8(unsigned int a, unsigned int d, SH2 *sh2);\r
-void sh2_peripheral_write16(unsigned int a, unsigned int d, SH2 *sh2);\r
-void sh2_peripheral_write32(unsigned int a, unsigned int d, SH2 *sh2);\r
+void REGPARM(3) sh2_peripheral_write8(unsigned int a, unsigned int d, SH2 *sh2);\r
+void REGPARM(3) sh2_peripheral_write16(unsigned int a, unsigned int d, SH2 *sh2);\r
+void REGPARM(3) sh2_peripheral_write32(unsigned int a, unsigned int d, SH2 *sh2);\r
 \r
 #else\r
 #define Pico32xInit()\r
@@ -966,7 +974,7 @@ void pevt_dump(void);
 #define cdprintf(x...)\r
 #endif\r
 \r
-#ifdef __i386__\r
+#if defined(__GNUC__) && defined(__i386__)\r
 #define REGPARM(x) __attribute__((regparm(x)))\r
 #else\r
 #define REGPARM(x)\r