detect and fix incorect format args
[cyclone68000.git] / Main.cpp
index 1f532a0..b6f49c3 100644 (file)
--- a/Main.cpp
+++ b/Main.cpp
@@ -25,8 +25,8 @@ int arm_op_count;
 \r
 // opcodes often used by games\r
 static const unsigned short hot_opcodes[] = {\r
-  0x6701, // beq     $3\r
-  0x6601, // bne     $3\r
+  0x6702, // beq     $3\r
+  0x6602, // bne     $3\r
   0x51c8, // dbra    Dn, $2\r
   0x4a38, // tst.b   $0.w\r
   0xd040, // add.w   Dn, Dn\r
@@ -34,7 +34,7 @@ static const unsigned short hot_opcodes[] = {
   0x0240, // andi.w  #$0, D0\r
   0x2038, // move.l  $0.w, D0\r
   0xb0b8, // cmp.l   $0.w, D0\r
-  0x6001, // bra     $3\r
+  0x6002, // bra     $3\r
   0x30c0, // move.w  D0, (A0)+\r
   0x3028, // move.w  ($0,A0), D0\r
   0x0c40, // cmpi.w  #$0, D0\r
@@ -52,7 +52,7 @@ static const unsigned short hot_opcodes[] = {
   0xb038, // cmp.b   $0.w, D0\r
   0x3039, // move.w  $0.l, D0\r
   0x4840, // swap    D0\r
-  0x6101, // bsr     $3\r
+  0x6102, // bsr     $3\r
   0x6100, // bsr     $2\r
   0x5e40, // addq.w  #7, D0\r
   0x1039, // move.b  $0.l, D0\r
@@ -64,10 +64,10 @@ static const unsigned short hot_opcodes[] = {
   0xc040, // and.w   D0, D0\r
   0x3180, // move.w  D0, (A0,D0.w)\r
   0x1198, // move.b  (A0)+, (A0,D0.w)\r
-  0x6501, // bcs     $3\r
+  0x6502, // bcs     $3\r
   0x6500, // bcs     $2\r
-  0x6401, // bcc     $3\r
-  0x6a01, // bpl     $3\r
+  0x6402, // bcc     $3\r
+  0x6a02, // bpl     $3\r
   0x41f0, // lea     (A0,D0.w), A0\r
   0x4a28, // tst.b   ($0,A0)\r
   0x0828, // btst    #$0, ($0,A0)\r
@@ -169,13 +169,14 @@ static void AddressErrorWrapper(char rw, const char *dataprg, int iw)
 }\r
 #endif\r
 \r
-void FlushPC(void)\r
+void FlushPC(int force)\r
 {\r
 #if MEMHANDLERS_NEED_PC\r
-  if (pc_dirty)\r
-    ot("  str r4,[r7,#0x40] ;@ Save PC\n");\r
-#endif\r
+  force |= pc_dirty;\r
   pc_dirty = 0;\r
+#endif\r
+  if (force)\r
+    ot("  str r4,[r7,#0x40] ;@ Save PC\n");\r
 }\r
 \r
 static void PrintFramework()\r
@@ -306,7 +307,12 @@ static void PrintFramework()
   ot("  bx lr\n");\r
   ltorg();\r
 #else\r
-  ot(";@ do nothing\n");\r
+  ot(";@ fix final jumptable entries\n");\r
+  ot("  ldr r12,=CycloneJumpTab\n");\r
+  ot("  add r12,r12,#0x10000*4\n");\r
+  ot("  ldr r0,[r12,#-3*4]\n");\r
+  ot("  str r0,[r12,#-2*4]\n");\r
+  ot("  str r0,[r12,#-1*4]\n");\r
   ot("  bx lr\n");\r
 #endif\r
   ot("\n");\r
@@ -630,7 +636,7 @@ static void PrintFramework()
   ot("  ldr r6,[r7,#0x54]\n");\r
   ot("  ldrh r8,[r4],#2 ;@ Fetch next opcode\n");\r
   ot("  subs r5,r5,#44 ;@ Subtract cycles\n");\r
-  ot("  ldrge pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
+  ot("  ldrgt pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
   ot("  b CycloneEnd\n");\r
   ot("\n");\r
 \r
@@ -842,7 +848,7 @@ static void PrintFramework()
   ot("  ldr r6,[r7,#0x54]\n");\r
   ot("  ldrh r8,[r4],#2 ;@ Fetch next opcode\n");\r
   ot("  subs r5,r5,#50 ;@ Subtract cycles\n");\r
-  ot("  ldrge pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
+  ot("  ldrgt pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
   ot("  b CycloneEnd\n");\r
   ot("\n");\r
 #endif\r
@@ -855,7 +861,7 @@ static void PrintFramework()
   ot("  cmp r5,#0\n");\r
   ot("  orr r0,r0,#2 ;@ go to trace mode\n");\r
   ot("  str r0,[r7,#0x58]\n");\r
-  ot("  blt CycloneEnd\n"); // should take care of situation where we come here when already tracing\r
+  ot("  ble CycloneEnd\n"); // should take care of situation where we come here when already tracing\r
   ot(";@ CheckInterrupt:\n");\r
   ot("  movs r0,r1,lsr #24 ;@ Get IRQ level\n");\r
   ot("  beq CycloneDoTrace\n");\r
@@ -898,13 +904,13 @@ static void PrintFramework()
   ot("  bl Exception\n");\r
   ot("  ldrh r8,[r4],#2 ;@ Fetch next opcode\n");\r
   ot("  subs r5,r5,#34 ;@ Subtract cycles\n");\r
-  ot("  ldrge pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
+  ot("  ldrgt pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
   ot("  b CycloneEnd\n");\r
   ot("\n");\r
   ot("TraceDisabled%s\n", ms?"":":");\r
   ot("  ldrh r8,[r4],#2 ;@ Fetch next opcode\n");\r
   ot("  cmp r5,#0\n");\r
-  ot("  ldrge pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
+  ot("  ldrgt pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
   ot("  b CycloneEnd\n");\r
   ot("\n");\r
 #endif\r
@@ -1267,9 +1273,9 @@ static int CycloneMake()
   ot("  %s CycloneDoTrace\n",globl);\r
   ot("  %s CycloneJumpTab\n",globl);\r
   ot("  %s Op____\n",globl);\r
-  ot("  %s Op6001\n",globl);\r
-  ot("  %s Op6601\n",globl);\r
-  ot("  %s Op6701\n",globl);\r
+  ot("  %s Op6002\n",globl);\r
+  ot("  %s Op6602\n",globl);\r
+  ot("  %s Op6702\n",globl);\r
 #endif\r
   ot("\n");\r
   ot(ms?"CycloneVer dcd 0x":"CycloneVer: .long 0x");\r