/********************************************************************************* * File : reset.s * Author : Alain Greiner * Date : 28/08/2006 ********************************************************************************* * This is a minimal boot code : * - It initializes the Status Register (SR) * - It defines the stack size and initializes the stack pointer ($29) * - It initializes the global pointer ($28) that is used by GCC to * optimize acces to the global variables. * - It initializes the EPC register, and jump to the main address *********************************************************************************/ .section .reset,"ax",@progbits .extern seg_stack_base .extern seg_data_base .extern main .globl reset /* makes reset an external symbol */ .ent reset .func reset .align 2 reset: .set noreorder /* initializes SR register */ li $26, 0x00000013 mtc0 $26, $12 /* initializes stack pointer */ la $29, seg_stack_base addiu $29, $29, 0x4000 /* initializes global pointer */ la $28, seg_data_base /* jump to main in kernel mode */ la $26, main mtc0 $26, $14 eret .end reset .size reset, .-reset .set reorder