diff options
Diffstat (limited to 'libgloss/xstormy16/crt0.s')
-rw-r--r-- | libgloss/xstormy16/crt0.s | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/libgloss/xstormy16/crt0.s b/libgloss/xstormy16/crt0.s deleted file mode 100644 index f8adb98..0000000 --- a/libgloss/xstormy16/crt0.s +++ /dev/null @@ -1,114 +0,0 @@ -# XSTORMY16 startup code - -# 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 - -# Reset code, set up memory and call main. - .section .rodata -2: .word __rdata - .text -_int_reset: - ;; Set up the stack pointer. - mov r0,#__stack - bz r0,#0,0f - mov sp,r0 -0: - ;; Zero the data space - mov r0,#_edata - mov r1,#_end - mov r2,#0 -0: mov.w (r0++),r2 - blt r0,r1,0b - - ;; Copy data from ROM into RAM. ROM area may be above 64k, - ;; but RAM may not. - mov r1,#__data - mov r3,#_edata - mov r4,#2b - mov.w r0,(r4++) - mov.w r2,(r4) - mov r8,r2 - ;; If _data == _rdata there's no need to copy anything. - bnz r0,r1,0f - bz r2,#0,1f -0: movf.w r2,(r0++) - bnz r0,#0,2f - add r8,#1 -2: mov.w (r1++),r2 - blt r1,r3,0b -1: - ;; Call hardware init routine - callf _hwinit - ;; Call initialization routines - callf _init - ;; Set up fini routines to be called from exit - mov r2,#@fptr(_fini) - callf atexit - ;; Call main() with empty argc/argv/envp - mov r2,#0 - mov r3,#0 - mov r4,#0 - callf main - ;; Exit. - callf exit - ;; Should never reach this code. - halt -1: .size _int_reset,1b-_int_reset - -# Stub interrupt routines. - .globl _int_timer0 - .weak _int_timer0 - .globl _int_timer1 - .weak _int_timer1 - .globl _int_sio0 - .weak _int_sio0 - .globl _int_sio1 - .weak _int_sio1 - .globl _int_port0 - .weak _int_port0 - .globl _int_port1 - .weak _int_port1 - .globl _int_basetimer - .weak _int_basetimer -_int_timer0: -_int_timer1: -_int_sio0: -_int_sio1: -_int_port0: -_int_port1: -_int_basetimer: - iret -1: .size _int_timer0,1b-_int_timer0 - -# Stub hardware init - .globl _hwinit - .weak _hwinit -_hwinit: - ret -1: .size _hwinit,1b-_hwinit - -# The first word in .data has address 0, so it's not a good -# idea to use it as its address conflicts with NULL. -# Place a HALT instruction there to try to catch NULL pointer -# dereferences. - .data - halt |