]> git.sesse.net Git - pistorm/commitdiff
[HAX] Fix old-new IRQ behavior a bit?
authorbeeanyew <beeanyew@gmail.com>
Sun, 20 Jun 2021 16:00:31 +0000 (18:00 +0200)
committerbeeanyew <beeanyew@gmail.com>
Sun, 20 Jun 2021 16:00:31 +0000 (18:00 +0200)
emulator.c
gpio/ps_protocol.c

index 519813c6571ab01b5f4aa1658e819ca79f54bd09..8bf785588fed9cd8b153bd3b86035891afa71658 100644 (file)
@@ -200,8 +200,12 @@ cpu_loop:
     m68k_execute(1);
   }
   else {
-    if (cpu_emulation_running)
-      m68k_execute(loop_cycles);
+    if (cpu_emulation_running) {
+      if (irq)
+        m68k_execute(5);
+      else
+        m68k_execute(loop_cycles);
+    }
   }
 
   if (irq) {
@@ -672,8 +676,7 @@ static inline void inline_write_16(unsigned int address, unsigned int data) {
   *(gpio + 1) = GPFSEL1_INPUT;
   *(gpio + 2) = GPFSEL2_INPUT;
 
-  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
+  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS)) {}
 }
 
 static inline void inline_write_8(unsigned int address, unsigned int data) {
@@ -705,8 +708,7 @@ static inline void inline_write_8(unsigned int address, unsigned int data) {
   *(gpio + 1) = GPFSEL1_INPUT;
   *(gpio + 2) = GPFSEL2_INPUT;
 
-  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
+  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS)) {}
 }
 
 static inline void inline_write_32(unsigned int address, unsigned int value) {
@@ -736,9 +738,8 @@ static inline unsigned int inline_read_16(unsigned int address) {
   *(gpio + 7) = (REG_DATA << PIN_A0);
   *(gpio + 7) = 1 << PIN_RD;
 
+  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS)) {}
   unsigned int value = *(gpio + 13);
-  while ((value=*(gpio + 13)) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
 
   *(gpio + 10) = 0xffffec;
 
@@ -767,9 +768,8 @@ static inline unsigned int inline_read_8(unsigned int address) {
   *(gpio + 7) = (REG_DATA << PIN_A0);
   *(gpio + 7) = 1 << PIN_RD;
 
+  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS)) {}
   unsigned int value = *(gpio + 13);
-  while ((value=*(gpio + 13)) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
 
   *(gpio + 10) = 0xffffec;
 
index 94e38a41b60481e2f2d5008af6cb862cfa2cd996..4fb4ee6a677283f60592da01c8b42178fb656439 100644 (file)
@@ -113,8 +113,7 @@ void ps_write_16(unsigned int address, unsigned int data) {
   *(gpio + 1) = GPFSEL1_INPUT;
   *(gpio + 2) = GPFSEL2_INPUT;
 
-  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
+  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS)) {}
 }
 
 void ps_write_8(unsigned int address, unsigned int data) {
@@ -146,8 +145,7 @@ void ps_write_8(unsigned int address, unsigned int data) {
   *(gpio + 1) = GPFSEL1_INPUT;
   *(gpio + 2) = GPFSEL2_INPUT;
 
-  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
+  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS)) {}
 }
 
 void ps_write_32(unsigned int address, unsigned int value) {
@@ -177,9 +175,8 @@ unsigned int ps_read_16(unsigned int address) {
   *(gpio + 7) = (REG_DATA << PIN_A0);
   *(gpio + 7) = 1 << PIN_RD;
 
+  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS)) {}
   unsigned int value = *(gpio + 13);
-  while ((value=*(gpio + 13)) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
 
   *(gpio + 10) = 0xffffec;
 
@@ -208,9 +205,8 @@ unsigned int ps_read_8(unsigned int address) {
   *(gpio + 7) = (REG_DATA << PIN_A0);
   *(gpio + 7) = 1 << PIN_RD;
 
+  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS)) {}
   unsigned int value = *(gpio + 13);
-  while ((value=*(gpio + 13)) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
 
   *(gpio + 10) = 0xffffec;