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