[444] | 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 | |
---|