From 0d6c7922822d1f8c78f8a58daea434ad625fd37c Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 13 Feb 2021 17:14:59 -0800 Subject: [PATCH] Z280 Tweaks - Interrupt routines that change the Z280 I/O page register now save and restore the original value. --- Source/HBIOS/hbios.asm | 10 ++++++---- Source/HBIOS/z2u.asm | 34 +++++++++++++++++++++++++++++----- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 458973df..5c7828f9 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3565,9 +3565,11 @@ Z280_TIMINT: ; CALL PRIMARY TIMER LOGIC CALL HB_TIMINT ; - ; SELECT I/O PAGE $FE - LD L,$FE ; COUNTER/TIMER I/O PAGE + ; SELECT I/O PAGE $FE (SAVING PREVIOUS VALUE) LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER + .DB $ED,$66 ; LDCTL HL,(C) ; GET CURRENT I/O PAGE + PUSH HL ; SAVE IT + LD L,$FE ; NEW COUNTER/TIMER I/O PAGE .DB $ED,$6E ; LDCTL (C),HL ; ; CLEAR END OF COUNT CONDITION TO RESET INTERRUPT @@ -3575,9 +3577,9 @@ Z280_TIMINT: RES 1,A ; CLEAR CC OUT (Z280_CT0_CMDST),A ; SET C/T 0 ; - ; RESTORE I/O PAGE TO $00 - LD L,$00 ; NORMAL I/O REG IS $00 + ; RESTORE I/O PAGE LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER + POP HL ; RECOVER ORIGINAL I/O PAGE .DB $ED,$6E ; LDCTL (C),HL ; ; RESTORE REGISTERS diff --git a/Source/HBIOS/z2u.asm b/Source/HBIOS/z2u.asm index 040ab5cd..40032c1b 100644 --- a/Source/HBIOS/z2u.asm +++ b/Source/HBIOS/z2u.asm @@ -171,9 +171,11 @@ Z2U_INT: PUSH DE PUSH HL ; - ; START BY SELECTING I/O PAGE $FE - LD L,$FE ; Z280 UART REGISTERS AT I/O PAGE $FE + ; START BY SELECTING I/O PAGE $FE (SAVING PREVIOUS VALUE) LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER + .DB $ED,$66 ; LDCTL HL,(C) ; GET CURRENT I/O PAGE + PUSH HL ; SAVE IT + LD L,$FE ; NEW COUNTER/TIMER I/O PAGE .DB $ED,$6E ; LDCTL (C),HL ; ; CHECK TO SEE IF SOMETHING IS ACTUALLY THERE @@ -228,9 +230,9 @@ Z2U_INTRCV3: JR NZ,Z2U_INTRCV1 ; Z2U_INTRCV4: - ; RESTORE I/O PAGE TO $00 - LD L,$00 ; NORMAL I/O REG IS $00 + ; RESTORE I/O PAGE LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER + POP HL ; RECOVER ORIGINAL I/O PAGE .DB $ED,$6E ; LDCTL (C),HL ; ; RESTORE REGISTERS @@ -351,7 +353,6 @@ Z2U_OUT: #IF (INTMODE < 3) ; Z2U_IST: -; ; START BY SELECTING I/O PAGE $FE LD L,$FE ; Z280 UART REGISTERS AT I/O PAGE $FE LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER @@ -368,6 +369,7 @@ Z2U_IST: ; OR A ; SET FLAGS JP Z,CIO_IDLE ; NOT READY, RETURN VIA IDLE PROCESSING + RET ; #ELSE @@ -421,6 +423,7 @@ Z2U_INITDEV: Z2U_INITSAFE: LD A,%11000010 ; 8N0, DIV 16, NO C/T LD (Z2U_CFGREG),A ; SAVE IT + LD HL,1 ; C/T DIV 1 JR Z2U_INITDEV8 ; DO IT ; Z2U_INITDEVX: @@ -436,6 +439,27 @@ Z2U_INITDEVX: ; Z2U_INITDEV1: LD (Z2U_NEWCFG),DE ; SAVE NEW CONFIG + +; +; HACK FOR TESTING!!! +; +#IF FALSE + ;LD A,%11000000 ; 8N0, DIV 1, NO C/T + LD A,%11000010 ; 8N0, DIV 16, NO C/T + ;LD A,%11000100 ; 8N0, DIV 32, NO C/T + ;LD A,%11000110 ; 8N0, DIV 64, NO C/T + LD (Z2U_CFGREG),A ; SAVE UART CONFIG VALUE + ;LD HL,1 ; 24MHZ / 8 / 1 + LD HL,2 ; 24MHZ / 8 / 2 + ;LD HL,3 ; 24MHZ / 8 / 5 + ;LD HL,15 ; 24MHZ / 8 / 15 + ;LD HL,26 ; 24MHZ / 8 / 26 = 115384 BAUD (~115200) + ;LD HL,52 ; 24MHZ / 8 / 52 = 57692 BAUD (~57600) + JP Z2U_INITDEV8 ; SKIP AHEAD TO IMPLMENT IT +#ENDIF +; +; +; LD A,D ; HIWORD OF CONFIG AND $1F ; ISOLATE BAUD RATE PUSH AF diff --git a/Source/ver.inc b/Source/ver.inc index a06edde1..cd26a4ba 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.45" +#DEFINE BIOSVER "3.1.1-pre.46" diff --git a/Source/ver.lib b/Source/ver.lib index d9f12158..0d0daaa7 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.45" + db "3.1.1-pre.46" endm