X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2FDrZ80%2Fdrz80.s;h=edb29dfd06e3f5208632915b471d2753e6323cbc;hb=b4db550e41b2aa277f570d7bff890c8e8ee1831f;hp=499c8566d5a1db6d53fe689f74a667fae7c4f205;hpb=a736af3ecf708652f90e9cb05445d984960a0eec;p=picodrive.git diff --git a/cpu/DrZ80/drz80.s b/cpu/DrZ80/drz80.s index 499c856..edb29df 100644 --- a/cpu/DrZ80/drz80.s +++ b/cpu/DrZ80/drz80.s @@ -19,7 +19,6 @@ .if DRZ80_XMAP .equ Z80_MEM_SHIFT, 13 - ;@ note: stack is locked in single bank that z80sp_base points to .endif .if INTERRUPT_MODE @@ -206,12 +205,30 @@ z80_xmap_rebase_pc: bxcc lr z80_bad_jump: - ldr r0,[cpucontext,#z80_read8] - ldr r0,[r0] - str r0,[cpucontext,#z80pc_base] + stmfd sp!,{r3,r12,lr} + mov lr,pc + ldr pc,[cpucontext,#z80_rebasePC] mov z80pc,r0 - bx lr -.endif + ldmfd sp!,{r3,r12,pc} + +z80_xmap_rebase_sp: + ldr r1,[cpucontext,#z80_read8] + sub r2,r0,#1 + mov r2,r2,lsl #16 + mov r2,r2,lsr #(Z80_MEM_SHIFT+16) + ldr r1,[r1,r2,lsl #2] + movs r1,r1,lsl #1 + strcc r1,[cpucontext,#z80sp_base] + addcc z80sp,r1,r0 + bxcc lr + + stmfd sp!,{r3,r12,lr} + mov lr,pc + ldr pc,[cpucontext,#z80_rebaseSP] + mov z80sp,r0 + ldmfd sp!,{r3,r12,pc} + +.endif @ DRZ80_XMAP .macro fetch cycs @@ -367,15 +384,13 @@ z80_bad_jump: str z80pc,[cpucontext,#z80pc_pointer] .endif .if DRZ80_XMAP - ;@ XXX: SP is locked to single back z80sp_base points to. - ldr r1,[cpucontext,#z80sp_base] - bic r0,r0,#0x7f<