| 1 | # XSTORMY16 startup code for GDB stub. |
|---|
| 2 | |
|---|
| 3 | # CPU Data for Sanyo EVA debugger at 0x7F00 |
|---|
| 4 | .section .cpudata,"ax" |
|---|
| 5 | .byte 0x00,0x02,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 6 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 7 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 8 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 9 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 10 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 11 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 12 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 13 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 14 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 15 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 16 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 17 | .byte 0x44,0x35,0x39,0x52,0x30,0x30,0x30,0x30,0x2E,0x4F,0x50,0x54,0x00,0x00,0x00,0x00 |
|---|
| 18 | .byte 0x4c,0x43,0x35,0x39,0x52,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
|---|
| 19 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x00,0x20,0x48,0x00,0x00,0x00 |
|---|
| 20 | .byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x01,0x12,0x31,0x23,0x59 |
|---|
| 21 | |
|---|
| 22 | # Interrupt vectors at 0x8000. |
|---|
| 23 | .section .int_vec,"ax" |
|---|
| 24 | .global _start |
|---|
| 25 | .align 1 |
|---|
| 26 | _start: |
|---|
| 27 | ;; Reset, watchdog timer interrupt |
|---|
| 28 | jmpf _int_reset |
|---|
| 29 | ;; base timer interrupt |
|---|
| 30 | jmpf _int_basetimer |
|---|
| 31 | ;; timer 0 |
|---|
| 32 | jmpf _int_timer0 |
|---|
| 33 | ;; timer 1 |
|---|
| 34 | jmpf _int_timer1 |
|---|
| 35 | ;; SIO0 interrupt |
|---|
| 36 | jmpf _int_sio0 |
|---|
| 37 | ;; SIO1 interrupt |
|---|
| 38 | jmpf _int_sio1 |
|---|
| 39 | ;; port0 interrupt |
|---|
| 40 | jmpf _int_port0 |
|---|
| 41 | ;; port1 interrupt |
|---|
| 42 | jmpf _int_port1 |
|---|
| 43 | |
|---|
| 44 | .org 0x80 |
|---|
| 45 | ;; sys interrupt (0x8080) |
|---|
| 46 | jmpf _int_sys |
|---|
| 47 | |
|---|
| 48 | ;; Application void write(char *buf, int nbytes) |
|---|
| 49 | ;; This jmps to a stub function to packetize the buf for GDB |
|---|
| 50 | jmpf gdb_write |
|---|
| 51 | ;; Application int read(char *buf, int nbytes) |
|---|
| 52 | jmpf gdb_read |
|---|
| 53 | |
|---|
| 54 | .text |
|---|
| 55 | # Reset code, set up memory and call main. |
|---|
| 56 | _int_reset: |
|---|
| 57 | ;; Set up the application stack pointer. |
|---|
| 58 | mov sp,#0x002 |
|---|
| 59 | |
|---|
| 60 | ;; Zero the data space |
|---|
| 61 | mov r0,#_edata |
|---|
| 62 | mov r1,#_end |
|---|
| 63 | mov r2,#0 |
|---|
| 64 | 0: mov.w (r0++),r2 |
|---|
| 65 | blt r0,r1,0b |
|---|
| 66 | |
|---|
| 67 | ;; Init the UART |
|---|
| 68 | callf uart_init |
|---|
| 69 | |
|---|
| 70 | ;; Turn on illegal insn trap |
|---|
| 71 | mov r0,r14 |
|---|
| 72 | set1 r0,#11 |
|---|
| 73 | mov r14,r0 |
|---|
| 74 | mov.b 0x7f08,#0x11 |
|---|
| 75 | mov.b 0x7f09,#0x10 |
|---|
| 76 | |
|---|
| 77 | ;; "breakpoint" sends us into stub. |
|---|
| 78 | 0: |
|---|
| 79 | .hword 0x0006 |
|---|
| 80 | br 0b |
|---|
| 81 | |
|---|
| 82 | _int_sys: |
|---|
| 83 | push r13 |
|---|
| 84 | mov r13,#registers |
|---|
| 85 | mov.w (r13++),r0 |
|---|
| 86 | mov.w (r13++),r1 |
|---|
| 87 | mov.w (r13++),r2 |
|---|
| 88 | mov.w (r13++),r3 |
|---|
| 89 | mov.w (r13++),r4 |
|---|
| 90 | mov.w (r13++),r5 |
|---|
| 91 | mov.w (r13++),r6 |
|---|
| 92 | mov.w (r13++),r7 |
|---|
| 93 | mov r0,r8 |
|---|
| 94 | mov.w (r13++),r0 |
|---|
| 95 | mov r0,r9 |
|---|
| 96 | mov.w (r13++),r0 |
|---|
| 97 | mov r0,r10 |
|---|
| 98 | mov.w (r13++),r0 |
|---|
| 99 | mov r0,r11 |
|---|
| 100 | mov.w (r13++),r0 |
|---|
| 101 | mov r0,r12 |
|---|
| 102 | mov.w (r13++),r0 |
|---|
| 103 | pop r0 |
|---|
| 104 | mov.w (r13++),r0 ; R13 |
|---|
| 105 | pop r0 |
|---|
| 106 | mov.w (r13++),r0 ; PSW |
|---|
| 107 | mov r0,r15 |
|---|
| 108 | sub r0,#4 |
|---|
| 109 | mov.w (r13++),r0 ; SP |
|---|
| 110 | pop r0 |
|---|
| 111 | pop r1 |
|---|
| 112 | mov.w (r13++),r1 ; PCL |
|---|
| 113 | mov.w (r13++),r0 ; PCH |
|---|
| 114 | |
|---|
| 115 | ;; switch to stub stack and invoke stub |
|---|
| 116 | mov sp,#0x700 |
|---|
| 117 | callf handle_exception |
|---|
| 118 | |
|---|
| 119 | mov r0,#registers+34 |
|---|
| 120 | mov.w r1,(r0) ; PCH |
|---|
| 121 | mov.w r2,(--r0) ; PCL |
|---|
| 122 | mov.w r3,(--r0) ; SP |
|---|
| 123 | mov r15,r3 |
|---|
| 124 | push r2 |
|---|
| 125 | push r1 |
|---|
| 126 | mov.w r1,(--r0) ; PSW |
|---|
| 127 | push r1 |
|---|
| 128 | mov.w r1,(--r0) |
|---|
| 129 | mov r13,r1 |
|---|
| 130 | mov.w r1,(--r0) |
|---|
| 131 | mov r12,r1 |
|---|
| 132 | mov.w r1,(--r0) |
|---|
| 133 | mov r11,r1 |
|---|
| 134 | mov.w r1,(--r0) |
|---|
| 135 | mov r10,r1 |
|---|
| 136 | mov.w r1,(--r0) |
|---|
| 137 | mov r9,r1 |
|---|
| 138 | mov.w r1,(--r0) |
|---|
| 139 | mov r8,r1 |
|---|
| 140 | mov.w r7,(--r0) |
|---|
| 141 | mov.w r6,(--r0) |
|---|
| 142 | mov.w r5,(--r0) |
|---|
| 143 | mov.w r4,(--r0) |
|---|
| 144 | mov.w r3,(--r0) |
|---|
| 145 | mov.w r2,(--r0) |
|---|
| 146 | mov.w r1,(--r0) |
|---|
| 147 | mov.w r0,(--r0) |
|---|
| 148 | iret |
|---|
| 149 | 1: .size _int_sys,1b-_int_sys |
|---|
| 150 | |
|---|
| 151 | |
|---|