|
|
|
@ -1071,16 +1071,64 @@ 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 ENTRIES 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 |
|
|
|
; JUMPER X5 PIN 3 (PHI_X) TO X4 PIN 7 (CTC_TG2) |
|
|
|
; JUMPER X4 PIN 8 (CTC_ZC2) TO X4 PIN 9 (CTC_TG3) |
|
|
|
; 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 +1788,9 @@ HB_INITTBL: |
|
|
|
#IF (UFENABLE) |
|
|
|
.DW UF_INIT |
|
|
|
#ENDIF |
|
|
|
#IF (CTCENABLE) |
|
|
|
.DW CTC_INIT |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) |
|
|
|
; |
|
|
|
@ -3197,6 +3248,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" |
|
|
|
|