nkeynes@185: .section .text nkeynes@185: .global start nkeynes@185: .global ___exit nkeynes@185: .global _atexit nkeynes@185: start: nkeynes@185: mov.l setup_cache_k,r0 nkeynes@185: mov.l p2_mask,r1 nkeynes@185: or r1,r0 nkeynes@185: jmp @r0 nkeynes@185: nop nkeynes@185: setup_cache: nkeynes@185: mov.l ccr_addr,r0 nkeynes@185: mov.w ccr_data,r1 nkeynes@185: mov.l r1,@r0 nkeynes@185: mov.l start_2_k,r0 nkeynes@185: nop nkeynes@185: nop nkeynes@185: nop nkeynes@185: nop nkeynes@185: nop nkeynes@185: nop nkeynes@185: nop nkeynes@185: jmp @r0 nkeynes@185: nop nkeynes@185: start_2: nkeynes@185: mov.l old_stack_k,r14 nkeynes@185: mov.l r15,@r14 nkeynes@185: mov.l old_pr_k,r14 nkeynes@185: sts pr,r15 nkeynes@185: mov.l r15,@r14 nkeynes@185: mov.l stack_k,r15 nkeynes@185: nkeynes@185: ! zero out bss nkeynes@185: mov.l edata_k,r0 nkeynes@185: mov.l end_k,r1 nkeynes@185: mov #0,r2 nkeynes@185: start_l: nkeynes@185: mov.l r2,@r0 nkeynes@185: add #4,r0 nkeynes@185: cmp/ge r0,r1 nkeynes@185: bt start_l nkeynes@185: nkeynes@185: #if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY) nkeynes@185: mov.l set_fpscr_k, r1 nkeynes@185: jsr @r1 nkeynes@185: mov #0,r4 nkeynes@185: lds r3,fpscr nkeynes@185: #endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) */ nkeynes@185: nkeynes@185: ! call the mainline nkeynes@185: mov.l main_k,r0 nkeynes@185: jsr @r0 nkeynes@185: or r0,r0 nkeynes@185: nkeynes@185: ! call exit nkeynes@185: mov r0,r4 nkeynes@185: mov.l exit_k,r0 nkeynes@185: jsr @r0 nkeynes@185: or r0,r0 nkeynes@185: nkeynes@185: ___exit: nkeynes@185: mov.l old_pr_k,r14 nkeynes@185: mov.l @r14,r15 nkeynes@185: lds r15,pr nkeynes@185: mov.l old_stack_k,r14 nkeynes@185: mov.l @r14,r15 nkeynes@185: rts nkeynes@185: nop nkeynes@185: nkeynes@185: _atexit: nkeynes@185: rts nkeynes@185: nop nkeynes@185: nkeynes@185: .align 4 nkeynes@185: #if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) nkeynes@185: set_fpscr_k: nkeynes@185: .long ___set_fpscr nkeynes@185: #endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(SH4_SINGLE_ONLY) */ nkeynes@185: stack_k: nkeynes@185: .long _stack nkeynes@185: edata_k: nkeynes@185: .long _edata nkeynes@185: end_k: nkeynes@185: .long _end nkeynes@185: main_k: nkeynes@185: .long _main nkeynes@185: exit_k: nkeynes@185: .long _exit nkeynes@185: nkeynes@185: old_stack_k: nkeynes@185: .long _old_stack nkeynes@185: old_pr_k: nkeynes@185: .long _old_pr nkeynes@185: nkeynes@185: _old_stack: nkeynes@185: .long 0 nkeynes@185: _old_pr: nkeynes@185: .long 0 nkeynes@185: nkeynes@185: setup_cache_k: nkeynes@185: .long setup_cache nkeynes@185: start_2_k: nkeynes@185: .long start_2 nkeynes@185: p2_mask: nkeynes@185: .long 0xa0000000 nkeynes@185: ccr_addr: nkeynes@185: .long 0xff00001c nkeynes@185: ccr_data: nkeynes@185: .word 0x090b nkeynes@185: nkeynes@185: .align 4 nkeynes@185: nkeynes@185: #ifdef __ELF__ nkeynes@185: .section .stack,"aw" nkeynes@185: #else nkeynes@185: .section .stack nkeynes@185: #endif nkeynes@185: ! _stack: .long 0xdeaddead nkeynes@185: