From 2f3fb51884761902c0a2561fdd3093462b7f99ad Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Wed, 15 Feb 2023 19:31:05 -0800 Subject: [PATCH 1/3] More Cleanup - Tweaks to SURVEY and PORTSWP to improve port detection accuracy and handle Z280 better - Recover a **lot** of wasted space in dbgmon using a few built-in utility routines instead of entire util.asm - Improve the (D)evice command in romldr to use the HBIOS routine which is much more complete and saves space --- Source/Apps/Survey/survey.mac | 51 ++++-- Source/Apps/Test/portswp/portswp.asm | 26 ++- Source/HBIOS/dbgmon.asm | 229 ++++++++++++++++++++++++++- Source/HBIOS/hbios.asm | 3 + Source/HBIOS/romldr.asm | 94 ++--------- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 7 files changed, 297 insertions(+), 110 deletions(-) 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/portswp/portswp.asm b/Source/Apps/Test/portswp/portswp.asm index dd6d49c2..5e30c4b5 100644 --- a/Source/Apps/Test/portswp/portswp.asm +++ b/Source/Apps/Test/portswp/portswp.asm @@ -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,10 +170,12 @@ 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 + nop ; defeat Z280 pipeline + nop in a,($FF) ; read the port port .equ $-1 ld (hl),a ; save it @@ -583,10 +596,11 @@ 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/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 51441a62..58107b5b 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 @@ -1826,99 +1824,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 ; @@ -1997,6 +1922,8 @@ devsd .db "SD",0 devdsd .db "DSD",0 devunk .db "UNK",0 ; +str_devlst .db "\r\n\r\nDisk Devices:",0 +; #endif ; ;======================================================================= @@ -2090,7 +2017,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..553c9948 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.198" diff --git a/Source/ver.lib b/Source/ver.lib index b10a6bff..74b71a36 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.198" endm From dc151ad1a7c4051760bc9ea43d1a962ba12b1864 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Thu, 16 Feb 2023 11:09:05 -0800 Subject: [PATCH 2/3] Rename PORTSWP -> PORTSCAN --- Source/Apps/Test/Build.cmd | 2 +- Source/Apps/Test/Clean.cmd | 2 +- Source/Apps/Test/Makefile | 2 +- Source/Apps/Test/portscan/Build.cmd | 11 +++++++ .../Apps/Test/{portswp => portscan}/Clean.cmd | 0 .../Apps/Test/{portswp => portscan}/Makefile | 2 +- .../portswp.asm => portscan/portscan.asm} | 29 +++++++------------ Source/Apps/Test/portswp/Build.cmd | 11 ------- 8 files changed, 26 insertions(+), 33 deletions(-) create mode 100644 Source/Apps/Test/portscan/Build.cmd rename Source/Apps/Test/{portswp => portscan}/Clean.cmd (100%) rename Source/Apps/Test/{portswp => portscan}/Makefile (81%) rename Source/Apps/Test/{portswp/portswp.asm => portscan/portscan.asm} (91%) delete mode 100644 Source/Apps/Test/portswp/Build.cmd 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 91% rename from Source/Apps/Test/portswp/portswp.asm rename to Source/Apps/Test/portscan/portscan.asm index 5e30c4b5..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 @@ -173,32 +173,25 @@ portread: 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 @@ -588,10 +581,10 @@ 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 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 - From bd664c3a1f82b167fa90072324a0fb706094ebc8 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Thu, 16 Feb 2023 13:59:15 -0800 Subject: [PATCH 3/3] More Cleanup --- Doc/RomWBW Applications.pdf | Bin 216070 -> 216070 bytes Doc/RomWBW Disk Catalog.pdf | Bin 124529 -> 124530 bytes Doc/RomWBW Errata.pdf | Bin 28682 -> 28915 bytes Doc/RomWBW ROM Applications.pdf | Bin 159778 -> 159780 bytes Doc/RomWBW System Guide.pdf | Bin 528324 -> 528323 bytes Doc/RomWBW User Guide.pdf | Bin 511987 -> 512508 bytes ReadMe.md | 2 +- ReadMe.txt | 2 +- Source/Doc/UserGuide.md | 23 ++++++++++++++++++----- Source/HBIOS/Config/MK4_std.asm | 14 +++++++++++--- Source/HBIOS/Config/N8_std.asm | 11 +++++++++-- Source/HBIOS/Config/SBC_simh.asm | 6 ++---- Source/HBIOS/Config/SBC_std.asm | 14 ++++++++++++-- Source/HBIOS/Config/ZETA2_std.asm | 12 +++++++++--- Source/HBIOS/Config/ZETA_std.asm | 10 +++++++++- Source/HBIOS/cfg_mk4.asm | 11 +++++++++++ Source/HBIOS/cfg_n8.asm | 11 +++++++++++ Source/ver.inc | 2 +- Source/ver.lib | 2 +- 19 files changed, 96 insertions(+), 24 deletions(-) diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index bceb29e6cc1a13bf05d7c3f0f249c85904a173a6..37a2f4794b0600f92e247acdb4fc2ed13147b9d2 100644 GIT binary patch delta 565 zcmZph!P_>2cS3u8-)#e)y}z}8FkdXV%EZHSWb(@ed$)dA`(mZTa}klZ|K+_RKMBb% zgB22l_s&*xoTuN zt>+!ZDzASKKd7 zEhd2a9BTUx)i?3SxO5OmOgzIE$#zvlny zetL?(BWkxD-2O)A9Qy$~-nG12|7Abebp1xvy{(lQKi2cS3u8-fah-y|1-@FwZNP%gVvxQYf`$yVx#KThRX});^lzPTxOn%QnSUQVeBJxt zSNV^3_rJc{v?z{m!(|(r8c)_GEFzCNKF`;6bZH7=>5Mza@l5(pjf?h_j-a?Z^Zr&k zJ&E}HBm3XA1r}^6D?hSpoNk=zsL?8v+L|OCd1rRn=Vf1BO*Ukdt6x6xPK0();e`!>G zT6a^-@~*Sq#9bS5rrf)4wOxLFJ^L&f5#b8&b!}@+a-(v4N}WRgEAJJqw%we+`jh4R zKCS9kS5Dsh|8mOJ>vtPw)K+e5{FxQJCerNM%^O?SF7n^~dLz4z=$|hegDc*d{HTBQ zL}*k0)pY5a)8`)5Ful2a;a0%w{cL*Gy=$Mx&feX2{$Hw`9Yd_r>m6LFc`3yuMX8CC zy>47#SNF8A1iNXNob~m^z!gnwhv- px|p~aTN;=W9u z@DhqsC#Ej%k)ercb(}qVxW510hn~3m?da?^2L?nBEi4|kzWiKm%GVEiR-dn| zEZH=+Zu`^~Cx01mtb3;?+a2ChdF0`?UC-ry*Xj7+nzlV-mr9~#|18#(=XaOsy%~j{ z4s5$^_odv6bLY&cD(f(JZP~iAF+-OOd!$Ff{R^FQj?Z5*bJ3}^qYD-uoRAZI*yqZm zvm0)u=PaLovi{Ee(#u!N)6R70myDm!l0 z&Ly`dtgJbDb^PMdlNXOH>e0Ene55a2u;QtTmnV1aT{mT0s;ExQFCK9%tuA%#@WbD% z*s`_r&CF%1e=ObD>*LZ3b=7+2l<4-kU(D{cY-=!e$I+83t1sU<#9v(g>yG@L(>hj8 zTv_+i^|c#beQDtH-EQUWTUFEkw=Ey+pSAf~$tRypuUa*zczi|O+xhovUthZZ@A8qA zlgIB`{qE^C=dVv4Ua{fq=M|FiiKEuds~wuL@2lsA6z#45^Y``}vroMrdu&mp%c8z*4)$#m zS@V5A!-ZB#J;Pi&W9faPgYw^eEvI14v}m8448eqCf;YLuuGU624Uth6{zMC-DGk3c zW*Nse?v2AXA&iKf_#x6e(2V{cGc9eL8zw!nF(DJ| z8@B`nuCyk8%CI;xL40)K5z=s;d3xAMf);n+h!atcG&OgEA-{lu(O?J#^FAJ7JV3#$ z#eUo=j?og(nb;5RBWMZX9g8;1Uvu{h;RvY+&OELs92Uf87(q*DOZWq5v^kNWi8%#K z9j+7DEI~ng0=4i);xQIp5t0%Hx(1ag5FXke8KsnHOc;}rc>=4q0^6h%WFo+Zc>(%d zhyB)oe}V&~_JpgYwi=@#r6OgL+7Y^i`ve|Y>40w&2?vdfOIk-pOd3Y$R$A|InG|Q_ ztYVfloOE1aq*cHiX&PX{#C*oPA08p&sgwZX4%w=?ft6wc?+68qgzFCM(Xb;z{1fmi zt7vvsa&jT;99(xeD={*fS%V+eOegy_&Y!YC^e7X}C=05)Q;TeG)_c| zzzT9$({-%15%gioa9Z2=W=o(7Hcx`lo;NHp$iLaqE3#6<2F6XJ4I_#QHY!2T2u+eR zz;MaIG~lnj#`20mzC_A_t(7@8BtWCN!u?^Cl{gV2%n-ugMmdG|JM4U{37OGM#3C0X zT>?V)1{O7LClGvON`Zn%wTv}{V2!n!-shSW--zZ4LU(%HCLjh3ZZTs$;VR3djcp3^ zAxgo*#=!4`J|Xq7Ogr4-aF!@j3u1(XsX?|hj7*XwhS{faYT?LX#|R%=YjCqb7D|!; zEufn`t6@umppz|(4K`2oxnq)uL5PLyYYxgSISfUPH%Q`PPrlJP{Jj7-A=spJvC~%~*#!pLHV^(~ z!JiO#9_P7PStctd&t|D%B3owr%;>ZK?=mr(nVIs|oPwe`^NOZTPl5X(v6Qs5+!yjv F{sTqmM)&{# delta 4954 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 WenCF=4mc1&I1G-%#wM?+fb(Bif4}Yk delta 9059 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 delta 8027 zcmai3du-L!9k(}I7{yGB24PVt>yVgjdfpELbuBAy6b+2waao5(-B`@51yd^yN!f5^BGp&8sztjI- z^WW#sT)BVqg{KaWw!C)c&~q;jZ)rGVj~qMo*37ofJLer)(tYlgPyFI|{n}+W*I(0l z?&Q&1F6-I)k(=)Q@zY&|zce{=Q|8~2Rt|IUf-S=-h;ws7*n*>%7D^T+1Nw$oGRwC=iAzQ6li^CP2^PxkG* za`2ZwIDAB78T{2ZZ+~7ry6XIj#}9wBbmE~mdYYy* zuU|QR^!Ihs*K9vD_2l-Uf9>hodSJys*XGkV{7LWLxLviaI{(FWdrj-7?3vTgxxRs} z=HxVI z2C8(bX(?TGqpTJAQ@f?M`h!1&j6TparMyauTS{~03;vaK6VIek_>eQLqBdy|FV3f5 z8D$-NQMh0yLI@#)GpVYzbX5;y+G@=ptcje?8BJlWkNj@5jLu1MiLPf{TTVGnXe0x4 z)^j?qI9&*g&I=;k&9Ic0(NIaeHVn{Pp;N;W=-o5&Ao*G3dIXy*F`W>>Xa*5% z1 z_3?_PwS)T85O`vm(a}mOs*X?>u_}B-*;La82r7cf^pxC(K*hJhXqnmp(L<%P!Z|9P zHQek{2^P~*sd7wL1eQuOmZY-fkRI2JRL<*EwX8rh2$(>%Ahpy~e5qCNX=#R_ij?pf zY9Oh-<#ZAD82|)}P9$O$;L;dPH7KPs6jnsTqElu=5@SgTm%Vs49-Y=m_J}p`IC9w< z%`(3=hFjmcpi}>HsEP9KgtQda8RMzyoOfEMks=6hD!*2xTIOByTV9!Jr+B zgrEaAmeZa}Ae~?ZR~pN6jzcNGsK5{Tpo3?o;mi}281=!@5(-0eo+2;5$ZxbXNok#> zVToSBTzYq$C&Z75sq@PP){-#_>Ol(WiKYOYMV*E+1Shx5w~!oJ$SQ9nlFl7~pi!p~ zMJ#)JTh4tICqOzzXtieuD!B5{F7ak9ou@&sm6I+FW(Z2Ig0z$it%TwbBFI#=0ua=7 zpgBpMABmlG3qoiaOh`)s!RiW_W?2dL8G=SJs%2nYph`1|4UC)yi@ETcap3~z%vljr z)tVwMoKw_h)^Y!ZxH6`t8G>5hx+s}&F$Q|(gorT>WC)tb*vD= z@Wu&KAB`A+3Kv{zxT~OaqDr!{#(B@$N2sTu`EV>zIkXs5w`fSpsbsuy@=CBlAx9;3 z1?PjNp6Dg-L2!n_U9K�k_E!(gUl2E>`iWK;-&l1W3*Ta4l)9z5Dmm4*SqniMFe zJls{vE-JAiut;yA+-6qja`K>x@zJvG(c2g<1;=<+K!b;@-PvBGnHUY#Owh5Q!P7pZ zp$tJK4%)C87#3qC34J3pQ*$>UX!r)qZ0ro4&7Q*gBBu5XL6jyih)YK91nmk@oH1Lb z!9p(3zK}3SiVdue2B#!up?hFr;+G&V5X7O!AYKxj(L=5SCC2E&GRMJDlVHHKoLY4Qd$ z3hT1|3_Ws?`IH? zD)j<_ji(_nU107(TBMGFbig73(M0HQ7tM}SWS&Uw0li{Va=;wLWQ`aUCh~;4ytfF*3gitD zBB~+b37185sr}v}KgNEPq?Sz1T>|-7rNInA;vI{Kz*f8goj(x)tRbnVs{5cBW|;Wg9;VJlM>dz1)!a>gG(}>26DjY3?3uz=n zQ2RuQtpR;8@8Kq%VXqX?U&~E^;OMM#19@Np0iQ;u?#&QPZfwn{zej0U&y62Slu5%G zg8Cr7Vucs^k2)1NvuFus-CwASf}sujdZG&vWwa`F0-}fL0_d8x1Xzx9*Fs(;K83rA zhJ}dvXPt?rz!{cj7tbomDPKknhS7%A5~Hs@lwzE6`a{F9A9895^(F%!!;~e~RCx$eF^#%jr~k ztv9aR{QH7V1K^2Hh7$XIy7b2x<{|PH_B-CDu?#`9fCV>pKa?C?5ami_5^SOywg7_U z2y_;#{(zkQkcKmK9H~D;Q1qO6h|SQ_qXj3NVN635k7NicBkC>Pbs>h?$b(@C6+g)i zK+qRapJ=Q|tP$us24@ED-rG@XY;V#cE@+6_e||wkFWMLuHZ%$w7rKQ_vPmpxs;`~* i|4CNY*4I~mwY$Bm`@ydD8>)eiELuH#c2n!Z>i+@h^`$ld diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index e9dc86a142c21b84fd83753dde0e852618be6a2c..d73ee245b3222a1aa3b44d2c93e8fa2ada1403c2 100644 GIT binary patch delta 23118 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 delta 19777 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 diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index 1cae6c7e3129d5022d74b37df88076a86455d37f..ba29e729c5fb959c2e17f3ef4ccd81e6e3146fca 100644 GIT binary patch delta 36125 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 G@c#hCBBv$* 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/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/ver.inc b/Source/ver.inc index 553c9948..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.198" +#DEFINE BIOSVER "3.1.1-pre.199" diff --git a/Source/ver.lib b/Source/ver.lib index 74b71a36..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.198" + db "3.1.1-pre.199" endm