X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2FCyclone%2FOpBranch.cpp;h=63569da199b82b39bfcdadee16fc1019f36974d4;hb=e743be2070a13d14cae39a55b815b62b0edb6776;hp=0a2b3ecbfece213f8ebd89a127c761b600d017ea;hpb=449ecf9257636348c23bf78bf502c424a48c4201;p=picodrive.git diff --git a/cpu/Cyclone/OpBranch.cpp b/cpu/Cyclone/OpBranch.cpp index 0a2b3ec..63569da 100644 --- a/cpu/Cyclone/OpBranch.cpp +++ b/cpu/Cyclone/OpBranch.cpp @@ -5,10 +5,14 @@ static void CheckPc(void) { #if USE_CHECKPC_CALLBACK + #ifdef MEMHANDLERS_DIRECT_PREFIX + ot(" bl %scheckpc ;@ Call checkpc()\n", MEMHANDLERS_DIRECT_PREFIX); + #else ot(";@ Check Memory Base+pc\n"); ot(" mov lr,pc\n"); ot(" ldr pc,[r7,#0x64] ;@ Call checkpc()\n"); ot("\n"); + #endif #endif } @@ -47,7 +51,7 @@ static void PopSr(int high) OpRegToFlags(high); } -// Pop PC - assumes r11=Memory Base - trashes r0-r3 +// Pop PC - trashes r0-r3 static void PopPc() { ot(";@ Pop PC:\n"); @@ -55,7 +59,8 @@ static void PopPc() ot(" add r1,r0,#4 ;@ Postincrement A7\n"); ot(" str r1,[r7,#0x3c] ;@ Save A7\n"); MemHandler(0,2); - ot(" add r0,r0,r11 ;@ Memory Base+PC\n"); + ot(" ldr r1,[r7,#0x60] ;@ Get Memory base\n"); + ot(" add r0,r0,r1 ;@ Memory Base+PC\n"); ot("\n"); CheckPc(); #if EMULATE_ADDRESS_ERRORS_JUMP @@ -175,7 +180,6 @@ int Op4E70(int op) case 3: // rte OpStart(op,0x10,0,0,1); Cycles=20; PopSr(1); - ot(" ldr r11,[r7,#0x60] ;@ Get Memory base\n"); PopPc(); ot(" ldr r1,[r7,#0x44] ;@ reload SR high\n"); SuperChange(op,1); @@ -195,7 +199,6 @@ int Op4E70(int op) case 5: // rts OpStart(op,0x10); Cycles=16; - ot(" ldr r11,[r7,#0x60] ;@ Get Memory base\n"); PopPc(); #if EMULATE_ADDRESS_ERRORS_JUMP ot(" tst r4,#1 ;@ address error?\n"); @@ -217,7 +220,6 @@ int Op4E70(int op) case 7: // rtr OpStart(op,0x10); Cycles=20; PopSr(0); - ot(" ldr r11,[r7,#0x60] ;@ Get Memory base\n"); PopPc(); #if EMULATE_ADDRESS_ERRORS_JUMP ot(" tst r4,#1 ;@ address error?\n"); @@ -290,7 +292,7 @@ int OpJsr(int op) // --------------------- Opcodes 0x50c8+ --------------------- // ARM version of 68000 condition codes: -static char *Cond[16]= +static const char * const Cond[16]= { "", "", "hi","ls","cc","cs","ne","eq", "vc","vs","pl","mi","ge","lt","gt","le" @@ -404,7 +406,7 @@ int OpBranch(int op) int size=0,use=0,checkpc=0; int offset=0; int cc=0; - char *asr_r11=""; + const char *asr_r11=""; offset=(char)(op&0xff); cc=(op>>8)&15; @@ -502,7 +504,7 @@ int OpBranch(int op) OpEnd(size?0x10:0); // since all "DontBranch" code is same for every size, output only once - if (cc>=2&&(op&0xff00)==0x6200) + if (cc>=2&&(op&0xff00)==0x6700) { ot("BccDontBranch%i%s\n", 8<