Browse Source

Merge pull request #195 from wwarthen/dev

Dev
pull/218/head
b1ackmai1er 5 years ago
committed by GitHub
parent
commit
2e570b368c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      Doc/ChangeLog.txt
  2. 87
      Source/Apps/ramtest/dbgmon.asm
  3. 109
      Source/HBIOS/dbgmon.asm
  4. 8
      Source/HBIOS/hbios.asm
  5. 2
      Source/ver.inc
  6. 2
      Source/ver.lib

1
Doc/ChangeLog.txt

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

87
Source/Apps/ramtest/dbgmon.asm

@ -908,6 +908,73 @@ FILL_MEM:
DORAMTEST:
; VERIFY DATA BUS FUNCTIONALITY BEFORE STARTING MEMORY TEST
LD A,$80 ; FIRST 32KB PAGE ONLY
LD (PAGE_NUM),A ; STORE WORKING PAGE NUMBER
OUT (MPCL_ROM),A ; SWITCH OUT LOWER 32KB ROM PAGE
OUT (MPCL_RAM),A ; SWITCH IN LOWER 32KB RAM PAGE
LD A,$00 ; INITIALIZE A TO 0
DATABUSCHECK:
LD ($0000),A ; WRITE TO LOWEST RAM ADDRESS
LD C,($0000) ; READ VALUE FROM LOWEST RAM ADDRESS
CP C ; IS IT SAME AS WRITTEN?
JP NZ,DATABUSFAIL ; NO? DATA BUS FAIL HANDLER ROUTINE
INC A ; YES, GET NEXT VALUE
JP NZ,DATABUSCHECK ; REPEAT FOR ALL 256 VALUES
LD HL,TXT_DATA_BUS_PASS ; POINT AT DATA BUS PASS TEXT
CALL MSG ; PRINT DATA BUS PASS LABEL
JP ADDRBUSCHECK ; CONTINUE WITH ADDRESS BUS TEST
DATABUSFAIL:
PUSH AF ; STORE FAILED VALUE
LD HL,TXT_DATA_BUS_FAIL ; POINT AT DATA BUS FAIL TEXT
CALL MSG ; PRINT DATA BUS FAIL LABEL
POP AF ; RETRIEVE FAILED VALUE
CALL HXOUT ; SHOW VALUE THAT FAILED
LD HL,TCRLF ; CR & LF
CALL MSG ; DISPLAY IT
JP SERIALCMDLOOP ; AND BACK TO COMMAND LOOP
; VERIFY ADDRESS BUS FUNCTIONALITY BEFORE STARTING MEMORY TEST
LD A,$80 ; FIRST 32KB PAGE ONLY
LD (PAGE_NUM),A ; STORE WORKING PAGE NUMBER
OUT (MPCL_ROM),A ; SWITCH OUT LOWER 32KB ROM PAGE
OUT (MPCL_RAM),A ; SWITCH IN LOWER 32KB RAM PAGE
LD A,$00 ; INITIALIZE A TO 0
LD ($0000),A ; WRITE TO LOWEST RAM ADDRESS
LD HL,$0001 ; INITIALIZE HL TO CHECK A0
ADDRBUSCHECK:
LD (HL),$FF ; WRITE ALL ONES INTO HL ADDRESS
LD C,($0000) ; READ VALUE FROM LOWEST RAM ADDRESS
CP C ; IS IT SAME AS WRITTEN? SHOULD BE 0
JP NZ,ADDRBUSFAIL ; NO? ADDR BUS FAIL HANDLER ROUTINE
PUSH HL ; STORE HL, FOR COPY TO BC
POP BC ; RETRIEVE BC (SAME AS HL)
ADD HL,BC ; INCREMENT TO NEXT ADDR LINE
LD A,H ; WHICH ADDRESS LINE ARE WE AT
CP $80 ; ARE WE AT A15?
JP NZ,ADDRBUSCHECK ; NO? REPEAT FOR ALL 15 VALUES
LD HL,TXT_ADDR_BUS_PASS ; YES? POINT AT ADDR BUS PASS TEXT
CALL MSG ; PRINT ADDR BUS PASS LABEL
JP MEMSIZELOOP ; CONTINUE WITH REST OF RAM TEST
ADDRBUSFAIL:
PUSH HL ; STORE FAILED ADDR LINE VALUE
LD HL,TXT_ADDR_BUS_FAIL ; POINT AT ADDR BUS FAIL TEXT
CALL MSG ; PRINT ADDR BUS FAIL LABEL
POP HL ; RETRIEVE FAILED ADDR LINE VALUE
LD A,H ; PRINT UPPER HALF OF ADDRESS
PUSH HL ; STORE FAILED ADDR LINE VALUE
CALL HXOUT ; PRINT HIGH ADDR HALF THAT FAILED
POP LH ; RETRIEVE FAILED ADDR LINE VALUE
LD A,L ; PRINT LOWER HALF OF ADDRESS
CALL HXOUT ; PRINT LOW ADDR HALF THAT FAILED
LD HL,TCRLF ; CR & LF
CALL MSG ; DISPLAY IT
JP SERIALCMDLOOP ; AND BACK TO COMMAND LOOP
MEMSIZELOOP:
LD HL,TXT_RAM_TEST_MAIN ; POINT AT RAM TEST MAIN MENU TEXT
CALL MSG ; PRINT MENU TEXT LABEL
@ -1139,6 +1206,26 @@ TXT_RAM_FAIL:
.DB "RAM FAIL, 32KB PAGE NUMBER: "
.DB CR,LF,ENDT
TXT_DATA_BUS_FAIL:
.DB CR,LF
.DB "DATA BUS FAIL, VALUE ="
.DB ENDT
TXT_DATA_BUS_PASS:
.DB CR,LF
.DB "DATA BUS PASS "
.DB CR,LF,ENDT
TXT_ADDR_BUS_FAIL:
.DB CR,LF
.DB "ADDR BUS FAIL, VALUE ="
.DB ENDT
TXT_ADDR_BUS_PASS:
.DB CR,LF
.DB "ADDR BUS PASS "
.DB CR,LF,ENDT
TXT_SKIP_16:
.DB CR,LF
.DB "SKIPPING PAGE 0F "

