dt_inc/deepjit: deepjit uses dt_inc
[calu.git] / progs / dt_inc.s
1 .data
2
3 .org 0xA00
4 int2hex:
5         ;3210
6         .fill 0x33323130 
7         ;7654
8         .fill 0x37363534
9         ;ba98
10         .fill 0x62613938
11         ;fedc
12         .fill 0x66656463
13 .text
14 .org 0x400
15         .define UART_BASE, 0x2000
16         .define UART_STATUS, 0x0
17         .define UART_RECV, 0xc
18         .define UART_TRANS, 0x8
19
20         .define UART_TRANS_EMPTY, 0x1
21         .define UART_RECV_NEW, 0x2
22
23         .define PBASE, 0x2030
24         .define PADDR, 0x4
25         .define PDATA, 0x8
26
27         .define SSEG_BASE, 0x2010
28
29         .define INT_BASE, 0x2020
30         .define INT_CONF, 0x04
31         .define INT_GLOBAL_BIT, 0x01
32         .define INT_UART_REC_BIT, 0x02
33
34 u_recv_byte:
35         ldw r3, UART_STATUS(r10)
36         andx r3, UART_RECV_NEW
37         brzs+ u_recv_byte; branch if zero
38         xor r0, r0, r0
39         ldw r0, UART_RECV(r10)
40         ret
41
42 u_send_byte:
43         ldw r9, UART_STATUS(r10)
44         andx r9, UART_TRANS_EMPTY
45         brnz+ u_send_byte ; branch if not zero
46         stb r1, UART_TRANS(r10)
47         ret
48
49 u_send_uint:
50         addi r8, r1, 0
51         ;usb_sendbuffersafe ("0x", 2);
52         xor r1, r1, r1
53         ldi r1, 0x30
54         call u_send_byte
55         xor r1, r1, r1
56         ldi r1, 0x78
57         call u_send_byte
58         ;j = 0
59         xor r7, r7, r7
60         xor r6, r6, r6
61         ldi r6, int2hex@lo
62         ldih r6, int2hex@hi
63 u_send_uint_loop:
64         ;for (j = 0; j < 8; ++j) {
65         cmpi r7, 8
66         reteq
67         ;usb_sendbuffersafe (&int2hex[(i >> 28) & 0xf], 1);
68         lrs r1, r8, 28
69         andx r1, 0xf
70         add r9, r6, r1
71         ldb r1, 0(r9)
72         call u_send_byte
73         ;i <<= 4;
74         lls r8, r8, 4
75         addi r7, r7, 1
76         br u_send_uint_loop
77
78 u_send_string:
79         ; r1 = addr
80         ; r2 = len
81         addi r3, r1, 0
82 u_send_string_int:
83         cmpi r2, 0
84         reteq-
85         ldb r1, 0(r3)
86         call u_send_byte
87         addis r2, r2, 0-1
88         addi r3, r3, 1
89         br u_send_string_int
90
91 u_send_newline:
92         xor r1, r1, r1
93         ldi r1, 0x0a
94         call u_send_byte
95         ldi r1, 0x0d
96         call u_send_byte
97         ret
98
99 u_init:
100         xor r10, r10, r10
101         ldi r10, UART_BASE@lo
102         ldih r10, UART_BASE@hi
103         ret
104
105 sseg_displ:
106         ldi r2, SSEG_BASE
107         stw r1, 0(r2)
108         ret