diff --git a/Doc/Contrib/DSKY.pdf b/Doc/Contrib/DSKY.pdf new file mode 100644 index 00000000..fbb38e08 Binary files /dev/null and b/Doc/Contrib/DSKY.pdf differ diff --git a/Doc/Contrib/ZSystem.txt b/Doc/Contrib/ZSystem.txt index 9e9f4b2d..c3315fad 100644 --- a/Doc/Contrib/ZSystem.txt +++ b/Doc/Contrib/ZSystem.txt @@ -1,3 +1,9 @@ +ZSDOS Adaptation Notes for RomWBW +--------------------------------- + +Wayne Warthen +wwarthen@gmail.com + This file is a log of the work done to adapt the ZSDOS distribution to the N8VEM platforms under RomWBW. I strongly recommend reviewing the zsdos.pdf file in the Doc directory. The starting point was the general public release of ZSDOS that is generally available. The first line of the README file is "ZSDOS-GP. General Public Release of the ZSDOS 1.x Operating System." diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index 2dd8820a..5cb20df0 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -7,18 +7,20 @@ ;__REFERENCES_________________________________________________________________ ; THOMAS SCHERRER BASIC HAR.DWARE TEST ASSEMBLER SOURCES FROM THE Z80 INFO PAGE ; INCLUDING ORIGINAL SCHEMATIC CONCEPT -; HTTP://Z80 INFO/Z80SOURC.TXT +; HTTP://Z80.INFO/Z80SOURC.TXT ; CODE SAMPLES FROM BRUCE JONES PUBLIC DOMAIN ROM MONITOR FOR THE SBC-200C -; HTTP://WWW RETROTECHNOLOGY.COM/HERBS_STUFF/SD_BRUCE_CODE.ZIP +; HTTP://WWW.RETROTECHNOLOGY.COM/HERBS_STUFF/SD_BRUCE_CODE.ZIP ; INSPIRATION FROM JOEL OWENS "Z-80 SPACE-TIME PRODUCTIONS SINGLE BOARD COMPUTER" -; HTTP://WWW JOELOWENS.ORG/Z80/Z80INDEX.HTML +; HTTP://WWW.JOELOWENS.ORG/Z80/Z80INDEX.HTML ; GREAT HELP AND TECHNICAL ADVICE FROM ALLISON AT ALPACA_DESIGNERS -; HTTP://GROUPS YAHOO.COM/GROUP/ALPACA_DESIGNERS +; HTTP://GROUPS.YAHOO.COM/GROUP/ALPACA_DESIGNERS ; INTEL SDK-85 ROM DEBUG MONITOR ;_____________________________________________________________________________ ; #INCLUDE "std.asm" ; +BUFLEN .EQU 40 ; INPUT LINE LENGTH +; ;__MAIN_PROGRAM_______________________________________________________________ ; ; ORG 00100h ; FOR DEBUG IN CP/M (AS .COM) @@ -43,7 +45,7 @@ UART_ENTRY: CALL INITIALIZE ; INITIALIZE SYSTEM LD HL,TXT_READY ; POINT AT TEXT - CALL PRTSTR ; SHOW WE'RE HERE + CALL PRTSTRH ; SHOW WE'RE HERE ; ;__SERIAL_MONITOR_COMMANDS____________________________________________________ ; @@ -63,14 +65,16 @@ UART_ENTRY: ; PROMPT USER FOR COMMANDS, THEN PARSE THEM ;_____________________________________________________________________________ ; - SERIALCMDLOOP: LD SP,MON_STACK ; RESET STACK - LD HL,PROMPT ; + LD HL,TXT_PROMPT ; CALL PRTSTR ; LD HL,KEYBUF ; SET POINTER TO KEYBUF AREA CALL GETLN ; GET A LINE OF INPUT FROM THE USER LD HL,KEYBUF ; RESET POINTER TO START OF KEYBUF + LD A,C ; GET LINE LENGTH ENTERED + OR A ; ZERO? + JR Z,SERIALCMDLOOP ; NOTHING ENTERED, LOOP LD A,(HL) ; LOAD FIRST CHAR INTO A (THIS SHOULD BE THE COMMAND) INC HL ; INC POINTER @@ -97,7 +101,7 @@ SERIALCMDLOOP: CP 'H' ; IS IT A "H" (Y/N) JP Z,HELP ; HELP COMMAND LD HL,TXT_COMMAND ; POINT AT ERROR TEXT - CALL PRTSTR ; PRINT COMMAND LABEL + CALL PRTSTRH ; PRINT COMMAND LABEL JR SERIALCMDLOOP ; @@ -291,7 +295,7 @@ HXLOADEXIT: ; SYNTAX: O ; NOTE: A WORD VALUE IS USED FOR THE PORT NUMBER BECAUSE THE ; Z80 WILL ACTUALLY PLACE 16 BITS ON THE BUS USING -; THE B AND C REGISTERS IN AN "OUT (C),A" +; THE B AND C REGISTERS WITH AN "OUT (C),A" INSTRUCTION ;_____________________________________________________________________________ ; POUT: @@ -310,7 +314,7 @@ POUT: ; SYNTAX: I ; NOTE: A WORD VALUE IS USED FOR THE PORT NUMBER BECAUSE THE ; Z80 WILL ACTUALLY PLACE 16 BITS ON THE BUS USING -; THE B AND C REGISTERS IN AN "INC A,(C)" +; THE B AND C REGISTERS WITH AN "IN A,(C)" INSTRUCTION ;_____________________________________________________________________________ ; PIN: @@ -486,7 +490,7 @@ HELP: ; ERR: LD HL,TXT_ERR ; POINT AT ERROR TEXT - CALL PRTSTR ; DISPLAY IT + CALL PRTSTRH ; DISPLAY IT JP SERIALCMDLOOP ; AND BACK TO COMMAND LOOP ; ;__BYTEPARM___________________________________________________________________ @@ -520,39 +524,52 @@ WORDPARM: ; ;__GETLN______________________________________________________________________ ; -; READ A LINE(80) OF TEXT FROM THE SERIAL PORT, HANDLE , TERM ON +; READ A LINE OF TEXT FROM THE SERIAL PORT, HANDLE , TERM ON ; EXIT IF TOO MANY CHARS STORE RESULT IN HL. CHAR COUNT IN C. ;_____________________________________________________________________________ ; GETLN: - LD C,00H ; ZERO CHAR COUNTER - PUSH DE ; STORE DE + LD C,0 ; ZERO CHAR COUNTER + PUSH DE ; SAVE DE GETLNLOP: + ; ENTRY LOOP CALL KIN ; GET A KEY CP CHR_CR ; IS ? JR Z,GETLNDONE ; YES, EXIT - CALL COUT ; OUTPUT KEY TO SCREEN CP CHR_BS ; IS ? - JR NZ,GETLNSTORE ; NO, STORE CHAR - LD A,C ; A=C - CP 0 ; - JR Z,GETLNLOP ; NOTHING TO BACKSPACE, IGNORE & GET NEXT KEY - DEC HL ; PERFORM BACKSPACE - DEC C ; LOWER CHAR COUNTER - LD A,0 ; - LD (HL),A ; STORE NULL IN BUFFER - LD A,20H ; BLANK OUT CHAR ON TERM - CALL COUT ; - LD A,CHR_BS ; - CALL COUT ; - JR GETLNLOP ; GET NEXT KEY -GETLNSTORE: + JR Z,GETLNBS ; IF SO, HANDLE IT + CP ' ' ; UNEXPECTED CONTROL CHAR? + JR C,GETLNLOP ; IF SO, IGNORE IT AND GET NEXT + LD B,A ; SAVE CHAR IN B FOR NOW + LD A,C ; GET COUNTER + CP BUFLEN - 1 ; MAX OF BUFLEN CHARS LESS SPACE FOR TERM NULL + JR Z,GETLNOVF ; IF AT MAX, HANDLE OVERFLOW + LD A,B ; GET INPUT CHAR BACK + CALL COUT ; OUTPUT KEY TO SCREEN LD (HL),A ; STORE CHAR IN BUFFER INC HL ; INC POINTER INC C ; INC CHAR COUNTER + JR GETLNLOP ; GET NEXT CHAR +GETLNOVF: + ; OVERFLOW + LD A,CHR_BEL ; BELL CHARACTER + CALL COUT ; SEND IT TO CONSOLE + JR GETLNLOP ; LOOP +GETLNBS: + ; BACKSPACE LD A,C ; A=C - CP 4DH ; OUT OF BUFFER SPACE? - JR NZ,GETLNLOP ; NOPE, GET NEXT CHAR + OR A ; ZERO? + JR Z,GETLNLOP ; IF EMPTY LINE, IGNORE BS & LOOP + DEC HL ; BACKUP BUF PTR 1 CHAR + DEC C ; DECREMENT CHAR COUNTER + LD A,CHR_BS ; BACKSPACE + CALL COUT ; TO CONSOLE + LD A,20H ; BLANK OUT CHAR ON TERM + CALL COUT ; TO CONSOLE + LD A,CHR_BS ; BACKSPACE + CALL COUT ; TO CONSOLE + JR GETLNLOP ; GET NEXT KEY + ; DONE GETLNDONE: LD (HL),00H ; STORE NULL IN BUFFER POP DE ; RESTORE DE @@ -708,7 +725,17 @@ PHL: CALL PRTHEXBYTE ; DISPLAY IT LD A,L ; GET LOW BYTE CALL PRTHEXBYTE ; DISPLAY IT - RET ; DONE + RET ; DONE +; +;__PRTSTRH____________________________________________________________________ +; +; PRINT STRING AT HL W/ MINI HELP SUFFIX +;_____________________________________________________________________________ +; +PRTSTRH: + CALL PRTSTR + LD HL,TXT_MINIHELP + JP PRTSTR ; #IF (PLATFORM == PLT_UNA) ; @@ -859,57 +886,32 @@ CST: ; RESERVED RAM FOR MONITOR WORKING AREA ;_____________________________________________________________________________ ; -KEYBUF: .FILL 80,' ' +KEYBUF: .FILL BUFLEN,0 ; ;__TEXT_STRINGS_______________________________________________________________ ; ; SYSTEM TEXT STRINGS ;_____________________________________________________________________________ ; -TCRLF: - .DB CHR_CR,CHR_LF,'$' - -PROMPT: - .DB CHR_CR,CHR_LF,'>','$' - -TXT_READY: - .DB CHR_CR,CHR_LF - .TEXT "MONITOR READY ('H' FOR HELP)" - .DB '$' - -TXT_COMMAND: - .DB CHR_CR,CHR_LF - .TEXT "UNKNOWN COMMAND ('H' FOR HELP)" - .DB '$' - -TXT_ERR: - .DB CHR_CR,CHR_LF - .TEXT "SYNTAX ERROR ('H' FOR HELP)" - .DB '$' - -TXT_CKSUMERR: - .DB CHR_CR,CHR_LF - .TEXT "CHECKSUM ERROR" - .DB '$' - -TXT_BADNUM: - .TEXT " *INVALID VALUE*" - .DB '$' - -TXT_HELP: - .DB CHR_CR,CHR_LF - .TEXT "MONITOR COMMANDS (ALL VALUES IN HEX):\r\n" - .TEXT "B - BOOT SYSTEM\r\n" - .TEXT "D XXXX YYYY - DUMP MEMORY FROM XXXX TO YYYY\r\n" - .TEXT "F XXXX YYYY ZZ - FILL MEMORY FROM XXXX TO YYYY WITH ZZ\r\n" - .TEXT "I XX - SHOW VALUE AT PORT XX\r\n" - .TEXT "K - ECHO KEYBOARD INPUT\r\n" - .TEXT "L - LOAD INTEL HEX FORMAT DATA\r\n" - .TEXT "M XXXX YYYY ZZZZ - MOVE MEMORY BLOCK XXXX-YYYY TO ZZZZ\r\n" - .TEXT "O XX YY - WRITE VALUE YY TO PORT XX\r\n" - .TEXT "P XXXX - PROGRAM RAM STARTING AT XXXX\r\n" - .TEXT "R XXXX - RUN A PROGRAM AT ADDRESS XXXX" - .DB '$' +TXT_PROMPT .TEXT "\r\n>$" +TXT_READY .TEXT "\r\nMonitor Ready$" +TXT_COMMAND .TEXT "\r\nUnknown Command$" +TXT_ERR .TEXT "\r\nSyntax Error$" +TXT_CKSUMERR .TEXT "\r\nChecksum Error$" +TXT_BADNUM .TEXT " *Invalid Hex Byte Value*$" +TXT_MINIHELP .TEXT " (H for Help)$" +TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):" + .TEXT "\r\nB - Boot system" + .TEXT "\r\nD xxxx yyyy - Dump memory from xxxx to yyyy" + .TEXT "\r\nF xxxx yyyy zz - Fill memory from xxxx to yyyy with zz" + .TEXT "\r\nI xx - Input from port xx" + .TEXT "\r\nK - Keyboard echo" + .TEXT "\r\nL - Load Intel hex data" + .TEXT "\r\nM xxxx yyyy zzzz - Move memory block xxxx-yyyy to zzzz" + .TEXT "\r\nO xx yy - Output to port xx value yy" + .TEXT "\r\nP xxxx - Program RAM at xxxx" + .TEXT "\r\nR xxxx - Run code at xxxx" + .TEXT "$" ; #IF DSKYENABLE ; @@ -942,11 +944,12 @@ DSKY_ENTRY: ;_____________________________________________________________________________ ; FRONTPANELLOOP: - LD HL,CPUUP ; SET POINTER TO DATA BUFFER - CALL DSKY_SHOWSEG ; DISPLAY + LD HL,CPUUP ; SET POINTER TO CPU UP MSG + CALL DSKY_SHOWSEG ; DISPLAY UNENCODED CALL KB_GET ; GET KEY FROM KB +FRONTPANELLOOP1: CP KY_PR ; IS PORT READ? JP Z,DOPORTREAD ; YES, JUMP CP KY_PW ; IS PORT WRITE? @@ -970,7 +973,9 @@ EXIT: ;_____________________________________________________________________________ ; DOBOOT: - JP BOOT + LD HL,MSGBOOT ; SET POINTER TO BOOT MESSAGE + CALL DSKY_SHOWSEG ; DISPLAY UNENCODED + JP BOOT ; DO BOOT ; ;__DOPORTREAD_________________________________________________________________ ; @@ -992,10 +997,6 @@ PORTREADLOOP: CALL ENCDISPLAY ; DISPLAY BUFFER CONTENTS PORTREADGETKEY: CALL KB_GET ; GET KEY FROM KB - CP KY_CL ; [CL] PRESSED, EXIT - JR Z,FRONTPANELLOOP ; - CP KY_PR ; [PR] PRESSED, PROMPT FOR NEW PORT - JR Z,DOPORTREAD ; JR PORTREADGETKEY ; NO VALID KEY, LOOP ; ;__DOPORTWRITE________________________________________________________________ @@ -1019,10 +1020,6 @@ PORTWRITELOOP: CALL ENCDISPLAY ; DISPLAY BUFFER CONTENTS PORTWRITEGETKEY: CALL KB_GET ; GET KEY FROM KB - CP KY_CL ; [CL] PRESSED, EXIT - JR Z,FRONTPANELLOOP ; - CP KY_PW ; [PW] PRESSED, PROMPT FOR NEW PORT - JR Z,DOPORTWRITE ; JR PORTWRITEGETKEY ; NO VALID KEY, LOOP ; ;__DOGO_______________________________________________________________________ @@ -1069,12 +1066,8 @@ EXAMINELOOP: CALL ENCDISPLAY ; DISPLAY BUFFER ON DISPLAYS EXAMINEGETKEY: CALL KB_GET ; GET KEY FROM KB - CP KY_CL ; [CL] PRESSED, EXIT - JP Z,FRONTPANELLOOP ; CP KY_EN ; [EN] PRESSED, INC ADDRESS AND LOOP JR Z,EXAMINEFW ; - CP KY_EX ; [EX] PRESSED, PROMPT FOR NEW ADDRESS - JR Z,DOEXAMINE ; JR EXAMINEGETKEY ; NO VALID KEY, LOOP EXAMINEFW: INC HL ; HL++ @@ -1106,12 +1099,8 @@ DEPOSITLOOP: CALL ENCDISPLAY ; DISPLAY BUFFER CONTENTS DEPOSITGETKEY: CALL KB_GET ; GET KEY FROM KB - CP KY_CL ; [CL] PRESSED, EXIT - JP Z,FRONTPANELLOOP ; CP KY_EN ; [EN] PRESSED, INC ADDRESS AND LOOP JR Z,DEPOSITFW ; - CP KY_DE ; [DE] PRESSED, PROMPT FOR NEW ADDRESS - JR Z,DODEPOSIT ; JR DEPOSITGETKEY ; NO VALID KEY, LOOP DEPOSITFW: INC HL ; @@ -1150,8 +1139,6 @@ GETVALWLOOP: JP M,GETVALWNUM ; NUMBER PRESSED, STORE IT CP KY_EN ; [EN] PRESSED, DONE JR Z,GETVALWDONE ; - CP KY_CL ; CLEAR PRESSED, CLEAR - JR Z,GETVALW ; JR GETVALWLOOP ; INVALID KEY, LOOP GETVALWNUM: OR $80 ; SET DP @@ -1221,8 +1208,6 @@ GETVALUELOOP: JP M,GETVALUENUM ; NUMBER PRESSED, STORE IT CP KY_EN ; [EN] PRESSED, DONE JR Z,GETVALUEDONE ; - CP KY_CL ; CLEAR PRESSED, CLEAR - JR Z,GETVALUE ; JR GETVALUELOOP ; INVALID KEY, LOOP GETVALUENUM: OR $80 ; SET DP @@ -1278,6 +1263,14 @@ KB_GET: PUSH DE PUSH HL ; SAVE HL CALL DSKY_GETKEY ; GET A KEY + CP KY_EN ; ENTER? + JR Z,KB_GET1 ; IF YES, RET TO CALLER + CP $10 ; HEX DIGIT? + JR C,KB_GET1 ; IF YES, RET TO CALLER + ; NOT A DIGIT OR [EN], BAIL OUT TO MAIN LOOP TO HANDLE IT + LD SP,MON_STACK ; CLEAR STACK + JP FRONTPANELLOOP1 ; RESTART AT MAIN LOOP +KB_GET1: POP HL ; RESTORE HL POP DE POP BC @@ -1343,7 +1336,8 @@ ENCBUF1: POP HL ; RESTORE HL RET ; -CPUUP .DB $84,$CB,$EE,$BB,$80,$BB,$EE,$84 ; "-CPU UP-" (RAW) +CPUUP .DB $84,$CB,$EE,$BB,$80,$BB,$EE,$84 ; "-CPU UP-" (RAW SEG) +MSGBOOT .DB $FF,$9D,$9D,$8F,$20,$80,$80,$80 ; "Boot! " (RAW SEG) ADDR .DB $17,$18,$19,$10,$00,$00,$00,$00 ; "Adr 0000" (ENCODED) PORT .DB $13,$14,$15,$16,$10,$10,$00,$00 ; "Port 00" (ENCODED) GOTO .DB $1A,$14,$10,$10,$00,$00,$00,$00 ; "Go 0000" (ENCODED) @@ -1364,7 +1358,7 @@ SEGDECODE: ; ; POS $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A ; GLYPH ' ' '-' '.' 'P' 'o' 'r' 't' 'A' 'd' 'r' 'G' - .DB $00, $04, $00, $6E, $1D, $0C, $14, $7E, $3D, $0C, $5B + .DB $00, $04, $00, $6E, $1D, $0C, $0F, $7E, $3D, $0C, $5B ; DISPLAYBUF: .FILL 8,0 ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 704b60e3..75acf220 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -817,6 +817,11 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK ; DIAG(%00001111) ; +#IF (DSKYENABLE) + LD HL,MSG_HBVER + CALL DSKY_SHOWSEG +#ENDIF +; ; PERFORM DYNAMIC CPU SPEED DERIVATION ; CALL HB_CPUSPD ; CPU SPEED DETECTION @@ -989,6 +994,12 @@ PSCNX .EQU $ + 1 LD HL,(CB_CPUKHZ) CALL PRTD3M ; PRINT AS DECIMAL WITH 3 DIGIT MANTISSA PRTS("MHz$") +#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4) | (PLATFORM == PLT_RC180)) + CALL PC_COMMA + PRTS(" IO=0x$") + LD A,Z180_BASE + CALL PRTHEXBYTE +#ENDIF ; ; DISPLAY CPU CONFIG ; @@ -3265,6 +3276,10 @@ STR_PLATFORM .DB PLATFORM_NAME, "$" STR_SWITCH .DB "*** Activating CRT Console ***$" STR_BADINT .DB "\r\n*** BAD INT ***\r\n$" ; +#IF (DSKYENABLE) +MSG_HBVER .DB $BE,$FF,$8A,$FB,$D7,$6D,$77,$B0 ; "HBIOS291" +#ENDIF +; HB_CURSEC .DB 0 ; CURRENT SECOND (TEMP) ; HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP) diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index 394d8bde..e6bcb560 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -1395,16 +1395,20 @@ PPIDE_PRTPREFIX: #IF (DSKYENABLE) PPIDE_DSKY: LD HL,DSKY_HEXBUF ; POINT TO DSKY BUFFER - IN A,(PPIDE_REG_DRVHD) ; GET DRIVE/HEAD + CALL PPIDE_IN + .DB PPIDE_REG_DRVHD LD (HL),A ; SAVE IN BUFFER INC HL ; INCREMENT BUFFER POINTER - IN A,(PPIDE_REG_CYLHI) ; GET DRIVE/HEAD + CALL PPIDE_IN + .DB PPIDE_REG_CYLHI LD (HL),A ; SAVE IN BUFFER INC HL ; INCREMENT BUFFER POINTER - IN A,(PPIDE_REG_CYLLO) ; GET DRIVE/HEAD + CALL PPIDE_IN + .DB PPIDE_REG_CYLLO LD (HL),A ; SAVE IN BUFFER INC HL ; INCREMENT BUFFER POINTER - IN A,(PPIDE_REG_SECT) ; GET DRIVE/HEAD + CALL PPIDE_IN + .DB PPIDE_REG_SECT LD (HL),A ; SAVE IN BUFFER CALL DSKY_HEXOUT ; SEND IT TO DSKY RET diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 338dd755..58302bad 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -154,7 +154,7 @@ MENU: ; #IF (DSKYENABLE) ; DISPLAY DSKY BOOT MESSAGE - LD HL,BOOT ; POINT TO BOOT MESSAGE + LD HL,MSG_SEL ; POINT TO BOOT MESSAGE CALL DSKY_SHOWSEG ; DISPLAY MESSAGE #ENDIF ; @@ -353,6 +353,10 @@ MENU_N .EQU ((MENU_E - MENU_S) / MENU_V) ; NUMBER OF MENU ITEMS ; REBOOT: LD DE,STR_REBOOT ; POINT TO MESSAGE CALL WRITESTR ; PRINT IT +#IF (DSKYENABLE) + LD HL,MSG_BOOT ; POINT TO BOOT MESSAGE + CALL DSKY_SHOWSEG ; DISPLAY MESSAGE +#ENDIF LD A,BID_BOOT ; BOOT BANK LD HL,0 ; ADDRESS ZERO CALL HB_BNKCALL ; DOES NOT RETURN @@ -370,6 +374,10 @@ REBOOT: LD DE,STR_REBOOT ; POINT TO MESSAGE GOROM: PUSH DE ; SAVE ROM TABLE ENTRY EXEC ADR PTR LD DE,STR_BOOTROM ; ROM LOADING MSG PREFIX CALL WRITESTR ; PRINT IT +#IF (DSKYENABLE) + LD HL,MSG_LOAD ; POINT TO LOAD MESSAGE + CALL DSKY_SHOWSEG ; DISPLAY MESSAGE +#ENDIF POP HL ; EXEC ADR TO HL PUSH HL ; AND RESAVE IT LD A,10 ; OFFSET TO IMAGE DESC @@ -391,7 +399,8 @@ GOROM1: LD E,(HL) ; (1) EXEC ADR ; ; NOTE: UNA HAS NO INTERBANK MEMORY COPY, SO WE CAN ONLY LOAD ; IMAGES FROM THE CURRENT BANK. A SIMPLE LDIR IS USED TO -; RELOCATE THE IMAGES +; RELOCATE THE IMAGES. AT SOME POINT AN UNA INTERBANK COPY +; SHOULD BE IMPLEMENTED HERE. ; ; COPY IMAGE TO IT'S RUNNING LOCATION POP HL ; POP AND DISCARD BANKS @@ -444,6 +453,11 @@ GOROM2: LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY LD L,A ; ... AND SAVE AS BOOT BANK LD DE,$0100 ; BOOT VOLUME (UNIT, SLICE) RST 08 +; +#IF (DSKYENABLE) + LD HL,MSG_GO ; POINT TO BOOT MESSAGE + CALL DSKY_SHOWSEG ; DISPLAY MESSAGE +#ENDIF ; ; LAUNCH IMAGE W/ USER BANK ACTIVE CALL NEWLINE2 @@ -464,6 +478,10 @@ GOBOOTDISK: CALL WRITESTR CALL PRTHEXBYTE PRTS("...$") +#IF (DSKYENABLE) + LD HL,MSG_LOAD ; POINT TO LOAD MESSAGE + CALL DSKY_SHOWSEG ; DISPLAY MESSAGE +#ENDIF ; LD DE,STR_BOOTDISK1 ; DISK BOOT MESSAGE CALL WRITESTR ; PRINT IT @@ -627,6 +645,11 @@ GOBOOTDISK: LD E,A ; SAVE IN E RST 08 JP NZ,DB_ERR ; HANDLE ERRORS +; +#IF (DSKYENABLE) + LD HL,MSG_GO ; POINT TO BOOT MESSAGE + CALL DSKY_SHOWSEG ; DISPLAY MESSAGE +#ENDIF ; ; JUMP TO COLD BOOT ENTRY LD A,BID_USR ; ACTIVATE USER BANK @@ -826,7 +849,7 @@ DEV15 .EQU DEVUNK ;================================================================================================== ; STR_BANNER .DB "\r\n\r\n", PLATFORM_NAME, " Boot Loader$" -STR_BOOTSEL .DB "\r\n\r\nBoot? $" +STR_BOOTSEL .DB "\r\n\r\nBoot Selection? $" STR_BOOTDISK .DB "\r\n\r\nBooting Disk Unit $" STR_BOOTROM .DB "\r\n\r\nLoading $" STR_REBOOT .DB "\r\n\r\nRestarting System...$" @@ -838,9 +861,13 @@ STR_BOOTDISK1 .DB "\r\n\r\nReading disk information...$" STR_LOADING .DB "\r\n\r\nLoading...$" ; #IF (DSKYENABLE) - ; b o o t . . -BOOT .DB $9F,$9D,$9D,$94,$80,$80,$00,$00 +MSG_SEL .DB $FF,$9D,$9D,$8F,$EC,$80,$80,$80 ; "Boot? " +MSG_BOOT .DB $FF,$9D,$9D,$8F,$00,$00,$00,$80 ; "Boot... " +MSG_LOAD .DB $8B,$9D,$FD,$BD,$00,$00,$00,$80 ; "Load... " +MSG_GO .DB $DB,$9D,$00,$00,$00,$80,$80,$80 ; "Go... " #ENDIF + + ; ;================================================================================================== ; INCLUDES diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index b76f6b3a..122afc28 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -377,6 +377,7 @@ SD_INITUNIT RET NZ ; ABORT ON ERROR ; CALL SD_PRTPREFIX + CALL PC_SPACE ; ; PRINT CARD TYPE LD A,(IY+SD_TYPE) ; GET CARD TYPE VALUE TO A diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index 92dbe9f1..0b3448d1 100644 --- a/Source/HBIOS/util.asm +++ b/Source/HBIOS/util.asm @@ -4,6 +4,7 @@ ;================================================================================================== ; ; +CHR_BEL .EQU 07H CHR_CR .EQU 0DH CHR_LF .EQU 0AH CHR_BS .EQU 08H