]> git.sesse.net Git - pistorm/blobdiff - emulator.c
Add some more Mac68k handling stuff
[pistorm] / emulator.c
index 519813c6571ab01b5f4aa1658e819ca79f54bd09..968f52e7bd430c988034566d401d08039c322d37 100644 (file)
@@ -181,7 +181,8 @@ void *ipl_task(void *args) {
 }
 
 void *cpu_task() {
-  m68k_pulse_reset();
+       m68ki_cpu_core *state = &m68ki_cpu;
+       m68k_pulse_reset(state);
 
 cpu_loop:
   if (mouse_hook_enabled) {
@@ -197,11 +198,15 @@ cpu_loop:
     printf("%.8X (%.8X)]] %s\n", m68k_get_reg(NULL, M68K_REG_PC), (m68k_get_reg(NULL, M68K_REG_PC) & 0xFFFFFF), disasm_buf);
     if (do_disasm)
       do_disasm--;
-    m68k_execute(1);
+         m68k_execute(state, 1);
   }
   else {
-    if (cpu_emulation_running)
-      m68k_execute(loop_cycles);
+    if (cpu_emulation_running) {
+               if (irq)
+                       m68k_execute(state, 5);
+               else
+                       m68k_execute(state, loop_cycles);
+    }
   }
 
   if (irq) {
@@ -562,7 +567,7 @@ switch_config:
 
   m68k_init();
   printf("Setting CPU type to %d.\n", cpu_type);
-  m68k_set_cpu_type(cpu_type);
+       m68k_set_cpu_type(&m68ki_cpu, cpu_type);
   cpu_pulse_reset();
 
   pthread_t ipl_tid = 0, cpu_tid, kbd_tid;
@@ -622,16 +627,14 @@ switch_config:
 }
 
 void cpu_pulse_reset(void) {
+       m68ki_cpu_core *state = &m68ki_cpu;
   ps_pulse_reset();
-  if (cfg->platform->handle_reset)
-    cfg->platform->handle_reset(cfg);
 
-  //m68k_write_memory_16(INTENA, 0x7FFF);
   ovl = 1;
-  //m68k_write_memory_8(0xbfe201, 0x0001);  // AMIGA OVL
-  //m68k_write_memory_8(0xbfe001, 0x0001);  // AMIGA OVL high (ROM@0x0)
+  if (cfg->platform->handle_reset)
+    cfg->platform->handle_reset(cfg);
 
-  m68k_pulse_reset();
+       m68k_pulse_reset(state);
 }
 
 int cpu_irq_ack(int level) {
@@ -672,8 +675,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 +707,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 +737,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 +767,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;
 
@@ -952,9 +951,11 @@ static inline int32_t platform_write_check(uint8_t type, uint32_t addr, uint32_t
           if (val & 0x10 && !ovl) {
               ovl = 1;
               printf("[MAC] OVL on.\n");
+              handle_ovl_mappings_mac68k(cfg);
           } else if (ovl) {
             ovl = 0;
             printf("[MAC] OVL off.\n");
+            handle_ovl_mappings_mac68k(cfg);
           }
           break;
       }