From 85adb811bbe39486e822715691325691065cf512 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 22 Jan 2022 17:15:07 -0800 Subject: [PATCH] Add CTC Hardware Detection --- Source/HBIOS/Config/MBC_std.asm | 2 - Source/HBIOS/cfg_mbc.asm | 2 +- Source/HBIOS/ctc.asm | 70 ++++++++++++++++++++++++++++----- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 5 files changed, 64 insertions(+), 14 deletions(-) diff --git a/Source/HBIOS/Config/MBC_std.asm b/Source/HBIOS/Config/MBC_std.asm index ce2106b2..8d9fec06 100644 --- a/Source/HBIOS/Config/MBC_std.asm +++ b/Source/HBIOS/Config/MBC_std.asm @@ -37,5 +37,3 @@ PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) ; DSKYENABLE .SET FALSE ; ENABLES DSKY DSKYMODE .SET DSKYMODE_NG ; DSKY VERSION: DSKYMODE_[V1|NG] -; -CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index ef403af0..08547480 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -41,7 +41,7 @@ RTCIO .EQU $70 ; RTC LATCH REGISTER ADR KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS ; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT +CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS CTCTIMER .EQU TRUE ; ENABLE CTC PERIODIC TIMER diff --git a/Source/HBIOS/ctc.asm b/Source/HBIOS/ctc.asm index b7be79e6..9d0d69f7 100644 --- a/Source/HBIOS/ctc.asm +++ b/Source/HBIOS/ctc.asm @@ -19,17 +19,27 @@ CTC_TIMCFG .EQU %11010111 ; CTC TIMER CHANNEL CONFIG ; |+-------- COUNTER MODE ; +--------- INTERRUPT ENABLE ; -#IF (CTCTIMER) +#IF (INTMODE != 2) + .ECHO "*** WARNING: CTC TIMER DISABLED -- INTMODE 2 REQUIRED!!!\n" +#ENDIF +; +#IF (CTCTIMER & (INTMODE == 2)) +; + #IF (INT_CTC0A % 4) + + .ECHO INT_CTC0A + .ECHO "\n" + .ECHO (INT_CTC0A % 4) + .ECHO "\n" + + .ECHO "*** ERROR: CTC BASE VECTOR NOT /4 ALIGNED!!!\n" + !!! ; FORCE AN ASSEMBLY ERROR + #ENDIF ; ; ONLY IM2 IMPLEMENTED BELOW. I DON'T SEE ANY REASONABLE WAY TO ; IMPLEMENT AN IM1 TIMER BECAUSE THE CTC PROVIDES NO WAY TO ; DETERMINE IF IT WAS THE CAUSE OF AN INTERRUPT OR A WAY TO ; DETERMINE WHICH CHANNEL CAUSED AN INTERRUPT. -; - #IF (INTMODE != 2) - .ECHO "*** ERROR: CTC REQUIRES INTMODE 2!!!\n" - !!! ; FORCE AN ASSEMBLY ERROR - #ENDIF ; CTC_PREIO .EQU CTCBASE + CTCPRECH CTC_SCLIO .EQU CTCBASE + CTCTIMCH @@ -82,6 +92,9 @@ CTCTIVT .EQU INT_CTC0A + CTCTIMCH ; ; CTC_PREINIT: + CALL CTC_DETECT ; DO WE HAVE ONE? + LD (CTC_EXIST),A ; SAVE IT + RET NZ ; ABORT IF NONE ; ; RESET ALL CTC CHANNELS LD B,4 ; 4 CHANNELS @@ -92,7 +105,7 @@ CTC_PREINIT1: INC C ; NEXT CHANNEL PORT DJNZ CTC_PREINIT1 ; -#IF (CTCTIMER) +#IF (CTCTIMER & (INTMODE == 2)) ; SETUP TIMER INTERRUPT IVT SLOT LD HL,HB_TIMINT ; TIMER INT HANDLER ADR LD (IVT(CTCTIVT)),HL ; IVT ENTRY FOR TIMER CHANNEL @@ -136,9 +149,20 @@ CTC_PRTCFG: LD A,CTCBASE ; GET BASE PORT CALL PRTHEXBYTE ; PRINT BASE PORT ; -#IF (CTCTIMER) + LD A,(CTC_EXIST) ; IS IT THERE? + OR A ; 0 MEANS YES + JR Z,CTC_PRTCFG1 ; IF SO, CONTINUE +; + ; NOTIFY NO CTC HARDWARE + PRTS(" NOT PRESENT$") + OR $FF + RET +; +CTC_PRTCFG1: ; - PRTS(" MODE=$") ; FORMATTING +#IF (CTCTIMER & (INTMODE == 2)) +; + PRTS(" TIMER MODE=$") ; FORMATTING #IF (CTCMODE == CTCMODE_CTR) PRTS("CTR$") #ENDIF @@ -175,3 +199,31 @@ CTC_PRTCFG: ; XOR A RET +; +; +; +CTC_DETECT: + LD A,CTC_TIM256CFG + OUT (CTCBASE),A + XOR A + OUT (CTCBASE),A + ; CTC SHOULD NOW BE RUNNING WITH TIME CONSTANT 0 + LD A,CTC_TIM256CFG ; RESET + OUT (CTCBASE),A + IN A,(CTCBASE) ; SHOULD READ 0 NOW + CP 0 + JR NZ,CTC_NO + LD A,$FF ; TIME CONSTANT $FF + OUT (CTCBASE),A + IN A,(CTCBASE) ; SHOULD NOT BE 0 NOW + CP 0 + JR Z,CTC_NO + XOR A + RET +CTC_NO: + OR $FF + RET +; +; +; +CTC_EXIST .DB $FF diff --git a/Source/ver.inc b/Source/ver.inc index b3061a4a..1176d907 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.147" +#DEFINE BIOSVER "3.1.1-pre.148" diff --git a/Source/ver.lib b/Source/ver.lib index ade54c98..496282d8 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.147" + db "3.1.1-pre.148" endm