; 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" .INCLUDE "tester-mov.mac" .INCLUDE "tester-tst.mac" .INCLUDE "tester-bge.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 CALL test_mov CALL test_tst CALL test_bge 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