Add Bank Selection to Debug Monitor

- The debug monitor will not display the current bank id in the prompt
- The debug monitor has a new command to set the current bank for the lower 32K
NOTE: Bank selection is not possible when running under interrupt mode 1.  The command will be rejected with an error.
This commit is contained in:
Wayne Warthen
2021-07-19 13:44:44 -07:00
parent 4df77e3fac
commit e4f638a17a
6 changed files with 78 additions and 48 deletions

View File

@@ -43,6 +43,7 @@ Version 3.1.1
- W?S: Updated FLASH software to v1.3.5 (supports 128KB A29010B, 512KB A29040B) - W?S: Updated FLASH software to v1.3.5 (supports 128KB A29010B, 512KB A29040B)
- DDW: Support for DSKYng capabitlities - DDW: Support for DSKYng capabitlities
- WBW: Added Phil Summers' ROM Updater into ROM Loader - WBW: Added Phil Summers' ROM Updater into ROM Loader
- AJL: Added ramtest app (requires SBC and MBC for now)
Version 3.1 Version 3.1
----------- -----------

View File

@@ -927,10 +927,10 @@ DATABUSCHECK:
JP MEMSIZELOOP ; CONTINUE WITH REST OF RAM TEST JP MEMSIZELOOP ; CONTINUE WITH REST OF RAM TEST
DATABUSFAIL: DATABUSFAIL:
PUSH A ; STORE FAILED VALUE PUSH AF ; STORE FAILED VALUE
LD HL,TXT_DATA_BUS_FAIL ; POINT AT DATA BUS FAIL TEXT LD HL,TXT_DATA_BUS_FAIL ; POINT AT DATA BUS FAIL TEXT
CALL MSG ; PRINT DATA BUS FAIL LABEL CALL MSG ; PRINT DATA BUS FAIL LABEL
POP A ; RETRIEVE FAILED VALUE POP AF ; RETRIEVE FAILED VALUE
CALL HXOUT ; SHOW VALUE THAT FAILED CALL HXOUT ; SHOW VALUE THAT FAILED
LD HL,TCRLF ; CR & LF LD HL,TCRLF ; CR & LF
CALL MSG ; DISPLAY IT CALL MSG ; DISPLAY IT

View File

