Browse Source

Merge pull request #16 from wwarthen/master

Resync
pull/49/head
b1ackmai1er 6 years ago
committed by GitHub
parent
commit
fa34bcbea3
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      Doc/ChangeLog.txt
  2. BIN
      Doc/Z180 ASCI Baud Rate Options.pdf
  3. 2
      ReadMe.txt
  4. 2
      Source/CBIOS/ver.inc
  5. BIN
      Source/Doc/Z180 ASCI Baud Rate Options.xlsx
  6. 50
      Source/HBIOS/Config/RCZ80_kio.asm
  7. 3
      Source/HBIOS/cfg_ezz80.asm
  8. 3
      Source/HBIOS/cfg_master.asm
  9. 3
      Source/HBIOS/cfg_mk4.asm
  10. 3
      Source/HBIOS/cfg_n8.asm
  11. 3
      Source/HBIOS/cfg_rcz180.asm
  12. 4
      Source/HBIOS/cfg_rcz80.asm
  13. 3
      Source/HBIOS/cfg_sbc.asm
  14. 3
      Source/HBIOS/cfg_sc126.asm
  15. 3
      Source/HBIOS/cfg_zeta.asm
  16. 3
      Source/HBIOS/cfg_zeta2.asm
  17. 416
      Source/HBIOS/hbios.asm
  18. 2
      Source/HBIOS/ver.inc
  19. BIN
      Source/Images/hd_cpm3/s0/u0/BDOS3.SPR
  20. BIN
      Source/Images/hd_cpm3/s0/u0/BNKBDOS3.SPR
  21. BIN
      Source/Images/hd_cpm3/s0/u0/CCP.COM
  22. BIN
      Source/Images/hd_cpm3/s0/u0/GENCPM.COM
  23. BIN
      Source/Images/hd_cpm3/s0/u0/INITDIR.COM
  24. BIN
      Source/Images/hd_cpm3/s0/u0/R.COM
  25. 39
      Source/Images/hd_cpm3/s0/u0/README.1ST
  26. BIN
      Source/Images/hd_cpm3/s0/u0/RESBDOS3.SPR
  27. BIN
      Source/Images/hd_cpm3/s0/u0/W.COM
  28. 16
      Source/Images/hd_cpm3/s0/u0/WBW.TXT
  29. BIN
      Source/Images/hd_cpm3/s0/u0/ZSID6.COM

1
Doc/ChangeLog.txt

@ -17,6 +17,7 @@ Version 2.9.2
- PMS: Added note playing ability to SPK driver - PMS: Added note playing ability to SPK driver
- WBW: Support disk I/O to any memory bank - WBW: Support disk I/O to any memory bank
- WBW: Fix floppy I/O error on slow CPUs w/ ints active (credit Jorge Rodrigues) - WBW: Fix floppy I/O error on slow CPUs w/ ints active (credit Jorge Rodrigues)
- WBW: Support for KIO chip (based on board by Tom Szolyga)
Version 2.9.1 Version 2.9.1
------------- -------------

BIN
Doc/Z180 ASCI Baud Rate Options.pdf

Binary file not shown.

2
ReadMe.txt

@ -7,7 +7,7 @@
*********************************************************************** ***********************************************************************
Wayne Warthen (wwarthen@gmail.com) Wayne Warthen (wwarthen@gmail.com)
Version 2.9.2-pre.9, 2019-09-06
Version 2.9.2-pre.10, 2019-09-15
https://www.retrobrewcomputers.org/ https://www.retrobrewcomputers.org/
RomWBW is a ROM-based implementation of CP/M-80 2.2 and Z-System for RomWBW is a ROM-based implementation of CP/M-80 2.2 and Z-System for

2
Source/CBIOS/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 9 #DEFINE RMN 9
#DEFINE RUP 2 #DEFINE RUP 2
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "2.9.2-pre.9"
#DEFINE BIOSVER "2.9.2-pre.10"

BIN
Source/Doc/Z180 ASCI Baud Rate Options.xlsx

Binary file not shown.

50
Source/HBIOS/Config/RCZ80_kio.asm

