mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:13:13 -06:00
ecb-sbc-v2 ecb-zp ctc timer support
This commit is contained in:
@@ -38,6 +38,7 @@ KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT
|
||||
KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS
|
||||
;
|
||||
CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT
|
||||
CTCBASE .EQU $80 ; CTC BASE FOR ECB-ZILOG-PERIPHERALS
|
||||
;
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
|
||||
@@ -1071,16 +1071,62 @@ HB_CPU2:
|
||||
;
|
||||
#IF (HTIMENABLE) ; SIMH TIMER
|
||||
;
|
||||
#IF (INTMODE == 1)
|
||||
#IF (INTMODE == 1)
|
||||
LD HL,HB_TIMINT
|
||||
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
|
||||
#ENDIF
|
||||
|
||||
#ENDIF
|
||||
#IF (CTCENABLE)
|
||||
#IF (INTMODE == 2)
|
||||
;
|
||||
#IF (INTMODE == 2)
|
||||
;LD HL,HB_TIMINT
|
||||
;LD (HBX_IVT),HL
|
||||
#ENDIF
|
||||
; TIMER INTERRUPT IS ON CTCD, VECTOR IS FOURTH IVT SLOT
|
||||
LD HL,HB_TIMINT ; TIMER INT HANDLER ADR
|
||||
LD (IVT(INT_CTC0D)),HL ; IVT ENTRY FOR CTC0D
|
||||
;
|
||||
; CTC USES 4 CONSECUTIVE VECTOR POSITIONS, ONE FOR
|
||||
; EACH CHANNEL. BELOW WE SET THE BASE VECTOR TO THE
|
||||
; START OF THE IVT, SO THE FIRST FOUR ENTIRES OF THE
|
||||
; IVT CORRESPOND TO CTC CHANNELS A-D
|
||||
LD A,0
|
||||
OUT (CTCA),A ; SETUP CTC BASE INT VECTOR
|
||||
;
|
||||
; ASSUMING ECB-ZP WITH 4.9125MHz XTAL AND / 8 DIVIDER
|
||||
; JUMPER X5 15-16, 9-11, X5 PIN 3 (PHI_X) TO X4 PIN 7 (CTC_TG2)
|
||||
; CONFIGURE CHANNEL D FOR 50HZ PERIODIC INTERRUPTS
|
||||
; CTC CLK = 614,400Hz
|
||||
; CTCD TIME CONSTANT = 48
|
||||
; INT FREQ IS CTC CLK / CTCC TC / CTCD TC
|
||||
; WHICH IS 614,400HZ / 256 / 48 = 50HZ
|
||||
LD A,%01010111 ; CTCC CONTROL WORD VALUE
|
||||
; |||||||+-- 1=CONTROL WORD FLAG
|
||||
; ||||||+--- 1=SOFTWARE RESET
|
||||
; |||||+---- 1=TIME CONSTANT FOLLOWS
|
||||
; ||||+----- 0=AUTO TRIGGER WHEN TIME CONST LOADED
|
||||
; |||+------ 1=RISING EDGE TRIGGER
|
||||
; ||+------- 1=PRESCALER OF 16 (NOT USED)
|
||||
; |+-------- 1=COUNTER MODE
|
||||
; +--------- 0=NO INTERRUPTS
|
||||
OUT (CTCC),A ; SETUP CTCC
|
||||
LD A,0 ; CTCC TIMER CONSTANT = 256, 0 MEANS 256
|
||||
OUT (CTCC),A ; SETUP CTCC TIMER CONSTANT
|
||||
LD A,%11010111 ; CTCD CONTROL WORD VALUE
|
||||
; |||||||+-- 1=CONTROL WORD FLAG
|
||||
; ||||||+--- 1=SOFTWARE RESET
|
||||
; |||||+---- 1=TIME CONSTANT FOLLOWS
|
||||
; ||||+----- 0=AUTO TRIGGER WHEN TIME CONST LOADED
|
||||
; |||+------ 1=RISING EDGE TRIGGER
|
||||
; ||+------- 1=PRESCALER OF 16 (NOT USED)
|
||||
; |+-------- 1=COUNTER MODE
|
||||
; +--------- 1=ENABLE INTERRUPTS
|
||||
OUT (CTCD),A ; SETUP CTCD
|
||||
LD A,48 ; CTCD TIMER CONSTANT = 48
|
||||
OUT (CTCD),A ; SETUP CTCD TIMER CONSTANT
|
||||
|
||||
#ELSE
|
||||
.ECHO "*** ERROR: CTC REQUIRES INTMODE 2!!!\n"
|
||||
!!! ; FORCE AN ASSEMBLY ERROR
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
#ENDIF
|
||||
@@ -1740,6 +1786,9 @@ HB_INITTBL:
|
||||
#IF (UFENABLE)
|
||||
.DW UF_INIT
|
||||
#ENDIF
|
||||
#IF (CTCENABLE)
|
||||
.DW CTC_INIT
|
||||
#ENDIF
|
||||
;
|
||||
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
|
||||
;
|
||||
@@ -3197,6 +3246,14 @@ SIZ_UF .EQU $ - ORG_UF
|
||||
.ECHO SIZ_UF
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
#IF (CTCENABLE)
|
||||
ORG_CTC .EQU $
|
||||
#INCLUDE "ctcstub.asm"
|
||||
SIZ_CTC .EQU $ - ORG_CTC
|
||||
.ECHO "CTC occupies "
|
||||
.ECHO SIZ_CTC
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
;
|
||||
#DEFINE USEDELAY
|
||||
#INCLUDE "util.asm"
|
||||
|
||||
Reference in New Issue
Block a user