Browse Source

ecb-sbc-v2 ecb-zp ctc timer support

pull/60/head
b1ackmai1er 6 years ago
parent
commit
7917a0143a
  1. 1
      Source/HBIOS/cfg_sbc.asm
  2. 67
      Source/HBIOS/hbios.asm

1
Source/HBIOS/cfg_sbc.asm

@ -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

67
Source/HBIOS/hbios.asm

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

Loading…
Cancel
Save