add os_system.c.

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@94 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
nakasima 2008-12-09 09:06:48 +00:00
parent be841b8c48
commit 601d1952d8
4 changed files with 243 additions and 2 deletions

View File

@ -28,11 +28,14 @@ BROM_CODEGEN_ALL ?= TRUE
SRCDIR = . ../common
SRCS = \
os_irqHandler.c \
os_system.c \
os_timer.c \
os_irqHandler.c \
os_interrupt.c \
os_interrupt_common.c \
# os_init.c \
TARGET_LIB = libos$(BROM_LIBSUFFIX).a
include $(CTRBROM_ROOT)/build/buildtools/commondefs

View File

@ -31,12 +31,15 @@ BROM_PROC = ARM9
SRCDIR = . ../common
SRCS = \
os_irqHandler.c \
os_system.c \
os_timer.c \
os_tick.c \
os_irqHandler.c \
os_interrupt.c \
os_interrupt_common.c \
# os_init.c \
TARGET_LIB = libos_sp$(BROM_LIBSUFFIX).a

View File

@ -0,0 +1,111 @@
/*---------------------------------------------------------------------------*
Project: CtrBrom - libraries - OS
File: os_init.c
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$
*---------------------------------------------------------------------------*/
#include <brom/os.h>
//#define BROM_DEBUG_ITCM
#define FIRM_ENABLE_JTAG_AT_INIT
/*---------------------------------------------------------------------------*
Name: osInitBROM
Description: initialize sdk os for bootrom
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void osInitBROM(void)
{
#ifdef SDK_ARM9
#ifdef BROM_DEBUG_ITCM
MI_CpuFillFast( (void*)HW_ITCM, 0, HW_ITCM_SIZE );
#endif // BROM_DEBUG_ITCM
#else // SDK_ARM7
//---- Init Exception System
// the exception vecter of ARM9 is in the noninitialized main memory.
osInitException();
#endif // SDK_ARM7
//---- Init Interrupt
osInitInterrupt();
}
/*---------------------------------------------------------------------------*
Name: osInit
Description: initialize sdk os
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void osInit(void)
{
#ifdef SDK_ARM7
// Enable JTAG
#ifdef FIRM_ENABLE_JTAG_AT_INIT
OSi_EnableCpuJTAG();
#endif // FIRM_ENABLE_JTAG_AT_INIT
#endif // SDK_ARM7
//---- Init Exception System
osInitException();
//---- Init Interrupt
osInitInterrupt();
}
#ifdef SDK_ARM9
/*---------------------------------------------------------------------------*
Name: OSi_EnableCpuJTAG
Description: enable jtag of cpu
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void OSi_EnableCpuJTAG(void)
{
reg_CFG_CPU_JTAG = REG_CFG_CPU_JTAG_E_MASK | REG_CFG_CPU_JTAG_A7_MASK;
}
/*---------------------------------------------------------------------------*
Name: OSi_EnableDspJTAG
Description: enable jtag of dsp
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void OSi_EnableDspJTAG(void)
{
reg_CFG_DSP_JTAG = REG_CFG_DSP_JTAG_E_MASK;
}
#endif // SDK_ARM9

View File

@ -0,0 +1,124 @@
/*---------------------------------------------------------------------------*
Project: CtrBrom - libraries - OS
File: os_system.c
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$
*---------------------------------------------------------------------------*/
#include <brom/os.h>
#define osTPrintf(...) ((void)0)
//============================================================================
// PROCESSER MODE
//============================================================================
/*---------------------------------------------------------------------------*
Name: i_osGetProcMode
Description: Get processor mode from CPSR
Arguments: None.
Returns: CPU processor mode (field 0x10-0x1f)
*---------------------------------------------------------------------------*/
#include <brom/code32.h>
ASM OSProcMode i_osGetProcMode( void )
{
mrs r0, cpsr
and r0, r0, #HW_PSR_CPU_MODE_MASK
bx lr
}
#include <brom/codereset.h>
//============================================================================
// WAIT
//============================================================================
/*---------------------------------------------------------------------------*
Name: i_osWaitCpuCycles
Description: Loop and Wait for specified CPU cycles at least
Arguments: cycles waiting CPU cycle
Returns: None
*---------------------------------------------------------------------------*/
#include <brom/code32.h>
ASM void i_osWaitCpuCycles( OSCpuCycle cycle )
{
sub r0, r0, #(6-2) // subtract call-return overhead and add the margin of 2 cycles
LSYM(1)
subs r0, r0, #4 // 1 cycle
bcs BSYM(1) // 3 cycle
bx lr
}
#include <brom/codereset.h>
//============================================================================
// TERMINATE and HALT
//============================================================================
/*---------------------------------------------------------------------------*
Name: i_osTerminate
Description: Halt CPU and loop
Arguments: None
Returns: -- (Never return)
*---------------------------------------------------------------------------*/
void i_osTerminate(void)
{
while (1)
{
(void)osDisableInterrupts();
i_osHalt();
}
}
/*---------------------------------------------------------------------------*
Name: i_osHalt
Description: Halt CPU
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
#include <brom/code32.h>
ASM void i_osHalt( void )
{
mov r0, #0
mcr p15, 0, r0, c7, c0, 4
bx lr
}
#include <brom/codereset.h>
/*---------------------------------------------------------------------------*
Name: i_osExit
Description: Display exit string and Terminate.
This is useful for 'loadrun' tool command.
Arguments: status : exit status
Returns: -- (Never return)
*---------------------------------------------------------------------------*/
void i_osExit(int status)
{
#ifdef SDK_FINALROM
#pragma unused( status )
#endif
(void)osDisableInterrupts();
osTPrintf("\n" OS_EXIT_STRING, status);
i_osTerminate();
}