JuiceBox Code Test Startup

// file: crt0.s

.global main                   // int main(void)

.global _etext                 // -> .data initial values in ROM .global _data                  // -> .data area in RAM .global _edata                 // end of .data area .global __bss_start            // -> .bss area in RAM .global __bss_end__            // end of .bss area .global _stack                 // top of stack

// Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs .set MODE_USR, 0x10            // User Mode .set MODE_FIQ, 0x11            // FIQ Mode .set MODE_IRQ, 0x12            // IRQ Mode .set MODE_SVC, 0x13            // Supervisor Mode .set MODE_ABT, 0x17            // Abort Mode .set MODE_UND, 0x1B            // Undefined Mode .set MODE_SYS, 0x1F            // System Mode

.equ I_BIT, 0x80               // when I bit is set, IRQ is disabled .equ F_BIT, 0x40               // when F bit is set, FIQ is disabled

.text .code 32 .align 2

// Setup the operating mode & stack. // -   .global _start, start, _mainCRTStartup .func  _start

_start: start: _mainCRTStartup:

mrs  r0,cpsr                   // get PSR orr  r0,r0,#I_BIT|F_BIT        // disable IRQ and FIQ msr  cpsr,r0                   // set up status register

ldr  r0,=_stack mov  sp,r0

// Clear .bss // --

mov  r0,#0                     // get a zero ldr  r1,=__bss_start           // -> bss start ldr  r2,=__bss_end__           // -> bss end 2: cmp   r1,r2                     // check if data to clear strlo r0,[r1],#4               // clear 4 bytes blo  2b                        // loop until done

ldr  r1,=main mov  lr,pc bx   r1                       // enter main

.size  _start,. - _start .endfunc

.end