| # XSTORMY16 startup code for GDB stub. |
| |
| # CPU Data for Sanyo EVA debugger at 0x7F00 |
| .section .cpudata,"ax" |
| .byte 0x00,0x02,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x44,0x35,0x39,0x52,0x30,0x30,0x30,0x30,0x2E,0x4F,0x50,0x54,0x00,0x00,0x00,0x00 |
| .byte 0x4c,0x43,0x35,0x39,0x52,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x00,0x20,0x48,0x00,0x00,0x00 |
| .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x01,0x12,0x31,0x23,0x59 |
| |
| # Interrupt vectors at 0x8000. |
| .section .int_vec,"ax" |
| .global _start |
| .align 1 |
| _start: |
| ;; Reset, watchdog timer interrupt |
| jmpf _int_reset |
| ;; base timer interrupt |
| jmpf _int_basetimer |
| ;; timer 0 |
| jmpf _int_timer0 |
| ;; timer 1 |
| jmpf _int_timer1 |
| ;; SIO0 interrupt |
| jmpf _int_sio0 |
| ;; SIO1 interrupt |
| jmpf _int_sio1 |
| ;; port0 interrupt |
| jmpf _int_port0 |
| ;; port1 interrupt |
| jmpf _int_port1 |
| |
| .org 0x80 |
| ;; sys interrupt (0x8080) |
| jmpf _int_sys |
| |
| ;; Application void write(char *buf, int nbytes) |
| ;; This jmps to a stub function to packetize the buf for GDB |
| jmpf gdb_write |
| ;; Application int read(char *buf, int nbytes) |
| jmpf gdb_read |
| |
| .text |
| # Reset code, set up memory and call main. |
| _int_reset: |
| ;; Set up the application stack pointer. |
| mov sp,#0x002 |
| |
| ;; Zero the data space |
| mov r0,#_edata |
| mov r1,#_end |
| mov r2,#0 |
| 0: mov.w (r0++),r2 |
| blt r0,r1,0b |
| |
| ;; Init the UART |
| callf uart_init |
| |
| ;; Turn on illegal insn trap |
| mov r0,r14 |
| set1 r0,#11 |
| mov r14,r0 |
| mov.b 0x7f08,#0x11 |
| mov.b 0x7f09,#0x10 |
| |
| ;; "breakpoint" sends us into stub. |
| 0: |
| .hword 0x0006 |
| br 0b |
| |
| _int_sys: |
| push r13 |
| mov r13,#registers |
| mov.w (r13++),r0 |
| mov.w (r13++),r1 |
| mov.w (r13++),r2 |
| mov.w (r13++),r3 |
| mov.w (r13++),r4 |
| mov.w (r13++),r5 |
| mov.w (r13++),r6 |
| mov.w (r13++),r7 |
| mov r0,r8 |
| mov.w (r13++),r0 |
| mov r0,r9 |
| mov.w (r13++),r0 |
| mov r0,r10 |
| mov.w (r13++),r0 |
| mov r0,r11 |
| mov.w (r13++),r0 |
| mov r0,r12 |
| mov.w (r13++),r0 |
| pop r0 |
| mov.w (r13++),r0 ; R13 |
| pop r0 |
| mov.w (r13++),r0 ; PSW |
| mov r0,r15 |
| sub r0,#4 |
| mov.w (r13++),r0 ; SP |
| pop r0 |
| pop r1 |
| mov.w (r13++),r1 ; PCL |
| mov.w (r13++),r0 ; PCH |
| |
| ;; switch to stub stack and invoke stub |
| mov sp,#0x700 |
| callf handle_exception |
| |
| mov r0,#registers+34 |
| mov.w r1,(r0) ; PCH |
| mov.w r2,(--r0) ; PCL |
| mov.w r3,(--r0) ; SP |
| mov r15,r3 |
| push r2 |
| push r1 |
| mov.w r1,(--r0) ; PSW |
| push r1 |
| mov.w r1,(--r0) |
| mov r13,r1 |
| mov.w r1,(--r0) |
| mov r12,r1 |
| mov.w r1,(--r0) |
| mov r11,r1 |
| mov.w r1,(--r0) |
| mov r10,r1 |
| mov.w r1,(--r0) |
| mov r9,r1 |
| mov.w r1,(--r0) |
| mov r8,r1 |
| mov.w r7,(--r0) |
| mov.w r6,(--r0) |
| mov.w r5,(--r0) |
| mov.w r4,(--r0) |
| mov.w r3,(--r0) |
| mov.w r2,(--r0) |
| mov.w r1,(--r0) |
| mov.w r0,(--r0) |
| iret |
| 1: .size _int_sys,1b-_int_sys |
| |
| |