; ************************* ; * * ; * IO TO RAM TEST. * ; * * ; ************************* ; ORG 0100H JMP START ; BASE DB 0 ;SPECIAL EQU'S AND RESERVED MEMORY ERRORS DB 0 SIZE DW 515 SBADR DW 0000 ENABLE DB 0 ;THIS FLAG > 0 WILL DISABLE ERROR CHECK CCC DB 0 DDD DB 0 INCH DB 0 BYPASS EQU 18 ;ARBITRARY PATTERN TO BYPASS. THIS IS TO ; INSURE TEST FAIL WHEN HIGH BYTE OF ; SECT.BUFF ADDR. IS STRAPPED. ; BCXTR DW 0000 ;MEMORY RESERVED FOR TEMPORARY REGISTER STORAGE DEXTR DW 0000 HLXTR DW 0000 AFXTR DW 0000 CH DB 00 ;STORAGE FOR CHAR RETURNED IN A FROM BIOS CALLS ; BIOS EQU 0005H ;STANDARD EQU ASSIGNMENTS CR EQU 13 LF EQU 10 BELL EQU 7 TAB EQU 9 X EQU '$' BREAK EQU 27 ;CONTROL-C X0 EQU 90H ; ; PROMPT MESSAGES M0 DB BELL,LF,CR,TAB,'KONAN IO TO SECTOR BUFFER TEST',LF,CR DB TAB,'RELEASE 1, REVISION 1 - 12/27/79',LF,LF,CR DB TAB,'ANY KEY WILL BEGIN OPERATION,',LF,CR DB TAB,'BUT CONTROL-P WILL DISABLE ERROR PRINTING ',LF,CR DB TAB,'AN ESCAPE WILL END TEST AT ANY TIME.',LF,LF,CR,X M1 DB 'PASS ',X M2 DB CR,LF,X ; ; ERROR MESSAGES E1 DB BELL,LF,CR,'DRIVE SELECT ERROR',LF,CR,X E2 DB BELL,LF,CR,'SEEK ERROR',LF,CR,X E3 DB ' ( I/O ERROR: ADDRESS,WRITTEN,READ )',LF,CR,X ; ; CONSOLE ROUTINES: FUNC CALL SHOVE CALL BIOS STA CH CALL GRAB RET CHIN MVI C,1 ;INPUT CHAR FROM KEYB. & RETURN IT IN A CALL FUNC LDA CH RET CHOUT CALL SHOVE MVI C,2 ;PRINT CHAR IN E ON THE TUBE JMP FUNC MESSG CALL SHOVE MVI C,9 ;PRINT STRING WHOSE ADDR IS IN D/E ON TUBE JMP FUNC CHSTAT MVI C,11 CALL BIOS STA CH RET ; ; (DISK ROUTINES WOULD GO HERE IF NEEDED) ; ; SPECIAL ROUTINES: SHOVE SHLD HLXTR XCHG SHLD DEXTR PUSH B POP H SHLD BCXTR PUSH PSW POP H SHLD AFXTR GRAB LHLD AFXTR PUSH H POP PSW LHLD BCXTR PUSH H POP B LHLD DEXTR XCHG LHLD HLXTR RET ; HEX PUSH A ;OUTPUT A AS ASCII-HEX NUMBER ANI 0F0H RRC RRC RRC RRC CALL H1 POP A ANI 00FH H1 CPI 10 JM H2 ADI 7 H2 ADI 48 MOV E,A CALL CHOUT RET ; CONTC CALL CHSTAT LDA CH ORA A RZ CALL CHIN CPI BREAK JZ 0000 RET ; ; ; ; START LXI D,M0 ;SIGN ON MESSAGE CALL MESSG XRA A STA ENABLE CALL CHIN CPI 16 JNZ AGAIN STA ENABLE ; AGAIN LXI H,BASE INR M OUT X0+7 ;WRITING SEC.BUFFER LXI H,0000 SHLD SBADR ;ZEROING THE SEC.BUF.ADDR.COUNTER LHLD SIZE LDA BASE MOV B,A NEXTW MOV A,B OUT X0+4 INR B MOV A,B ;THIS AND NEXT 3 LINES ARE NEW CPI BYPASS JNZ KEEPW INR B KEEPW DCX H MOV A,H ORA L JNZ NEXTW CALL CONTC OUT X0+7 ;READING WHAT WAS WRITTEN ABOVE LHLD SIZE LDA BASE MOV D,A NEXTR IN X0+4 STA INCH MOV A,D STA DDD LDA ENABLE ORA A JNZ FASTOK LDA INCH CMP D ;CHECKING TO SEE IF READ & WRITE CORRESPOND JZ ROK MVI A,3 PUSH H CALL ERROR POP H ROK LDA DDD CPI BYPASS-1 ;THIS AND NEXT 2 LINES ARE NEW JNZ KEEPR INR A KEEPR MOV D,A INR D PUSH H ;INCREMENTING THE SECT.BUFF.ADDR.COUNTER LHLD SBADR INX H SHLD SBADR POP H FASTOK DCX H MOV A,H ORA L JNZ NEXTR CALL CONTC LDA ENABLE ORA A JNZ AGAIN PASS LXI D,M1 ;PASS MESSAGE CALL MESSG CALL CONTC JMP AGAIN ; ERROR NOP ;WHATEVER CPI 1 JNZ EGT1 LXI D,E1 JMP ERMESS RET EGT1 CPI 2 JNZ EGT2 LXI D,E2 JMP ERMESS RET EGT2 CPI 3 JNZ EGT3 MOV C,A MVI E,CR CALL CHOUT LHLD SBADR MOV A,H CALL HEX LHLD SBADR MOV A,L CALL HEX MVI E,',' CALL CHOUT LDA DDD CALL HEX MVI E,',' CALL CHOUT LDA INCH CALL HEX LXI D,E3 JMP ERMESS EGT3 JMP 0000 ERMESS CALL MESSG CALL CONTC RET