; >MemSrcA
; ARCHIMEDES TEST SOFTWARE
; Version 1.10     4-9-1987
;         1.20     21-March-1989  by D. Burling
;                  Modified to set pass/fail in cmos. 
;                          
; DRAM Test Programme
;NOTE  VDU21 USED AFTER KEY
 ^ 0
WRITEC # 1
WRITES # 1
WRITE0 # 1
NEWLINE # 1
READC # 1
CLI # 1
BYTE # 1
WORD # 1
FILE # 1
ARGS # 1
BGET # 1
BPUT # 1
MULTIPLE # 1
OPEN # 1
READLINE # 1
CONTROL # 1
GETENV # 1
EXIT # 1
WRITEI * 256
R0 RN 0
R1 RN 1
R2 RN 2
R3 RN 3
R4 RN 4
R5 RN 5
R6 RN 6
R7 RN 7
R8 RN 8
R9 RN 9
R10 RN 10
R11 RN 11
R12 RN 12
R13 RN 13
R14 RN 14
PC RN 15
SCAN * &79
SPACE * 98
CMOS * 162
CMEMLOC * 31
FAIL * 1
PASS * 0
 LEADR &8000
 MOV R0,#6
 SWI WRITEC
 MOV R0,#12
 SWI WRITEC
 SWI WRITES
 = 10,10,133,"           Memory test",10,13,0
 SWI WRITES
 = 133,"           ___________",10,13,0
 SWI GETENV
 MOV R12,R1
 MOV R10,R12
; BL WORDHX
 SWI WRITES
 = 10,13,134," Phase one: incrementing pattern",135,0
 MOV R7,#4
 MOV R8,#0
PHASE1 LDR R0,P1PTN
 LDR R1,P1INC
 BL ENDADR
PH1FILL STR R0,[R4],#4
 ADD R0,R0,R1
 TEQ R4,R12
 BNE PH1FILL
 SWI WRITEI+"."
 BL ENDADR
 LDR R0,P1PTN
PH1CHK LDR R2,[R4],#4
 TEQ R2,R0
 BNE PH1FAIL
PH1CONT ADD R0,R0,R1
 TEQ R4,R12
 BNE PH1CHK
 STR R0,P1PTN
 SUBS R7,R7,#1
 BNE PHASE1
 TEQ R8,#0
 BNE PHASEDEAD
 SWI WRITES
 = 10,13,134," Phase two: TRUE hierarchy",135,0
 MOV R0,#0
 MVN R1,#0
 MOV R2,#2
PHASE2 BL ENDADR
PHASE2A TST R4,R2
 STREQ R0,[R4],#4
 STRNE R1,[R4],#4
 CMP R4,R12
 BCC PHASE2A
 SWI WRITEI+"."
 BL ENDADR
PHASE2B TST R4,R2
 LDR R3,[R4],#4
 BNE PHASE2B1
PHASE2B2 CMP R0,R3
 BNE PH2FAIL
 B PH2CONT
PHASE2B1 CMP R1,R3
 BNE PH2FAIL
PH2CONT CMP R4,R12
 BCC PHASE2B
 CMP R2,R12
 ADDCC R2,R2,R2
 BCC PHASE2
 TEQ R8,#0
 BNE PHASEDEAD
 TEQ R1,#0
 BEQ PHASE4
 SWI WRITES
 = 10,13,134," Phase three: FALSE hierarchy",135,0
 MVN R0,#0
 MOV R1,#0
 MOV R2,#2
 B PHASE2
PHASE4 TEQ R8,#0
 BNE PHASEDEAD
 SWI WRITES
 = 10,13,134," Phase four: Cycling bits",135,0
 MOV R7,#1
PHASE4A BL ENDADR
 MOV R2,R7
PHASE4A1 STR R2,[R4],#4
 MOV R2,R2,ROR #31
 CMP R4,R12
 BCC PHASE4A1
 SWI WRITEI+"."
 BL ENDADR
 MOV R2,R7
PHASE4B1 LDR R1,[R4],#4
 CMP R1,R2
 BNE PH4FAIL
PH4CONT MOV R2,R2,ROR #31
 CMP R4,R12
 BCC PHASE4B1
 ADDS R7,R7,R7
 BCC PHASE4A
 TEQ R8,#0
 BNE PHASEDEAD
 SWI WRITES
 = 10,13,10,13,130,"  PASSED......",10,13,0
 MOV R0,#CMOS  ; Set flag in cmos 31 if pass memory test
 MOV R1,#CMEMLOC
 MOV R2,#PASS
 SWI BYTE
 SWI WRITES
 = 10,13,130,"  Press SPACE to continue.",10,13,0
KEY MOV R0,#SCAN
 MOV R1,#SPACE
 SWI BYTE
 CMP R1,#SPACE
 BNE KEY
 MOV R0,#21
 SWI WRITEC
 SWI EXIT
PHASEDEAD SWI WRITES
 = 10,13,129,"  There were &",0
 MOV R10,R8
 BL WORDHX
 SWI WRITES
 = 129, " failures in total",10,13,0
 SWI WRITES
 = 10,13,129,"   TESTING ABORTED",10,13,0
 MOV R0,#CMOS      ; set flag in Cmos 31 if fail
 MOV R1,#CMEMLOC
 MOV R2,#FAIL
 SWI BYTE
;FIN BAL FIN   ;Endless loop
 SWI EXIT
PH1FAIL CMP R8,#10
 ADD R8,R8,#1
 BCS PH1CONT
 SWI WRITES
 = 10,13,"  Phase 1 fail at &",0
 MOV R5,R0
 SUB R10,R4,#4
 BL WORDHX
 SWI WRITES
 = " with &",0
 MOV R10,R2
 BL WORDHX
 SWI WRITES
 = " instead of &",0
 MOV R10,R5
 BL WORDHX
 MOV R0,R5
 B PH1CONT
PH2FAIL CMP R8,#10
 ADD R8,R8,#1
 BCS PH2CONT
 SWI WRITES
 = 10,13,"  Phase 2 fail at &",0
 SUB R10,R4,#4
 MOV R5,R0
 BL WORDHX
 SWI WRITES
 = " with &",0
 MOV R10,R3
 BL WORDHX
 SWI WRITES
 = " instead of &",0
 TST R4,R2
 MOVNE R10,R1
 MOVEQ R10,R5
 BL WORDHX
 MOV R0,R5
 B PH2CONT
PH4FAIL CMP R8,#10
 ADD R8,R8,#1
 BCS PH4CONT
 SWI WRITES
 = 10,13,"  Phase 4 fail at &",0
 SUB R10,R4,#4
 BL WORDHX
 SWI WRITES
 = " with &",0
 MOV R10,R1
 BL WORDHX
 SWI WRITES
 = " instead of &",0
 MOV R10,R2
 BL WORDHX
 B PH4CONT
P1PTN & &86427531
P1INC & &0F020501
WORDSP SWI WRITEI+" "
;print R10 using R0,R6,r9
WORDHX MOV R6,#32-4
WORDLP MOV R0,R10,LSR R6
 AND R0,R0,#15
 CMP R0,#9
 ORRLS R0,R0,#"0"
 ADDHI R0,R0,#"A"-10
 SWI WRITEC
 SUBS R6,R6,#4
 BPL WORDLP
 MOV PC,R14
ENDADR ADR R4,ZEEND
 MOV PC,R14
ZEEND
 END
