diff --git a/Source/Apps/ramtest/dbgmon.asm b/Source/Apps/ramtest/dbgmon.asm index b83fa42e..82a2f1a2 100644 --- a/Source/Apps/ramtest/dbgmon.asm +++ b/Source/Apps/ramtest/dbgmon.asm @@ -924,7 +924,7 @@ DATABUSCHECK: 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 MEMSIZELOOP ; CONTINUE WITH REST OF RAM TEST + JP ADDRBUSCHECK ; CONTINUE WITH ADDRESS BUS TEST DATABUSFAIL: PUSH AF ; STORE FAILED VALUE @@ -936,6 +936,45 @@ DATABUSFAIL: 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 @@ -1177,6 +1216,16 @@ TXT_DATA_BUS_PASS: .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 "