mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:13:13 -06:00
@@ -26,23 +26,31 @@
|
||||
;
|
||||
#include "cfg_mk4.asm"
|
||||
;
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
UARTCAS .SET TRUE ; UART: AUTO-DETECT ECB CASSETTE UART
|
||||
UARTMFP .SET TRUE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .SET TRUE ; UART: AUTO-DETECT 4UART UART
|
||||
SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
;
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
|
||||
CVDUENABLE .SET TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
|
||||
VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .SET FDMODE_DIDE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC]
|
||||
;
|
||||
IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
;
|
||||
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
;
|
||||
SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDMODE .SET SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC]
|
||||
;
|
||||
|
||||
@@ -26,12 +26,19 @@
|
||||
;
|
||||
#include "cfg_n8.asm"
|
||||
;
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
;
|
||||
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDMODE .SET SDMODE_CSIO ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
;
|
||||
AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER
|
||||
;
|
||||
SDMODE .SET SDMODE_CSIO ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
|
||||
@@ -30,9 +30,7 @@ INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
;
|
||||
HTIMENABLE .SET TRUE ; ENABLE SIMH TIMER SUPPORT
|
||||
;
|
||||
SIMRTCENABLE .SET TRUE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
|
||||
DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
UARTSBCFORCE .SET TRUE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH)
|
||||
;
|
||||
HDSKENABLE .SET TRUE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
|
||||
;
|
||||
UARTSBCFORCE .SET TRUE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH)
|
||||
|
||||
@@ -26,19 +26,29 @@
|
||||
;
|
||||
#include "cfg_sbc.asm"
|
||||
;
|
||||
CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
|
||||
UARTCAS .SET TRUE ; UART: AUTO-DETECT ECB CASSETTE UART
|
||||
UARTMFP .SET TRUE ; UART: AUTO-DETECT MF/PIC UART
|
||||
UART4 .SET TRUE ; UART: AUTO-DETECT 4UART UART
|
||||
UARTRC .SET FALSE ; UART: AUTO-DETECT RC UART
|
||||
SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
;
|
||||
TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
|
||||
VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM)
|
||||
CVDUENABLE .SET TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM)
|
||||
VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM)
|
||||
VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .SET FDMODE_DIO3 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC]
|
||||
;
|
||||
IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM)
|
||||
;
|
||||
PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
;
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
SDMODE .SET SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC]
|
||||
;
|
||||
|
||||
@@ -26,12 +26,18 @@
|
||||
;
|
||||
#include "cfg_zeta2.asm"
|
||||
;
|
||||
;UARTCFG .SET UARTCFG | SER_RTS
|
||||
;
|
||||
CPUOSC .SET 20000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
;UARTCFG .SET UARTCFG | SER_RTS
|
||||
UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .SET FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC]
|
||||
;
|
||||
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
;
|
||||
PPPENABLE .SET TRUE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
|
||||
@@ -26,10 +26,18 @@
|
||||
;
|
||||
#include "cfg_zeta.asm"
|
||||
;
|
||||
CPUOSC .SET 20000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
;UARTCFG .SET UARTCFG | SER_RTS
|
||||
UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART
|
||||
;
|
||||
FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM)
|
||||
FDMODE .SET FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC]
|
||||
;
|
||||
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM)
|
||||
;
|
||||
PPPENABLE .SET TRUE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM)
|
||||
|
||||
@@ -140,6 +140,17 @@ Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM)
|
||||
ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
|
||||
;
|
||||
SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT
|
||||
SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED)
|
||||
SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
|
||||
SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP]
|
||||
SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR
|
||||
SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG
|
||||
SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG
|
||||
SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
;
|
||||
XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG
|
||||
;
|
||||
|
||||
@@ -142,6 +142,17 @@ Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM)
|
||||
ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM)
|
||||
;
|
||||
SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM)
|
||||
SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT
|
||||
SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED)
|
||||
SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
|
||||
SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP]
|
||||
SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR
|
||||
SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG
|
||||
SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800
|
||||
SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG
|
||||
SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE
|
||||
;
|
||||
XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG
|
||||
;
|
||||
|
||||
@@ -40,8 +40,6 @@ ENA_XM .EQU TRUE ; INCLUDE XMODEM IF SPACE AVAILABLE
|
||||
;
|
||||
ENA_MBC6502 .EQU FALSE ; ENABLE OR DISABLE MBC6502 OPTION
|
||||
;
|
||||
#INCLUDE "util.asm"
|
||||
;
|
||||
;__UART_ENTRY_________________________________________________________________
|
||||
;
|
||||
; SERIAL MONITOR STARTUP
|
||||
@@ -1846,6 +1844,233 @@ DSKY_ENTRY:
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; UTILITY FUNCTIONS
|
||||
;==================================================================================================
|
||||
;
|
||||
;
|
||||
CHR_BEL .EQU 07H
|
||||
CHR_CR .EQU 0DH
|
||||
CHR_LF .EQU 0AH
|
||||
CHR_BS .EQU 08H
|
||||
CHR_ESC .EQU 1BH
|
||||
;
|
||||
;__________________________________________________________________________________________________
|
||||
;
|
||||
; UTILITY PROCS TO PRINT SINGLE CHARACTERS WITHOUT TRASHING ANY REGISTERS
|
||||
;
|
||||
PC_SPACE:
|
||||
PUSH AF
|
||||
LD A,' '
|
||||
JR PC_PRTCHR
|
||||
PC_COLON:
|
||||
PUSH AF
|
||||
LD A,':'
|
||||
JR PC_PRTCHR
|
||||
PC_CR:
|
||||
PUSH AF
|
||||
LD A,CHR_CR
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_LF:
|
||||
PUSH AF
|
||||
LD A,CHR_LF
|
||||
JR PC_PRTCHR
|
||||
|
||||
PC_PRTCHR:
|
||||
CALL COUT
|
||||
POP AF
|
||||
RET
|
||||
|
||||
NEWLINE2:
|
||||
CALL NEWLINE
|
||||
NEWLINE:
|
||||
CALL PC_CR
|
||||
CALL PC_LF
|
||||
RET
|
||||
PRTSTR:
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
CP '$'
|
||||
RET Z
|
||||
CALL COUT
|
||||
JR PRTSTR
|
||||
;
|
||||
; PRINT THE HEX BYTE VALUE IN A
|
||||
;
|
||||
PRTHEXBYTE:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
CALL HEXASCII
|
||||
LD A,D
|
||||
CALL COUT
|
||||
LD A,E
|
||||
CALL COUT
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; CONVERT BINARY VALUE IN A TO ASCII HEX CHARACTERS IN DE
|
||||
;
|
||||
HEXASCII:
|
||||
LD D,A
|
||||
CALL HEXCONV
|
||||
LD E,A
|
||||
LD A,D
|
||||
RLCA
|
||||
RLCA
|
||||
RLCA
|
||||
RLCA
|
||||
CALL HEXCONV
|
||||
LD D,A
|
||||
RET
|
||||
;
|
||||
; CONVERT LOW NIBBLE OF A TO ASCII HEX
|
||||
;
|
||||
HEXCONV:
|
||||
AND 0FH ;LOW NIBBLE ONLY
|
||||
ADD A,90H
|
||||
DAA
|
||||
ADC A,40H
|
||||
DAA
|
||||
RET
|
||||
;
|
||||
; ADD HL,A
|
||||
;
|
||||
; A REGISTER IS DESTROYED!
|
||||
;
|
||||
ADDHLA:
|
||||
ADD A,L
|
||||
LD L,A
|
||||
RET NC
|
||||
INC H
|
||||
RET
|
||||
;
|
||||
; DELAY 16US (CPU SPEED COMPENSATED) INCUDING CALL/RET INVOCATION
|
||||
; REGISTER A AND FLAGS DESTROYED
|
||||
; NO COMPENSATION FOR Z180 MEMORY WAIT STATES
|
||||
; THERE IS AN OVERHEAD OF 3TS PER INVOCATION
|
||||
; IMPACT OF OVERHEAD DIMINISHES AS CPU SPEED INCREASES
|
||||
;
|
||||
; CPU SCALER (CPUSCL) = (CPUHMZ - 2) FOR 16US + 3TS DELAY
|
||||
; NOTE: CPUSCL MUST BE >= 1!
|
||||
;
|
||||
; EXAMPLE: 8MHZ CPU (DELAY GOAL IS 16US)
|
||||
; LOOP = ((6 * 16) - 5) = 91TS
|
||||
; TOTAL COST = (91 + 40) = 131TS
|
||||
; ACTUAL DELAY = (131 / 8) = 16.375US
|
||||
;
|
||||
; --- TOTAL COST = (LOOP COST + 40) TS -----------------+
|
||||
DELAY: ; 17TS (FROM INVOKING CALL) |
|
||||
LD A,(CPUSCL) ; 13TS |
|
||||
; |
|
||||
DELAY1: ; |
|
||||
; --- LOOP = ((CPUSCL * 16) - 5) TS ------------+ |
|
||||
DEC A ; 4TS | |
|
||||
#IF (BIOS == BIOS_WBW) ; | |
|
||||
#IF (CPUFAM == CPU_Z180) ; | |
|
||||
OR A ; +4TS FOR Z180 | |
|
||||
#ENDIF ; | |
|
||||
#ENDIF ; | |
|
||||
JR NZ,DELAY1 ; 12TS (NZ) / 7TS (Z) | |
|
||||
; ----------------------------------------------+ |
|
||||
; |
|
||||
RET ; 10TS (RETURN) |
|
||||
;-------------------------------------------------------+
|
||||
;
|
||||
; DELAY 16US * DE (CPU SPEED COMPENSATED)
|
||||
; REGISTER DE, A, AND FLAGS DESTROYED
|
||||
; NO COMPENSATION FOR Z180 MEMORY WAIT STATES
|
||||
; THERE IS A 27TS OVERHEAD FOR CALL/RET PER INVOCATION
|
||||
; IMPACT OF OVERHEAD DIMINISHES AS DE AND/OR CPU SPEED INCREASES
|
||||
;
|
||||
; CPU SCALER (CPUSCL) = (CPUHMZ - 2) FOR 16US OUTER LOOP COST
|
||||
; NOTE: CPUSCL MUST BE > 0!
|
||||
;
|
||||
; EXAMPLE: 8MHZ CPU, DE=6250 (DELAY GOAL IS .1 SEC OR 100,000US)
|
||||
; INNER LOOP = ((16 * 6) - 5) = 91TS
|
||||
; OUTER LOOP = ((91 + 37) * 6250) = 800,000TS
|
||||
; ACTUAL DELAY = ((800,000 + 27) / 8) = 100,003US
|
||||
;
|
||||
; --- TOTAL COST = (OUTER LOOP + 27) TS ------------------------+
|
||||
VDELAY: ; 17TS (FROM INVOKING CALL) |
|
||||
; |
|
||||
; --- OUTER LOOP = ((INNER LOOP + 37) * DE) TS ---------+ |
|
||||
LD A,(CPUSCL) ; 13TS | |
|
||||
; | |
|
||||
VDELAY1: ; | |
|
||||
; --- INNER LOOP = ((CPUSCL * 16) - 5) TS ------+ | |
|
||||
#IF (BIOS == BIOS_WBW) ; | | |
|
||||
#IF (CPUFAM == CPU_Z180) ; | | |
|
||||
OR A ; +4TS FOR Z180 | | |
|
||||
#ENDIF ; | | |
|
||||
#ENDIF ; | | |
|
||||
DEC A ; 4TS | | |
|
||||
JR NZ,VDELAY1 ; 12TS (NZ) / 7TS (Z) | | |
|
||||
; ----------------------------------------------+ | |
|
||||
; | |
|
||||
DEC DE ; 6TS | |
|
||||
#IF (BIOS == BIOS_WBW) ; | | |
|
||||
#IF (CPUFAM == CPU_Z180) ; | |
|
||||
OR A ; +4TS FOR Z180 | |
|
||||
#ENDIF ; | |
|
||||
#ENDIF ; | |
|
||||
LD A,D ; 4TS | |
|
||||
OR E ; 4TS | |
|
||||
JP NZ,VDELAY ; 10TS | |
|
||||
;-------------------------------------------------------+ |
|
||||
; |
|
||||
RET ; 10TS (FINAL RETURN) |
|
||||
;---------------------------------------------------------------+
|
||||
;
|
||||
; DELAY ABOUT 0.5 SECONDS
|
||||
; 500000US / 16US = 31250
|
||||
;
|
||||
LDELAY:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
LD DE,31250
|
||||
CALL VDELAY
|
||||
POP DE
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; INITIALIZE DELAY SCALER BASED ON OPERATING CPU SPEED
|
||||
; ENTER WITH A = CPU SPEED IN MHZ
|
||||
;
|
||||
DELAY_INIT:
|
||||
CP 3 ; TEST FOR <= 2 (SPECIAL HANDLING)
|
||||
JR C,DELAY_INIT1 ; IF <= 2, SPECIAL PROCESSING
|
||||
SUB 2 ; ADJUST AS REQUIRED BY DELAY FUNCTIONS
|
||||
JR DELAY_INIT2 ; AND CONTINUE
|
||||
DELAY_INIT1:
|
||||
LD A,1 ; USE THE MIN VALUE OF 1
|
||||
DELAY_INIT2:
|
||||
LD (CPUSCL),A ; UPDATE CPU SCALER VALUE
|
||||
RET
|
||||
|
||||
#IF (CPUMHZ < 3)
|
||||
CPUSCL .DB 1 ; CPU SCALER MUST BE > 0
|
||||
#ELSE
|
||||
CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ
|
||||
#ENDIF
|
||||
;
|
||||
; SHORT DELAY FUNCTIONS. NO CLOCK SPEED COMPENSATION, SO THEY
|
||||
; WILL RUN LONGER ON SLOWER SYSTEMS. THE NUMBER INDICATES THE
|
||||
; NUMBER OF CALL/RET INVOCATIONS. A SINGLE CALL/RET IS
|
||||
; 27 T-STATES ON A Z80, 25 T-STATES ON A Z180
|
||||
;
|
||||
; ; Z80 Z180
|
||||
; ; ---- ----
|
||||
DLY64: CALL DLY32 ; 1728 1600
|
||||
DLY32: CALL DLY16 ; 864 800
|
||||
DLY16: CALL DLY8 ; 432 400
|
||||
DLY8: CALL DLY4 ; 216 200
|
||||
DLY4: CALL DLY2 ; 108 100
|
||||
DLY2: CALL DLY1 ; 54 50
|
||||
DLY1: RET ; 27 25
|
||||
;
|
||||
;
|
||||
;
|
||||
.FILL 16,0 ; SET MINIMUM STACK DEPTH
|
||||
SLACK .EQU (MON_END - $)
|
||||
|
||||
@@ -1020,6 +1020,9 @@ HB_ENTRYTBL .EQU $
|
||||
;
|
||||
JP HB_START ; HBIOS INITIALIZATION
|
||||
JP HB_DISPATCH ; VECTOR TO DISPATCHER
|
||||
JP PRTSUM
|
||||
; !!! DO NOT ADD ADDTIONAL VECTORS HERE WITHOUT
|
||||
; CHECKING W/ WAYNE !!!
|
||||
;
|
||||
HB_STKSIZ .EQU $100 - ($ & $FF)
|
||||
;
|
||||
|
||||
@@ -464,8 +464,6 @@ applst2:
|
||||
; Device list
|
||||
;
|
||||
devlst:
|
||||
ld hl,str_devlst ; device list header string
|
||||
call pstr ; display it
|
||||
jp prtall ; do it
|
||||
;
|
||||
; Set console interface unit
|
||||
@@ -1814,99 +1812,26 @@ CST .equ cst
|
||||
; Device inventory display
|
||||
;=======================================================================
|
||||
;
|
||||
; Print list of all drives (WBW)
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
;
|
||||
; Print list of all drives (WBW)
|
||||
;
|
||||
; Just invoke the existing HBIOS routine...
|
||||
;
|
||||
prtall:
|
||||
call nl ; formatting
|
||||
ld b,BF_SYSGET
|
||||
ld c,BF_SYSGET_DIOCNT
|
||||
rst 08 ; E := disk unit count
|
||||
ld b,e ; count to B
|
||||
ld a,b ; count to A
|
||||
or a ; set flags
|
||||
ret z ; bail out if zero
|
||||
ld c,0 ; init device index
|
||||
;
|
||||
prtall1:
|
||||
ld hl,str_disk ; prefix string
|
||||
call pstr ; display it
|
||||
ld a,c ; index
|
||||
call prtdecb ; print it
|
||||
ld hl,str_on ; separator string
|
||||
call pstr
|
||||
push bc ; save loop control
|
||||
ld b,BF_DIODEVICE ; HBIOS func: report device info
|
||||
rst 08 ; call HBIOS
|
||||
call prtdrv ; print it
|
||||
pop bc ; restore loop control
|
||||
inc c ; bump index
|
||||
djnz prtall1 ; loop as needed
|
||||
ret ; done
|
||||
;
|
||||
; Print the device info
|
||||
; On input D has device type, E has device number
|
||||
; Destroy no registers other than A
|
||||
;
|
||||
prtdrv:
|
||||
push de ; preserve de
|
||||
push hl ; preserve HL
|
||||
ld a,d ; load device/unit
|
||||
rrca ; rotate device
|
||||
rrca ; ... bits
|
||||
rrca ; ... into
|
||||
rrca ; ... lowest 4 bits
|
||||
and $0F ; isolate device bits
|
||||
add a,a ; multiple by two for word table
|
||||
ld hl,devtbl ; point to start of table
|
||||
call addhla ; add A to HL for table entry
|
||||
ld a,(hl) ; deref HL for string adr
|
||||
inc hl ; ...
|
||||
ld h,(hl) ; ...
|
||||
ld l,a ; ...
|
||||
call pstr ; print the device nmemonic
|
||||
pop hl ; recover HL
|
||||
pop de ; recover DE
|
||||
ld a,e ; device number
|
||||
call prtdecb ; print it
|
||||
ld a,':' ; suffix
|
||||
call cout ; print it
|
||||
ret
|
||||
;
|
||||
devtbl: ; device table
|
||||
.dw dev00, dev01, dev02, dev03
|
||||
.dw dev04, dev05, dev06, dev07
|
||||
.dw dev08, dev09, dev10, dev11
|
||||
.dw dev12, dev13, dev14, dev15
|
||||
;
|
||||
devunk .db "???",0
|
||||
dev00 .db "MD",0
|
||||
dev01 .db "FD",0
|
||||
dev02 .db "RAMF",0
|
||||
dev03 .db "IDE",0
|
||||
dev04 .db "ATAPI",0
|
||||
dev05 .db "PPIDE",0
|
||||
dev06 .db "SD",0
|
||||
dev07 .db "PRPSD",0
|
||||
dev08 .db "PPPSD",0
|
||||
dev09 .db "HDSK",0
|
||||
dev10 .equ devunk
|
||||
dev11 .equ devunk
|
||||
dev12 .equ devunk
|
||||
dev13 .equ devunk
|
||||
dev14 .equ devunk
|
||||
dev15 .equ devunk
|
||||
ld a,BID_BIOS ; BIOS Bank please
|
||||
ld ix,$0406 ; HBIOS PRTSUM vector
|
||||
jp HB_BNKCALL ; do it
|
||||
;
|
||||
#endif
|
||||
;
|
||||
;
|
||||
;
|
||||
#if (BIOS == BIOS_UNA)
|
||||
;
|
||||
; Print list of all drives (UNA)
|
||||
;
|
||||
prtall:
|
||||
ld hl,str_devlst ; device list header string
|
||||
call pstr ; display it
|
||||
call nl ; formatting
|
||||
ld b,0 ; start with unit 0
|
||||
;
|
||||
@@ -1985,6 +1910,8 @@ devsd .db "SD",0
|
||||
devdsd .db "DSD",0
|
||||
devunk .db "UNK",0
|
||||
;
|
||||
str_devlst .db "\r\n\r\nDisk Devices:",0
|
||||
;
|
||||
#endif
|
||||
;
|
||||
;=======================================================================
|
||||
@@ -2078,7 +2005,6 @@ str_reboot .db "\r\n\r\nRestarting System...",0
|
||||
str_newcon .db "\r\n\r\n Console on Unit #",0
|
||||
str_chspeed .db "\r\n\r\n Change speed now. Press a key to resume.",0
|
||||
str_applst .db "\r\n\r\nROM Applications:",0
|
||||
str_devlst .db "\r\n\r\nDisk Devices:",0
|
||||
str_invcmd .db "\r\n\r\n*** Invalid Command ***",bel,0
|
||||
str_load .db "\r\n\r\nLoading ",0
|
||||
str_disk .db "\r\n Disk Unit ",0
|
||||
|
||||
Reference in New Issue
Block a user