32x mostly works
[megadrive.git] / testpico / sh2_main.c
index eaa69a9..9c84b46 100644 (file)
@@ -1,6 +1,7 @@
 #include "common.h"
 
 void spin(int loops);
+u16  read_frt(void);
 
 void main_c(u32 is_slave)
 {
@@ -8,11 +9,14 @@ void main_c(u32 is_slave)
 
     for (;;)
     {
-        u16 cmd;
+        u16 cmd, cmdr;
 
         mem_barrier();
         cmd = read16(&r[0x20/2]);
-        if ((cmd & 0x8000) ^ (is_slave << 15)) {
+        mem_barrier();
+        cmdr = read16(&r[0x20/2]);
+        if (cmd != cmdr  // documented as "normal" case
+            || ((cmd & 0x8000) ^ (is_slave << 15))) {
             spin(64);
             continue;
         }
@@ -21,13 +25,16 @@ void main_c(u32 is_slave)
         {
         case 0:
         case 0x4d5f:    // 'M_' from BIOS
-        case 0x535f:    // 'S_' from BIOS
             spin(64);
             continue;
         case CMD_ECHO:
             v = read16(&r[0x22/2]) ^ (is_slave << 15);
             write16(&r[0x24/2], v);
             break;
+        case CMD_READ_FRT:
+            v = read_frt();
+            write16(&r[0x24/2], v);
+            break;
         }
         write16(&r[0x20/2], 0);
     }