;******************************** ; ; MEMTST - memory diagnostic ; ;******************************** ;3.0 17-Jul-84 DFP version 3 created by D. Pallmann. ;3.1 19-Jul-84 DFP correct bug in addr/comp tests. ;3.2 19-Jul-84 DFP add option 0 (all tests). VMAJOR=3 VMINOR=2 SEARCH SYS SEARCH SYSSYM ADR=A4 MEM=A5 INDEX=D3 READ=D4 WRITE=D5 .OFINI .OFDEF START,4 .OFDEF COUNT,4 .OFDEF ERRCNT,4 .OFDEF LOGFIL,D.DDB .OFSIZ MEMSIZ DEFINE CNE ADDR BEQ 1$$ CALL ADDR 1$$: ENDM ;******************** ; ; Initialization ; ;******************** MEMTST: PHDR -2,0,PH$REE!PH$REU ;program header GETIMP MEMSIZ,MEM ;allocate local memory CRLF CRLF TYPECR ********************** TYPECR LMS TECHNICAL SERVICES TYPESP MEMORY DIAGNOSTIC VCVT MEMTST+2,OT$TRM CRLF TYPECR ********************** ;********************************************* ; ; Check for log-file spec on command line ; ;********************************************* CHKLOG: CLR LOGFIL+D.FIL(MEM) BYP LIN BEQ GETADR FSPEC LOGFIL(MEM),LOG INIT LOGFIL(MEM) LOOKUP LOGFIL(MEM) BNE 10$ DSKDEL LOGFIL(MEM) 10$: OPENO LOGFIL(MEM) ;*************************************** ; ; Get Starting and Ending Addresses ; ;*************************************** GETADR: CRLF USRFRE D0 MOV D0,START(MEM) USREND D1 SUB D0,D1 MOV D1,COUNT(MEM) TYPESP Starting address (RETURN for own partition): KBD EXIT BYP NUM BNE SETUP MOV A2,A3 GTOCT CMPB @A2,#'K ;nnnK BNE 10$ MOV A3,A2 GTDEC MUL D1,#1024. BR 20$ 10$: CMPB @A2,#'M ;nnnMB BNE 20$ MOV A2,A2 GTDEC MUL D1,#1024. MUL D1,#1024. 20$: MOV D1,START(MEM) ENDADR: TYPESP Ending address: KBD EXIT BYP NUM JNE GETADR MOV A2,A3 GTOCT CMPB @A2,#'K ;nnnK BNE 10$ MOV A3,A2 GTDEC MUL D1,#1024. BR 20$ 10$: CMPB @A2,#'M ;nnnMB BNE 20$ MOV A3,A2 GTDEC MUL D1,#1024. MUL D1,#1024. 20$: MOV START(MEM),D0 SUB D0,D1 MOV D1,COUNT(MEM) SETUP: CRLF TYPESP Ready to test addresses MOV START(MEM),D1 OCVT 0,OT$TRM!OT$TSP TYPESP through MOV COUNT(MEM),D0 ADD D0,D1 OCVT 0,OT$TRM!OT$TSP TYPE ( MOV COUNT(MEM),D1 DCVT 0,OT$TRM!OT$TSP TYPECR bytes). ;***************** ; ; Select Test ; ;***************** SELECT: JOBIDX A0 ANDW #^C,JOBSTS(A0) ;clear ^C CRLF TYPECR <0. All tests> TYPECR <1. Zeroes test> TYPECR <2. Ones test> TYPECR <3. Address test> TYPECR <4. Complement test> TYPECR <5. Walking 0-bit left test> TYPECR <6. Walking 0-bit right test> TYPECR <7. Walking 1-bit left test> TYPECR <8. Walking 1-bit right test> TYPECR <9. Exit> CRLF TYPESP Test > KBD CRLF CTRLC DONE NUM JNE SELECT GTDEC CMP D1,#0 JLT SELECT CMP D1,#9. JEQ DONE JGT SELECT BRANCH: ADD D1,D1 MOVW JMPTBL[~D1],D1 CALL JMPTBL[~D1] JMP SELECT JMPTBL: WORD TEST0-JMPTBL WORD TEST1-JMPTBL WORD TEST2-JMPTBL WORD TEST3-JMPTBL WORD TEST4-JMPTBL WORD TEST5-JMPTBL WORD TEST6-JMPTBL WORD TEST7-JMPTBL WORD TEST8-JMPTBL DONE: MOV ERRCNT(MEM),D1 DCVT 0,OT$TRM!OT$TSP TYPECR errors detected. LSTLOG: TST LOGFIL+D.FIL(MEM) BEQ EXIT TST ERRCNT(MEM) BEQ EXIT TYPESP Errors logged in PFILE LOGFIL(MEM) TYPECR . EXIT: CRLF TST LOGFIL+D.FIL(MEM) BEQ 10$ CLOSE LOGFIL(MEM) 10$: EXIT PAGE ;*********************** ; ; TEST0 - all tests ; ;*********************** TEST0: TYPECR 1. zeroes test CALL TEST1 CTRLC 10$ TYPECR 2. ones test CALL TEST2 CTRLC 10$ TYPECR 3. address test CALL TEST3 CTRLC 10$ TYPECR 4. complement test CALL TEST4 CTRLC 10$ TYPECR 5. walking 0 bit left test CALL TEST5 CTRLC 10$ TYPECR 6. walking 0 bit right test CALL TEST6 CTRLC 10$ TYPECR 7. walking 1 bit left test CALL TEST7 CTRLC 10$ TYPECR 8. walking 1 bit right test CALL TEST8 10$: RTN PAGE ;************************* ; ; TEST1 - zeroes test ; ;************************* TEST1: CALL INIT CLR WRITE 10$: CTRLC 30$ MOVB WRITE,(ADR)+ SOB INDEX,10$ CALL INIT 20$: CTRLC 30$ MOVB (ADR)+,READ CNE ERROR SOB INDEX,20$ 30$: RTN ;*********************** ; ; TEST2 - ones test ; ;*********************** TEST2: CALL INIT SET WRITE 10$: CTRLC 30$ MOVB WRITE,(ADR)+ SOB INDEX,10$ CALL INIT 20$: CTRLC 30$ MOVB (ADR)+,READ CMPB READ,WRITE CNE ERROR SOB INDEX,20$ 30$: RTN ;************************** ; ; TEST3 - address test ; ;*************************( TEST3: CALL INIT 10$: CTRLC 30$ MOV ADR,WRITE MOVB WRITE,(ADR)+ SOB INDEX,10$ CALL INIT 20$: CTRLC 30$ MOV ADR,WRITE MOVB (ADR)+,READ CMPB READ,WRITE CNE ERROR SOB INDEX,20$ 30$: RTN ;***************************** ; ; TEST4 - complement test ; ;***************************** TEST4: CALL INIT 10$: CTRLC 30$ MOV ADR,WRITE COM WRITE MOVB WRITE,(ADR)+ SOB INDEX,10$ CALL INIT 20$: CTRLC 30$ MOV ADR,WRITE COM WRITE MOVB (ADR)+,READ CMPB READ,WRITE CNE ERROR SOB INDEX,20$ 30$: RTN ;************************************* ; ; TEST5 - walking 0 bit left test ; ;************************************* TEST5: CALL INIT 10$: LEA A0,TBL.0L MOV #8.,D0 20$: CTRLC 30$ MOVB @A0,WRITE MOVB WRITE,@ADR MOVB (ADR)+,READ CMPB READ,WRITE CNE ERROR INC A0 DEC ADR SOB D0,20$ INC ADR SOB INDEX,10$ 30$: RTN TBL.0L: BYTE ^C<1_0>,^C<1_1>,^C<1_2>,^C<1_3> BYTE ^C<1_4>,^C<1_5>,^C<1_6>,^C<1_7> ;************************************** ; ; TEST6 - walking 0 bit right test ; ;*************************************( TEST6: CALL INIT 10$: LEA A0,TBL.0R MOV #8.,D0 20$: CTRLC 30$ MOVB @A0,WRITE MOVB WRITE,@ADR MOVB (ADR)+,READ CMPB READ,WRITE CNE ERROR INC A0 DEC ADR SOB D0,20$ INC ADR SOB INDEX,10$ 30$: RTN TBL.0R: BYTE ^C<1_7>,^C<1_6>,^C<1_5>,^C<1_4> BYTE ^C<1_3>,^C<1_2>,^C<1_1>,^C<1_0> ;************************************* ; ; TEST7 - walking 1 bit left test ; ;************************************* TEST7: CALL INIT 10$: LEA A0,TBL.1L MOV #8.,D0 20$: CTRLC 30$ MOVB @A0,WRITE MOVB WRITE,@ADR MOVB (ADR)+,READ CMPB READ,WRITE CNE ERROR INC A0 DEC ADR SOB D0,20$ INC ADR SOB INDEX,10$ 30$: RTN TBL.1L: BYTE 1_0,1_1,1_2,1_3,1_4,1_5,1_6,1_7 ;************************************** ; ; TEST8 - walking 1 bit right test ; ;************************************** TEST8: CALL INIT 10$: LEA A0,TBL.1R MOV #8.,D0 20$: CTRLC 30$ MOVB @A0,WRITE MOVB WRITE,@ADR MOVB (ADR)+,READ CMPB READ,WRITE CNE ERROR INC A0 DEC ADR SOB D0,20$ INC ADR SOB INDEX,10$ 30$: RTN TBL.1R: BYTE 1_7,1_6,1_5,1_4,1_3,1_2,1_1,1_0 ;*********** ; ; ERROR ; ;*********** ERROR: SAVE A0,D1 TST ERRCNT(MEM) BNE 10$ MOV #7,D1 TTY 10$: AND #377,READ AND #377,WRITE TYPESP *** ERROR AT ADDRESS MOV ADR,D1 DEC D1 OCVT 0,OT$TRM TYPE <, WROTE > MOV WRITE,D1 CALL BINARY TYPE <, READ > MOV READ,D1 CALL BINARY CRLF INC ERRCNT(MEM) ERRLOG: TST LOGFIL+D.FIL(MEM) BEQ 10$ LEA A0,ERRTXT CALL PUTSTR MOV ADR,D1 DEC D1 CALL PUTOCT LEA A0,ERRTX2 CALL PUTSTR MOV WRITE,D1 CALL PUTBIN LEA A0,ERRTX3 CALL PUTSTR MOV READ,D1 CALL PUTBIN LEA A0,ERRTX4 CALL PUTSTR 10$: REST A0,D1 RTN PUTSTR: SAVE A0,D1 10$: MOVB (A0)+,D1 BEQ 20$ FILOTB LOGFIL(MEM) BR 10$ 20$: REST A0,A1 RTN PUTBIN: SAVE D0-D2 MOV #8.,D0 MOV D1,D2 10$: ASLB D2,#1 BLO 20$ MOVB #'0,D1 BR 30$ 20$: MOVB #'1,D1 30$: FILOTB LOGFIL(MEM) SOB D0,10$ REST D0-D2 RTN PUTOCT: SAVE A2 LEA A2,LOGFIL(MEM) OCVT 0,OT$DDB REST A2 RTN INIT: MOV START(MEM),ADR MOV COUNT(MEM),INDEX RTN BINARY: SAVE D0 MOV #8.,D0 10$: ASLB D1,#1 BLO 20$ TYPE 0 BR 30$ 20$: TYPE 1 30$: SOB D0,10$ REST D0 RTN ERRTXT: ASCIZ /*** ERROR @ADDRESS / ERRTX2: ASCIZ /: WROTE / ERRTX3: ASCIZ /, READ / ERRTX4: BYTE 15,12,0 EVEN END .