@ -0,0 +1,50 @@
;
;==================================================================================================
; RC2014 Z80 STANDARD CONFIGURATION W/ KIO
;==================================================================================================
;
; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE
; CFG_<PLT>.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS
; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE
; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS.
; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE <PLT>_XXX.ASM AND SPECIFY
; YOUR FILE IN THE BUILD PROCESS.
;
; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM.
; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO
; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON
; SETTINGS.
;
; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE,
; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING
; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS!
;
; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO
; DIRECTORIES ABOVE THIS ONE).
;
#include "cfg_rcz80.asm"
;
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
DEFSERCFG .SET SER_115200_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM)
;
KIOENABLE .SET TRUE ; ENABLE ZILOG KIO SUPPORT
;
CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT
CTCBASE .SET KIOBASE+$04 ; CTC BASE I/O ADDRESS
;
DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
;
ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
SIO0MODE .SET SIOMODE_EZZ80 ; SIO 0: CHIP TYPE: SIOMODE_[RC|SMB|ZP|EZZ80]
SIO0BASE .SET KIOBASE+$08 ; SIO 0: REGISTERS BASE ADR
;
FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|DIDE|N8|DIO3]
;
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
IDEMODE .SET IDEMODE_RC ; IDE: DRIVER MODE: IDEMODE_[DIO|DIDE]
;
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)

3
Source/HBIOS/cfg_ezz80.asm

@ -37,6 +37,9 @@ MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY)
RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR
WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR
; ;
KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT
KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS
;
CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT
CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS
; ;

3
Source/HBIOS/cfg_master.asm

@ -55,6 +55,9 @@ RTCIO .EQU $70 ; RTC LATCH REGISTER ADR
WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR
PPIBASE .EQU $60 ; PRIMARY PARALLEL PORT REGISTERS BASE ADR PPIBASE .EQU $60 ; PRIMARY PARALLEL PORT REGISTERS BASE 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 FALSE ; ENABLE ZILOG CTC SUPPORT
CTCBASE .EQU $20 ; CTC BASE I/O ADDRESS CTCBASE .EQU $20 ; CTC BASE I/O ADDRESS
; ;

3
Source/HBIOS/cfg_mk4.asm

@ -42,6 +42,9 @@ MK4_RTC .EQU $8A ; MK4: RTC LATCH REGISTER ADR
; ;
RTCIO .EQU MK4_RTC ; RTC LATCH REGISTER ADR RTCIO .EQU MK4_RTC ; 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 FALSE ; ENABLE ZILOG CTC SUPPORT
; ;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT

3
Source/HBIOS/cfg_n8.asm

@ -45,6 +45,9 @@ N8_DEFACR .EQU $1B ; N8: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE)
RTCIO .EQU N8_RTC ; RTC LATCH REGISTER ADR RTCIO .EQU N8_RTC ; RTC LATCH REGISTER ADR
PPIBASE .EQU N8_PPI0 ; PRIMARY PARALLEL PORT REGISTERS BASE ADR PPIBASE .EQU N8_PPI0 ; PRIMARY PARALLEL PORT REGISTERS BASE 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 FALSE ; ENABLE ZILOG CTC SUPPORT
; ;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT

3
Source/HBIOS/cfg_rcz180.asm

@ -42,6 +42,9 @@ Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
; ;
RTCIO .EQU $0C ; RTC LATCH REGISTER ADR RTCIO .EQU $0C ; 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 FALSE ; ENABLE ZILOG CTC SUPPORT
; ;
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT

4
Source/HBIOS/cfg_rcz80.asm

@ -36,7 +36,11 @@ MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY)
; ;
RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR RTCIO .EQU $C0 ; 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 FALSE ; ENABLE ZILOG CTC SUPPORT
CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS
; ;
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS

3
Source/HBIOS/cfg_sbc.asm

@ -34,6 +34,9 @@ MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY)
RTCIO .EQU $70 ; RTC LATCH REGISTER ADR RTCIO .EQU $70 ; RTC LATCH REGISTER ADR
PPIBASE .EQU $60 ; PRIMARY PARALLEL PORT REGISTERS BASE ADR PPIBASE .EQU $60 ; PRIMARY PARALLEL PORT REGISTERS BASE 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 FALSE ; ENABLE ZILOG CTC SUPPORT
; ;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT

