KEK/tester.mac
2022-03-13 19:49:04 +01:00

112 lines
1.6 KiB
Text

; in simh:
; simh> set console telnet=3333
; then invoke telnet to port 3333 on the simh systm
; simh> load test.bin
; simh> run
.EXTERN ALL
; initialize stack pointer
start: MOV #1000, R6
JMP go
.INCLUDE "tester-psw.mac"
.INCLUDE "tester-adc-sbc.mac"
.INCLUDE "tester-addressing.mac"
go: MOV #textstart, R0
CALL print_start
CALL psw_store_retrieve
CALL psw_flags_trigger
CALL test_adc
CALL test_sbc
CALL test_addr
MOV #textfin, R0
CALL print_start
TRAP 7
; store copy of R0 on the stack
print_start: MOV R0,-(SP)
; store PSW (status register) on stack
MFPS -(SP)
; string ends with 0x00
print: TSTB (R0)
BEQ pdone
; put character in tty buffer
MOVB (R0), @#TTYTX
; wait for it to be transmitted
waittx: TSTB @#TTYST
BPL waittx
INC R0
JMP print
; retrieve stored r0, r1 and psw from stack
pdone: MTPS (SP)+
MOV (SP)+,R0
RET
print_binary:
MFPS -(SP)
MOV R0,-(SP)
MOV R1,-(SP)
; 16 bits in a word
MOV #16.,R1
print_bit:
ASL R0
BCS print_1
waittx0:
TSTB @#TTYST
BPL waittx0
MOVB #48., @#TTYTX
BR print_next_bit
print_1:
waittx1:
TSTB @#TTYST
BPL waittx1
MOVB #49., @#TTYTX
BR print_next_bit
print_next_bit:
; keep track of the number of bits emitted
DEC R1
TST R1
BNE print_bit
; emit seperator
bit_seperator:
TSTB @#TTYST
BPL bit_seperator
MOVB #32., @#TTYTX
; for some reason the last character is not printed in simh unless repeated
bit_seperator2:
TSTB @#TTYST
BPL bit_seperator2
MOVB #32., @#TTYTX
MOV (SP)+,R1
MOV (SP)+,R0
MTPS (SP)+
RET
make_raw
textstart: .ASCII "tester running...\r\n\x00"
textfin: .ASCII "tester finished\r\n\x00"
.EVEN
textbuffer: .BLKB 256.
TTYST = 177564
TTYTX = 177566