Browse Source

Various Cleanup

pull/23/head
Wayne Warthen 7 years ago
parent
commit
d7f68775ce
  1. BIN
      Doc/Contrib/DSKY.pdf
  2. 6
      Doc/Contrib/ZSystem.txt
  3. 198
      Source/HBIOS/dbgmon.asm
  4. 15
      Source/HBIOS/hbios.asm
  5. 12
      Source/HBIOS/ppide.asm
  6. 37
      Source/HBIOS/romldr.asm
  7. 1
      Source/HBIOS/sd.asm
  8. 1
      Source/HBIOS/util.asm

BIN
Doc/Contrib/DSKY.pdf

Binary file not shown.

6
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."

198
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 <PORT> <VALUE>
; 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 <PORT>
; 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 <BS>, TERM ON <CR>
; READ A LINE OF TEXT FROM THE SERIAL PORT, HANDLE <BS>, TERM ON <CR>
; 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 <CR>?
JR Z,GETLNDONE ; YES, EXIT
CALL COUT ; OUTPUT KEY TO SCREEN
CP CHR_BS ; IS <BS>?
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
;

15
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)

12
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

37
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

1
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

1
Source/HBIOS/util.asm

@ -4,6 +4,7 @@
;==================================================================================================
;
;
CHR_BEL .EQU 07H
CHR_CR .EQU 0DH
CHR_LF .EQU 0AH
CHR_BS .EQU 08H

Loading…
Cancel
Save