X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2FDrZ80%2Fdrz80.s;h=b92b2c2dff79a3fa50c7053f899c3c2aa7436924;hb=868cc0cc8f2fc6cfd278b15e8dbd042188de53ca;hp=08f8a19eae65df792ad12405614b05141de1e882;hpb=460603fa8119a41192ebdc7012d120f6263a2bce;p=picodrive.git diff --git a/cpu/DrZ80/drz80.s b/cpu/DrZ80/drz80.s index 08f8a19..b92b2c2 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 @@ -98,6 +97,7 @@ DrZ80Ver: .long 0x0001 .equ Z80_IF1, 1<<0 .equ Z80_IF2, 1<<1 .equ Z80_HALT, 1<<2 + .equ Z80_NMI, 1<<3 ;@--------------------------------------- @@ -206,12 +206,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 +385,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<