39b8c31923fd901765a411d721951faf74683d63
[calu.git] / progs / dt_inc.s
1 .data
2
3 ; TODO
4 .org 0x300
5 int2hex:
6         ;3210
7         .fill 0x33323130 
8         ;7654
9         .fill 0x37363534
10         ;ba98
11         .fill 0x62613938
12         ;fedc
13         .fill 0x66656463
14 .text
15 ; TODO
16 .org 0x300
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
25 u_recv_byte:
26         ldw r3, UART_STATUS(r10)
27         andx r3, UART_RECV_NEW
28         brzs+ u_recv_byte; branch if zero
29         xor r0, r0, r0
30         ldw r0, UART_RECV(r10)
31         ret
32
33 u_send_byte:
34         ldw r9, UART_STATUS(r10)
35         andx r9, UART_TRANS_EMPTY
36         brnz+ u_send_byte ; branch if not zero
37         stb r1, UART_TRANS(r10)
38         ret
39
40 u_send_uint:
41         addi r8, r1, 0
42         ;usb_sendbuffersafe ("0x", 2);
43         xor r1, r1, r1
44         ldi r1, 0x30
45         call u_send_byte
46         xor r1, r1, r1
47         ldi r1, 0x78
48         call u_send_byte
49         ;j = 0
50         xor r7, r7, r7
51         xor r6, r6, r6
52         ldi r6, int2hex@lo
53         ldih r6, int2hex@hi
54 u_send_uint_loop:
55         ;for (j = 0; j < 8; ++j) {
56         cmpi r7, 8
57         reteq
58         ;usb_sendbuffersafe (&int2hex[(i >> 28) & 0xf], 1);
59         lrs r1, r8, 28
60         andx r1, 0xf
61         add r9, r6, r1
62         ldb r1, 0(r9)
63         call u_send_byte
64         ;i <<= 4;
65         lls r8, r8, 4
66         addi r7, r7, 1
67         br u_send_uint_loop
68
69 u_send_string:
70         ; r1 = addr
71         ; r2 = len
72         addi r3, r1, 0
73 u_send_string_int:
74         cmpi r2, 0
75         reteq-
76         ldb r1, 0(r3)
77         call u_send_byte
78         addis r2, r2, 0-1
79         addi r3, r3, 1
80         br u_send_string_int
81
82 u_send_newline:
83         xor r1, r1, r1
84         ldi r1, 0x0a
85         call u_send_byte
86         ldi r1, 0x0d
87         call u_send_byte
88         ret
89
90 u_init:
91         xor r10, r10, r10
92         ldi r10, UART_BASE@lo
93         ldih r10, UART_BASE@hi
94         ret