;-----------------------------------------------------------------------!
; MemTestData!
;-----------------------------------------------------------------------!
fn MemTestData
movsr3, 0x80000000; LP RAM
movsr2, (1<<15); D15
0:strr2, [r3]; write data bit
ldrr1, [r3]; read back
subsr0, r1, r2; same?
bne9f; OOPS
lsrsr2, 1; next data bit
bne0b; all done?
9:bxlr; return (0 = ok)
fe MemTestData
;-----------------------------------------------------------------------!
; MemTestAddr!
;-----------------------------------------------------------------------!
fn MemTestAddr
push{r4,r5,r7,lr}; save regs
movsr7, 0x80000000; LP RAM
movwr5, 0x5555; pattern
movwr4, 0xAAAA; inverse
;---------------------------------------;
movsr3, (1<<18); A18
0:strhr5, [r7, r3]; populate SRAM with pattern
lsrsr3, 1;
cmpr3, 1; done (A18..A01)?
bhi0b; not yet
;---------------------------------------;
movsr3, (1<<18); A18
strhr4, [r7]; check for bits stuck high
0:ldrhr1, [r7, r3]; check address bit
subsr0, r1, r5; intact?
bne9f; OOPS
lsrsr3, 1;
cmpr3, 1; done (A18..A01)?
bhi0b; not yet
strhr5, [r7]; now, set base addr to pattern
;---------------------------------------;
movsr3, (1<<18); A18 (test)
0:strhr4, [r7, r3]; set addr bit to inverse
ldrhr1, [r7]; stuck low test
subsr0, r1, r5; intact?
bne9f; OOPS
movsr2, (1<<18); A18 (probe)
1:cmpr2, r3; skip if test = probe
beq2f;
ldrhr1, [r7, r2]; shorted test
subsr0, r1, r5; intact?
bne9f; OOPS
2:lsrsr2, 1; next probe bit
cmpr2, 1; done (A18..A01)?
bhi1b; not yet
strhr5, [r7, r3]; set addr bit back to pattern
lsrsr3, 1; next test bit
cmpr3, 1; done (A18..A01)?
bhi0b; not yet
;---------------------------------------;
9:pop{r4,r5,r7,pc}; return
fe MemTestAddr
;-----------------------------------------------------------------------!
; MemTestDevice!
;-----------------------------------------------------------------------!
fn MemTestDev
;---------------------------------------;
; populate ram with deterministic data;
movsr3, 0x80000000; LP RAM
movsr2, (1<<19); nbr bytes (512 Kb)
movsr1, 7; start value
0:strr1, [r3], 4; *p++ = v++
addsr1, 1;
subsr2, 4; while (--nWords)
bgt0b;
;---------------------------------------;
; validate and invert;
movsr3, 0x80000000; LP RAM
movsr2, (1<<19); nbr bytes (512 Kb)
movsr1, 7; start value
0:ldrr0, [r3]; v = *p
subsr0, r0, r1; validate
bne9f; OOPS
mvnsr0, r1; inverse
strr0, [r3], 4; *p++ = ~(v++)
addsr1, 1;
subsr2, 4; while (--nWords)
bgt0b;
;---------------------------------------;
; validate and clear;
movsr3, 0x80000000; LP RAM
movsr2, (1<<19); nbr bytes (512 Kb)
movsr1, 7; start value
0:ldrr0, [r3]; v = ~*p
mvnsr0, r0;
subsr0, r0, r1; validate
bne9f; OOPS
movsr0, 0; clear
strr0, [r3], 4; *p++ = 0
addsr1, 1; v++
subsr2, 4; while (--nWords)
bgt0b;
9:bxlr; return (0 = ok)
fe MemTestDev
|