Browse Source

Merge pull request #60 from b1ackmai1er/master

CTC timer support for ECB-SBC-V2 with ECB-Zilog-Peripherals board
pull/80/head
Wayne Warthen 6 years ago
committed by GitHub
parent
commit
ae05aa499e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      Source/Forth/camel80.azm
  2. 4
      Source/Forth/camel80h.azm
  3. 1
      Source/HBIOS/cfg_sbc.asm
  4. 20
      Source/HBIOS/ctcstub.asm
  5. 69
      Source/HBIOS/hbios.asm
  6. 4
      Source/Images/ReadMe.txt

8
Source/Forth/camel80.azm

@ -1,5 +1,5 @@
CIODEV_CONSOLE EQU 0D0h
CIOIN EQU 00h ; CHARACTER INPPUT
CIOIN EQU 00h ; CHARACTER INPUT
CIOOUT EQU 01h ; CHARACTER OUTPUT
CIOIST EQU 02h ; CHARACTER INPUT STATUS
BID_BOOT EQU 00h
@ -35,7 +35,7 @@ FTH_LOC EQU 0200h
;
; ===============================================
; CAMEL80.AZM: Code Primitives
; Source code is for the Z80MR macro assembler.
; Source code is for the ZSM assembler.
; Forth words are documented as follows:
;x NAME stack -- stack description
; where x=C for ANS Forth Core words, X for ANS
@ -126,12 +126,12 @@ nexthl MACRO
ENDM
; RESET AND INTERRUPT VECTORS ===================
; ...are not used in the CP/M implementation
; ...are not used in the ROMWBW implementation
; Instead, we have the...
; RELOCATED ENTRY POINT
.PHASE 0200H
.PHASE FTH_LOC
reset: ld hl,0FDFFh ; HBIOS address, rounded down
ld l,0 ; = end of avail.mem (EM)

4
Source/Forth/camel80h.azm

@ -23,7 +23,7 @@
;
; ===============================================
; CAMEL80H.AZM: High Level Words
; Source code is for the Z80MR macro assembler.
; Source code is for the ZSM assembler.
; Forth words are documented as follows:
;* NAME stack -- stack description
; Word names in upper case are from the ANS
@ -1023,5 +1023,5 @@ DOTS2: DW EXIT
DB 55,'Z80 CamelForth v1.02 25 Jan 1995, ROMWBW 19 Oct 2019'
DB 0dh,0ah
DW TYPE,ABORT ; ABORT never returns
; DON'T FORGET TO UPDATE THE BYTE COUNT IF YOU CHANCGE THE SIZE OF THE BOOT MSG
; DON'T FORGET TO UPDATE THE BYTE COUNT IF YOU CHANGE THE SIZE OF THE BOOT MSG

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

20
Source/HBIOS/ctcstub.asm

@ -0,0 +1,20 @@
;___CTC________________________________________________________________________________________________________________
;
; Z80 CTC STUB
;
; DISPLAY CONFIGURATION DETAILS
;______________________________________________________________________________________________________________________
;
CTC_INIT: ; MINIMAL INIT
CTC_PRTCFG:
; ANNOUNCE PORT
CALL NEWLINE ; FORMATTING
PRTS("CTC$") ; FORMATTING
; LD A,(IY) ; DEVICE NUM
; CALL PRTDECB ; PRINT DEVICE NUM
PRTS(": IO=0x$") ; FORMATTING
LD A,CTCBASE ; GET BASE PORT
CALL PRTHEXBYTE ; PRINT BASE PORT
;
XOR A
RET

69
Source/HBIOS/hbios.asm

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

4
Source/Images/ReadMe.txt

@ -196,11 +196,11 @@ choice best left to the user.
The simplest way to make a resultant image bootable is to do it from
your running CP/M system. Boot your system using the ROM selection,
then use the COPYSYS command to make the desired drive bootable.
then use the SYSCOPY command to make the desired drive bootable.
You would use a command like the following to make drive C bootable.
| B>COPYSYS C:=CPM.SYS
| B>SYSCOPY C:=CPM.SYS
Notes
-----

Loading…
Cancel
Save