X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2FDrZ80%2Fdrz80.s;h=08f8a19eae65df792ad12405614b05141de1e882;hb=6ccf5504a8feff61b89ceac71b669e7c5218ca8e;hp=5445ffd08cab973552e071cfdbddd40487006c8e;hpb=ee05564fc7644a035ceeedba61975e46ce84af48;p=picodrive.git diff --git a/cpu/DrZ80/drz80.s b/cpu/DrZ80/drz80.s index 5445ffd..08f8a19 100644 --- a/cpu/DrZ80/drz80.s +++ b/cpu/DrZ80/drz80.s @@ -14,12 +14,12 @@ .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 UPDATE_CONTEXT, 0 - .equiv DRZ80_FOR_PICODRIVE, 1 .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 @@ -144,7 +144,7 @@ z80_xmap_write8_handler: @ data, addr, func z80_xmap_read16: @ addr @ check if we cross bank boundary add r1,r0,#1 - eor r1,r0,r0 + eor r1,r1,r0 tst r1,#1< r1 .if FAST_Z80SP -.if DRZ80_FOR_PICODRIVE - @ notaz: try to protect against stack overflows, which tend to happen in Picodrive because of poor timing - ldr r0,[cpucontext,#z80sp_base] - cmp z80sp,r0 - addle z80sp,z80sp,#0x2000 - mov r1,\reg, lsr #8 - strb r1,[z80sp,#-1]! - cmp z80sp,r0 - addle z80sp,z80sp,#0x2000 - strb \reg,[z80sp,#-1]! -.else +.if DRZ80_XMAP + stack_check +.endif mov r1,\reg, lsr #8 strb r1,[z80sp,#-1]! strb \reg,[z80sp,#-1]! -.endif .else mov r0,\reg sub z80sp,z80sp,#2 @@ -779,22 +780,13 @@ z80_xmap_write16: @ data, addr .macro opPUSHreg reg .if FAST_Z80SP -.if DRZ80_FOR_PICODRIVE - ldr r0,[cpucontext,#z80sp_base] - cmp z80sp,r0 - addle z80sp,z80sp,#0x2000 - mov r1,\reg, lsr #24 - strb r1,[z80sp,#-1]! - cmp z80sp,r0 - addle z80sp,z80sp,#0x2000 - mov r1,\reg, lsr #16 - strb r1,[z80sp,#-1]! -.else +.if DRZ80_XMAP + stack_check +.endif mov r1,\reg, lsr #24 strb r1,[z80sp,#-1]! mov r1,\reg, lsr #16 strb r1,[z80sp,#-1]! -.endif .else mov r0,\reg,lsr #16 sub z80sp,z80sp,#2