diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 80b6f996..59f52ea2 100644 --- a/Doc/ChangeLog.txt +++ b/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 ----------- diff --git a/Source/Apps/ramtest/dbgmon.asm b/Source/Apps/ramtest/dbgmon.asm index 393fafd5..82a2f1a2 100644 --- a/Source/Apps/ramtest/dbgmon.asm +++ b/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 " diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index 9bae4ef8..42e80252 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/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 diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 4c768208..ff3e73f3 100644 --- a/Source/HBIOS/hbios.asm +++ b/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 diff --git a/Source/ver.inc b/Source/ver.inc index edf1acf5..cee8491e 100644 --- a/Source/ver.inc +++ b/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" diff --git a/Source/ver.lib b/Source/ver.lib index ab473ecc..50b919b9 100644 --- a/Source/ver.lib +++ b/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