3
Source/HBIOS/cfg_sc126.asm

@ -37,6 +37,9 @@ Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
; ;
RTCIO .EQU $0C ; RTC LATCH REGISTER ADR RTCIO .EQU $0C ; 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 FALSE ; ENABLE ZILOG CTC SUPPORT
; ;
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT

3
Source/HBIOS/cfg_zeta.asm

@ -34,6 +34,9 @@ MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY)
RTCIO .EQU $70 ; RTC LATCH REGISTER ADR RTCIO .EQU $70 ; RTC LATCH REGISTER ADR
PPIBASE .EQU $60 ; PRIMARY PARALLEL PORT REGISTERS BASE ADR PPIBASE .EQU $60 ; PRIMARY PARALLEL PORT REGISTERS BASE 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 FALSE ; ENABLE ZILOG CTC SUPPORT
; ;
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT

3
Source/HBIOS/cfg_zeta2.asm

@ -37,6 +37,9 @@ MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY)
RTCIO .EQU $70 ; RTC LATCH REGISTER ADR RTCIO .EQU $70 ; RTC LATCH REGISTER ADR
PPIBASE .EQU $60 ; PRIMARY PARALLEL PORT REGISTERS BASE ADR PPIBASE .EQU $60 ; PRIMARY PARALLEL PORT REGISTERS BASE ADR
; ;
KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT
KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS
;
CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT
CTCBASE .EQU $20 ; CTC BASE I/O ADDRESS CTCBASE .EQU $20 ; CTC BASE I/O ADDRESS
; ;

416
Source/HBIOS/hbios.asm

