NOT setting upper bits on PUSH PC, minor adjustments
authornotaz <notasas@gmail.com>
Fri, 13 Jul 2007 13:39:09 +0000 (13:39 +0000)
committernotaz <notasas@gmail.com>
Fri, 13 Jul 2007 13:39:09 +0000 (13:39 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@189 be3aeb3a-fb24-0410-a615-afba39da0efa

cpu/Cyclone/Cyclone.h
cpu/Cyclone/Main.cpp
cpu/Cyclone/OpArith.cpp
cpu/Cyclone/OpBranch.cpp

index 62a1314..6bce671 100644 (file)
@@ -40,8 +40,8 @@ struct Cyclone
   unsigned short (*fetch16)(unsigned int a);  // [r7,#0x84]\r
   unsigned int   (*fetch32)(unsigned int a);  // [r7,#0x88]\r
   void (*IrqCallback)(int int_level);         // [r7,#0x8c] - optional irq callback function, see config.h\r
-  void (*ResetCallback)();                    // [r7,#0x90] - if enabled in config.h, calls this whenever RESET opcode is encountered.\r
-  int  (*UnrecognizedCallback)();             // [r7,#0x94] - if enabled in config.h, calls this whenever unrecognized opcode is encountered.\r
+  void (*ResetCallback)(void);                // [r7,#0x90] - if enabled in config.h, calls this whenever RESET opcode is encountered.\r
+  int  (*UnrecognizedCallback)(void);         // [r7,#0x94] - if enabled in config.h, calls this whenever unrecognized opcode is encountered.\r
 };\r
 \r
 // used only if Cyclone was compiled with compressed jumptable, see config.h\r
index 96de268..5647fb1 100644 (file)
@@ -102,9 +102,10 @@ static void PrintException(int ints)
   ot("no_sp_swap%i%s\n",ints,ms?"":":");\r
 \r
   ot("  ldr r10,[r7,#0x60] ;@ Get Memory base\n");\r
-  ot("  mov r1,r4,lsl #8\n");\r
-  ot("  sub r1,r1,r10,lsl #8 ;@ r1 = Old PC\n");\r
-  ot("  mov r1,r1,asr #8 ;@ push sign extended\n");\r
+//  ot("  mov r1,r4,lsl #8\n");\r
+//  ot("  sub r1,r1,r10,lsl #8 ;@ r1 = Old PC\n");\r
+//  ot("  mov r1,r1,asr #8 ;@ push sign extended\n");\r
+  ot("  sub r1,r4,r10 ;@ r1 = Old PC\n");\r
   OpPush32();\r
   OpPushSr(1);\r
   ot("  mov r0,r11\n");\r
@@ -634,12 +635,11 @@ static void PrintJumpTable()
     }\r
     if(ip&1) ott("0x%.4x", 0, "\n",0,ip++,1);\r
     if(ip&7) fseek(AsmFile, -1, SEEK_CUR); // remove last comma\r
-    ot("\n");\r
     if(ip&7) {\r
       for(i = 8-(ip&7); i > 0; i--)\r
         ot(",0x0000");\r
-      ot("\n");\r
     }\r
+    ot("\n");\r
     if(ms) {\r
       for(i = (0x2000-ip/2)/8+1; i > 0; i--)\r
         ot("  dcd 0,0,0,0,0,0,0,0\n");\r
@@ -687,7 +687,7 @@ static int CycloneMake()
   ot("\n;@ Dave's Cyclone 68000 Emulator v%x.%.3x - Assembler Output\n\n",CycloneVer>>12,CycloneVer&0xfff);\r
 \r
   ot(";@ (c) Copyright 2003 Dave, All rights reserved.\n");\r
-  ot(";@ some code (c) Copyright 2005-2006 notaz, All rights reserved.\n");\r
+  ot(";@ some code (c) Copyright 2005-2007 notaz, All rights reserved.\n");\r
   ot(";@ Cyclone 68000 is free for non-commercial use.\n\n");\r
   ot(";@ For commercial use, separate licencing terms must be obtained.\n\n");\r
 \r
index 47ff8b1..93d34a2 100644 (file)
@@ -553,8 +553,7 @@ int OpAritha(int op)
 \r
   // EA calculation order defines how situations like  suba.w (A0)+, A0 get handled.\r
   // different emus act differently in this situation, I couldn't fugure which is right behaviour.\r
-  // This is Musashi's behaviour.\r
-  if (type == 1)\r
+  if (/*type == */1)\r
   {\r
     EaCalcReadNoSE(-1,0,sea,size,0x003f);\r
     EaCalcReadNoSE(type!=1?10:-1,11,dea,2,0x0e00);\r
index da76306..d1c2391 100644 (file)
@@ -243,10 +243,10 @@ int OpJsr(int op)
   else\r
   {\r
     ot(";@ Jsr - Push old PC first\n");\r
-    ot("  sub r1,r4,r10 ;@ r1 = Old PC\n");\r
-    ot("  mov r1,r1,lsl #8\n");\r
     ot("  ldr r0,[r7,#0x3c]\n");\r
-    ot("  mov r1,r1,asr #8\n");\r
+    ot("  sub r1,r4,r10 ;@ r1 = Old PC\n");\r
+//    ot("  mov r1,r1,lsl #8\n");\r
+//    ot("  mov r1,r1,asr #8\n");\r
     ot(";@ Push r1 onto stack\n");\r
     ot("  sub r0,r0,#4 ;@ Predecrement A7\n");\r
     ot("  str r0,[r7,#0x3c] ;@ Save A7\n");\r
@@ -438,11 +438,11 @@ int OpBranch(int op)
   if (cc==1)\r
   {\r
     ot(";@ Bsr - remember old PC\n");\r
+    ot("  ldr r2,[r7,#0x3c]\n");\r
     ot("  sub r1,r4,r10 ;@ r1 = Old PC\n");\r
     if (size) ot("  add r1,r1,#%d\n",1<<size);\r
-    ot("  mov r1,r1, lsl #8\n");\r
-    ot("  ldr r2,[r7,#0x3c]\n");\r
-    ot("  mov r1,r1, asr #8\n");\r
+//    ot("  mov r1,r1, lsl #8\n");\r
+//    ot("  mov r1,r1, asr #8\n");\r
     ot("\n");\r
     ot(";@ Push r1 onto stack\n");\r
     ot("  sub r0,r2,#4 ;@ Predecrement A7\n");\r