X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2FDrZ80%2Fdrz80.s;h=c2a64df3f9157a50f3187c861ba5331a688884fe;hb=49c8aa78d9e28562f8c5fd0ce90cc7ecde2b2bba;hp=499c8566d5a1db6d53fe689f74a667fae7c4f205;hpb=5d572e52280d099f55f683b343a4c18a521a692a;p=picodrive.git diff --git a/cpu/DrZ80/drz80.s b/cpu/DrZ80/drz80.s index 499c856..c2a64df 100644 --- a/cpu/DrZ80/drz80.s +++ b/cpu/DrZ80/drz80.s @@ -12,14 +12,13 @@ .global DrZ80Ver .equiv INTERRUPT_MODE, 0 ;@0 = Use internal int handler, 1 = Use Mames int handler - .equiv FAST_Z80SP, 1 ;@0 = Use mem functions for stack pointer, 1 = Use direct mem pointer + .equiv FAST_Z80SP, 0 ;@0 = Use mem functions for stack pointer, 1 = Use direct mem pointer .equiv UPDATE_CONTEXT, 0 .equiv DRZ80_XMAP, 1 .equiv DRZ80_XMAP_MORE_INLINE, 1 .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,32 @@ 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} + +.if FAST_Z80SP +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 @ FAST_Z80SP + +.endif @ DRZ80_XMAP .macro fetch cycs @@ -367,15 +387,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<