@@ -53,16 +53,19 @@ UART_ENTRY:
; ;
;__SERIAL_MONITOR_COMMANDS____________________________________________________ ;__SERIAL_MONITOR_COMMANDS____________________________________________________
; ;
; B - BOOT SYSTEM ; B - BOOT SYSTEM
; D XXXX YYYY - DUMP MEMORY FROM XXXX TO YYYY ; D XXXX YYYY - DUMP MEMORY IN RANGE XXXX-YYYY
; F XXXX YYYY ZZ - FILL MEMORY FROM XXXX TO YYYY WITH ZZ ; F XXXX YYYY ZZ - FILL MEMORY IN RANGE XXXX-YYYY WITH ZZ
; I XX - SHOW VALUE AT PORT XX ; H - HALT SYSTEM
; K - ECHO KEYBOARD INPUT ; I XXXX - SHOW VALUE AT PORT XXXX
; L - LOAD INTEL HEX FORMAT DATA ; K - ECHO KEYBOARD INPUT
; M XXXX YYYY ZZZZ - MOVE MEMORY BLOCK XXXX-YYYY TO ZZZZ ; L - LOAD INTEL HEX FORMAT DATA
; O XX YY - WRITE VALUE YY TO PORT XX ; M XXXX YYYY ZZZZ - MOVE MEMORY BLOCK XXXX-YYYY TO ZZZZ
; P XXXX - PROGRAM RAM STARTING AT XXXX, PROMPT FOR VALUES ; O XXXX YY - OUTPUT VALUE YY TO PORT XX
; R XXXX - RUN A PROGRAM AT ADDRESS XXXX ; P XXXX - PROGRAM RAM STARTING AT XXXX, PROMPT FOR VALUES
; R XXXX - RUN A PROGRAM AT ADDRESS XXXX
; S XX - SET ACTIVE BANK TO XX
; X - EXIT MONITOR
; ;
;__COMMAND_PARSE______________________________________________________________ ;__COMMAND_PARSE______________________________________________________________
; ;
@@ -71,8 +74,14 @@ UART_ENTRY:
; ;
SERIALCMDLOOP: SERIALCMDLOOP:
LD SP,MON_STACK ; RESET STACK LD SP,MON_STACK ; RESET STACK
LD HL,TXT_PROMPT ; CALL NEWLINE
CALL PRTSTR ; #IF (BIOS == BIOS_WBW)
LD A,($FFE0)
CALL PRTHEXBYTE
#ENDIF
LD A,'>'
CALL COUT
LD HL,KEYBUF ; SET POINTER TO KEYBUF AREA LD HL,KEYBUF ; SET POINTER TO KEYBUF AREA
CALL GETLN ; GET A LINE OF INPUT FROM THE USER CALL GETLN ; GET A LINE OF INPUT FROM THE USER
LD HL,KEYBUF ; RESET POINTER TO START OF KEYBUF LD HL,KEYBUF ; RESET POINTER TO START OF KEYBUF
@@ -102,10 +111,14 @@ SERIALCMDLOOP:
JP Z,MOVEMEM ; MOVE MEMORY COMMAND JP Z,MOVEMEM ; MOVE MEMORY COMMAND
CP 'F' ; IS IT A "F" (Y/N) CP 'F' ; IS IT A "F" (Y/N)
JP Z,FILLMEM ; FILL MEMORY COMMAND JP Z,FILLMEM ; FILL MEMORY COMMAND
CP 'H' ; IS IT A "H" (Y/N) CP '?' ; IS IT A "?" (Y/N)
JP Z,HELP ; HELP COMMAND JP Z,HELP ; HELP COMMAND
CP 'S' ; IS IT A "H" (Y/N) CP 'H' ; IS IT A "H" (Y/N)
JP Z,STOP ; STOP COMMAND JP Z,HALT ; HALT COMMAND
#IF (BIOS == BIOS_WBW)
CP 'S' ; IS IT A "S" (Y/N)
JP Z,SETBNK ; SET BANK COMMAND
#ENDIF
CP 'X' ; IS IT A "X" (Y/N) CP 'X' ; IS IT A "X" (Y/N)
JP Z,EXIT ; EXIT COMMAND JP Z,EXIT ; EXIT COMMAND
LD HL,TXT_COMMAND ; POINT AT ERROR TEXT LD HL,TXT_COMMAND ; POINT AT ERROR TEXT
@@ -135,7 +148,7 @@ INITIALIZE:
#IF DSKYENABLE #IF DSKYENABLE
LD B,BF_SYSGET ; HBIOS FUNC=GET SYS INFO LD B,BF_SYSGET ; HBIOS FUNC=GET SYS INFO
LD C,BF_SYSGET_CPUINFO ; HBIOS SUBFUNC=GET CPU INFO LD C,BF_SYSGET_CPUINFO ; HBIOS SUBFUNC=GET CPU INFO
RST 08 ; CALL HBIOS CALL $FFF0 ; CALL HBIOS
LD A,L ; PUT SPEED IN MHZ IN ACCUM LD A,L ; PUT SPEED IN MHZ IN ACCUM
CALL DELAY_INIT CALL DELAY_INIT
#ENDIF #ENDIF
@@ -176,15 +189,37 @@ EXIT:
CALL $FFF0 ; CALL HBIOS CALL $FFF0 ; CALL HBIOS
#ENDIF #ENDIF
; ;
;__STOP_______________________________________________________________________ ;__HALT_______________________________________________________________________
; ;
; PERFORM STOP ACTION (HALT SYSTEM) ; PERFORM HALT ACTION
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
STOP: HALT:
DI DI
HALT HALT
; ;
;__SETBNK_____________________________________________________________________
;
; PERFORM SET BANK ACTION
;_____________________________________________________________________________
;
#IF (BIOS == BIOS_WBW)
;
SETBNK:
#IF (INTMODE == 1)
LD HL,TXT_IMERR
CALL PRTSTR
#ELSE
CALL BYTEPARM ; GET BANK NUMBER
JP C,ERR ; HANDLE DATA ENTRY ERROR
LD C,A ; PUT IN C FOR FOR FUNC CALL
LD B,BF_SYSSETBNK ; SET BANK FUNCTION
CALL $FFF0 ; C HAS BANK, DO IT
#ENDIF
JP SERIALCMDLOOP ; NEXT COMMAND
;
#ENDIF
;
;__RUN________________________________________________________________________ ;__RUN________________________________________________________________________
; ;
; TRANSFER OUT OF MONITOR, USER OPTION "R" ; TRANSFER OUT OF MONITOR, USER OPTION "R"
@@ -788,7 +823,7 @@ COUT:
; OUTPUT CHARACTER TO CONSOLE VIA UBIOS ; OUTPUT CHARACTER TO CONSOLE VIA UBIOS
LD E,A LD E,A
LD BC,$12 LD BC,$12
RST 08 CALL $FFFD
; ;
; RESTORE ALL REGISTERS ; RESTORE ALL REGISTERS
POP HL POP HL
@@ -810,7 +845,7 @@ CIN:
; ;
; INPUT CHARACTER FROM CONSOLE VIA UBIOS ; INPUT CHARACTER FROM CONSOLE VIA UBIOS
LD BC,$11 LD BC,$11
RST 08 CALL $FFFD
LD A,E LD A,E
; ;
; RESTORE REGISTERS (AF IS OUTPUT) ; RESTORE REGISTERS (AF IS OUTPUT)
@@ -832,7 +867,7 @@ CST:
; ;
; GET CONSOLE INPUT STATUS VIA UBIOS ; GET CONSOLE INPUT STATUS VIA UBIOS
LD BC,$13 LD BC,$13
RST 08 CALL $FFFD
LD A,E LD A,E
; ;
; RESTORE REGISTERS (AF IS OUTPUT) ; RESTORE REGISTERS (AF IS OUTPUT)
@@ -859,7 +894,7 @@ COUT:
LD E,A ; OUTPUT CHAR TO E LD E,A ; OUTPUT CHAR TO E
LD C,CIO_CONSOLE ; CONSOLE UNIT TO C LD C,CIO_CONSOLE ; CONSOLE UNIT TO C
LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR
RST 08 ; HBIOS OUTPUTS CHARACTER CALL $FFF0 ; HBIOS OUTPUTS CHARACTER
; ;
; RESTORE ALL REGISTERS ; RESTORE ALL REGISTERS
POP HL POP HL
@@ -882,7 +917,7 @@ CIN:
; INPUT CHARACTER FROM CONSOLE VIA HBIOS ; INPUT CHARACTER FROM CONSOLE VIA HBIOS
LD C,CIO_CONSOLE ; CONSOLE UNIT TO C LD C,CIO_CONSOLE ; CONSOLE UNIT TO C
LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR
RST 08 ; HBIOS READS CHARACTER CALL $FFF0 ; HBIOS READS CHARACTER
LD A,E ; MOVE CHARACTER TO A FOR RETURN LD A,E ; MOVE CHARACTER TO A FOR RETURN
; ;
; RESTORE REGISTERS (AF IS OUTPUT) ; RESTORE REGISTERS (AF IS OUTPUT)
@@ -905,7 +940,7 @@ CST:
; GET CONSOLE INPUT STATUS VIA HBIOS ; GET CONSOLE INPUT STATUS VIA HBIOS
LD C,CIO_CONSOLE ; CONSOLE UNIT TO C LD C,CIO_CONSOLE ; CONSOLE UNIT TO C
LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS
RST 08 ; HBIOS RETURNS STATUS IN A CALL $FFF0 ; HBIOS RETURNS STATUS IN A
; ;
; RESTORE REGISTERS (AF IS OUTPUT) ; RESTORE REGISTERS (AF IS OUTPUT)
POP HL POP HL
@@ -927,27 +962,29 @@ KEYBUF: .FILL BUFLEN,0
; SYSTEM TEXT STRINGS ; SYSTEM TEXT STRINGS
;_____________________________________________________________________________ ;_____________________________________________________________________________
; ;
TXT_PROMPT .TEXT "\r\n>$" ;TXT_PROMPT .TEXT "\r\n>$"
TXT_READY .TEXT "\r\n\r\nMonitor Ready$" TXT_READY .TEXT "\r\n\r\nMonitor Ready$"
TXT_COMMAND .TEXT "\r\nUnknown Command$" TXT_COMMAND .TEXT "\r\nUnknown Command$"
TXT_ERR .TEXT "\r\nSyntax Error$" TXT_ERR .TEXT "\r\nSyntax Error$"
TXT_IMERR .TEXT "\r\nCommand not available under interrupt mode 1$"
TXT_CKSUMERR .TEXT "\r\nChecksum Error$" TXT_CKSUMERR .TEXT "\r\nChecksum Error$"
TXT_RECORDERR .TEXT "\r\nRecord Type Error$" TXT_RECORDERR .TEXT "\r\nRecord Type Error$"
TXT_LOADED .TEXT "\r\nLoaded$" TXT_LOADED .TEXT "\r\nLoaded$"
TXT_BADNUM .TEXT " *Invalid Hex Byte Value*$" TXT_BADNUM .TEXT " *Invalid Hex Byte Value*$"
TXT_MINIHELP .TEXT " (H for Help)$" TXT_MINIHELP .TEXT " (? for Help)$"
TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):" TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):"
.TEXT "\r\nB - Boot system" .TEXT "\r\nB - Boot system"
.TEXT "\r\nD xxxx yyyy - Dump memory from xxxx to yyyy" .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\nF xxxx yyyy zz - Fill memory from xxxx to yyyy with zz"
.TEXT "\r\nI xx - Input from port xx" .TEXT "\r\nH - Halt system"
.TEXT "\r\nI xxxx - Input from port xxxx"
.TEXT "\r\nK - Keyboard echo" .TEXT "\r\nK - Keyboard echo"
.TEXT "\r\nL - Load Intel hex data" .TEXT "\r\nL - Load Intel hex data"
.TEXT "\r\nM xxxx yyyy zzzz - Move memory block xxxx-yyyy to zzzz" .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\nO xxxx yy - Output value yy to port xxxx"
.TEXT "\r\nP xxxx - Program RAM at xxxx" .TEXT "\r\nP xxxx - Program RAM at address xxxx"
.TEXT "\r\nR xxxx - Run code at xxxx" .TEXT "\r\nR xxxx - Run code at address xxxx"
.TEXT "\r\nS - Stop system (HALT)" .TEXT "\r\nS xx - Set bank to xx"
.TEXT "\r\nX - Exit monitor" .TEXT "\r\nX - Exit monitor"
.TEXT "$" .TEXT "$"
; ;
@@ -1530,13 +1567,5 @@ MON_STACK .EQU $
.ECHO "DBGMON space remaining: " .ECHO "DBGMON space remaining: "
.ECHO SLACK .ECHO SLACK
.ECHO " bytes.\n" .ECHO " bytes.\n"
;;;
;;; DBGMON CURRENTLY OCCUPIES $F000 TO START OF HBX PROXY BECAUSE THE
;;; HBIOS PROXY OCCUPIES THE TOP OF COMMON RAM. HOWEVER THE DBGMON
;;; IMAGE MUST OCCUPY A FULL $1000 BYTES IN THE ROM.
;;; BELOW WE JUST PAD OUT THE IMAGE SO IT
;;; OCCUPIES THE FULL $1000 BYTES IN ROM.
;;;
;; .FILL HBX_SIZ ; PAD FOR HBX SIZE
; ;
.END .END