@ -992,6 +992,236 @@ HB_CPU1:
LD A,L LD A,L
LD (HB_CPUTYPE),A LD (HB_CPUTYPE),A
; ;
#IF (KIOENABLE)
LD A,%11111001 ; RESET ALL DEVICES, SET DAISYCHAIN
OUT (KIOBASE+$0E),A ; DO IT
CALL DLY64 ; WAIT A BIT FOR RESET TO COMPLETE
#ENDIF
;
; SETUP INTERRUPT VECTORS, AS APPROPRIATE
;
;#IF (INTMODE == 1)
; ; OVERLAY $0038 WITH JP INT_IM1
; LD A,$C3 ; JP INSTRUCTION
; LD ($0038),A ; INSTALL IT
; LD HL,INT_IM1 ; DESTINATION ADDRESS
; LD ($0039),HL ; INSTALL IT
;#ENDIF
;
#IF (INTMODE == 2)
; SETUP Z80 IVT AND INT MODE 2
LD A,HBX_IVT >> 8 ; SETUP HI BYTE OF IVT ADDRESS
LD I,A ; ... AND PLACE IT IN I REGISTER
#IF (CPUFAM == CPU_Z180)
; SETUP Z180 IVT
XOR A ; SETUP LO BYTE OF IVT ADDRESS
OUT0 (Z180_IL),A ; ... AND PLACE IN Z180 IL REGISTER
#ENDIF
IM 2 ; SWITCH TO INT MODE 2
#ENDIF
#IF (PLATFORM == PLT_SBC)
;
#IF (HTIMENABLE) ; SIMH TIMER
;
#IF (INTMODE == 1)
LD HL,HB_TIMINT
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
#ENDIF
;
#IF (INTMODE == 2)
;LD HL,HB_TIMINT
;LD (HBX_IVT),HL
#ENDIF
;
#ENDIF
;
#ENDIF
;
#IF (PLATFORM == PLT_ZETA2)
;
; 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)
;
; TIMER INTERRUPT IS ON CTCB, VECTOR IS SECOND IVT SLOT
LD HL,HB_TIMINT ; TIMER INT HANDLER ADR
LD (IVT(INT_CTC0B)),HL ; IVT ENTRY FOR CTC0B
;
; 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
;
; CTCA IS SLAVED (WIRED) TO TO CTCB TO ACT AS A PRESCALER
; CONFIGURE CHANNEL B FOR 50HZ PERIODIC INTERRUPTS
; CTC CLK = 921,200HZ
; CTCA TIME CONSTANT = 256
; CTCB TIME CONSTANT = 72
; INT FREQ IS CTC CLK / CTCA TC / CTCB TC
; WHICH IS 921,600HZ / 256 / 72 = 50HZ
LD A,%01010111 ; CTCA 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 (CTCA),A ; SETUP CTCA
LD A,0 ; CTCA TIMER CONSTANT = 256, 0 MEANS 256
OUT (CTCA),A ; SETUP CTCA TIMER CONSTANT
LD A,%11010111 ; CTCB 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 (CTCB),A ; SETUP CTCB
LD A,72 ; CTCB TIMER CONSTANT = 72
OUT (CTCB),A ; SETUP CTCB TIMER CONSTANT
#ENDIF
;
#ENDIF
;
#IF (PLATFORM == PLT_EZZ80)
;
; 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)
;
; 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
;
; CTCC IS SLAVED (WIRED) TO CTCD TO ACT AS A PRESCALER
; CONFIGURE CHANNEL D FOR 50HZ PERIODIC INTERRUPTS
; CTC CLK = 921,200HZ
; CTCC TIME CONSTANT = 256
; CTCD TIME CONSTANT = 72
; INT FREQ IS CTC CLK / CTCC TC / CTCD TC
; WHICH IS 921,600HZ / 256 / 72 = 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,72 ; CTCD TIMER CONSTANT = 72
OUT (CTCD),A ; SETUP CTCD TIMER CONSTANT
#ELSE
.ECHO "*** ERROR: EZZ80 REQUIRES INTMODE 2!!!\n"
!!! ; FORCE AN ASSEMBLY ERROR
#ENDIF
;
#ENDIF
;
;
#IF (PLATFORM == PLT_RCZ80)
;
; FOR NOW, THIS IS SPECIFICALLY FOR A CTC TO DRIVE AN SIO
; AT 1:1 USING CTC CHANNELS A & B. IN OTHER WORDS, IT JUST
; PASSES THE INCOMING TRIGGER OUT AT 1:1. NO INTERRUPTS.
;
#IF (CTCENABLE == TRUE)
;
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
; ||+------- 0=PRESCALER OF 16 (NOT USED)
; |+-------- 1=COUNTER MODE
; +--------- 0=NO INTERRUPTS
OUT (CTCA),A ; SETUP CTCC
LD A,1 ; CTCC TIMER CONSTANT = 1
OUT (CTCA),A ; SETUP CTCC TIMER CONSTANT
;
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
; ||+------- 0=PRESCALER OF 16 (NOT USED)
; |+-------- 1=COUNTER MODE
; +--------- 0=NO INTERRUPTS
OUT (CTCB),A ; SETUP CTCC
LD A,1 ; CTCC TIMER CONSTANT = 1
OUT (CTCB),A ; SETUP CTCC TIMER CONSTANT
;
#ENDIF
;
#ENDIF
;
#IF (CPUFAM == CPU_Z180)
;
#IF (INTMODE == 2)
;
; MASK ALL EXTERNAL INTERRUPTS FOR NOW
LD A,$01 ; INT0 ENABLED, INT1-2 DISABLED
OUT0 (Z180_ITC),A ; WRITE TO INT/TRAP CONTROL REGISTER
;
; SETUP Z180 TIMER0 INTERRUPT VECTOR IN IVT
LD HL,HB_TIMINT
LD (IVT(INT_TIM0)),HL ; Z180 TIMER 0
; SETUP PERIODIC TIMER INTERRUPT ON TIMER 0
LD HL,(CB_CPUKHZ) ; 50HZ = 18432000 / 20 / 50 / X, SO X = CPU KHZ
LD B,0
LD C,Z180_RLDR0L ; INITIALIZE TIMER 0 RELOAD REGISTER
OUT (C),L
INC C
OUT (C),H
LD C,Z180_TMDR0L ; INITIALIZE TIMER 0 DATA REGISTER
OUT (C),L
INC C
OUT (C),H
LD A,%00010001 ; ENABLE TIMER0 INT AND DOWN COUNTING
OUT0 (Z180_TCR),A
;
#ENDIF
;
#ENDIF
;
#IF (CPUFAM == CPU_Z180) #IF (CPUFAM == CPU_Z180)
; ;
; AT BOOT, Z180 PHI IS OSC / 2 ; AT BOOT, Z180 PHI IS OSC / 2
@ -1180,192 +1410,6 @@ PSCNX .EQU $ + 1
DJNZ PSCN1 DJNZ PSCN1
#ENDIF #ENDIF
; ;
; SETUP INTERRUPT VECTORS, AS APPROPRIATE
;
;#IF (INTMODE == 1)
; ; OVERLAY $0038 WITH JP INT_IM1
; LD A,$C3 ; JP INSTRUCTION
; LD ($0038),A ; INSTALL IT
; LD HL,INT_IM1 ; DESTINATION ADDRESS
; LD ($0039),HL ; INSTALL IT
;#ENDIF
;
#IF (INTMODE == 2)
; SETUP Z80 IVT AND INT MODE 2
LD A,HBX_IVT >> 8 ; SETUP HI BYTE OF IVT ADDRESS
LD I,A ; ... AND PLACE IT IN I REGISTER
#IF (CPUFAM == CPU_Z180)
; SETUP Z180 IVT
XOR A ; SETUP LO BYTE OF IVT ADDRESS
OUT0 (Z180_IL),A ; ... AND PLACE IN Z180 IL REGISTER
#ENDIF
IM 2 ; SWITCH TO INT MODE 2
#ENDIF
#IF (PLATFORM == PLT_SBC)
;
#IF (HTIMENABLE) ; SIMH TIMER
;
#IF (INTMODE == 1)
LD HL,HB_TIMINT
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
#ENDIF
;
#IF (INTMODE == 2)
;LD HL,HB_TIMINT
;LD (HBX_IVT),HL
#ENDIF
;
#ENDIF
;
#ENDIF
;
#IF (PLATFORM == PLT_ZETA2)
;
; 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)
;
; TIMER INTERRUPT IS ON CTCB, VECTOR IS SECOND IVT SLOT
LD HL,HB_TIMINT ; TIMER INT HANDLER ADR
LD (IVT(INT_CTC0B)),HL ; IVT ENTRY FOR CTC0B
;
; 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
;
; CTCA IS SLAVED (WIRED) TO TO CTCB TO ACT AS A PRESCALER
; CONFIGURE CHANNEL B FOR 50HZ PERIODIC INTERRUPTS
; CTC CLK = 921,200HZ
; CTCA TIME CONSTANT = 256
; CTCB TIME CONSTANT = 72
; INT FREQ IS CTC CLK / CTCA TC / CTCB TC
; WHICH IS 921,600HZ / 256 / 72 = 50HZ
LD A,%01010111 ; CTCA 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 (CTCA),A ; SETUP CTCA
LD A,0 ; CTCA TIMER CONSTANT = 256, 0 MEANS 256
OUT (CTCA),A ; SETUP CTCA TIMER CONSTANT
LD A,%11010111 ; CTCB 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 (CTCB),A ; SETUP CTCB
LD A,72 ; CTCB TIMER CONSTANT = 72
OUT (CTCB),A ; SETUP CTCB TIMER CONSTANT
#ENDIF
;
#ENDIF
;
#IF (PLATFORM == PLT_EZZ80)
;
; 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)
;
; 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
;
; CTCC IS SLAVED (WIRED) TO CTCD TO ACT AS A PRESCALER
; CONFIGURE CHANNEL D FOR 50HZ PERIODIC INTERRUPTS
; CTC CLK = 921,200HZ
; CTCC TIME CONSTANT = 256
; CTCD TIME CONSTANT = 72
; INT FREQ IS CTC CLK / CTCC TC / CTCD TC
; WHICH IS 921,600HZ / 256 / 72 = 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,72 ; CTCD TIMER CONSTANT = 72
OUT (CTCD),A ; SETUP CTCD TIMER CONSTANT
#ELSE
.ECHO "*** ERROR: EZZ80 REQUIRES INTMODE 2!!!\n"
!!! ; FORCE AN ASSEMBLY ERROR
#ENDIF
;
#ENDIF
;
#IF (CPUFAM == CPU_Z180)
;
#IF (INTMODE == 2)
;
; MASK ALL EXTERNAL INTERRUPTS FOR NOW
LD A,$01 ; INT0 ENABLED, INT1-2 DISABLED
OUT0 (Z180_ITC),A ; WRITE TO INT/TRAP CONTROL REGISTER
;
; SETUP Z180 TIMER0 INTERRUPT VECTOR IN IVT
LD HL,HB_TIMINT
LD (IVT(INT_TIM0)),HL ; Z180 TIMER 0
; SETUP PERIODIC TIMER INTERRUPT ON TIMER 0
LD HL,(CB_CPUKHZ) ; 50HZ = 18432000 / 20 / 50 / X, SO X = CPU KHZ
LD B,0
LD C,Z180_RLDR0L ; INITIALIZE TIMER 0 RELOAD REGISTER
OUT (C),L
INC C
OUT (C),H
LD C,Z180_TMDR0L ; INITIALIZE TIMER 0 DATA REGISTER
OUT (C),L
INC C
OUT (C),H
LD A,%00010001 ; ENABLE TIMER0 INT AND DOWN COUNTING
OUT0 (Z180_TCR),A
;
#ENDIF
;
#ENDIF
;
#IF 0 #IF 0
HB_SPDTST: HB_SPDTST:
CALL HB_CPUSPD ; CPU SPEED DETECTION CALL HB_CPUSPD ; CPU SPEED DETECTION

