s3e: fix build break
[calu.git] / 3_test / uartint.s
1 .data
2 str:
3         ; "zlol"
4         .fill 0x5a4c4f4c
5         .fill 0x00000a0d
6
7 int2hex:
8         ;3210
9         .fill 0x33323130 
10         ;7654
11         .fill 0x37363534
12         ;ba98
13         .fill 0x62613938
14         ;fedc
15         .fill 0x66656463
16 .text
17         .define UART_BASE, 0x2000
18         .define UART_STATUS, 0x0
19         .define UART_RECV, 0xc
20         .define UART_TRANS, 0x8
21
22         .define UART_TRANS_EMPTY, 0x1
23         .define UART_RECV_NEW, 0x2
24 start:
25         br+ main ;br+ 
26         br+ main
27         ret
28 main:
29         xor r10, r10, r10
30         xor r7, r7, r7
31         ldi r10, UART_BASE@lo
32         ldih r10, UART_BASE@hi
33         ldw r5, UART_STATUS(r10)
34         andx r5, UART_RECV_NEW
35         brzs+ main ; no new data?
36         ldw r7, UART_RECV(r10) ; load data
37
38         xor r1, r1, r1
39         xor r2, r2, r2
40         xor r3, r3, r3
41         ldi r1, str
42         ldi r2, 6
43         call send_string
44         xor r1, r1, r1
45         xor r2, r2, r2
46         ldi r1, 0x12bd
47         ldih r1, 0x1337
48         call debug_uint
49         ldi r1, 0x1337
50         ldih r1, 0x12bd
51         call debug_uint
52
53 main2:
54         ldw r5, UART_STATUS(r10)
55         andx r5, UART_RECV_NEW
56         brzs+ main2 ; no new data?
57         ldb r7, UART_RECV(r10) ; load data
58 uartnrdy:
59         ldw r5, 0(r0)
60         andx r5, UART_TRANS_EMPTY
61         brnz+ uartnrdy ; transmitter not ready yet?
62         stw r7, UART_TRANS(r10) ; send zeh shit!
63         br main2 ; back to usual stuff
64
65 send_string:
66         ; r1 = addr
67         ; r2 = len
68         addi r3, r1, 0
69 send_string_int:
70         cmpi r2, 0
71         reteq-
72         ldb r1, 0(r3)
73         call send_byte
74         addis r2, r2, 0-1
75         addi r3, r3, 1
76         br send_string_int
77
78 send_byte:
79         ldw r9, UART_STATUS(r10)
80         andx r9, UART_TRANS_EMPTY
81         brnz+ send_byte ; branch if not zero
82         stb r1, UART_TRANS(r10)
83         ret
84
85 debug_uint:
86         addi r8, r1, 0
87         ;usb_sendbuffersafe ("0x", 2);
88         xor r1, r1, r1
89         ldi r1, 0x30
90         call send_byte
91         xor r1, r1, r1
92         ldi r1, 0x78
93         call send_byte
94         ;j = 0
95         xor r7, r7, r7
96         xor r6, r6, r6
97         ldi r6, int2hex@lo
98         ldih r6, int2hex@hi
99 debug_unit_loop:
100         ;for (j = 0; j < 8; ++j) {
101         cmpi r7, 8
102         reteq
103         ;usb_sendbuffersafe (&int2hex[(i >> 28) & 0xf], 1);
104         lrs r1, r8, 28
105         andx r1, 0xf
106         add r9, r6, r1
107         ldb r1, 0(r9)
108         call send_byte
109         ;i <<= 4;
110         lls r8, r8, 4
111         addi r7, r7, 1
112         br debug_unit_loop