.data ; TODO .org 0x300 int2hex: ;3210 .fill 0x33323130 ;7654 .fill 0x37363534 ;ba98 .fill 0x62613938 ;fedc .fill 0x66656463 .text ; TODO .org 0x300 .define UART_BASE, 0x2000 .define UART_STATUS, 0x0 .define UART_RECV, 0xc .define UART_TRANS, 0x8 .define UART_TRANS_EMPTY, 0x1 .define UART_RECV_NEW, 0x2 .define SSEG_BASE, 0x2010 .define INT_BASE, 0x2020 .define INT_CONF, 0x04 .define INT_GLOBAL_BIT, 0x01 .define INT_UART_REC_BIT, 0x02 u_recv_byte: #ifndef DTSIM ldw r3, UART_STATUS(r10) andx r3, UART_RECV_NEW brzs+ u_recv_byte; branch if zero xor r0, r0, r0 ldw r0, UART_RECV(r10) #else ldis r0, 0x41 ; 'A' #endif ret u_send_byte: #ifndef DTSIM ldw r9, UART_STATUS(r10) andx r9, UART_TRANS_EMPTY brnz+ u_send_byte ; branch if not zero stb r1, UART_TRANS(r10) #endif ret u_send_uint: #ifndef DTSIM addi r8, r1, 0 ;usb_sendbuffersafe ("0x", 2); xor r1, r1, r1 ldi r1, 0x30 call u_send_byte xor r1, r1, r1 ldi r1, 0x78 call u_send_byte ;j = 0 xor r7, r7, r7 xor r6, r6, r6 ldi r6, int2hex@lo ldih r6, int2hex@hi u_send_uint_loop: ;for (j = 0; j < 8; ++j) { cmpi r7, 8 reteq ;usb_sendbuffersafe (&int2hex[(i >> 28) & 0xf], 1); lrs r1, r8, 28 andx r1, 0xf add r9, r6, r1 ldb r1, 0(r9) call u_send_byte ;i <<= 4; lls r8, r8, 4 addi r7, r7, 1 br u_send_uint_loop #else ret #endif u_send_string: #ifndef DTSIM ; r1 = addr ; r2 = len addi r3, r1, 0 u_send_string_int: cmpi r2, 0 reteq- ldb r1, 0(r3) call u_send_byte addis r2, r2, 0-1 addi r3, r3, 1 br u_send_string_int #else ret #endif u_send_newline: #ifndef DTSIM xor r1, r1, r1 ldi r1, 0x0a call u_send_byte ldi r1, 0x0d call u_send_byte #endif ret u_init: #ifndef DTSIM xor r10, r10, r10 ldi r10, UART_BASE@lo ldih r10, UART_BASE@hi #endif ret sseg_displ: #ifndef DTSIM ldi r2, SSEG_BASE stw r1, 0(r2) #endif ret