From b45e531127c69b8a2db80aca098393df82bfc484 Mon Sep 17 00:00:00 2001 From: Phillip Stevens Date: Wed, 4 Mar 2020 18:33:19 +1100 Subject: [PATCH 1/2] hbios - wrap hbx_bnkcpy --- Source/HBIOS/hbios.asm | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 8e49d713..7bdab35a 100644 --- a/Source/HBIOS/hbios.asm +++ b/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 +; Interrupts are disabled if IM1/IM2 active. ; 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: @@ -2221,17 +2231,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 ; From f8d0fda1798e3bc4c9a48c3c8a54005f1ab6bdb6 Mon Sep 17 00:00:00 2001 From: Phillip Stevens Date: Wed, 4 Mar 2020 21:18:48 +1100 Subject: [PATCH 2/2] hbios - adjust hbx_peek hbx_poke guards --- Source/HBIOS/hbios.asm | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 7bdab35a..bdeb6fe6 100644 --- a/Source/HBIOS/hbios.asm +++ b/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. -; Interrupts are disabled if IM1/IM2 active. +; IM1/IM2 interrupts are disabled during HBX_BNKCPY. ; Enter: ; HL = Source Address ; DE = Destination Address @@ -482,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) @@ -495,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) @@ -508,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 @@ -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 ;