Browse Source

Merge pull request #100 from feilipu/master

hbios - wrap hbx_bnkcpy hbx_peek hbx_poke in di/ei
pull/109/head
Wayne Warthen 6 years ago
committed by GitHub
parent
commit
995bb335b8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 59
      Source/HBIOS/hbios.asm

59
Source/HBIOS/hbios.asm

@ -383,7 +383,7 @@ HBX_BNKSEL1:
; Copy Data - Possibly between banks. This resembles CP/M 3, but
; usage of the HL and DE registers is reversed.
; Caller MUST preset HBX_SRCBNK and HBX_DSTBNK.
; Caller MUST disable ints if IM1 active
; IM1/IM2 interrupts are disabled during HBX_BNKCPY.
; Enter:
; HL = Source Address
; DE = Destination Address
@ -394,6 +394,11 @@ HBX_BNKSEL1:
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
HBX_BNKCPY:
#IF (INTMODE > 0)
LD A,I
DI
PUSH AF
#ENDIF
LD (HBX_BC_SP),SP ; PUT STACK
LD SP,HBX_TMPSTK ; ... IN HI MEM
@ -423,6 +428,11 @@ HBX_BC_LAST:
LD SP,$FFFF ; RESTORE STACK
HBX_BC_SP .EQU $ - 2 ; ... TO ORIGINAL VALUE
#IF (INTMODE > 0)
POP AF
JP PO,$+4
EI
#ENDIF
RET
;
HBX_BC_ITER:
@ -472,9 +482,14 @@ HBX_TGTADR .EQU $ + 1
;
; PEEK & POKE ROUTINES
; ADDRESS IN HL, BANK IN D, VALUE IN/OUT IN E, A IS TRASHED
; CALLER MUST DISABLE INTS IF IM1 AND ACCESSING PAGE W/O IM1 INT VECTOR
; IM1/IM2 INTERRUPTS ARE DISABLED DURING HBX_PEEK & HBX_POKE.
;
HBX_PEEK:
#IF (INTMODE > 0)
LD A,I
DI
PUSH AF
#ENDIF
LD (HBX_PPSP),SP ; SAVE ORIGINAL STACK FRAME
LD SP,HBX_TMPSTK ; USE SMALL TEMP STACK FRAME IN HI MEM
LD A,(HB_CURBNK)
@ -485,6 +500,11 @@ HBX_PEEK:
JR HBX_PPRET
;
HBX_POKE:
#IF (INTMODE > 0)
LD A,I
DI
PUSH AF
#ENDIF
LD (HBX_PPSP),SP ; SAVE ORIGINAL STACK FRAME
LD SP,HBX_TMPSTK ; USE SMALL TEMP STACK FRAME IN HI MEM
LD A,(HB_CURBNK)
@ -498,6 +518,11 @@ HBX_PPRET:
CALL HBX_BNKSEL
LD SP,0 ; RESTORE ORIGINAL STACK FRAME
HBX_PPSP .EQU $ - 2
#IF (INTMODE > 0)
POP AF
JP PO,$+4
EI
#ENDIF
RET
;
; PRIVATE STACK AT END OF HBIOS CODE
@ -2221,17 +2246,7 @@ SYS_BNKCPY:
LD HL,(HB_CPYLEN) ; HL := COPY LEN (SAVED IN SETCPY)
EX (SP),HL ; RESTORE HL & SET (SP) TO COPY LEN
POP BC ; BC := COPY LEN
#IF (INTMODE > 0)
LD A,I
DI
PUSH AF
#ENDIF
CALL HB_BNKCPY
#IF (INTMODE > 0)
POP AF
JP PO,$+4
EI
#ENDIF
XOR A
RET
;
@ -2440,17 +2455,7 @@ SYS_SETSECS:
; RETURN: E=BYTE VALUE
;
SYS_PEEK:
#IF (INTMODE > 0)
LD A,I
DI
PUSH AF
#ENDIF
CALL HBX_PEEK ; IMPLEMENTED IN PROXY
#IF (INTMODE > 0)
POP AF
JP PO,$+4
EI
#ENDIF
XOR A
RET
;
@ -2458,17 +2463,7 @@ SYS_PEEK:
; ENTRY: D=BANK ID, HL=ADDRESS IN HBIOS BANK, E=BYTE VALUE
;
SYS_POKE:
#IF (INTMODE > 0)
LD A,I
DI
PUSH AF
#ENDIF
CALL HBX_POKE ; IMPLEMENTED IN PROXY
#IF (INTMODE > 0)
POP AF
JP PO,$+4
EI
#ENDIF
XOR A
RET
;

Loading…
Cancel
Save