109
Source/HBIOS/dbgmon.asm

@ -53,16 +53,19 @@ UART_ENTRY:
;
;__SERIAL_MONITOR_COMMANDS____________________________________________________
;
; B - BOOT SYSTEM
; D XXXX YYYY - DUMP MEMORY FROM XXXX TO YYYY
; F XXXX YYYY ZZ - FILL MEMORY FROM XXXX TO YYYY WITH ZZ
; I XX - SHOW VALUE AT PORT XX
; K - ECHO KEYBOARD INPUT
; L - LOAD INTEL HEX FORMAT DATA
; M XXXX YYYY ZZZZ - MOVE MEMORY BLOCK XXXX-YYYY TO ZZZZ
; O XX YY - WRITE VALUE YY TO PORT XX
; P XXXX - PROGRAM RAM STARTING AT XXXX, PROMPT FOR VALUES
; R XXXX - RUN A PROGRAM AT ADDRESS XXXX
; B - BOOT SYSTEM
; D XXXX YYYY - DUMP MEMORY IN RANGE XXXX-YYYY
; F XXXX YYYY ZZ - FILL MEMORY IN RANGE XXXX-YYYY WITH ZZ
; H - HALT SYSTEM
; I XXXX - SHOW VALUE AT PORT XXXX
; K - ECHO KEYBOARD INPUT
; L - LOAD INTEL HEX FORMAT DATA
; M XXXX YYYY ZZZZ - MOVE MEMORY BLOCK XXXX-YYYY TO ZZZZ
; O XXXX YY - OUTPUT VALUE YY TO PORT XX
; 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______________________________________________________________
;
@ -71,8 +74,14 @@ UART_ENTRY:
;
SERIALCMDLOOP:
LD SP,MON_STACK ; RESET STACK
LD HL,TXT_PROMPT ;
CALL PRTSTR ;
CALL NEWLINE
#IF (BIOS == BIOS_WBW)
LD A,($FFE0)
CALL PRTHEXBYTE
#ENDIF
LD A,'>'
CALL COUT
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
@ -102,10 +111,14 @@ SERIALCMDLOOP:
JP Z,MOVEMEM ; MOVE MEMORY COMMAND
CP 'F' ; IS IT A "F" (Y/N)
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
CP 'S' ; IS IT A "H" (Y/N)
JP Z,STOP ; STOP COMMAND
CP 'H' ; IS IT A "H" (Y/N)
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)
JP Z,EXIT ; EXIT COMMAND
LD HL,TXT_COMMAND ; POINT AT ERROR TEXT
@ -135,7 +148,7 @@ INITIALIZE:
#IF DSKYENABLE
LD B,BF_SYSGET ; HBIOS FUNC=GET SYS 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
CALL DELAY_INIT
#ENDIF
@ -176,15 +189,37 @@ EXIT:
CALL $FFF0 ; CALL HBIOS
#ENDIF
;
;__STOP_______________________________________________________________________
;__HALT_______________________________________________________________________
;
; PERFORM STOP ACTION (HALT SYSTEM)
; PERFORM HALT ACTION
;_____________________________________________________________________________
;
STOP:
HALT:
DI
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________________________________________________________________________
;
; TRANSFER OUT OF MONITOR, USER OPTION "R"
@ -788,7 +823,7 @@ COUT:
; OUTPUT CHARACTER TO CONSOLE VIA UBIOS
LD E,A
LD BC,$12
RST 08
CALL $FFFD
;
; RESTORE ALL REGISTERS
POP HL
@ -810,7 +845,7 @@ CIN:
;
; INPUT CHARACTER FROM CONSOLE VIA UBIOS
LD BC,$11
RST 08
CALL $FFFD
LD A,E
;
; RESTORE REGISTERS (AF IS OUTPUT)
@ -832,7 +867,7 @@ CST:
;
; GET CONSOLE INPUT STATUS VIA UBIOS
LD BC,$13
RST 08
CALL $FFFD
LD A,E
;
; RESTORE REGISTERS (AF IS OUTPUT)
@ -859,7 +894,7 @@ COUT:
LD E,A ; OUTPUT CHAR TO E
LD C,CIO_CONSOLE ; CONSOLE UNIT TO C
LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR
RST 08 ; HBIOS OUTPUTS CHARACTER
CALL $FFF0 ; HBIOS OUTPUTS CHARACTER
;
; RESTORE ALL REGISTERS
POP HL
@ -882,7 +917,7 @@ CIN:
; INPUT CHARACTER FROM CONSOLE VIA HBIOS
LD C,CIO_CONSOLE ; CONSOLE UNIT TO C
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
;
; RESTORE REGISTERS (AF IS OUTPUT)
@ -905,7 +940,7 @@ CST:
; GET CONSOLE INPUT STATUS VIA HBIOS
LD C,CIO_CONSOLE ; CONSOLE UNIT TO C
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)
POP HL
@ -927,27 +962,29 @@ KEYBUF: .FILL BUFLEN,0
; SYSTEM TEXT STRINGS
;_____________________________________________________________________________
;
TXT_PROMPT .TEXT "\r\n>$"
;TXT_PROMPT .TEXT "\r\n>$"
TXT_READY .TEXT "\r\n\r\nMonitor Ready$"
TXT_COMMAND .TEXT "\r\nUnknown Command$"
TXT_ERR .TEXT "\r\nSyntax Error$"
TXT_IMERR .TEXT "\r\nCommand not available under interrupt mode 1$"
TXT_CKSUMERR .TEXT "\r\nChecksum Error$"
TXT_RECORDERR .TEXT "\r\nRecord Type Error$"
TXT_LOADED .TEXT "\r\nLoaded$"
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):"
.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\nH - Halt system"
.TEXT "\r\nI xxxx - Input from port xxxx"
.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 "\r\nS - Stop system (HALT)"
.TEXT "\r\nO xxxx yy - Output value yy to port xxxx"
.TEXT "\r\nP xxxx - Program RAM at address xxxx"
.TEXT "\r\nR xxxx - Run code at address xxxx"
.TEXT "\r\nS xx - Set bank to xx"
.TEXT "\r\nX - Exit monitor"
.TEXT "$"
;
@ -1530,13 +1567,5 @@ MON_STACK .EQU $
.ECHO "DBGMON space remaining: "
.ECHO SLACK
.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

8
Source/HBIOS/hbios.asm

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

2
Source/ver.inc

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

2
Source/ver.lib

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

Loading…
Cancel
Save