;
|
;
|
; memtest2.s -- memory test
|
; memtest2.s -- memory test
|
;
|
;
|
|
|
; $2 temporary
|
; $2 temporary
|
; $3 tbl address
|
; $3 tbl address
|
; $4 mem address
|
; $4 mem address
|
; $5 tbl count
|
; $5 tbl count
|
; $6 mem count
|
; $6 mem count
|
; $7 error
|
; $7 error
|
; $8 I/O base
|
; $8 I/O base
|
; $9 value read
|
; $9 value read
|
; $10 reference value
|
; $10 reference value
|
|
|
.set mem_base,0xC0000000
|
.set mem_base,0xC0000000
|
.set mem_size,1024*1024
|
.set mem_size,1024*1024
|
.set io_base,0xF0300000
|
.set io_base,0xF0300000
|
|
|
;
|
;
|
; write memory
|
; write memory
|
;
|
;
|
write:
|
write:
|
add $4,$0,mem_base
|
add $4,$0,mem_base
|
add $6,$0,mem_size
|
add $6,$0,mem_size
|
add $3,$0,tbl
|
add $3,$0,tbl
|
add $5,$0,257
|
add $5,$0,257
|
wrloop:
|
wrloop:
|
ldbu $2,$3,0
|
ldbu $2,$3,0
|
stb $2,$4,0
|
stb $2,$4,0
|
add $3,$3,1
|
add $3,$3,1
|
sub $5,$5,1
|
sub $5,$5,1
|
bne $5,$0,wrloop1
|
bne $5,$0,wrloop1
|
add $3,$0,tbl
|
add $3,$0,tbl
|
add $5,$0,257
|
add $5,$0,257
|
wrloop1:
|
wrloop1:
|
add $4,$4,1
|
add $4,$4,1
|
sub $6,$6,1
|
sub $6,$6,1
|
bne $6,$0,wrloop
|
bne $6,$0,wrloop
|
;
|
;
|
; read memory
|
; read memory
|
;
|
;
|
read:
|
read:
|
add $4,$0,mem_base
|
add $4,$0,mem_base
|
add $6,$0,mem_size
|
add $6,$0,mem_size
|
add $3,$0,tbl
|
add $3,$0,tbl
|
add $5,$0,257
|
add $5,$0,257
|
add $7,$0,0
|
add $7,$0,0
|
rdloop:
|
rdloop:
|
; always check byte
|
; always check byte
|
byte:
|
byte:
|
ldbu $9,$4,0
|
ldbu $9,$4,0
|
ldbu $10,$3,0
|
ldbu $10,$3,0
|
beq $9,$10,byteok
|
beq $9,$10,byteok
|
add $7,$0,1
|
add $7,$0,1
|
byteok:
|
byteok:
|
; possibly check halfword
|
; possibly check halfword
|
half:
|
half:
|
and $2,$4,1
|
and $2,$4,1
|
bne $2,$0,halfok
|
bne $2,$0,halfok
|
ldhu $9,$4,0
|
ldhu $9,$4,0
|
ldbu $10,$3,0
|
ldbu $10,$3,0
|
jal shft8
|
jal shft8
|
ldbu $2,$3,1
|
ldbu $2,$3,1
|
or $10,$10,$2
|
or $10,$10,$2
|
beq $9,$10,halfok
|
beq $9,$10,halfok
|
add $7,$0,1
|
add $7,$0,1
|
halfok:
|
halfok:
|
; possibly check word
|
; possibly check word
|
word:
|
word:
|
and $2,$4,3
|
and $2,$4,3
|
bne $2,$0,wordok
|
bne $2,$0,wordok
|
ldw $9,$4,0
|
ldw $9,$4,0
|
ldbu $10,$3,0
|
ldbu $10,$3,0
|
jal shft8
|
jal shft8
|
ldbu $2,$3,1
|
ldbu $2,$3,1
|
or $10,$10,$2
|
or $10,$10,$2
|
jal shft8
|
jal shft8
|
ldbu $2,$3,2
|
ldbu $2,$3,2
|
or $10,$10,$2
|
or $10,$10,$2
|
jal shft8
|
jal shft8
|
ldbu $2,$3,3
|
ldbu $2,$3,3
|
or $10,$10,$2
|
or $10,$10,$2
|
beq $9,$10,wordok
|
beq $9,$10,wordok
|
add $7,$0,1
|
add $7,$0,1
|
wordok:
|
wordok:
|
; next address
|
; next address
|
add $3,$3,1
|
add $3,$3,1
|
sub $5,$5,1
|
sub $5,$5,1
|
bne $5,$0,rdloop1
|
bne $5,$0,rdloop1
|
add $3,$0,tbl
|
add $3,$0,tbl
|
add $5,$0,257
|
add $5,$0,257
|
rdloop1:
|
rdloop1:
|
add $4,$4,1
|
add $4,$4,1
|
sub $6,$6,1
|
sub $6,$6,1
|
bne $6,$0,rdloop
|
bne $6,$0,rdloop
|
;
|
;
|
; show result
|
; show result
|
;
|
;
|
bne $7,$0,error
|
bne $7,$0,error
|
ok:
|
ok:
|
add $7,$0,'.'
|
add $7,$0,'.'
|
jal out
|
jal out
|
j halt
|
j halt
|
error:
|
error:
|
add $7,$0,'?'
|
add $7,$0,'?'
|
jal out
|
jal out
|
j halt
|
j halt
|
;
|
;
|
; finally, halt
|
; finally, halt
|
;
|
;
|
halt:
|
halt:
|
j halt
|
j halt
|
|
|
shft8:
|
shft8:
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
add $10,$10,$10
|
jr $31
|
jr $31
|
|
|
out:
|
out:
|
add $8,$0,io_base
|
add $8,$0,io_base
|
out1:
|
out1:
|
ldw $9,$8,8
|
ldw $9,$8,8
|
and $9,$9,1
|
and $9,$9,1
|
beq $9,$0,out1
|
beq $9,$0,out1
|
stw $7,$8,12
|
stw $7,$8,12
|
jr $31
|
jr $31
|
|
|
tbl:
|
tbl:
|
.byte 0x45,0x23,0x98,0x48,0xDC,0x5C,0x94,0x58
|
.byte 0x45,0x23,0x98,0x48,0xDC,0x5C,0x94,0x58
|
.byte 0x1F,0x7C,0x58,0xD7,0x41,0x1E,0xA9,0xE1
|
.byte 0x1F,0x7C,0x58,0xD7,0x41,0x1E,0xA9,0xE1
|
.byte 0x00,0x62,0x08,0x27,0x23,0xE9,0xCD,0x43
|
.byte 0x00,0x62,0x08,0x27,0x23,0xE9,0xCD,0x43
|
.byte 0x0F,0x25,0xF9,0x72,0xC2,0xD7,0xC4,0x07
|
.byte 0x0F,0x25,0xF9,0x72,0xC2,0xD7,0xC4,0x07
|
.byte 0xFB,0x5D,0x50,0xD7,0xBA,0xE4,0x30,0xD9
|
.byte 0xFB,0x5D,0x50,0xD7,0xBA,0xE4,0x30,0xD9
|
.byte 0x61,0x89,0xB1,0xA3,0xA8,0x5A,0x84,0xA8
|
.byte 0x61,0x89,0xB1,0xA3,0xA8,0x5A,0x84,0xA8
|
.byte 0xBD,0x8C,0xD0,0xE0,0x76,0x9E,0x24,0x86
|
.byte 0xBD,0x8C,0xD0,0xE0,0x76,0x9E,0x24,0x86
|
.byte 0xC4,0x1D,0xF8,0x86,0xF5,0xBD,0x8D,0xF0
|
.byte 0xC4,0x1D,0xF8,0x86,0xF5,0xBD,0x8D,0xF0
|
.byte 0x1A,0xDD,0xC8,0xD4,0xC2,0xF8,0xAD,0x23
|
.byte 0x1A,0xDD,0xC8,0xD4,0xC2,0xF8,0xAD,0x23
|
.byte 0x82,0x5F,0xC6,0x2A,0xB9,0x4A,0xD3,0x77
|
.byte 0x82,0x5F,0xC6,0x2A,0xB9,0x4A,0xD3,0x77
|
.byte 0xD7,0xA4,0x58,0x4E,0x42,0x7C,0xD4,0x06
|
.byte 0xD7,0xA4,0x58,0x4E,0x42,0x7C,0xD4,0x06
|
.byte 0x9A,0xCC,0x8D,0x8F,0x89,0x1B,0x7F,0xA4
|
.byte 0x9A,0xCC,0x8D,0x8F,0x89,0x1B,0x7F,0xA4
|
.byte 0xF9,0x48,0x78,0xBB,0x40,0x26,0xDE,0xC3
|
.byte 0xF9,0x48,0x78,0xBB,0x40,0x26,0xDE,0xC3
|
.byte 0x85,0xA5,0xED,0x3F,0xF0,0xC1,0xB7,0xC7
|
.byte 0x85,0xA5,0xED,0x3F,0xF0,0xC1,0xB7,0xC7
|
.byte 0x65,0x0F,0x15,0xA8,0x8C,0xE9,0xAF,0x26
|
.byte 0x65,0x0F,0x15,0xA8,0x8C,0xE9,0xAF,0x26
|
.byte 0xB6,0x3C,0xB6,0x40,0x57,0x35,0xE4,0x50
|
.byte 0xB6,0x3C,0xB6,0x40,0x57,0x35,0xE4,0x50
|
.byte 0x7E,0x5D,0x0B,0xBF,0x84,0xEA,0x82,0x0A
|
.byte 0x7E,0x5D,0x0B,0xBF,0x84,0xEA,0x82,0x0A
|
.byte 0x8F,0x70,0x4A,0x7F,0x31,0x02,0x47,0x96
|
.byte 0x8F,0x70,0x4A,0x7F,0x31,0x02,0x47,0x96
|
.byte 0x12,0x5D,0x3F,0x9E,0x47,0xEE,0xC5,0xFD
|
.byte 0x12,0x5D,0x3F,0x9E,0x47,0xEE,0xC5,0xFD
|
.byte 0x2B,0x7B,0x3E,0x82,0xB1,0x23,0xD3,0x2F
|
.byte 0x2B,0x7B,0x3E,0x82,0xB1,0x23,0xD3,0x2F
|
.byte 0x81,0xDF,0xEE,0x06,0xCA,0x70,0x11,0x59
|
.byte 0x81,0xDF,0xEE,0x06,0xCA,0x70,0x11,0x59
|
.byte 0xE0,0x5B,0xD9,0x11,0x5E,0x21,0xA8,0x70
|
.byte 0xE0,0x5B,0xD9,0x11,0x5E,0x21,0xA8,0x70
|
.byte 0x7E,0xE7,0x0E,0xC5,0xD6,0xD4,0xC3,0x01
|
.byte 0x7E,0xE7,0x0E,0xC5,0xD6,0xD4,0xC3,0x01
|
.byte 0x4F,0x01,0x84,0x01,0x24,0x57,0x30,0xA5
|
.byte 0x4F,0x01,0x84,0x01,0x24,0x57,0x30,0xA5
|
.byte 0x37,0x1E,0xAC,0x01,0x8F,0xBD,0x5A,0x70
|
.byte 0x37,0x1E,0xAC,0x01,0x8F,0xBD,0x5A,0x70
|
.byte 0x18,0x34,0x82,0x77,0x55,0x2A,0xE7,0xD3
|
.byte 0x18,0x34,0x82,0x77,0x55,0x2A,0xE7,0xD3
|
.byte 0x12,0xF6,0x99,0xE8,0xCA,0x5C,0xEA,0x1A
|
.byte 0x12,0xF6,0x99,0xE8,0xCA,0x5C,0xEA,0x1A
|
.byte 0x5D,0x6E,0x1B,0x82,0xC5,0x4B,0x28,0xFD
|
.byte 0x5D,0x6E,0x1B,0x82,0xC5,0x4B,0x28,0xFD
|
.byte 0x6A,0xD4,0xFE,0xFA,0x91,0x59,0x6A,0xAA
|
.byte 0x6A,0xD4,0xFE,0xFA,0x91,0x59,0x6A,0xAA
|
.byte 0x8D,0xEC,0x21,0xE3,0x17,0x09,0xB7,0x29
|
.byte 0x8D,0xEC,0x21,0xE3,0x17,0x09,0xB7,0x29
|
.byte 0xFF,0x50,0x12,0xC9,0xAC,0xFC,0xE3,0x0A
|
.byte 0xFF,0x50,0x12,0xC9,0xAC,0xFC,0xE3,0x0A
|
.byte 0x6B,0xFF,0x8D,0x31,0x4A,0xB5,0x2E,0xB5
|
.byte 0x6B,0xFF,0x8D,0x31,0x4A,0xB5,0x2E,0xB5
|
.byte 0x8A
|
.byte 0x8A
|
augment:
|
augment:
|
.byte 0x45,0x23,0x98
|
.byte 0x45,0x23,0x98
|
|
|