2
Source/HBIOS/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 9 #DEFINE RMN 9
#DEFINE RUP 2 #DEFINE RUP 2
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "2.9.2-pre.9"
#DEFINE BIOSVER "2.9.2-pre.10"

BIN
Source/Images/hd_cpm3/s0/u0/BDOS3.SPR

Binary file not shown.

BIN
Source/Images/hd_cpm3/s0/u0/BNKBDOS3.SPR

Binary file not shown.

BIN
Source/Images/hd_cpm3/s0/u0/CCP.COM

Binary file not shown.

BIN
Source/Images/hd_cpm3/s0/u0/GENCPM.COM

Binary file not shown.

BIN
Source/Images/hd_cpm3/s0/u0/INITDIR.COM

Binary file not shown.

BIN
Source/Images/hd_cpm3/s0/u0/R.COM

Binary file not shown.

39
Source/Images/hd_cpm3/s0/u0/README.1ST

@ -1,39 +0,0 @@
CP/M 3
======
This archive contains an almost complete build of CP/M 3.
If you have the source distribution, the file MAKING.DOC explains how to
set up the build environment on your computer.
Differences from Digital Research CP/M 3
========================================
All the CP/M 3 patches described in the document CPM3FIX.PAT have been
applied to the source code, except those to INITDIR. Patches 1-18 (except
nos. 5 and 9) were applied.
CP/M 3 is now fully Year 2000 compliant. This affects the programs
DATE.COM, DIR.COM and SHOW.COM.
Dates can be displayed in US, UK or Year-Month-Day format. This is set by
SETDEF:
SETDEF [US]
SETDEF [UK]
SETDEF [YMD] respectively.
The CCP has a further bug fix: A command sequence such as:
C1
:C2
:C3
will now not execute the command C3 if the command C1 failed.
What's missing?
===============
INITDIR.COM - because it is written in PL/I and I can't make the
PL/I compiler at <http://cdl.uta.edu/cpm> compile it.
Apparently a more recent version of the compiler is
required.

BIN
Source/Images/hd_cpm3/s0/u0/RESBDOS3.SPR

Binary file not shown.

BIN
Source/Images/hd_cpm3/s0/u0/W.COM

Binary file not shown.

16
Source/Images/hd_cpm3/s0/u0/WBW.TXT

@ -0,0 +1,16 @@
With the following exceptions, the files in this directory
came from the CP/M 3 binary distribution on "The Unofficial
CP/M Web site" at http://www.cpm.z80.de/binary.html.
As documented in the "README.1ST" file, the included
files have been patched with all applicable DRI patches
per CPM3FIX.PAT.
In addition, the following have been added:
- INITDIR.COM was not included. The copy included is the
original DRI distribution, with both patches installed.
- ZSID6.COM is the original DRI ZSID distribution, but
patched to use RST 6 instead of RST 7 to avoid conflicting
with mode 1 interrupts.

BIN
Source/Images/hd_cpm3/s0/u0/ZSID6.COM

Binary file not shown.
Loading…
Cancel
Save