|
|
|
@ -256,6 +256,46 @@ SUPCTS .EQU FALSE ; SUPPRESS CTS DURING HBIOS BOOT |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; PUSH/POP INTERRUPT STATE |
|
|
|
; AF IS DESTROYED IN ALL CASES |
|
|
|
; |
|
|
|
; IF NMOSCPU IS SET, THE INT STATUS BUG WORKAROUND IS USED |
|
|
|
; NMOS Z80 BUG PREVENTS USE OF "LD A,I" TO GATHER IFF2 INTO P/V FLAG |
|
|
|
; SEE http://www.z80.info/zip/ZilogProductSpecsDatabook129-143.pdf |
|
|
|
; |
|
|
|
#IF NMOSCPU |
|
|
|
#DEFINE HB_PUSHINT \ |
|
|
|
#DEFCONT \ XOR A |
|
|
|
#DEFCONT \ PUSH AF |
|
|
|
#DEFCONT \ POP AF |
|
|
|
#DEFCONT \ LD A,I |
|
|
|
#DEFCONT \ JP PE,$+10 |
|
|
|
#DEFCONT \ DEC SP |
|
|
|
#DEFCONT \ DEC SP |
|
|
|
#DEFCONT \ POP AF |
|
|
|
#DEFCONT \ AND A |
|
|
|
#DEFCONT \ JR NZ,$+3 |
|
|
|
#DEFCONT \ SCF |
|
|
|
#DEFCONT \ PUSH AF |
|
|
|
#ELSE |
|
|
|
#DEFINE HB_PUSHINT \ |
|
|
|
#DEFCONT \ LD A,I |
|
|
|
#DEFCONT \ HB_DI |
|
|
|
#DEFCONT \ PUSH AF |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
#IF NMOSCPU |
|
|
|
#DEFINE HB_POPINT \ |
|
|
|
#DEFCONT \ POP AF |
|
|
|
#DEFCONT \ JR NC,$+3 |
|
|
|
#DEFCONT \ EI |
|
|
|
#ELSE |
|
|
|
#DEFINE HB_POPINT \ |
|
|
|
#DEFCONT \ POP AF |
|
|
|
#DEFCONT \ JP PO,$+4 |
|
|
|
#DEFCONT \ EI |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; CONSISTENCY CHECKS |
|
|
|
; |
|
|
|
#IF (INTMODE > 3) |
|
|
|
@ -774,9 +814,7 @@ MM_EZ512_BANK0TO7: |
|
|
|
; |
|
|
|
#IF (INTMODE == 1) |
|
|
|
LD (HBX_MMA),A ; SAVE ACCUM |
|
|
|
LD A,I ; GET INT CTL REG |
|
|
|
HB_DI ; DISABLE INTS |
|
|
|
PUSH AF ; SAVE INT CTL REG |
|
|
|
HB_PUSHINT |
|
|
|
LD A,(HBX_MMA) ; RESTORE ACCUM |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
@ -795,9 +833,7 @@ HBX_ROM: |
|
|
|
HBX_RAMX: |
|
|
|
; |
|
|
|
#IF (INTMODE == 1) |
|
|
|
POP AF ; RESTORE INT CTL REG |
|
|
|
JP PO,$+4 ; WERE INTS DISABLED AT ENTRY? |
|
|
|
EI ; *** DO NOT USE HB_EI HERE *** |
|
|
|
HB_POPINT |
|
|
|
LD A,(HBX_MMA) ; RESTORE INCOMING ACCUM |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
@ -1009,7 +1045,8 @@ HBX_BNKCPY: |
|
|
|
IOPRSAV .DW 0 ; TEMP STORAGE FOR IOPR |
|
|
|
; |
|
|
|
#ELSE |
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
#IF (INTMODE == 1) |
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
PUSH HL |
|
|
|
PUSH BC |
|
|
|
LD C,Z280_MSR |
|
|
|
@ -1017,10 +1054,9 @@ IOPRSAV .DW 0 ; TEMP STORAGE FOR IOPR |
|
|
|
POP BC |
|
|
|
EX (SP),HL |
|
|
|
HB_DI |
|
|
|
#ELSE |
|
|
|
LD A,I |
|
|
|
HB_DI |
|
|
|
PUSH AF |
|
|
|
#ELSE |
|
|
|
HB_PUSHINT |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
LD (HBX_BC_SP),SP ; PUT STACK |
|
|
|
LD SP,HBX_TMPSTK ; ... IN HI MEM |
|
|
|
@ -1051,17 +1087,17 @@ HBX_BC_LAST: |
|
|
|
|
|
|
|
LD SP,$FFFF ; RESTORE STACK |
|
|
|
HBX_BC_SP .EQU $ - 2 ; ... TO ORIGINAL VALUE |
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
#IF (INTMODE == 1) |
|
|
|
#IF (CPUFAM == CPU_Z280) |
|
|
|
EX (SP),HL ; SAVE HL, RECOVER MSR |
|
|
|
PUSH BC ; SAVE BC |
|
|
|
LD C,Z280_MSR |
|
|
|
LDCTL (C),HL |
|
|
|
POP BC ; RECOVER BC |
|
|
|
POP HL ; RECOVER HL |
|
|
|
#ELSE |
|
|
|
POP AF |
|
|
|
JP PO,$+4 |
|
|
|
EI ; *** DO NOT USE HB_EI HERE *** |
|
|
|
#ELSE |
|
|
|
HB_POPINT |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -6631,9 +6667,7 @@ SYS_PEEK: |
|
|
|
PUSH IY |
|
|
|
HB_DI |
|
|
|
#ELSE |
|
|
|
LD A,I ; SAVE THE INTERRUPT STATUS |
|
|
|
DI ; COPY IFF2 TO P/V FLAG |
|
|
|
PUSH AF |
|
|
|
HB_PUSHINT |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
CALL HBX_PEEK ; IMPLEMENTED IN PROXY |
|
|
|
@ -6644,9 +6678,7 @@ SYS_PEEK: |
|
|
|
LDCTL (C),IY |
|
|
|
POP IY |
|
|
|
#ELSE |
|
|
|
POP AF ; RECALL INITIAL INTERRUPT STATUS |
|
|
|
JP PO,$+4 ; RETURN TO INITIAL STATE |
|
|
|
EI ; *** DO NOT USE HB_EI HERE *** |
|
|
|
HB_POPINT |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
XOR A |
|
|
|
@ -6672,9 +6704,7 @@ SYS_POKE: |
|
|
|
PUSH IY |
|
|
|
HB_DI |
|
|
|
#ELSE |
|
|
|
LD A,I ; SAVE THE INTERRUPT STATUS |
|
|
|
HB_DI ; COPY IFF2 TO P/V FLAG |
|
|
|
PUSH AF |
|
|
|
HB_PUSHINT |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
CALL HBX_POKE ; IMPLEMENTED IN PROXY |
|
|
|
@ -6685,9 +6715,7 @@ SYS_POKE: |
|
|
|
LDCTL (C),IY |
|
|
|
POP IY |
|
|
|
#ELSE |
|
|
|
POP AF ; RECALL INITIAL INTERRUPT STATUS |
|
|
|
JP PO,$+4 ; RETURN TO INITIAL STATE |
|
|
|
EI ; *** DO NOT USE HB_EI HERE *** |
|
|
|
HB_POPINT |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
XOR A |
|
|
|
|