| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /*
- * Copyright (C) 2004 by egnite Software GmbH. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * For additional information see http://www.ethernut.de/
- *
- */
- /*
- * $Log$
- * Revision 1.3 2005/07/26 16:19:40 haraldkipp
- * Run Nut/OS in user mode.
- *
- * Revision 1.2 2004/11/08 18:10:45 haraldkipp
- * Interrupt handling removed.
- *
- * Revision 1.1 2004/10/17 15:14:21 haraldkipp
- * Added Nintendo Game Boy Advance with Xport 2.0 from Charmed Labs.
- *
- */
- .section .text,"ax"
- .global _reset
- _reset:
- /*
- * Nintendo ROM Header
- */
- rom_header:
- b rom_header_end
- /*
- * 156 bytes compressed bitmap of Nintendo logo. The BIOS
- * will compare this with an internal copy and lock the
- * GBA if they differ.
- */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x04..0x0F */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x10..0x1F */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x20..0x2F */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x30..0x3F */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x40..0x4F */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x50..0x5F */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x60..0x6F */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x70..0x7F */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x80..0x8F */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* 0x90..0x9B */
- .byte 0 /* If bits 2 and 7 are set, enables BIOS FIQ/Undef handler. */
- .byte 0 /* Bits 0 and 1 are used for the cartridge key. */
- .byte 0
- .byte 0
- /* Game title, 12 uppercase characters. */
- .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- /* 4 characters game code. */
- .byte 0, 0, 0, 0x00
- /* 2 characters maker code, "01" for Nintendo. */
- .byte 0x30, 0x31
- /* Fixed value, must be 0x96. */
- .byte 0x96
- /* Main unit code, 0 for GBA. */
- .byte 0x00
- /* Device type, used by the debugging handler. */
- .byte 0x00
- /* 7 bytes reserved area. */
- .byte 0, 0, 0, 0, 0, 0, 0
- /* Software version, usually zero. */
- .byte 0x00
- /* Header checksum. */
- .byte 0xF0
- /* 2 byte checksum. */
- .byte 0, 0
- /*
- * Multiboot Header
- */
- rom_header_end:
- b _start
- /*
- * Boot method, set by the BIOS:
- * - 1 = joybus mode
- * - 2 = normal mode
- * - 3 = multiboot mode
- */
- .byte 0
- /*
- * Slave ID, set to 1..3 by the BIOS in multiboot mode.
- * In normal mode this is set to 1.
- */
- .byte 0
- /* Reserved area of 26 bytes. */
- .byte 0
- .byte 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .word 0
- .extern main
- .arm
- .align
- .global _start
- _start:
- /* Switch to IRQ mode and set IRQ stack pointer. */
- mov r0, #0x12
- msr cpsr, r0
- ldr sp, =__sp_irq
- /* Switch to user mode and set user stack pointer. */
- mov r0, #0x10
- msr cpsr, r0
- ldr sp, =__sp_usr
- /* Enter Thumb mode */
- adr r0, _enter_thumb + 1
- bx r0
- .thumb
- _enter_thumb:
- /* Initialize data segment. */
- ldr r1, =__rom_data_start
- ldr r2, =__ram_data_start
- ldr r4, =__ram_data_end
- sub r3, r4, r2
- beq enter_main
- copy_data:
- ldmia r1!, {r0}
- stmia r2!, {r0}
- sub r3, #4
- bne copy_data
- enter_main:
- ldr r0, =NutInit
- bx r0
- exit_loop:
- b exit_loop
- .end
|