diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index e73f96e5..c3a50f9d 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -14,6 +14,7 @@ Version 3.6 - J?L: Source for ZSDOS2 and BPBIOS Utilities (from disassembly) - WBW: Support ROM-based font storage - MAP: New Slice Inventory Rom App "S" display bootable slices, during boot +- MAP: Device Inventory moved from HBIOS to Rom App, saving >1k space in HBIOS Version 3.5.1 ------------- diff --git a/Source/Doc/Introduction.md b/Source/Doc/Introduction.md index 9c7939b8..7f02a1b6 100644 --- a/Source/Doc/Introduction.md +++ b/Source/Doc/Introduction.md @@ -292,6 +292,7 @@ please let me know if I missed you! - Z3PLUS operating system disk image - COPYSL, and SLABEL utilities - Display of bootable slices via "S" command during startup + - Optimisations of HBIOS and CBIOS to reduce overall code size - a feature for RomWBW configuration by NVRAM - the /B bulk mode of disk assignment to the ASSIGN utility diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd index c01ff820..9eafe11b 100644 --- a/Source/HBIOS/Build.cmd +++ b/Source/HBIOS/Build.cmd @@ -91,6 +91,7 @@ tasm -t%CPUType% -g3 -dAPPBOOT hbios.asm hbios_app.bin hbios_app.lst || exit /b call :asm dbgmon || exit /b call :asm romldr || exit /b +call :asm invntdev || exit /b call :asm invntslc || exit /b call :asm eastaegg || exit /b call :asm nascom || exit /b @@ -125,7 +126,7 @@ if %Platform%==S100 ( copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin + ..\cpm22\cpm_wbw.bin rom1.bin || exit /b copy /b ..\Forth\camel80.bin + nascom.bin + ..\tastybasic\src\tastybasic.bin + game.bin + eastaegg.bin + %NETBOOT% + updater.bin + sysconf.bin + usrrom.bin rom2.bin || exit /b -copy /b %HwMon% + invntslc.bin + romfonts.bin rom3.bin +copy /b %HwMon% + invntdev.bin + invntslc.bin + romfonts.bin rom3.bin copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin appboot.bin || exit /b :: diff --git a/Source/HBIOS/Makefile b/Source/HBIOS/Makefile index 8f8d5b3a..181cb0b2 100644 --- a/Source/HBIOS/Makefile +++ b/Source/HBIOS/Makefile @@ -32,7 +32,7 @@ else ifeq ($(CPUFAM),3) TASM=$(BINDIR)/uz80as -t z280 endif -DEPS=prereq dbgmon.bin romldr.bin nascom.bin tastybasic.bin invntslc.bin game.bin eastaegg.bin updater.bin sysconf.bin sysconf.com usrrom.bin romfonts.bin +DEPS=prereq dbgmon.bin romldr.bin nascom.bin tastybasic.bin invntdev.bin invntslc.bin game.bin eastaegg.bin updater.bin sysconf.bin sysconf.com usrrom.bin romfonts.bin ifeq ($(ROM_PLATFORM),UNA) ROMDEPS=romldr.bin dbgmon.bin @@ -72,7 +72,7 @@ $(OBJECTS) : $(ROMDEPS) cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin >appboot.bin if [ $(ROM_PLATFORM) != UNA ] ; then \ cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin $(NETBOOT) updater.bin sysconf.bin usrrom.bin >rom2.bin ; \ - cat $(HWMON) invntslc.bin romfonts.bin >rom3.bin ; \ + cat $(HWMON) invntdev.bin invntslc.bin romfonts.bin >rom3.bin ; \ for f in hbios_rom.bin rom1.bin rom2.bin rom3.bin ; do \ srec_cat $$f -Binary -Crop 0 0x7FFF -Checksum_Negative_Big_Endian 0x7FFF 1 1 -o $$f -Binary ; \ done \ @@ -133,6 +133,7 @@ hbios_env.sh: hbios_env.com romldr.bin: build.inc dbgmon.bin: build.inc nascom.bin: build.inc +invntdev.bin: build.inc invntslc.bin: build.inc eastaegg.bin: build.inc updater.bin: build.inc diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index ec572f60..93dbd045 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1372,7 +1372,7 @@ HB_ENTRYTBL .EQU $ ; JP HB_START ; HBIOS INITIALIZATION JP HB_DISPATCH ; VECTOR TO DISPATCHER - JP PRTSUM + ; JP PRTSUM ; !!! DO NOT ADD ADDTIONAL VECTORS HERE WITHOUT ; CHECKING W/ WAYNE !!! ; @@ -3721,12 +3721,7 @@ INITSYS3: LD DE,STR_BANNER ; POINT TO BANNER CALL NZ,WRITESTR ; OUTPUT IF CONSOLE MOVED ; -;-------------------------------------------------------------------------------------------------- -; PRINT DEVICE SUMMARY -;-------------------------------------------------------------------------------------------------- -; INITSYS3A: - CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE ; ;-------------------------------------------------------------------------------------------------- ; DIAGNOSTIC ROUTINES @@ -8326,7 +8321,7 @@ FNT_SELECT: INC HL ; BUMP PTR CP 'M' ; SHOULD BE 'M' JR NZ,FNT_SELECT_ERR ; IF MISMATCH, BAIL OUT W/ ERR -; +; FNT_SELECT0: CALL FNT_BYTE ; LOAD THE FONT ID FROM MAP ;;;CALL PC_SPACE ; ** DEBUG *** @@ -8493,210 +8488,6 @@ HB_UTIL_END .EQU $ ; HB_PRTSUM_BEG .EQU $ ; -PRTSUM: - CALL NEWLINE2 ; SKIP A LINE - LD DE,PS_STRHDR ; POINT TO HEADER - CALL WRITESTR ; PRINT IT -; - LD C,BF_SYSGET_CIOCNT ; CHARACTER DEVICES - LD HL,PS_SERIAL - CALL PRT_ALLD -; - LD C,BF_SYSGET_DIOCNT ; DISK DRIVES - LD HL,PS_DISK - CALL PRT_ALLD -; - LD C,BF_SYSGET_VDACNT ; VIDEO DEVICES - LD HL,PS_VIDEO - CALL PRT_ALLD -; - LD C,BF_SYSGET_SNDCNT ; SOUND DEVICES - LD HL,PS_SOUND - CALL PRT_ALLD - RET -; -PRT_ALLD: - LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET - RST 08 ; E := UNIT COUNT - LD B,E ; MOVE TO B FOR LOOP COUNT - LD A,E ; MOVE TO ACCUM - OR A ; SET FLAGS - RET Z ; IF NONE, JUST RETURN - LD C,0 ; C WILL BE UNIT INDEX -PRT_ALLD1: - PUSH BC ; SAVE LOOP CONTROL - PUSH DE - PUSH HL - CALL JPHL ; CALL THE ROUTINE PASSED IN HL - POP HL - POP DE - POP BC ; RESTORE LOOP CONTROL - INC C ; BUMP UNIT INDEX - DJNZ PRT_ALLD1 ; LOOP THRU ALL DEVICES - RET -; -; PRINT ONE LINE DISK UNIT/DEVICE INFO, DISK UNIT INDEX IN C -; -PS_DISK: - PUSH BC ; SAVE UNIT INDEX FOR LATER -; - ; UNIT COLUMN - PRTS("Disk $") - LD A,C ; MOVE UNIT NUM TO A - CALL PRTDECB ; PRINT IT - CP 10 ; CHECK FOR MULTIPLE DIGITS - CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED - PRTS(" $") ; PAD TO NEXT COLUMN -; - ; DEVICE COLUMN - LD B,BF_DIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C - RST 08 ; DE:=DEVTYP/NUM, C:=DISK ATTRIBUTES - PUSH BC ; SAVE ATTRIBUTES - LD HL,PS_DDMD ; POINT TO DISK DEVICE TYPE NAME TABLE - CALL PS_PRTDEV ; PRINT DISK DEVICE NMEMONIC PADDED TO FIELD WIDTH - POP DE ; RECOVER ATTRIBUTES TO DE - PUSH DE ; SAVE ATTRIBUTES AGAIN - CALL PS_PRTDT ; PRINT DISK TYPE - POP DE ; RESTORE ATTRIBUTES - POP BC ; RESTORE UNIT NUM - CALL PS_PRTDC ; PRINT DISK CAPACITY -; - CALL NEWLINE - RET -; -; PRINT DISK TYPE (DISK ATTRIBUTE IN E) -; -PS_PRTDT: - LD A,E ; ATTRIBUTES TO A - BIT 7,A ; FLOPPY BIT SET? - LD HL,PS_DTFLOP ; ASSUME FLOPPY - JP NZ,PS_PRT18 ; IF FLOPPY, JUMP AHEAD - LD C,E - LD DE,PS_DTHARD - LD A,00001111B - CALL PRTIDXMSK - CALL PS_PAD18 ; PAD TO 18 SPACES - RET -; -; PRINT DISK CAPACITY (UNIT IN C, ATTRIBUTE IN E) -; -PS_PRTDC: -; - LD A,E ; ATTRIBUTE TO ACCUM - BIT 7,A ; TEST FOR FLOPPY - JR NZ,PS_PRTDC2 ; HANDLE FLOPPY - AND $0F ; ISOLATE TYPE BITS - CP 4 ; ROM DISK? - JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB - CP 5 ; RAM DISK? - JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB - CP 7 ; FLASH DISK? - JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB -; - ; PRINT HARD DISK STORAGE SIZE IN MB - LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY - RST 08 ; DE:HL := BLOCKS - JP NZ,PS_PRTNUL ; MEDIA PROBLEM - RES 7,D ; CLEAR LBA BIT - LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB - CALL SRL32 ; RIGHT SHIFT - CALL PRTDEC32 ; PRINT DWORD IN DECIMAL - PRTS("MB$") ; PRINT SUFFIX - CALL PC_COMMA - PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA - RET ; DONE -; -PS_PRTDC1: - ; PRINT ROM/RAM DISK CAPACITY IN KB - LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY - RST 08 ; DE:HL := BLOCKS - JP NZ,PS_PRTNUL ; MEDIA PROBLEM - RES 7,D ; CLEAR LBA BIT - LD B,1 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB - CALL SRL32 ; RIGHT SHIFT - CALL PRTDEC32 ; PRINT DWORD IN DECIMAL - PRTS("KB$") ; PRINT SUFFIX - CALL PC_COMMA - PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA - RET ; DONE -; -PS_PRTDC2: - LD C,E ; ATTRIBUTE TO C FOR SAFE KEEPING -; - LD A,%00011000 ; DISPLAY FORM FACTOR - LD DE,PS_FLP_FSTR ; WHICH IS DEFINED IN - CALL PRTIDXMSK ; BITS 5 AND 6. -; - LD A,%00000100 ; DISPLAY SIDES - LD DE,PS_FLP_SSTR ; WHICH IS DEFINED - CALL PRTIDXMSK ; IN BIT 4 -; - LD A,%00000011 ; DISPLAY DENSITY - LD DE,PS_FLP_DSTR ; WHICH IS DEFINED IN - CALL PRTIDXMSK ; BITS 2 AND 3. -; - CALL PC_COMMA - PRTS("CHS$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA -; - RET ; DONE -; -; PRINT ONE LINE SERIAL UNIT/DEVICE INFO, SERIAL UNIT INDEX IN C -; -PS_SERIAL: - PUSH BC ; SAVE UNIT INDEX FOR LATER -; - ; UNIT COLUMN - PRTS("Char $") - LD A,C ; MOVE UNIT NUM TO A - CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT - PRTS(" $") ; PAD TO NEXT COLUMN -; - ; DEVICE COLUMN - LD B,BF_CIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C - RST 08 ; DE:=DEVTYP/NUM, C:=DEVICE ATTRIBUTES - PUSH BC ; SAVE ATTRIBUTES - LD HL,PS_SDUART ; POINT TO SERIAL DEVICE TYPE NAME TABLE - CALL PS_PRTDEV ; PRINT SERIAL DEVICE NMEMONIC PADDED TO FIELD WIDTH - POP BC ; RECOVER ATTRIBUTES - PUSH BC ; SAVE ATTRIBUTES AGAIN - CALL PS_PRTST ; PRINT SERIAL TYPE - POP BC ; RESTORE ATTRIBUTES - POP DE ; RESTORE UNIT NUM TO E - CALL PS_PRTSC ; PRINT SERIAL CONFIG -; - CALL NEWLINE - RET -; -; PRINT CHARACTER TYPE (SERIAL ATTRIBUTE IN C) -; -PS_PRTST: - LD HL,PS_STPPT - BIT 6,C - JP NZ,PS_PRT18 ; PARALLEL TYPE? - LD HL,PS_STRS232 ; ASSUME RS-232 - BIT 7,C ; 0=RS-232, 1=TERMINAL - JP Z,PS_PRT18 ; HANDLE TERMINAL TYPE - LD HL,PS_STTERM ; TYPE IS TERMINAL - JP PS_PRT18 -; -; PRINT SERIAL CONFIG (UNIT IN E, ATTRIBUTE IN C) -; -PS_PRTSC: - BIT 6,C ; PARALLEL TYPE? - JR NZ,PSPRTPC0 - - BIT 7,C ; 0=RS-232, 1=TERMINAL - JP NZ,PS_PRTSC1 ; PRINT TERMINAL CONFIG -; - ; PRINT RS-232 CONFIG - LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG - LD C,E ; SET SERIAL UNIT NUM - RST 08 ; DE:HL := BAUD RATE - LD A,D ; TEST FOR $FF - AND E - INC A ; SET Z IF DE == $FF - JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED -; PS_PRTSC0: ; PRINT BAUD RATE PUSH DE ; PRESERVE DE @@ -8745,209 +8536,6 @@ PS_PRTSC0: ; RET ; -PSPRTPC0: - LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG - LD C,E ; SET PARALLEL UNIT NUM - RST 08 ; DE:HL := I/O SETTING - LD A,D ; TEST FOR $FF - AND E - INC A ; SET Z IF DE == $FF - JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED -; -PS_PRTPC0: - LD C,E ; DISPLAY PIO TYPE - LD A,11000000B ; WHICH IS DEFINE BY - LD DE,PIO_MODE_STR ; BITS 6 AND 7 - JP PRTIDXMSK -; RET ; TRICK RETURN -; -PS_PRTSC1: - ; PRINT TERMINAL CONFIG - LD A,C ; GET ATTRIBUTE VALUE - CP $BF ; NO ATTACHED VDA - JR Z,PS_PRTSC2 - PRTS("Video $") ; FORMATTING - AND $0F ; ISOLATE VIDEO UNIT NUM - CALL PRTDECB ; PRINT IT - CALL PC_COMMA -#IF (VDAEMU == EMUTYP_TTY) - PRTS("TTY$") -#ENDIF -#IF (VDAEMU == EMUTYP_ANSI) - PRTS("ANSI$") -#ENDIF - RET -; -PS_PRTSC2: - PRTS("Term Module$") - CALL PC_COMMA - PRTS("ANSI$") - RET -; -; PRINT ONE LINE VIDEO UNIT/DEVICE INFO, VIDEO UNIT INDEX IN C -; -PS_VIDEO: - PUSH BC ; SAVE UNIT INDEX FOR LATER -; - ; UNIT COLUMN - PRTS("Video $") - LD A,C ; MOVE UNIT NUM TO A - CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT - PRTS(" $") ; PAD TO NEXT COLUMN -; - ; DEVICE COLUMN - LD B,BF_VDADEV ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C - RST 08 ; DE:=DEVTYP/NUM, H:=DISK ATTRIBUTES - PUSH BC ; SAVE ATTRIBUTES - LD HL,PS_VDVDU ; POINT TO VIDEO DEVICE TYPE NAME TABLE - CALL PS_PRTDEV ; PRINT VIDEO DEVICE NMEMONIC PADDED TO FIELD WIDTH - POP DE ; RECOVER ATTRIBUTES - PUSH DE ; SAVE ATTRIBUTES AGAIN - CALL PS_PRTVT ; PRINT VIDEO TYPE - POP DE ; RESTORE ATTRIBUTES - POP BC ; RESTORE UNIT NUM - CALL PS_PRTVC ; PRINT VIDEO CONFIG -; - CALL NEWLINE - RET -; -; PRINT VIDEO TYPE (VIDEO ATTRIBUTE IN E) -; -PS_PRTVT: - LD HL,PS_VTCRT ; ASSUME CRT - JP PS_PRT18 ; PRINT -; -; PRINT VIDEO CONFIG (UNIT IN C, ATTRIBUTE IN E) -; -PS_PRTVC: - PRTS("Text$") - CALL PC_COMMA - LD B,BF_VDAQRY ; FUNC: QUERY FOR VDA CONFIG - RST 08 ; D:=ROWS, E:=COLS - LD A,E - CALL PRTDECB - LD A,'x' - CALL COUT - LD A,D - CALL PRTDECB - RET -; -; PRINT SOUND CONFIG -; -PS_SOUND: - PUSH BC - - ; UNIT COLUMN - PRTS("Sound $") - LD A,C ; MOVE UNIT NUM TO A - CALL PRTDECB ; PRINT IT - CP 10 ; CHECK FOR MULTIPLE DIGITS - CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED - PRTS(" $") ; PAD TO NEXT COLUMN - - ; DEVICE COLUMN - - PUSH BC - LD E,C - XOR A - LD DE,PS_SDSND ; POINT TO DEVICE TYPE NAME TABLE - CALL PRTIDXDEA ; PRINT DEVICE NMEMONIC PADDED TO FIELD WIDTH - LD A,C ; MOVE UNIT NUM TO A - CALL PRTDECB ; PRINT IT - CALL PC_COLON - LD A,(PRTIDXCNT) - SUB 12-1 ; SUBTRACT FIELD WIDTH (LESS THE COLON) - NEG ; MAKE IT A POSITIVE NUMBER - CALL PS_PAD ; PAD AS NEEDED - POP BC - - ; DEVICE TYPE -; - LD B,BF_SNDQUERY ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C - LD E,BF_SNDQ_DEV - RST 08 - PUSH BC - LD A,B - LD DE,PS_SDSN76489 - CALL PRTIDXDEA - CALL PS_PAD18 - POP BC -; - ; DEVICE CHARACTERISTICS -; - LD B,BF_SNDQUERY ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C - LD E,BF_SNDQ_CHCNT - RST 08 - LD A,B - CALL PRTDECB - LD A,'+' - CALL COUT - LD A,C - CALL PRTDECB - PRTS(" CHANNELS$") - CALL NEWLINE -; - POP BC - RET -; -; PRINT DEVICE NMEMONIC, DEVTYP/NUM SPECIFIED IN DE -; -PS_PRTDEV: - EX DE,HL - LD A,H ; TYPE ID - CALL PRTIDXDEA ; PRINT TYPE LABEL - LD A,L ; UNIT NUMBER - CALL PRTDECB ; PRINT NUM, ASSUME 1 CHAR - CALL PC_COLON ; PRINT COLON - LD A,(PRTIDXCNT) - SUB 12-2+1 ; 12 CHAR FIELD - 1 POS FOR UNIT NUM AND 1 POS FOR COLON - NEG - CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) - RET -; -; PRINT DEVICE MNEMONIC, DEVTYP/NUM SPECIFIED IN DE -; -PS_PRTNUL: - LD HL,PS_STRNUL - ; FALL THRU TO PS_PRT -; -; PRINT STRING AT (HL), $ TERM, RETURN CHARS PRINTED IN C -; -PS_PRT: LD C,0 ; INIT CHAR COUNT -PS_PRT1: - LD A,(HL) ; GET CHAR - INC HL ; BUMP INDEX - CP '$' ; TERM? - RET Z ; IF SO, DONE - CALL COUT ; PRINT IT - INC C ; BUMP COUNTER - JR PS_PRT1 ; AND LOOP -; -; PAD 18 CHARACTER FIELD -; -PS_PAD18: - LD A,(PRTIDXCNT) - LD C,A - JR PS_PRT18A -; -; PRINT STRING AT HL IN 18 CHARACTER FIELD -; -PS_PRT18: - CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED -PS_PRT18A: - LD A,18 ; 18 CHAR FIELD - SUB C -; CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) -; -; PAD N SPACES SPECIFIED IN A -; -PS_PAD: LD B,A - LD A,' ' -PS_PAD1: - CALL COUT - DJNZ PS_PAD1 - RET -; HB_CPU_STR: .TEXT " Z80$" .TEXT " Z80180$" .TEXT " Z8S180-K$" @@ -8955,123 +8543,8 @@ HB_CPU_STR: .TEXT " Z80$" .TEXT " Z80280$" .TEXT " eZ80$" ; -PS_STRNUL .TEXT "--$" ; DISPLAY STRING FOR NUL VALUE -; -; DISK DEVICE STRINGS -; -PS_DDMD .TEXT "MD$" -PS_DDFD .TEXT "FD$" -PS_DDRF .TEXT "RF$" -PS_DDIDE .TEXT "IDE$" -PS_DDATAPI .TEXT "ATAPI$" -PS_DDPPIDE .TEXT "PPIDE$" -PS_DDSD .TEXT "SD$" -PS_DDPRPSD .TEXT "PRPSD$" -PS_DDPPPSD .TEXT "PPPSD$" -PS_DDHDSK .TEXT "HDSK$" -PS_DDPPA .TEXT "PPA$" -PS_DDIMM .TEXT "IMM$" -PS_DDSYQ .TEXT "SYQ$" -PS_DDCHUSB .TEXT "CHUSB$" -PS_DDCHSD .TEXT "CHSD$" -; -; DISK TYPE STRINGS -; -PS_DTFLOP .TEXT "Floppy Disk$" -PS_DTHARD .TEXT "Hard Disk$" -PS_DTCF .TEXT "CompactFlash$" -PS_DTSD .TEXT "SD Card$" -PS_DTUSB .TEXT "USB Drive$" -PS_DTROM .TEXT "ROM Disk$" -PS_DTRAM .TEXT "RAM Disk$" -PS_DTFSH .TEXT "Flash ROM$" -PS_DTRF .TEXT "RAM Floppy$" -PS_DTCD .TEXT "CD-ROM$" -PS_DTCRT .TEXT "Cartridge$" -PS_DTOTHER .TEXT "???$" -; -; FLOPPY ATTRIBUTE STRINGS -; -PS_FLP_FSTR: .TEXT "8\",$" ; PS_FLP8 - .TEXT "5.25\",$" ; PS_FLP5 - .TEXT "3.5\",$" ; PS_FLP3 - .TEXT "???\",$" ; PS_FLPN -; -PS_FLP_SSTR: .TEXT "SS/$" ; PS_FLPSS - .TEXT "DS/$" ; PS_FLPDS -; -PS_FLP_DSTR: .TEXT "SD$" ; PS_FLPSD - .TEXT "DD$" ; PS_FLPDD - .TEXT "HD$" ; PS_FLPHD - .TEXT "ED$" ; PS_FLPED -; -; CHARACTER DEVICE STRINGS -; -PS_SDUART .TEXT "UART$" -PS_SDASCI .TEXT "ASCI$" -PS_SDTERM .TEXT "TERM$" -PS_SDPRPCON .TEXT "PRPCON$" -PS_SDPPPCON .TEXT "PPPCON$" -PS_SDSIO .TEXT "SIO$" -PS_SDACIA .TEXT "ACIA$" -PS_SDPIO .TEXT "PIO$" -PS_SDUF .TEXT "UF$" -PS_SDDUART .TEXT "DUART$" -PS_SDZ2U .TEXT "Z2U$" -PS_SDLPT .TEXT "LPT$" -PS_SDESPCON .TEXT "ESPCON$" -PS_SDESPSER .TEXT "ESPSER$" -PS_SDSCON .TEXT "SCON$" -PS_SDSSER .TEXT "SSER$" -PS_SDEZ80 .TEXT "EZ80$" -; -; CHARACTER SUB TYPE STRINGS -; -PS_STRS232 .TEXT "RS-232$" -PS_STTERM .TEXT "Terminal$" -PS_STPPT .TEXT "Parallel$" -; PS_STPARMAP .DB "NONENMNS" ; -; PARALLEL TYPE STRINGS -; -PIO_MODE_STR: .TEXT "Output$" - .TEXT "Input$" - .TEXT "Bidirectional$" - .TEXT "BitCtrl$" -; -; VIDEO DEVICE STRINGS -; -PS_VDVDU .TEXT "VDU$" -PS_VDCVDU .TEXT "CVDU$" -PS_VDGDC .TEXT "GDC$" -PS_VDTMS .TEXT "TMS$" -PS_VDVGA .TEXT "VGA$" -PS_VDVRC .TEXT "VRC$" -PS_VDEF .TEXT "EF$" -PS_VDFV .TEXT "FV$" -PS_VDXOSERA .TEXT "XOSERA$" -; -; VIDEO TYPE STRINGS -; -PS_VTCRT .TEXT "CRT$" -; -; SOUND DEVICE STRINGS -; -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$" -; -; 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 $ ; ;================================================================================================== diff --git a/Source/HBIOS/invntdev.asm b/Source/HBIOS/invntdev.asm new file mode 100644 index 00000000..980392cb --- /dev/null +++ b/Source/HBIOS/invntdev.asm @@ -0,0 +1,719 @@ +;============================================================================== +; DEVIVE INVENTORY - Inventory Device +; Version June-2025 +;============================================================================== +; +; This was extracted from HBIOS and converted into a ROM Application +; +; This is a program CALLED from RomLoader, and is specific to RomWBW +;------------------------------------------------------------------------------ +; +; Change Log: +; 2025-06-30 [MAP] Initial Release copied from HBIOS.ASM +;______________________________________________________________________________ +; +; Include Files +; +#include "std.asm" ; standard RomWBW constants +; +;***************************************************************************** +; +; APPLICATION WILL WILL BE LOADED AT DEV_LOC. THEREFORE, THE CODE +; MUST "ORG" AT THIS ADDRESS. TO CHANGE THE LOAD LOCATION OF THIS +; CODE, YOU CAN UPDATE DEV_LOC IN LAYOUT.INC +; + .ORG DEV_LOC +; +;***************************************************************************** +; INIT CODE +;***************************************************************************** +; +#if (BIOS == BIOS_WBW) + ; Get the current console unit + ld b,BF_SYSPEEK ; HBIOS func: PEEK + ld d,BID_BIOS ; BIOS bank + ld hl,HCB_LOC + HCB_CONDEV ; console unit num in HCB + rst 08 ; do it + ld a,e ; put in A + ld (curcon),a ; save it +#endif +; +;***************************************************************************** +; Main Code starts here +;***************************************************************************** +; +PRTSUM: + CALL NEWLINE2 ; SKIP A LINE + LD DE,PS_STRHDR ; POINT TO HEADER + CALL WRITESTR ; PRINT IT +; + LD C,BF_SYSGET_CIOCNT ; CHARACTER DEVICES + LD HL,PS_SERIAL + CALL PRT_ALLD +; + LD C,BF_SYSGET_DIOCNT ; DISK DRIVES + LD HL,PS_DISK + CALL PRT_ALLD +; + LD C,BF_SYSGET_VDACNT ; VIDEO DEVICES + LD HL,PS_VIDEO + CALL PRT_ALLD +; + LD C,BF_SYSGET_SNDCNT ; SOUND DEVICES + LD HL,PS_SOUND + CALL PRT_ALLD + RET +; +;***************************************************************************** +; Supporting Code Stars Here +;***************************************************************************** +; +PRT_ALLD: + LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET + RST 08 ; E := UNIT COUNT + LD B,E ; MOVE TO B FOR LOOP COUNT + LD A,E ; MOVE TO ACCUM + OR A ; SET FLAGS + RET Z ; IF NONE, JUST RETURN + LD C,0 ; C WILL BE UNIT INDEX +PRT_ALLD1: + PUSH BC ; SAVE LOOP CONTROL + PUSH DE + PUSH HL + CALL JPHL ; CALL THE ROUTINE PASSED IN HL + POP HL + POP DE + POP BC ; RESTORE LOOP CONTROL + INC C ; BUMP UNIT INDEX + DJNZ PRT_ALLD1 ; LOOP THRU ALL DEVICES + RET +; +; PRINT ONE LINE DISK UNIT/DEVICE INFO, DISK UNIT INDEX IN C +; +PS_DISK: + PUSH BC ; SAVE UNIT INDEX FOR LATER +; + ; UNIT COLUMN + PRTS("Disk $") + LD A,C ; MOVE UNIT NUM TO A + CALL PRTDECB ; PRINT IT + CP 10 ; CHECK FOR MULTIPLE DIGITS + CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED + PRTS(" $") ; PAD TO NEXT COLUMN +; + ; DEVICE COLUMN + LD B,BF_DIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C + RST 08 ; DE:=DEVTYP/NUM, C:=DISK ATTRIBUTES + PUSH BC ; SAVE ATTRIBUTES + LD HL,PS_DDMD ; POINT TO DISK DEVICE TYPE NAME TABLE + CALL PS_PRTDEV ; PRINT DISK DEVICE NMEMONIC PADDED TO FIELD WIDTH + POP DE ; RECOVER ATTRIBUTES TO DE + PUSH DE ; SAVE ATTRIBUTES AGAIN + CALL PS_PRTDT ; PRINT DISK TYPE + POP DE ; RESTORE ATTRIBUTES + POP BC ; RESTORE UNIT NUM + CALL PS_PRTDC ; PRINT DISK CAPACITY +; + CALL NEWLINE + RET +; +; PRINT DISK TYPE (DISK ATTRIBUTE IN E) +; +PS_PRTDT: + LD A,E ; ATTRIBUTES TO A + BIT 7,A ; FLOPPY BIT SET? + LD HL,PS_DTFLOP ; ASSUME FLOPPY + JP NZ,PS_PRT18 ; IF FLOPPY, JUMP AHEAD + LD C,E + LD DE,PS_DTHARD + LD A,00001111B + CALL PRTIDXMSK + CALL PS_PAD18 ; PAD TO 18 SPACES + RET +; +; PRINT DISK CAPACITY (UNIT IN C, ATTRIBUTE IN E) +; +PS_PRTDC: +; + LD A,E ; ATTRIBUTE TO ACCUM + BIT 7,A ; TEST FOR FLOPPY + JR NZ,PS_PRTDC2 ; HANDLE FLOPPY + AND $0F ; ISOLATE TYPE BITS + CP 4 ; ROM DISK? + JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB + CP 5 ; RAM DISK? + JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB + CP 7 ; FLASH DISK? + JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB +; + ; PRINT HARD DISK STORAGE SIZE IN MB + LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY + RST 08 ; DE:HL := BLOCKS + JP NZ,PS_PRTNUL ; MEDIA PROBLEM + RES 7,D ; CLEAR LBA BIT + LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB + CALL SRL32 ; RIGHT SHIFT + CALL PRTDEC32 ; PRINT DWORD IN DECIMAL + PRTS("MB$") ; PRINT SUFFIX + CALL PC_COMMA + PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA + RET ; DONE +; +PS_PRTDC1: + ; PRINT ROM/RAM DISK CAPACITY IN KB + LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY + RST 08 ; DE:HL := BLOCKS + JP NZ,PS_PRTNUL ; MEDIA PROBLEM + RES 7,D ; CLEAR LBA BIT + LD B,1 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB + CALL SRL32 ; RIGHT SHIFT + CALL PRTDEC32 ; PRINT DWORD IN DECIMAL + PRTS("KB$") ; PRINT SUFFIX + CALL PC_COMMA + PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA + RET ; DONE +; +PS_PRTDC2: + LD C,E ; ATTRIBUTE TO C FOR SAFE KEEPING +; + LD A,%00011000 ; DISPLAY FORM FACTOR + LD DE,PS_FLP_FSTR ; WHICH IS DEFINED IN + CALL PRTIDXMSK ; BITS 5 AND 6. +; + LD A,%00000100 ; DISPLAY SIDES + LD DE,PS_FLP_SSTR ; WHICH IS DEFINED + CALL PRTIDXMSK ; IN BIT 4 +; + LD A,%00000011 ; DISPLAY DENSITY + LD DE,PS_FLP_DSTR ; WHICH IS DEFINED IN + CALL PRTIDXMSK ; BITS 2 AND 3. +; + CALL PC_COMMA + PRTS("CHS$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA +; + RET ; DONE +; +; PRINT ONE LINE SERIAL UNIT/DEVICE INFO, SERIAL UNIT INDEX IN C +; +PS_SERIAL: + PUSH BC ; SAVE UNIT INDEX FOR LATER +; + ; UNIT COLUMN + PRTS("Char $") + LD A,C ; MOVE UNIT NUM TO A + CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT + PRTS(" $") ; PAD TO NEXT COLUMN +; + ; DEVICE COLUMN + LD B,BF_CIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C + RST 08 ; DE:=DEVTYP/NUM, C:=DEVICE ATTRIBUTES + PUSH BC ; SAVE ATTRIBUTES + LD HL,PS_SDUART ; POINT TO SERIAL DEVICE TYPE NAME TABLE + CALL PS_PRTDEV ; PRINT SERIAL DEVICE NMEMONIC PADDED TO FIELD WIDTH + POP BC ; RECOVER ATTRIBUTES + PUSH BC ; SAVE ATTRIBUTES AGAIN + CALL PS_PRTST ; PRINT SERIAL TYPE + POP BC ; RESTORE ATTRIBUTES + POP DE ; RESTORE UNIT NUM TO E + CALL PS_PRTSC ; PRINT SERIAL CONFIG +; + CALL NEWLINE + RET +; +; PRINT CHARACTER TYPE (SERIAL ATTRIBUTE IN C) +; +PS_PRTST: + LD HL,PS_STPPT + BIT 6,C + JP NZ,PS_PRT18 ; PARALLEL TYPE? + LD HL,PS_STRS232 ; ASSUME RS-232 + BIT 7,C ; 0=RS-232, 1=TERMINAL + JP Z,PS_PRT18 ; HANDLE TERMINAL TYPE + LD HL,PS_STTERM ; TYPE IS TERMINAL + JP PS_PRT18 +; +; PRINT SERIAL CONFIG (UNIT IN E, ATTRIBUTE IN C) +; +PS_PRTSC: + BIT 6,C ; PARALLEL TYPE? + JR NZ,PSPRTPC0 + + BIT 7,C ; 0=RS-232, 1=TERMINAL + JP NZ,PS_PRTSC1 ; PRINT TERMINAL CONFIG +; + ; PRINT RS-232 CONFIG + LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG + LD C,E ; SET SERIAL UNIT NUM + RST 08 ; DE:HL := BAUD RATE + LD A,D ; TEST FOR $FF + AND E + INC A ; SET Z IF DE == $FF + JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED +; +PS_PRTSC0: + ; PRINT BAUD RATE + PUSH DE ; PRESERVE DE + LD A,D + AND $1F ; ISOLATE ENCODED BAUD RATE + LD L,A ; PUT IN L + LD H,0 ; H IS ALWAYS ZERO + LD DE,75 ; BAUD RATE DECODE CONSTANT + CALL DECODE ; DE:HL := BAUD RATE + LD BC,HB_BCDTMP ; POINT TO TEMP BCD BUF + CALL BIN2BCD ; CONVERT TO BCD + CALL PRTBCD ; AND PRINT IN DECIMAL + POP DE ; RESTORE DE +; + ; PRINT DATA BITS + PUSH DE ; PRESERVE DE + CALL PC_COMMA ; FORMATTING + LD A,E ; GET CONFIG BYTE + AND $03 ; ISOLATE DATA BITS VALUE + ADD A,'5' ; CONVERT TO CHARACTER + CALL COUT ; AND PRINT + POP DE ; RESTORE DE +; + ; PRINT PARITY + PUSH DE ; PRESERVE DE + CALL PC_COMMA ; FORMATTING + LD A,E ; GET CONFIG BYTE + RRCA ; SHIFT RELEVANT BITS + RRCA ; ... + RRCA ; ... + AND $07 ; AND ISOLATE DATA BITS VALUE + LD HL,PS_STPARMAP ; CHARACTER LOOKUP TABLE + CALL ADDHLA ; APPLY OFFSET + LD A,(HL) ; GET CHARACTER + CALL COUT ; AND PRINT + POP DE ; RESTORE DE +; + ; PRINT STOP BITS + CALL PC_COMMA ; FORMATTING + LD A,E ; GET CONFIG BYTE + RRCA ; SHIFT RELEVANT BITS + RRCA ; ... + AND $01 ; AND ISOLATE DATA BITS VALUE + ADD A,'1' ; MAKE IT A CHARACTER + CALL COUT ; AND PRINT +; + RET +; +PSPRTPC0: + LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG + LD C,E ; SET PARALLEL UNIT NUM + RST 08 ; DE:HL := I/O SETTING + LD A,D ; TEST FOR $FF + AND E + INC A ; SET Z IF DE == $FF + JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED +; +PS_PRTPC0: + LD C,E ; DISPLAY PIO TYPE + LD A,11000000B ; WHICH IS DEFINE BY + LD DE,PIO_MODE_STR ; BITS 6 AND 7 + JP PRTIDXMSK +; RET ; TRICK RETURN +; +PS_PRTSC1: + ; PRINT TERMINAL CONFIG + LD A,C ; GET ATTRIBUTE VALUE + CP $BF ; NO ATTACHED VDA + JR Z,PS_PRTSC2 + PRTS("Video $") ; FORMATTING + AND $0F ; ISOLATE VIDEO UNIT NUM + CALL PRTDECB ; PRINT IT + CALL PC_COMMA +#IF (VDAEMU == EMUTYP_TTY) + PRTS("TTY$") +#ENDIF +#IF (VDAEMU == EMUTYP_ANSI) + PRTS("ANSI$") +#ENDIF + RET +; +PS_PRTSC2: + PRTS("Term Module$") + CALL PC_COMMA + PRTS("ANSI$") + RET +; +; PRINT ONE LINE VIDEO UNIT/DEVICE INFO, VIDEO UNIT INDEX IN C +; +PS_VIDEO: + PUSH BC ; SAVE UNIT INDEX FOR LATER +; + ; UNIT COLUMN + PRTS("Video $") + LD A,C ; MOVE UNIT NUM TO A + CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT + PRTS(" $") ; PAD TO NEXT COLUMN +; + ; DEVICE COLUMN + LD B,BF_VDADEV ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C + RST 08 ; DE:=DEVTYP/NUM, H:=DISK ATTRIBUTES + PUSH BC ; SAVE ATTRIBUTES + LD HL,PS_VDVDU ; POINT TO VIDEO DEVICE TYPE NAME TABLE + CALL PS_PRTDEV ; PRINT VIDEO DEVICE NMEMONIC PADDED TO FIELD WIDTH + POP DE ; RECOVER ATTRIBUTES + PUSH DE ; SAVE ATTRIBUTES AGAIN + CALL PS_PRTVT ; PRINT VIDEO TYPE + POP DE ; RESTORE ATTRIBUTES + POP BC ; RESTORE UNIT NUM + CALL PS_PRTVC ; PRINT VIDEO CONFIG +; + CALL NEWLINE + RET +; +; PRINT VIDEO TYPE (VIDEO ATTRIBUTE IN E) +; +PS_PRTVT: + LD HL,PS_VTCRT ; ASSUME CRT + JP PS_PRT18 ; PRINT +; +; PRINT VIDEO CONFIG (UNIT IN C, ATTRIBUTE IN E) +; +PS_PRTVC: + PRTS("Text$") + CALL PC_COMMA + LD B,BF_VDAQRY ; FUNC: QUERY FOR VDA CONFIG + RST 08 ; D:=ROWS, E:=COLS + LD A,E + CALL PRTDECB + LD A,'x' + CALL COUT + LD A,D + CALL PRTDECB + RET +; +; PRINT SOUND CONFIG +; +PS_SOUND: + PUSH BC + + ; UNIT COLUMN + PRTS("Sound $") + LD A,C ; MOVE UNIT NUM TO A + CALL PRTDECB ; PRINT IT + CP 10 ; CHECK FOR MULTIPLE DIGITS + CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED + PRTS(" $") ; PAD TO NEXT COLUMN + + ; DEVICE COLUMN + + PUSH BC + LD E,C + XOR A + LD DE,PS_SDSND ; POINT TO DEVICE TYPE NAME TABLE + CALL PRTIDXDEA ; PRINT DEVICE NMEMONIC PADDED TO FIELD WIDTH + LD A,C ; MOVE UNIT NUM TO A + CALL PRTDECB ; PRINT IT + CALL PC_COLON + LD A,(PRTIDXCNT) + SUB 12-1 ; SUBTRACT FIELD WIDTH (LESS THE COLON) + NEG ; MAKE IT A POSITIVE NUMBER + CALL PS_PAD ; PAD AS NEEDED + POP BC + + ; DEVICE TYPE +; + LD B,BF_SNDQUERY ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C + LD E,BF_SNDQ_DEV + RST 08 + PUSH BC + LD A,B + LD DE,PS_SDSN76489 + CALL PRTIDXDEA + CALL PS_PAD18 + POP BC +; + ; DEVICE CHARACTERISTICS +; + LD B,BF_SNDQUERY ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C + LD E,BF_SNDQ_CHCNT + RST 08 + LD A,B + CALL PRTDECB + LD A,'+' + CALL COUT + LD A,C + CALL PRTDECB + PRTS(" CHANNELS$") + CALL NEWLINE +; + POP BC + RET +; +; PRINT DEVICE NMEMONIC, DEVTYP/NUM SPECIFIED IN DE +; +PS_PRTDEV: + EX DE,HL + LD A,H ; TYPE ID + CALL PRTIDXDEA ; PRINT TYPE LABEL + LD A,L ; UNIT NUMBER + CALL PRTDECB ; PRINT NUM, ASSUME 1 CHAR + CALL PC_COLON ; PRINT COLON + LD A,(PRTIDXCNT) + SUB 12-2+1 ; 12 CHAR FIELD - 1 POS FOR UNIT NUM AND 1 POS FOR COLON + NEG + CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) + RET +; +; PRINT DEVICE MNEMONIC, DEVTYP/NUM SPECIFIED IN DE +; +PS_PRTNUL: + LD HL,PS_STRNUL + ; FALL THRU TO PS_PRT +; +; PRINT STRING AT (HL), $ TERM, RETURN CHARS PRINTED IN C +; +PS_PRT: LD C,0 ; INIT CHAR COUNT +PS_PRT1: + LD A,(HL) ; GET CHAR + INC HL ; BUMP INDEX + CP '$' ; TERM? + RET Z ; IF SO, DONE + CALL COUT ; PRINT IT + INC C ; BUMP COUNTER + JR PS_PRT1 ; AND LOOP +; +; PAD 18 CHARACTER FIELD +; +PS_PAD18: + LD A,(PRTIDXCNT) + LD C,A + JR PS_PRT18A +; +; PRINT STRING AT HL IN 18 CHARACTER FIELD +; +PS_PRT18: + CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED +PS_PRT18A: + LD A,18 ; 18 CHAR FIELD + SUB C +; CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) +; +; PAD N SPACES SPECIFIED IN A +; +PS_PAD: LD B,A + LD A,' ' +PS_PAD1: + CALL COUT + DJNZ PS_PAD1 + RET +; +;***************************************************************************** +; Support Routines +;***************************************************************************** +; +#include "util.asm" +#INCLUDE "decode.asm" +#include "bcd.asm" +; +;======================================================================= +; Console character I/O helper routines (registers preserved) +;======================================================================= +; +#if (BIOS == BIOS_WBW) +; +; Output character from A +; +COUT: + ; Save all incoming registers + push af + push bc + push de + push hl +; + ; Output character to console via HBIOS + ld e,a ; output char to E + ld a,(curcon) ; get current console + ld c,a ; console unit to C + ld b,BF_CIOOUT ; HBIOS func: output char + rst 08 ; HBIOS outputs character +; + ; Restore all registers + pop hl + pop de + pop bc + pop af + ret +; +#endif +; +#if (BIOS == BIOS_UNA) +; +; Output character from A +; +COUT: + ; Save all incoming registers + push af + push bc + push de + push hl +; + ; Output character to console via UBIOS + ld e,a + ld bc,$12 + rst 08 +; + ; Restore all registers + pop hl + pop de + pop bc + pop af + ret +; +#endif +; +;=============================================================================== +; Static Strings and Data +;=============================================================================== +; +PS_STRNUL .TEXT "--$" ; DISPLAY STRING FOR NUL VALUE +; +; DISK DEVICE STRINGS +; +PS_DDMD .TEXT "MD$" +PS_DDFD .TEXT "FD$" +PS_DDRF .TEXT "RF$" +PS_DDIDE .TEXT "IDE$" +PS_DDATAPI .TEXT "ATAPI$" +PS_DDPPIDE .TEXT "PPIDE$" +PS_DDSD .TEXT "SD$" +PS_DDPRPSD .TEXT "PRPSD$" +PS_DDPPPSD .TEXT "PPPSD$" +PS_DDHDSK .TEXT "HDSK$" +PS_DDPPA .TEXT "PPA$" +PS_DDIMM .TEXT "IMM$" +PS_DDSYQ .TEXT "SYQ$" +PS_DDCHUSB .TEXT "CHUSB$" +PS_DDCHSD .TEXT "CHSD$" +; +; DISK TYPE STRINGS +; +PS_DTFLOP .TEXT "Floppy Disk$" +PS_DTHARD .TEXT "Hard Disk$" +PS_DTCF .TEXT "CompactFlash$" +PS_DTSD .TEXT "SD Card$" +PS_DTUSB .TEXT "USB Drive$" +PS_DTROM .TEXT "ROM Disk$" +PS_DTRAM .TEXT "RAM Disk$" +PS_DTFSH .TEXT "Flash ROM$" +PS_DTRF .TEXT "RAM Floppy$" +PS_DTCD .TEXT "CD-ROM$" +PS_DTCRT .TEXT "Cartridge$" +PS_DTOTHER .TEXT "???$" +; +; FLOPPY ATTRIBUTE STRINGS +; +PS_FLP_FSTR: .TEXT "8\",$" ; PS_FLP8 + .TEXT "5.25\",$" ; PS_FLP5 + .TEXT "3.5\",$" ; PS_FLP3 + .TEXT "???\",$" ; PS_FLPN +; +PS_FLP_SSTR: .TEXT "SS/$" ; PS_FLPSS + .TEXT "DS/$" ; PS_FLPDS +; +PS_FLP_DSTR: .TEXT "SD$" ; PS_FLPSD + .TEXT "DD$" ; PS_FLPDD + .TEXT "HD$" ; PS_FLPHD + .TEXT "ED$" ; PS_FLPED +; +; CHARACTER DEVICE STRINGS +; +PS_SDUART .TEXT "UART$" +PS_SDASCI .TEXT "ASCI$" +PS_SDTERM .TEXT "TERM$" +PS_SDPRPCON .TEXT "PRPCON$" +PS_SDPPPCON .TEXT "PPPCON$" +PS_SDSIO .TEXT "SIO$" +PS_SDACIA .TEXT "ACIA$" +PS_SDPIO .TEXT "PIO$" +PS_SDUF .TEXT "UF$" +PS_SDDUART .TEXT "DUART$" +PS_SDZ2U .TEXT "Z2U$" +PS_SDLPT .TEXT "LPT$" +PS_SDESPCON .TEXT "ESPCON$" +PS_SDESPSER .TEXT "ESPSER$" +PS_SDSCON .TEXT "SCON$" +PS_SDSSER .TEXT "SSER$" +PS_SDEZ80 .TEXT "EZ80$" +; +; CHARACTER SUB TYPE STRINGS +; +PS_STRS232 .TEXT "RS-232$" +PS_STTERM .TEXT "Terminal$" +PS_STPPT .TEXT "Parallel$" +; +PS_STPARMAP .DB "NONENMNS" +; +; PARALLEL TYPE STRINGS +; +PIO_MODE_STR: .TEXT "Output$" + .TEXT "Input$" + .TEXT "Bidirectional$" + .TEXT "BitCtrl$" +; +; VIDEO DEVICE STRINGS +; +PS_VDVDU .TEXT "VDU$" +PS_VDCVDU .TEXT "CVDU$" +PS_VDGDC .TEXT "GDC$" +PS_VDTMS .TEXT "TMS$" +PS_VDVGA .TEXT "VGA$" +PS_VDVRC .TEXT "VRC$" +PS_VDEF .TEXT "EF$" +PS_VDFV .TEXT "FV$" +PS_VDXOSERA .TEXT "XOSERA$" +; +; VIDEO TYPE STRINGS +; +PS_VTCRT .TEXT "CRT$" +; +; SOUND DEVICE STRINGS +; +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$" +; +; 0 1 2 3 4 5 6 7 +; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 +PS_STRHDR .TEXT "Unit Device Type Capacity/Mode\r\n" + .TEXT "---------- ---------- ---------------- --------------------\r\n$" +; +;=============================================================================== +; Working data +;=============================================================================== +; +HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP) +; +#if (BIOS == BIOS_WBW) +curcon .db CIO_CONSOLE ; current console unit +#endif +; +;=============================================================================== +; +; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY DEV_SIZ BYTES. +; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY +; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED. +; +SLACK .EQU (DEV_END - $) +; +#IF (SLACK < 0) + .ECHO "*** INVENTORY SLICE IS TOO BIG!!!\n" + !!! ; FORCE AN ASSEMBLY ERROR +#ENDIF +; + .FILL SLACK,$00 + .ECHO "INVNTDEV Device Inventory space remaining: " + .ECHO SLACK + .ECHO " bytes.\n" +; +;=============================================================================== +; +.END diff --git a/Source/HBIOS/invntslc.asm b/Source/HBIOS/invntslc.asm index cca49c7c..652c273d 100644 --- a/Source/HBIOS/invntslc.asm +++ b/Source/HBIOS/invntslc.asm @@ -353,7 +353,7 @@ SLACK .EQU (SLC_END - $) #ENDIF ; .FILL SLACK,$00 - .ECHO "Slice Inventory space remaining: " + .ECHO "INVNTSLC Slice Inventory space remaining: " .ECHO SLACK .ECHO " bytes.\n" ; diff --git a/Source/HBIOS/layout.inc b/Source/HBIOS/layout.inc index 714318e1..cd177e0e 100644 --- a/Source/HBIOS/layout.inc +++ b/Source/HBIOS/layout.inc @@ -184,6 +184,14 @@ HWMON_END .EQU HWMON_LOC + HWMON_SIZ HWMON_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK BNK_NXTLOC .SET HWMON_IMGLOC + HWMON_SIZ ; IMG LOC OF NEXT COMPONENT ; +; Device Inventory Application +DEV_BNK .EQU BNK_CUR +DEV_LOC .EQU $0200 ; LOAD LOCATION +DEV_SIZ .EQU $0B00 ; SIZE OF IMAGE +DEV_END .EQU DEV_LOC + DEV_SIZ ; END LOCATION +DEV_IMGLOC .EQU BNK_NXTLOC ; LOCATION OF BINARY LOAD IMAGE IN BANK +BNK_NXTLOC .SET DEV_IMGLOC + DEV_SIZ ; IMG LOC OF NEXT COMPONENT +; ; Slice Inventory Application SLC_BNK .EQU BNK_CUR SLC_LOC .EQU $0200 ; LOAD LOCATION diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index b36acd5e..0aeab579 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -220,6 +220,17 @@ start2: ld (dskyact),a ; save it #endif +; +;======================================================================= +; Print Device List +;======================================================================= +; +#if (BIOS == BIOS_WBW) +; + ; note we dont call this for UNA, assume UNA already does this + call prtall ; Display Device List. +; +#endif ; ;======================================================================= ; Boot Loader Banner @@ -2311,12 +2322,11 @@ CST .equ cst ; ; Print list of all drives (WBW) ; -; Just invoke the existing HBIOS routine... +; Call the Rom App to perform this ; prtall: - ld a,BID_BIOS ; BIOS Bank please - ld ix,$0406 ; HBIOS PRTSUM vector - jp HB_BNKCALL ; do it + ld a,'D' ; "D"evice Inventory App + jp romcall ; Call a Rom App with Return ; #endif ; @@ -2324,6 +2334,9 @@ prtall: ; ; Print list of all drives (UNA) ; +; TODO Ideally the following code should be moved into InvntDev.ASM +; Rom application ("D") which is called from above. +; prtall: ld hl,str_devlst ; device list header string call pstr ; display it @@ -2711,6 +2724,7 @@ ra_ent(str_play, 'P', $FF, GAM_BNK, GAM_IMGLOC, GAM_LOC, GAM_SIZ, GAM_ ra_ent(str_net, 'N'+$80, $FF, NET_BNK, NET_IMGLOC, NET_LOC, NET_SIZ, NET_LOC) ra_ent(str_upd, 'X', $FF, UPD_BNK, UPD_IMGLOC, UPD_LOC, UPD_SIZ, UPD_LOC) ra_ent(str_blnk, 'W'+$80, $FF, NVR_BNK, NVR_IMGLOC, NVR_LOC, NVR_SIZ, NVR_LOC) +ra_ent(str_blnk, 'D'+$80, $FF, DEV_BNK, DEV_IMGLOC, DEV_LOC, DEV_SIZ, DEV_LOC) ra_ent(str_blnk, 'S'+$80, $FF, SLC_BNK, SLC_IMGLOC, SLC_LOC, SLC_SIZ, SLC_LOC) ra_ent(str_user, 'U', $FF, USR_BNK, USR_IMGLOC, USR_LOC, USR_SIZ, USR_LOC) #endif diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index 6d1ee813..d4e5d98c 100644 --- a/Source/HBIOS/util.asm +++ b/Source/HBIOS/util.asm @@ -54,20 +54,20 @@ PC_GT: LD A,'>' JR PC_PRTCHR -PC_LPAREN: - PUSH AF - LD A,'(' - JR PC_PRTCHR - -PC_RPAREN: - PUSH AF - LD A,')' - JR PC_PRTCHR - -PC_ASTERISK: - PUSH AF - LD A,'*' - JR PC_PRTCHR +;PC_LPAREN: +; PUSH AF +; LD A,'(' +; JR PC_PRTCHR +; +;PC_RPAREN: +; PUSH AF +; LD A,')' +; JR PC_PRTCHR +; +;PC_ASTERISK: +; PUSH AF +; LD A,'*' +; JR PC_PRTCHR PC_CR: PUSH AF @@ -383,12 +383,12 @@ PRTIDXCNT: ; ; ; -TSTPT: - PUSH DE - LD DE,STR_TSTPT - CALL WRITESTR - POP DE - JR REGDMP ; DUMP REGISTERS AND RETURN +;TSTPT: +; PUSH DE +; LD DE,STR_TSTPT +; CALL WRITESTR +; POP DE +; JR REGDMP ; DUMP REGISTERS AND RETURN ; ; ; @@ -479,7 +479,7 @@ RD_STACK .EQU $ ; ; STR_HALT .TEXT "\r\n\r\n*** System Halted ***$" -STR_TSTPT .TEXT "\r\n+++ TSTPT: $" +;STR_TSTPT .TEXT "\r\n+++ TSTPT: $" ;STR_AF .DB " AF=$" ;STR_BC .DB " BC=$" ;STR_DE .DB " DE=$" @@ -684,7 +684,7 @@ DLY16: CALL DLY8 ; 432 400 DLY8: CALL DLY4 ; 216 200 DLY4: CALL DLY2 ; 108 100 DLY2: CALL DLY1 ; 54 50 -DLY1: +DLY1: #IF (CPUFAM == CPU_EZ80) NOP NOP @@ -1107,14 +1107,14 @@ ADD32: INC DE RET ; -DEC32: - LD BC,1 -SUB32: - OR A - SBC HL,BC - RET NC - DEC DE - RET +;DEC32: +; LD BC,1 +;SUB32: +; OR A +; SBC HL,BC +; RET NC +; DEC DE +; RET ; ; INC32 (HL) ; INCREMENT 32 BIT BINARY AT ADDRESS