; ==== tests/0500-hello.s ==== 1 ; 0500-hello.s -- Hello World via the UART terminal 2 ; 3 ; Polls TX RDY before writing each character, then halts. 4 ; Run standalone: python sim.py tests/0500-hello.bin --terminal 5 ; 6 ; Register usage: 7 ; r1 pointer into string (advances each iteration) 8 ; r2 current SIXBIT character 9 ; r3 TX ready status 10 ; r5 TX RDY address (0o7770) 11 ; r6 TX BUF address (0o7772) 12 13 %define TXRDY 0o7770 14 %define TXBUF 0o7772 15 16 .org 0o1000 17 18 1000 4500 li r5, TXRDY ; r5 = TX ready address 1001 5570 19 1002 4600 li r6, TXBUF ; r6 = TX buffer address 1003 5672 20 1004 4110 li r1, msg ; r1 = pointer to start of string 1005 5120 21 22 1006 7213 loop: lwr r2, r1 ; load next SIXBIT character 23 1007 1002 sub r0, r0, r2 ; T=1 if r2!=0, T=0 if r2=0 (NUL terminator) 24 1010 4007 bf done ; NUL -> done 25 26 1011 7353 txwait: lwr r3, r5 ; read TX ready status 27 1012 1003 sub r0, r0, r3 ; T=1 if ready, T=0 if busy 28 1013 4076 bf txwait ; busy -> keep polling 29 30 1014 7264 swr r2, r6 ; transmit character 31 1015 5101 addi r1, 1 ; advance string pointer 32 1016 5070 bt loop ; T=1 (from sub r0,r0,r3) -> next character 33 34 1017 7777 done: halt 35 36 1020 0010 msg: .sixbit "HELLO WORLD\n" 1021 0005 1022 0014 1023 0014 1024 0017 1025 0040 1026 0027 1027 0017 1030 0022 1031 0014 1032 0004 1033 0037 37 1034 0000 .word 0 ; NUL terminator