Browse Source

Add CTC Hardware Detection

pull/283/head
Wayne Warthen 4 years ago
parent
commit
85adb811bb
  1. 2
      Source/HBIOS/Config/MBC_std.asm
  2. 2
      Source/HBIOS/cfg_mbc.asm
  3. 70
      Source/HBIOS/ctc.asm
  4. 2
      Source/ver.inc
  5. 2
      Source/ver.lib

2
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

2
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

70
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

2
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"

2
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

Loading…
Cancel
Save