diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index bceb29e6..37a2f479 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 58790083..3b865a96 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index fddb16bf..83d4bd30 100644 Binary files a/Doc/RomWBW Errata.pdf and b/Doc/RomWBW Errata.pdf differ diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 95eb34f0..9adf63f5 100644 Binary files a/Doc/RomWBW ROM Applications.pdf and b/Doc/RomWBW ROM Applications.pdf differ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index e9dc86a1..d73ee245 100644 Binary files a/Doc/RomWBW System Guide.pdf and b/Doc/RomWBW System Guide.pdf differ diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index 1cae6c7e..ba29e729 100644 Binary files a/Doc/RomWBW User Guide.pdf and b/Doc/RomWBW User Guide.pdf differ diff --git a/ReadMe.md b/ReadMe.md index 03041195..9632a487 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.1 Pre-release \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -13 Feb 2023 +16 Feb 2023 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index 27a9166f..16082214 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -13 Feb 2023 +16 Feb 2023 diff --git a/Source/Apps/Survey/survey.mac b/Source/Apps/Survey/survey.mac index e26a9f77..23b2fb9f 100644 --- a/Source/Apps/Survey/survey.mac +++ b/Source/Apps/Survey/survey.mac @@ -641,27 +641,41 @@ PORTLP: jr nz,rd180 ; ; Z80 port read + ; Read port using IN A,(C), push result ld a,d ld c,a - ld (pnum),a ; dynamic update + ld (pnum0a),a ; dynamic update + ld (pnum0b),a ; dynamic update + ld b,0 in a,(c) push af - ld b,0 - in a,(0FFH) -pnum equ $-1 + ; Read port using IN A,(port), push result + in a,(0ffh) ; IN0 +pnum0a equ $-1 + push af + ; Read port using IN A,(port), push result + in a,(0ffh) ; IN0 +pnum0b equ $-1 push af jr rdz ; rd180: ; Z180 port read + ; Read port using IN A,(C), push result ld a,d ld c,a - ld (pnum1),a ; dynamic update + ld (pnum1a),a ; dynamic update + ld (pnum1b),a ; dynamic update + ld b,0 in a,(c) push af - ld b,0 + ; Read port using IN0 A,(port), push result db 0EDH,038H,0FFH ; IN0 -pnum1 equ $-1 +pnum1a equ $-1 + push af + ; Read port using IN0 A,(port), push result + db 0EDH,038H,0FFH ; IN0 +pnum1b equ $-1 push af ; rdz: @@ -674,15 +688,20 @@ rdz: ei ; interrupts back on now ; ; port is considered inactive if values read from different port -; read mechanisms differ or if the value $FF is read consistently -; - pop af - ld c,a - pop af - cp c - jr nz,NEXTPT - cp 0FFH - jr z,NEXTPT +; read mechanisms differ or if the value $FF is read consistently, +; or if the value read is equal to the port number itself +; + pop bc ; second IN0 (port) value + pop af ; first IN0 (port) valule + cp b ; same? + pop bc ; IN (C) value + jr nz,ISPORT ; if no, active running ctr port + cp b ; same? + jr nz,NEXTPT ; if not, inactive port + cp 0FFh ; pullup value??? + jr z,NEXTPT ; if so, consider not active + cp d ; value same as port num??? + jr z,NEXTPT ; if so, consider not active ; .8080 ISPORT: diff --git a/Source/Apps/Test/Build.cmd b/Source/Apps/Test/Build.cmd index dea44672..f757cf32 100644 --- a/Source/Apps/Test/Build.cmd +++ b/Source/Apps/Test/Build.cmd @@ -23,7 +23,7 @@ pushd ps2info && call Build || exit /b & popd pushd 2piotst && call Build || exit /b & popd pushd piomon && call Build || exit /b & popd pushd banktest && call Build || exit /b & popd -pushd portswp && call Build || exit /b & popd +pushd portscan && call Build || exit /b & popd goto :eof diff --git a/Source/Apps/Test/Clean.cmd b/Source/Apps/Test/Clean.cmd index f611848e..1e62b7d8 100644 --- a/Source/Apps/Test/Clean.cmd +++ b/Source/Apps/Test/Clean.cmd @@ -20,4 +20,4 @@ pushd ps2info && call Clean || exit /b 1 & popd pushd 2piotst && call Clean || exit /b 1 & popd pushd piomon && call Clean || exit /b 1 & popd pushd banktest && call Clean || exit /b 1 & popd -pushd portswp && call Clean || exit /b 1 & popd +pushd portscan && call Clean || exit /b 1 & popd diff --git a/Source/Apps/Test/Makefile b/Source/Apps/Test/Makefile index e1f78754..6fbce342 100644 --- a/Source/Apps/Test/Makefile +++ b/Source/Apps/Test/Makefile @@ -1,5 +1,5 @@ OBJECTS = -SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon banktest portswp +SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon banktest portscan DEST = ../../../Binary/Apps/Test TOOLS =../../../Tools diff --git a/Source/Apps/Test/portscan/Build.cmd b/Source/Apps/Test/portscan/Build.cmd new file mode 100644 index 00000000..38027da2 --- /dev/null +++ b/Source/Apps/Test/portscan/Build.cmd @@ -0,0 +1,11 @@ +@echo off +setlocal + +set TOOLS=../../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t180 -g3 -fFF portscan.asm portscan.com portscan.lst || exit /b + +copy /Y portscan.com ..\..\..\..\Binary\Apps\Test\ || exit /b + diff --git a/Source/Apps/Test/portswp/Clean.cmd b/Source/Apps/Test/portscan/Clean.cmd similarity index 100% rename from Source/Apps/Test/portswp/Clean.cmd rename to Source/Apps/Test/portscan/Clean.cmd diff --git a/Source/Apps/Test/portswp/Makefile b/Source/Apps/Test/portscan/Makefile similarity index 81% rename from Source/Apps/Test/portswp/Makefile rename to Source/Apps/Test/portscan/Makefile index 81d334fc..b1e9ee84 100644 --- a/Source/Apps/Test/portswp/Makefile +++ b/Source/Apps/Test/portscan/Makefile @@ -1,4 +1,4 @@ -OBJECTS = portswp.com +OBJECTS = portscan.com DEST = ../../../../Binary/Apps/Test TOOLS =../../../../Tools diff --git a/Source/Apps/Test/portswp/portswp.asm b/Source/Apps/Test/portscan/portscan.asm similarity index 90% rename from Source/Apps/Test/portswp/portswp.asm rename to Source/Apps/Test/portscan/portscan.asm index dd6d49c2..47a73b5c 100644 --- a/Source/Apps/Test/portswp/portswp.asm +++ b/Source/Apps/Test/portscan/portscan.asm @@ -1,5 +1,5 @@ ;=============================================================================== -; PORTSWP - Sweep Ports +; PORTSCAN - Sweep Ports ; ;=============================================================================== ; @@ -7,7 +7,7 @@ ;_______________________________________________________________________________ ; ; Usage: -; PORTSWP +; PORTSCAN ; ; Operation: ; Reads all ports (multiple ways) and displays values read @@ -104,10 +104,22 @@ process: mlt de ; de = 30 if z180 ld a,e ; result to A cp 30 ; check if multiply happened - jr nz,loop ; if invalid, then Z80 + jr nz,prtcpu ; if invalid, then Z80 or $FF ; flag value for Z180 ld (is180),a ; save it ; +prtcpu: + ld de,msgcpu + call prtstr + ld a,(is180) + or a + ld de,msgz80 + jr z,prtcpu1 + ld de,msgz180 +prtcpu1: + call prtstr + call crlf +; loop: call crlf ld a,(curport) @@ -149,7 +161,6 @@ done: call crlf2 ld de,msgdone ; message to print call prtstr ; do it -; ret ; all done ; ; @@ -159,33 +170,28 @@ portread: or a jr nz,portread_z180 ; -portread_z80: ; user traditional "IN" +portread_z80: ; use traditional "IN" ; read port using IN ld a,(curport) ; get current port - ld (port),a ; modify IN instruction + ld (pnum0),a ; modify IN instruction + nop ; defeat Z280 pipeline + nop in a,($FF) ; read the port -port .equ $-1 +pnum0 .equ $-1 ld (hl),a ; save it inc hl ; bump value list pointer -; - ; read port using IN (C) - ld a,(curport) ; get current port - ld b,0 ; in case 16 bits decoded - ld c,a ; move to reg C - in a,(c) ; read the port - ld (hl),a ; save it - inc hl ; bump value list pointer - ret + jr portread1 ; portread_z180: ; use "IN0" ; read port using IN ld a,(curport) ; get current port - ld (port1),a ; modify IN instruction + ld (pnum1),a ; modify IN instruction in0 a,($FF) ; read the port -port1 .equ $-1 +pnum1 .equ $-1 ld (hl),a ; save it inc hl ; bump value list pointer ; +portread1: ; read port using IN (C) ld a,(curport) ; get current port ld b,0 ; in case 16 bits decoded @@ -575,18 +581,19 @@ stack .equ $ ; stack top ; ; Messages ; -msgban .db "PORTSWP v1.0, 14-Feb-2023",13,10 +msgban .db "PORTSCAN v1.0, 16-Feb-2023",13,10 .db "Copyright (C) 2023, Wayne Warthen, GNU GPL v3",0 -msguse .db "Usage: PORTSWP",13,10 -msgprm .db "Parameter error (PORTSWP /? for usage)",0 +msguse .db "Usage: PORTSCAN",13,10 +msgprm .db "Parameter error (PORTSCAN /? for usage)",0 msgbio .db "Incompatible BIOS or version, " .db "HBIOS v", '0' + rmj, ".", '0' + rmn, " required",0 str_sep .db ": ",0 ; -;msgcur .db "Initial Bank ID = 0x",0 -;msg80 .db "Hello from bank 0x80!",0 -;msgxcal .db "Inter-bank procedure call test...",0 +msgcpu .db "CPU is ",0 +msgz80 .db "Z80",0 +msgz180 .db "Z180",0 msgdone .db "End of Port Sweep",0 + ; ; ; diff --git a/Source/Apps/Test/portswp/Build.cmd b/Source/Apps/Test/portswp/Build.cmd deleted file mode 100644 index 763cf712..00000000 --- a/Source/Apps/Test/portswp/Build.cmd +++ /dev/null @@ -1,11 +0,0 @@ -@echo off -setlocal - -set TOOLS=../../../../Tools -set PATH=%TOOLS%\tasm32;%PATH% -set TASMTABS=%TOOLS%\tasm32 - -tasm -t180 -g3 -fFF portswp.asm portswp.com portswp.lst || exit /b - -copy /Y portswp.com ..\..\..\..\Binary\Apps\Test\ || exit /b - diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index 1d7cdfa1..601efe1d 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -3159,8 +3159,10 @@ the RomWBW HBIOS configuration. |-------------------|---------------| | ROM Image File | SBC_std.rom | | Console Baud Rate | 38400 | +| Interrupts | None | - CPU speed is detected at startup if DS1302 RTC is active + - Otherwise 8.000 MHz assumed - Hardware auto-detected: - Onboard DS1302 RTC - Onboard UART Serial Adapter @@ -3171,9 +3173,9 @@ the RomWBW HBIOS configuration. - DiskIO V3 Floppy Disk Controller w/ 3.5" HD Drives - PropIO Video, Keyboard, & SD Card - SBC V1 has a known race condition in the bank switching - circuit which is likely to cause system instability. SBC - V2 does not have this issue. - + circuit which is likely to cause system instability. SBC V2 + does not have this issue. + `\clearpage`{=latex} ### RetroBrew Z80 SimH @@ -3182,7 +3184,9 @@ the RomWBW HBIOS configuration. |-------------------|---------------| | ROM Image File | SBC_simh.rom | | Console Baud Rate | 38400 | +| Interrupts | Mode 1 | + - System timer is generated by SimH - Hardware auto-detected: - SimH emulated 8250 Serial Adapter - SimH emulated hard disk drives @@ -3196,8 +3200,10 @@ the RomWBW HBIOS configuration. |-------------------|---------------| | ROM Image File | ZETA_std.rom | | Console Baud Rate | 38400 | +| Interrupts | None | - CPU speed is detected at startup if DS1302 RTC is active + - Otherwise 20.000 MHz assumed - Hardware auto-detected: - Onboard DS1302 RTC - Onboard UART Serial Adapter @@ -3218,6 +3224,7 @@ the RomWBW HBIOS configuration. | Console Baud Rate | 38400 | - CPU speed is detected at startup if DS1302 RTC is active + - Otherwise 20.000 MHz assumed - System timer is generated by onboard CTC - Hardware auto-detected: - Onboard DS1302 RTC @@ -3240,8 +3247,10 @@ the RomWBW HBIOS configuration. | Console Baud Rate | 38400 | - CPU speed is detected at startup if DS1302 RTC is active + - Otherwise 18.432 MHz assumed - System timer is generated by Z180 CPU - Hardware auto-detected: + - Onboard DS1302 RTC - Onboard Z180 ASCI Serial Ports - Onboard Floppy Disk Controller w/ 3.5" HD Drives - Onboard TMS9918 Video Controller @@ -3257,18 +3266,22 @@ the RomWBW HBIOS configuration. |-------------------|---------------| | ROM Image File | MK4_std.rom | | Console Baud Rate | 38400 | +| Interrupts | Mode 2 | - CPU speed is detected at startup if DS1302 RTC is active + - Otherwise 18.432 MHz assumed - System timer is generated by Z180 CPU - Hardware auto-detected: + - Onboard DS1302 RTC - Onboard Z180 ASCI Serial Ports + - UART Serial Interfaces (CAS, MFP, UART4) + - CVDU Display Adapter + - VGA3 Display Adapter - Onboard SD Card Interface via CSIO - Onboard IDE CF Card Interface - DIDE Floppy Disk Controller w/ 3.5" HD Drives - DIDE IDE Hard Disk Controller - PropIO Video, Keyboard, & SD Card - - CVDU Display Adapter - - VGA3 Display Adapter `\clearpage`{=latex} diff --git a/Source/HBIOS/Config/MK4_std.asm b/Source/HBIOS/Config/MK4_std.asm index 43ac3748..6f840f2d 100644 --- a/Source/HBIOS/Config/MK4_std.asm +++ b/Source/HBIOS/Config/MK4_std.asm @@ -26,23 +26,31 @@ ; #include "cfg_mk4.asm" ; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 +CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCAS .SET TRUE ; UART: AUTO-DETECT ECB CASSETTE UART +UARTMFP .SET TRUE ; UART: AUTO-DETECT MF/PIC UART +UART4 .SET TRUE ; UART: AUTO-DETECT 4UART UART +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) ; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .SET TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) FDMODE .SET FDMODE_DIDE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] ; IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -; SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) SDMODE .SET SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC] ; diff --git a/Source/HBIOS/Config/N8_std.asm b/Source/HBIOS/Config/N8_std.asm index 919167ea..03cf7421 100644 --- a/Source/HBIOS/Config/N8_std.asm +++ b/Source/HBIOS/Config/N8_std.asm @@ -26,12 +26,19 @@ ; #include "cfg_n8.asm" ; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 +CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) ; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) ; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) SDMODE .SET SDMODE_CSIO ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +; +AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/SBC_simh.asm b/Source/HBIOS/Config/SBC_simh.asm index 6a45eb91..2ee17a8b 100644 --- a/Source/HBIOS/Config/SBC_simh.asm +++ b/Source/HBIOS/Config/SBC_simh.asm @@ -30,9 +30,7 @@ INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 ; HTIMENABLE .SET TRUE ; ENABLE SIMH TIMER SUPPORT ; -SIMRTCENABLE .SET TRUE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTSBCFORCE .SET TRUE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) ; HDSKENABLE .SET TRUE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -UARTSBCFORCE .SET TRUE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) diff --git a/Source/HBIOS/Config/SBC_std.asm b/Source/HBIOS/Config/SBC_std.asm index 6189daea..ce0f07c3 100644 --- a/Source/HBIOS/Config/SBC_std.asm +++ b/Source/HBIOS/Config/SBC_std.asm @@ -26,19 +26,29 @@ ; #include "cfg_sbc.asm" ; +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART +UARTCAS .SET TRUE ; UART: AUTO-DETECT ECB CASSETTE UART +UARTMFP .SET TRUE ; UART: AUTO-DETECT MF/PIC UART +UART4 .SET TRUE ; UART: AUTO-DETECT 4UART UART +UARTRC .SET FALSE ; UART: AUTO-DETECT RC UART +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .SET TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) FDMODE .SET FDMODE_DIO3 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] ; IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -; SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) SDMODE .SET SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC] ; diff --git a/Source/HBIOS/Config/ZETA2_std.asm b/Source/HBIOS/Config/ZETA2_std.asm index 9fd7c993..5c6673c3 100644 --- a/Source/HBIOS/Config/ZETA2_std.asm +++ b/Source/HBIOS/Config/ZETA2_std.asm @@ -26,12 +26,18 @@ ; #include "cfg_zeta2.asm" ; -;UARTCFG .SET UARTCFG | SER_RTS -; +CPUOSC .SET 20000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; -PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +;UARTCFG .SET UARTCFG | SER_RTS +UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART ; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) ; PPPENABLE .SET TRUE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) diff --git a/Source/HBIOS/Config/ZETA_std.asm b/Source/HBIOS/Config/ZETA_std.asm index 06ae8cbe..2b44c968 100644 --- a/Source/HBIOS/Config/ZETA_std.asm +++ b/Source/HBIOS/Config/ZETA_std.asm @@ -26,10 +26,18 @@ ; #include "cfg_zeta.asm" ; +CPUOSC .SET 20000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; -PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +;UARTCFG .SET UARTCFG | SER_RTS +UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] ; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) ; PPPENABLE .SET TRUE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index b2692239..691b74f0 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -140,6 +140,17 @@ Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) ; SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP] +SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE ; XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index f8b34a4c..cb0f75a5 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -142,6 +142,17 @@ Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) ; SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP] +SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE ; XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG ; diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index d8792bc3..a2a0ceac 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -40,8 +40,6 @@ ENA_XM .EQU TRUE ; INCLUDE XMODEM IF SPACE AVAILABLE ; ENA_MBC6502 .EQU FALSE ; ENABLE OR DISABLE MBC6502 OPTION ; -#INCLUDE "util.asm" -; ;__UART_ENTRY_________________________________________________________________ ; ; SERIAL MONITOR STARTUP @@ -1846,6 +1844,233 @@ DSKY_ENTRY: ; #ENDIF ; +;================================================================================================== +; UTILITY FUNCTIONS +;================================================================================================== +; +; +CHR_BEL .EQU 07H +CHR_CR .EQU 0DH +CHR_LF .EQU 0AH +CHR_BS .EQU 08H +CHR_ESC .EQU 1BH +; +;__________________________________________________________________________________________________ +; +; UTILITY PROCS TO PRINT SINGLE CHARACTERS WITHOUT TRASHING ANY REGISTERS +; +PC_SPACE: + PUSH AF + LD A,' ' + JR PC_PRTCHR +PC_COLON: + PUSH AF + LD A,':' + JR PC_PRTCHR +PC_CR: + PUSH AF + LD A,CHR_CR + JR PC_PRTCHR + +PC_LF: + PUSH AF + LD A,CHR_LF + JR PC_PRTCHR + +PC_PRTCHR: + CALL COUT + POP AF + RET + +NEWLINE2: + CALL NEWLINE +NEWLINE: + CALL PC_CR + CALL PC_LF + RET +PRTSTR: + LD A,(HL) + INC HL + CP '$' + RET Z + CALL COUT + JR PRTSTR +; +; PRINT THE HEX BYTE VALUE IN A +; +PRTHEXBYTE: + PUSH AF + PUSH DE + CALL HEXASCII + LD A,D + CALL COUT + LD A,E + CALL COUT + POP DE + POP AF + RET +; +; CONVERT BINARY VALUE IN A TO ASCII HEX CHARACTERS IN DE +; +HEXASCII: + LD D,A + CALL HEXCONV + LD E,A + LD A,D + RLCA + RLCA + RLCA + RLCA + CALL HEXCONV + LD D,A + RET +; +; CONVERT LOW NIBBLE OF A TO ASCII HEX +; +HEXCONV: + AND 0FH ;LOW NIBBLE ONLY + ADD A,90H + DAA + ADC A,40H + DAA + RET +; +; ADD HL,A +; +; A REGISTER IS DESTROYED! +; +ADDHLA: + ADD A,L + LD L,A + RET NC + INC H + RET +; +; DELAY 16US (CPU SPEED COMPENSATED) INCUDING CALL/RET INVOCATION +; REGISTER A AND FLAGS DESTROYED +; NO COMPENSATION FOR Z180 MEMORY WAIT STATES +; THERE IS AN OVERHEAD OF 3TS PER INVOCATION +; IMPACT OF OVERHEAD DIMINISHES AS CPU SPEED INCREASES +; +; CPU SCALER (CPUSCL) = (CPUHMZ - 2) FOR 16US + 3TS DELAY +; NOTE: CPUSCL MUST BE >= 1! +; +; EXAMPLE: 8MHZ CPU (DELAY GOAL IS 16US) +; LOOP = ((6 * 16) - 5) = 91TS +; TOTAL COST = (91 + 40) = 131TS +; ACTUAL DELAY = (131 / 8) = 16.375US +; + ; --- TOTAL COST = (LOOP COST + 40) TS -----------------+ +DELAY: ; 17TS (FROM INVOKING CALL) | + LD A,(CPUSCL) ; 13TS | +; | +DELAY1: ; | + ; --- LOOP = ((CPUSCL * 16) - 5) TS ------------+ | + DEC A ; 4TS | | + #IF (BIOS == BIOS_WBW) ; | | + #IF (CPUFAM == CPU_Z180) ; | | + OR A ; +4TS FOR Z180 | | + #ENDIF ; | | + #ENDIF ; | | + JR NZ,DELAY1 ; 12TS (NZ) / 7TS (Z) | | + ; ----------------------------------------------+ | +; | + RET ; 10TS (RETURN) | + ;-------------------------------------------------------+ +; +; DELAY 16US * DE (CPU SPEED COMPENSATED) +; REGISTER DE, A, AND FLAGS DESTROYED +; NO COMPENSATION FOR Z180 MEMORY WAIT STATES +; THERE IS A 27TS OVERHEAD FOR CALL/RET PER INVOCATION +; IMPACT OF OVERHEAD DIMINISHES AS DE AND/OR CPU SPEED INCREASES +; +; CPU SCALER (CPUSCL) = (CPUHMZ - 2) FOR 16US OUTER LOOP COST +; NOTE: CPUSCL MUST BE > 0! +; +; EXAMPLE: 8MHZ CPU, DE=6250 (DELAY GOAL IS .1 SEC OR 100,000US) +; INNER LOOP = ((16 * 6) - 5) = 91TS +; OUTER LOOP = ((91 + 37) * 6250) = 800,000TS +; ACTUAL DELAY = ((800,000 + 27) / 8) = 100,003US +; + ; --- TOTAL COST = (OUTER LOOP + 27) TS ------------------------+ +VDELAY: ; 17TS (FROM INVOKING CALL) | +; | + ; --- OUTER LOOP = ((INNER LOOP + 37) * DE) TS ---------+ | + LD A,(CPUSCL) ; 13TS | | +; | | +VDELAY1: ; | | + ; --- INNER LOOP = ((CPUSCL * 16) - 5) TS ------+ | | + #IF (BIOS == BIOS_WBW) ; | | | + #IF (CPUFAM == CPU_Z180) ; | | | + OR A ; +4TS FOR Z180 | | | + #ENDIF ; | | | + #ENDIF ; | | | + DEC A ; 4TS | | | + JR NZ,VDELAY1 ; 12TS (NZ) / 7TS (Z) | | | + ; ----------------------------------------------+ | | +; | | + DEC DE ; 6TS | | + #IF (BIOS == BIOS_WBW) ; | | | + #IF (CPUFAM == CPU_Z180) ; | | + OR A ; +4TS FOR Z180 | | + #ENDIF ; | | + #ENDIF ; | | + LD A,D ; 4TS | | + OR E ; 4TS | | + JP NZ,VDELAY ; 10TS | | + ;-------------------------------------------------------+ | +; | + RET ; 10TS (FINAL RETURN) | + ;---------------------------------------------------------------+ +; +; DELAY ABOUT 0.5 SECONDS +; 500000US / 16US = 31250 +; +LDELAY: + PUSH AF + PUSH DE + LD DE,31250 + CALL VDELAY + POP DE + POP AF + RET +; +; INITIALIZE DELAY SCALER BASED ON OPERATING CPU SPEED +; ENTER WITH A = CPU SPEED IN MHZ +; +DELAY_INIT: + CP 3 ; TEST FOR <= 2 (SPECIAL HANDLING) + JR C,DELAY_INIT1 ; IF <= 2, SPECIAL PROCESSING + SUB 2 ; ADJUST AS REQUIRED BY DELAY FUNCTIONS + JR DELAY_INIT2 ; AND CONTINUE +DELAY_INIT1: + LD A,1 ; USE THE MIN VALUE OF 1 +DELAY_INIT2: + LD (CPUSCL),A ; UPDATE CPU SCALER VALUE + RET + + #IF (CPUMHZ < 3) +CPUSCL .DB 1 ; CPU SCALER MUST BE > 0 + #ELSE +CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ + #ENDIF +; +; SHORT DELAY FUNCTIONS. NO CLOCK SPEED COMPENSATION, SO THEY +; WILL RUN LONGER ON SLOWER SYSTEMS. THE NUMBER INDICATES THE +; NUMBER OF CALL/RET INVOCATIONS. A SINGLE CALL/RET IS +; 27 T-STATES ON A Z80, 25 T-STATES ON A Z180 +; +; ; Z80 Z180 +; ; ---- ---- +DLY64: CALL DLY32 ; 1728 1600 +DLY32: CALL DLY16 ; 864 800 +DLY16: CALL DLY8 ; 432 400 +DLY8: CALL DLY4 ; 216 200 +DLY4: CALL DLY2 ; 108 100 +DLY2: CALL DLY1 ; 54 50 +DLY1: RET ; 27 25 +; +; ; .FILL 16,0 ; SET MINIMUM STACK DEPTH SLACK .EQU (MON_END - $) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 03116f61..d17e3c9c 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1020,6 +1020,9 @@ HB_ENTRYTBL .EQU $ ; JP HB_START ; HBIOS INITIALIZATION JP HB_DISPATCH ; VECTOR TO DISPATCHER + JP PRTSUM + ; !!! DO NOT ADD ADDTIONAL VECTORS HERE WITHOUT + ; CHECKING W/ WAYNE !!! ; HB_STKSIZ .EQU $100 - ($ & $FF) ; diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 5e158dbd..2302e696 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -464,8 +464,6 @@ applst2: ; Device list ; devlst: - ld hl,str_devlst ; device list header string - call pstr ; display it jp prtall ; do it ; ; Set console interface unit @@ -1814,99 +1812,26 @@ CST .equ cst ; Device inventory display ;======================================================================= ; -; Print list of all drives (WBW) -; #if (BIOS == BIOS_WBW) ; -prtall: - call nl ; formatting - ld b,BF_SYSGET - ld c,BF_SYSGET_DIOCNT - rst 08 ; E := disk unit count - ld b,e ; count to B - ld a,b ; count to A - or a ; set flags - ret z ; bail out if zero - ld c,0 ; init device index -; -prtall1: - ld hl,str_disk ; prefix string - call pstr ; display it - ld a,c ; index - call prtdecb ; print it - ld hl,str_on ; separator string - call pstr - push bc ; save loop control - ld b,BF_DIODEVICE ; HBIOS func: report device info - rst 08 ; call HBIOS - call prtdrv ; print it - pop bc ; restore loop control - inc c ; bump index - djnz prtall1 ; loop as needed - ret ; done -; -; Print the device info -; On input D has device type, E has device number -; Destroy no registers other than A +; Print list of all drives (WBW) ; -prtdrv: - push de ; preserve de - push hl ; preserve HL - ld a,d ; load device/unit - rrca ; rotate device - rrca ; ... bits - rrca ; ... into - rrca ; ... lowest 4 bits - and $0F ; isolate device bits - add a,a ; multiple by two for word table - ld hl,devtbl ; point to start of table - call addhla ; add A to HL for table entry - ld a,(hl) ; deref HL for string adr - inc hl ; ... - ld h,(hl) ; ... - ld l,a ; ... - call pstr ; print the device nmemonic - pop hl ; recover HL - pop de ; recover DE - ld a,e ; device number - call prtdecb ; print it - ld a,':' ; suffix - call cout ; print it - ret +; Just invoke the existing HBIOS routine... ; -devtbl: ; device table - .dw dev00, dev01, dev02, dev03 - .dw dev04, dev05, dev06, dev07 - .dw dev08, dev09, dev10, dev11 - .dw dev12, dev13, dev14, dev15 -; -devunk .db "???",0 -dev00 .db "MD",0 -dev01 .db "FD",0 -dev02 .db "RAMF",0 -dev03 .db "IDE",0 -dev04 .db "ATAPI",0 -dev05 .db "PPIDE",0 -dev06 .db "SD",0 -dev07 .db "PRPSD",0 -dev08 .db "PPPSD",0 -dev09 .db "HDSK",0 -dev10 .equ devunk -dev11 .equ devunk -dev12 .equ devunk -dev13 .equ devunk -dev14 .equ devunk -dev15 .equ devunk +prtall: + ld a,BID_BIOS ; BIOS Bank please + ld ix,$0406 ; HBIOS PRTSUM vector + jp HB_BNKCALL ; do it ; #endif ; -; -; #if (BIOS == BIOS_UNA) ; ; Print list of all drives (UNA) ; prtall: + ld hl,str_devlst ; device list header string + call pstr ; display it call nl ; formatting ld b,0 ; start with unit 0 ; @@ -1985,6 +1910,8 @@ devsd .db "SD",0 devdsd .db "DSD",0 devunk .db "UNK",0 ; +str_devlst .db "\r\n\r\nDisk Devices:",0 +; #endif ; ;======================================================================= @@ -2078,7 +2005,6 @@ str_reboot .db "\r\n\r\nRestarting System...",0 str_newcon .db "\r\n\r\n Console on Unit #",0 str_chspeed .db "\r\n\r\n Change speed now. Press a key to resume.",0 str_applst .db "\r\n\r\nROM Applications:",0 -str_devlst .db "\r\n\r\nDisk Devices:",0 str_invcmd .db "\r\n\r\n*** Invalid Command ***",bel,0 str_load .db "\r\n\r\nLoading ",0 str_disk .db "\r\n Disk Unit ",0 diff --git a/Source/ver.inc b/Source/ver.inc index 81181ce0..d458de48 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.197" +#DEFINE BIOSVER "3.1.1-pre.199" diff --git a/Source/ver.lib b/Source/ver.lib index b10a6bff..532c1458 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.197" + db "3.1.1-pre.199" endm