View File

@@ -3133,10 +3133,10 @@ SYS_RESINT:
; RESET THE HEAP ; RESET THE HEAP
LD HL,(HEAPCURB) ; GET HBIOS HEAP THRESHOLD LD HL,(HEAPCURB) ; GET HBIOS HEAP THRESHOLD
LD (CB_HEAPTOP),HL ; RESTORE HEAP TOP LD (CB_HEAPTOP),HL ; RESTORE HEAP TOP
; ;;
; MAKE SURE THE PROPER RESET VECTOR IS AT ADDRESS $0000 ; ; MAKE SURE THE PROPER RESET VECTOR IS AT ADDRESS $0000
LD HL,$0040 ; USER RESET CODE STUB ; LD HL,$0040 ; USER RESET CODE STUB
LD ($0001),HL ; OPERAND OF JP AT $0000 ; LD ($0001),HL ; OPERAND OF JP AT $0000
; ;
XOR A XOR A
RET RET

View File

@@ -2,4 +2,4 @@
#DEFINE RMN 1 #DEFINE RMN 1
#DEFINE RUP 1 #DEFINE RUP 1
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.93" #DEFINE BIOSVER "3.1.1-pre.94"

View File

@@ -3,5 +3,5 @@ rmn equ 1
rup equ 1 rup equ 1
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.1.1-pre.93" db "3.1.1-pre.94"
endm endm