diff --git a/trunk/bootrom/build/libraries/init/ARM11/crt0.c b/trunk/bootrom/build/libraries/init/ARM11/crt0.c index cd64e37..a735555 100644 --- a/trunk/bootrom/build/libraries/init/ARM11/crt0.c +++ b/trunk/bootrom/build/libraries/init/ARM11/crt0.c @@ -34,19 +34,21 @@ asm void _start( void ) CODE32 // for _start reference - INASM_EXTERN( STUPi_StartHandler ) - INASM_EXTERN( STUPi_SwiHandler ) - INASM_EXTERN( STUPi_IrqHandler ) - INASM_EXTERN( STUPi_DbgHandler ) + INASM_EXTERN( STUPi_IrqVeneer ) + INASM_EXTERN( STUPi_FiqVeneer ) + INASM_EXTERN( STUPi_SwiVeneer ) + INASM_EXTERN( STUPi_UndefInstVeneer ) + INASM_EXTERN( STUPi_PrefetchAbortVeneer ) + INASM_EXTERN( STUPi_DataAbortVeneer ) b stupStartHandlerVeneer // don't change for NULL access compatibility -undef b STUPi_DbgHandler -swi b STUPi_SwiHandler -iabt b STUPi_DbgHandler -dabt b STUPi_DbgHandler +undef b STUPi_UndefInstVeneer +swi b STUPi_SwiVeneer +iabt b STUPi_PrefetchAbortVeneer +dabt b STUPi_DataAbortVeneer reserve b reserve -irq b STUPi_IrqHandler -fiq b STUPi_DbgHandler +irq b STUPi_IrqVeneer +fiq b STUPi_FiqVeneer stupStartHandlerVeneer @@ -72,6 +74,9 @@ LSYM(10) b BSYM(10) core0_start + + INASM_EXTERN( STUPi_StartHandler ) + b STUPi_StartHandler } diff --git a/trunk/bootrom/build/libraries/init/ARM9/crt0.c b/trunk/bootrom/build/libraries/init/ARM9/crt0.c index 3200320..e8f5f7c 100644 --- a/trunk/bootrom/build/libraries/init/ARM9/crt0.c +++ b/trunk/bootrom/build/libraries/init/ARM9/crt0.c @@ -34,21 +34,26 @@ asm void _start( void ) CODE32 // for _start reference - INASM_EXTERN( STUPi_StartHandler ) - INASM_EXTERN( STUPi_SwiHandler ) - INASM_EXTERN( STUPi_IrqHandler ) - INASM_EXTERN( STUPi_DbgHandler ) + INASM_EXTERN( STUPi_IrqVeneer ) + INASM_EXTERN( STUPi_FiqVeneer ) + INASM_EXTERN( STUPi_SwiVeneer ) + INASM_EXTERN( STUPi_UndefInstVeneer ) + INASM_EXTERN( STUPi_PrefetchAbortVeneer ) + INASM_EXTERN( STUPi_DataAbortVeneer ) b stupStartHandlerVeneer // don't change for NULL access compatibility -undef b STUPi_DbgHandler -swi b STUPi_SwiHandler -iabt b STUPi_DbgHandler -dabt b STUPi_DbgHandler +undef b STUPi_UndefInstVeneer +swi b STUPi_SwiVeneer +iabt b STUPi_PrefetchAbortVeneer +dabt b STUPi_DataAbortVeneer reserve b reserve -irq b STUPi_IrqHandler -fiq b STUPi_DbgHandler +irq b STUPi_IrqVeneer +fiq b STUPi_FiqVeneer stupStartHandlerVeneer + + INASM_EXTERN( STUPi_StartHandler ) + b STUPi_StartHandler DCD 0 diff --git a/trunk/bootrom/build/libraries/init/common/crt0_excp.c b/trunk/bootrom/build/libraries/init/common/crt0_excp.c index a0e96e8..e80e4bb 100644 --- a/trunk/bootrom/build/libraries/init/common/crt0_excp.c +++ b/trunk/bootrom/build/libraries/init/common/crt0_excp.c @@ -40,25 +40,97 @@ dbg_m } /*---------------------------------------------------------------------------* - Name: STUPi_IrqHandler + Name: STUPi_IrqVeneer - Description: IRQ handler + Description: IRQ veneer Arguments: None Returns: None. *---------------------------------------------------------------------------*/ -asm void STUPi_IrqHandler( void ) +asm void STUPi_IrqVeneer( void ) { -#ifdef SDK_ARM9 - mrc p15, 0, r0, c9, c1, 0 // DTCMアドレス獲得 - mov r0, r0, lsr #HW_C9_TCMR_BASE_SHIFT - mov r0, r0, lsl #HW_C9_TCMR_BASE_SHIFT - add r0, r0, #HW_DTCM_SIZE -#endif // SDK_ARM9 + ldr pc, =HW_INTR_VENEER_BUF -irq_m - b irq_m + LTORG +} + +/*---------------------------------------------------------------------------* + Name: STUPi_FiqVeneer + + Description: FIQ veneer + + Arguments: None + + Returns: None. + *---------------------------------------------------------------------------*/ +asm void STUPi_FiqVeneer( void ) +{ + ldr pc, =HW_FIQ_VENEER_BUF + + LTORG +} + +/*---------------------------------------------------------------------------* + Name: STUPi_PrefetchAbortVeneer + + Description: Prefetch Abort veneer + + Arguments: None + + Returns: None. + *---------------------------------------------------------------------------*/ +asm void STUPi_PrefetchAbortVeneer( void ) +{ + ldr pc, =HW_IABT_VENEER_BUF + + LTORG +} + +/*---------------------------------------------------------------------------* + Name: STUPi_DataAbortVeneer + + Description: Data Abort veneer + + Arguments: None + + Returns: None. + *---------------------------------------------------------------------------*/ +asm void STUPi_DataAbortVeneer( void ) +{ + ldr pc, =HW_DABT_VENEER_BUF + + LTORG +} + +/*---------------------------------------------------------------------------* + Name: STUPi_UndefInstVeneer + + Description: Undefine Instruction veneer + + Arguments: None + + Returns: None. + *---------------------------------------------------------------------------*/ +asm void STUPi_UndefInstVeneer( void ) +{ + ldr pc, =HW_UDEF_VENEER_BUF + + LTORG +} + +/*---------------------------------------------------------------------------* + Name: STUPi_SwiVeneer + + Description: SWI veneer + + Arguments: None + + Returns: None. + *---------------------------------------------------------------------------*/ +asm void STUPi_SwiVeneer( void ) +{ + ldr pc, =HW_SWI_VENEER_BUF LTORG } @@ -94,10 +166,9 @@ asm void STUPi_SwiHandler( void ) adr r11, SWI_Table // システムコールアドレス 取得 ldrh r12, [r11, r12] -#ifdef SDK_ARM9 - ldr r11, =HW_BIOS + + ldr r11, =HW_BROM orr r12, r12, r11 -#endif // SDK_ARM9 mrs r11, spsr // SVCモード SPSR退避(合計4ワード) stmfd sp!, {r11} @@ -107,12 +178,7 @@ asm void STUPi_SwiHandler( void ) msr cpsr_cxsf,r11 stmfd sp!, {r2, lr} // システムモード レジスタ退避(2ワード) -#ifdef SDK_ARM9 blx r12 -#else // SDK_ARM7 - adr lr, swi_return - bx r12 -#endif // SDK_ARM7 swi_return ldmfd sp!, {r2, lr} // システムモード レジスタ復帰 diff --git a/trunk/bootrom/include/brom/hw/ARM11/mmap_axi_wram.h b/trunk/bootrom/include/brom/hw/ARM11/mmap_axi_wram.h index fd78ca1..759227b 100644 --- a/trunk/bootrom/include/brom/hw/ARM11/mmap_axi_wram.h +++ b/trunk/bootrom/include/brom/hw/ARM11/mmap_axi_wram.h @@ -17,6 +17,7 @@ #ifndef BROM_HW_ARM11_AXI_WRAM_H_ #define BROM_HW_ARM11_AXI_WRAM_H_ +#include #ifdef __cplusplus extern "C" { diff --git a/trunk/bootrom/include/brom/hw/common/mmap_shared.h b/trunk/bootrom/include/brom/hw/common/mmap_shared.h index ea177d8..fd8df15 100644 --- a/trunk/bootrom/include/brom/hw/common/mmap_shared.h +++ b/trunk/bootrom/include/brom/hw/common/mmap_shared.h @@ -17,29 +17,7 @@ #ifndef BROM_HW_COMMON_MMAP_SHARED_H_ #define BROM_HW_COMMON_MMAP_SHARED_H_ -#ifdef __cplusplus -extern "C" { -#endif +#include -//---------------------------------------------------------------------- -// MEMORY MAP of SYSTEM SHARED AREA -//---------------------------------------------------------------------- - -#define HW_AXI_WRAM_SHARED (HW_AXI_WRAM_SHARED_END - HW_AXI_WRAM_SHARED_SIZE) -#define HW_AXI_WRAM_SHARED_END (HW_MAIN_MEM) -#define HW_AXI_WRAM_SHARED_SIZE (HW_AXI_WRAM_SHARED_SYS_SIZE + HW_AXI_WRAM_SHARED_USR_SIZE) // 8KB - -#define HW_AXI_WRAM_SHARED_USR (HW_AXI_WRAM_SHARED_USR_END - HW_AXI_WRAM_SHARED_USR_SIZE) -#define HW_AXI_WRAM_SHARED_USR_END HW_AXI_WRAM_SHARED_END -#define HW_AXI_WRAM_SHARED_USR_SIZE 0x1000 // 4KB - -#define HW_AXI_WRAM_SHARED_SYS (HW_AXI_WRAM_SHARED_SYS_END - HW_AXI_WRAM_SHARED_SIZE) -#define HW_AXI_WRAM_SHARED_SYS_END HW_AXI_WRAM_SHARED_USR -#define HW_AXI_WRAM_SHARED_SYS_SIZE 0x1000 // 4KB - - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* BROM_HW_COMMON_MMAP_SHARED_H_ */ #endif diff --git a/trunk/bootrom/include/brom/memorymap.h b/trunk/bootrom/include/brom/memorymap.h index a9e8d0b..cf03453 100644 --- a/trunk/bootrom/include/brom/memorymap.h +++ b/trunk/bootrom/include/brom/memorymap.h @@ -21,20 +21,20 @@ extern "C" { #endif -#ifdef SDK_ARM9 +#include + +#ifdef SDK_ARM11 +#include +#include +#include + +#else //SDK_ARM9 #include #include #include -#else //SDK_ARM11 -#include -#include -#include -#include #endif -#include - #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h b/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h new file mode 100644 index 0000000..04487a0 --- /dev/null +++ b/trunk/include/ctr/hw/ARM11/mmap_axi_wram.h @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------* + Project: CtrFirm - HW - include + File: mmap_axi_wram.h + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ +#ifndef CTR_HW_ARM11_AXI_WRAM_H_ +#define CTR_HW_ARM11_AXI_WRAM_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +//---- system reserved area +#define HW_AXI_WRAM_SYSRV HW_AXI_WRAM_SHARED_SYS_A11 +#define HW_AXI_WRAM_SYSRV_END HW_AXI_WRAM_SHARED_SYS_A11_END +#define HW_AXI_WRAM_SYSRV_SIZE HW_AXI_WRAM_SHARED_SYS_A11_SIZE + +//---- offset in system reserved area +// FCRAMまで命令プリフェッチしないように注意(MPCoreは8段パイプライン) +#define HW_AXI_WRAM_SYSRV_OFS_INTR_VENEER 0x00 +#define HW_AXI_WRAM_SYSRV_OFS_FIQ_VENEER 0x08 +#define HW_AXI_WRAM_SYSRV_OFS_SWI_VENEER 0x10 +#define HW_AXI_WRAM_SYSRV_OFS_UDEF_VENEER 0x18 +#define HW_AXI_WRAM_SYSRV_OFS_IABT_VENEER 0x20 +#define HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER 0x28 +#define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0 0x58 +#define HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1 0x5c + +//---- system reserved area +#define HW_INTR_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_VENEER) +#define HW_FIQ_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_FIQ_VENEER) +#define HW_SWI_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_SWI_VENEER) +#define HW_IABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_IABT_VENEER) +#define HW_DABT_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_DABT_VENEER) +#define HW_UDEF_VENEER_BUF (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_UDEF_VENEER) +#define HW_INTR_CHECK0_PTR (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK0) +#define HW_INTR_CHECK1_PTR (HW_AXI_WRAM_SYSRV + HW_AXI_WRAM_SYSRV_OFS_INTR_CHECK1) + + +#ifdef __cplusplus +} /* extern "C" */ +#endif +/* CTR_HW_ARM11_AXI_WRAM_H_ */ +#endif diff --git a/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h b/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h new file mode 100644 index 0000000..c4ff89d --- /dev/null +++ b/trunk/include/ctr/hw/ARM9/mmap_prv_wram.h @@ -0,0 +1,54 @@ +/*---------------------------------------------------------------------------* + Project: CtrFirm - HW - include + File: mmap_axi_wram.h + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ +#ifndef CTR_HW_ARM9_PRV_WRAM_H_ +#define CTR_HW_ARM9_PRV_WRAM_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +//---- system reserved area +#define HW_PRV_WRAM_SYSRV HW_PRV_WRAM +#define HW_PRV_WRAM_SYSRV_END (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_SIZE) +#define HW_PRV_WRAM_SYSRV_SIZE 0x40 // 64B + +//---- offset in system reserved area +#define HW_PRV_WRAM_SYSRV_OFS_INTR_VENEER 0x00 +#define HW_PRV_WRAM_SYSRV_OFS_FIQ_VENEER 0x08 +#define HW_PRV_WRAM_SYSRV_OFS_SWI_VENEER 0x10 +#define HW_PRV_WRAM_SYSRV_OFS_UDEF_VENEER 0x18 +#define HW_PRV_WRAM_SYSRV_OFS_IABT_VENEER 0x20 +#define HW_PRV_WRAM_SYSRV_OFS_DABT_VENEER 0x28 +#define HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK 0x3c + +//---- system reserved area +#define HW_INTR_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_INTR_VENEER) +#define HW_FIQ_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_FIQ_VENEER) +#define HW_SWI_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_SWI_VENEER) +#define HW_IABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_IABT_VENEER) +#define HW_DABT_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_DABT_VENEER) +#define HW_UDEF_VENEER_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_UDEF_VENEER) +#define HW_INTR_CHECK_BUF (HW_PRV_WRAM_SYSRV + HW_PRV_WRAM_SYSRV_OFS_INTR_CHECK) + + +#ifdef __cplusplus +} /* extern "C" */ +#endif +/* CTR_HW_ARM9_PRV_WRAM_H_ */ +#endif diff --git a/trunk/include/ctr/hw/common/mmap_shared.h b/trunk/include/ctr/hw/common/mmap_shared.h new file mode 100644 index 0000000..63782e0 --- /dev/null +++ b/trunk/include/ctr/hw/common/mmap_shared.h @@ -0,0 +1,49 @@ +/*---------------------------------------------------------------------------* + Project: CtrFirm - HW - include + File: mmap_shared.h + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ +#ifndef CTR_HW_COMMON_MMAP_SHARED_H_ +#define CTR_HW_COMMON_MMAP_SHARED_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +//---------------------------------------------------------------------- +// MEMORY MAP of SYSTEM SHARED AREA +//---------------------------------------------------------------------- + +#define HW_AXI_WRAM_SHARED (HW_AXI_WRAM_SHARED_END - HW_AXI_WRAM_SHARED_SIZE) +#define HW_AXI_WRAM_SHARED_END (HW_AXI_WRAM_END) +#define HW_AXI_WRAM_SHARED_SIZE (HW_AXI_WRAM_SHARED_SYS_SIZE + HW_AXI_WRAM_SHARED_USR_SIZE) // 8KB + +#define HW_AXI_WRAM_SHARED_SYS (HW_AXI_WRAM_SHARED_SYS_END - HW_AXI_WRAM_SHARED_SIZE) +#define HW_AXI_WRAM_SHARED_SYS_END HW_AXI_WRAM_SHARED_END +#define HW_AXI_WRAM_SHARED_SYS_SIZE 0x1000 // 4KB + +#define HW_AXI_WRAM_SHARED_SYS_A11 (HW_AXI_WRAM_SHARED_SYS_A11_END - HW_AXI_WRAM_SHARED_SYS_A11_SIZE) +#define HW_AXI_WRAM_SHARED_SYS_A11_END HW_AXI_WRAM_SHARED_SYS_END +#define HW_AXI_WRAM_SHARED_SYS_A11_SIZE 0x60 // 96B + +#define HW_AXI_WRAM_SHARED_USR (HW_AXI_WRAM_SHARED_USR_END - HW_AXI_WRAM_SHARED_USR_SIZE) +#define HW_AXI_WRAM_SHARED_USR_END HW_AXI_WRAM_SHARED_SYS +#define HW_AXI_WRAM_SHARED_USR_SIZE 0x1000 // 4KB + + +#ifdef __cplusplus +} /* extern "C" */ +#endif +/* CTR_HW_COMMON_MMAP_SHARED_H_ */ +#endif diff --git a/trunk/include/ctr/memorymap.h b/trunk/include/ctr/memorymap.h new file mode 100644 index 0000000..b2992a1 --- /dev/null +++ b/trunk/include/ctr/memorymap.h @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------------* + Project: CtrBrom - include - HW + File: memorymap.h + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ +#ifndef FIRM_MEMORYMAP_H_ +#define FIRM_MEMORYMAP_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef SDK_ARM11 +#include +#include + +#else //SDK_ARM9 +#include + +#endif + +#include +#include + +#ifdef __cplusplus +} /* extern "C" */ +#endif +/* FIRM_MEMORYMAP_H_ */ +#endif diff --git a/trunk/include/ctr/memorymap_sp.h b/trunk/include/ctr/memorymap_sp.h new file mode 100644 index 0000000..f46e755 --- /dev/null +++ b/trunk/include/ctr/memorymap_sp.h @@ -0,0 +1,23 @@ +/*---------------------------------------------------------------------------* + Project: CtrFirm - include - HW + File: memorymap_sp.h + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ +#ifndef SDK_ARM9 +#define SDK_ARM9 +#endif +#ifdef SDK_ARM11 +#undef SDK_ARM11 +#endif +#include