diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index b12d859f..d1320ae0 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -2266,13 +2266,7 @@ INIT: RST 08 ; DO IT, DE=MAJ/MIN/UP/PAT LD A,D ; A := MAJ/MIN CP ((RMJ << 4) | RMN) ; MATCH? - JR NZ,INIT1 ; HANDLE VER MISMATCH - LD A,E ; A := OS UP/PAT - AND $F0 ; PAT NOT INCLUDED IN MATCH - CP (RUP << 4) ; MATCH? - JR NZ,INIT1 ; HANDLE VER MISMATCH - JR INIT2 ; ALL GOOD, CONTINUE -INIT1: + JR Z,INIT2 ; ALL GOOD, CONTINUE ; DISPLAY VERSION MISMATCH CALL NEWLINE2 ; FORMATTING LD DE,STR_VERMIS ; VERSION MISMATCH diff --git a/Source/CPM3/boot.z80 b/Source/CPM3/boot.z80 index b6f4c08d..dbb42907 100644 --- a/Source/CPM3/boot.z80 +++ b/Source/CPM3/boot.z80 @@ -96,13 +96,7 @@ init$2: rst 08 ; do it, de=maj/min/up/pat ld a,d ; a := maj/min cp ((rmj << 4) | rmn) ; match? - jr nz,init$3 ; handle ver mismatch - ld a,e ; a := os up/pat - and 0F0h ; pat not included in match - cp (rup << 4) ; match? - jr nz,init$3 ; handle ver mismatch - jr init$4 ; all good, continue -init$3: + jr z,init$4 ; all good, continue ; display version mismatch ld hl,vermis$msg ; version mismatch call ?pmsg ; display it diff --git a/Source/HBIOS/Bank Layout.txt b/Source/HBIOS/Bank Layout.txt index 01bff19a..a3a40d57 100644 --- a/Source/HBIOS/Bank Layout.txt +++ b/Source/HBIOS/Bank Layout.txt @@ -27,7 +27,7 @@ Bank ID Module Start Size 0x04 - N ROM Disk Data -Typical ROM Bank Layout +Typical ROM Bank Layout (512K) Bank ID Usage ------- ------ @@ -35,22 +35,43 @@ Bank ID Usage 0x01 ROM Loader, Monitor, ROM OSes 0x02 ROM Applications 0x03 Reserved -0x04-0x0F ROM Disk Banks +0x04-0x0F ROM Disk Banks (12) -Typical RAM Bank Layout +Standard RAM Bank Layout (512K) Bank ID Usage ------- ------ 0x80 RomWBW HBIOS -0x81-0x8B RAM Disk Data +0x81-0x88 RAM Disk Data (3) +0x89-0x8B App Banks (8) 0x8C CP/M 3 Buffers 0x8D CP/M 3 OS 0x8E User TPA 0x8F Common +Large RAM Bank Layout (2048K) -Typical ROMless Bank Layout +Bank ID Usage +------- ------ +0x80 RomWBW HBIOS +0x81-0xB0 RAM Disk Data (30) +0xB1-0xBB App Banks (11) +0xBC CP/M 3 Buffers +0x8D CP/M 3 OS +0x8E User TPA +0x8F Common + +Tiny RAM Bank Layout (128K) + +Bank ID Usage +------- ------ +0x80 RomWBW HBIOS +0x81 CP/M 3 OS +0x82 User TPA +0x83 Common + +ROMless Standard Bank Layout (512K) Bank ID Usage ------- ------ @@ -58,7 +79,7 @@ Bank ID Usage 0x81 Loader, DbgMon, CP/M 2.2, ZSDOS 0x82 ROM Apps 0x83 More ROM Apps -0x84-0x8B RAM Disk Data +0x84-0x8B RAM Disk Data (8) 0x8C CP/M 3 Buffers 0x8D CP/M 3 OS 0x8E User TPA diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd index 3ac3c555..4d101a96 100644 --- a/Source/HBIOS/Build.cmd +++ b/Source/HBIOS/Build.cmd @@ -50,6 +50,7 @@ echo. :: tasm -t80 -g3 -dCMD hbios_env.asm hbios_env.com hbios_env.lst || exit /b +zxcc hbios_env zxcc hbios_env >hbios_env.cmd call hbios_env.cmd diff --git a/Source/HBIOS/Config/DUO_std.asm b/Source/HBIOS/Config/DUO_std.asm index be2621d3..f6e91f0b 100644 --- a/Source/HBIOS/Config/DUO_std.asm +++ b/Source/HBIOS/Config/DUO_std.asm @@ -31,18 +31,21 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; -;;;DMAENABLE .SET TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMAENABLE .SET TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM) ; BATCOND .SET TRUE ; ENABLE LOW BATTERY WARNING MESSAGE ; ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) ; -PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFENABLE .SET TRUE ; ENABLE PCF8584 I2C CONTROLLER ; MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM ; UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 ; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +; CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT -ESPENABLE .SET TRUE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) diff --git a/Source/HBIOS/Config/SCZ180_sc700.asm b/Source/HBIOS/Config/SCZ180_sc700.asm index 88f38f37..d3d6284c 100644 --- a/Source/HBIOS/Config/SCZ180_sc700.asm +++ b/Source/HBIOS/Config/SCZ180_sc700.asm @@ -36,6 +36,7 @@ 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) ; LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .SET $0E ; STATUS LED PORT ADDRESS ; FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS diff --git a/Source/HBIOS/acia.asm b/Source/HBIOS/acia.asm index ee2e4ba6..dab9d31e 100644 --- a/Source/HBIOS/acia.asm +++ b/Source/HBIOS/acia.asm @@ -705,12 +705,12 @@ ACIA0_CFG: .DW (ACIA0CLK / ACIA0DIV) & $FFFF ; CLOCK FREQ AS .DW (ACIA0CLK / ACIA0DIV) >> 16 ; ... DWORD VALUE ; - .ECHO "ACIA: IO=" - .ECHO ACIA0BASE + DEVECHO "ACIA: IO=" + DEVECHO ACIA0BASE #IF (INTMODE == 1) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; ACIA_CFGSIZ .EQU $ - ACIA_CFG ; SIZE OF ONE CFG TABLE ENTRY ; @@ -728,12 +728,12 @@ ACIA1_CFG: .DW (ACIA1CLK / ACIA1DIV) & $FFFF ; CLOCK FREQ AS .DW (ACIA1CLK / ACIA1DIV) >> 16 ; ... DWORD VALUE ; - .ECHO "ACIA: IO=" - .ECHO ACIA1BASE + DEVECHO "ACIA: IO=" + DEVECHO ACIA1BASE #IF (INTMODE == 1) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; #ENDIF ; diff --git a/Source/HBIOS/asci.asm b/Source/HBIOS/asci.asm index eb5d737f..85cbb0f5 100644 --- a/Source/HBIOS/asci.asm +++ b/Source/HBIOS/asci.asm @@ -837,12 +837,12 @@ ASCI1_CFG: .DW ASCI1CFG ; LINE CONFIGURATION .DW ASCI1_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "ASCI: IO=" - .ECHO ASCI1_BASE + DEVECHO "ASCI: IO=" + DEVECHO ASCI1_BASE #IF ((ASCIINTS) & (INTMODE >0)) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; ASCI_CFGSIZ .EQU $ - ASCI_CFG ; SIZE OF ONE CFG TABLE ENTRY ; @@ -855,12 +855,12 @@ ASCI0_CFG: .DW ASCI0CFG ; LINE CONFIGURATION .DW ASCI0_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "ASCI: IO=" - .ECHO ASCI0_BASE + DEVECHO "ASCI: IO=" + DEVECHO ASCI0_BASE #IF ((ASCIINTS) & (INTMODE >0)) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; #ELSE ; @@ -873,12 +873,12 @@ ASCI0_CFG: .DW ASCI0CFG ; LINE CONFIGURATION .DW ASCI0_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "ASCI: IO=" - .ECHO ASCI0_BASE + DEVECHO "ASCI: IO=" + DEVECHO ASCI0_BASE #IF ((ASCIINTS) & (INTMODE >0)) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; ASCI_CFGSIZ .EQU $ - ASCI_CFG ; SIZE OF ONE CFG TABLE ENTRY ; @@ -891,12 +891,12 @@ ASCI1_CFG: .DW ASCI1CFG ; LINE CONFIGURATION .DW ASCI1_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "ASCI: IO=" - .ECHO ASCI1_BASE + DEVECHO "ASCI: IO=" + DEVECHO ASCI1_BASE #IF ((ASCIINTS) & (INTMODE > 0)) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; #ENDIF ; diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index e5ce2493..bc2a431a 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -21,14 +21,14 @@ ; AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE ; - .ECHO "AY38910: MODE=" + DEVECHO "AY38910: MODE=" ; #IF (AYMODE == AYMODE_SCG) AY_RSEL .EQU $9A AY_RDAT .EQU $9B AY_RIN .EQU AY_RSEL AY_ACR .EQU $9C - .ECHO "SCG" + DEVECHO "SCG" #ENDIF ; #IF (AYMODE == AYMODE_N8) @@ -36,35 +36,35 @@ AY_RSEL .EQU $9C AY_RDAT .EQU $9D AY_RIN .EQU AY_RSEL AY_ACR .EQU N8_ACR - .ECHO "N8" + DEVECHO "N8" #ENDIF ; #IF (AYMODE == AYMODE_RCZ80) AY_RSEL .EQU $D8 AY_RDAT .EQU $D0 AY_RIN .EQU AY_RSEL+AY_RCSND - .ECHO "RCZ80" + DEVECHO "RCZ80" #ENDIF ; #IF (AYMODE == AYMODE_RCZ180) AY_RSEL .EQU $68 AY_RDAT .EQU $60 AY_RIN .EQU AY_RSEL+AY_RCSND - .ECHO "RCZ180" + DEVECHO "RCZ180" #ENDIF ; #IF (AYMODE == AYMODE_MSX) AY_RSEL .EQU $A0 AY_RDAT .EQU $A1 AY_RIN .EQU $A2 - .ECHO "MSX" + DEVECHO "MSX" #ENDIF ; #IF (AYMODE == AYMODE_LINC) AY_RSEL .EQU $33 AY_RDAT .EQU $32 AY_RIN .EQU $32 - .ECHO "LINC" + DEVECHO "LINC" #ENDIF ; #IF (AYMODE == AYMODE_MBC) @@ -72,7 +72,7 @@ AY_RSEL .EQU $A0 AY_RDAT .EQU $A1 AY_RIN .EQU AY_RSEL AY_ACR .EQU $A2 - .ECHO "MBC" + DEVECHO "MBC" #ENDIF ; #IF (AYMODE == AYMODE_DUO) @@ -80,21 +80,21 @@ AY_RSEL .EQU $A4 AY_RDAT .EQU $A5 AY_RIN .EQU AY_RSEL AY_ACR .EQU $A6 - .ECHO "DUO" + DEVECHO "DUO" #ENDIF ; #IF (AYMODE == AYMODE_NABU) AY_RSEL .EQU $41 AY_RDAT .EQU $40 AY_RIN .EQU $40 - .ECHO "NABU" + DEVECHO "NABU" #ENDIF ; - .ECHO ", IO=" - .ECHO AY_RSEL - .ECHO ", CLOCK=" - .ECHO AY_CLK - .ECHO " HZ\n" + DEVECHO ", IO=" + DEVECHO AY_RSEL + DEVECHO ", CLOCK=" + DEVECHO AY_CLK + DEVECHO " HZ\n" ; ;====================================================================== ; diff --git a/Source/HBIOS/bqrtc.asm b/Source/HBIOS/bqrtc.asm index 51fd677f..233faeab 100644 --- a/Source/HBIOS/bqrtc.asm +++ b/Source/HBIOS/bqrtc.asm @@ -91,9 +91,9 @@ BQRTC_UTI .EQU %00001000 BQRTC_BUFSIZE .EQU 6 ; 6 BYTE BUFFER (YYMMDDHHMMSS) - .ECHO "BQRTC: IO=" - .ECHO BQRTC_BASE - .ECHO "\n" + DEVECHO "BQRTC: IO=" + DEVECHO BQRTC_BASE + DEVECHO "\n" ; RTC Device Initialization Entry diff --git a/Source/HBIOS/cfg_duo.asm b/Source/HBIOS/cfg_duo.asm index 893a6587..50994d4a 100644 --- a/Source/HBIOS/cfg_duo.asm +++ b/Source/HBIOS/cfg_duo.asm @@ -78,7 +78,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU TRUE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; @@ -306,7 +306,7 @@ PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) UFBASE .EQU $0C ; UF: REGISTERS BASE ADR ; -SN76489ENABLE .EQU TRUE ; SN: ENABLE SN76489 SOUND DRIVER +SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD SNMODE .EQU SNMODE_DUO ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index 63c18fcf..42298316 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_epitx.asm b/Source/HBIOS/cfg_epitx.asm index 932a62c6..7ca40d09 100644 --- a/Source/HBIOS/cfg_epitx.asm +++ b/Source/HBIOS/cfg_epitx.asm @@ -81,7 +81,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_heath.asm b/Source/HBIOS/cfg_heath.asm index 8ad98887..c3f4f10e 100644 --- a/Source/HBIOS/cfg_heath.asm +++ b/Source/HBIOS/cfg_heath.asm @@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_SC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index b813b71a..18fcd0c5 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -109,7 +109,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index a9bc9bd8..f767a352 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -75,7 +75,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU TRUE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 2063892c..39214bb6 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_mon.asm b/Source/HBIOS/cfg_mon.asm index 94e2dfd1..32db23b4 100644 --- a/Source/HBIOS/cfg_mon.asm +++ b/Source/HBIOS/cfg_mon.asm @@ -75,7 +75,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 6aaeba20..8ecb59e0 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -82,7 +82,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_nabu.asm b/Source/HBIOS/cfg_nabu.asm index d906ee10..3831d4e6 100644 --- a/Source/HBIOS/cfg_nabu.asm +++ b/Source/HBIOS/cfg_nabu.asm @@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU TRUE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_NABU ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_NABU ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $00 ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index b10812ba..a8c1e846 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -86,7 +86,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index c2c24b2c..46edeaaf 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 7a78404b..66f815e5 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index 206a8db0..6f4af843 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_s100.asm b/Source/HBIOS/cfg_s100.asm index d3ed65c7..ce82688d 100644 --- a/Source/HBIOS/cfg_s100.asm +++ b/Source/HBIOS/cfg_s100.asm @@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU TRUE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_SC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index a64395e0..e0d85495 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -75,7 +75,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 57a60175..e91836c3 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_SC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_z80retro.asm b/Source/HBIOS/cfg_z80retro.asm index 36b86b85..d087f5cc 100644 --- a/Source/HBIOS/cfg_z80retro.asm +++ b/Source/HBIOS/cfg_z80retro.asm @@ -78,7 +78,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU $00 ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index cfe19702..f0ed536c 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -67,7 +67,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 778b7a13..0c33dfa0 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -78,7 +78,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU] +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED ; diff --git a/Source/HBIOS/ch.asm b/Source/HBIOS/ch.asm index ad884da4..0bfb877d 100644 --- a/Source/HBIOS/ch.asm +++ b/Source/HBIOS/ch.asm @@ -105,9 +105,9 @@ CH_CFG0: ; DEVICE 0 .DB CH0SDENABLE ; ENABLE SD CARD SUB-DRIVER .DW CHSD_CFG0 ; SD CARD SUB-DRIVER INIT ADR ; - .ECHO "CH: IO=" - .ECHO CH0BASE - .ECHO "\n" + DEVECHO "CH: IO=" + DEVECHO CH0BASE + DEVECHO "\n" #ENDIF ; #IF (CHCNT >= 2) @@ -120,9 +120,9 @@ CH_CFG1: ; DEVICE 1 .DB CH1SDENABLE ; ENABLE SD CARD SUB-DRIVER .DW CHSD_CFG1 ; SD CARD SUB-DRIVER INIT ADR ; - .ECHO "CH: IO=" - .ECHO CH1BASE - .ECHO "\n" + DEVECHO "CH: IO=" + DEVECHO CH1BASE + DEVECHO "\n" #ENDIF ; #IF ($ - CH_CFGTBL) != (CHCNT * CH_CFGSIZ) diff --git a/Source/HBIOS/chsd.asm b/Source/HBIOS/chsd.asm index a5789c9a..c4b38194 100644 --- a/Source/HBIOS/chsd.asm +++ b/Source/HBIOS/chsd.asm @@ -60,9 +60,9 @@ CHSD_CFG0: .DW CH0_MODE ; POINTER TO MODE BYTE ; #IF (CH0SDENABLE) - .ECHO "CHSD: IO=" - .ECHO CH0BASE - .ECHO "\n" + DEVECHO "CHSD: IO=" + DEVECHO CH0BASE + DEVECHO "\n" #ENDIF #ENDIF ; @@ -77,9 +77,9 @@ CHSD_CFG1: .DW CH1_MODE ; POINTER TO MODE BYTE ; #IF (CH1SDENABLE) - .ECHO "CHSD: IO=" - .ECHO CH1BASE - .ECHO "\n" + DEVECHO "CHSD: IO=" + DEVECHO CH1BASE + DEVECHO "\n" #ENDIF #ENDIF ; diff --git a/Source/HBIOS/chusb.asm b/Source/HBIOS/chusb.asm index fd4c5d44..175a00b2 100644 --- a/Source/HBIOS/chusb.asm +++ b/Source/HBIOS/chusb.asm @@ -65,9 +65,9 @@ CHUSB_CFG0: .DW CH0_MODE ; POINTER TO MODE BYTE ; #IF (CH0USBENABLE) - .ECHO "CHUSB: IO=" - .ECHO CH0BASE - .ECHO "\n" + DEVECHO "CHUSB: IO=" + DEVECHO CH0BASE + DEVECHO "\n" #ENDIF #ENDIF ; @@ -82,9 +82,9 @@ CHUSB_CFG1: .DW CH1_MODE ; POINTER TO MODE BYTE ; #IF (CH1USBENABLE) - .ECHO "CHUSB: IO=" - .ECHO CH1BASE - .ECHO "\n" + DEVECHO "CHUSB: IO=" + DEVECHO CH1BASE + DEVECHO "\n" #ENDIF #ENDIF ; diff --git a/Source/HBIOS/ctc.asm b/Source/HBIOS/ctc.asm index 777b28f8..2fd205ea 100644 --- a/Source/HBIOS/ctc.asm +++ b/Source/HBIOS/ctc.asm @@ -28,19 +28,19 @@ CTC_TIM256CFG .EQU %00110111 ; CTC TIMER/256 MODE CONFIG #IF (CTCTIMER & (INTMODE != 2)) .ECHO "*** WARNING: CTC TIMER DISABLED -- INTMODE 2 REQUIRED!!!\n" #ENDIF - .ECHO "CTC: IO=" - .ECHO CTCBASE + DEVECHO "CTC: IO=" + DEVECHO CTCBASE ; #IF (CTCTIMER & (INTMODE == 2)) ; #IF (INT_CTC0A % 4) - .ECHO INT_CTC0A - .ECHO "\n" - .ECHO (INT_CTC0A % 4) - .ECHO "\n" + DEVECHO INT_CTC0A + DEVECHO "\n" + DEVECHO (INT_CTC0A % 4) + DEVECHO "\n" - .ECHO "*** ERROR: CTC BASE VECTOR NOT DWORD ALIGNED!!!\n" + DEVECHO "*** ERROR: CTC BASE VECTOR NOT DWORD ALIGNED!!!\n" !!! ; FORCE AN ASSEMBLY ERROR #ENDIF ; @@ -112,23 +112,23 @@ CTC_DIVHI .EQU CTCPRE CTC_DIVLO .EQU (CTC_DIV / CTC_DIVHI) ; - .ECHO ", TIMER MODE=" + DEVECHO ", TIMER MODE=" #IF (CTCMODE == CTCMODE_CTR) - .ECHO "COUNTER" + DEVECHO "COUNTER" #ENDIF #IF (CTCMODE == CTCMODE_TIM16) - .ECHO "TIMER/16" + DEVECHO "TIMER/16" #ENDIF #IF (CTCMODE == CTCMODE_TIM256) - .ECHO "TIMER/256" + DEVECHO "TIMER/256" #ENDIF - .ECHO ", DIVISOR=" - .ECHO CTC_DIV - .ECHO ", HI=" - .ECHO CTC_DIVHI - .ECHO ", LO=" - .ECHO CTC_DIVLO - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", DIVISOR=" + DEVECHO CTC_DIV + DEVECHO ", HI=" + DEVECHO CTC_DIVHI + DEVECHO ", LO=" + DEVECHO CTC_DIVLO + DEVECHO ", INTERRUPTS ENABLED" ; #IF ((CTC_DIV == 0) | (CTC_DIV > $FFFF)) .ECHO "COMPUTED CTC DIVISOR IS UNUSABLE!\n" @@ -148,7 +148,7 @@ CTCTIVT .EQU INT_CTC0A + CTCTIMCH ; #ENDIF ; - .ECHO "\n" + DEVECHO "\n" ; ;================================================================================================== ; CTC PRE-INITIALIZATION diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index adbe84c9..8fce3e31 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -18,7 +18,7 @@ ; CVDU_BASE .EQU $E0 ; - .ECHO "CVDU: MODE=" + DEVECHO "CVDU: MODE=" ; #IF (CVDUMODE == CVDUMODE_ECB) CVDU_KBDDATA .EQU CVDU_BASE + $02 ; KBD CTLR DATA PORT @@ -26,7 +26,7 @@ CVDU_KBDST .EQU CVDU_BASE + $0A ; KBD CTLR STATUS/CMD PORT CVDU_STAT .EQU CVDU_BASE + $04 ; READ M8563 STATUS CVDU_REG .EQU CVDU_BASE + $04 ; SELECT M8563 REGISTER CVDU_DATA .EQU CVDU_BASE + $0C ; READ/WRITE M8563 DATA - .ECHO "ECB" + DEVECHO "ECB" #ENDIF ; #IF (CVDUMODE == CVDUMODE_MBC) @@ -35,15 +35,15 @@ CVDU_KBDST .EQU CVDU_BASE + $03 ; KBD CTLR STATUS/CMD PORT CVDU_STAT .EQU CVDU_BASE + $04 ; READ M8563 STATUS CVDU_REG .EQU CVDU_BASE + $04 ; SELECT M8563 REGISTER CVDU_DATA .EQU CVDU_BASE + $05 ; READ/WRITE M8563 DATA - .ECHO "MBC" + DEVECHO "MBC" #ENDIF ; - .ECHO ", IO=" - .ECHO CVDU_BASE - .ECHO ", KBD MODE=PS/2" - .ECHO ", KBD IO=" - .ECHO CVDU_KBDDATA - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO CVDU_BASE + DEVECHO ", KBD MODE=PS/2" + DEVECHO ", KBD IO=" + DEVECHO CVDU_KBDDATA + DEVECHO "\n" ; CVDU_ROWS .EQU 25 CVDU_COLS .EQU 80 diff --git a/Source/HBIOS/dma.asm b/Source/HBIOS/dma.asm index 18d0ff8c..05ac7a03 100644 --- a/Source/HBIOS/dma.asm +++ b/Source/HBIOS/dma.asm @@ -3,17 +3,17 @@ ;================================================================================================== ; ; - .ECHO "DMA: MODE=" + DEVECHO "DMA: MODE=" ; #IF ((DMAMODE == DMAMODE_ECB) | (DMAMODE == DMAMODE_MBC)) DMA_IO .EQU DMABASE DMA_CTL .EQU DMABASE + 1 DMA_USEHALF .EQU TRUE #IF (DMAMODE == DMAMODE_ECB) - .ECHO "ECB" + DEVECHO "ECB" #ENDIF #IF (DMAMODE == DMAMODE_MBC) - .ECHO "MBC" + DEVECHO "MBC" #ENDIF #ENDIF ; @@ -21,12 +21,12 @@ DMA_USEHALF .EQU TRUE DMA_IO .EQU DMABASE DMA_CTL .EQU DMABASE + 3 DMA_USEHALF .EQU FALSE - .ECHO "DUO" + DEVECHO "DUO" #ENDIF ;S - .ECHO ", IO=" - .ECHO DMA_IO - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO DMA_IO + DEVECHO "\n" ; DMA_CONTINUOUS .equ %10111101 ; + Pulse DMA_BYTE .equ %10011101 ; + Pulse diff --git a/Source/HBIOS/ds1501rtc.asm b/Source/HBIOS/ds1501rtc.asm index daf42ae3..fb50f4ec 100644 --- a/Source/HBIOS/ds1501rtc.asm +++ b/Source/HBIOS/ds1501rtc.asm @@ -111,11 +111,11 @@ DS1501RTC_TE .EQU %10000000 ; DS1501RTC_BUFSIZE .EQU 6 ; 6 BYTE BUFFER (YYMMDDHHMMSS) - .ECHO "DS1501RTC: RTCIO=" - .ECHO DS1501RTC_BASE - .ECHO ", NVMIO=" - .ECHO DS1501NVM_BASE - .ECHO "\n" + DEVECHO "DS1501RTC: RTCIO=" + DEVECHO DS1501RTC_BASE + DEVECHO ", NVMIO=" + DEVECHO DS1501NVM_BASE + DEVECHO "\n" ; ; RTC Device Initialization Entry ; diff --git a/Source/HBIOS/ds7rtc.asm b/Source/HBIOS/ds7rtc.asm index 7dd6970c..4014b26e 100644 --- a/Source/HBIOS/ds7rtc.asm +++ b/Source/HBIOS/ds7rtc.asm @@ -23,7 +23,7 @@ DS7_WRITE .EQU (DS7_DS1307 | DS7_W) ; WRITE ; DS7_CTL .EQU (DS7_OUT | DS7_SQWE | DS7_RATE) ; - .ECHO "DS1307: ENABLED\n" + DEVECHO "DS1307: ENABLED\n" ; ;----------------------------------------------------------------------------- ; DS1307 INITIALIZATION diff --git a/Source/HBIOS/dsrtc.asm b/Source/HBIOS/dsrtc.asm index 0f20b987..f7e89631 100644 --- a/Source/HBIOS/dsrtc.asm +++ b/Source/HBIOS/dsrtc.asm @@ -66,30 +66,30 @@ ; RTC LATCH WRITE ; --------------- ; -; BIT SBC RCBUS SBC-004 MFPIC K80W N8 N8-CSIO MK4 SC130 SC131 SC126 MBC RPH -; ----- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- --------------- ------- ------- -; D7 RTC_OUT RTC_OUT RTC_OUT -- -- RTC_OUT RTC_OUT RTC_OUT -- -- RTC_OUT,I2C_SDA RTC_OUT RTC_OUT -; D6 RTC_CLK RTC_CLK RTC_CLK -- -- RTC_CLK RTC_CLK RTC_CLK -- -- RTC_CLK RTC_CLK RTC_CLK -; D5 /RTC_WE /RTC_WE /RTC_WE -- -- /RTC_WE /RTC_WE /RTC_WE -- -- /RTC_WE /RTC_WE /RTC_WE -; D4 RTC_CE RTC_CE RTC_CE -- -- RTC_CE RTC_CE RTC_CE -- -- RTC_CE RTC_CE RTC_CE -; D3 NC NC CLKSEL /RTC_CE /RTC_CE NC NC NC -- -- /SPI_CS2 CLKSEL -- -; D2 NC NC SPK RTC_CLK RTC_CLK SPI_CS SPI_CS NC /SPI_CS1/SPI_CS1/SPI_CS1 SPK -- -; D1 -- -- -- RTC_WE RTC_WE SPI_CLK NC NC -- -- FS LED1 -- -; D0 -- -- -- RTC_OUT RTC_OUT SPI_DI NC NC -- -- I2C_SCL LED0 -- -; -; RTC LATCH READTCH READ -; ---------------------- -; -; D7 -- -- -- -- -- -- -- -- -- -- I2C_SDA -- -- -; D6 CFG -- CFG -- -- SPI_DO CFG -- -- -- -- CFG -- -; D5 -- -- -- -- -- -- -- -- -- -- -- -- -- -; D4 -- -- -- -- -- -- -- -- -- -- -- -- -- -; D3 -- -- -- -- -- -- -- -- -- -- -- -- -- -; D2 -- -- -- -- -- -- -- -- -- -- -- -- -- -; D1 -- -- -- -- -- -- -- -- -- -- -- CLKSEL -- -; D0 RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN -- -- RTC_IN RTC_IN RTC_IN -; - .ECHO "DSRTC: MODE=" +; BIT SBC RCBUS SBC-004 MFPIC K80W N8 N8-CSIO MK4 SC126 SC130 SC131 SC140 SC503 SC722 MBC RPH +; ----- ------- ------- ------- ------- ------- ------- ------- ------- --------------- ------- ------- ------- ------- ------- ------- ------- +; D7 RTC_OUT RTC_OUT RTC_OUT -- -- RTC_OUT RTC_OUT RTC_OUT RTC_OUT,I2C_SDA -- -- -- -- -- RTC_OUT RTC_OUT +; D6 RTC_CLK RTC_CLK RTC_CLK -- -- RTC_CLK RTC_CLK RTC_CLK RTC_CLK -- -- -- -- -- RTC_CLK RTC_CLK +; D5 /RTC_WE /RTC_WE /RTC_WE -- -- /RTC_WE /RTC_WE /RTC_WE /RTC_WE -- -- -- -- -- /RTC_WE /RTC_WE +; D4 RTC_CE RTC_CE RTC_CE -- -- RTC_CE RTC_CE RTC_CE RTC_CE -- -- -- -- -- RTC_CE RTC_CE +; D3 NC NC CLKSEL /RTC_CE /RTC_CE NC NC NC /SPI_CS2 -- -- -- -- -- CLKSEL -- +; D2 NC NC SPK RTC_CLK RTC_CLK SPI_CS SPI_CS NC /SPI_CS1 /SPI_CS1/SPI_CS1/SPI_CS1/SPI_CS1/SPI_CS1SPK -- +; D1 -- -- -- RTC_WE RTC_WE SPI_CLK NC NC FS -- -- -- -- -- LED1 -- +; D0 -- -- -- RTC_OUT RTC_OUT SPI_DI NC NC I2C_SCL -- -- -- -- -- LED0 -- +; +; RTC LATCH LATCH READ +; -------------------- +; +; D7 -- -- -- -- -- -- -- -- I2C_SDA -- -- -- -- -- -- -- +; D6 CFG -- CFG -- -- SPI_DO CFG -- -- -- -- -- -- -- CFG -- +; D5 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +; D4 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +; D3 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +; D2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +; D1 -- -- -- -- -- -- -- -- -- -- -- -- -- -- CLKSEL -- +; D0 RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN RTC_IN -- -- -- -- -- RTC_IN RTC_IN +; + DEVECHO "DSRTC: MODE=" ; #IF (DSRTCMODE == DSRTCMODE_STD) ; @@ -107,7 +107,7 @@ RTCDEF .SET RTCDEF | DSRTC_IDLE ; FOR HBIOS MAINLINE ; #DEFINE DSRTC_OPRVAL HB_RTCVAL ; - .ECHO "STD" + DEVECHO "STD" ; #ENDIF ; @@ -125,7 +125,7 @@ DSRTC_IDLE .EQU %00001000 ; QUIESCENT STATE ; #DEFINE DSRTC_OPRVAL DSRTC_RTCVAL ; - .ECHO "MFPIC" + DEVECHO "MFPIC" ; #ENDIF ; @@ -143,13 +143,13 @@ DSRTC_IDLE .EQU %00001000 ; QUIESCENT STATE ; #DEFINE DSRTC_OPRVAL HB_RTCVAL ; - .ECHO "K80W" + DEVECHO "K80W" ; #ENDIF ; - .ECHO ", IO=" - .ECHO DSRTC_IO - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO DSRTC_IO + DEVECHO "\n" ; ; VALUES FOR DIFFERENT BATTERY OR SUPERCAPACITOR CHARGE RATES ; diff --git a/Source/HBIOS/duart.asm b/Source/HBIOS/duart.asm index 91213874..c6ab5fc8 100644 --- a/Source/HBIOS/duart.asm +++ b/Source/HBIOS/duart.asm @@ -823,9 +823,9 @@ DUART0A_CFG: .DW DUART0ACFG ; IY+8 LINE CONFIGURATION .DB 1 ; IY+10 MULTIPLIER WRT 3.6864MHZ CLOCK ; - .ECHO "DUART: IO=" - .ECHO DUART0BASE + $00 - .ECHO ", CHANNEL A\n" + DEVECHO "DUART: IO=" + DEVECHO DUART0BASE + $00 + DEVECHO ", CHANNEL A\n" ; DUART_CFGSIZ .EQU $ - DUART_CFG ; SIZE OF ONE CFG TABLE ENTRY ; @@ -840,9 +840,9 @@ DUART0B_CFG: .DW DUART0BCFG ; LINE CONFIGURATION .DB 1 ; MULTIPLIER WRT 3.6864MHZ CLOCK ; - .ECHO "DUART: IO=" - .ECHO DUART0BASE + $08 - .ECHO ", CHANNEL B\n" + DEVECHO "DUART: IO=" + DEVECHO DUART0BASE + $08 + DEVECHO ", CHANNEL B\n" ; #IF (DUARTCNT >= 2) ; @@ -857,9 +857,9 @@ DUART1A_CFG: .DW DUART1ACFG ; LINE CONFIGURATION .DB 1 ; MULTIPLIER WRT 3.6864MHZ CLOCK ; - .ECHO "DUART: IO=" - .ECHO DUART1BASE + $00 - .ECHO ", CHANNEL A\n" + DEVECHO "DUART: IO=" + DEVECHO DUART1BASE + $00 + DEVECHO ", CHANNEL A\n" ; DUART1B_CFG: ; 2ND DUART MODULE CHANNEL B @@ -872,9 +872,9 @@ DUART1B_CFG: .DW DUART1BCFG ; LINE CONFIGURATION .DB 1 ; MULTIPLIER WRT 3.6864MHZ CLOCK ; - .ECHO "DUART: IO=" - .ECHO DUART1BASE + $08 - .ECHO ", CHANNEL B\n" + DEVECHO "DUART: IO=" + DEVECHO DUART1BASE + $08 + DEVECHO ", CHANNEL B\n" ; #ENDIF ; diff --git a/Source/HBIOS/ef.asm b/Source/HBIOS/ef.asm index 9d6228f3..63ba2bf4 100644 --- a/Source/HBIOS/ef.asm +++ b/Source/HBIOS/ef.asm @@ -153,6 +153,10 @@ EF_FG_CYAN .EQU 6 EF_FG_WHITE .EQU 7 ; EF_SCREENSIZE .EQU EF_DROWS * EF_DLINES +; + DEVECHO "EF: IO=" + DEVECHO EF_BASE + DEVECHO "\n" ; ;====================================================================== ; VDU DRIVER - INITIALIZATION diff --git a/Source/HBIOS/esp.asm b/Source/HBIOS/esp.asm index 75b4d58b..5a76ffb7 100644 --- a/Source/HBIOS/esp.asm +++ b/Source/HBIOS/esp.asm @@ -54,9 +54,9 @@ ESP_CFG_ST .EQU 2 ; ESP STATUS PORT ESP_CFG_RDYMSK .EQU 3 ; ESP READY MASK ESP_CFG_BSYMSK .EQU 4 ; ESP BUSY MASK ; - .ECHO "ESP: IO=" - .ECHO ESP_IOBASE - .ECHO "\n" + DEVECHO "ESP: IO=" + DEVECHO ESP_IOBASE + DEVECHO "\n" ; ; GLOBAL ESP INITIALIZATION ; @@ -348,7 +348,7 @@ ESP_STR_UPGRADE .TEXT "!!!UPGRADE REQUIRED!!!$" ESPCON_ROWS .EQU 25 ; VGA DISPLAY ROWS ESPCON_COLS .EQU 80 ; VGA DISPLAY COLS ; - .ECHO "ESPCON: ENABLED\n" + DEVECHO "ESPCON: ENABLED\n" ; ; ; @@ -692,7 +692,7 @@ ESPSER0_CFG: .DB ESP_0_BUSY ; ESP BUSY BIT MASK .DW ESPSER_LINECFG ; LINE CONFIGURATION ; - .ECHO "ESPSER: DEVICE=0\n" + DEVECHO "ESPSER: DEVICE=0\n" ; ESPSER1_CFG: .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) @@ -702,7 +702,7 @@ ESPSER1_CFG: .DB ESP_1_BUSY ; ESP BUSY BIT MASK .DW ESPSER_LINECFG ; LINE CONFIGURATION ; - .ECHO "ESPSER: DEVICE=1\n" + DEVECHO "ESPSER: DEVICE=1\n" ; ; ; diff --git a/Source/HBIOS/fd.asm b/Source/HBIOS/fd.asm index fc52bf77..5888f4a1 100644 --- a/Source/HBIOS/fd.asm +++ b/Source/HBIOS/fd.asm @@ -152,31 +152,31 @@ FD_CFGTBL: .DB 0 ; HOST HEAD .DB FD0TYPE ; DRIVE TYPE ; - .ECHO "FD: MODE=" - .ECHO FDMODE_STR - .ECHO ", IO=" - .ECHO FDC_MSR - .ECHO ", DRIVE 0" - .ECHO ", TYPE=" + DEVECHO "FD: MODE=" + DEVECHO FDMODE_STR + DEVECHO ", IO=" + DEVECHO FDC_MSR + DEVECHO ", DRIVE 0" + DEVECHO ", TYPE=" #IF (FD0TYPE == FDT_NONE - .ECHO "NONE" + DEVECHO "NONE" #ENDIF #IF (FD0TYPE == FDT_3DD - .ECHO "3.5\" DD" + DEVECHO "3.5\" DD" #ENDIF #IF (FD0TYPE == FDT_3HD - .ECHO "3.5\" HD" + DEVECHO "3.5\" HD" #ENDIF #IF (FD0TYPE == FDT_5DD - .ECHO "5.25\" DD" + DEVECHO "5.25\" DD" #ENDIF #IF (FD0TYPE == FDT_5HD - .ECHO "5.25\" HD" + DEVECHO "5.25\" HD" #ENDIF #IF (FD0TYPE == FDT_8 - .ECHO "8\" DD" + DEVECHO "8\" DD" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; #IF (FD_DEVCNT >= 2) ; DEVICE 1, PRIMARY SLAVE @@ -189,31 +189,31 @@ FD_CFGTBL: .DB 0 ; HOST HEAD .DB FD1TYPE ; DRIVE TYPE ; - .ECHO "FD: MODE=" - .ECHO FDMODE_STR - .ECHO ", IO=" - .ECHO FDC_MSR - .ECHO ", DRIVE 1" - .ECHO ", TYPE=" + DEVECHO "FD: MODE=" + DEVECHO FDMODE_STR + DEVECHO ", IO=" + DEVECHO FDC_MSR + DEVECHO ", DRIVE 1" + DEVECHO ", TYPE=" #IF (FD1TYPE == FDT_NONE - .ECHO "NONE" + DEVECHO "NONE" #ENDIF #IF (FD1TYPE == FDT_3DD - .ECHO "3.5\" DD" + DEVECHO "3.5\" DD" #ENDIF #IF (FD1TYPE == FDT_3HD - .ECHO "3.5\" HD" + DEVECHO "3.5\" HD" #ENDIF #IF (FD1TYPE == FDT_5DD - .ECHO "5.25\" DD" + DEVECHO "5.25\" DD" #ENDIF #IF (FD1TYPE == FDT_5HD - .ECHO "5.25\" HD" + DEVECHO "5.25\" HD" #ENDIF #IF (FD1TYPE == FDT_8 - .ECHO "8\" DD" + DEVECHO "8\" DD" #ENDIF - .ECHO "\n" + DEVECHO "\n" #ENDIF ; #IF ($ - FD_CFGTBL) != (FD_DEVCNT * FD_CFGSIZ) diff --git a/Source/HBIOS/gdc.asm b/Source/HBIOS/gdc.asm index a73a432c..6e0fc085 100644 --- a/Source/HBIOS/gdc.asm +++ b/Source/HBIOS/gdc.asm @@ -37,32 +37,32 @@ GDC_COLS .EQU 80 ; BE USED TO ALLOW FOR MULTIPLE MONITOR TIMINGS AND/OR FONT ; DEFINITIONS. ; - .ECHO "GDC: MODE=" + DEVECHO "GDC: MODE=" ; #IF (GDCMODE == GDCMODE_ECB) - .ECHO "ECB" + DEVECHO "ECB" #ENDIF #IF (GDCMODE == GDCMODE_RPH) - .ECHO "RPH" + DEVECHO "RPH" #ENDIF ; - .ECHO ", DISPLAY=" + DEVECHO ", DISPLAY=" ; #IF (GDCMON == GDCMON_CGA) #DEFINE USEFONTCGA #DEFINE GDC_FONT FONTCGA - .ECHO "CGA" + DEVECHO "CGA" #ENDIF ; #IF (GDCMON == GDCMON_EGA) #DEFINE USEFONT8X16 #DEFINE GDC_FONT FONT8X16 - .ECHO "EGA" + DEVECHO "EGA" #ENDIF ; - .ECHO ", IO=" - .ECHO GDC_BASE - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO GDC_BASE + DEVECHO "\n" ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT diff --git a/Source/HBIOS/h8p.asm b/Source/HBIOS/h8p.asm index 8ccb96ad..234283f5 100644 --- a/Source/HBIOS/h8p.asm +++ b/Source/HBIOS/h8p.asm @@ -11,6 +11,11 @@ ; 20 08 ; +--10--+ 80 ; +; + DEVECHO "H8P: IO=??" + ;DEVECHO 0 + DEVECHO "\n" +; ;__H8P_PREINIT_______________________________________________________________________________________ ; ; CONFIGURE AND RESET PANEL diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index db0466d1..e0f6fb41 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -65,6 +65,27 @@ ; - [xio|mio].asm ; - unlzsa2s.asm ; +; MEMORY LAYOUT: +; +; +; DESCRIPTION START LENGTH +; ----------------------------- ------- ------- +; Page Zero 0x0000 0x0100 +; HBIOS Control Block 0x0100 0x0100 +; Proxy Image 0x0200 0x0200 +; Entry Vectors / Stack 0x0400 0x0100 +; Interrupt Vectors 0x0500 Varies +; System Initialization Varies Varies +; Function Dispatching Varies Varies +; System API Varies Varies +; Z280 Int Vector Table Varies Varies +; Internal Functions Varies Varies +; Utility Functions Varies Varies +; Print Summary Function Varies Varies +; Hardware Drivers Varies Varies +; Font Data Varies Varies +; HBIOS Data Varies Varies +; ; AUXILIARY CONTROL REGISTER ; -------------------------- ; @@ -81,20 +102,19 @@ ; ; PORT SCG:0x9C 0x94 VDP:0x92 PSG:0xA2 0x80 MEDIA:0xA6 ; -; -; INCLUDE GENERIC STUFF -; -#INCLUDE "std.asm" -; #DEFINE HBIOS ; -SUPCTS .EQU FALSE ; SUPPRESS CTS DURING HBIOS BOOT -; ; MAKE SURE EXACTLY ONE OF ROMBOOT, APPBOOT, IMGBOOT IS DEFINED. ; MODCNT .EQU 0 #IFDEF ROMBOOT MODCNT .SET MODCNT + 1 +; + #DEFINE BNKINFO + #DEFINE MEMINFO + #DEFINE DEVINFO + #DEFINE SYSINFO +; #ENDIF #IFDEF APPBOOT MODCNT .SET MODCNT + 1 @@ -107,36 +127,67 @@ MODCNT .SET MODCNT + 1 !!! ; FORCE AN ASSEMBLY ERROR #ENDIF ; +; CONTROLS PRINTING OF DEVICE INFORMATION IN ASSEMBLY OUTPUT +; +#IFDEF DEVINFO + #DEFINE DEVECHO .ECHO +#ELSE + #DEFINE DEVECHO \; +#ENDIF +; +; CONTROLS PRINTING OF MEMORY USAGE INFORMATION IN ASSEMBLY OUTPUT +; +#IFDEF MEMINFO + #DEFINE MEMECHO .ECHO +#ELSE + #DEFINE MEMECHO \; +#ENDIF +; +; INCLUDE GENERIC STUFF +; +#INCLUDE "std.asm" +; +SUPCTS .EQU FALSE ; SUPPRESS CTS DURING HBIOS BOOT ; +; HELPER MACROS ; -#DEFINE ALIGN(N) .FILL ((($+(N-1)) & ~(N-1)) - $) +; SET FRONT PANEL LEDS ; #IF (FPLED_ENABLE) - #DEFINE DIAG(N) PUSH AF + #DEFINE FPLEDS(N) PUSH AF #DEFCONT \ LD A,N #DEFCONT \ CALL FP_SETLEDS #DEFCONT \ POP AF #ELSE - #DEFINE DIAG(N) \; + #DEFINE FPLEDS(N) \; #ENDIF ; -; SCxxx: LED Port=0x0E, bit 2, inverted, dedicated port -; TinyZ80: LED Port=0x6E, bit 0, inverted, dedicated port -; Z80-512K: LED Port=0x6E, bit 0, inverted, dedicated port -; MBC: LED Port=0x70, bits 1-0, normal, shared w/ RTC port -; DUO: LED Port=0x94, bits 1-0, normal, shared w/ RTC port -; S100: LED Port = $0E, bit 2, inverted, dedicated port -; NABU: LED Port = $00, bits 5-3, normal, shared port +; SET DIAGNOSTIC LEDS +; +; SCxxx: LED Port=0x0E, bit 2, inverted, dedicated port (LEDMODE_SC) +; SC7xx: LED Port=0x0E, bit 0, inverted, dedicated port (LEDMODE_STD) +; TinyZ80: LED Port=0x6E, bit 0, inverted, dedicated port (LEDMODE_STD) +; Z80-512K: LED Port=0x6E, bit 0, inverted, dedicated port (LEDMODE_STD) +; MBC: LED Port=0x70, bits 1-0, normal, shared w/ RTC port (LEDMODE_RTC) +; DUO: LED Port=0x94, bits 1-0, normal, shared w/ RTC port (LEDMODE_RTC) +; S100: LED Port = $0E, bit 2, inverted, dedicated port (LEDMODE_SC) +; NABU: LED Port = $00, bits 5-3, normal, shared w/ control port (LEDMODE_NABU) ; #IF (LEDENABLE) #IF (LEDMODE == LEDMODE_STD) - #DEFINE LED(N) PUSH AF + #DEFINE DIAG(N) PUSH AF #DEFCONT \ LD A,~N #DEFCONT \ OUT (LEDPORT),A #DEFCONT \ POP AF #ENDIF + #IF (LEDMODE == LEDMODE_SC) + #DEFINE DIAG(N) PUSH AF + #DEFCONT \ LD A,+(((~N) << 2) & %00000100) + #DEFCONT \ OUT (LEDPORT),A + #DEFCONT \ POP AF + #ENDIF #IF (LEDMODE == LEDMODE_RTC) - #DEFINE LED(N) PUSH AF + #DEFINE DIAG(N) PUSH AF #DEFCONT \ LD A,(HB_RTCVAL) #DEFCONT \ AND %11111100 #DEFCONT \ OR (N & %00000011) @@ -145,21 +196,25 @@ MODCNT .SET MODCNT + 1 #DEFCONT \ POP AF #ENDIF #IF (LEDMODE == LEDMODE_NABU) - #DEFINE LED(N) PUSH AF - #DEFCONT \ LD A,+(((N << 3)) & %00011000) + #DEFINE DIAG(N) PUSH AF + #DEFCONT \ LD A,+((N << 3) & %00011000) #DEFCONT \ OUT (LEDPORT),A #DEFCONT \ POP AF #ENDIF #ELSE - #DEFINE LED(N) \; + #DEFINE DIAG(N) \; #ENDIF ; +; HANDLE SYSTEM CHECK ERRORS +; #DEFINE SYSCHKERR(HB_ERR) \ #DEFCONT \ CALL SYSCHKA #DEFCONT \ LD A,HB_ERR #DEFCONT \ OR A ; -; +; THE HB_EI AND HB_DI MACROS ARE USED TO GENERATE THE APPROPRIATE +; INTERRUPT ENABLE/DISABLE CODE DEPENDING ON THE INTERRUPT MODE +; BEING USED. ; #IF (INTMODE == 0) ; NO INTERRUPT HANDLING @@ -182,6 +237,8 @@ MODCNT .SET MODCNT + 1 #ENDIF #ENDIF ; +; CONSISTENCY CHECKS +; #IF (INTMODE > 3) .ECHO "*** ERROR: INVALID INTMODE SETTING!!!\n" !!! ; FORCE AN ASSEMBLY ERROR @@ -217,56 +274,83 @@ MODCNT .SET MODCNT + 1 ; #DEFINE Z2_BANK(X) (PBANK(X) << 3) ; +; RTC LATCH +; +; MANY OF THE ROMWBW SYSTEMS USE A LATCH PORT PRIMARILY FOR BIT +; BANGING A DS-1302 RTC. HOWEVER, SINCE THE RTC ONLY NEEDS A COUPLE +; BITS, THE OTHER BITS OF THE LATCH ARE FREQUENTY USED FOR OTHER +; PURPOSES (LEDS, SD CARD BIT BANGING, ETC.). SEE DSRTC.ASM FOR +; A SUMMARY OF THE WAY THE RTC LATCH BITS ARE USED IN THE VARIOUS +; ROMWBW SYSTEMS. IT IS CRITICAL THAT WHEN MANIPULATING THE RTC +; LATCH THAT BITS ARE NOT FLIPPED INADVERTENTLY. THE RTC LATCH IS +; TYPICALLY WRITE-ONLY, SO WE NEED TO MAINTAIN A SHADOW COPY. +; THE SHADOW COPY IS CALLED HB_RTCVAL AND IS DECLARED AT THE END OF +; THIS FILE IN THE DATA AREA. +; +; INITIALIZING THE HB_RTCVAL SHADOW IS TRICKY BECAUSE DIFFERENT BITS +; ARE MANAGED IN DIFFERENT DRIVERS. TO HANDLE THIS, ; THE RTCDEF EQUATE IS INITIALIZED HERE AND UPDATED BY DRIVER INCLUDES ; THAT SHARE THE RTC LATCH. AS EACH DRIVER FILE IS INCLUDED, IT CAN -; USE .SET TO SET ANY BITS THEY OWN WITHIN THE RTC LATCH BYTE. -; SINCE RTCDEF IS CHANGED AFTER IT NEEDS TO BE USED BY THE CODE, IT -; CANNOT BE USED DIRECTLY TO SET THE LATCH. INSTEAD, THE FINAL VALUE +; USE .SET TO MODIFY THE DEFAULT VALUE OF ANY BITS THEY OWN. +; SINCE RTCDEF IS CHANGED *AFTER* IT NEEDS TO BE USED BY THE CODE, IT +; SHOULD NOT BE USED DIRECTLY TO SET THE LATCH. INSTEAD, THE FINAL VALUE ; OF RTCDEF IS USED TO INITIALIZE A STORAGE BYTE CALLED RTCDEFVAL AT -; THE END OF HBIOS.ASM. SO (RTCDEFVAL) CAN BE USED ANYWHERE IN -; HBIOS.ASM TO ACCESS THE FINAL RTCDEF VALUE. +; THE END OF THIS FILE. SO (RTCDEFVAL) CAN BE USED ANYWHERE IN +; HBIOS.ASM TO ACCESS THE FINAL RTCDEF VALUE. IN MOST PLACES, THE +; SHADOW COPY (RTCVAL) SHOULD BE USED TO GET THE CURRENT VALUE OF THE +; LATCH AND MAINTAIN ALL BIT CHANGES. ; -RTCDEF .EQU 0 ; ALLOWS DRIVERS TO SET BITS +RTCDEF .EQU 0 ; INIT DEF RTC LATCH VALUE +; +; THE SC126 HAS AN I2C CIRCUIT AND THERE IS NO ASSOCAITED +; DRIVER, SO WE SET THAT BIT HERE. IT IS SET FOR ALL OF THE SCXXX +; SYSTEMS, BUT IS UNUSED ON ALL BUT THE SC126. IT DOES NO HARM. ; #IF (PLATFORM == PLT_SCZ180) -RTCDEF .SET RTCDEF | %00000001 ; SC128 I2C SCL BIT +RTCDEF .SET RTCDEF | %00000001 ; SC128 I2C SCL BIT #ENDIF ; +; MBC PLATFORM IMPLEMENTS DYNAMIC SPEED SWITCH ON RTC LATCH +; BIT 3. SET THE BIT TO LOW SPEED AS DEFAULT HERE. +; #IF ((CPUSPDCAP==SPD_HILO) & (PLATFORM==PLT_MBC)) -RTCDEF .SET RTCDEF & ~%00001000 ; INITIAL SPEED LOW +RTCDEF .SET RTCDEF & ~%00001000 ; INITIAL SPEED LOW #ENDIF ; +; DUODYNE PLATFORM IMPLEMENTS DYNAMIC SPEED SWITCH ON RTC LATCH +; BIT 3. SET THE BIT TO LOW SPEED AS DEFAULT HERE. +; #IF ((CPUSPDCAP==SPD_HILO) & (PLATFORM==PLT_SBC)) -RTCDEF .SET RTCDEF | %00001000 ; INITIAL SPEED LOW +RTCDEF .SET RTCDEF | %00001000 ; INITIAL SPEED LOW #ENDIF ; -; +; EMIT FRONT PANEL CONFIGURATION TO ASSEMBLY OUTPUT ; #IF (FPLED_ENABLE | FPSW_ENABLE) - .ECHO "FP: " + DEVECHO "FP: " #IF (FPLED_ENABLE) - .ECHO "LEDIO=" - .ECHO FPLED_IO + DEVECHO "LEDIO=" + DEVECHO FPLED_IO #ENDIF #IF (FPLED_ENABLE & FPSW_ENABLE) - .ECHO ", " + DEVECHO ", " #ENDIF #IF (FPSW_ENABLE) - .ECHO "SWIO=" - .ECHO FPSW_IO + DEVECHO "SWIO=" + DEVECHO FPSW_IO #ENDIF - .ECHO "\n" + DEVECHO "\n" #ENDIF ; -; -; -#IFNDEF APPBOOT +;================================================================================================== +; Z80 PAGE ZERO, VECTORS, ETC. +;================================================================================================== ; .ORG 0 ; -;================================================================================================== -; NORMAL PAGE ZERO SETUP, RET/RETI/RETN AS APPROPRIATE, LEAVE INTERRUPTS DISABLED -;================================================================================================== +HB_PGZERO_BEG .EQU $ +; +#IFNDEF APPBOOT ; .FILL (000H - $),0FFH ; RST 0 JP HB_START @@ -312,12 +396,19 @@ DESC .DB "Copyright (C) 2024, Wayne Warthen, GNU GPL v3", 0 .FILL ($100 - $),$FF ; PAD REMAINDER OF PAGE ZERO ; #ENDIF +; + .ORG $100 +; +HB_PGZERO_END .EQU $ ; ;================================================================================================== ; HBIOS CONFIGURATION BLOCK (HCB) ;================================================================================================== ; .ORG HCB_LOC +; +HB_HCB_BEG .EQU $ +; HCB: JP HB_START ; @@ -363,11 +454,15 @@ CB_APP_BNKS .DB APP_BNKS ; .FILL (HCB + HCB_SIZ - $),0 ; PAD REMAINDER OF HCB ; +HB_HCB_END .EQU $ +; ;================================================================================================== ; HBIOS UPPER MEMORY PROXY (RELOCATED TO RUN IN TOP 2 PAGES OF CPU RAM) ;================================================================================================== ; ; THE FOLLOWING CODE IS RELOCATED TO THE TOP OF MEMORY TO HANDLE INVOCATION DISPATCHING +; +HB_PROXY_BEG .EQU $ ; .FILL (HBX_IMG - $) ; FILL TO START OF PROXY IMAGE START .ORG HBX_LOC ; ADJUST FOR RELOCATION @@ -376,8 +471,9 @@ CB_APP_BNKS .DB APP_BNKS ; ; HBIOS PROXY CODE $FE00 (256 BYTES) ; INTERRUPT VECTORS $FF00 (32 BYTES, 16 ENTRIES) -; INTERRUPT HANDLER STUBS $FF20 (128 BYTES) -; HBIOS PROXY COPY BUFFER $FF80 (64 BYTES) +; INTERRUPT HANDLER STUBS $FF20 (64 BYTES) +; HBIOS PROXY CODE $FF60 (64 BYTES) +; HBIOS PROXY COPY BUFFER $FFA0 (64 BYTES) ; HBIOS PROXY MGMT BLOCK $FFE0 (32 BYTES) ; ; DEFINITIONS @@ -391,9 +487,7 @@ HBX_IDENT: .DB RMJ << 4 | RMN ; FIRST BYTE OF VERSION INFO .DB RUP << 4 | RTP ; SECOND BYTE OF VERSION INFO ; -;================================================================================================== -; HBIOS ENTRY FOR RST 08 PROCESSING -;================================================================================================== +; HBIOS ENTRY FOR RST 08 PROCESSING ; ; NOTE: THE SIZE OF HBX_TMPSTK (TYPICALLY 20 BYTES) IS INSUFFICIENT FOR ; FREERTOS IF AN INTERRUPT STRIKES WHILE THE TEMPORARY STACK IS ACTIVE. @@ -491,10 +585,8 @@ HBX_BNKSEL_INT: ; NEEDED WHEN USING INT MODE 1 BECAUSE THAT MODE REQUIRES ; PAGE ONE TO HAVE A VALID INT HANDLER WHENEVER INTS ARE ; ENABLED. - ;BIT 7,A ; [8] TEST RAM BIT - ;JR Z,HBX_ROM ; [12/7] IF NOT SET, JUST DO ROM - OR A ; [4] SET FLAGS - JP P,HBX_ROM ; [10] BIT 7 INDICATES RAM + OR A ; SET FLAGS + JP P,HBX_ROM ; BIT 7 INDICATES RAM #ENDIF OUT (MPCL_RAM),A ; SET RAM PAGE SELECTOR HBX_ROM: @@ -655,6 +747,97 @@ HBX_ROM: RET ; DONE #ENDIF ; +#IF (MEMMGR == MM_Z280) +; +; REG A HAS BANK ID, REG B HAS INITIAL PDR TO PROGRAM +; REGISTERS AF, BC, HL DESTROYED +; +Z280_BNKSEL: + ;; *DEBUG* + ;CALL PC_LBKT + ;CALL PRTHEXBYTE + ;CALL PC_RBKT + + ; SELECT I/O PAGE $FE (SAVING PREVIOUS VALUE) + LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER + LDCTL HL,(C) ; GET CURRENT I/O PAGE + PUSH HL ; SAVE IT + LD L,$FF ; NEW I/O PAGE + LDCTL (C),HL ; IMPLEMENT +; + ; CONVERT BANK ID TO TOP 12 BITS OF PHYSICAL ADDRESS + ; WITH $0A IN THE LOW ORDER NIBBLE: + ; BANK ID: R000 BBBB + ; PDR: R000 0BBB B000 1010 (RCBUS) + ; PDR: 0000 RBBB B000 1010 (ZZ80MB) +; + MULTU A,$80 ; HL=0R00 0BBB B000 0000 + BIT 6,H ; RAM BIT SET? + JR Z,Z280_BNKSEL2 ; IF NOT, ALL DONE + RES 6,H ; OTHERWISE, REMOVE RAM BIT + LD A,RAMBIAS >> 6 ; RAM OFFSET (TOP 8 BITS) + OR H ; RECOMBINE + LD H,A ; AND PUT BACK IN H +; +Z280_BNKSEL2: +; + ; SET LOW NIBBLE + LD A,$0A ; VALUE FOR LOW NIBBLE + ADD HL,A ; ADD HL,A ; HL=0000 RBBB B000 1010 +; + ; POINT TO FIRST PDR TO PROGRAM + LD A,B ; INITIAL PDR TO PROG + OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER +; + ; PROGRAM 8 PDRS + LD C,Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT + ;LD B,8 ; PROGRAM 8 PDRS + LD A,$10 ; PDR VALUE INCREMENT +Z280_BNKSEL3: + ; PROGRAM 8 PDR VALUES + ; LOOP UNROLLED FOR SPEED + OUTW (C),HL ; WRITE VALUE + ADD HL,A ; BUMP VALUE + OUTW (C),HL ; WRITE VALUE + ADD HL,A ; BUMP VALUE + OUTW (C),HL ; WRITE VALUE + ADD HL,A ; BUMP VALUE + OUTW (C),HL ; WRITE VALUE + ADD HL,A ; BUMP VALUE + OUTW (C),HL ; WRITE VALUE + ADD HL,A ; BUMP VALUE + OUTW (C),HL ; WRITE VALUE + ADD HL,A ; BUMP VALUE + OUTW (C),HL ; WRITE VALUE + ADD HL,A ; BUMP VALUE + OUTW (C),HL ; WRITE VALUE + ADD HL,A ; BUMP VALUE + ;DJNZ Z280_BNKSEL3 ; DO ALL PDRS +; + ; RESTORE I/O PAGE + LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER + POP HL ; RECOVER ORIGINAL I/O PAGE + LDCTL (C),HL +; + RET +; +Z280_BNKSEL_LEN .EQU $ - Z280_BNKSEL +; +#ENDIF +; +; Z280 SYSCALL VECTOR ENTRY POINT. TAKES STACK PARAMETER AS A BRANCH +; ADDRESS AND CALLS IT. ALLOWS ANY USER MODE CODE TO CALL INTO AN +; ARBITRARY LOCATION OF SYSTEM MODE CODE. +; +#IF (MEMMGR == MM_Z280) +Z280_SYSCALL: + EX (SP),HL + LD (Z280_SYSCALL_GO + 1),HL + POP HL +Z280_SYSCALL_GO: + CALL $FFFF ; PARM SET ABOVE + RETIL ; RETURN FROM INT +#ENDIF ; ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; Copy Data - Possibly between banks. This resembles CP/M 3, but @@ -837,44 +1020,23 @@ HBX_PPRET: HBX_PPSP .EQU $ - 2 RET ; -; SPECIAL ROUTINE IN HIGH MEMORY TO PERFORM A COLD START ON Z280 -; THIS REQUIRES US TO REMAP LOW MEMORY, THEN JUMP TO ZERO -; -#IF (MEMMGR == MM_Z280) -; -Z280_RESTART: - DI ; KILL INTERRUPTS - LD SP,HBX_LOC ; STACK IN HIGH MEMORY -; - ; COPY Z280 BANK SELECT ROUTINE TO HIGH MEMORY - LD HL,Z280_BNKSEL - LD DE,$8000 - LD BC,Z280_BNKSEL_LEN - LDIR -; - ; MAKE ROM BOOT BANK ACTIVE IN LOW SYS MEM - LD A,BID_BOOT - LD B,$10 ; FIRST SYS PDR - CALL $8000 ; DO IT -; - ; NOW JUST JUMP TO START OF ROM BOOT CODE - JP 0 -#ENDIF -; ; PRIVATE STACK AT END OF HBIOS CODE ; OCCUPIES SPACE BEFORE IVT ; +#IF (MEMMGR != MM_Z280) +; HBX_INTSTKSIZ .EQU $FF00 - $ - .ECHO "HBIOS INT STACK space: " - .ECHO HBX_INTSTKSIZ - .ECHO " bytes.\n" + MEMECHO "HBIOS INT STACK space: " + MEMECHO HBX_INTSTKSIZ + MEMECHO " bytes.\n" .FILL HBX_INTSTKSIZ,$FF HBX_INTSTK .EQU $ ; -;#IF (HBX_INTSTKSIZ < 24) -#IF (HBX_INTSTKSIZ < 22) + #IF (HBX_INTSTKSIZ < 22) .ECHO "*** ERROR: INTERRUPT STACK IS TOO SMALL!!!\n" !!! ; FORCE AN ASSEMBLY ERROR + #ENDIF +; #ENDIF ; ; HBIOS INTERRUPT SLOT ASSIGNMENTS @@ -897,6 +1059,9 @@ HBX_INTSTK .EQU $ ; 13 SIO0 ; 14 SIO1 ; 15 +; + ; IVT MUST START AT PAGE BOUNDARY + ALIGN($100) ; HBX_IVT: .DW HBX_IV00 @@ -1036,9 +1201,9 @@ HBX_INT_SP .EQU $ - 2 ; SMALL TEMPORARY STACK FOR USE BY HBX_BNKCPY ; HBX_TMPSTKSIZ .EQU (HBX_XFC - HBX_BUFSIZ - $) - .ECHO "HBIOS TEMP STACK space: " - .ECHO HBX_TMPSTKSIZ - .ECHO " bytes.\n" + MEMECHO "HBIOS TEMP STACK space: " + MEMECHO HBX_TMPSTKSIZ + MEMECHO " bytes.\n" .FILL HBX_TMPSTKSIZ,$CC HBX_TMPSTK .EQU $ ; @@ -1053,39 +1218,34 @@ HBX_BUF_END .EQU $ ; ; HBIOS PROXY MGMT BLOCK (TOP 32 BYTES) ; -#IFDEF ROMBOOT - .DB BID_BOOT ; HB_CURBNK: CURRENTLY ACTIVE LOW MEMORY BANK ID -#ELSE - .DB BID_USR ; HB_CURBNK: CURRENTLY ACTIVE LOW MEMORY BANK ID -#ENDIF - .DB $FF ; HB_INVBNK: BANK ACTIVE AT TIME OF HBIOS CALL INVOCATION - .DW 0 ; HB_SRCADR: BNKCPY SOURCE ADDRESS - .DB BID_USR ; HB_SRCBNK: BNKCPY SOURCE BANK ID - .DW 0 ; HB_DSTADR: BNKCPY DESTINATION ADDRESS - .DB BID_USR ; HB_DSTBNK: BNKCPY DESTINATION BANK ID - .DW 0 ; HB_CPYLEN: BNKCPY LENGTH - .DW 0 ; RESERVED FOR OPTIONAL TICK CTR, PLATFORM DEPENDENT - .DW 0 ; RESERVED FOR FUTURE HBIOS USE - .DB 0 ; SHADOW VALUE FOR RTC LATCH PORT - .DB $FE ; HB_LOCK: HBIOS MUTEX LOCK - JP HBX_INVOKE ; HB_INVOKE: FIXED ADR ENTRY FOR HBX_INVOKE (ALT FOR RST 08) - JP HBX_BNKSEL ; HB_BNKSEL: FIXED ADR ENTRY FOR HBX_BNKSEL - JP HBX_BNKCPY ; HB_BNKCPY: FIXED ADR ENTRY FOR HBX_BNKCPY - JP HBX_BNKCALL ; HB_BNKCALL: FIXED ADR ENTRY FOR HBX_BNKCALL - .DW HBX_IDENT ; ADDRESS OF HBIOS PROXY START (DEPRECATED) - .DW HBX_IDENT ; HB_IDENT: ADDRESS OF HBIOS IDENT INFO DATA BLOCK + .DB BID_BOOT ; (+0) HB_CURBNK: CURRENTLY ACTIVE LOW MEMORY BANK ID + .DB $FF ; (+1) HB_INVBNK: BANK ACTIVE AT TIME OF HBIOS CALL INVOCATION + .DW 0 ; (+2) HB_SRCADR: BNKCPY SOURCE ADDRESS + .DB BID_USR ; (+4) HB_SRCBNK: BNKCPY SOURCE BANK ID + .DW 0 ; (+5) HB_DSTADR: BNKCPY DESTINATION ADDRESS + .DB BID_USR ; (+7) HB_DSTBNK: BNKCPY DESTINATION BANK ID + .DW 0 ; (+8) HB_CPYLEN: BNKCPY LENGTH + .DW 0 ; (+10) RESERVED FOR OPTIONAL TICK CTR, PLATFORM DEPENDENT + .DW 0 ; (+12) RESERVED FOR FUTURE HBIOS USE + .DB 0 ; (+14) SHADOW VALUE FOR RTC LATCH PORT + .DB $FE ; (+15) HB_LOCK: HBIOS MUTEX LOCK + JP HBX_INVOKE ; (+16) HB_INVOKE: FIXED ADR ENTRY FOR HBX_INVOKE (ALT FOR RST 08) + JP HBX_BNKSEL ; (+19) HB_BNKSEL: FIXED ADR ENTRY FOR HBX_BNKSEL + JP HBX_BNKCPY ; (+22) HB_BNKCPY: FIXED ADR ENTRY FOR HBX_BNKCPY + JP HBX_BNKCALL ; (+25) HB_BNKCALL: FIXED ADR ENTRY FOR HBX_BNKCALL + .DW HBX_IDENT ; (+28) ADDRESS OF HBIOS PROXY START (DEPRECATED) + .DW HBX_IDENT ; (+30) HB_IDENT: ADDRESS OF HBIOS IDENT INFO DATA BLOCK ; .FILL MEMTOP - $ ; FILL TO END OF MEMORY (AS NEEDED) - .ORG HBX_IMG + HBX_SIZ ; RESET ORG + .ORG HBX_IMG + HBX_SIZ ; RESTORE ORG ; -;================================================================================================== -; HBIOS CORE -;================================================================================================== +HB_PROXY_END .EQU $ ; ;================================================================================================== ; ENTRY VECTORS (JUMP TABLE) AND INTERNAL PROCESSING STACK ;================================================================================================== ; +HB_ENTRY_BEG .EQU $ HB_ENTRYTBL .EQU $ ; JP HB_START ; HBIOS INITIALIZATION @@ -1098,6 +1258,7 @@ HB_STKSIZ .EQU $100 - ($ & $FF) ; .FILL HB_STKSIZ,$FF ; USE REMAINDER OF PAGE FOR HBIOS STACK HB_STACK .EQU $ ; TOP OF HBIOS STACK +HB_ENTRY_END .EQU $ ; ;================================================================================================== ; INTERRUPT VECTOR TABLE (MUST START AT PAGE BOUNDARY!!!) @@ -1116,6 +1277,8 @@ HB_STACK .EQU $ ; TOP OF HBIOS STACK ; NOTE THAT EACH ENTRY HAS A FILLER BYTE OF VALUE ZERO. THIS BYTE ; HAS NO FUNCTION. IT IS JUST USED TO MAKE ENTRIES AN EVEN 4 BYTES. ; +HB_INTVEC_BEG .EQU $ +; HB_IVT: HB_IVT00: JP HB_BADINT \ .DB 0 HB_IVT01: JP HB_BADINT \ .DB 0 @@ -1159,27 +1322,35 @@ HB_IM1INT: CALL HB_BADINT \ RET NZ CALL HB_BADINT \ RET NZ ; +HB_INTVEC_END .EQU $ +; ;================================================================================================== ; SYSTEM INITIALIZATION ;================================================================================================== ; +HB_SYSINIT_BEG .EQU $ +; HB_START: ; #IFDEF APPBOOT - #IF (MEMMGR == MM_Z280) - LD DE,Z280_BOOTERR ; POINT TO ERROR MESSAGE - LD C,9 ; BDOS FUNC 9: WRITE STR - JP $0005 ; DO IT AND RETURN TO OS + ; THE CODE TO PREPARE FOR AN APPBOOT IS "HIDDEN" IN HB_WRKBUF. + ; WE ARE OPERATING ON THE (MINIMAL) BDOS STACK, BUT THAT + ; SHOULD BE FINE FOR THIS LIMITED ACTIVITY. + CALL HB_APPBOOT ; PREPARE APP BOOT + RET NZ ; RETURN ON ERROR +; +HB_APPBOOT_Z: ; -Z280_BOOTERR .TEXT "\r\n\r\n*** Application mode boot not supported under Z280 native memory management!!!\r\n\r\n$" - #ENDIF #ENDIF ; DI ; NO INTERRUPTS IM 1 ; INTERRUPT MODE 1 ; #IF ((PLATFORM == PLT_DUO) & TRUE) - ; WAIT A WHILE + ; THIS ARBITRARY DELAY SEEMS TO HELP DUODYNE CPU V1.0 SYSTEMS + ; STARTUP CLEANLY. DOUDYNE CPU V1.1 INTRODUCES A RESET + ; SUPERVISOR AND THIS DELAY IS UNNECESSARY. WE DON'T KNOW + ; IF WE ARE ON A V1.1 THOUGH, SO WE ALWAYS DO THE DELAY. LD HL,0 BOOTWAIT: DEC HL @@ -1188,14 +1359,15 @@ BOOTWAIT: JR NZ,BOOTWAIT #ENDIF ; - ; EARLY RTC LATCH BYTE INITIALIZATION - ; FOR SOME PLATFORMS THIS CONTROLS HI/LO SPEED CIRCUIT - ; NOTE: WE WANT TO USE (RTCDEFVAL) HERE, BUT THE Z2 MEMORY - ; MANAGER STARTS UP WITH THE FIRST 16K OF ROM MAPPED TO ALL - ; 4 16K BANKS OF CPU SPACE. SO, IF RTCDEVFAL IS LOCATED AFTER - ; PAST 16K, WE DON'T HAVE ACCESS TO IT. FOR NOW, WE JUST USE - ; RTCDEF WHICH IS SUBOPTIMAL, BUT PROBABLY DOES NOT CAUSE ANY - ; PROBLEMS. +; EARLY RTC LATCH BYTE INITIALIZATION +; FOR SOME PLATFORMS THIS CONTROLS HI/LO SPEED CIRCUIT +; NOTE: WE WANT TO USE (RTCDEFVAL) HERE, BUT THE Z2 MEMORY +; MANAGER STARTS UP WITH THE FIRST 16K OF ROM MAPPED TO ALL +; 4 16K BANKS OF CPU SPACE. SO, IF RTCDEVFAL IS LOCATED AFTER +; PAST 16K, WE DON'T HAVE ACCESS TO IT. FOR NOW, WE JUST USE +; RTCDEF WHICH IS SUBOPTIMAL, BUT PROBABLY DOES NOT CAUSE ANY +; PROBLEMS. +; ;LD A,(RTCDEFVAL) ; GET DEFAULT VALUE LD A,RTCDEF ; DEFAULT VALUE OUT (RTCIO),A ; SET IT @@ -1210,23 +1382,29 @@ BOOTWAIT: OUT0 (RPH_ACR),A ; ... REGISTER IS INITIALIZED #ENDIF ; +; INITIALIZE DIAGNOSTIC AND/OR FRONT PANEL LED(S) TO INDICATE THE +; SYSTEM IS ALIVE. WE HAVE NO RAM AT THIS TIME, SO WE CANNOT USE +; THE NORMAL DIAG() OR FPLEDS() MACROS WHICH DEPEND UPON A STACK. +; SO, JUST HACK THE VALUES IN PLACE. +; #IF (FPLED_ENABLE) - ; NO STACK YET, SO CAN'T USE DIAG() MACRO - LD A,DIAG_01 #IF (FPLED_INV) - XOR $FF ; INVERT BITS IF NEEDED + LD A,~DIAG_01 + #ELSE + LD A,DIAG_01 #ENDIF +; OUT (FPLED_IO),A #ENDIF +; #IF (LEDENABLE) - #IF (LEDMODE == LEDMODE_STD) + #IF ((LEDMODE == LEDMODE_STD) | (LEDMODE == LEDMODE_SC)) XOR A ; LED IS INVERTED, TURN IT ON #ENDIF #IF (LEDMODE == LEDMODE_RTC) ; CAN'T USE (RTCDEFVAL) YET, SEE COMMENTS ABOVE ;LD A,(RTCDEFVAL) ; DEFAULT LATCH VALUE - LD A,RTCDEF ; DEFAULT LATCH VALUE - OR %00000001 ; LED 0 ON + LD A,RTCDEF | %00000001 ; LED 0 ON #ENDIF #IF (LEDMODE == LEDMODE_NABU) LD A,%00001000 ; LOW LED BIT ONLY @@ -1234,11 +1412,16 @@ BOOTWAIT: OUT (LEDPORT),A #ENDIF ; - ; WARNING: ALTHOUGH WE ARE INITIALIZING SP HERE, IT IS NOT YET - ; SAFE TO PUSH VALUES TO THE STACK BECAUSE SOME PLATFORMS WILL - ; NOT YET HAVE RAM MAPPED TO THE UPPER 32K YET! +; INITIALIZE SP +; +; WARNING: ALTHOUGH WE ARE INITIALIZING SP HERE, IT IS NOT YET +; SAFE TO PUSH VALUES TO THE STACK BECAUSE SOME PLATFORMS WILL +; NOT YET HAVE RAM MAPPED TO THE UPPER 32K YET! +; LD SP,HBX_LOC ; SETUP INITIAL STACK JUST BELOW HBIOS PROXY ; +; Z280 BARE METAL INIT +; #IF (CPUFAM == CPU_Z280) ; SET MAXIMUM I/O WAIT STATES FOR NOW LD C,Z280_BTCR ; BUS TIMING AND CONTROL REGISTER @@ -1252,21 +1435,34 @@ BOOTWAIT: ; #IF (MEMMGR == MM_Z280) ; - ; INITIALIZE ALL OF THE SYSTEM PAGE DESCRIPTORS WITH BLOCK MOVE - XOR A ; FIRST USER PDR + ; BEFORE ENABLING MMU W/ USER & SYSTEM PAGE TRANSLATION, + ; WE INITIALIZE ALL PDRS. HOWEVER, FOR AN APP + ; BOOT, THE LOW RAM PDRS ARE ALREADY CORRECT AND SHOULD BE + ; LEFT ALONE. +; + ; INITIALIZE ALL OF THE USER PAGE DESCRIPTORS WITH BLOCK MOVE +#IFDEF APPBOOT + LD A,$08 ; FIRST USER PDR IN HI MEM +#ELSE + LD A,$00 ; FIRST USER PDR +#ENDIF OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER LD HL,Z280_BOOTPDRTBL ; START OF PDR VALUES TABLE LD C,Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT - LD B,16 ; PROGRAM 16 PDRS - OTIRW ; OTIRW + LD B,Z280_PDRCNT ; NUMBER OF PDR ENTRIES TO PROG + OTIRW ; OTIRW PROGS PDRS SEQUENTIALLY ; - ; INITIALIZE ALL OF THE USER PAGE DESCRIPTORS WITH BLOCK MOVE + ; INITIALIZE ALL OF THE SYSTEM PAGE DESCRIPTORS WITH BLOCK MOVE +#IFDEF APPBOOT + LD A,$18 ; FIRST SYSTEM PDR IN HI MEM +#ELSE LD A,$10 ; FIRST SYSTEM PDR +#ENDIF OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER LD HL,Z280_BOOTPDRTBL ; START OF PDR VALUES TABLE LD C,Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT - LD B,16 ; PROGRAM 16 PDRS - OTIRW ; OTIRW + LD B,Z280_PDRCNT ; NUMBER OF PDR ENTRIES TO PROG + OTIRW ; OTIRW PROGS PDRS SEQUENTIALLY ; ; ENABLE MMU (SYSTEM AND USER TRANSLATION) LD C,Z280_MMUMCR ; MMU MASTER CONTROL REGISTER @@ -1276,28 +1472,23 @@ BOOTWAIT: ; DISABLE MEMORY REFRESH CYCLES LD A,$08 ; DISABLED OUT (Z280_RRR),A ; SET REFRESH RATE REGISTER -; - ; CONFIGURE Z280 INT/TRAP VECTOR TABLE POINTER REGISTER - ; WILL POINT TO ROM COPY FOR NOW, UPDATED TO RAM LATER ON - LD C,Z280_VPR - LD HL,Z280_IVT >> 8 ; TOP 16 BITS OF PHYSICAL ADR OF IVT - LDCTL (C),HL ; JR Z280_INITZ ; JUMP TO CODE CONTINUATION ; - ; WORD ALIGN THE PDR TABLE - ALIGN(2) + ALIGN(2) ; WORD ALIGN THE PDR TABLE ; Z280_BOOTPDRTBL: +#IFNDEF APPBOOT ; LOWER 32 K (BANKED) - .DW ($000 << 4) | $A - .DW ($001 << 4) | $A - .DW ($002 << 4) | $A - .DW ($003 << 4) | $A - .DW ($004 << 4) | $A - .DW ($005 << 4) | $A - .DW ($006 << 4) | $A - .DW ($007 << 4) | $A + .DW ((Z2_BANK(BID_BOOT) + 0) << 4) | $A + .DW ((Z2_BANK(BID_BOOT) + 1) << 4) | $A + .DW ((Z2_BANK(BID_BOOT) + 2) << 4) | $A + .DW ((Z2_BANK(BID_BOOT) + 3) << 4) | $A + .DW ((Z2_BANK(BID_BOOT) + 4) << 4) | $A + .DW ((Z2_BANK(BID_BOOT) + 5) << 4) | $A + .DW ((Z2_BANK(BID_BOOT) + 6) << 4) | $A + .DW ((Z2_BANK(BID_BOOT) + 7) << 4) | $A +#ENDIF ; UPPER 32 K (COMMON) .DW ((Z2_BANK(BID_COM) + 0) << 4) | $A .DW ((Z2_BANK(BID_COM) + 1) << 4) | $A @@ -1308,6 +1499,8 @@ Z280_BOOTPDRTBL: .DW ((Z2_BANK(BID_COM) + 6) << 4) | $A .DW ((Z2_BANK(BID_COM) + 7) << 4) | $A ; +Z280_PDRCNT .EQU ($ - Z280_BOOTPDRTBL) / 2 +; Z280_INITZ: ; #ENDIF @@ -1319,6 +1512,8 @@ Z280_INITZ: ; #ENDIF ; +; Z180 BARE METAL INIT +; #IF (CPUFAM == CPU_Z180) ; SET BASE FOR CPU IO REGISTERS ; DO NOT USE Z180_ICR FROM Z180.INC BECAUSE THE ICR @@ -1370,6 +1565,8 @@ Z280_INITZ: ; #ENDIF ; +; EIPC BARE METAL INIT +; #IF (EIPCENABLE) LD A,(EIPC_WDT_CONST | EIPC_HALT_RUN | EIPC_WDT_P2_22) OUT (EIPC_WDTMR),A ; CLEAR WDTE BIT (DISABLE WATCHDOG) @@ -1386,6 +1583,44 @@ Z280_INITZ: OUT (EIPC_SCDP),A ; SET SYSTEM CONTROL DATA PORT (SCDP) #ENDIF ; +; Z180 MINI-ITX MADNESS TO INITIALIZE THE PPIO. WE HAVE THE MAIN RAM AT +; $8000 AND ROM AT $0 AT THIS POINT AND THE Z180 MMU SET UP. NOW +; GET THE 82C55 PROGRAMMED. +; +#IF (PLATFORM == PLT_EPITX) + ; THE 82C55 IS BRAINDEAD AND FLIPS OUTPUT LINES TO 0 WHEN WE SET + ; THE MODE. WE BOOT WITH THE ROM ENABLED BUT THE RESET WILL ENABLE + ; LOW RAM. SOME MENTAL BACKFLIPS REQUIRED TO MAKE THIS WORK + LD HL,BOOTFLIP + LD DE,$8000 + LD BC,$10 + LDIR + JP $8000 +; +BOOTFLIP: + ; SET THE MODE. ALSO CLEARS ALL THE OUTPUT BITS SO WE BLIP THE + ; I2C, KEYBOARD ETC BUT NOBODY WILL CARE. HOWEVER WE ALSO FLIP + ; TO ALL RAM MODE HENCE THIS IS EXECUTED HIGH + ; A OUT B IN C HIGH IN C LOW IN + LD A,$8B + OUT ($43),A + LD A,$FF + OUT ($40),A + JP ROMRESUME +; +ROMRESUME: + ; THIS WILL GLITCH EXTRAM ON SO WE MUST NOW BE IN ROM + LD A,$8A ; C LOW NOW OUTPUT + OUT ($43),A + LD A,$FF + OUT ($42),A ; EXTRAM OFF, RAM BACK IN, SPI 7 + ; AND DONE. MODE REMAINS THIS WAY FOREVER +; +#ENDIF +; +; INITIALIZE MEMORY MANAGERS AS NEEDED TO ADDRESS BOOT ROM IN LOW 32K +; AND COMMON RAM IN HIGH 32K. +; #IF ((MEMMGR == MM_SBC) | (MEMMGR == MM_MBC)) ; SET PAGING REGISTERS #IFDEF ROMBOOT @@ -1421,63 +1656,13 @@ Z280_INITZ: ; AT THIS POINT, RAM SHOULD BE AVAILABLE IN THE COMMON BANK ; (TOP 32K). ; -; NOTIFICATION THAT WE HAVE MADE THE JUMP TO RAM BANK! -; THE DIAG() MACRO IS NOT USED BECAUSE IT USES THE STACK AND WE DO -; NOT WANT TO EFFECT RAM UNTIL AFTER THE BACKUP BATTERY STATUS CHECK -; IS PERFORMED NEXT. +; WE USE THE TWO BYTES IMMEDIATELY BELOW THE PROXY TO STORE A COUPLE +; VALUES TEMPORARILY BECAUSE WE MAY BE OPERATING IN ROM AT THIS POINT. +; (HBX_LOC - 1) = BATCOND, (HBX_LOC - 2) = APPBANK +; THERE IS NOTHING ON THE STACK AT THIS POINT SO, HERE, WE JUST RESET +; THE STACK TO HBX_LOC - 2. ; -#IF (FPLED_ENABLE) - ; NO STACK YET, SO CAN'T USE DIAG() MACRO - LD A,DIAG_02 - #IF (FPLED_INV) - XOR $FF ; INVERT BITS IF NEEDED - #ENDIF - OUT (FPLED_IO),A -#ENDIF - -; -; Z180 MINI-ITX MADNESS TO INITIALIZE THE PPIO. WE HAVE THE MAIN RAM AT -; $8000 AND ROM AT $0 AT THIS POINT AND THE Z180 MMU SET UP. NOW -; GET THE 82C55 PROGRAMMED. -; -#IF (PLATFORM == PLT_EPITX) - ; THE 82C55 IS BRAINDEAD AND FLIPS OUTPUT LINES TO 0 WHEN WE SET - ; THE MODE. WE BOOT WITH THE ROM ENABLED BUT THE RESET WILL ENABLE - ; LOW RAM. SOME MENTAL BACKFLIPS REQUIRED TO MAKE THIS WORK - LD HL,BOOTFLIP - LD DE,$8000 - LD BC,$10 - LDIR - JP $8000 -; -BOOTFLIP: - ; SET THE MODE. ALSO CLEARS ALL THE OUTPUT BITS SO WE BLIP THE - ; I2C, KEYBOARD ETC BUT NOBODY WILL CARE. HOWEVER WE ALSO FLIP - ; TO ALL RAM MODE HENCE THIS IS EXECUTED HIGH - ; A OUT B IN C HIGH IN C LOW IN - LD A,$8B - OUT ($43),A - LD A,$FF - OUT ($40),A - JP ROMRESUME -; -ROMRESUME: - ; THIS WILL GLITCH EXTRAM ON SO WE MUST NOW BE IN ROM - LD A,$8A ; C LOW NOW OUTPUT - OUT ($43),A - LD A,$FF - OUT ($42),A ; EXTRAM OFF, RAM BACK IN, SPI 7 - ; AND DONE. MODE REMAINS THIS WAY FOREVER -; -#ENDIF -; -; WE USE THE TWO BYTES IMMEDIATELY BELOW THE PROXY TO STORE A COUPLE -; VALUES TEMPORARILY BECAUSE WE MAY BE OPERATING IN ROM AT THIS POINT. -; (HBX_LOC - 1) = BATCOND, (HBX_LOC - 2) = APPBANK -; THERE IS NOTHING ON THE STACK AT THIS POINT SO, HERE, WE JUST RESET -; THE STACK TO HBX_LOC - 2. -; - LD SP,HBX_LOC - 2 + LD SP,HBX_LOC - 2 ; ; CHECK BATTERY BACKUP STATUS BEFORE WE TOUCH RAM (UPPER MEMORY) ; @@ -1498,17 +1683,15 @@ ROMRESUME: LD (HL),A ; ; INSTALL PROXY IN UPPER MEMORY -; THE HB_CURBNK MUST BE PRESERVED IF THIS IS AN APPBOOT. ; - LD A,(HB_CURBNK) ; SAVE EXISTING HB_CURBNK LD DE,HBX_LOC ; AS PER ABOVE LD HL,HBX_IMG LD BC,HBX_SIZ LDIR ; -#IFDEF APPBOOT - LD (HB_CURBNK),A ; RESTORE HB_CURBNK -#ENDIF +; NOTIFICATION THAT WE HAVE COMPLETED HARDWARE INIT. +; + FPLEDS(DIAG_02) ; ; S100 ROM CONTAINS A HARDWARE LEVEL MONITOR IN BANK ID 3 OF ROM. ; IF PORT $75 BIT 1 IS SET (SET IS ZERO), THEN WE IMMEDIATELY @@ -1540,21 +1723,6 @@ S100MON_SKIP: OUT0 (Z180_RLDR1L),A #ENDIF ; -; SAVE CURRENT BANKID -; -; THIS IS NOT GOING TO WORK IF THE APP BOOT IMAGE IS LOADED -; USING THE UNA FAT32 LOADER. SHOULD PROBABLY CHECK THAT THERE -; IS A VALID ROMWBW PROXY IN MEMORY BEFORE DOING THIS. HOWEVER, -; THIS USE CASE IS PROBABLY NON-EXISTENT. THE IMG BOOT IMAGE -; SHOULD WORK FINE WITH THE UNA FAT32 LOADER. -; -; THIS VALUE IS TEMPORARILY STORED AT HBX_LOC - 2 -; BECAUSE WE ARE CURRENTLY RUNNING IN ROM. AFTER WE TRANSITION HBIOS -; TO RAM, THE VALUE IS MOVED TO IT'S REAL LOCATION AT HB_APPBNK. -; - LD A,(HB_CURBNK) ; GET HB_CURBNK - LD (HBX_LOC - 2),A ; ... AND SAVE TEMP FOR APPBNK -; ; WE CAN NOW DO THE REAL INITIALIZATION OF THE RTC LATCH BASED ON ; (RTCDEFVAL). AT THIS POINT WE SHOULD HAVE ACCESS TO THE ROM LOCATION ; WHERE RTCDEFVAL IS STORED AND THE PROXY IS INSTALLED IN UPPER RAM @@ -1563,8 +1731,9 @@ S100MON_SKIP: ; CREATED. ; LD A,(RTCDEFVAL) - OUT (RTCIO),A ; SET IT LD (HB_RTCVAL),A + OUT (RTCIO),A ; SET IT + DIAG(1) ; REAPPLY CURRENT DIAG LED SETUP ; #IFDEF TESTING ; @@ -1734,6 +1903,8 @@ MBC_SINGLE: ; BANK AND SKIP THE COPY IF SO (DON'T COPY OVER OURSELVES). ; THIS SITUATION OCCURS ON A ROMLESS STARTUP OR WHEN DOING A ; FULL RESTART OF A SYSTEM USING THE EXISTING HBIOS COPY. + ; NOTE THAT THIS TEST WORKS BECAUSE BID_BIOS == BID_BOOT + ; IN THESE SCENARIOS. CP BID_BIOS JR Z,HB_START1 ; @@ -1774,20 +1945,15 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK LD SP,HBX_LOC - 2 ; RESET STACK ; ; NOTIFY THAT WE MADE THE TRANSITION! - DIAG(DIAG_03) - LED(%00000010) + FPLEDS(DIAG_03) + DIAG(2) ; ; RECOVER DATA PASSED PRIOR TO RAM TRANSITION - ; (HBX_LOC - 1) = BATCOND, (HBX_LOC - 2) = APPBNK + ; (HBX_LOC - 1) = BATCOND POP HL ; POP 2 BYTES LD A,H ; GET FIRST BYTE PUSHED LD (HB_BATCOND),A ; ... AND SAVE AS BAT COND ; -#IFDEF APPBOOT - LD A,L ; GET SECOND BYTE PUSHED - LD (HB_APPBNK),A ; ... AND SAVE AS APPBNK -#ENDIF -; #IF (MEMMGR == MM_Z280) ; NOW POINT TO RAM COPY OF Z280 INT/TRAP TABLE ; HL IS TOP 16 BITS OF PHYSICAL ADDRESS OF IVT @@ -1900,7 +2066,7 @@ SAVE_REC_M: #ENDIF #ENDIF ; - DIAG(DIAG_04) + FPLEDS(DIAG_04) ; #IF (WBWDEBUG == USEMIO) ; BUFFER OUTPUT UNTIL CALL MIO_INIT ; WE GET TO BOOT MESSAGE @@ -2034,7 +2200,7 @@ HB_CPU1: ; #ENDIF ; - DIAG(DIAG_05) + FPLEDS(DIAG_05) ; ; INIT OSCILLATOR SPEED FROM CONFIG ; @@ -2367,7 +2533,7 @@ Z280_TC .EQU CPUOSC / 4 / 50 / 2 ; TIME CONSTANT LD A,$FF ; FILL WITH $FF CALL FILL ; DO IT ; - DIAG(DIAG_06) + FPLEDS(DIAG_06) ; #IF FALSE ; @@ -2407,8 +2573,8 @@ NOT_REC_M0: ; #ENDIF ; - DIAG(DIAG_07) - LED(%00000111) + FPLEDS(DIAG_07) + DIAG(3) ; ; ; @@ -2499,7 +2665,6 @@ NXTMIO: LD A,(HL) ; ; ANNOUNCE HBIOS ; - CALL NEWLINE2 PRTX(STR_BANNER) ; ; DISPLAY HBIOS MUTEX ENABLED MESSAGE @@ -2522,7 +2687,7 @@ NXTMIO: LD A,(HL) #ENDIF NOT_REC_M2: ; - DIAG(DIAG_08) + FPLEDS(DIAG_08) ; ; IO PORT SCAN ; @@ -3053,7 +3218,6 @@ INITSYS3: LD A,(HB_NEWCON) ; GET NEW CONSOLE UNIT NUM CALL PRTDECB ; PRINT UNIT NUM LD (CB_CONDEV),A ; IMPLEMENT NEW CONSOLE! - CALL NEWLINE2 ; FORMATTING LD DE,STR_BANNER ; POINT TO BANNER CALL NZ,WRITESTR ; OUTPUT IF CONSOLE MOVED ; @@ -3190,29 +3354,15 @@ INITSYS4: CALL SND_BEEP #ENDIF ; -#IFNDEF ROMBOOT -; - ; COPY OS IMAGE: BID_USR: --> BID_USR:0 - LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY - LD D,BID_USR ; D = DEST BANK = USER BANK - ;LD E,BID_USR ; E = SRC BANK = USER BANK - LD A,(HB_APPBNK) ; GET APP LOAD BANK - LD E,A ; USE AS SOURCE - LD HL,$8000 ; HL = COPY LEN = ENTIRE BANK - RST 08 ; DO IT - LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY - LD HL,HB_END ; COPY FROM END OF HBIOS - LD DE,0 ; TO USER ADDRESS 0 - RST 08 ; DO IT -; -#ENDIF + DIAG(0) ; CLEAR BOOT DIAG LED(S) + FPLEDS(DIAG_00) ; CLEAR FP LEDS ; ; CHAIN TO LOADER ; #IFDEF ROMBOOT LD A,BID_IMG0 ; CHAIN TO OS IMAGES BANK #ELSE - LD A,BID_USR ; CHAIN TO USER BANK + LD A,BID_AUX ; CHAIN TO AUX BANK #ENDIF LD IX,0 ; ENTER AT ADDRESS 0 CALL HBX_BNKCALL ; GO THERE @@ -3467,27 +3617,7 @@ HB_INITTBL: ; HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) ; -;================================================================================================== -; IDLE -;================================================================================================== -; -;__________________________________________________________________________________________________ -; -IDLE: - PUSH AF - PUSH BC - PUSH DE - PUSH HL - PUSH IY -#IF (FDENABLE) - CALL FD_IDLE -#ENDIF - POP IY - POP HL - POP DE - POP BC - POP AF - RET +HB_SYSINIT_END .EQU $ ; ;================================================================================================== ; BIOS FUNCTION DISPATCHER @@ -3497,6 +3627,8 @@ IDLE: ; B: FUNCTION ;__________________________________________________________________________________________________ ; +HB_DISP_BEG .EQU $ +; HB_DISPATCH: ; #IF (MEMMGR == MM_Z280) @@ -3876,19 +4008,19 @@ HB_DSKFN: PUSH BC ; SAVE COUNTERS #IF (FPLED_ENABLE & FPLED_DSKACT) LD A,(HB_DSKBIT) ; LOAD UNIT DISK BIT MASK - CALL FP_SETLEDS ; DISPLAY ON DIAG LEDS + CALL FP_SETLEDS ; DISPLAY ON FP LEDS #ENDIF #IF (LEDENABLE & LEDDISKIO) - LED(%00000101) ; BIT 0 FOR TINY Z80 & MBC, BIT 2 FOR SCXXX + DIAG(1) ; BIT 0 FOR TINY Z80 & MBC, BIT 2 FOR SCXXX #ENDIF LD E,1 ; ONE SECTOR HB_DSKFNADR .EQU $+1 CALL PANIC ; READ ONE SECTOR #IF (FPLED_ENABLE & FPLED_DSKACT) - DIAG($00) ; CLEAR DIAG LEDS + FPLEDS($00) ; CLEAR FP LEDS #ENDIF #IF (LEDENABLE & LEDDISKIO) - LED($00) + DIAG(0) #ENDIF POP BC ; RESTORE COUNTERS RET ; RETURN @@ -4222,6 +4354,14 @@ SYS_DISPATCH: JP Z,SYS_INT ; $FC DEC A ; +HB_DISP_END .EQU $ +; +;================================================================================================== +; SYSTEM API FUNCTIONS +;================================================================================================== +; +HB_SYSAPI_BEG .EQU $ +; ; RESTART SYSTEM ; SUBFUNCTION IN C ; @@ -4245,10 +4385,6 @@ SYS_RESINT: ; RESET THE HEAP LD HL,(HEAPCURB) ; GET HBIOS HEAP THRESHOLD LD (CB_HEAPTOP),HL ; RESTORE HEAP TOP -;; -; ; MAKE SURE THE PROPER RESET VECTOR IS AT ADDRESS $0000 -; LD HL,$0040 ; USER RESET CODE STUB -; LD ($0001),HL ; OPERAND OF JP AT $0000 ; XOR A RET @@ -4257,14 +4393,18 @@ SYS_RESINT: ; SYS_RESWARM: ; - CALL SYS_RESINT + CALL SYS_RESINT ; HBIOS INTERNAL RESET ; #IF (MEMMGR == MM_Z280) JP INITSYS4 #ELSE ; PERFORM BANK CALL TO OS IMAGES BANK IN ROM LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY - LD A,BID_IMG0 ; CHAIN TO OS IMAGES BANK + #IFDEF APPBOOT + LD A,BID_AUX ; IF APPBOOT, CHAIN TO AUX BANK + #ELSE + LD A,BID_IMG0 ; ELSE CHAIN TO OS IMAGES BANK + #ENDIF LD IX,0 ; ENTER AT ADDRESS 0 CALL HBX_BNKCALL ; GO THERE HALT ; WE SHOULD NEVER COME BACK! @@ -4275,7 +4415,20 @@ SYS_RESWARM: SYS_RESCOLD: ; #IF (MEMMGR == MM_Z280) - JP Z280_RESTART + ; FOR Z280, NEED TO REMAP THE LOW 32K IN SYSTEM MODE AND + ; CONTINUE AT ADDRESS ZERO. WE CANNOT RETURN HERE AFTER THE + ; BNKSEL IS DONE BECAUSE THE SYSTEM BANK HAS BEEN CHANGED! + ; SO, WE PRESET THE STACK TO CAUSE A JUMP TO ADDRESS ZERO + ; ON RETURN FROM THE BNKSEL. SLICK, RIGHT? + DI ; KILL INTERRUPTS + LD SP,HBX_LOC ; STACK IN HIGH MEMORY + LD HL,0 ; VALUE TO RESUME + PUSH HL ; ... IS PRESET ON STACK +; + ; MAKE ROM BOOT BANK ACTIVE IN LOW SYS MEM + LD A,BID_BOOT ; BOOT BANK + LD B,$10 ; FIRST SYS PDR + JP Z280_BNKSEL ; DO IT AND RESUME FROM STACK #ELSE DI LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY @@ -5302,20 +5455,24 @@ SYS_INTSET1: XOR A ; SIGNAL SUCCESS RET ; DONE ; +HB_SYSAPI_END .EQU $ +; ;================================================================================================== ; Z280 INTERRUPT VECTOR TABLE ;================================================================================================== ; -#IF (MEMMGR == MM_Z280) +HB_Z280IVT_BEG .EQU $ +; +; THE Z280 IVT MUST BE ON A 4K BOUNDARY. IT HAS BEEN LOCATED +; HERE IN AN EFFORT TO MINIMIZE WASTED SPACE. THERE SHOULD BE +; A LITTLE LESS THAN 4K OF CODE ABOVE. ; - ; THE Z280 IVT MUST BE ON A 4K BOUNDARY. IT HAS BEEN LOCATED - ; HERE IN AN EFFORT TO MINIMIZE WASTED SPACE. THERE SHOULD BE - ; A LITTLE LESS THAN 4K OF CODE ABOVE. +#IF (MEMMGR == MM_Z280) ; Z280_IVT_SLACK_ORG .EQU $ ALIGN($1000) Z280_IVT_SLACK .EQU $ - Z280_IVT_SLACK_ORG - .ECHO "Z280 IVT SLACK occupies " + .ECHO "Z280 IVT SLACK = " .ECHO Z280_IVT_SLACK .ECHO " bytes.\n" ; @@ -5395,10 +5552,33 @@ Z280_IVT: ; #ENDIF ; +HB_Z280IVT_END .EQU $ +; ;================================================================================================== ; GLOBAL HBIOS FUNCTIONS ;================================================================================================== ; +HB_INTFUNC_BEG .EQU $ +; +; GLOBAL HBIOS IDLE PROCESSING IS DONE HERE. THIS ROUTINE SHOULD +; BE CALLED WHENEVER WAITING FOR USER INPUT. +; +IDLE: + PUSH AF + PUSH BC + PUSH DE + PUSH HL + PUSH IY +#IF (FDENABLE) + CALL FD_IDLE +#ENDIF + POP IY + POP HL + POP DE + POP BC + POP AF + RET +; ; COMMON ROUTINE THAT IS CALLED BY CHARACTER IO DRIVERS WHEN ; AN IDLE CONDITION IS DETECTED (WAIT FOR INPUT/OUTPUT) ; @@ -5968,89 +6148,6 @@ HB_ALLOC1: HB_TMPSZ .DW 0 HB_TMPREF .DW 0 ; -; Z280 BANK SELECTION (CALLED FROM PROXY) -; -#IF (MEMMGR == MM_Z280) -; -; REG A HAS BANK ID, REG B HAS INITIAL PDR TO PROGRAM -; REGISTERS AF, BC, HL DESTROYED -; -; THIS ROUTINE MAY BE RELOCATED TO RUN IN HIGH MEMORY IN CERTAIN CASES -; LIKE A SYSTEM RESTART. IT MUST BE KEPT ENTIRELY RELOCATABLE. -; -Z280_BNKSEL: - ;; *DEBUG* - ;CALL PC_LBKT - ;CALL PRTHEXBYTE - ;CALL PC_RBKT - - ; SELECT I/O PAGE $FE (SAVING PREVIOUS VALUE) - LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER - LDCTL HL,(C) ; GET CURRENT I/O PAGE - PUSH HL ; SAVE IT - LD L,$FF ; NEW I/O PAGE - LDCTL (C),HL ; IMPLEMENT -; - ; CONVERT BANK ID TO TOP 12 BITS OF PHYSICAL ADDRESS - ; WITH $0A IN THE LOW ORDER NIBBLE: - ; BANK ID: R000 BBBB - ; PDR: R000 0BBB B000 1010 (RCBUS) - ; PDR: 0000 RBBB B000 1010 (ZZ80MB) -; - MULTU A,$80 ; HL=0R00 0BBB B000 0000 - BIT 6,H ; RAM BIT SET? - JR Z,Z280_BNKSEL2 ; IF NOT, ALL DONE - RES 6,H ; OTHERWISE, REMOVE RAM BIT - LD A,RAMBIAS >> 6 ; RAM OFFSET (TOP 8 BITS) - OR H ; RECOMBINE - LD H,A ; AND PUT BACK IN H -; -Z280_BNKSEL2: -; - ; SET LOW NIBBLE - LD A,$0A ; VALUE FOR LOW NIBBLE - ADD HL,A ; ADD HL,A ; HL=0000 RBBB B000 1010 -; - ; POINT TO FIRST PDR TO PROGRAM - LD A,B ; INITIAL PDR TO PROG - OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER -; - ; PROGRAM 8 PDRS - LD C,Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT - ;LD B,8 ; PROGRAM 8 PDRS - LD A,$10 ; PDR VALUE INCREMENT -Z280_BNKSEL3: - ; PROGRAM 8 PDR VALUES - ; LOOP UNROLLED FOR SPEED - OUTW (C),HL ; WRITE VALUE - ADD HL,A ; BUMP VALUE - OUTW (C),HL ; WRITE VALUE - ADD HL,A ; BUMP VALUE - OUTW (C),HL ; WRITE VALUE - ADD HL,A ; BUMP VALUE - OUTW (C),HL ; WRITE VALUE - ADD HL,A ; BUMP VALUE - OUTW (C),HL ; WRITE VALUE - ADD HL,A ; BUMP VALUE - OUTW (C),HL ; WRITE VALUE - ADD HL,A ; BUMP VALUE - OUTW (C),HL ; WRITE VALUE - ADD HL,A ; BUMP VALUE - OUTW (C),HL ; WRITE VALUE - ADD HL,A ; BUMP VALUE - ;DJNZ Z280_BNKSEL3 ; DO ALL PDRS -; - ; RESTORE I/O PAGE - LD C,Z280_IOPR ; REG C POINTS TO I/O PAGE REGISTER - POP HL ; RECOVER ORIGINAL I/O PAGE - LDCTL (C),HL -; - RET -; -Z280_BNKSEL_LEN .EQU $ - Z280_BNKSEL -; -#ENDIF -; ; Z280 BANK COPY (CALLED FROM PROXY) ; ; USE Z280 PHYSICAL MEMORY DMA COPY TO PERFORM AN INTERBANK COPY. @@ -6280,611 +6377,299 @@ Z2DMAADR2: ; #ENDIF ; -; Z280 SYSCALL VECTOR ENTRY POINT. TAKES STACK PARAMETER AS A BRANCH -; ADDRESS AND CALLS IT. ALLOWS ANY USER MODE CODE TO CALL INTO AN -; ARBITRARY LOCATION OF SYSTEM MODE CODE. -; -#IF (MEMMGR == MM_Z280) -Z280_SYSCALL: - EX (SP),HL - LD (Z280_SYSCALL_GO+1),HL - POP HL -Z280_SYSCALL_GO: - CALL $FFFF ; PARM SET ABOVE - RETIL ; RETURN FROM INT -#ENDIF +HB_INTFUNC_END .EQU $ ; ;================================================================================================== -; DEVICE DRIVERS +; UTILITY FUNCTIONS ;================================================================================================== ; -#IF (DSKYENABLE) - #IF (ICMENABLE) -ORG_ICM .EQU $ - #INCLUDE "icm.asm" -SIZ_ICM .EQU $ - ORG_ICM - .ECHO "ICM occupies " - .ECHO SIZ_ICM - .ECHO " bytes.\n" - #ENDIF +HB_UTIL_BEG .EQU $ ; - #IF (PKDENABLE) -ORG_PKD .EQU $ - #INCLUDE "pkd.asm" -SIZ_PKD .EQU $ - ORG_PKD - .ECHO "PKD occupies " - .ECHO SIZ_PKD - .ECHO " bytes.\n" - #ENDIF +#DEFINE USEDELAY +#INCLUDE "util.asm" +#INCLUDE "time.asm" +#INCLUDE "bcd.asm" +#INCLUDE "decode.asm" +#INCLUDE "encode.asm" ; - #IF (H8PENABLE) -ORG_H8P .EQU $ - #INCLUDE "h8p.asm" -SIZ_H8P .EQU $ - ORG_H8P - .ECHO "H8P occupies " - .ECHO SIZ_H8P - .ECHO " bytes.\n" - #ENDIF +#IF (WBWDEBUG == USEXIO) +#INCLUDE "xio.asm" #ENDIF -; -#IF (PLATFORM == PLT_NABU) -ORG_NABU .EQU $ - #INCLUDE "nabu.asm" -SIZ_NABU .EQU $ - ORG_NABU - .ECHO "NABU occupies " - .ECHO SIZ_NABU - .ECHO " bytes.\n" +#IF (WBWDEBUG == USEMIO) +#INCLUDE "mio.asm" #ENDIF ; -#IF (DSRTCENABLE) -ORG_DSRTC .EQU $ - #INCLUDE "dsrtc.asm" -SIZ_DSRTC .EQU $ - ORG_DSRTC - .ECHO "DSRTC occupies " - .ECHO SIZ_DSRTC - .ECHO " bytes.\n" +; INCLUDE LZSA2 decompression engine if required. +; +#IF ((CVDUENABLE | GDCENABLE | TMSENABLE | VGAENABLE | VRCENABLE) & USELZSA2) +#INCLUDE "unlzsa2s.asm" #ENDIF ; -#IF (DS1501RTCENABLE) -ORG_DS1501RTC .EQU $ - #INCLUDE "ds1501rtc.asm" -SIZ_DS1501RTC .EQU $ - ORG_DS1501RTC - .ECHO "DS1501RTC occupies " - .ECHO SIZ_DS1501RTC - .ECHO " bytes.\n" -#ENDIF -; -#IF (BQRTCENABLE) -ORG_BQRTC .EQU $ - #INCLUDE "bqrtc.asm" -SIZ_BQRTC .EQU $ - ORG_BQRTC - .ECHO "BQRTC occupies " - .ECHO SIZ_BQRTC - .ECHO " bytes.\n" -#ENDIF -; -#IF (SIMRTCENABLE) -ORG_SIMRTC .EQU $ - #INCLUDE "simrtc.asm" -SIZ_SIMRTC .EQU $ - ORG_SIMRTC - .ECHO "SIMRTC occupies " - .ECHO SIZ_SIMRTC - .ECHO " bytes.\n" -#ENDIF -; -#IF (PCFENABLE) -ORG_PCF .EQU $ - #INCLUDE "pcf.asm" -SIZ_PCF .EQU $ - ORG_PCF - .ECHO "PCF occupies " - .ECHO SIZ_PCF - .ECHO " bytes.\n" -#ENDIF -; -#IF (DS7RTCENABLE) -ORG_DS7RTC .EQU $ - #INCLUDE "ds7rtc.asm" -SIZ_DS7RTC .EQU $ - ORG_DS7RTC - .ECHO "DS7RTC occupies " - .ECHO SIZ_DS7RTC - .ECHO " bytes.\n" -#ENDIF -; -#IF (INTRTCENABLE) -ORG_INTRTC .EQU $ - #INCLUDE "intrtc.asm" -SIZ_INTRTC .EQU $ - ORG_INTRTC - .ECHO "INTRTC occupies " - .ECHO SIZ_INTRTC - .ECHO " bytes.\n" -#ENDIF -; -#IF (RP5RTCENABLE) -ORG_RP5RTC .EQU $ - #INCLUDE "rp5rtc.asm" -SIZ_RP5RTC .EQU $ - ORG_RP5RTC - .ECHO "RP5RTC occupies " - .ECHO SIZ_RP5RTC - .ECHO " bytes.\n" -#ENDIF -#IF (ASCIENABLE) -ORG_ASCI .EQU $ - #INCLUDE "asci.asm" -SIZ_ASCI .EQU $ - ORG_ASCI - .ECHO "ASCI occupies " - .ECHO SIZ_ASCI - .ECHO " bytes.\n" -#ENDIF -; -#IF (Z2UENABLE) -ORG_Z2U .EQU $ - #INCLUDE "z2u.asm" -SIZ_Z2U .EQU $ - ORG_Z2U - .ECHO "Z2U occupies " - .ECHO SIZ_Z2U - .ECHO " bytes.\n" -#ENDIF -; -#IF (UARTENABLE) -ORG_UART .EQU $ - #INCLUDE "uart.asm" -SIZ_UART .EQU $ - ORG_UART - .ECHO "UART occupies " - .ECHO SIZ_UART - .ECHO " bytes.\n" -#ENDIF -; -#IF (DUARTENABLE) -ORG_DUART .EQU $ - #INCLUDE "duart.asm" -SIZ_DUART .EQU $ - ORG_DUART - .ECHO "DUART occupies " - .ECHO SIZ_DUART - .ECHO " bytes.\n" -#ENDIF +;================================================================================================== +; CONSOLE CHARACTER I/O HELPER ROUTINES (REGISTERS PRESERVED) +;================================================================================================== ; -#IF (SIOENABLE) -ORG_SIO .EQU $ - #INCLUDE "sio.asm" -SIZ_SIO .EQU $ - ORG_SIO - .ECHO "SIO occupies " - .ECHO SIZ_SIO - .ECHO " bytes.\n" -#ENDIF +; OUTPUT CHARACTER FROM A ; -#IF (ACIAENABLE) -ORG_ACIA .EQU $ - #INCLUDE "acia.asm" -SIZ_ACIA .EQU $ - ORG_ACIA - .ECHO "ACIA occupies " - .ECHO SIZ_ACIA - .ECHO " bytes.\n" -#ENDIF +COUT: + ; SAVE ALL INCOMING REGISTERS + PUSH AF + PUSH BC + PUSH DE + PUSH HL ; -#IF (PIOENABLE) -ORG_PIO .EQU $ - #INCLUDE "pio.asm" -SIZ_PIO .EQU $ - ORG_PIO - .ECHO "PIO occupies " - .ECHO SIZ_PIO - .ECHO " bytes.\n" -#ENDIF + ; GET CURRENT CONSOLE UNIT + LD E,A ; TEMPORARILY STASH OUTPUT CHAR IN E + LD A,(CB_CONDEV) ; GET CONSOLE UNIT BYTE + CP $FF ; TEST FOR $FF (HBIOS NOT READY) + JR Z,COUT1 ; IF NOT READY, TRY DEBUG OUTPUT ; -#IF (LPTENABLE) -ORG_LPT .EQU $ - #INCLUDE "lpt.asm" -SIZ_LPT .EQU $ - ORG_LPT - .ECHO "LPT occupies " - .ECHO SIZ_LPT - .ECHO " bytes.\n" -#ENDIF + ; USE HBIOS + LD C,A ; CONSOLE UNIT TO C + LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR + CALL CIO_DISPATCH ; CALL CIO DISPATCHER DIRECTLY + JR COUT2 ; CONTINUE ; -#IF (PIO_4P | PIO_ZP | PIO_SBC) -ORG_PIO .EQU $ - #INCLUDE "pio.asm" -SIZ_PIO .EQU $ - ORG_PIO - .ECHO "PIO occupies " - .ECHO SIZ_PIO - .ECHO " bytes.\n" -#ENDIF +COUT1: ; -#IF (UFENABLE) -ORG_UF .EQU $ - #INCLUDE "uf.asm" -SIZ_UF .EQU $ - ORG_UF - .ECHO "UF occupies " - .ECHO SIZ_UF - .ECHO " bytes.\n" +#IF (WBWDEBUG == USEXIO) + LD A,E ; GET OUTPUT CHAR BACK TO ACCUM + CALL XIO_OUTC ; OUTPUT VIA XIO #ENDIF ; -#IF (VGAENABLE) -ORG_VGA .EQU $ - #INCLUDE "vga.asm" -SIZ_VGA .EQU $ - ORG_VGA - .ECHO "VGA occupies " - .ECHO SIZ_VGA - .ECHO " bytes.\n" +#IF (WBWDEBUG == USEMIO) + LD A,E + CALL MIO_OUTC ; OUTPUT VIA MIO #ENDIF ; -#IF (CVDUENABLE) -ORG_CVDU .EQU $ - #INCLUDE "cvdu.asm" -SIZ_CVDU .EQU $ - ORG_CVDU - .ECHO "CVDU occupies " - .ECHO SIZ_CVDU - .ECHO " bytes.\n" -#ENDIF +COUT2: + ; RESTORE ALL REGISTERS + POP HL + POP DE + POP BC + POP AF + RET ; -#IF (VDUENABLE) -ORG_VDU .EQU $ - #INCLUDE "vdu.asm" -SIZ_VDU .EQU $ - ORG_VDU - .ECHO "VDU occupies " - .ECHO SIZ_VDU - .ECHO " bytes.\n" -#ENDIF +; INPUT CHARACTER TO A ; -#IF (TMSENABLE) -ORG_TMS .EQU $ - #INCLUDE "tms.asm" -SIZ_TMS .EQU $ - ORG_TMS - .ECHO "TMS occupies " - .ECHO SIZ_TMS - .ECHO " bytes.\n" -#ENDIF +CIN: + ; SAVE INCOMING REGISTERS (AF IS OUTPUT) + PUSH BC + PUSH DE + PUSH HL ; -#IF (EFENABLE) -ORG_EF .EQU $ - #INCLUDE "ef.asm" -SIZ_EF .EQU $ - ORG_EF - .ECHO "EF occupies " - .ECHO SIZ_EF - .ECHO " bytes.\n" -#ENDIF + LD A,(CB_CONDEV) ; GET CONSOLE UNIT BYTE + CP $FF ; TEST FOR $FF (HBIOS NOT READY) + JR Z,CIN1 ; IF NOT READY, TRY DEBUG INPUT ; -#IF (GDCENABLE) -ORG_GDC .EQU $ - #INCLUDE "gdc.asm" -SIZ_GDC .EQU $ - ORG_GDC - .ECHO "GDC occupies " - .ECHO SIZ_GDC - .ECHO " bytes.\n" -#ENDIF + ; USE HBIOS + LD C,A ; CONSOLE UNIT TO C + LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR + CALL CIO_DISPATCH ; CALL CIO DISPATCHER DIRECTLY + LD A,E ; RESULTANT CHAR TO A + JR CIN2 ; CONTINUE ; -#IF (VRCENABLE) -ORG_VRC .EQU $ - #INCLUDE "vrc.asm" -SIZ_VRC .EQU $ - ORG_VRC - .ECHO "VRC occupies " - .ECHO SIZ_VRC - .ECHO " bytes.\n" -#ENDIF +CIN1: ; -#IF (DMAENABLE) -ORG_DMA .EQU $ -#INCLUDE "dma.asm" -SIZ_DMA .EQU $ - ORG_DMA - .ECHO "DMA occupies " - .ECHO SIZ_DMA - .ECHO " bytes.\n" +#IF (WBWDEBUG == USEXIO) + CALL XIO_INC ; GET CHAR #ENDIF ; -; FONTS AREA -; -ORG_FONTS .EQU $ -; - .ECHO "FONTS" -; -#IFDEF USEFONT8X8 -FONT8X8: -; -; FOR NOW, WE NEVER COMPRESS THE 8X8 FONT. SEE TMS DRIVER. -; - #IF USELZSA2 & FALSE - #INCLUDE "font8x8c.asm" - #ELSE - #INCLUDE "font8x8u.asm" - #ENDIF - .ECHO " 8X8" +#IF (WBWDEBUG == USEMIO) + CALL MIO_INC ; GET CHAR #ENDIF ; -#IFDEF USEFONT8X11 -FONT8X11: - #IF USELZSA2 - #INCLUDE "font8x11c.asm" - #ELSE - #INCLUDE "font8x11u.asm" - #ENDIF - .ECHO " 8X11" -#ENDIF +CIN2: ; -#IFDEF USEFONT8X16 -FONT8X16: - #IF USELZSA2 - #INCLUDE "font8x16c.asm" - #ELSE - #INCLUDE "font8x16u.asm" - #ENDIF - .ECHO " 8X16" -#ENDIF + ; RESTORE REGISTERS (AF IS OUTPUT) + POP HL + POP DE + POP BC + RET ; -#IFDEF USEFONTCGA -FONTCGA: - #IF USELZSA2 - #INCLUDE "fontcgac.asm" - #ELSE - #INCLUDE "fontcgau.asm" - #ENDIF - .ECHO " CGA" -#ENDIF +; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING) ; -#IFDEF USEFONTVGARC -FONTVGARC: - #IF USELZSA2 - #INCLUDE "fontvgarcc.asm" - #ELSE - #INCLUDE "fontvgarcu.asm" - #ENDIF - .ECHO " VGARC" -#ENDIF +CST: + ; SAVE INCOMING REGISTERS (AF IS OUTPUT) + PUSH BC + PUSH DE + PUSH HL ; -SIZ_FONTS .EQU $ - ORG_FONTS - .ECHO " occupy " - .ECHO SIZ_FONTS - .ECHO " bytes.\n" + LD A,(CB_CONDEV) ; GET CONSOLE UNIT BYTE + CP $FF ; TEST FOR $FF (HBIOS NOT READY) + JR Z,CST1 ; IIF NOT READY, TRY DEBUG DEBUG STATUS ; -#IF (KBDENABLE) -ORG_KBD .EQU $ - #INCLUDE "kbd.asm" -SIZ_KBD .EQU $ - ORG_KBD - .ECHO "KBD occupies " - .ECHO SIZ_KBD - .ECHO " bytes.\n" -#ENDIF + ; USE HBIOS + LD C,A ; CONSOLE UNIT TO C + LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS + CALL CIO_DISPATCH ; CALL CIO DISPATCHER DIRECTLY + JR CST2 ; CONTINUE ; -#IF (PPKENABLE) -ORG_PPK .EQU $ - #INCLUDE "ppk.asm" -SIZ_PPK .EQU $ - ORG_PPK - .ECHO "PPK occupies " - .ECHO SIZ_PPK - .ECHO " bytes.\n" -#ENDIF +CST1: ; -#IF (MKYENABLE) -ORG_MKY .EQU $ - #INCLUDE "mky.asm" -SIZ_MKY .EQU $ - ORG_MKY - .ECHO "MKY occupies " - .ECHO SIZ_MKY - .ECHO " bytes.\n" +#IF (WBWDEBUG == USEXIO) + CALL XIO_IST ; GET STATUS #ENDIF ; -#IF (NABUKBENABLE) -ORG_NABUKB .EQU $ - #INCLUDE "nabukb.asm" -SIZ_NABUKB .EQU $ - ORG_NABUKB - .ECHO "NABUKB occupies " - .ECHO SIZ_NABUKB - .ECHO " bytes.\n" +#IF (WBWDEBUG == USEMIO) + CALL MIO_IST ; GET STATUS #ENDIF ; -#IF (PRPENABLE) -ORG_PRP .EQU $ - #INCLUDE "prp.asm" -SIZ_PRP .EQU $ - ORG_PRP - .ECHO "PRP occupies " - .ECHO SIZ_PRP - .ECHO " bytes.\n" -#ENDIF +CST2: + ; RESTORE REGISTERS (AF IS OUTPUT) + POP HL + POP DE + POP BC + RET ; -#IF (PPPENABLE) -ORG_PPP .EQU $ - #INCLUDE "ppp.asm" -SIZ_PPP .EQU $ - ORG_PPP - .ECHO "PPP occupies " - .ECHO SIZ_PPP - .ECHO " bytes.\n" -#ENDIF +;================================================================================================== +; INTERNAL UTILITY FUNCTIONS +;================================================================================================== ; -#IF (SCONENABLE) -ORG_SCON .EQU $ - #INCLUDE "scon.asm" -SIZ_SCON .EQU $ - ORG_SCON - .ECHO "SCON occupies " - .ECHO SIZ_SCON - .ECHO " bytes.\n" -#ENDIF +; SET HL TO IY+A, A IS TRASHED ; -#IF (CHENABLE) -ORG_CH .EQU $ - #INCLUDE "ch.asm" -SIZ_CH .EQU $ - ORG_CH - .ECHO "CH occupies " - .ECHO SIZ_CH - .ECHO " bytes.\n" -#ENDIF +LDHLIYA: + PUSH IY ; COPY INSTANCE DATA PTR + POP HL ; ... TO HL + ;JP ADDHLA ; APPLY OFFSET TO HL AND RETURN + ADD A,L ; ADD OFFSET TO LSB + LD L,A ; ... PUT BACK IN L + RET NC ; DONE IF CF NOT SET + INC H ; IF CF SET, BUMP MSB + RET ; ... AND RETURN ; -#IF (ESPENABLE) -ORG_ESP .EQU $ - #INCLUDE "esp.asm" -SIZ_ESP .EQU $ - ORG_ESP - .ECHO "ESP occupies " - .ECHO SIZ_ESP - .ECHO " bytes.\n" -#ENDIF +; CONVERT AN HBIOS STANDARD HARD DISK CHS ADDRESS TO +; AN LBA ADDRESS. A STANDARD HBIOS HARD DISK IS ASSUMED +; TO HAVE 16 SECTORS PER TRACK AND 16 HEADS PER CYLINDER. ; -#IF (MDENABLE) -ORG_MD .EQU $ - #INCLUDE "md.asm" -SIZ_MD .EQU $ - ORG_MD - .ECHO "MD occupies " - .ECHO SIZ_MD - .ECHO " bytes.\n" -#ENDIF +; INPUT: HL=TRACK, D=HEAD, E=SECTOR +; OUTPUT: DE:HL=32 BIT LBA ADDRESS (D:7 IS NOT SET IN THE RESULT) ; -#IF (FDENABLE) -ORG_FD .EQU $ - #INCLUDE "fd.asm" -SIZ_FD .EQU $ - ORG_FD - .ECHO "FD occupies " - .ECHO SIZ_FD - .ECHO " bytes.\n" -#ENDIF +HB_CHS2LBA: ; -#IF (RFENABLE) -ORG_RF .EQU $ - #INCLUDE "rf.asm" -SIZ_RF .EQU $ - ORG_RF - .ECHO "RF occupies " - .ECHO SIZ_RF - .ECHO " bytes.\n" -#ENDIF + LD A,D ; HEAD TO A + RLCA ; LEFT SHIFT TO HIGH NIBBLE + RLCA ; ... DEPENDS ON HIGH + RLCA ; ... NIBBLE BEING 0 SINCE + RLCA ; ... IT ROTATES INTO LOW NIBBLE + OR E ; COMBINE WITH SECTOR (HIGH NIBBLE MUST BE ZERO) + LD D,0 + LD E,H + LD H,L + LD L,A + XOR A + RET ; -#IF (IDEENABLE) -ORG_IDE .EQU $ - #INCLUDE "ide.asm" -SIZ_IDE .EQU $ - ORG_IDE - .ECHO "IDE occupies " - .ECHO SIZ_IDE - .ECHO " bytes.\n" -#ENDIF +; SYSTEM CHECK: DUMP MACHINE STATE AND CONTINUE? ; -#IF (PPIDEENABLE) -ORG_PPIDE .EQU $ - #INCLUDE "ppide.asm" -SIZ_PPIDE .EQU $ - ORG_PPIDE - .ECHO "PPIDE occupies " - .ECHO SIZ_PPIDE - .ECHO " bytes.\n" -#ENDIF +SYSCHKA: + ; CHECK DIAG LEVEL TO SEE IF WE SHOULD DISPLAY + PUSH AF ; PRESERVE INCOMING AF VALUE + LD A,(CB_DIAGLVL) ; GET DIAGNOSTIC LEVEL + CP DL_ERROR ; >= ERROR LEVEL + JR C,SYSCHK1 ; IF NOT, GO HOME + POP AF ; RESTORE INCOMING AF VALUE ; -#IF (SDENABLE) -ORG_SD .EQU $ - #INCLUDE "sd.asm" -SIZ_SD .EQU $ - ORG_SD - .ECHO "SD occupies " - .ECHO SIZ_SD - .ECHO " bytes.\n" -#ENDIF + ; DISPLAY SYSCHK MESSAGE + PUSH DE ; PRESERVE DE VALUE + LD DE,STR_SYSCHK ; POINT TO PREFIX STRING + CALL WRITESTR ; PRINT IT + POP DE ; RESTORE DE VALUE + CALL XREGDMP ; DUMP REGISTERS + + ; DISPLAY ERROR CODE. IT IS AT RETURN ADDRESS+1 .. LD A,XX + EX (SP),HL ; GET RETURN ADDRESS + INC HL ; POINT TO THE ERROR CODE + PUSH AF + LD A,(HL) ; DISPLAY + CALL PRTHEXBYTE + POP AF + DEC HL ; RESTORE RETURN ADDRESS + EX (SP),HL ; -#IF (HDSKENABLE) -ORG_HDSK .EQU $ - #INCLUDE "hdsk.asm" -SIZ_HDSK .EQU $ - ORG_HDSK - .ECHO "HDSK occupies " - .ECHO SIZ_HDSK - .ECHO " bytes.\n" -#ENDIF + JR CONTINUE ; CHECK W/ USER ; -#IF (PPAENABLE) -ORG_PPA .EQU $ - #INCLUDE "ppa.asm" -SIZ_PPA .EQU $ - ORG_PPA - .ECHO "PPA occupies " - .ECHO SIZ_PPA - .ECHO " bytes.\n" -#ENDIF +SYSCHK1: + ; RETURN IF MESSAGING BYPASSED BY DIAG LEVEL + POP AF + RET ; -#IF (IMMENABLE) -ORG_IMM .EQU $ - #INCLUDE "imm.asm" -SIZ_IMM .EQU $ - ORG_IMM - .ECHO "IMM occupies " - .ECHO SIZ_IMM - .ECHO " bytes.\n" -#ENDIF +; PANIC: DUMP MACHINE STATE AND HALT ; -#IF (SYQENABLE) -ORG_SYQ .EQU $ - #INCLUDE "syq.asm" -SIZ_SYQ .EQU $ - ORG_SYQ - .ECHO "SYQ occupies " - .ECHO SIZ_SYQ - .ECHO " bytes.\n" -#ENDIF +PANIC: + PUSH DE + LD DE,STR_PANIC + CALL WRITESTR + POP DE + CALL XREGDMP ; DUMP REGISTERS + JR SYSHALT ; FULL STOP ; -; TERM IS ALWAYS INCLUDED -ORG_TERM .EQU $ - #INCLUDE "term.asm" -SIZ_TERM .EQU $ - ORG_TERM - .ECHO "TERM occupies " - .ECHO SIZ_TERM - .ECHO " bytes.\n" ; -;#IF (SPKENABLE & DSRTCENABLE) -#IF (SPKENABLE) -ORG_SPK .EQU $ - #INCLUDE "spk.asm" -SIZ_SPK .EQU $ - ORG_SPK - .ECHO "SPK occupies " - .ECHO SIZ_SPK - .ECHO " bytes.\n" -#ENDIF -#IF (KIOENABLE) -ORG_KIO .EQU $ - #INCLUDE "kio.asm" -SIZ_KIO .EQU $ - ORG_KIO - .ECHO "KIO occupies " - .ECHO SIZ_KIO - .ECHO " bytes.\n" -#ENDIF -#IF (CTCENABLE) -ORG_CTC .EQU $ - #INCLUDE "ctc.asm" -SIZ_CTC .EQU $ - ORG_CTC - .ECHO "CTC occupies " - .ECHO SIZ_CTC - .ECHO " bytes.\n" -#ENDIF -#IF (SN76489ENABLE) -ORG_SN76489 .EQU $ - #INCLUDE "sn76489.asm" -SIZ_SN76489 .EQU $ - ORG_SN76489 - .ECHO "SN76489 occupies " - .ECHO SIZ_SN76489 - .ECHO " bytes.\n" -#ENDIF -#IF (AY38910ENABLE) -ORG_AY38910 .EQU $ - #INCLUDE "ay38910.asm" -SIZ_AY38910 .EQU $ - ORG_AY38910 - .ECHO "AY38910 occupies " - .ECHO SIZ_AY38910 - .ECHO " bytes.\n" -#ENDIF -#IF (YM2612ENABLE) -ORG_YM2612 .EQU $ - #INCLUDE "ym2612.asm" -SIZ_YM2612 .EQU $ - ORG_YM2612 - .ECHO "YM2612 occupies " - .ECHO SIZ_YM2612 - .ECHO " bytes.\n" -#ENDIF ; - .ECHO "RTCDEF=" - .ECHO RTCDEF - .ECHO "\n" +CONTINUE: + PUSH AF +CONTINUE1: + PUSH DE + LD DE,STR_CONTINUE + CALL WRITESTR + POP DE + CALL CIN + RES 5,A ; FORCE UPPERCASE (IMPERFECTLY) + CALL COUT ; ECHO + CP 'Y' + JR Z,CONTINUE3 + CP 'N' + JR Z,SYSHALT + JR CONTINUE1 +CONTINUE3: + CALL NEWLINE + POP AF + RET ; -#DEFINE USEDELAY -#INCLUDE "util.asm" -#INCLUDE "time.asm" -#INCLUDE "bcd.asm" -#INCLUDE "decode.asm" -#INCLUDE "encode.asm" ; -#IF (WBWDEBUG == USEXIO) -#INCLUDE "xio.asm" -#ENDIF -#IF (WBWDEBUG == USEMIO) -#INCLUDE "mio.asm" -#ENDIF ; -; INCLUDE LZSA2 decompression engine if required. +SYSHALT: + LD DE,STR_HALT + CALL WRITESTR + DI + HALT ; -#IF ((CVDUENABLE | GDCENABLE | TMSENABLE | VGAENABLE | VRCENABLE) & USELZSA2) -#INCLUDE "unlzsa2s.asm" -#ENDIF +; PRINT VALUE OF HL AS THOUSANDTHS, IE. 0.000 +; +PRTD3M: + PUSH BC + PUSH DE + PUSH HL + LD E,'0' + LD BC,-10000 + CALL PRTD3M1 + LD E,0 + LD BC,-1000 + CALL PRTD3M1 + CALL PC_PERIOD + LD BC,-100 + CALL PRTD3M1 + LD C,-10 + CALL PRTD3M1 + LD C,-1 + CALL PRTD3M1 + POP HL + POP DE + POP BC + RET +PRTD3M1: + LD A,'0' - 1 +PRTD3M2: + INC A + ADD HL,BC + JR C,PRTD3M2 + SBC HL,BC + CP E + JR Z,PRTD3M3 + LD E,0 + CALL COUT +PRTD3M3: + RET ; ;================================================================================================== ; FRONT PANEL SUPPORT @@ -7098,10 +6883,14 @@ HB_CPUSPD2: OR $FF ; SIGNAL ERROR RET ; AND DONE ; +HB_UTIL_END .EQU $ +; ;================================================================================================== ; DISPLAY SUMMARY OF ATTACHED UNITS/DEVICES ;================================================================================================== ; +HB_PRTSUM_BEG .EQU $ +; PRTSUM: CALL NEWLINE2 ; SKIP A LINE LD DE,PS_STRHDR ; POINT TO HEADER @@ -7665,286 +7454,606 @@ PS_SDSND .TEXT "SND$" ; ; SOUND TYPE STRINGS ; -PS_SDSN76489 .TEXT "SN76489$" -PS_SDAY38910 .TEXT "AY-3-8910$" -PS_SDBITMODE .TEXT "I/O PORT$" -PS_SDYM2612 .TEXT "YM2612$" +PS_SDSN76489 .TEXT "SN76489$" +PS_SDAY38910 .TEXT "AY-3-8910$" +PS_SDBITMODE .TEXT "I/O PORT$" +PS_SDYM2612 .TEXT "YM2612$" +; +; 0 1 2 3 4 5 6 7 +; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 +PS_STRHDR .TEXT "Unit Device Type Capacity/Mode\r\n" + .TEXT "---------- ---------- ---------------- --------------------\r\n$" +; +HB_PRTSUM_END .EQU $ +; +;================================================================================================== +; DEVICE DRIVERS +;================================================================================================== +; +HB_DRIVERS_BEG .EQU $ +; +#IF (DSKYENABLE) + #IF (ICMENABLE) +ORG_ICM .EQU $ + #INCLUDE "icm.asm" +SIZ_ICM .EQU $ - ORG_ICM + MEMECHO "ICM occupies " + MEMECHO SIZ_ICM + MEMECHO " bytes.\n" + #ENDIF +; + #IF (PKDENABLE) +ORG_PKD .EQU $ + #INCLUDE "pkd.asm" +SIZ_PKD .EQU $ - ORG_PKD + MEMECHO "PKD occupies " + MEMECHO SIZ_PKD + MEMECHO " bytes.\n" + #ENDIF +; + #IF (H8PENABLE) +ORG_H8P .EQU $ + #INCLUDE "h8p.asm" +SIZ_H8P .EQU $ - ORG_H8P + MEMECHO "H8P occupies " + MEMECHO SIZ_H8P + MEMECHO " bytes.\n" + #ENDIF +#ENDIF +; +#IF (PLATFORM == PLT_NABU) +ORG_NABU .EQU $ + #INCLUDE "nabu.asm" +SIZ_NABU .EQU $ - ORG_NABU + MEMECHO "NABU occupies " + MEMECHO SIZ_NABU + MEMECHO " bytes.\n" +#ENDIF +; +#IF (DSRTCENABLE) +ORG_DSRTC .EQU $ + #INCLUDE "dsrtc.asm" +SIZ_DSRTC .EQU $ - ORG_DSRTC + MEMECHO "DSRTC occupies " + MEMECHO SIZ_DSRTC + MEMECHO " bytes.\n" +#ENDIF +; +#IF (DS1501RTCENABLE) +ORG_DS1501RTC .EQU $ + #INCLUDE "ds1501rtc.asm" +SIZ_DS1501RTC .EQU $ - ORG_DS1501RTC + MEMECHO "DS1501RTC occupies " + MEMECHO SIZ_DS1501RTC + MEMECHO " bytes.\n" +#ENDIF +; +#IF (BQRTCENABLE) +ORG_BQRTC .EQU $ + #INCLUDE "bqrtc.asm" +SIZ_BQRTC .EQU $ - ORG_BQRTC + MEMECHO "BQRTC occupies " + MEMECHO SIZ_BQRTC + MEMECHO " bytes.\n" +#ENDIF +; +#IF (SIMRTCENABLE) +ORG_SIMRTC .EQU $ + #INCLUDE "simrtc.asm" +SIZ_SIMRTC .EQU $ - ORG_SIMRTC + MEMECHO "SIMRTC occupies " + MEMECHO SIZ_SIMRTC + MEMECHO " bytes.\n" +#ENDIF +; +#IF (PCFENABLE) +ORG_PCF .EQU $ + #INCLUDE "pcf.asm" +SIZ_PCF .EQU $ - ORG_PCF + MEMECHO "PCF occupies " + MEMECHO SIZ_PCF + MEMECHO " bytes.\n" +#ENDIF +; +#IF (DS7RTCENABLE) +ORG_DS7RTC .EQU $ + #INCLUDE "ds7rtc.asm" +SIZ_DS7RTC .EQU $ - ORG_DS7RTC + MEMECHO "DS7RTC occupies " + MEMECHO SIZ_DS7RTC + MEMECHO " bytes.\n" +#ENDIF +; +#IF (INTRTCENABLE) +ORG_INTRTC .EQU $ + #INCLUDE "intrtc.asm" +SIZ_INTRTC .EQU $ - ORG_INTRTC + MEMECHO "INTRTC occupies " + MEMECHO SIZ_INTRTC + MEMECHO " bytes.\n" +#ENDIF +; +#IF (RP5RTCENABLE) +ORG_RP5RTC .EQU $ + #INCLUDE "rp5rtc.asm" +SIZ_RP5RTC .EQU $ - ORG_RP5RTC + MEMECHO "RP5RTC occupies " + MEMECHO SIZ_RP5RTC + MEMECHO " bytes.\n" +#ENDIF +#IF (ASCIENABLE) +ORG_ASCI .EQU $ + #INCLUDE "asci.asm" +SIZ_ASCI .EQU $ - ORG_ASCI + MEMECHO "ASCI occupies " + MEMECHO SIZ_ASCI + MEMECHO " bytes.\n" +#ENDIF +; +#IF (Z2UENABLE) +ORG_Z2U .EQU $ + #INCLUDE "z2u.asm" +SIZ_Z2U .EQU $ - ORG_Z2U + MEMECHO "Z2U occupies " + MEMECHO SIZ_Z2U + MEMECHO " bytes.\n" +#ENDIF +; +#IF (UARTENABLE) +ORG_UART .EQU $ + #INCLUDE "uart.asm" +SIZ_UART .EQU $ - ORG_UART + MEMECHO "UART occupies " + MEMECHO SIZ_UART + MEMECHO " bytes.\n" +#ENDIF +; +#IF (DUARTENABLE) +ORG_DUART .EQU $ + #INCLUDE "duart.asm" +SIZ_DUART .EQU $ - ORG_DUART + MEMECHO "DUART occupies " + MEMECHO SIZ_DUART + MEMECHO " bytes.\n" +#ENDIF +; +#IF (SIOENABLE) +ORG_SIO .EQU $ + #INCLUDE "sio.asm" +SIZ_SIO .EQU $ - ORG_SIO + MEMECHO "SIO occupies " + MEMECHO SIZ_SIO + MEMECHO " bytes.\n" +#ENDIF ; -; 0 1 2 3 4 5 6 7 -; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 -PS_STRHDR .TEXT "Unit Device Type Capacity/Mode\r\n" - .TEXT "---------- ---------- ---------------- --------------------\r\n$" +#IF (ACIAENABLE) +ORG_ACIA .EQU $ + #INCLUDE "acia.asm" +SIZ_ACIA .EQU $ - ORG_ACIA + MEMECHO "ACIA occupies " + MEMECHO SIZ_ACIA + MEMECHO " bytes.\n" +#ENDIF ; -;================================================================================================== -; CONSOLE CHARACTER I/O HELPER ROUTINES (REGISTERS PRESERVED) -;================================================================================================== +#IF (PIOENABLE) +ORG_PIO .EQU $ + #INCLUDE "pio.asm" +SIZ_PIO .EQU $ - ORG_PIO + MEMECHO "PIO occupies " + MEMECHO SIZ_PIO + MEMECHO " bytes.\n" +#ENDIF ; -; OUTPUT CHARACTER FROM A +#IF (LPTENABLE) +ORG_LPT .EQU $ + #INCLUDE "lpt.asm" +SIZ_LPT .EQU $ - ORG_LPT + MEMECHO "LPT occupies " + MEMECHO SIZ_LPT + MEMECHO " bytes.\n" +#ENDIF ; -COUT: - ; SAVE ALL INCOMING REGISTERS - PUSH AF - PUSH BC - PUSH DE - PUSH HL +#IF (PIO_4P | PIO_ZP | PIO_SBC) +ORG_PIO .EQU $ + #INCLUDE "pio.asm" +SIZ_PIO .EQU $ - ORG_PIO + MEMECHO "PIO occupies " + MEMECHO SIZ_PIO + MEMECHO " bytes.\n" +#ENDIF ; - ; GET CURRENT CONSOLE UNIT - LD E,A ; TEMPORARILY STASH OUTPUT CHAR IN E - LD A,(CB_CONDEV) ; GET CONSOLE UNIT BYTE - CP $FF ; TEST FOR $FF (HBIOS NOT READY) - JR Z,COUT1 ; IF NOT READY, TRY DEBUG OUTPUT +#IF (UFENABLE) +ORG_UF .EQU $ + #INCLUDE "uf.asm" +SIZ_UF .EQU $ - ORG_UF + MEMECHO "UF occupies " + MEMECHO SIZ_UF + MEMECHO " bytes.\n" +#ENDIF ; - ; USE HBIOS - LD C,A ; CONSOLE UNIT TO C - LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR - CALL CIO_DISPATCH ; CALL CIO DISPATCHER DIRECTLY - JR COUT2 ; CONTINUE +#IF (VGAENABLE) +ORG_VGA .EQU $ + #INCLUDE "vga.asm" +SIZ_VGA .EQU $ - ORG_VGA + MEMECHO "VGA occupies " + MEMECHO SIZ_VGA + MEMECHO " bytes.\n" +#ENDIF ; -COUT1: +#IF (CVDUENABLE) +ORG_CVDU .EQU $ + #INCLUDE "cvdu.asm" +SIZ_CVDU .EQU $ - ORG_CVDU + MEMECHO "CVDU occupies " + MEMECHO SIZ_CVDU + MEMECHO " bytes.\n" +#ENDIF ; -#IF (WBWDEBUG == USEXIO) - LD A,E ; GET OUTPUT CHAR BACK TO ACCUM - CALL XIO_OUTC ; OUTPUT VIA XIO +#IF (VDUENABLE) +ORG_VDU .EQU $ + #INCLUDE "vdu.asm" +SIZ_VDU .EQU $ - ORG_VDU + MEMECHO "VDU occupies " + MEMECHO SIZ_VDU + MEMECHO " bytes.\n" #ENDIF ; -#IF (WBWDEBUG == USEMIO) - LD A,E - CALL MIO_OUTC ; OUTPUT VIA MIO +#IF (TMSENABLE) +ORG_TMS .EQU $ + #INCLUDE "tms.asm" +SIZ_TMS .EQU $ - ORG_TMS + MEMECHO "TMS occupies " + MEMECHO SIZ_TMS + MEMECHO " bytes.\n" #ENDIF ; -COUT2: - ; RESTORE ALL REGISTERS - POP HL - POP DE - POP BC - POP AF - RET +#IF (EFENABLE) +ORG_EF .EQU $ + #INCLUDE "ef.asm" +SIZ_EF .EQU $ - ORG_EF + MEMECHO "EF occupies " + MEMECHO SIZ_EF + MEMECHO " bytes.\n" +#ENDIF ; -; INPUT CHARACTER TO A +#IF (GDCENABLE) +ORG_GDC .EQU $ + #INCLUDE "gdc.asm" +SIZ_GDC .EQU $ - ORG_GDC + MEMECHO "GDC occupies " + MEMECHO SIZ_GDC + MEMECHO " bytes.\n" +#ENDIF ; -CIN: - ; SAVE INCOMING REGISTERS (AF IS OUTPUT) - PUSH BC - PUSH DE - PUSH HL +#IF (VRCENABLE) +ORG_VRC .EQU $ + #INCLUDE "vrc.asm" +SIZ_VRC .EQU $ - ORG_VRC + MEMECHO "VRC occupies " + MEMECHO SIZ_VRC + MEMECHO " bytes.\n" +#ENDIF ; - LD A,(CB_CONDEV) ; GET CONSOLE UNIT BYTE - CP $FF ; TEST FOR $FF (HBIOS NOT READY) - JR Z,CIN1 ; IF NOT READY, TRY DEBUG INPUT +#IF (DMAENABLE) +ORG_DMA .EQU $ +#INCLUDE "dma.asm" +SIZ_DMA .EQU $ - ORG_DMA + MEMECHO "DMA occupies " + MEMECHO SIZ_DMA + MEMECHO " bytes.\n" +#ENDIF ; - ; USE HBIOS - LD C,A ; CONSOLE UNIT TO C - LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR - CALL CIO_DISPATCH ; CALL CIO DISPATCHER DIRECTLY - LD A,E ; RESULTANT CHAR TO A - JR CIN2 ; CONTINUE +#IF (KBDENABLE) +ORG_KBD .EQU $ + #INCLUDE "kbd.asm" +SIZ_KBD .EQU $ - ORG_KBD + MEMECHO "KBD occupies " + MEMECHO SIZ_KBD + MEMECHO " bytes.\n" +#ENDIF ; -CIN1: +#IF (PPKENABLE) +ORG_PPK .EQU $ + #INCLUDE "ppk.asm" +SIZ_PPK .EQU $ - ORG_PPK + MEMECHO "PPK occupies " + MEMECHO SIZ_PPK + MEMECHO " bytes.\n" +#ENDIF ; -#IF (WBWDEBUG == USEXIO) - CALL XIO_INC ; GET CHAR +#IF (MKYENABLE) +ORG_MKY .EQU $ + #INCLUDE "mky.asm" +SIZ_MKY .EQU $ - ORG_MKY + MEMECHO "MKY occupies " + MEMECHO SIZ_MKY + MEMECHO " bytes.\n" #ENDIF ; -#IF (WBWDEBUG == USEMIO) - CALL MIO_INC ; GET CHAR +#IF (NABUKBENABLE) +ORG_NABUKB .EQU $ + #INCLUDE "nabukb.asm" +SIZ_NABUKB .EQU $ - ORG_NABUKB + MEMECHO "NABUKB occupies " + MEMECHO SIZ_NABUKB + MEMECHO " bytes.\n" #ENDIF ; -CIN2: +#IF (PRPENABLE) +ORG_PRP .EQU $ + #INCLUDE "prp.asm" +SIZ_PRP .EQU $ - ORG_PRP + MEMECHO "PRP occupies " + MEMECHO SIZ_PRP + MEMECHO " bytes.\n" +#ENDIF ; - ; RESTORE REGISTERS (AF IS OUTPUT) - POP HL - POP DE - POP BC - RET +#IF (PPPENABLE) +ORG_PPP .EQU $ + #INCLUDE "ppp.asm" +SIZ_PPP .EQU $ - ORG_PPP + MEMECHO "PPP occupies " + MEMECHO SIZ_PPP + MEMECHO " bytes.\n" +#ENDIF ; -; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING) +#IF (SCONENABLE) +ORG_SCON .EQU $ + #INCLUDE "scon.asm" +SIZ_SCON .EQU $ - ORG_SCON + MEMECHO "SCON occupies " + MEMECHO SIZ_SCON + MEMECHO " bytes.\n" +#ENDIF ; -CST: - ; SAVE INCOMING REGISTERS (AF IS OUTPUT) - PUSH BC - PUSH DE - PUSH HL +#IF (CHENABLE) +ORG_CH .EQU $ + #INCLUDE "ch.asm" +SIZ_CH .EQU $ - ORG_CH + MEMECHO "CH occupies " + MEMECHO SIZ_CH + MEMECHO " bytes.\n" +#ENDIF ; - LD A,(CB_CONDEV) ; GET CONSOLE UNIT BYTE - CP $FF ; TEST FOR $FF (HBIOS NOT READY) - JR Z,CST1 ; IIF NOT READY, TRY DEBUG DEBUG STATUS +#IF (ESPENABLE) +ORG_ESP .EQU $ + #INCLUDE "esp.asm" +SIZ_ESP .EQU $ - ORG_ESP + MEMECHO "ESP occupies " + MEMECHO SIZ_ESP + MEMECHO " bytes.\n" +#ENDIF ; - ; USE HBIOS - LD C,A ; CONSOLE UNIT TO C - LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS - CALL CIO_DISPATCH ; CALL CIO DISPATCHER DIRECTLY - JR CST2 ; CONTINUE +#IF (MDENABLE) +ORG_MD .EQU $ + #INCLUDE "md.asm" +SIZ_MD .EQU $ - ORG_MD + MEMECHO "MD occupies " + MEMECHO SIZ_MD + MEMECHO " bytes.\n" +#ENDIF ; -CST1: +#IF (FDENABLE) +ORG_FD .EQU $ + #INCLUDE "fd.asm" +SIZ_FD .EQU $ - ORG_FD + MEMECHO "FD occupies " + MEMECHO SIZ_FD + MEMECHO " bytes.\n" +#ENDIF ; -#IF (WBWDEBUG == USEXIO) - CALL XIO_IST ; GET STATUS +#IF (RFENABLE) +ORG_RF .EQU $ + #INCLUDE "rf.asm" +SIZ_RF .EQU $ - ORG_RF + MEMECHO "RF occupies " + MEMECHO SIZ_RF + MEMECHO " bytes.\n" #ENDIF ; -#IF (WBWDEBUG == USEMIO) - CALL MIO_IST ; GET STATUS +#IF (IDEENABLE) +ORG_IDE .EQU $ + #INCLUDE "ide.asm" +SIZ_IDE .EQU $ - ORG_IDE + MEMECHO "IDE occupies " + MEMECHO SIZ_IDE + MEMECHO " bytes.\n" #ENDIF ; -CST2: - ; RESTORE REGISTERS (AF IS OUTPUT) - POP HL - POP DE - POP BC - RET +#IF (PPIDEENABLE) +ORG_PPIDE .EQU $ + #INCLUDE "ppide.asm" +SIZ_PPIDE .EQU $ - ORG_PPIDE + MEMECHO "PPIDE occupies " + MEMECHO SIZ_PPIDE + MEMECHO " bytes.\n" +#ENDIF ; -;================================================================================================== -; INTERNAL UTILITY FUNCTIONS -;================================================================================================== +#IF (SDENABLE) +ORG_SD .EQU $ + #INCLUDE "sd.asm" +SIZ_SD .EQU $ - ORG_SD + MEMECHO "SD occupies " + MEMECHO SIZ_SD + MEMECHO " bytes.\n" +#ENDIF ; -; SET HL TO IY+A, A IS TRASHED +#IF (HDSKENABLE) +ORG_HDSK .EQU $ + #INCLUDE "hdsk.asm" +SIZ_HDSK .EQU $ - ORG_HDSK + MEMECHO "HDSK occupies " + MEMECHO SIZ_HDSK + MEMECHO " bytes.\n" +#ENDIF ; -LDHLIYA: - PUSH IY ; COPY INSTANCE DATA PTR - POP HL ; ... TO HL - ;JP ADDHLA ; APPLY OFFSET TO HL AND RETURN - ADD A,L ; ADD OFFSET TO LSB - LD L,A ; ... PUT BACK IN L - RET NC ; DONE IF CF NOT SET - INC H ; IF CF SET, BUMP MSB - RET ; ... AND RETURN +#IF (PPAENABLE) +ORG_PPA .EQU $ + #INCLUDE "ppa.asm" +SIZ_PPA .EQU $ - ORG_PPA + MEMECHO "PPA occupies " + MEMECHO SIZ_PPA + MEMECHO " bytes.\n" +#ENDIF ; -; CONVERT AN HBIOS STANDARD HARD DISK CHS ADDRESS TO -; AN LBA ADDRESS. A STANDARD HBIOS HARD DISK IS ASSUMED -; TO HAVE 16 SECTORS PER TRACK AND 16 HEADS PER CYLINDER. +#IF (IMMENABLE) +ORG_IMM .EQU $ + #INCLUDE "imm.asm" +SIZ_IMM .EQU $ - ORG_IMM + MEMECHO "IMM occupies " + MEMECHO SIZ_IMM + MEMECHO " bytes.\n" +#ENDIF ; -; INPUT: HL=TRACK, D=HEAD, E=SECTOR -; OUTPUT: DE:HL=32 BIT LBA ADDRESS (D:7 IS NOT SET IN THE RESULT) +#IF (SYQENABLE) +ORG_SYQ .EQU $ + #INCLUDE "syq.asm" +SIZ_SYQ .EQU $ - ORG_SYQ + MEMECHO "SYQ occupies " + MEMECHO SIZ_SYQ + MEMECHO " bytes.\n" +#ENDIF ; -HB_CHS2LBA: +; TERM IS ALWAYS INCLUDED +ORG_TERM .EQU $ + #INCLUDE "term.asm" +SIZ_TERM .EQU $ - ORG_TERM + MEMECHO "TERM occupies ") + MEMECHO SIZ_TERM + MEMECHO " bytes.\n" ; - LD A,D ; HEAD TO A - RLCA ; LEFT SHIFT TO HIGH NIBBLE - RLCA ; ... DEPENDS ON HIGH - RLCA ; ... NIBBLE BEING 0 SINCE - RLCA ; ... IT ROTATES INTO LOW NIBBLE - OR E ; COMBINE WITH SECTOR (HIGH NIBBLE MUST BE ZERO) - LD D,0 - LD E,H - LD H,L - LD L,A - XOR A - RET +;#IF (SPKENABLE & DSRTCENABLE +#IF (SPKENABLE) +ORG_SPK .EQU $ + #INCLUDE "spk.asm" +SIZ_SPK .EQU $ - ORG_SPK + MEMECHO "SPK occupies " + MEMECHO SIZ_SPK + MEMECHO " bytes.\n" +#ENDIF +#IF (KIOENABLE) +ORG_KIO .EQU $ + #INCLUDE "kio.asm" +SIZ_KIO .EQU $ - ORG_KIO + MEMECHO "KIO occupies " + MEMECHO SIZ_KIO + MEMECHO " bytes.\n" +#ENDIF +#IF (CTCENABLE) +ORG_CTC .EQU $ + #INCLUDE "ctc.asm" +SIZ_CTC .EQU $ - ORG_CTC + MEMECHO "CTC occupies " + MEMECHO SIZ_CTC + MEMECHO " bytes.\n" +#ENDIF +#IF (SN76489ENABLE) +ORG_SN76489 .EQU $ + #INCLUDE "sn76489.asm" +SIZ_SN76489 .EQU $ - ORG_SN76489 + MEMECHO "SN76489 occupies " + MEMECHO SIZ_SN76489 + MEMECHO " bytes.\n" +#ENDIF +#IF (AY38910ENABLE) +ORG_AY38910 .EQU $ + #INCLUDE "ay38910.asm" +SIZ_AY38910 .EQU $ - ORG_AY38910 + MEMECHO "AY38910 occupies " + MEMECHO SIZ_AY38910 + MEMECHO " bytes.\n" +#ENDIF +#IF (YM2612ENABLE) +ORG_YM2612 .EQU $ + #INCLUDE "ym2612.asm" +SIZ_YM2612 .EQU $ - ORG_YM2612 + MEMECHO "YM2612 occupies " + MEMECHO SIZ_YM2612 + MEMECHO " bytes.\n" +#ENDIF ; -; SYSTEM CHECK: DUMP MACHINE STATE AND CONTINUE? + MEMECHO "RTCDEF=" + MEMECHO RTCDEF + MEMECHO "\n" ; -SYSCHKA: - ; CHECK DIAG LEVEL TO SEE IF WE SHOULD DISPLAY - PUSH AF ; PRESERVE INCOMING AF VALUE - LD A,(CB_DIAGLVL) ; GET DIAGNOSTIC LEVEL - CP DL_ERROR ; >= ERROR LEVEL - JR C,SYSCHK1 ; IF NOT, GO HOME - POP AF ; RESTORE INCOMING AF VALUE +HB_DRIVERS_END .EQU $ ; - ; DISPLAY SYSCHK MESSAGE - PUSH DE ; PRESERVE DE VALUE - LD DE,STR_SYSCHK ; POINT TO PREFIX STRING - CALL WRITESTR ; PRINT IT - POP DE ; RESTORE DE VALUE - CALL XREGDMP ; DUMP REGISTERS - - ; DISPLAY ERROR CODE. IT IS AT RETURN ADDRESS+1 .. LD A,XX - EX (SP),HL ; GET RETURN ADDRESS - INC HL ; POINT TO THE ERROR CODE - PUSH AF - LD A,(HL) ; DISPLAY - CALL PRTHEXBYTE - POP AF - DEC HL ; RESTORE RETURN ADDRESS - EX (SP),HL +;================================================================================================== +; FONTS +;================================================================================================== ; - JR CONTINUE ; CHECK W/ USER +HB_FONTS_BEG .EQU $ ; -SYSCHK1: - ; RETURN IF MESSAGING BYPASSED BY DIAG LEVEL - POP AF - RET +ORG_FONTS .EQU $ ; -; PANIC: DUMP MACHINE STATE AND HALT + MEMECHO "FONTS" ; -PANIC: - PUSH DE - LD DE,STR_PANIC - CALL WRITESTR - POP DE - CALL XREGDMP ; DUMP REGISTERS - JR SYSHALT ; FULL STOP +#IFDEF USEFONT8X8 +FONT8X8: ; +; FOR NOW, WE NEVER COMPRESS THE 8X8 FONT. SEE TMS DRIVER. ; + #IF USELZSA2 & FALSE + #INCLUDE "font8x8c.asm" + #ELSE + #INCLUDE "font8x8u.asm" + #ENDIF + MEMECHO " 8X8" +#ENDIF ; -CONTINUE: - PUSH AF -CONTINUE1: - PUSH DE - LD DE,STR_CONTINUE - CALL WRITESTR - POP DE - CALL CIN - RES 5,A ; FORCE UPPERCASE (IMPERFECTLY) - CALL COUT ; ECHO - CP 'Y' - JR Z,CONTINUE3 - CP 'N' - JR Z,SYSHALT - JR CONTINUE1 -CONTINUE3: - CALL NEWLINE - POP AF - RET +#IFDEF USEFONT8X11 +FONT8X11: + #IF USELZSA2 + #INCLUDE "font8x11c.asm" + #ELSE + #INCLUDE "font8x11u.asm" + #ENDIF + MEMECHO " 8X11" +#ENDIF ; +#IFDEF USEFONT8X16 +FONT8X16: + #IF USELZSA2 + #INCLUDE "font8x16c.asm" + #ELSE + #INCLUDE "font8x16u.asm" + #ENDIF + MEMECHO " 8X16" +#ENDIF ; +#IFDEF USEFONTCGA +FONTCGA: + #IF USELZSA2 + #INCLUDE "fontcgac.asm" + #ELSE + #INCLUDE "fontcgau.asm" + #ENDIF + MEMECHO " CGA" +#ENDIF ; -SYSHALT: - LD DE,STR_HALT - CALL WRITESTR - DI - HALT +#IFDEF USEFONTVGARC +FONTVGARC: + #IF USELZSA2 + #INCLUDE "fontvgarcc.asm" + #ELSE + #INCLUDE "fontvgarcu.asm" + #ENDIF + MEMECHO " VGARC" +#ENDIF ; -; PRINT VALUE OF HL AS THOUSANDTHS, IE. 0.000 +SIZ_FONTS .EQU $ - ORG_FONTS + MEMECHO " occupy " + MEMECHO SIZ_FONTS + MEMECHO " bytes.\n" ; -PRTD3M: - PUSH BC - PUSH DE - PUSH HL - LD E,'0' - LD BC,-10000 - CALL PRTD3M1 - LD E,0 - LD BC,-1000 - CALL PRTD3M1 - CALL PC_PERIOD - LD BC,-100 - CALL PRTD3M1 - LD C,-10 - CALL PRTD3M1 - LD C,-1 - CALL PRTD3M1 - POP HL - POP DE - POP BC - RET -PRTD3M1: - LD A,'0' - 1 -PRTD3M2: - INC A - ADD HL,BC - JR C,PRTD3M2 - SBC HL,BC - CP E - JR Z,PRTD3M3 - LD E,0 - CALL COUT -PRTD3M3: - RET +HB_FONTS_END .EQU $ ; ;================================================================================================== ; HBIOS GLOBAL DATA ;================================================================================================== ; +HB_DATA_BEG .EQU $ +; IDLECOUNT .DB 0 ; HEAPCURB .DW 0 ; MARK HEAP ADDRESS AFTER INITIALIZATION @@ -7964,9 +8073,12 @@ RTCDEFVAL .DB RTCDEF ; STORAGE FOR RTC DEFAULT VALUE HB_BOOT_REC .DB 0 ; BOOT MODE (0=NORMAL, 1=RECOVERY MODE) #ENDIF ; -STR_BANNER .DB "RomWBW HBIOS v", BIOSVER, ", ", TIMESTAMP, "$" +STR_BANNER .DB "\r\n\r\nRomWBW HBIOS v", BIOSVER, ", ", TIMESTAMP +#IFDEF APPBOOT + .DB " (App Boot)" +#ENDIF + .DB "$" STR_PLATFORM .DB PLATFORM_NAME, "$" -;STR_SWITCH .DB "*** Activating CRT Console ***$" STR_CONSOLE .DB "\r\n\r\n Console on Unit #$" STR_BADINT .DB "\r\n*** BAD INT ***\r\n$" STR_LOWBAT .DB "\r\n\r\n+++ LOW BATTERY +++$" @@ -7979,8 +8091,6 @@ STR_CONTINUE .TEXT "\r\nContinue (Y/N)? $" MSG_HBVER .DB $76,$7F,$30,$3F,$00,$00,$00,$00 ; "HBIO " #ENDIF ; -HB_APPBNK .DB 0 ; START BANK WHEN RUN IN APP MODE -; HB_CURSEC .DB 0 ; CURRENT SECOND (TEMP) ; HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP) @@ -7996,7 +8106,116 @@ HB_CONCFGSAV .DW 0 ; CONSOLE CONFIG SAVE AREA ; HB_HASFP .DB 0 ; NON-ZERO MEANS FP EXISTS ; -HB_WRKBUF .FILL 512,0 ; INTERNAL DISK BUFFER +HB_WRKBUF .EQU $ ; INTERNAL DISK BUFFER +; +; THIS AREA IS USED AS A TEMPORARY DISK BUFFER. IT IS ALSO USED +; FOR THE APPBOOT STARTUP CODE SINCE THAT CODE CAN BE DISCARDED +; AFTER STARTUP. +; +HB_APPBOOT: +; +#IFDEF APPBOOT + ; APPBOOT IS ONLY SUPPORTED ON A RUNNING ROMWBW SYSTEM. + ; CONFIRM AND DIAGNOSE IF NOT. + LD HL,(HB_IDENT) ; HL := ADR OR ROMWBW HBIOS IDENT + LD A,(HL) ; GET FIRST BYTE OF ROMWBW MARKER + CP 'W' ; MATCH? + JR NZ,HB_APPBOOTERR ; ABORT WITH INVALID CONFIG BLOCK + INC HL ; NEXT BYTE (MARKER BYTE 2) + LD A,(HL) ; LOAD IT + CP ~'W' ; MATCH? + JR NZ,HB_APPBOOTERR ; ABORT WITH INVALID CONFIG BLOCK + JR HB_APPBOOT1 ; WE ARE RUNNING ROMWBW, CONTINUE +; +HB_APPBOOTERR: + LD DE,STR_APPBOOTERR ; POINT TO ERROR MESSAGE + LD C,9 ; BDOS FUNC 9: WRITE STR + CALL $0005 ; DO IT + OR $FF ; SIGNAL ERROR + RET ; AND RETURN +; +STR_APPBOOTERR .DB "\r\n\r\n*** App Boot is only possible on running RomWBW system!\r\n\r\n$" +; +HB_APPBOOT1: + ; ANNOUNCE THE APPLICATION BOOT + LD DE,STR_APPBOOT ; POINT TO MESSAGE + LD C,9 ; BDOS FUNC 9: WRITE STR + CALL $0005 ; DO IT + JR HB_APPBOOT2 ; AND CONTINUE +; +STR_APPBOOT .DB "\r\n\r\n*** Launching RomWBW HBIOS v", BIOSVER, ", ", TIMESTAMP, " for" + .DB "\r\n\r\n ", PLATFORM_NAME, "$" +; +HB_APPBOOT2: + ; IF THIS IS AN APPLICATION BOOT, WE CAPTURE THE CURRENT BANK ID + ; AND UPDATE THE PROXY IMAGE. LATER, WHEN THE PROXY IMAGE IS COPIED + ; TO IT'S RUNNING LOCATION AT TOP OF RAM, THE CORRECT HB_CURBNK + ; VALUE WILL BE INSTALLED. NOTE: THE ADDRESSES IN THE PROXY + ; IMAGE ARE FOR IT'S RUNNING LOCATION. WE NEED TO USE *MATH* + ; TO DERIVE THE LOCATION OF HB_CURBNK IN THE IMAGE. + LD A,(HB_CURBNK) + LD (HB_CURBNK - HBX_LOC + HBX_IMG),A +; + ; FOR AN APPLICATION BOOT, WE ALSO COPY THE CONCATENATED OS + ; IMAGES TO THE AUX BANK WHERE WE WILL JUMP TO ROMLDR LATER. + ; THE AUX BANK WILL BE DESTROYED IF CP/M 3 IS LOADED. WE DON'T + ; LIVE IN A PERFECT WORLD. + LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY + LD D,BID_AUX ; D = DEST BANK = AUX BANK + LD A,(HB_CURBNK) ; E = SRC BANK = CUR BANK + LD E,A ; USE AS SOURCE + LD HL,$8000 ; HL = COPY LEN = ENTIRE BANK + RST 08 ; DO IT + LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY + LD HL,HB_END ; COPY FROM END OF HBIOS + LD DE,0 ; TO START OF TARGET BANK + RST 08 ; DO IT +; + #IF (MEMMGR == MM_Z280) + ; WE NEED TO SWITCH FROM USER MODE TO SYSTEM MODE, BUT CONTINUE + ; RUNNING IN THE CURRENT BANK. THIS IS A LITTLE MESSY. +; + ; FIRST, OVERLAY PROXY CODE WITH NEW CODE SO WE CAN USE THE + ; PROXY ROUTINES SAFELY. + LD DE,HBX_LOC ; RUNNING LOCATION + LD HL,HBX_IMG ; LOCATION IN IMAGE + LD BC,HBX_SIZ ; SIZE + LDIR ; INSTALL IT +; + ; NEXT, COPY A BIT OF CODE TO DO THE SYSTEM TRANSITION TO + ; UPPER MEM. WE CAN BORROW THE PROXY BOUNCE BUFFER FOR THIS. + LD HL,Z280_GOSYS + LD DE,HBX_BUF + LD BC,Z280_GOSYS_LEN + LDIR +; + ; THEN SYSCALL IT. NOTE THAT THE ROUTINE CALLED DOES NOT + ; (RET)URN, IT JUMPS TO CONTINUE SO THAT THE SYSCALL DOES + ; NOT RETURN TO USER MODE. + SC HBX_BUF ; SYSCALL ROUTINE +; +Z280_GOSYS: + ; THIS BIT OF CODE RUNS IN UPPER MEM. IT REMAPS THE LOW MEM + ; SYSTEM PAGES TO THE CURRENT BANK. WE LOSE STACK CONTEXT IN + ; THE PROCESS, SO IN THIS CASE WE NEED TO JUMP BACK TO CONTINUE + ; THE APP BOOT. + DI ; NO INTERRUPTS + LD SP,HBX_LOC ; SETUP INITIAL STACK JUST BELOW HBIOS PROXY + LD A,(HB_CURBNK) ; CURRENT BANK + LD B,$10 ; FIRST SYSTEM PDR + CALL Z280_BNKSEL ; DO THE SWITCH + JP HB_APPBOOT_Z ; AND RESUME BOOT +; +Z280_GOSYS_LEN .EQU $ - Z280_GOSYS +; + #ENDIF +; + XOR A ; SIGNAL SUCCESS + RET ; AND RETURN +; +#ENDIF +; + .FILL (512 - ($ - HB_WRKBUF)) ; PAD REMAINDER OF WORK BUF ; ; ; @@ -8080,18 +8299,138 @@ DSKY_HEXBUFLEN .EQU $ - DSKY_HEXBUF ; #ENDIF ; +HB_DATA_END .EQU $ +; HB_END .EQU $ ; SLACK .EQU BNKTOP - $ - .ECHO "HBIOS space remaining: " - .ECHO SLACK - .ECHO " bytes.\n" +; +; +; +#IFDEF MEMINFO + .ECHO "PAGE ZERO @ " + .ECHO HB_PGZERO_BEG + .ECHO ", LENGTH=" + .ECHO HB_PGZERO_END - HB_PGZERO_BEG + .ECHO "\n" +; + .ECHO "HCB @ " + .ECHO HB_HCB_BEG + .ECHO ", LENGTH=" + .ECHO HB_HCB_END - HB_HCB_BEG + .ECHO "\n" +; + .ECHO "PROXY @ " + .ECHO HB_PROXY_BEG + .ECHO ", LENGTH=" + .ECHO HB_PROXY_END - HB_PROXY_BEG + .ECHO "\n" +; + .ECHO "ENTRY @ " + .ECHO HB_ENTRY_BEG + .ECHO ", LENGTH=" + .ECHO HB_ENTRY_END - HB_ENTRY_BEG + .ECHO "\n" +; + .ECHO "INTVEC @ " + .ECHO HB_INTVEC_BEG + .ECHO ", LENGTH=" + .ECHO HB_INTVEC_END - HB_INTVEC_BEG + .ECHO "\n" +; + .ECHO "SYSINIT @ " + .ECHO HB_SYSINIT_BEG + .ECHO ", LENGTH=" + .ECHO HB_SYSINIT_END - HB_SYSINIT_BEG + .ECHO "\n" +; + .ECHO "DISP @ " + .ECHO HB_DISP_BEG + .ECHO ", LENGTH=" + .ECHO HB_DISP_END - HB_DISP_BEG + .ECHO "\n" +; + .ECHO "SYSAPI @ " + .ECHO HB_SYSAPI_BEG + .ECHO ", LENGTH=" + .ECHO HB_SYSAPI_END - HB_SYSAPI_BEG + .ECHO "\n" +; + .ECHO "Z280IVT @ " + .ECHO HB_Z280IVT_BEG + .ECHO ", LENGTH=" + .ECHO HB_Z280IVT_END - HB_Z280IVT_BEG + .ECHO "\n" +; + .ECHO "INTFUNC @ " + .ECHO HB_INTFUNC_BEG + .ECHO ", LENGTH=" + .ECHO HB_INTFUNC_END - HB_INTFUNC_BEG + .ECHO "\n" +; + .ECHO "UTIL @ " + .ECHO HB_UTIL_BEG + .ECHO ", LENGTH=" + .ECHO HB_UTIL_END - HB_UTIL_BEG + .ECHO "\n" +; + .ECHO "PRTSUM @ " + .ECHO HB_PRTSUM_BEG + .ECHO ", LENGTH=" + .ECHO HB_PRTSUM_END - HB_PRTSUM_BEG + .ECHO "\n" +; + .ECHO "DRIVERS @ " + .ECHO HB_DRIVERS_BEG + .ECHO ", LENGTH=" + .ECHO HB_DRIVERS_END - HB_DRIVERS_BEG + .ECHO "\n" +; + .ECHO "FONTS @ " + .ECHO HB_FONTS_BEG + .ECHO ", LENGTH=" + .ECHO HB_FONTS_END - HB_FONTS_BEG + .ECHO "\n" +; + .ECHO "DATA @ " + .ECHO HB_DATA_BEG + .ECHO ", LENGTH=" + .ECHO HB_DATA_END - HB_DATA_BEG + .ECHO "\n" +; +TOTAL .EQU 0 +TOTAL .SET TOTAL + (HB_PGZERO_END - HB_PGZERO_BEG) +TOTAL .SET TOTAL + (HB_HCB_END - HB_HCB_BEG) +TOTAL .SET TOTAL + (HB_PROXY_END - HB_PROXY_BEG) +TOTAL .SET TOTAL + (HB_ENTRY_END - HB_ENTRY_BEG) +TOTAL .SET TOTAL + (HB_INTVEC_END - HB_INTVEC_BEG) +TOTAL .SET TOTAL + (HB_SYSINIT_END - HB_SYSINIT_BEG) +TOTAL .SET TOTAL + (HB_DISP_END - HB_DISP_BEG) +TOTAL .SET TOTAL + (HB_SYSAPI_END - HB_SYSAPI_BEG) +TOTAL .SET TOTAL + (HB_Z280IVT_END - HB_Z280IVT_BEG) +TOTAL .SET TOTAL + (HB_INTFUNC_END - HB_INTFUNC_BEG) +TOTAL .SET TOTAL + (HB_UTIL_END - HB_UTIL_BEG) +TOTAL .SET TOTAL + (HB_PRTSUM_END - HB_PRTSUM_BEG) +TOTAL .SET TOTAL + (HB_DRIVERS_END - HB_DRIVERS_BEG) +TOTAL .SET TOTAL + (HB_FONTS_END - HB_FONTS_BEG) +TOTAL .SET TOTAL + (HB_DATA_END - HB_DATA_BEG) +TOTAL .SET TOTAL + SLACK +; + .ECHO "TOTAL MEMORY USAGE = " + .ECHO TOTAL + .ECHO "\n" +; +#ENDIF +; + .ECHO "HBIOS space remaining: " + .ECHO SLACK + .ECHO " bytes.\n" ; ; DIAGNOSE HBIOS BANK OVERFLOW ; #IF (SLACK < 0) - .ECHO "*** ERROR: HBIOS too big!!!\n" - !!! ; FORCE AN ASSEMBLY ERROR + .ECHO "*** ERROR: HBIOS too big!!!\n" + !!! ; FORCE AN ASSEMBLY ERROR #ENDIF ; ; CHECK TO SEE IF WE HAVE ENOUGH HEAP TO CACHE THE CP/M CCP @@ -8099,20 +8438,20 @@ SLACK .EQU BNKTOP - $ ; MAY NOT NEED THIS, THE MOST COMMON ONES DO. CREATING AN HBIOS ; WITHOUT SPACE FOR THIS WILL NOT BE USEFUL. ; -#IF ((CCP_SIZ + 512) > SLACK) - .ECHO "*** ERROR: Insufficient HEAP space!!!\n" - !!! ; FORCE AN ASSEMBLY ERROR +#IF ((CCP_SIZ + 512 + 8) > SLACK) + .ECHO "*** ERROR: Insufficient HEAP space!!!\n" + !!! ; FORCE AN ASSEMBLY ERROR #ENDIF ; ;;;#IF (SLACK < (1024 * 3)) -;;; .ECHO "*** ERROR: Low HEAP space!!!\n" -;;; !!! ; FORCE AN ASSEMBLY ERROR +;;; .ECHO "*** ERROR: Low HEAP space!!!\n" +;;; !!! ; FORCE AN ASSEMBLY ERROR ;;;#ENDIF ; #IFDEF ROMBOOT #IF (ROMSIZE > 0) - .FILL SLACK + .FILL SLACK #ENDIF #ENDIF ; - .END + .END diff --git a/Source/HBIOS/hdsk.asm b/Source/HBIOS/hdsk.asm index 2fa6fddf..6dfc426f 100644 --- a/Source/HBIOS/hdsk.asm +++ b/Source/HBIOS/hdsk.asm @@ -22,11 +22,11 @@ HDSK_DEV .EQU 0 ; OFFSET OF DEVICE NUMBER (BYTE) HDSK_STAT .EQU 1 ; OFFSET OF STATUS (BYTE) HDSK_LBA .EQU 2 ; OFFSET OF LBA (DWORD) ; - .ECHO "HDSK: IO=" - .ECHO HDSK_IO - .ECHO ", DEVICE COUNT=" - .ECHO HDSK_DEVCNT - .ECHO "\n" + DEVECHO "HDSK: IO=" + DEVECHO HDSK_IO + DEVECHO ", DEVICE COUNT=" + DEVECHO HDSK_DEVCNT + DEVECHO "\n" ; HDSK_CFGTBL: ; DEVICE 0 diff --git a/Source/HBIOS/icm.asm b/Source/HBIOS/icm.asm index 79aab3fd..a0490cd4 100644 --- a/Source/HBIOS/icm.asm +++ b/Source/HBIOS/icm.asm @@ -31,6 +31,10 @@ ICM_PPIA .EQU ICMPPIBASE + 0 ; PORT A ICM_PPIB .EQU ICMPPIBASE + 1 ; PORT B ICM_PPIC .EQU ICMPPIBASE + 2 ; PORT C ICM_PPIX .EQU ICMPPIBASE + 3 ; PPI CONTROL PORT +; + DEVECHO "ICM: IO=" + DEVECHO ICMPPIBASE + DEVECHO "\n" ; ;__ICM_INIT__________________________________________________________________________________________ ; diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index aae7173e..388c3181 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -214,26 +214,26 @@ IDE_DEV0M: ; DEVICE 0, MASTER .DB IDE0DATHI ; IO BASE ADDRESS .DW IDE_DEV0S ; PARTNER ; - .ECHO "IDE: MODE=" + DEVECHO "IDE: MODE=" #IF (IDE0MODE == IDEMODE_NONE) - .ECHO "NONE" + DEVECHO "NONE" #ENDIF #IF (IDE0MODE == IDEMODE_DIO) - .ECHO "DIO" + DEVECHO "DIO" #ENDIF #IF (IDE0MODE == IDEMODE_DIDE) - .ECHO "DIDE" + DEVECHO "DIDE" #ENDIF #IF (IDE0MODE == IDEMODE_MK4) - .ECHO "MK4" + DEVECHO "MK4" #ENDIF #IF (IDE0MODE == IDEMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF - .ECHO ", IO=" - .ECHO IDE0BASE - .ECHO ", MASTER" - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO IDE0BASE + DEVECHO ", MASTER" + DEVECHO "\n" ; IDE_DEV0S: ; DEVICE 0, SLAVE .DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY) @@ -249,26 +249,26 @@ IDE_DEV0S: ; DEVICE 0, SLAVE .DB IDE0DATHI ; IO BASE ADDRESS .DW IDE_DEV0M ; PARTNER ; - .ECHO "IDE: MODE=" + DEVECHO "IDE: MODE=" #IF (IDE0MODE == IDEMODE_NONE) - .ECHO "NONE" + DEVECHO "NONE" #ENDIF #IF (IDE0MODE == IDEMODE_DIO) - .ECHO "DIO" + DEVECHO "DIO" #ENDIF #IF (IDE0MODE == IDEMODE_DIDE) - .ECHO "DIDE" + DEVECHO "DIDE" #ENDIF #IF (IDE0MODE == IDEMODE_MK4) - .ECHO "MK4" + DEVECHO "MK4" #ENDIF #IF (IDE0MODE == IDEMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF - .ECHO ", IO=" - .ECHO IDE0BASE - .ECHO ", SLAVE" - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO IDE0BASE + DEVECHO ", SLAVE" + DEVECHO "\n" #ENDIF ; #IF (IDECNT >= 2) @@ -287,26 +287,26 @@ IDE_DEV1M: ; DEVICE 1, MASTER .DB IDE1DATHI ; IO BASE ADDRESS .DW IDE_DEV1S ; PARTNER ; - .ECHO "IDE: MODE=" + DEVECHO "IDE: MODE=" #IF (IDE1MODE == IDEMODE_NONE) - .ECHO "NONE" + DEVECHO "NONE" #ENDIF #IF (IDE1MODE == IDEMODE_DIO) - .ECHO "DIO" + DEVECHO "DIO" #ENDIF #IF (IDE1MODE == IDEMODE_DIDE) - .ECHO "DIDE" + DEVECHO "DIDE" #ENDIF #IF (IDE1MODE == IDEMODE_MK4) - .ECHO "MK4" + DEVECHO "MK4" #ENDIF #IF (IDE1MODE == IDEMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF - .ECHO ", IO=" - .ECHO IDE1BASE - .ECHO ", MASTER" - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO IDE1BASE + DEVECHO ", MASTER" + DEVECHO "\n" ; IDE_DEV1S: ; DEVICE 1, SLAVE .DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY) @@ -322,26 +322,26 @@ IDE_DEV1S: ; DEVICE 1, SLAVE .DB IDE1DATHI ; IO BASE ADDRESS .DW IDE_DEV1M ; PARTNER ; - .ECHO "IDE: MODE=" + DEVECHO "IDE: MODE=" #IF (IDE1MODE == IDEMODE_NONE) - .ECHO "NONE" + DEVECHO "NONE" #ENDIF #IF (IDE1MODE == IDEMODE_DIO) - .ECHO "DIO" + DEVECHO "DIO" #ENDIF #IF (IDE1MODE == IDEMODE_DIDE) - .ECHO "DIDE" + DEVECHO "DIDE" #ENDIF #IF (IDE1MODE == IDEMODE_MK4) - .ECHO "MK4" + DEVECHO "MK4" #ENDIF #IF (IDE1MODE == IDEMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF - .ECHO ", IO=" - .ECHO IDE1BASE - .ECHO ", SLAVE" - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO IDE1BASE + DEVECHO ", SLAVE" + DEVECHO "\n" #ENDIF ; #IF (IDECNT >= 3) @@ -360,26 +360,26 @@ IDE_DEV2M: ; DEVICE 2, MASTER .DB IDE2DATHI ; IO BASE ADDRESS .DW IDE_DEV2S ; PARTNER ; - .ECHO "IDE: MODE=" + DEVECHO "IDE: MODE=" #IF (IDE2MODE == IDEMODE_NONE) - .ECHO "NONE" + DEVECHO "NONE" #ENDIF #IF (IDE2MODE == IDEMODE_DIO) - .ECHO "DIO" + DEVECHO "DIO" #ENDIF #IF (IDE2MODE == IDEMODE_DIDE) - .ECHO "DIDE" + DEVECHO "DIDE" #ENDIF #IF (IDE2MODE == IDEMODE_MK4) - .ECHO "MK4" + DEVECHO "MK4" #ENDIF #IF (IDE2MODE == IDEMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF - .ECHO ", IO=" - .ECHO IDE2BASE - .ECHO ", MASTER" - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO IDE2BASE + DEVECHO ", MASTER" + DEVECHO "\n" ; IDE_DEV2S: ; DEVICE 2, SLAVE .DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY) @@ -395,26 +395,26 @@ IDE_DEV2S: ; DEVICE 2, SLAVE .DB IDE2DATHI ; IO BASE ADDRESS .DW IDE_DEV1M ; PARTNER ; - .ECHO "IDE: MODE=" + DEVECHO "IDE: MODE=" #IF (IDE2MODE == IDEMODE_NONE) - .ECHO "NONE" + DEVECHO "NONE" #ENDIF #IF (IDE2MODE == IDEMODE_DIO) - .ECHO "DIO" + DEVECHO "DIO" #ENDIF #IF (IDE2MODE == IDEMODE_DIDE) - .ECHO "DIDE" + DEVECHO "DIDE" #ENDIF #IF (IDE2MODE == IDEMODE_MK4) - .ECHO "MK4" + DEVECHO "MK4" #ENDIF #IF (IDE2MODE == IDEMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF - .ECHO ", IO=" - .ECHO IDE2BASE - .ECHO ", SLAVE" - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO IDE2BASE + DEVECHO ", SLAVE" + DEVECHO "\n" #ENDIF ; #IF ($ - IDE_CFGTBL) != (IDE_DEVCNT * IDE_CFGSIZ) diff --git a/Source/HBIOS/imm.asm b/Source/HBIOS/imm.asm index d85a76cd..237c6ed4 100644 --- a/Source/HBIOS/imm.asm +++ b/Source/HBIOS/imm.asm @@ -1526,16 +1526,16 @@ IMM0_CFG: ; DEVICE 0 .DW 0,0 ; DEVICE CAPACITY .DW 0,0 ; CURRENT LBA ; - .ECHO "IMM: MODE=" + DEVECHO "IMM: MODE=" #IF (IMMMODE == IMMMODE_SPP) - .ECHO "SPP" + DEVECHO "SPP" #ENDIF #IF (IMMMODE == IMMMODE_MG014) - .ECHO "MG014" + DEVECHO "MG014" #ENDIF - .ECHO ", IO=" - .ECHO IMM0BASE - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO IMM0BASE + DEVECHO "\n" #ENDIF ; #IF (IMMCNT >= 2) @@ -1548,16 +1548,16 @@ IMM1_CFG: ; DEVICE 1 .DW 0,0 ; DEVICE CAPACITY .DW 0,0 ; CURRENT LBA ; - .ECHO "IMM: MODE=" + DEVECHO "IMM: MODE=" #IF (IMMMODE == IMMMODE_SPP) - .ECHO "SPP" + DEVECHO "SPP" #ENDIF #IF (IMMMODE == IMMMODE_MG014) - .ECHO "MG014" + DEVECHO "MG014" #ENDIF - .ECHO ", IO=" - .ECHO IMM1BASE - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO IMM1BASE + DEVECHO "\n" #ENDIF ; #IF ($ - IMM_CFG) != (IMMCNT * IMM_CFGSIZ) diff --git a/Source/HBIOS/intrtc.asm b/Source/HBIOS/intrtc.asm index 8d65e2e2..49eb9573 100644 --- a/Source/HBIOS/intrtc.asm +++ b/Source/HBIOS/intrtc.asm @@ -5,7 +5,7 @@ ; INTRTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS) ; - .ECHO "INTRTC: ENABLED\n" + DEVECHO "INTRTC: ENABLED\n" ; ; RTC DEVICE INITIALIZATION ENTRY ; diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index 113c8aa1..67014d2b 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -56,7 +56,7 @@ KBD_STATUS .DB 0 ; CURRENT STATUS BITS (SEE ABOVE) KBD_REPEAT .DB 0 ; CURRENT REPEAT RATE KBD_IDLE .DB 0 ; IDLE COUNT ; - .ECHO "KBD: ENABLED\n" + DEVECHO "KBD: ENABLED\n" ; ;__________________________________________________________________________________________________ ; KEYBOARD INITIALIZATION diff --git a/Source/HBIOS/kio.asm b/Source/HBIOS/kio.asm index 8c7867c7..bb7cd109 100644 --- a/Source/HBIOS/kio.asm +++ b/Source/HBIOS/kio.asm @@ -25,6 +25,10 @@ KIO_KIOCMD .EQU KIOBASE + $0E KIO_KIOCMDB .EQU KIOBASE + $0F ; ; +; + DEVECHO "KIO: IO=" + DEVECHO KIOBASE + DEVECHO "\n" ; KIO_PREINIT: CALL KIO_DETECT diff --git a/Source/HBIOS/lpt.asm b/Source/HBIOS/lpt.asm index 73f26b5e..917a5a38 100644 --- a/Source/HBIOS/lpt.asm +++ b/Source/HBIOS/lpt.asm @@ -421,16 +421,16 @@ LPT0_CFG: .DB LPT0BASE ; BASE PORT .DW 0 ; LINE CONFIGURATION ; - .ECHO "LPT: MODE=" + DEVECHO "LPT: MODE=" #IF (LPTMODE == LPTMODE_SPP) - .ECHO "SPP" + DEVECHO "SPP" #ENDIF #IF (LPTMODE == LPTMODE_MG014) - .ECHO "MG014" + DEVECHO "MG014" #ENDIF - .ECHO ", IO=" - .ECHO LPT0BASE - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO LPT0BASE + DEVECHO "\n" ; LPT_CFGSIZ .EQU $ - LPT_CFG ; SIZE OF ONE CFG TABLE ENTRY ; @@ -444,16 +444,16 @@ LPT1_CFG: .DB LPT1BASE ; BASE PORT .DW 0 ; LINE CONFIGURATION ; - .ECHO "LPT: MODE=" + DEVECHO "LPT: MODE=" #IF (LPTMODE == LPTMODE_SPP) - .ECHO "SPP" + DEVECHO "SPP" #ENDIF #IF (LPTMODE == LPTMODE_MG014) - .ECHO "MG014" + DEVECHO "MG014" #ENDIF - .ECHO ", IO=" - .ECHO LPT1BASE - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO LPT1BASE + DEVECHO "\n" ; #ENDIF ; diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 6e8adbb8..0d8b3378 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -40,7 +40,7 @@ MD_CFGTBL: .DB MID_MDRAM ; DEVICE MEDIA ID .DB MD_ARAM ; DEVICE ATTRIBUTE ; - .ECHO "MD: TYPE=RAM\n" + DEVECHO "MD: TYPE=RAM\n" #ENDIF ; #IF (MDROM) @@ -51,7 +51,7 @@ MD_CFGTBL: .DB MID_MDROM ; DEVICE MEDIA ID .DB MD_AROM ; DEVICE ATTRIBUTE ; - .ECHO "MD: TYPE=ROM\n" + DEVECHO "MD: TYPE=ROM\n" #ENDIF ; MD_DEVCNT .EQU ($ - MD_CFGTBL) / MD_CFGSIZ diff --git a/Source/HBIOS/mky.asm b/Source/HBIOS/mky.asm index 0a86dd16..34650e82 100644 --- a/Source/HBIOS/mky.asm +++ b/Source/HBIOS/mky.asm @@ -177,6 +177,11 @@ SCANCODE_TBL: .DB S_RETURN, S_SELECT, S_BACKSPACE, S_STOP, S_TAB, S_ESC, S_F5, S_F4 ; 07 .DB S_RIGHT, S_DOWN, S_UP, S_LEFT, S_DELETE, S_INSERT, S_HOME, S_SPACE ; 08 + + DEVECHO "MKY: IO=" + DEVECHO MKY_REGA + DEVECHO "\n" + ;__________________________________________________________________________________________________ ; KEYBOARD INITIALIZATION ;__________________________________________________________________________________________________ diff --git a/Source/HBIOS/nabu.asm b/Source/HBIOS/nabu.asm index 212d0f35..b8ecfb9a 100644 --- a/Source/HBIOS/nabu.asm +++ b/Source/HBIOS/nabu.asm @@ -4,6 +4,11 @@ ;================================================================================================== NABU_INT1CLR .EQU $68 NABU_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B +; + DEVECHO "NABU: IO=" + DEVECHO NABU_INT1CLR + DEVECHO "\n" + ; ; ; HARDWARE RESET PRIOR TO ROMWBW CONSOLE INITIALIZATION diff --git a/Source/HBIOS/nabukb.asm b/Source/HBIOS/nabukb.asm index 873bd79c..9bcaf745 100644 --- a/Source/HBIOS/nabukb.asm +++ b/Source/HBIOS/nabukb.asm @@ -45,6 +45,10 @@ ; CALL SUB12 ; NABUKB_DAT .EQU $90 +; + DEVECHO "NABUKB: IO=" + DEVECHO NABUKB_DAT + DEVECHO "\n" ; NABUKB_INIT: CALL NEWLINE diff --git a/Source/HBIOS/pcf.asm b/Source/HBIOS/pcf.asm index 92023bc9..c8c0eaa1 100644 --- a/Source/HBIOS/pcf.asm +++ b/Source/HBIOS/pcf.asm @@ -94,9 +94,9 @@ PCF_ACKTO .EQU 65000 PCF_BBTO .EQU 65000 PCF_LABDLY .EQU 65000 ; - .ECHO "PCF: IO=" - .ECHO PCF_BASE - .ECHO "\n" + DEVECHO "PCF: IO=" + DEVECHO PCF_BASE + DEVECHO "\n" ; ; DATA PORT REGISTERS ; diff --git a/Source/HBIOS/pio.asm b/Source/HBIOS/pio.asm index 1dc823a9..444fb64b 100644 --- a/Source/HBIOS/pio.asm +++ b/Source/HBIOS/pio.asm @@ -308,9 +308,9 @@ PIO0A_CFG: .DW DEFSERCFG ; LINE CONFIGURATION .DW PIO0A_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "PIO: IO=" - .ECHO PIO0BASE - .ECHO ", CHANNEL A\n" + DEVECHO "PIO: IO=" + DEVECHO PIO0BASE + DEVECHO ", CHANNEL A\n" ; PIO_CFGSIZ .EQU $ - PIO_CFG ; SIZE OF ONE CFG TABLE ENTRY ; @@ -324,9 +324,9 @@ PIO0B_CFG: .DW DEFSERCFG ; LINE CONFIGURATION .DW PIO0B_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "PIO: IO=" - .ECHO PIO0BASE - .ECHO ", CHANNEL B\n" + DEVECHO "PIO: IO=" + DEVECHO PIO0BASE + DEVECHO ", CHANNEL B\n" ; #IF (PIOCNT >= 2) ; @@ -340,9 +340,9 @@ PIO1A_CFG: .DW DEFSERCFG ; LINE CONFIGURATION .DW PIO1A_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "PIO: IO=" - .ECHO PIO1BASE - .ECHO ", CHANNEL A\n" + DEVECHO "PIO: IO=" + DEVECHO PIO1BASE + DEVECHO ", CHANNEL A\n" ; ; PIO1 CHANNEL B PIO1B_CFG: @@ -354,9 +354,9 @@ PIO1B_CFG: .DW DEFSERCFG ; LINE CONFIGURATION .DW PIO1B_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "PIO: IO=" - .ECHO PIO1BASE - .ECHO ", CHANNEL B\n" + DEVECHO "PIO: IO=" + DEVECHO PIO1BASE + DEVECHO ", CHANNEL B\n" ; #ENDIF ; diff --git a/Source/HBIOS/pkd.asm b/Source/HBIOS/pkd.asm index fbaa6317..5da7dda4 100644 --- a/Source/HBIOS/pkd.asm +++ b/Source/HBIOS/pkd.asm @@ -66,9 +66,9 @@ PKD_CMD_FIFO .EQU %01000000 ; READ FIFO ; PKD_PRESCL .EQU PKDOSC/100000 ; PRESCALER ; - .ECHO "PKD: IO=" - .ECHO PKDPPIBASE - .ECHO "\n" + DEVECHO "PKD: IO=" + DEVECHO PKDPPIBASE + DEVECHO "\n" ; ;__PKD_PREINIT_______________________________________________________________________________________ ; diff --git a/Source/HBIOS/ppa.asm b/Source/HBIOS/ppa.asm index e13493d8..0b6da099 100644 --- a/Source/HBIOS/ppa.asm +++ b/Source/HBIOS/ppa.asm @@ -1386,16 +1386,16 @@ PPA0_CFG: ; DEVICE 0 .DW 0,0 ; DEVICE CAPACITY .DW 0,0 ; CURRENT LBA ; - .ECHO "PPA: MODE=" + DEVECHO "PPA: MODE=" #IF (PPAMODE == PPAMODE_SPP) - .ECHO "SPP" + DEVECHO "SPP" #ENDIF #IF (PPAMODE == PPAMODE_MG014) - .ECHO "MG014" + DEVECHO "MG014" #ENDIF - .ECHO ", IO=" - .ECHO PPA0BASE - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO PPA0BASE + DEVECHO "\n" #ENDIF ; #IF (PPACNT >= 2) @@ -1408,16 +1408,16 @@ PPA1_CFG: ; DEVICE 1 .DW 0,0 ; DEVICE CAPACITY .DW 0,0 ; CURRENT LBA ; - .ECHO "PPA: MODE=" + DEVECHO "PPA: MODE=" #IF (PPAMODE == PPAMODE_SPP) - .ECHO "SPP" + DEVECHO "SPP" #ENDIF #IF (PPAMODE == PPAMODE_MG014) - .ECHO "MG014" + DEVECHO "MG014" #ENDIF - .ECHO ", IO=" - .ECHO PPA1BASE - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO PPA1BASE + DEVECHO "\n" #ENDIF ; #IF ($ - PPA_CFG) != (PPACNT * PPA_CFGSIZ) diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index d70ede57..de956828 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -230,10 +230,10 @@ PPIDE_DEV0M: ; DEVICE 0, MASTER .DB PPIDE0BASE+3 ; PPI .DW PPIDE_DEV0S ; PARTNER ; - .ECHO "PPIDE: IO=" - .ECHO PPIDE0BASE - .ECHO ", MASTER" - .ECHO "\n" + DEVECHO "PPIDE: IO=" + DEVECHO PPIDE0BASE + DEVECHO ", MASTER" + DEVECHO "\n" ; PPIDE_DEV0S: ; DEVICE 0, SLAVE .DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY) @@ -248,10 +248,10 @@ PPIDE_DEV0S: ; DEVICE 0, SLAVE .DB PPIDE0BASE+3 ; PPI .DW PPIDE_DEV0M ; PARTNER ; - .ECHO "PPIDE: IO=" - .ECHO PPIDE0BASE - .ECHO ", SLAVE" - .ECHO "\n" + DEVECHO "PPIDE: IO=" + DEVECHO PPIDE0BASE + DEVECHO ", SLAVE" + DEVECHO "\n" ; #ENDIF ; @@ -270,10 +270,10 @@ PPIDE_DEV1M: ; DEVICE 1, MASTER .DB PPIDE1BASE+3 ; PPI .DW PPIDE_DEV1S ; PARTNER ; - .ECHO "PPIDE: IO=" - .ECHO PPIDE1BASE - .ECHO ", MASTER" - .ECHO "\n" + DEVECHO "PPIDE: IO=" + DEVECHO PPIDE1BASE + DEVECHO ", MASTER" + DEVECHO "\n" ; PPIDE_DEV1S: ; DEVICE 1, SLAVE .DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY) @@ -288,10 +288,10 @@ PPIDE_DEV1S: ; DEVICE 1, SLAVE .DB PPIDE1BASE+3 ; PPI .DW PPIDE_DEV1M ; PARTNER ; - .ECHO "PPIDE: IO=" - .ECHO PPIDE1BASE - .ECHO ", SLAVE" - .ECHO "\n" + DEVECHO "PPIDE: IO=" + DEVECHO PPIDE1BASE + DEVECHO ", SLAVE" + DEVECHO "\n" ; #ENDIF ; @@ -310,10 +310,10 @@ PPIDE_DEV2M: ; DEVICE 2, MASTER .DB PPIDE2BASE+3 ; PPI .DW PPIDE_DEV2S ; PARTNER ; - .ECHO "PPIDE: IO=" - .ECHO PPIDE2BASE - .ECHO ", MASTER" - .ECHO "\n" + DEVECHO "PPIDE: IO=" + DEVECHO PPIDE2BASE + DEVECHO ", MASTER" + DEVECHO "\n" ; PPIDE_DEV2S: ; DEVICE 2, SLAVE .DB $FE ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY) @@ -328,10 +328,10 @@ PPIDE_DEV2S: ; DEVICE 2, SLAVE .DB PPIDE2BASE+3 ; PPI .DW PPIDE_DEV2M ; PARTNER ; - .ECHO "PPIDE: IO=" - .ECHO PPIDE2BASE - .ECHO ", SLAVE" - .ECHO "\n" + DEVECHO "PPIDE: IO=" + DEVECHO PPIDE2BASE + DEVECHO ", SLAVE" + DEVECHO "\n" ; #ENDIF ; diff --git a/Source/HBIOS/ppk.asm b/Source/HBIOS/ppk.asm index 3c8dbb0a..50ac9a98 100644 --- a/Source/HBIOS/ppk.asm +++ b/Source/HBIOS/ppk.asm @@ -60,7 +60,7 @@ PPK_REPEAT .DB 0 ; CURRENT REPEAT RATE PPK_IDLE .DB 0 ; IDLE COUNT PPK_WAITTO .DW 0 ; TIMEOUT WAIT LOOP COUNT (COMPUTED IN INIT) ; - .ECHO "PPK: ENABLED\n" + DEVECHO "PPK: ENABLED\n" ; ;__________________________________________________________________________________________________ ; KEYBOARD INITIALIZATION diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index 2ebcad99..9b1c1301 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -9,9 +9,9 @@ PPP_IO .EQU PPPBASE + 0 ; PPP DATA I/O (PPI PORT A) PPP_CTL .EQU PPPBASE + 2 ; PPP CTL LINES (PPI PORT C) PPP_PPICTL .EQU PPPBASE + 3 ; PPI CONTROL PORT ; - .ECHO "PPP: IO=" - .ECHO PPP_IO - .ECHO "\n" + DEVECHO "PPP: IO=" + DEVECHO PPP_IO + DEVECHO "\n" ; ; COMMAND BYTES ; @@ -253,7 +253,7 @@ PPP_FWVER .DB $00, $00, $00, $00 ; MMNNBBB (M=MAJOR, N=MINOR, B=BUILD) PPPCON_ROWS .EQU 29 ; PROPELLER VGA DISPLAY ROWS (30 - 1 STATUS LINES) PPPCON_COLS .EQU 80 ; PROPELLER VGA DISPLAY COLS ; - .ECHO "PPPCON: ENABLED\n" + DEVECHO "PPPCON: ENABLED\n" ; PPPCON_INIT: CALL NEWLINE @@ -420,7 +420,7 @@ PPPSD_CFGTBL: ; .DB $FF ; END MARKER ; - .ECHO "PPPSD: ENABLED\n" + DEVECHO "PPPSD: ENABLED\n" ; ; SD CARD INITIALIZATION ; diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index 38849dce..6cc98ff2 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -7,9 +7,9 @@ ; PRP_IOBASE .EQU $A8 ; - .ECHO "PRP: IO=" - .ECHO PRP_IOBASE - .ECHO "\n" + DEVECHO "PRP: IO=" + DEVECHO PRP_IOBASE + DEVECHO "\n" ; ; GLOBAL PROPIO INITIALIZATION ; @@ -124,7 +124,7 @@ PRPCON_DSPRDY .EQU $10 ; BIT SET WHEN DISPLAY BUF IS READY FOR A BYTE (BUF EMPT PRPCON_ROWS .EQU 29 ; PROPELLER VGA DISPLAY ROWS (30 - 1 STATUS LINES) PRPCON_COLS .EQU 80 ; PROPELLER VGA DISPLAY COLS ; - .ECHO "PRPCON: ENABLED\n" + DEVECHO "PRPCON: ENABLED\n" ; ; ; @@ -317,7 +317,7 @@ PRPSD_CFGTBL: ; .DB $FF ; END MARKER ; - .ECHO "PRPSD: ENABLED\n" + DEVECHO "PRPSD: ENABLED\n" ; ; SD CARD INITIALIZATION ; diff --git a/Source/HBIOS/rf.asm b/Source/HBIOS/rf.asm index 29d9dabc..cd804074 100644 --- a/Source/HBIOS/rf.asm +++ b/Source/HBIOS/rf.asm @@ -43,9 +43,9 @@ RF_CFGTBL: .DB 0 ; UNUSED .DB RF_U0IO ; DEVICE BASE ADDR ; - .ECHO "RF: IO=" - .ECHO RF_U0IO - .ECHO "\n" + DEVECHO "RF: IO=" + DEVECHO RF_U0IO + DEVECHO "\n" ; #IF (RF_DEVCNT > 1) ; DEVICE 1 @@ -56,9 +56,9 @@ RF_CFGTBL: .DB RF_U1IO ; DEVICE BASE ADDR #ENDIF ; - .ECHO "RF: IO=" - .ECHO RF_U1IO - .ECHO "\n" + DEVECHO "RF: IO=" + DEVECHO RF_U1IO + DEVECHO "\n" ; #IF (RF_DEVCNT > 2) ; DEVICE 2 @@ -69,9 +69,9 @@ RF_CFGTBL: .DB RF_U2IO ; DEVICE BASE ADDR #ENDIF ; - .ECHO "RF: IO=" - .ECHO RF_U2IO - .ECHO "\n" + DEVECHO "RF: IO=" + DEVECHO RF_U2IO + DEVECHO "\n" ; #IF (RF_DEVCNT > 3) ; DEVICE 3 @@ -81,9 +81,9 @@ RF_CFGTBL: .DB 0 ; UNUSED .DB RF_U3IO ; DEVICE BASE ADDR ; - .ECHO "RF: IO=" - .ECHO RF_U3IO - .ECHO "\n" + DEVECHO "RF: IO=" + DEVECHO RF_U3IO + DEVECHO "\n" ; #ENDIF ; diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 021efe85..4d4395d8 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -148,7 +148,7 @@ start: ld bc,$01FB ; UNA func: set bank ld de,BID_USR ; select user bank rst 08 ; do it - ld (bid_ldr),de ; ... for later + ld (bid_ldr),de ; save previous bank for later bit 7,d ; starting from ROM? #endif ; @@ -156,6 +156,8 @@ start: ld hl,ra_tbl ; assume ROM startup jr z,start1 ; if so, ra_tbl OK, skip ahead ld hl,ra_tbl_app ; not ROM boot, get app tbl loc + ld a,$ff ; signal for app boot + ld (appboot),a ; ... goes in flag start1: ld (ra_tbl_loc),hl ; and overlay pointer ; @@ -206,6 +208,10 @@ start1: call nl2 ; formatting ld hl,str_banner ; display boot banner call pstr ; do it + ld a,(appboot) ; get app boot flag + or a ; set flags + ld hl,str_appboot ; signal application boot mode + call nz,pstr ; print if app boot active call clrbuf ; zero fill the cmd buffer ; #if ((BIOS == BIOS_WBW) & FPSW_ENABLE) @@ -398,7 +404,6 @@ conpoll4: ;======================================================================= ; concmd: - call clrled ; clear LEDs ; #if (DSKYENABLE) call dsky_highlightkeysoff @@ -617,7 +622,6 @@ fp_flopboot2: #if (DSKYENABLE) ; dskycmd: - call clrled ; clear LEDs ; call dsky_getkey ; get DSKY key ld a,e ; put in A @@ -1474,37 +1478,6 @@ str_s100con .db "\r\n\r\nConsole on S100 Bus",0 ; Utility functions ;======================================================================= ; -; Clear LEDs -; -clrled: -#if (BIOS == BIOS_WBW) - #if (FPLED_ENABLE) - ld b,BF_SYSSET ; HBIOS SysGet - ld c,BF_SYSSET_PANEL ; ... Panel swiches value - ld l,$00 ; all LEDs off - rst 08 ; do it - #endif - #if (LEDENABLE) - #if (LEDMODE == LEDMODE_STD) - ld a,$FF ; led is inverted - out (LEDPORT),a ; clear led - #endif - #if (LEDMODE == LEDMODE_RTC) - ; Bits 0 and 1 of the RTC latch are for the LEDs. - ld a,(HB_RTCVAL) - and ~%00000011 - out (RTCIO),a ; clear led - ld (HB_RTCVAL),a - #endif - #if (LEDMODE == LEDMODE_NABU) - ; Bits 0 and 1 of the RTC latch are for the LEDs. - xor a - out (LEDPORT),a - #endif - #endif -#endif - ret -; ; Print string at HL on console, null terminated ; pstr: @@ -2320,6 +2293,7 @@ acmd_to .dw BOOT_TIMEOUT ; auto cmd timeout ;======================================================================= ; str_banner .db PLATFORM_NAME," Boot Loader",0 +str_appboot .db " (App Boot)",0 str_autoboot .db "AutoBoot: ",0 str_prompt .db "Boot [H=Help]: ",0 str_bs .db bs,' ',bs,0 @@ -2435,7 +2409,7 @@ ra_ent .equ 12 ; be pre-loaded into the currently executing ram bank thereby allowing ; those images to be dynamically loaded as well. To support this ; concept, a pseudo-bank called bid_cur is used to specify the images -; normally found in BID_IMG0. In romload, this special value will cause +; normally found in BID_IMG0. This special value will cause ; the associated image to be loaded from the currently executing bank ; which will be correct regardless of the load mode. Images in other ; banks (BID_IMG1) will always be loaded directly from ROM. @@ -2514,6 +2488,7 @@ dma .dw 0 ; address for load sps .dw 0 ; sectors per slice mediaid .db 0 ; media id ; +appboot .db 0 ; app boot if != 0 ra_tbl_loc .dw 0 ; points to active ra_tbl bootunit .db 0 ; boot disk unit bootslice .db 0 ; boot disk slice diff --git a/Source/HBIOS/rp5rtc.asm b/Source/HBIOS/rp5rtc.asm index fe1d5e90..66753fcc 100644 --- a/Source/HBIOS/rp5rtc.asm +++ b/Source/HBIOS/rp5rtc.asm @@ -55,9 +55,9 @@ MODE_RAM1 .EQU 3 MD_TIME .EQU 8 MD_ALRM .EQU 4 - .ECHO "RP5C01: IO=" - .ECHO RP5RTC_REG - .ECHO "\n" + DEVECHO "RP5C01: IO=" + DEVECHO RP5RTC_REG + DEVECHO "\n" RP5RTC_INIT: LD A, (RTC_DISPACT) ; RTC DISPATCHER ALREADY SET? diff --git a/Source/HBIOS/scon.asm b/Source/HBIOS/scon.asm index 749175bb..1d3b4a5d 100644 --- a/Source/HBIOS/scon.asm +++ b/Source/HBIOS/scon.asm @@ -16,9 +16,9 @@ SCON_DSPRDY .EQU %00000100 SCON_COLS .EQU 80 SCON_ROWS .EQU 40 ; - .ECHO "SCON: IO=" - .ECHO SCON_IOBASE - .ECHO "\n" + DEVECHO "SCON: IO=" + DEVECHO SCON_IOBASE + DEVECHO "\n" ; ; ; diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 88904021..f96abca5 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -117,7 +117,7 @@ SD_NOPULLUP .EQU TRUE ; ASSUME NO PULLUP ; SD_DEVCNT .EQU SDCNT ; SET SD_DEVCNT TO SDCNT CONFIG VAR ; - .ECHO "SD: MODE=" + DEVECHO "SD: MODE=" ; #IF (SDMODE == SDMODE_JUHA) ; JUHA MINI-BOARD SD_DEVMAX .EQU 1 ; NUMBER OF PHYSICAL UNITS (SOCKETS) @@ -131,7 +131,7 @@ SD_DI .EQU %00000001 ; RTC:0 IS DATA IN (CARD <- CPU) SD_DO .EQU %10000000 ; RTC:7 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU SD_OPRREG ; IOBASE SD_INVCS .EQU FALSE ; INVERT CS - .ECHO "JUHA" + DEVECHO "JUHA" ; RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE #ENDIF @@ -148,7 +148,7 @@ SD_DI .EQU %00000001 ; RTC:0 IS DATA IN (CARD <- CPU) SD_DO .EQU %01000000 ; RTC:6 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU SD_OPRREG ; IOBASE SD_INVCS .EQU FALSE ; INVERT CS - .ECHO "N8" + DEVECHO "N8" ; RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE #ENDIF @@ -163,7 +163,7 @@ SD_CNTR .EQU Z180_CNTR SD_TRDR .EQU Z180_TRDR SD_IOBASE .EQU SD_OPRREG ; IOBASE SD_INVCS .EQU FALSE ; INVERT CS - .ECHO "CSIO" + DEVECHO "CSIO" ; RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE #ENDIF @@ -184,7 +184,7 @@ SD_DI .EQU %00000001 ; PPIC:0 IS DATA IN (CARD <- CPU) SD_DO .EQU %10000000 ; PPIB:7 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU SD_PPIBASE ; IOBASE SD_INVCS .EQU TRUE ; INVERT CS - .ECHO "PPI" + DEVECHO "PPI" #ENDIF ; #IF (SDMODE == SDMODE_UART) @@ -199,7 +199,7 @@ SD_DI .EQU %00000001 ; UART MCR:0 IS DATA IN (CARD <- CPU) SD_DO .EQU %00100000 ; UART MSR:5 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU UARTIOB ; IOBASE SD_INVCS .EQU TRUE ; INVERT CS - .ECHO "UART" + DEVECHO "UART" #ENDIF ; #IF (SDMODE == SDMODE_DSD) ; DUAL SD @@ -215,7 +215,7 @@ SD_DI .EQU %00000001 ; RTC:6 IS DATA IN (CARD <- CPU) SD_DO .EQU %00000001 ; RTC:0 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU SD_OPRREG ; IOBASE SD_INVCS .EQU FALSE ; INVERT CS - .ECHO "DSD" + DEVECHO "DSD" #ENDIF ; #IF (SDMODE == SDMODE_MK4) ; MARK IV (CSIO STYLE INTERFACE) @@ -227,7 +227,7 @@ SD_CNTR .EQU Z180_CNTR SD_TRDR .EQU Z180_TRDR SD_IOBASE .EQU SD_OPRREG ; IOBASE SD_INVCS .EQU FALSE ; INVERT CS - .ECHO "MK4" + DEVECHO "MK4" #ENDIF ; #IF (SDMODE == SDMODE_SC) ; SC @@ -241,16 +241,10 @@ SD_CNTR .EQU Z180_CNTR SD_TRDR .EQU Z180_TRDR SD_IOBASE .EQU SD_OPRREG ; IOBASE SD_INVCS .EQU TRUE ; INVERT CS - .ECHO "SC" + DEVECHO "SC" ; RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE #ENDIF -; - .ECHO ", IO=" - .ECHO SD_IOBASE - .ECHO ", UNITS=" - .ECHO SDCNT - .ECHO "\n" ; #IF (SDMODE == SDMODE_MT) ; MT shift register for RCBUS (ref SDMODE_CSIO) ; @@ -300,6 +294,7 @@ SD_CS1 .EQU %00010000 ; IN/OUT:SD_OPREG:4 = CS1, SDCARD1 CS, IN=1 Card present #ENDIF SD_IOBASE .EQU SD_BASE ; IOBASE SD_INVCS .EQU FALSE ; INVERT CS + DEVECHO "DUO" #ENDIF ; ; @@ -332,6 +327,7 @@ SD_CINIT .EQU TRUE ; INITIALIZE OUTPUT PORT SD_DDR .EQU $6B ; DATA DIRECTION REGISTER SD_DDRVAL .EQU %11100110 ; DATA DIRECTION REGISTER VALUE SD_INVCS .EQU TRUE ; INVERT CS + DEVECHO "PIO" #ENDIF ; ; @@ -355,6 +351,7 @@ SD_CINIT .EQU TRUE ; INITIALIZE OUTPUT PORT SD_DDR .EQU $03 ; DATA DIRECTION REGISTER SD_DDRVAL .EQU %00001101 ; DATA DIRECTION REGISTER VALUE SD_INVCS .EQU FALSE ; INVERT CS + DEVECHO "USR" #ENDIF ; #IF (SDMODE == SDMODE_Z80R) ; Z80 Retro @@ -376,6 +373,7 @@ SD_DI .EQU %00000001 ; DATA IN (CARD <- CPU) MOSI SD_DO .EQU %00000001 ; DATA OUT (CARD -> CPU) MISO SD_CINIT .EQU FALSE ; INITIALIZE OUTPUT PORT SD_INVCS .EQU FALSE ; INVERT CS + DEVECHO "Z80R" #ENDIF ; FOR NOW WE JUST HOOK UP ONE UNIT. THERE ARE EIGHT PORTS FOR DIFFERENT @@ -389,7 +387,14 @@ SD_CNTR .EQU Z180_CNTR SD_TRDR .EQU Z180_TRDR SD_IOBASE .EQU SD_OPRREG ; IOBASE SD_INVCS .EQU FALSE ; INVERT CS + DEVECHO "EPITX" #ENDIF +; + DEVECHO ", IO=" + DEVECHO SD_IOBASE + DEVECHO ", UNITS=" + DEVECHO SDCNT + DEVECHO "\n" ; #IF (SD_DEVCNT > SD_DEVMAX) .ECHO "*** ERROR: SDCNT EXCEEDS MAXIMUM SUPPORTED BY INTERFACE!!!\n" diff --git a/Source/HBIOS/simrtc.asm b/Source/HBIOS/simrtc.asm index 69943d35..17cc2c3d 100644 --- a/Source/HBIOS/simrtc.asm +++ b/Source/HBIOS/simrtc.asm @@ -8,9 +8,9 @@ SIMRTC_CLKREAD .EQU 7 ; READ CLOCK COMMAND SIMRTC_CLKWRITE .EQU 8 ; WRITE CLOCK COMMAND SIMRTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS) ; - .ECHO "SIMRTC: IO=" - .ECHO SIMRTC_IO - .ECHO "\n" + DEVECHO "SIMRTC: IO=" + DEVECHO SIMRTC_IO + DEVECHO "\n" ; ; RTC DEVICE INITIALIZATION ENTRY ; diff --git a/Source/HBIOS/sio.asm b/Source/HBIOS/sio.asm index 3cf5a52b..0274a66e 100644 --- a/Source/HBIOS/sio.asm +++ b/Source/HBIOS/sio.asm @@ -1171,30 +1171,30 @@ SIO0A_CFG: .DB SIO0ACTCC ; CTC CHANNEL .DB SIO0MODE ; MODE ; - .ECHO "SIO MODE=" + DEVECHO "SIO MODE=" #IF (SIO0MODE == SIOMODE_STD) - .ECHO "STD" + DEVECHO "STD" #ENDIF #IF (SIO0MODE == SIOMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF #IF (SIO0MODE == SIOMODE_SMB) - .ECHO "SMB" + DEVECHO "SMB" #ENDIF #IF (SIO0MODE == SIOMODE_ZP) - .ECHO "ZP" + DEVECHO "ZP" #ENDIF #IF (SIO0MODE == SIOMODE_Z80R) - .ECHO "Z80R" + DEVECHO "Z80R" #ENDIF - .ECHO ", IO=" - .ECHO SIO0BASE - .ECHO ", CHANNEL A" + DEVECHO ", IO=" + DEVECHO SIO0BASE + DEVECHO ", CHANNEL A" #IF (INTMODE > 0) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; SIO_CFGSIZ .EQU $ - SIO_CFG ; SIZE OF ONE CFG TABLE ENTRY ; @@ -1212,29 +1212,29 @@ SIO0B_CFG: .DB SIO0BCTCC ; CTC CHANNEL .DB SIO0MODE ; MODE ; - .ECHO "SIO MODE=" + DEVECHO "SIO MODE=" #IF (SIO0MODE == SIOMODE_STD) - .ECHO "STD" + DEVECHO "STD" #ENDIF #IF (SIO0MODE == SIOMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF #IF (SIO0MODE == SIOMODE_SMB) - .ECHO "SMB" + DEVECHO "SMB" #ENDIF #IF (SIO0MODE == SIOMODE_ZP) - .ECHO "ZP" + DEVECHO "ZP" #ENDIF #IF (SIO0MODE == SIOMODE_Z80R) - .ECHO "Z80R" + DEVECHO "Z80R" #ENDIF - .ECHO ", IO=" - .ECHO SIO0BASE - .ECHO ", CHANNEL B" + DEVECHO ", IO=" + DEVECHO SIO0BASE + DEVECHO ", CHANNEL B" #IF (INTMODE > 0) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; #IF (SIOCNT >= 2) ; @@ -1252,30 +1252,30 @@ SIO1A_CFG: .DB SIO1ACTCC ; CTC CHANNEL .DB SIO1MODE ; MODE ; - .ECHO "SIO MODE=" + DEVECHO "SIO MODE=" #IF (SIO1MODE == SIOMODE_STD) - .ECHO "STD" + DEVECHO "STD" #ENDIF #IF (SIO1MODE == SIOMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF #IF (SIO1MODE == SIOMODE_SMB) - .ECHO "SMB" + DEVECHO "SMB" #ENDIF #IF (SIO1MODE == SIOMODE_ZP) - .ECHO "ZP" + DEVECHO "ZP" #ENDIF #IF (SIO1MODE == SIOMODE_Z80R) - .ECHO "Z80R" + DEVECHO "Z80R" #ENDIF - .ECHO ", IO=" - .ECHO SIO1BASE - .ECHO ", CHANNEL A" + DEVECHO ", IO=" + DEVECHO SIO1BASE + DEVECHO ", CHANNEL A" #IF (INTMODE > 0) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; ; SIO1 CHANNEL B SIO1B_CFG: @@ -1291,29 +1291,29 @@ SIO1B_CFG: .DB SIO1BCTCC ; CTC CHANNEL .DB SIO1MODE ; MODE ; - .ECHO "SIO MODE=" + DEVECHO "SIO MODE=" #IF (SIO1MODE == SIOMODE_STD) - .ECHO "STD" + DEVECHO "STD" #ENDIF #IF (SIO1MODE == SIOMODE_RC) - .ECHO "RC" + DEVECHO "RC" #ENDIF #IF (SIO1MODE == SIOMODE_SMB) - .ECHO "SMB" + DEVECHO "SMB" #ENDIF #IF (SIO1MODE == SIOMODE_ZP) - .ECHO "ZP" + DEVECHO "ZP" #ENDIF #IF (SIO1MODE == SIOMODE_Z80R) - .ECHO "Z80R" + DEVECHO "Z80R" #ENDIF - .ECHO ", IO=" - .ECHO SIO1BASE - .ECHO ", CHANNEL B" + DEVECHO ", IO=" + DEVECHO SIO1BASE + DEVECHO ", CHANNEL B" #IF (INTMODE > 0) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; #ENDIF ; diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index 413b0883..6f31de33 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -17,33 +17,33 @@ ;====================================================================== ; - .ECHO "SN76489 MODE=" + DEVECHO "SN76489 MODE=" ; #IF (SNMODE == SNMODE_VGM) SN76489_PORT_LEFT .EQU $C6 ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT) SN76489_PORT_RIGHT .EQU $C7 ; PORTS FOR ACCESSING THE SN76489 CHIP (RIGHT) - .ECHO "VGM" + DEVECHO "VGM" #ENDIF ; #IF (SNMODE == SNMODE_RC) SN76489_PORT_LEFT .EQU $FF ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT) SN76489_PORT_RIGHT .EQU $FB ; PORTS FOR ACCESSING THE SN76489 CHIP (RIGHT) - .ECHO "RC" + DEVECHO "RC" #ENDIF ; #IF (SNMODE == SNMODE_DUO) SN76489_PORT_LEFT .EQU $BE ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT) SN76489_PORT_RIGHT .EQU $BF ; PORTS FOR ACCESSING THE SN76489 CHIP (RIGHT) - .ECHO "RC" + DEVECHO "RC" #ENDIF ; - .ECHO ", IO_LEFT=" - .ECHO SN76489_PORT_LEFT - .ECHO ", IO_RIGHT=" - .ECHO SN76489_PORT_RIGHT - .ECHO ", CLOCK=" - .ECHO SN7CLK - .ECHO " HZ\n" + DEVECHO ", IO_LEFT=" + DEVECHO SN76489_PORT_LEFT + DEVECHO ", IO_RIGHT=" + DEVECHO SN76489_PORT_RIGHT + DEVECHO ", CLOCK=" + DEVECHO SN7CLK + DEVECHO " HZ\n" ; SN7_IDAT .EQU 0 SN7_TONECNT .EQU 3 ; COUNT NUMBER OF TONE CHANNELS diff --git a/Source/HBIOS/spk.asm b/Source/HBIOS/spk.asm index 780ca4b8..302a7990 100644 --- a/Source/HBIOS/spk.asm +++ b/Source/HBIOS/spk.asm @@ -41,9 +41,9 @@ SP_PENDING_PERIOD .DW SP_NOTE_C8 ; PENDING PERIOD (16 BITS) SP_PENDING_VOLUME .DB $FF ; PENDING VOL (8 BITS) SP_PENDING_DURATION .DW 0 ; PENDING DURATION (16 BITS) ; - .ECHO "SPK: IO=" - .ECHO RTCIO - .ECHO "\n" + DEVECHO "SPK: IO=" + DEVECHO RTCIO + DEVECHO "\n" ; ;====================================================================== ; DRIVER INITIALIZATION diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 62bc7b72..74de2d49 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -34,6 +34,14 @@ FALSE .EQU 0 TRUE .EQU ~FALSE ; +; CONTROLS PRINTING OF SYSTEM INFORMATION IN ASSEMBLY OUTPUT +; +#IFDEF SYSINFO + #DEFINE SYSECHO .ECHO +#ELSE + #DEFINE SYSECHO \; +#ENDIF +; ; DEBUGGING OPTIONS ; USENONE .EQU 0 ; NO DEBUG @@ -147,8 +155,9 @@ CONBELL_IOBIT .EQU 2 ; LEDMODE_NONE .EQU 0 LEDMODE_STD .EQU 1 -LEDMODE_RTC .EQU 2 -LEDMODE_NABU .EQU 3 +LEDMODE_SC .EQU 2 +LEDMODE_RTC .EQU 3 +LEDMODE_NABU .EQU 4 ; ; DSKY MODE SELECTIONS ; @@ -564,24 +573,20 @@ CPUKHZ .SET CPUKHZ / 2 ; Z180 PHI IS ALWAYS 1/2 OSC ; CPUMHZ .EQU CPUKHZ / 1000 ; CPU FREQ IN MHZ ; - .ECHO "ASSUMED CPU SPEED: " - .ECHO CPUKHZ - .ECHO " KHZ\n" -; - .ECHO "INTERRUPTS: " + SYSECHO "INTERRUPTS: " #IF (INTMODE == 0) - .ECHO "NONE" + SYSECHO "NONE" #ENDIF #IF (INTMODE == 1) - .ECHO "MODE 1" + SYSECHO "MODE 1" #ENDIF #IF (INTMODE == 2) - .ECHO "MODE 2" + SYSECHO "MODE 2" #ENDIF #IF (INTMODE == 3) - .ECHO "MODE 3" + SYSECHO "MODE 3" #ENDIF - .ECHO "\n" + SYSECHO "\n" ; ; SYSTEM PERIODIC TIMER MODE ; @@ -594,110 +599,110 @@ TM_SIMH .EQU 3 TM_Z180 .EQU 4 TM_Z280 .EQU 5 ; - .ECHO "SYSTEM TIMER:" + SYSECHO "SYSTEM TIMER:" SYSTIM .EQU TM_NONE ; #IF (CTCENABLE & (INTMODE == 2)) #IF (CTCTIMER) SYSTIM .SET TM_CTC - .ECHO " CTC" + SYSECHO " CTC" #ENDIF #ENDIF ; #IF (TMSENABLE & (INTMODE == 1)) #IF (TMSTIMENABLE) SYSTIM .SET TM_TMS - .ECHO " TMS9918/V9958" + SYSECHO " TMS9918/V9958" #ENDIF #ENDIF ; #IF ((PLATFORM == PLT_SBC) & (INTMODE == 1)) #IF (HTIMENABLE) SYSTIM .SET TM_SIMH - .ECHO " SIMH" + SYSECHO " SIMH" #ENDIF #ENDIF ; #IF ((CPUFAM == CPU_Z180) & (INTMODE == 2)) #IF (Z180_TIMER) SYSTIM .SET TM_Z180 - .ECHO " Z180" + SYSECHO " Z180" #ENDIF #ENDIF ; #IF ((CPUFAM == CPU_Z280) & (MEMMGR == MM_Z280)) #IF (Z280_TIMER) SYSTIM .SET TM_Z280 - .ECHO " Z280" + SYSECHO " Z280" #ENDIF #ENDIF ; #IF SYSTIM == TM_NONE - .ECHO " NONE" + SYSECHO " NONE" #ENDIF ; - .ECHO "\n" + SYSECHO "\n" ; #ENDIF ; #IF (BIOS == BIOS_WBW) - .ECHO "DEFAULT SERIAL CONFIGURATION: " + SYSECHO "DEFAULT SERIAL CONFIGURATION: " #IF ((DEFSERCFG & %1111100000000) == SER_BAUD9600 - .ECHO "9600" + SYSECHO "9600" #ENDIF #IF ((DEFSERCFG & %1111100000000) == SER_BAUD38400 - .ECHO "38400" + SYSECHO "38400" #ENDIF #IF ((DEFSERCFG & %1111100000000) == SER_BAUD57600 - .ECHO "57600" + SYSECHO "57600" #ENDIF #IF ((DEFSERCFG & %1111100000000) == SER_BAUD115200 - .ECHO "115200" + SYSECHO "115200" #ENDIF - .ECHO " BAUD\n" + SYSECHO " BAUD\n" #ENDIF ; ; ; #IF (BIOS == BIOS_WBW) - .ECHO "MEMORY MANAGER: " + SYSECHO "MEMORY MANAGER: " #IF (MEMMGR == MM_SBC) - .ECHO "N8VEM (SBC)" + SYSECHO "N8VEM (SBC)" #ENDIF #IF (MEMMGR == MM_Z2) - .ECHO "ZETA 2 (Z2)" + SYSECHO "ZETA 2 (Z2)" #ENDIF #IF (MEMMGR == MM_N8) - .ECHO "N8 ONBOARD (N8)" + SYSECHO "N8 ONBOARD (N8)" #ENDIF #IF (MEMMGR == MM_Z180) - .ECHO "Z180 NATIVE (Z180)" + SYSECHO "Z180 NATIVE (Z180)" #ENDIF #IF (MEMMGR == MM_Z280) - .ECHO "Z280 NATIVE (Z280)" + SYSECHO "Z280 NATIVE (Z280)" #ENDIF #IF (MEMMGR == MM_ZRC) - .ECHO "ZRC ONBOARD (ZRC)" + SYSECHO "ZRC ONBOARD (ZRC)" #ENDIF #IF (MEMMGR == MM_MBC) - .ECHO "NHYODYNE (MBC)" + SYSECHO "NHYODYNE (MBC)" #ENDIF #IF (MEMMGR == MM_RPH) - .ECHO "RHYOPHYRE ONBOARD (RPH)" + SYSECHO "RHYOPHYRE ONBOARD (RPH)" #ENDIF #IF (MEMMGR == MM_MON) - .ECHO "MONSPUTER ONBOARD (MON)" + SYSECHO "MONSPUTER ONBOARD (MON)" #ENDIF - .ECHO "\n" + SYSECHO "\n" #ENDIF ; - .ECHO "ROM SIZE: " - .ECHO ROMSIZE - .ECHO " KB\n" + SYSECHO "ROM SIZE: " + SYSECHO ROMSIZE + SYSECHO " KB\n" ; - .ECHO "RAM SIZE: " - .ECHO RAMSIZE - .ECHO " KB\n" + SYSECHO "RAM SIZE: " + SYSECHO RAMSIZE + SYSECHO " KB\n" ; ; MEMORY BANK CONFIGURATION ; @@ -832,11 +837,26 @@ BID_ROMD0 .EQU 0 ; NO ROM DRIVE ; #ENDIF ; +#IF ((!MDRAM) | (RAMD_BNKS <= 0)) +BID_RAMD0 .SET $FF +MDRAM .SET FALSE +#ENDIF +; +#IF ((!MDROM) | (ROMD_BNKS <= 0)) +BID_ROMD0 .SET $FF +MDROM .SET FALSE +#ENDIF +; APP_BNKS .SET BID_BUF - BID_APP0 ; -BID_RAMDN .EQU BID_RAMD0 + RAMD_BNKS - 1 ; LAST RAM DRIVE BANK -BID_ROMDN .EQU BID_ROMD0 + ROMD_BNKS - 1 ; LAST ROM DRIVE BANK -BID_APPN .EQU BID_APP0 + APP_BNKS - 1 ; LAST APP BANK +#IF (APP_BNKS <= 0) +BID_APP0 .SET $FF +APP_BNKS .SET 0 +#ENDIF +; +;;;BID_RAMDN .EQU BID_RAMD0 + RAMD_BNKS - 1 ; LAST RAM DRIVE BANK +;;;BID_ROMDN .EQU BID_ROMD0 + ROMD_BNKS - 1 ; LAST ROM DRIVE BANK +;;;BID_APPN .EQU BID_APP0 + APP_BNKS - 1 ; LAST APP BANK ; #IF TRUE .ECHO "------------- CAPACITY -----------------\n" @@ -856,12 +876,12 @@ BID_APPN .EQU BID_APP0 + APP_BNKS - 1 ; LAST APP BANK .ECHO "BID_IMG1: " \ .ECHO BID_IMG1 \ .ECHO "\n" .ECHO "BID_IMG2: " \ .ECHO BID_IMG2 \ .ECHO "\n" .ECHO "BID_ROMD0: " \ .ECHO BID_ROMD0 \ .ECHO "\n" - .ECHO "BID_ROMDN: " \ .ECHO BID_ROMDN \ .ECHO "\n" +;;; .ECHO "BID_ROMDN: " \ .ECHO BID_ROMDN \ .ECHO "\n" .ECHO "BID_BIOS: " \ .ECHO BID_BIOS \ .ECHO "\n" .ECHO "BID_RAMD0: " \ .ECHO BID_RAMD0 \ .ECHO "\n" - .ECHO "BID_RAMDN: " \ .ECHO BID_RAMDN \ .ECHO "\n" +;;; .ECHO "BID_RAMDN: " \ .ECHO BID_RAMDN \ .ECHO "\n" .ECHO "BID_APP0: " \ .ECHO BID_APP0 \ .ECHO "\n" - .ECHO "BID_APPN: " \ .ECHO BID_APPN \ .ECHO "\n" +;;; .ECHO "BID_APPN: " \ .ECHO BID_APPN \ .ECHO "\n" .ECHO "BID_BUF: " \ .ECHO BID_BUF \ .ECHO "\n" .ECHO "BID_AUX: " \ .ECHO BID_AUX \ .ECHO "\n" .ECHO "BID_USR: " \ .ECHO BID_USR \ .ECHO "\n" @@ -1089,6 +1109,8 @@ Z180_CNTR_DEF .EQU $06 ; DEFAULT VALUE FOR Z180 CSIO CONFIG ; ; HELPER MACROS ; +#DEFINE ALIGN(N) .FILL ((($+(N-1)) & ~(N-1)) - $) +; #DEFINE PRTC(C) CALL PRTCH \ .DB C ; PRINT CHARACTER C TO CONSOLE - PRTC('X') #DEFINE PRTS(S) CALL PRTSTRD \ .TEXT S ; PRINT STRING S TO CONSOLE - PRTD("HELLO") #DEFINE PRTX(X) CALL PRTSTRI \ .DW X ; PRINT STRING AT ADDRESS X TO CONSOLE - PRTI(STR_HELLO) diff --git a/Source/HBIOS/syq.asm b/Source/HBIOS/syq.asm index 824d3bed..a913ddf7 100644 --- a/Source/HBIOS/syq.asm +++ b/Source/HBIOS/syq.asm @@ -1447,16 +1447,16 @@ SYQ0_CFG: ; DEVICE 0 .DW 0,0 ; DEVICE CAPACITY .DW 0,0 ; CURRENT LBA ; - .ECHO "SYQ: MODE=" + DEVECHO "SYQ: MODE=" #IF (SYQMODE == SYQMODE_SPP) - .ECHO "SPP" + DEVECHO "SPP" #ENDIF #IF (SYQMODE == SYQMODE_MG014) - .ECHO "MG014" + DEVECHO "MG014" #ENDIF - .ECHO ", IO=" - .ECHO SYQ0BASE - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO SYQ0BASE + DEVECHO "\n" #ENDIF ; #IF (SYQCNT >= 2) @@ -1469,16 +1469,16 @@ SYQ1_CFG: ; DEVICE 1 .DW 0,0 ; DEVICE CAPACITY .DW 0,0 ; CURRENT LBA ; - .ECHO "SYQ: MODE=" + DEVECHO "SYQ: MODE=" #IF (SYQMODE == SYQMODE_SPP) - .ECHO "SPP" + DEVECHO "SPP" #ENDIF #IF (SYQMODE == SYQMODE_MG014) - .ECHO "MG014" + DEVECHO "MG014" #ENDIF - .ECHO ", IO=" - .ECHO SYQ1BASE - .ECHO "\n" + DEVECHO ", IO=" + DEVECHO SYQ1BASE + DEVECHO "\n" #ENDIF ; #IF ($ - SYQ_CFG) != (SYQCNT * SYQ_CFGSIZ) diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 54b39de5..eaed9dfe 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -43,24 +43,24 @@ TMSCTRL1: .EQU 1 ; CONTROL BITS TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT ; - .ECHO "TMS: MODE=" + DEVECHO "TMS: MODE=" ; #IF ((TMSMODE == TMSMODE_MSX) | (TMSMODE == TMSMODE_MSX9958)) TMS_DATREG .EQU $98 ; READ/WRITE DATA TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL ; #IF (TMSMODE == TMSMODE_MSX) - .ECHO "MSX" + DEVECHO "MSX" #ENDIF #IF (TMSMODE == TMSMODE_MSX9958) - .ECHO "MSX9958" + DEVECHO "MSX9958" #ENDIF #ENDIF ; #IF (TMSMODE == TMSMODE_COLECO) TMS_DATREG .EQU $BE ; READ/WRITE DATA TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL - .ECHO "COLECO" + DEVECHO "COLECO" #ENDIF ; #IF (TMSMODE == TMSMODE_MSXKBD) @@ -68,7 +68,7 @@ TMS_DATREG .EQU $98 ; READ/WRITE DATA TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL TMS_KBDDATA .EQU $E0 ; KBD CTLR DATA PORT TMS_KBDST .EQU $E1 ; KBD CTLR STATUS/CMD PORT - .ECHO "MSXKBD" + DEVECHO "MSXKBD" #ENDIF ; #IF (TMSMODE == TMSMODE_N8) @@ -78,14 +78,14 @@ TMS_PPIA .EQU $84 ; PPI PORT A TMS_PPIB .EQU $85 ; PPI PORT B TMS_PPIC .EQU $86 ; PPI PORT C TMS_PPIX .EQU $87 ; PPI CONTROL PORT - .ECHO "N8" + DEVECHO "N8" #ENDIF ; #IF (TMSMODE == TMSMODE_SCG) TMS_DATREG .EQU $98 ; READ/WRITE DATA TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL TMS_ACR .EQU $9C ; AUX CONTROL REGISTER - .ECHO "SCG" + DEVECHO "SCG" #ENDIF ; #IF (TMSMODE == TMSMODE_MBC) @@ -94,7 +94,7 @@ TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL TMS_ACR .EQU $9C ; AUX CONTROL REGISTER TMS_KBDDATA .EQU $E2 ; KBD CTLR DATA PORT TMS_KBDST .EQU $E3 ; KBD CTLR STATUS/CMD PORT - .ECHO "MBC" + DEVECHO "MBC" #ENDIF #IF (TMSMODE == TMSMODE_DUO) @@ -103,7 +103,7 @@ TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL TMS_ACR .EQU $A6 ; AUX CONTROL REGISTER TMS_KBDDATA .EQU $4C ; KBD CTLR DATA PORT TMS_KBDST .EQU $4D ; KBD CTLR STATUS/CMD PORT - .ECHO "DUO" + DEVECHO "DUO" #ENDIF ; #IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80)) @@ -111,19 +111,19 @@ TMS_DATREG .EQU $A0 ; READ/WRITE DATA TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL ; #IF (TMSMODE == TMSMODE_NABU40) - .ECHO "NABU-40" + DEVECHO "NABU-40" #ENDIF #IF (TMSMODE == TMSMODE_NABU80) - .ECHO "NABU-80" + DEVECHO "NABU-80" #ENDIF #ENDIF ; - .ECHO ", IO=" - .ECHO TMS_DATREG + DEVECHO ", IO=" + DEVECHO TMS_DATREG #IF TMSTIMENABLE - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; TMS_ROWS .EQU 24 ; diff --git a/Source/HBIOS/uart.asm b/Source/HBIOS/uart.asm index 737f0c56..d012b33c 100644 --- a/Source/HBIOS/uart.asm +++ b/Source/HBIOS/uart.asm @@ -1033,12 +1033,12 @@ UART_CFG_SBC: .DW UARTCFG ; LINE CONFIGURATION .DW UARTSBC_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "UART: MODE=SBC, IO=" - .ECHO UARTSBASE + DEVECHO "UART: MODE=SBC, IO=" + DEVECHO UARTSBASE #IF ((UARTINTS) & (INTMODE > 0)) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" #ENDIF #IF (UARTAUX) UART_CFG_AUX: @@ -1050,9 +1050,9 @@ UART_CFG_AUX: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; NO INT HANDLER ; - .ECHO "UART: MODE=AUX, IO=" - .ECHO UARTABASE - .ECHO "\n" + DEVECHO "UART: MODE=AUX, IO=" + DEVECHO UARTABASE + DEVECHO "\n" #ENDIF #IF (UARTCAS) UART_CFG_CAS: @@ -1064,12 +1064,12 @@ UART_CFG_CAS: .DW UARTCASSPD ; LINE CONFIGURATION .DW UARTCAS_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; - .ECHO "UART: MODE=CAS, IO=" - .ECHO UARTCBASE + DEVECHO "UART: MODE=CAS, IO=" + DEVECHO UARTCBASE #IF ((UARTINTS) & (INTMODE > 0)) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" #ENDIF #IF (UARTMFP) UART_CFG_MFP: @@ -1081,9 +1081,9 @@ UART_CFG_MFP: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; SHOULD NEVER NEED INT HANDLER ; - .ECHO "UART: MODE=MFP, IO=" - .ECHO UARTSBASE - .ECHO "\n" + DEVECHO "UART: MODE=MFP, IO=" + DEVECHO UARTSBASE + DEVECHO "\n" #ENDIF #IF (UART4) ; 4UART SERIAL PORT A @@ -1094,9 +1094,9 @@ UART_CFG_MFP: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; SHOULD NEVER NEED INT HANDLER ; - .ECHO "UART: MODE=4UART, IO=" - .ECHO UART4BASE+0 - .ECHO "\n" + DEVECHO "UART: MODE=4UART, IO=" + DEVECHO UART4BASE+0 + DEVECHO "\n" ; ; 4UART SERIAL PORT B .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) @@ -1106,9 +1106,9 @@ UART_CFG_MFP: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; SHOULD NEVER NEED INT HANDLER ; - .ECHO "UART: MODE=4UART, IO=" - .ECHO UART4BASE+8 - .ECHO "\n" + DEVECHO "UART: MODE=4UART, IO=" + DEVECHO UART4BASE+8 + DEVECHO "\n" ; ; 4UART SERIAL PORT C .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) @@ -1118,9 +1118,9 @@ UART_CFG_MFP: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; SHOULD NEVER NEED INT HANDLER ; - .ECHO "UART: MODE=4UART, IO=" - .ECHO UART4BASE+16 - .ECHO "\n" + DEVECHO "UART: MODE=4UART, IO=" + DEVECHO UART4BASE+16 + DEVECHO "\n" ; ; 4UART SERIAL PORT D .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) @@ -1130,9 +1130,9 @@ UART_CFG_MFP: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; SHOULD NEVER NEED INT HANDLER ; - .ECHO "UART: MODE=4UART, IO=" - .ECHO UART4BASE+24 - .ECHO "\n" + DEVECHO "UART: MODE=4UART, IO=" + DEVECHO UART4BASE+24 + DEVECHO "\n" #ENDIF #IF (UARTRC) ; UARTRC SERIAL PORT A @@ -1143,9 +1143,9 @@ UART_CFG_MFP: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; SHOULD NEVER NEED INT HANDLER ; - .ECHO "UART: MODE=RC, IO=" - .ECHO UARTRBASE+0 - .ECHO "\n" + DEVECHO "UART: MODE=RC, IO=" + DEVECHO UARTRBASE+0 + DEVECHO "\n" ; ; UARTRC SERIAL PORT B .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) @@ -1155,9 +1155,9 @@ UART_CFG_MFP: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; SHOULD NEVER NEED INT HANDLER ; - .ECHO "UART: MODE=RC, IO=" - .ECHO UARTRBASE+8 - .ECHO "\n" + DEVECHO "UART: MODE=RC, IO=" + DEVECHO UARTRBASE+8 + DEVECHO "\n" ; #ENDIF #IF (UARTDUAL) @@ -1176,13 +1176,13 @@ UART_CFG_MFP: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; SHOULD NEVER NEED INT HANDLER ; - .ECHO "UART: MODE=DUAL, IO=" - .ECHO UARTDBASE+8 - .ECHO "\n" + DEVECHO "UART: MODE=DUAL, IO=" + DEVECHO UARTDBASE+8 + DEVECHO "\n" ; - .ECHO "UART: MODE=DUAL, IO=" - .ECHO UARTDBASE+0 - .ECHO "\n" + DEVECHO "UART: MODE=DUAL, IO=" + DEVECHO UARTDBASE+0 + DEVECHO "\n" ; #ENDIF #IF (UARTNABU) @@ -1193,9 +1193,9 @@ UART_CFG_MFP: .DW UARTCFG ; LINE CONFIGURATION .DW 0 ; SHOULD NEVER NEED INT HANDLER ; - .ECHO "UART: MODE=NABU, IO=" - .ECHO UARTNBASE - .ECHO "\n" + DEVECHO "UART: MODE=NABU, IO=" + DEVECHO UARTNBASE + DEVECHO "\n" #ENDIF ; UART_CNT .EQU ($ - UART_CFG) / 8 diff --git a/Source/HBIOS/uf.asm b/Source/HBIOS/uf.asm index 328ac033..972ebe05 100644 --- a/Source/HBIOS/uf.asm +++ b/Source/HBIOS/uf.asm @@ -24,9 +24,9 @@ UF_USB_ACTIVE .DB 0 ; USB CABLE CONNECTED STATUS FLAG ; UF_CFG: .DW SER_9600_8N1 ; DUMMY CONFIGURATION ; - .ECHO "USB-FIFO: IO=" - .ECHO UFBASE - .ECHO "\n" + DEVECHO "USB-FIFO: IO=" + DEVECHO UFBASE + DEVECHO "\n" ; ; SETUP THE DISPATCH TABLE ENTRY AND INITIALIZE HARDWARE ; diff --git a/Source/HBIOS/vdu.asm b/Source/HBIOS/vdu.asm index faef9888..c97081d0 100644 --- a/Source/HBIOS/vdu.asm +++ b/Source/HBIOS/vdu.asm @@ -83,11 +83,11 @@ VDU_R10 .EQU (VDU_BLNK + DSCANL-1) VDU_R11 .EQU DSCANL-1 #ENDIF ; - .ECHO "VDU: IO=" - .ECHO VDU_RAMRD - .ECHO ", PPK IO=" - .ECHO VDU_PPIA - .ECHO "\n" + DEVECHO "VDU: IO=" + DEVECHO VDU_RAMRD + DEVECHO ", PPK IO=" + DEVECHO VDU_PPIA + DEVECHO "\n" ; ;====================================================================== ; VDU DRIVER - INITIALIZATION diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index b58da631..1b5e023b 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -21,13 +21,13 @@ VGA_HI .EQU VGA_BASE + $05 ; BOARD RAM HI ADDRESS VGA_LO .EQU VGA_BASE + $06 ; BOARD RAM LO ADDRESS VGA_DAT .EQU VGA_BASE + $07 ; BOARD RAM BYTE R/W ; - .ECHO "VGA: " - .ECHO "IO=" - .ECHO VGA_BASE - .ECHO ", KBD MODE=PS/2" - .ECHO ", KBD IO=" - .ECHO VGA_KBDDATA - .ECHO "\n" + DEVECHO "VGA: " + DEVECHO "IO=" + DEVECHO VGA_BASE + DEVECHO ", KBD MODE=PS/2" + DEVECHO ", KBD IO=" + DEVECHO VGA_KBDDATA + DEVECHO "\n" ; VGA_NOBL .EQU 00000000B ; NO BLINK VGA_NOCU .EQU 00100000B ; NO CURSOR diff --git a/Source/HBIOS/vrc.asm b/Source/HBIOS/vrc.asm index 51d50e63..73b748ce 100644 --- a/Source/HBIOS/vrc.asm +++ b/Source/HBIOS/vrc.asm @@ -27,12 +27,12 @@ VRC_COLS .EQU 64 TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT ; - .ECHO "VRC: IO=" - .ECHO VRC_BASE - .ECHO ", KBD MODE=VRC" - .ECHO ", KBD IO=" - .ECHO VRC_KBDDATA - .ECHO "\n" + DEVECHO "VRC: IO=" + DEVECHO VRC_BASE + DEVECHO ", KBD MODE=VRC" + DEVECHO ", KBD IO=" + DEVECHO VRC_KBDDATA + DEVECHO "\n" ; ;====================================================================== ; VRC DRIVER - INITIALIZATION diff --git a/Source/HBIOS/ym2612.asm b/Source/HBIOS/ym2612.asm index 936dabae..a4818364 100644 --- a/Source/HBIOS/ym2612.asm +++ b/Source/HBIOS/ym2612.asm @@ -39,9 +39,9 @@ YM_DEBUG .EQU 0 ; CHANGE TO 1 TO ENABLE DEBUGGING YM_RSTCFG .EQU 0 ; SET TO 1 FOR FULL REGISTER CLEAR YM_FAST3438 .EQU 0 ; FAST CPU'S WITH A YM3438 MAY REQUIRE A DELAY ; - .ECHO "YM: IO=" - .ECHO YMSEL - .ECHO "\n" + DEVECHO "YM: IO=" + DEVECHO YMSEL + DEVECHO "\n" ; ;------------------------------------------------------------------------------ ; Driver function table and instance data diff --git a/Source/HBIOS/z2u.asm b/Source/HBIOS/z2u.asm index 9e54ebb0..60100438 100644 --- a/Source/HBIOS/z2u.asm +++ b/Source/HBIOS/z2u.asm @@ -716,12 +716,12 @@ Z2U0_CFG: .DW Z2U0_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; ; - .ECHO "Z2U: IO=" - .ECHO Z2U0BASE + DEVECHO "Z2U: IO=" + DEVECHO Z2U0BASE #IF (INTMODE == 3) - .ECHO ", INTERRUPTS ENABLED" + DEVECHO ", INTERRUPTS ENABLED" #ENDIF - .ECHO "\n" + DEVECHO "\n" ; Z2U_CFGSIZ .EQU $ - Z2U_CFG ; SIZE OF ONE CFG TABLE ENTRY diff --git a/Source/ver.inc b/Source/ver.inc index d557051d..d9157629 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.0-dev.31" +#DEFINE BIOSVER "3.5.0-dev.34" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index bf0a23fb..bd52da34 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 0 rtp equ 0 biosver macro - db "3.5.0-dev.31" + db "3.5.0-dev.34" endm