ad347c129d180751828f15c049e3e1ae713c82b3
[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         .define SSEG_BASE, 0x2010
26
27         .define INT_BASE, 0x2020
28         .define INT_CONF, 0x04
29         .define INT_GLOBAL_BIT, 0x01
30         .define INT_UART_REC_BIT, 0x02
31
32 u_recv_byte:
33 #ifndef DTSIM
34         ldw r3, UART_STATUS(r10)
35         andx r3, UART_RECV_NEW
36         brzs+ u_recv_byte; branch if zero
37         xor r0, r0, r0
38         ldw r0, UART_RECV(r10)
39 #else
40         ldis r0, 0x41 ; 'A'
41 #endif
42         ret
43
44 u_send_byte:
45 #ifndef DTSIM
46         ldw r9, UART_STATUS(r10)
47         andx r9, UART_TRANS_EMPTY
48         brnz+ u_send_byte ; branch if not zero
49         stb r1, UART_TRANS(r10)
50 #endif
51         ret
52
53 u_send_uint:
54 #ifndef DTSIM
55         addi r8, r1, 0
56         ;usb_sendbuffersafe ("0x", 2);
57         xor r1, r1, r1
58         ldi r1, 0x30
59         call u_send_byte
60         xor r1, r1, r1
61         ldi r1, 0x78
62         call u_send_byte
63         ;j = 0
64         xor r7, r7, r7
65         xor r6, r6, r6
66         ldi r6, int2hex@lo
67         ldih r6, int2hex@hi
68 u_send_uint_loop:
69         ;for (j = 0; j < 8; ++j) {
70         cmpi r7, 8
71         reteq
72         ;usb_sendbuffersafe (&int2hex[(i >> 28) & 0xf], 1);
73         lrs r1, r8, 28
74         andx r1, 0xf
75         add r9, r6, r1
76         ldb r1, 0(r9)
77         call u_send_byte
78         ;i <<= 4;
79         lls r8, r8, 4
80         addi r7, r7, 1
81         br u_send_uint_loop
82 #else
83         ret
84 #endif
85
86 u_send_string:
87 #ifndef DTSIM
88         ; r1 = addr
89         ; r2 = len
90         addi r3, r1, 0
91 u_send_string_int:
92         cmpi r2, 0
93         reteq-
94         ldb r1, 0(r3)
95         call u_send_byte
96         addis r2, r2, 0-1
97         addi r3, r3, 1
98         br u_send_string_int
99 #else
100         ret
101 #endif
102
103 u_send_newline:
104 #ifndef DTSIM
105         xor r1, r1, r1
106         ldi r1, 0x0a
107         call u_send_byte
108         ldi r1, 0x0d
109         call u_send_byte
110 #endif
111         ret
112
113 u_init:
114 #ifndef DTSIM
115         xor r10, r10, r10
116         ldi r10, UART_BASE@lo
117         ldih r10, UART_BASE@hi
118 #endif
119         ret
120
121 sseg_displ:
122 #ifndef DTSIM
123         ldi r2, SSEG_BASE
124         stw r1, 0(r2)
125 #endif
126         ret