.data .org 0x600 int2hex: ;3210 .fill 0x33323130 ;7654 .fill 0x37363534 ;ba98 .fill 0x62613938 ;fedc .fill 0x66656463 .text .org 0x400 .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 PBASE, 0x2030 .define PADDR, 0x4 .define PDATA, 0x8 .define SSEG_BASE, 0x2010 .define INT_BASE, 0x2020 .define INT_CONF, 0x04 .define INT_GLOBAL_BIT, 0x01 .define INT_UART_REC_BIT, 0x02 .define TIMER_BASE, 0x2040 .define TIMER_STCFG, 0x0 .define TIMER_VAL, 0x4 u_recv_byte: 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) ret u_send_byte: ldw r9, UART_STATUS(r10) andx r9, UART_TRANS_EMPTY brnz+ u_send_byte ; branch if not zero stb r1, UART_TRANS(r10) ret u_send_uint: addi r8, r1, 0 ;usb_sendbuffersafe ("0x", 2); ldi r1, 0x30 call u_send_byte ldi r1, 0x78 call u_send_byte ;j = 0 xor r7, r7, r7 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 u_send_string: ; 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 u_send_newline: ldi r1, 0x0a call u_send_byte ldi r1, 0x0d call u_send_byte ret u_init: ldi r10, UART_BASE@lo ldih r10, UART_BASE@hi ret sseg_displ: ldi r2, SSEG_BASE stw r1, 0(r2) ret t_init: ldis r11, TIMER_BASE@lo ldih r11, TIMER_BASE@hi ret t_start: ldis r1, 0x1 stw r1, TIMER_STCFG(r11) ret t_stop: ldis r1, 0x0 stw r1, TIMER_STCFG(r11) ret t_valget: ldw r0, TIMER_VAL(r11) ret t_valset: stw r1, TIMER_VAL(r11) ret ;for deepjit: start for programarea prog_start: