mirror of
https://github.com/rvtr/twl_wrapsdk.git
synced 2025-10-31 06:11:10 -04:00
add HW_MAIN_MEM_HI and move HW_MAIN_MEM_SYSTEM.
fix interrupt func. git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@10 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
parent
4b22fa6465
commit
a8f3113969
@ -121,8 +121,10 @@ ifeq ($(TWL_CODEGEN_PROC),ARM9)
|
||||
|
||||
TWL_LIBS_BASE ?= \
|
||||
libos \
|
||||
libpxi \
|
||||
libmi \
|
||||
libvlink \
|
||||
libctrdg \
|
||||
|
||||
ifdef TWL_PROFILE_TYPE
|
||||
TWL_LIBS_BASE += libos.$(TWL_PROFILE_TYPE)
|
||||
@ -132,6 +134,7 @@ else # ($(TWL_CODEGEN_PROC),ARM7)
|
||||
|
||||
TWL_LIBS_BASE ?= \
|
||||
libos_sp \
|
||||
libpxi_sp \
|
||||
libmi_sp \
|
||||
libvlink_sp \
|
||||
libnvram_sp \
|
||||
|
||||
@ -23,9 +23,11 @@ include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
SUBDIRS = \
|
||||
init \
|
||||
os \
|
||||
pxi \
|
||||
mi \
|
||||
vlink \
|
||||
spi \
|
||||
ctrdg \
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
61
build/libraries/ctrdg/ARM9/Makefile
Normal file
61
build/libraries/ctrdg/ARM9/Makefile
Normal file
@ -0,0 +1,61 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - libraries - ctrdg
|
||||
# File: Makefile
|
||||
#
|
||||
# Copyright 2007 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.
|
||||
#
|
||||
# $Log: $
|
||||
# $NoKeywords: $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
SUBDIRS =
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# build ARM & THUMB libraries
|
||||
TWL_CODEGEN_ALL = True
|
||||
|
||||
TWL_PROC = ARM9
|
||||
|
||||
SRCDIR = ../common .
|
||||
SRCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/ctrdg/common/src \
|
||||
$(TWL_NITROSDK_ROOT)/build/libraries/ctrdg/ARM9/src \
|
||||
|
||||
SRCS = \
|
||||
ctrdg.c \
|
||||
ctrdg_proc.c \
|
||||
ctrdg_vib.c \
|
||||
ctrdg_backup.c \
|
||||
ctrdg_flash_common.c \
|
||||
ctrdg_flash_AT29LV512.c \
|
||||
ctrdg_flash_LE26FV10N1TS-10.c \
|
||||
ctrdg_flash_LE39FW512.c \
|
||||
ctrdg_flash_MX29L010.c \
|
||||
ctrdg_flash_MX29L512.c \
|
||||
ctrdg_sram.c \
|
||||
ctrdg_task.c
|
||||
|
||||
|
||||
TARGET_LIB = libctrdg$(TWL_LIBSUFFIX).a
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build: $(TARGETS)
|
||||
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/modulerules
|
||||
|
||||
#===== End of Makefile =====
|
||||
506
build/libraries/ctrdg/ARM9/ctrdg_proc.c
Normal file
506
build/libraries/ctrdg/ARM9/ctrdg_proc.c
Normal file
@ -0,0 +1,506 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: NitroSDK - CTRDG
|
||||
File: ctrdg.c
|
||||
|
||||
Copyright 2003-2006 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.
|
||||
|
||||
$Log: ctrdg_proc.c,v $
|
||||
Revision 1.28 2006/05/02 02:04:47 kitase_hirotake
|
||||
不必要なデバッグ出力の削除
|
||||
|
||||
Revision 1.27 2006/05/02 02:03:23 kitase_hirotake
|
||||
不必要なデバッグ出力の削除
|
||||
|
||||
Revision 1.26 2006/05/01 06:04:55 yada
|
||||
avoid warning
|
||||
|
||||
Revision 1.25 2006/04/28 11:04:22 yada
|
||||
add about PHI Clock setting
|
||||
|
||||
Revision 1.24 2006/04/05 10:48:30 okubata_ryoma
|
||||
AGBバックアップライブラリのSDK収録のための変更
|
||||
|
||||
Revision 1.23 2006/02/22 02:27:10 kitase_hirotake
|
||||
前回の修正を戻す(デフォルトで terminate を行わないように修正)
|
||||
|
||||
Revision 1.22 2006/02/13 00:25:27 kitase_hirotake
|
||||
デフォルトで terminate を行わないように修正
|
||||
|
||||
Revision 1.21 2006/02/10 02:53:18 yosizaki
|
||||
support memory protection of cartridge access.
|
||||
|
||||
Revision 1.20 2006/02/08 00:04:25 kitase_hirotake
|
||||
Warning 修正
|
||||
|
||||
Revision 1.19 2006/02/07 08:13:09 kitase_hirotake
|
||||
CTRDG_CheckPulledOut 追加
|
||||
|
||||
Revision 1.18 2006/01/18 02:11:20 kitase_hirotake
|
||||
do-indent
|
||||
|
||||
Revision 1.17 2005/11/01 02:57:45 okubata_ryoma
|
||||
CTRDG_SendToARM7の追加
|
||||
|
||||
Revision 1.16 2005/06/21 02:46:40 yada
|
||||
insert calling cache function
|
||||
|
||||
Revision 1.15 2005/02/28 05:26:03 yosizaki
|
||||
do-indent.
|
||||
|
||||
Revision 1.14 2005/01/13 01:58:51 yada
|
||||
number of using DMA changed. DMA0 -> DMA1
|
||||
|
||||
Revision 1.13 2005/01/12 11:09:04 takano_makoto
|
||||
fix copyright header.
|
||||
|
||||
Revision 1.12 2005/01/12 00:41:38 yada
|
||||
change a little, around an auto variable
|
||||
|
||||
Revision 1.11 2004/11/24 04:38:18 yada
|
||||
just fix typo
|
||||
|
||||
Revision 1.10 2004/09/28 05:06:15 yada
|
||||
fix a little
|
||||
|
||||
Revision 1.9 2004/09/27 13:46:42 yada
|
||||
only arrange comments
|
||||
|
||||
Revision 1.8 2004/09/17 00:07:27 yada
|
||||
avoid warning by overriding pxi callback
|
||||
|
||||
Revision 1.7 2004/09/16 04:15:24 yada
|
||||
fix a little
|
||||
|
||||
Revision 1.6 2004/09/15 09:50:12 yada
|
||||
on default, pulling out cartridge doesn't cause terminate.
|
||||
|
||||
Revision 1.5 2004/09/15 05:55:46 yada
|
||||
change include
|
||||
|
||||
Revision 1.4 2004/09/14 13:07:26 yada
|
||||
fix small bug
|
||||
|
||||
Revision 1.3 2004/09/14 13:01:50 yada
|
||||
CallbackForPulledOut->PulledOutCallback
|
||||
|
||||
Revision 1.2 2004/09/14 10:52:30 yada
|
||||
fix address data sent to ARM7 via PXI
|
||||
|
||||
Revision 1.1 2004/09/14 09:58:21 yada
|
||||
initial release
|
||||
|
||||
$NoKeywords: $
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <nitro.h>
|
||||
#include <../include/ctrdg_work.h>
|
||||
|
||||
extern void CTRDGi_InitCommon(void);
|
||||
extern void CTRDGi_SendtoPxi(u32 data);
|
||||
|
||||
//---- pxi callbacks
|
||||
static void CTRDGi_CallbackForInitModuleInfo(PXIFifoTag tag, u32 data, BOOL err);
|
||||
static void CTRDGi_PulledOutCallback(PXIFifoTag tag, u32 data, BOOL err);
|
||||
static void CTRDGi_CallbackForSetPhi(PXIFifoTag tag, u32 data, BOOL err);
|
||||
|
||||
extern CTRDGWork CTRDGi_Work;
|
||||
|
||||
//---- lock for pxi
|
||||
static int CTRDGi_Lock = FALSE;
|
||||
|
||||
//---- user callback
|
||||
CTRDGPulledOutCallback CTRDG_UserCallback = NULL;
|
||||
|
||||
/* カートリッジ抜けコールバックは 2 度呼ばれない */
|
||||
static BOOL isCartridgePullOut = FALSE;
|
||||
static BOOL skipCheck = FALSE;
|
||||
static BOOL ctrdg_already_pullout = FALSE;
|
||||
|
||||
//================================================================================
|
||||
// INIT
|
||||
//================================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_Init
|
||||
|
||||
Description: initialize cartridge functions
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDG_Init(void)
|
||||
{
|
||||
static BOOL isInitialized;
|
||||
|
||||
if (isInitialized)
|
||||
{
|
||||
return;
|
||||
}
|
||||
isInitialized = TRUE;
|
||||
|
||||
CTRDGi_InitCommon();
|
||||
|
||||
/* カートリッジ抜けコールバックが 2 度以上呼ばれないように */
|
||||
ctrdg_already_pullout = FALSE;
|
||||
|
||||
#ifndef SDK_SMALL_BUILD
|
||||
//---- setting PXI
|
||||
PXI_Init();
|
||||
while (!PXI_IsCallbackReady(PXI_FIFO_TAG_CTRDG, PXI_PROC_ARM7))
|
||||
{
|
||||
}
|
||||
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_CTRDG, CTRDGi_CallbackForInitModuleInfo);
|
||||
|
||||
CTRDGi_InitModuleInfo();
|
||||
|
||||
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_CTRDG, NULL); // to avoid warning by overriding
|
||||
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_CTRDG, CTRDGi_PulledOutCallback);
|
||||
|
||||
//---- init user callback
|
||||
CTRDG_UserCallback = NULL;
|
||||
|
||||
// AGBBackupアクセス関数の非同期版を使用するためのTaskThread作成
|
||||
{
|
||||
static CTRDGiTaskWork CTRDGTaskList;
|
||||
CTRDGi_InitTaskThread(&CTRDGTaskList);
|
||||
}
|
||||
|
||||
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_CTRDG_PHI, CTRDGi_CallbackForSetPhi );
|
||||
|
||||
/*
|
||||
* ユーザが明示的に enable を指定しない限りアクセス無効.
|
||||
* (オプションカートリッジでないなら書き込みアクセスも禁止)
|
||||
*/
|
||||
#if defined(SDK_ARM9)
|
||||
CTRDG_Enable(FALSE);
|
||||
#endif
|
||||
#endif // SDK_SMALL_BUILD
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_InitModuleInfo
|
||||
|
||||
Description: initialize the information of peripheral device around cartridge
|
||||
|
||||
Because try lock cartridge, in case another processor had locked,
|
||||
wait till its was released.
|
||||
|
||||
To avoid other bus master interrupts,
|
||||
DMA1 is used for accessing cartridge.
|
||||
This is a compatibility in future.
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static CTRDGHeader headerBuf ATTRIBUTE_ALIGN(32);
|
||||
|
||||
void CTRDGi_InitModuleInfo(void)
|
||||
{
|
||||
#ifndef SDK_SMALL_BUILD
|
||||
|
||||
static BOOL isInitialized;
|
||||
CTRDGLockByProc lockInfo;
|
||||
OSIrqMask lastIE;
|
||||
BOOL lastIME;
|
||||
|
||||
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
|
||||
|
||||
if (isInitialized)
|
||||
{
|
||||
return;
|
||||
}
|
||||
isInitialized = TRUE;
|
||||
|
||||
if (!(reg_OS_PAUSE & REG_OS_PAUSE_CHK_MASK))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lastIE = OS_SetIrqMask(OS_IE_SPFIFO_RECV);
|
||||
lastIME = OS_EnableIrq();
|
||||
|
||||
//---- get privilege for accessing cartridge
|
||||
CTRDGi_LockByProcessor(CTRDGi_Work.lockID, &lockInfo);
|
||||
|
||||
//---- read information of peripheral devices
|
||||
{
|
||||
MIProcessor proc = MI_GetMainMemoryPriority();
|
||||
CTRDGRomCycle rc;
|
||||
|
||||
// set the latest access cycle
|
||||
CTRDGi_ChangeLatestAccessCycle(&rc);
|
||||
|
||||
// set main memory priority for avoiding DMA stole by ARM7 access
|
||||
MI_SetMainMemoryPriority(MI_PROCESSOR_ARM9);
|
||||
|
||||
// 16bit access in order to have much enough access interval
|
||||
DC_InvalidateRange(&((u8 *)&headerBuf)[0x80], sizeof(headerBuf) - 0x80);
|
||||
MI_DmaCopy16(1, (void *)(HW_CTRDG_ROM + 0x80),
|
||||
&((u8 *)&headerBuf)[0x80], sizeof(headerBuf) - 0x80);
|
||||
|
||||
// restore main memory priority
|
||||
MI_SetMainMemoryPriority(proc);
|
||||
|
||||
// restore access cycle
|
||||
CTRDGi_RestoreAccessCycle(&rc);
|
||||
}
|
||||
|
||||
//---- release privilege for accessing cartridge
|
||||
CTRDGi_UnlockByProcessor(CTRDGi_Work.lockID, &lockInfo);
|
||||
|
||||
//---- copy the information of peripheral devices to system area
|
||||
{
|
||||
int i;
|
||||
CTRDGHeader *chb = &headerBuf;
|
||||
|
||||
cip->moduleID.raw = chb->moduleID;
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
cip->exLsiID[i] = chb->exLsiID[i];
|
||||
}
|
||||
cip->makerCode = chb->makerCode;
|
||||
cip->gameCode = chb->gameCode;
|
||||
}
|
||||
|
||||
//---- copy NINTENDO logo data in the ARM9 system ROM to main memory
|
||||
MI_CpuCopy32((void *)CTRDG_SYSROM9_NINLOGO_ADR, &headerBuf.nintendoLogo,
|
||||
sizeof(headerBuf.nintendoLogo));
|
||||
DC_FlushAll();
|
||||
|
||||
//---- send message to ARM7
|
||||
CTRDGi_SendtoPxi(CTRDG_PXI_COMMAND_INIT_MODULE_INFO |
|
||||
(((u32)&headerBuf - HW_MAIN_MEM) >> 5) << CTRDG_PXI_COMMAND_PARAM_SHIFT);
|
||||
|
||||
//---- wait till ARM7 finish initialize
|
||||
while (CTRDGi_Work.subpInitialized != TRUE)
|
||||
{
|
||||
SVC_WaitByLoop(1);
|
||||
}
|
||||
|
||||
(void)OS_RestoreIrq(lastIME);
|
||||
(void)OS_SetIrqMask(lastIE);
|
||||
|
||||
#endif // SDK_SMALL_BUILD
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_CallbackForInitModuleInfo
|
||||
|
||||
Description: callback to receive data from PXI
|
||||
|
||||
Arguments: tag : tag from PXI (unused)
|
||||
data : data from PXI
|
||||
err : error bit (unused)
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void CTRDGi_CallbackForInitModuleInfo(PXIFifoTag tag, u32 data, BOOL err)
|
||||
{
|
||||
#pragma unused( tag, err )
|
||||
|
||||
if ((data & CTRDG_PXI_COMMAND_MASK) == CTRDG_PXI_COMMAND_INIT_MODULE_INFO)
|
||||
{
|
||||
CTRDGi_Work.subpInitialized = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
OS_Panic("illegal Cartridge pxi command.");
|
||||
#else
|
||||
OS_Panic("");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// PULLOUT PROCS
|
||||
//================================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_PulledOutCallback
|
||||
|
||||
Description: callback to receive data from PXI
|
||||
|
||||
Arguments: tag : tag from PXI (unused)
|
||||
data : data from PXI
|
||||
err : error bit (unused)
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void CTRDGi_PulledOutCallback(PXIFifoTag tag, u32 data, BOOL err)
|
||||
{
|
||||
#pragma unused( tag, err )
|
||||
|
||||
//---- receive message 'pulled out'
|
||||
if ((data & CTRDG_PXI_COMMAND_MASK) == CTRDG_PXI_COMMAND_PULLED_OUT)
|
||||
{
|
||||
if (ctrdg_already_pullout == FALSE)
|
||||
{
|
||||
BOOL isTerminateImm = FALSE;
|
||||
|
||||
//---- call user callback
|
||||
if (CTRDG_UserCallback)
|
||||
{
|
||||
isTerminateImm = CTRDG_UserCallback();
|
||||
}
|
||||
|
||||
//---- terminate
|
||||
if (isTerminateImm)
|
||||
{
|
||||
CTRDG_TerminateForPulledOut();
|
||||
}
|
||||
/* 一度呼ばれたら、もう呼ばれない */
|
||||
ctrdg_already_pullout = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OS_Printf(">>>tag[%x] data[%x] err[%x]\n", tag, data, err);
|
||||
#ifndef SDK_FINALROM
|
||||
OS_Panic("illegal Cartridge pxi command.");
|
||||
#else
|
||||
OS_Panic("");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_SetPulledOutCallback
|
||||
|
||||
Description: set user callback for being pulled out cartridge
|
||||
|
||||
Arguments: callback : callback
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDG_SetPulledOutCallback(CTRDGPulledOutCallback callback)
|
||||
{
|
||||
CTRDG_UserCallback = callback;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_TerminateForPulledOut
|
||||
|
||||
Description: terminate for pulling out cartridge.
|
||||
send message to do termination to ARM7
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDG_TerminateForPulledOut(void)
|
||||
{
|
||||
//---- send 'TERMINATE' command to ARM7, and terminate itself immediately
|
||||
CTRDGi_SendtoPxi(CTRDG_PXI_COMMAND_TERMINATE);
|
||||
|
||||
OS_Terminate();
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_SendToARM7
|
||||
|
||||
Description: send data to ARM7
|
||||
|
||||
Arguments: arg : data to send
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDG_SendToARM7(void *arg)
|
||||
{
|
||||
(void)PXI_SendWordByFifo(PXI_FIFO_TAG_CTRDG_Ex, (u32)arg, FALSE);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_CheckPulledOut
|
||||
|
||||
Description: cartridge is pulled out
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDG_CheckPulledOut(void)
|
||||
{
|
||||
//---- if skip flag or cartridge already pulled out.
|
||||
if (skipCheck || isCartridgePullOut)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//---------------- check cartridge pulled out
|
||||
//---- check cartridge
|
||||
isCartridgePullOut = CTRDG_IsPulledOut();
|
||||
|
||||
//---- if no cartridge...
|
||||
if (!CTRDG_IsExisting())
|
||||
{
|
||||
if (!isCartridgePullOut)
|
||||
{
|
||||
skipCheck = TRUE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------- if cartridge pulled out, tell that to ARM9
|
||||
if (isCartridgePullOut)
|
||||
{
|
||||
/* ARM7 から PXI で呼んでいた関数を同じく呼ぶ */
|
||||
/* 引数は処理がされる場合の引数に強制的にした */
|
||||
CTRDGi_PulledOutCallback(PXI_FIFO_TAG_CTRDG, CTRDG_PXI_COMMAND_PULLED_OUT, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_SetPhiClock
|
||||
|
||||
Description: set ARM9 and ARM7 PHI output clock
|
||||
|
||||
Arguments: clock : PHI clock to set. (MIPhiClock value)
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDG_SetPhiClock(CTRDGPhiClock clock)
|
||||
{
|
||||
u32 data = ((u32)clock << CTRDG_PXI_COMMAND_PARAM_SHIFT)| CTRDG_PXI_COMMAND_SET_PHI;
|
||||
|
||||
//---- check parameter range
|
||||
SDK_ASSERT( (u32)clock <= CTRDG_PHI_CLOCK_16MHZ );
|
||||
|
||||
//---- set ARM9 PHI output clock
|
||||
MIi_SetPhiClock( (MIiPhiClock)clock );
|
||||
|
||||
//---- send command to set ARM7 phi clock
|
||||
CTRDGi_Lock = TRUE;
|
||||
while (PXI_SendWordByFifo(PXI_FIFO_TAG_CTRDG_PHI, data, FALSE) != PXI_FIFO_SUCCESS)
|
||||
{
|
||||
SVC_WaitByLoop(1);
|
||||
}
|
||||
|
||||
//---- wait response
|
||||
while( CTRDGi_Lock )
|
||||
{
|
||||
SVC_WaitByLoop(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_CallbackForSetPhi
|
||||
|
||||
Description: callback from ARM7 to receive PHI clock setting
|
||||
|
||||
Arguments: tag : tag from PXI (unused)
|
||||
data : data from PXI
|
||||
err : error bit (unused)
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void CTRDGi_CallbackForSetPhi(PXIFifoTag tag, u32 data, BOOL err)
|
||||
{
|
||||
#pragma unused(tag, data, err)
|
||||
CTRDGi_Lock = FALSE;
|
||||
}
|
||||
34
build/libraries/ctrdg/Makefile
Normal file
34
build/libraries/ctrdg/Makefile
Normal file
@ -0,0 +1,34 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - libraries - ctrdg
|
||||
# File: Makefile
|
||||
#
|
||||
# Copyright 2007 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.
|
||||
#
|
||||
# $Log: $
|
||||
# $NoKeywords: $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9
|
||||
|
||||
#ifdef TWL_WITH_ARM7
|
||||
SUBDIRS += # ARM7
|
||||
#endif
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
918
build/libraries/ctrdg/common/ctrdg.c
Normal file
918
build/libraries/ctrdg/common/ctrdg.c
Normal file
@ -0,0 +1,918 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: NitroSDK - CTRDG
|
||||
File: ctrdg.c
|
||||
|
||||
Copyright 2003-2006 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.
|
||||
|
||||
$Log: ctrdg.c,v $
|
||||
Revision 1.23 2006/04/24 00:05:09 okubata_ryoma
|
||||
CW2.0の警告レベル強化に伴った変更
|
||||
|
||||
Revision 1.22 2006/02/22 04:06:44 kitase_hirotake
|
||||
無制限にロック待ちしないように修正
|
||||
|
||||
Revision 1.21 2006/02/10 02:53:18 yosizaki
|
||||
support memory protection of cartridge access.
|
||||
|
||||
Revision 1.20 2006/01/18 02:11:20 kitase_hirotake
|
||||
do-indent
|
||||
|
||||
Revision 1.19 2005/11/30 12:22:42 yosizaki
|
||||
add CTRDG_IsEnabled(), CTRDG_Enable(), CTRDG_CheckEnabled().
|
||||
|
||||
Revision 1.18 2005/04/12 06:22:51 yosizaki
|
||||
add pulled-out checkers.
|
||||
|
||||
Revision 1.17 2005/02/28 05:26:03 yosizaki
|
||||
do-indent.
|
||||
|
||||
Revision 1.16 2005/02/18 14:19:10 seiki_masashi
|
||||
Copyright 表記の修正
|
||||
|
||||
Revision 1.15 2005/02/18 13:17:08 seiki_masashi
|
||||
warning 対策
|
||||
|
||||
Revision 1.14 2004/09/29 02:32:59 yada
|
||||
consider for exchanging a option cartridge and an AGB cartridge in sleeping
|
||||
|
||||
Revision 1.13 2004/09/27 13:46:04 yada
|
||||
only arrange spacing
|
||||
|
||||
Revision 1.12 2004/09/21 01:31:23 yada
|
||||
in CTRDG_CommonInit(), call SVC_CpuClear instead of MI_CpuClear.
|
||||
|
||||
Revision 1.11 2004/09/17 12:25:18 yada
|
||||
add data forwarding functions
|
||||
|
||||
Revision 1.10 2004/09/17 06:43:50 yada
|
||||
add line in CTRDG_CpuCopy8()
|
||||
|
||||
Revision 1.9 2004/09/17 05:11:50 yada
|
||||
add CTRDG_IsOptionCartridge()
|
||||
|
||||
Revision 1.8 2004/09/16 09:22:20 yada
|
||||
fix a little
|
||||
|
||||
Revision 1.7 2004/09/16 04:11:48 yada
|
||||
OS_IsExisting() skip process after detect pulled out
|
||||
|
||||
Revision 1.6 2004/09/14 11:56:49 yada
|
||||
only write comment about CTRDGi_InitCommon
|
||||
|
||||
Revision 1.5 2004/09/14 09:59:17 yada
|
||||
move ARM9 code to ctrdg_proc.c
|
||||
|
||||
Revision 1.4 2004/09/14 08:52:43 yada
|
||||
separate callback to 2 function
|
||||
|
||||
Revision 1.3 2004/09/14 07:23:45 yada
|
||||
fix a little
|
||||
|
||||
Revision 1.2 2004/09/14 06:09:44 yada
|
||||
check cartridge pulled out in ARM7
|
||||
|
||||
Revision 1.1 2004/09/13 10:45:14 yada
|
||||
initial release.
|
||||
|
||||
$NoKeywords: $
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <nitro/ctrdg.h>
|
||||
#include <../include/ctrdg_work.h>
|
||||
#include <nitro/os/ARM9/cache.h>
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
CTRDGWork CTRDGi_Work;
|
||||
|
||||
/* cartridge permission */
|
||||
static BOOL CTRDGi_EnableFlag = FALSE;
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_InitCommon
|
||||
|
||||
Description: common routine called from CTRDG_Init.
|
||||
keep lockID for cartridge functions.
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDGi_InitCommon(void)
|
||||
{
|
||||
SVC_CpuClear(0, &CTRDGi_Work, sizeof(CTRDGi_Work), 32); // use SVC_* intentionally.
|
||||
|
||||
CTRDGi_Work.lockID = (u16)OS_GetLockID();
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_IsBitID
|
||||
|
||||
Description: return whether peripheral device which is specified by bitID exists
|
||||
in cartridge
|
||||
|
||||
Arguments: bitID bit ID
|
||||
|
||||
Returns: TRUE if existed
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
BOOL CTRDG_IsBitID(u8 bitID)
|
||||
{
|
||||
return (CTRDG_IsExisting() && CTRDGi_IsBitIDAtInit(bitID));
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_IsBitIDAtInit
|
||||
|
||||
Description: return whether peripheral device which is specified by bitID existed
|
||||
in cartridge at boot time
|
||||
|
||||
Arguments: bitID bit ID
|
||||
|
||||
Returns: TRUE if existed
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDGi_IsBitIDAtInit(u8 bitID)
|
||||
{
|
||||
BOOL retval = FALSE;
|
||||
|
||||
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
|
||||
|
||||
if (cip->moduleID.raw != 0xffff && cip->moduleID.raw != 0x0000 && ~cip->moduleID.bitID & bitID)
|
||||
{
|
||||
retval = TRUE;
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_IsNumberID
|
||||
|
||||
Description: return whether peripheral device which is specified by numberID exists
|
||||
in cartridge
|
||||
|
||||
Arguments: numberID number ID
|
||||
|
||||
Returns: TRUE if existed
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_IsNumberID(u8 numberID)
|
||||
{
|
||||
return (CTRDG_IsExisting() && CTRDGi_IsNumberIDAtInit(numberID));
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_IsNumberIDAtInit
|
||||
|
||||
Description: return whether peripheral device which is specified by numberID existed
|
||||
in cartridge at boot time
|
||||
|
||||
Arguments: numberID number ID
|
||||
|
||||
Returns: TRUE if existed
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDGi_IsNumberIDAtInit(u8 numberID)
|
||||
{
|
||||
BOOL retval = FALSE;
|
||||
|
||||
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
|
||||
|
||||
if (cip->moduleID.raw != 0xffff && cip->moduleID.raw != 0x0000)
|
||||
{
|
||||
if (cip->moduleID.numberID == numberID)
|
||||
{
|
||||
retval = TRUE;
|
||||
}
|
||||
else if (!cip->moduleID.disableExLsiID)
|
||||
{
|
||||
if (cip->exLsiID[0] == numberID
|
||||
|| cip->exLsiID[1] == numberID || cip->exLsiID[2] == numberID)
|
||||
{
|
||||
retval = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_IsAgbCartridge
|
||||
|
||||
Description: return whether AGB cartridge exists
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if existed
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_IsAgbCartridge(void)
|
||||
{
|
||||
return (CTRDG_IsExisting() && CTRDGi_IsAgbCartridgeAtInit());
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_IsOptionCartridge
|
||||
|
||||
Description: return whether option cartridge exists
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if existed
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_IsOptionCartridge(void)
|
||||
{
|
||||
return (CTRDG_IsExisting() && !CTRDGi_IsAgbCartridgeAtInit());
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_IsAgbCartridgeAtInit
|
||||
|
||||
Description: return whether AGB cartridge existed at boot time
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if existed
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDGi_IsAgbCartridgeAtInit(void)
|
||||
{
|
||||
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
|
||||
|
||||
return cip->isAgbCartridge;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_GetAgbGameCode
|
||||
|
||||
Description: get game code in AGB cartridge
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: Game code if exist, FALSE if cartridge not exist
|
||||
*---------------------------------------------------------------------------*/
|
||||
u32 CTRDG_GetAgbGameCode(void)
|
||||
{
|
||||
u32 retval = FALSE;
|
||||
|
||||
if (CTRDG_IsExisting())
|
||||
{
|
||||
retval = CTRDGi_GetAgbGameCodeAtInit();
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_GetAgbGameCodeAtInit
|
||||
|
||||
Description: get game code in AGB cartridge read at boot time
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: Game code if exist, FALSE if cartridge did not exist
|
||||
*---------------------------------------------------------------------------*/
|
||||
u32 CTRDGi_GetAgbGameCodeAtInit(void)
|
||||
{
|
||||
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
|
||||
u32 retval = FALSE;
|
||||
|
||||
if (CTRDGi_IsAgbCartridgeAtInit())
|
||||
{
|
||||
retval = cip->gameCode;
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_GetAgbMakerCode
|
||||
|
||||
Description: get maker code in AGB cartridge
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: Maker code if exist, FALSE if cartridge not exist
|
||||
*---------------------------------------------------------------------------*/
|
||||
u16 CTRDG_GetAgbMakerCode(void)
|
||||
{
|
||||
u16 retval = FALSE;
|
||||
|
||||
if (CTRDG_IsExisting())
|
||||
{
|
||||
retval = CTRDGi_GetAgbMakerCodeAtInit();
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_GetAgbMakerCodeAtInit
|
||||
|
||||
Description: get maker code in AGB cartridge read at boot time
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: Maker code if exist, FALSE if not exist
|
||||
*---------------------------------------------------------------------------*/
|
||||
u16 CTRDGi_GetAgbMakerCodeAtInit(void)
|
||||
{
|
||||
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
|
||||
u16 retval = FALSE;
|
||||
|
||||
if (CTRDGi_IsAgbCartridgeAtInit())
|
||||
{
|
||||
retval = cip->makerCode;
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_IsPulledOut
|
||||
|
||||
Description: get whether system has detected pulled out cartridge
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if detect pull out
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_IsPulledOut(void)
|
||||
{
|
||||
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
|
||||
|
||||
//---- cartridge not exist at boot time
|
||||
if (cip->moduleID.raw == 0xffff)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//---- check existing when not detect pulled out
|
||||
if (!cip->detectPullOut)
|
||||
{
|
||||
(void)CTRDG_IsExisting();
|
||||
}
|
||||
|
||||
return cip->detectPullOut;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_IsAgbCartridgePulledOut
|
||||
|
||||
Description: get whether system has detected pulled out AGB cartridge
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if detect pull out
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_IsAgbCartridgePulledOut(void)
|
||||
{
|
||||
return (CTRDG_IsPulledOut() && CTRDGi_IsAgbCartridgeAtInit());
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_IsOptionCartridgePulledOut
|
||||
|
||||
Description: get whether system has detected pulled out option cartridge
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if detect pull out
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_IsOptionCartridgePulledOut(void)
|
||||
{
|
||||
return (CTRDG_IsPulledOut() && !CTRDGi_IsAgbCartridgeAtInit());
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_IsExisting
|
||||
|
||||
Description: get whether cartridge exists
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE if existing
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_IsExisting(void)
|
||||
{
|
||||
BOOL retval = TRUE;
|
||||
CTRDGLockByProc lockInfo;
|
||||
|
||||
CTRDGHeader *chp = CTRDGi_GetHeaderAddr();
|
||||
CTRDGModuleInfo *cip = CTRDGi_GetModuleInfoAddr();
|
||||
|
||||
//---- if cartridge not exist at boot time.
|
||||
if (cip->moduleID.raw == 0xffff)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//---- if detect cartirdge pulled out
|
||||
if (cip->detectPullOut == TRUE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#if defined(SDK_ARM7)
|
||||
//---- get privilege for accessing cartridge
|
||||
if(CTRDGi_LockByProcessor(CTRDGi_Work.lockID, &lockInfo) == FALSE)
|
||||
{
|
||||
(void)OS_RestoreInterrupts(lockInfo.irq);
|
||||
return TRUE;
|
||||
}
|
||||
#else
|
||||
//---- get privilege for accessing cartridge
|
||||
CTRDGi_LockByProcessor(CTRDGi_Work.lockID, &lockInfo);
|
||||
#endif
|
||||
|
||||
//---- check if cartridge exists
|
||||
{
|
||||
CTRDGRomCycle rc;
|
||||
u8 isRomCode;
|
||||
|
||||
// set the lastest access cycle
|
||||
CTRDGi_ChangeLatestAccessCycle(&rc);
|
||||
isRomCode = chp->isRomCode;
|
||||
|
||||
// ( please observe comparison order to the following )
|
||||
if ((isRomCode == CTRDG_IS_ROM_CODE && cip->moduleID.raw != chp->moduleID) // memory loaded
|
||||
|| (isRomCode != CTRDG_IS_ROM_CODE && cip->moduleID.raw != *CTRDGi_GetModuleIDImageAddr()) // memory not loaded
|
||||
|| ((cip->gameCode != chp->gameCode) && cip->isAgbCartridge)) // AGB cartridge comparison
|
||||
{
|
||||
cip->detectPullOut = TRUE;
|
||||
retval = FALSE;
|
||||
}
|
||||
|
||||
//---- restore access cycle
|
||||
CTRDGi_RestoreAccessCycle(&rc);
|
||||
}
|
||||
|
||||
//---- release privilege for accessing cartridge
|
||||
CTRDGi_UnlockByProcessor(CTRDGi_Work.lockID, &lockInfo);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_ChangeLatestAccessCycle
|
||||
|
||||
Description: set access cycle to cartridge to latest setting
|
||||
|
||||
Arguments: r : Cartridge ROM access cycle
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDGi_ChangeLatestAccessCycle(CTRDGRomCycle *r)
|
||||
{
|
||||
r->c1 = MI_GetCartridgeRomCycle1st();
|
||||
r->c2 = MI_GetCartridgeRomCycle2nd();
|
||||
|
||||
MI_SetCartridgeRomCycle1st(MI_CTRDG_ROMCYCLE1_18);
|
||||
MI_SetCartridgeRomCycle2nd(MI_CTRDG_ROMCYCLE2_6);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_RestoreAccessCycle
|
||||
|
||||
Description: set access cycle to cartridge to the original setting
|
||||
|
||||
Arguments: r : Cartridge ROM access cycle
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDGi_RestoreAccessCycle(CTRDGRomCycle *r)
|
||||
{
|
||||
MI_SetCartridgeRomCycle1st(r->c1);
|
||||
MI_SetCartridgeRomCycle2nd(r->c2);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_LockByProcessor
|
||||
|
||||
Description: get privilege for accessing cartridge to specified processor
|
||||
|
||||
Because try lock cartridge, in case another processor had locked,
|
||||
wait till its was released.
|
||||
|
||||
Status of interrupt in return is disable.
|
||||
|
||||
Arguments: lockID : lock ID for cartridge
|
||||
info : info for lock by my processor
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
#if defined(SDK_ARM7)
|
||||
BOOL CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info)
|
||||
#else
|
||||
void CTRDGi_LockByProcessor(u16 lockID, CTRDGLockByProc *info)
|
||||
#endif
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
info->irq = OS_DisableInterrupts();
|
||||
|
||||
if (((info->locked = OS_ReadOwnerOfLockCartridge() & CTRDG_LOCKED_BY_MYPROC_FLAG) != 0)
|
||||
|| (OS_TryLockCartridge(lockID) == OS_LOCK_SUCCESS))
|
||||
{
|
||||
#if defined(SDK_ARM7)
|
||||
return TRUE;
|
||||
#else
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
#if defined(SDK_ARM7)
|
||||
return FALSE;
|
||||
#endif
|
||||
(void)OS_RestoreInterrupts(info->irq);
|
||||
|
||||
SVC_WaitByLoop(1);
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_UnlockByProcessor
|
||||
|
||||
Description: release privilege for accessing cartirige
|
||||
|
||||
Arguments: lockID : lock ID for cartridge
|
||||
info : info for lock by my processor
|
||||
it must be the value got in CTRDGi_LockCartridgeByProccesser.
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDGi_UnlockByProcessor(u16 lockID, CTRDGLockByProc *info)
|
||||
{
|
||||
if (!info->locked)
|
||||
{
|
||||
(void)OS_UnLockCartridge(lockID);
|
||||
}
|
||||
|
||||
(void)OS_RestoreInterrupts(info->irq);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_SendtoPxi
|
||||
|
||||
Description: send data via PXI
|
||||
|
||||
Arguments: data : data to send
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDGi_SendtoPxi(u32 data)
|
||||
{
|
||||
while (PXI_SendWordByFifo(PXI_FIFO_TAG_CTRDG, data, FALSE) != PXI_FIFO_SUCCESS)
|
||||
{
|
||||
SVC_WaitByLoop(1);
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// READ DATA FROM CARTRIDGE
|
||||
//================================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_DmaCopy16 / 32
|
||||
|
||||
Description: read cartridge data via DMA
|
||||
|
||||
Arguments: dmaNo : DMA No.
|
||||
src : source address (in cartridge)
|
||||
dest : destination address (in memory)
|
||||
size : forwarding size
|
||||
|
||||
Returns: TRUE if success.
|
||||
FALSE if fail. ( no cartridge )
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_DmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size)
|
||||
{
|
||||
return CTRDGi_CopyCommon(dmaNo, src, dest, size, CTRDGi_FORWARD_DMA16);
|
||||
}
|
||||
BOOL CTRDG_DmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size)
|
||||
{
|
||||
return CTRDGi_CopyCommon(dmaNo, src, dest, size, CTRDGi_FORWARD_DMA32);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_CpuCopy8 / 16 / 32
|
||||
|
||||
Description: read cartridge data by CPU access
|
||||
|
||||
Arguments: src : source address (in cartridge)
|
||||
dest : destination address (in memory)
|
||||
size : forwarding size
|
||||
|
||||
Returns: TRUE if success.
|
||||
FALSE if fail. ( no cartridge )
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_CpuCopy8(const void *src, void *dest, u32 size)
|
||||
{
|
||||
if (HW_CTRDG_ROM <= (u32)dest && (u32)dest < HW_CTRDG_RAM_END)
|
||||
{
|
||||
return CTRDGi_CopyCommon(0 /*dummy */ , (const void *)dest, (void *)src, size,
|
||||
CTRDGi_FORWARD_CPU8);
|
||||
}
|
||||
else
|
||||
{
|
||||
return CTRDGi_CopyCommon(0 /*dummy */ , src, dest, size, CTRDGi_FORWARD_CPU8);
|
||||
}
|
||||
}
|
||||
BOOL CTRDG_CpuCopy16(const void *src, void *dest, u32 size)
|
||||
{
|
||||
return CTRDGi_CopyCommon(0 /*dummy */ , src, dest, size, CTRDGi_FORWARD_CPU16);
|
||||
}
|
||||
BOOL CTRDG_CpuCopy32(const void *src, void *dest, u32 size)
|
||||
{
|
||||
return CTRDGi_CopyCommon(0 /*dummy */ , src, dest, size, CTRDGi_FORWARD_CPU32);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_CopyCommon
|
||||
|
||||
Description: read/write cartridge data.
|
||||
subroutine of CTRDG_CpuCopy*(), CTRDG_DmaCopy*() and CTRDG_WriteStream8().
|
||||
|
||||
Arguments: dmaNo : DMA No.
|
||||
src : source address
|
||||
dest : destination address
|
||||
size : forwarding size
|
||||
forwardType : action flag
|
||||
|
||||
Returns: TRUE if success.
|
||||
FALSE if fail. ( no cartridge )
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDGi_CopyCommon(u32 dmaNo, const void *src, void *dest, u32 size, u32 forwardType)
|
||||
{
|
||||
//---- check cartridge existence
|
||||
if (!CTRDG_IsExisting())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* confirm whether application has certainly judged AGB-cartridge */
|
||||
CTRDG_CheckEnabled();
|
||||
|
||||
(void)OS_LockCartridge(CTRDGi_Work.lockID);
|
||||
|
||||
if ((forwardType & CTRDGi_FORWARD_TYPE_MASK) == CTRDGi_FORWARD_TYPE_DMA)
|
||||
{
|
||||
MI_StopDma(dmaNo);
|
||||
DC_FlushRange(dest, size);
|
||||
}
|
||||
|
||||
switch (forwardType)
|
||||
{
|
||||
case CTRDGi_FORWARD_DMA16:
|
||||
MI_DmaCopy16(dmaNo, src, dest, size);
|
||||
break;
|
||||
case CTRDGi_FORWARD_DMA32:
|
||||
MI_DmaCopy32(dmaNo, src, dest, size);
|
||||
break;
|
||||
case CTRDGi_FORWARD_CPU16:
|
||||
MI_CpuCopy16(src, dest, size);
|
||||
break;
|
||||
case CTRDGi_FORWARD_CPU32:
|
||||
MI_CpuCopy32(src, dest, size);
|
||||
break;
|
||||
|
||||
case CTRDGi_FORWARD_CPU8:
|
||||
{
|
||||
int n;
|
||||
u8 *dest8 = (u8 *)dest;
|
||||
u8 *src8 = (u8 *)src;
|
||||
for (n = 0; n < size; n++)
|
||||
{
|
||||
*dest8++ = *src8++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
(void)OS_UnLockCartridge(CTRDGi_Work.lockID);
|
||||
|
||||
//---- check to remove cartridge in the middle of reading
|
||||
if (!CTRDG_IsExisting())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_Read8 / 16 / 32
|
||||
|
||||
Description: read cartridge data by CPU access
|
||||
|
||||
Arguments: address : source address (in cartridge)
|
||||
rdata : address to store read data
|
||||
|
||||
Returns: TRUE if success.
|
||||
FALSE if fail. ( no cartridge )
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_Read8(const u8 *address, u8 *rdata)
|
||||
{
|
||||
return CTRDGi_AccessCommon((void *)address, 0 /*dummy */ , rdata, CTRDGi_ACCESS_READ8);
|
||||
}
|
||||
BOOL CTRDG_Read16(const u16 *address, u16 *rdata)
|
||||
{
|
||||
return CTRDGi_AccessCommon((void *)address, 0 /*dummy */ , rdata, CTRDGi_ACCESS_READ16);
|
||||
}
|
||||
BOOL CTRDG_Read32(const u32 *address, u32 *rdata)
|
||||
{
|
||||
return CTRDGi_AccessCommon((void *)address, 0 /*dummy */ , rdata, CTRDGi_ACCESS_READ32);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_Write8 / 16 / 32
|
||||
|
||||
Description: write data to cartridge
|
||||
|
||||
Arguments: address : destination address (in cartridge)
|
||||
data : data to write
|
||||
|
||||
Returns: TRUE if success.
|
||||
FALSE if fail. ( no cartridge )
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_Write8(u8 *address, u8 data)
|
||||
{
|
||||
return CTRDGi_AccessCommon(address, data, 0 /*dummy */ , CTRDGi_ACCESS_WRITE8);
|
||||
}
|
||||
BOOL CTRDG_Write16(u16 *address, u16 data)
|
||||
{
|
||||
return CTRDGi_AccessCommon(address, data, 0 /*dummy */ , CTRDGi_ACCESS_WRITE16);
|
||||
}
|
||||
BOOL CTRDG_Write32(u32 *address, u32 data)
|
||||
{
|
||||
return CTRDGi_AccessCommon(address, data, 0 /*dummy */ , CTRDGi_ACCESS_WRITE32);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDGi_AccessCommon
|
||||
|
||||
Description: read/write cartridge data.
|
||||
subroutine of CTRDG_Read*() and CTRDG_Write*().
|
||||
|
||||
Arguments: address : address to access
|
||||
data : data to write (in write mode)
|
||||
rdata : address to store read data (in read mode)
|
||||
accessType : action flag
|
||||
|
||||
Returns: TRUE if success.
|
||||
FALSE if fail. ( no cartridge )
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDGi_AccessCommon(void *address, u32 data, void *rdata, u32 accessType)
|
||||
{
|
||||
//---- check cartridge existence
|
||||
if (!CTRDG_IsExisting())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* confirm whether application has certainly judged AGB-cartridge */
|
||||
CTRDG_CheckEnabled();
|
||||
|
||||
(void)OS_LockCartridge(CTRDGi_Work.lockID);
|
||||
|
||||
switch (accessType)
|
||||
{
|
||||
case CTRDGi_ACCESS_READ8:
|
||||
if (rdata)
|
||||
{
|
||||
*(u8 *)rdata = *(u8 *)address;
|
||||
}
|
||||
break;
|
||||
case CTRDGi_ACCESS_READ16:
|
||||
if (rdata)
|
||||
{
|
||||
*(u16 *)rdata = *(u16 *)address;
|
||||
}
|
||||
break;
|
||||
case CTRDGi_ACCESS_READ32:
|
||||
if (rdata)
|
||||
{
|
||||
*(u32 *)rdata = *(u32 *)address;
|
||||
}
|
||||
break;
|
||||
case CTRDGi_ACCESS_WRITE8:
|
||||
*(u8 *)address = (u8)data;
|
||||
break;
|
||||
case CTRDGi_ACCESS_WRITE16:
|
||||
*(u16 *)address = (u16)data;
|
||||
break;
|
||||
case CTRDGi_ACCESS_WRITE32:
|
||||
*(u32 *)address = (u32)data;
|
||||
break;
|
||||
}
|
||||
|
||||
(void)OS_UnLockCartridge(CTRDGi_Work.lockID);
|
||||
|
||||
//---- check to remove cartridge in the middle of reading
|
||||
if (!CTRDG_IsExisting())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_IsEnabled
|
||||
|
||||
Description: check if CTRDG is accessable
|
||||
|
||||
Arguments: None.
|
||||
|
||||
Returns: Return cartridge access permission.
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL CTRDG_IsEnabled(void)
|
||||
{
|
||||
return CTRDGi_EnableFlag;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_Enable
|
||||
|
||||
Description: Set cartridge access permission mode.
|
||||
|
||||
Arguments: enable permission mode to be set.
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
#define SET_PROTECTION_A( id, adr, siz ) ldr r0, =(adr|HW_C6_PR_##siz|HW_C6_PR_ENABLE)
|
||||
#define SET_PROTECTION_B( id, adr, siz ) mcr p15, 0, r0, c6, id, 0
|
||||
#define REGION_BIT(a,b,c,d,e,f,g,h) (((a)<<0)|((b)<<1)|((c)<<2)|((d)<<3)|((e)<<4)|((f)<<5)|((g)<<6)|((h)<<7))
|
||||
#define REGION_ACC(a,b,c,d,e,f,g,h) (((a)<<0)|((b)<<4)|((c)<<8)|((d)<<12)|((e)<<16)|((f)<<20)|((g)<<24)|((h)<<28))
|
||||
#define NA 0
|
||||
#define RW 1
|
||||
#define RO 5
|
||||
|
||||
#include <nitro/code32.h>
|
||||
static asm void CTRDGi_AllocCtrdgPR( void )
|
||||
{
|
||||
SET_PROTECTION_A( c3, HW_CTRDG_ROM, 64MB )
|
||||
SET_PROTECTION_B( c3, HW_CTRDG_ROM, 64MB )
|
||||
bx lr
|
||||
}
|
||||
static asm void CTRDGi_AllocMmemHiPR( void )
|
||||
{
|
||||
SET_PROTECTION_A( c3, HW_MAIN_MEM_HI, 32MB )
|
||||
SET_PROTECTION_B( c3, HW_MAIN_MEM_HI, 32MB )
|
||||
bx lr
|
||||
}
|
||||
#include <nitro/codereset.h>
|
||||
|
||||
void CTRDG_Enable(BOOL enable)
|
||||
{
|
||||
OSIntrMode bak_cpsr = OS_DisableInterrupts();
|
||||
CTRDGi_EnableFlag = enable;
|
||||
#if defined(SDK_ARM9)
|
||||
// if (!CTRDG_IsOptionCartridge()) <- この条件では不正アクセスの可能性あり
|
||||
{
|
||||
u32 iacc = (u32)(enable ? OS_PR3_ACCESS_RW : OS_PR3_ACCESS_NA);
|
||||
u32 dacc = (u32)(enable ? OS_PR3_ACCESS_RW : OS_PR3_ACCESS_RO);
|
||||
(void)OS_SetIPermissionsForProtectionRegion(OS_PR3_ACCESS_MASK, iacc);
|
||||
(void)OS_SetDPermissionsForProtectionRegion(OS_PR3_ACCESS_MASK, dacc);
|
||||
if ( enable )
|
||||
{
|
||||
// for CTRDG
|
||||
OS_DisableICacheForProtectionRegion(1<<3);
|
||||
OS_DisableDCacheForProtectionRegion(1<<3);
|
||||
OS_DisableWriteBufferForProtectionRegion(1<<3);
|
||||
CTRDGi_AllocCtrdgPR();
|
||||
}
|
||||
else
|
||||
{
|
||||
// for HW_MAIN_MEM_HI
|
||||
OS_EnableICacheForProtectionRegion(1<<3);
|
||||
OS_EnableDCacheForProtectionRegion(1<<3);
|
||||
OS_EnableWriteBufferForProtectionRegion(1<<3);
|
||||
CTRDGi_AllocMmemHiPR();
|
||||
}
|
||||
}
|
||||
#endif /* defined(SDK_ARM9) */
|
||||
(void)OS_RestoreInterrupts(bak_cpsr);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: CTRDG_CheckEnabled
|
||||
|
||||
Description: Terminate program if CTRDG is not accessable
|
||||
|
||||
Arguments: None.
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void CTRDG_CheckEnabled(void)
|
||||
{
|
||||
#ifdef SDK_ARM9
|
||||
if (!CTRDG_IsOptionCartridge() && !CTRDG_IsEnabled())
|
||||
{
|
||||
OS_TPanic
|
||||
("cartridge permission denied. (you must call CTRDG_Enable() under the guideline.)");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -421,12 +421,13 @@ static asm void init_cp15(void)
|
||||
/*
|
||||
; Region G: BACK_GROUND: Base = 0x0, Size = 4GB, I:NC NB / D:NC NB, I:NA / D:NA
|
||||
; Region 0: IO_VRAM: Base = 0x04000000, Size = 64MB, I:NC NB / D:NC NB, I:RW / D:RW
|
||||
; Region 1Rel: MAIN_MEM: Base = 0x02000000, Size = 8MB*, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||
; Region 1Dbg: MAIN_MEM: Base = 0x02000000, Size = 8MB, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||
; Region 1Rel: MAIN_MEM: Base = 0x02000000, Size = 16MB*, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||
; Region 1Dbg: MAIN_MEM: Base = 0x02000000, Size = 16MB, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||
; (* Size will be arranged in OS_InitArena(). )
|
||||
; Region 2Rel: SOUND_DATA: Base = 0x02380000, Size = 512KB, I:NC NB / D:NC NB, I:NA / D:NA
|
||||
; Region 2D4M: SOUND_DATA: Base = 0x02300000, Size = 1MB, I:NC NB / D:NC NB, I:NA / D:NA
|
||||
; Region 2D8M: SOUND_DATA: Base = 0x02600000, Size = 2MB, I:NC NB / D:NC NB, I:NA / D:NA
|
||||
; Region 3: MAIN_MEM_HI: Base = 0x08000000, Size = 256MB, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||
; Region 3: CARTRIDGE: Base = 0x08000000, Size = 128MB, I:NC NB / D:NC NB, I:NA / D:RW
|
||||
; Region 4: DTCM: Base = SOUND_DATA, Size = 16KB, I:NC NB / D:NC NB, I:NA / D:RW
|
||||
; Region 5: ITCM: Base = 0x01000000, Size = 16MB, I:NC NB / D:NC NB, I:RW / D:RW
|
||||
@ -452,8 +453,8 @@ static asm void init_cp15(void)
|
||||
SET_PROTECTION_B( c0, HW_IOREG, 64MB )
|
||||
|
||||
//---- メインメモリ
|
||||
SET_PROTECTION_A( c1, HW_MAIN_MEM_MAIN, 8MB )
|
||||
SET_PROTECTION_B( c1, HW_MAIN_MEM_MAIN, 8MB )
|
||||
SET_PROTECTION_A( c1, HW_MAIN_MEM_MAIN, 16MB )
|
||||
SET_PROTECTION_B( c1, HW_MAIN_MEM_MAIN, 16MB )
|
||||
|
||||
//---- サウンドデータ領域
|
||||
#if HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x1000
|
||||
@ -490,10 +491,10 @@ static asm void init_cp15(void)
|
||||
#pragma message(ERROR: Size unmatch HW_MAIN_MEM_SUB_SIZE)
|
||||
#endif
|
||||
|
||||
//---- カートリッジ又は他の用途
|
||||
// CPU 内部ワーク RAM 等
|
||||
SET_PROTECTION_A( c3, HW_CTRDG_ROM, 128MB )
|
||||
SET_PROTECTION_B( c3, HW_CTRDG_ROM, 128MB )
|
||||
//---- メインメモリ上位イメージ 又は他の用途
|
||||
// カートリッジ、CPU 内部ワーク RAM 等
|
||||
SET_PROTECTION_A( c3, HW_MAIN_MEM_HI, 32MB )
|
||||
SET_PROTECTION_B( c3, HW_MAIN_MEM_HI, 32MB )
|
||||
|
||||
//---- データ TCM
|
||||
// + CPU 内部ワーク RAM の場合あり
|
||||
@ -542,7 +543,7 @@ static asm void init_cp15(void)
|
||||
// 1: MAIN_MEM
|
||||
// 6: BIOS
|
||||
//
|
||||
mov r0, #REGION_BIT(0,1,0,0,0,0,1,0)
|
||||
mov r0, #REGION_BIT(0,1,0,1,0,0,1,0)
|
||||
mcr p15, 0, r0, c2, c0, 1
|
||||
|
||||
//
|
||||
@ -550,14 +551,14 @@ static asm void init_cp15(void)
|
||||
// 1: MAIN_MEM
|
||||
// 6: BIOS
|
||||
//
|
||||
mov r0, #REGION_BIT(0,1,0,0,0,0,1,0)
|
||||
mov r0, #REGION_BIT(0,1,0,1,0,0,1,0)
|
||||
mcr p15, 0, r0, c2, c0, 0
|
||||
|
||||
//
|
||||
// ライトバッファ イネーブル(リージョン設定)
|
||||
// 1: MAIN_MEM
|
||||
//
|
||||
mov r0, #REGION_BIT(0,1,0,0,0,0,0,0)
|
||||
mov r0, #REGION_BIT(0,1,0,1,0,0,0,0)
|
||||
mcr p15, 0, r0, c3, c0, 0
|
||||
|
||||
//
|
||||
@ -571,7 +572,7 @@ static asm void init_cp15(void)
|
||||
// BIOS : RO
|
||||
// SHARED : NA
|
||||
//
|
||||
ldr r0, =REGION_ACC(RW,RW,NA,NA,NA,RW,RO,NA)
|
||||
ldr r0, =REGION_ACC(RW,RW,NA,RW,NA,RW,RO,NA)
|
||||
mcr p15, 0, r0, c5, c0, 3
|
||||
|
||||
//
|
||||
|
||||
273
build/libraries/os/common/os_emulator.c
Normal file
273
build/libraries/os/common/os_emulator.c
Normal file
@ -0,0 +1,273 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: NitroSDK - OS
|
||||
File: os_emulator.c
|
||||
|
||||
Copyright 2003-2006 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.
|
||||
|
||||
$Log: os_emulator.c,v $
|
||||
Revision 1.22 2006/04/25 23:58:19 okubata_ryoma
|
||||
返り値がリファレンスの記述と異なる値を返すという不具合修正
|
||||
|
||||
Revision 1.21 2006/01/18 02:11:30 kitase_hirotake
|
||||
do-indent
|
||||
|
||||
Revision 1.20 2005/02/28 05:26:28 yosizaki
|
||||
do-indent.
|
||||
|
||||
Revision 1.19 2005/02/18 08:51:35 yasu
|
||||
著作年度変更
|
||||
|
||||
Revision 1.18 2005/02/18 06:20:18 yasu
|
||||
Signed/Unsigned 変換警告抑制
|
||||
|
||||
Revision 1.17 2004/09/22 00:25:38 yada
|
||||
OS_GetConsole() Type returns constant value
|
||||
if SDK_SMALL_BUILD and SDK_FINALROM are defined
|
||||
|
||||
Revision 1.16 2004/08/17 04:10:32 yada
|
||||
detect debugger correctly
|
||||
|
||||
Revision 1.15 2004/08/16 08:15:54 yada
|
||||
HW_CHECK_DEBUGGER_BUF definition is moved to mmap_shared.h header
|
||||
|
||||
Revision 1.14 2004/08/11 13:18:58 yada
|
||||
change method to detect platform
|
||||
|
||||
Revision 1.13 2004/07/23 01:03:03 yada
|
||||
OS_UnLockCartridge -> OS_UnlockCartridge
|
||||
|
||||
Revision 1.12 2004/07/22 08:22:41 yada
|
||||
fix for changing some lockID's type u32->u16
|
||||
|
||||
Revision 1.11 2004/06/08 10:43:26 yada
|
||||
add information about main memory size
|
||||
|
||||
Revision 1.10 2004/06/08 04:34:45 yada
|
||||
only fix comment
|
||||
|
||||
Revision 1.9 2004/06/07 04:29:39 yada
|
||||
add OS_GetConsoleType()
|
||||
|
||||
Revision 1.8 2004/02/13 08:39:30 yasu
|
||||
OS_IsRunOnEmulator returns by FALSE if ARM7
|
||||
|
||||
Revision 1.7 2004/02/13 02:26:56 yada
|
||||
ARM9とAMR7 でインクルードファイル場合わけ
|
||||
|
||||
Revision 1.6 2004/02/12 11:08:30 yada
|
||||
ARM9/ARM7 振り分け作業
|
||||
|
||||
Revision 1.5 2004/02/06 09:29:43 yasu
|
||||
OS_IsRunEmulator の認識処理を一度だけにした.
|
||||
|
||||
Revision 1.4 2004/02/05 07:09:02 yasu
|
||||
change SDK prefix iris -> nitro
|
||||
|
||||
Revision 1.3 2003/12/25 07:31:26 yada
|
||||
型ルール統一による変更
|
||||
|
||||
Revision 1.2 2003/11/30 04:20:26 yasu
|
||||
OS_EnableInterrupt/DisableInterrupt の戻り値の型の変更
|
||||
|
||||
Revision 1.1 2003/11/29 01:25:46 yada
|
||||
ファイル名称変更
|
||||
|
||||
Revision 1.1 2003/11/25 11:17:37 yasu
|
||||
エミュレータの自動判別追加
|
||||
|
||||
$NoKeywords: $
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <nitro.h>
|
||||
|
||||
//---- current processor lock flag
|
||||
#ifdef SDK_ARM9
|
||||
#define OSi_CURPROC_LOCKED_FLAG OS_MAINP_LOCKED_FLAG
|
||||
#else
|
||||
#define OSi_CURPROC_LOCKED_FLAG OS_SUBP_LOCKED_FLAG
|
||||
#endif
|
||||
|
||||
static u32 OSi_ConsoleTypeCache = OSi_CONSOLE_NOT_DETECT;
|
||||
|
||||
u32 OSi_GetDeviceType(void);
|
||||
BOOL OSi_IsRunOnDebugger(void);
|
||||
|
||||
//================================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OS_IsRunOnEmulator
|
||||
|
||||
Description: Detect emulator
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: non 0 if emulator
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL OS_IsRunOnEmulator(void)
|
||||
{
|
||||
#ifdef SDK_ARM9
|
||||
#ifndef SDK_FINALROM
|
||||
static int onEmu = -1; // Not so good coding style...
|
||||
u32 val;
|
||||
OSIntrMode intr;
|
||||
|
||||
if (onEmu == -1)
|
||||
{
|
||||
intr = OS_DisableInterrupts();
|
||||
{
|
||||
// PING magic number to ensata
|
||||
(*(REGType32v *)REG_CLIPMTX_RESULT_0_ADDR) = 0x2468ace0;
|
||||
|
||||
// PONG magic number from ensata
|
||||
val = *(vu16 *)REG_VCOUNT_ADDR & 0x1ffU;
|
||||
|
||||
if (val == 270)
|
||||
{
|
||||
// Recognized as ensata, send back ACK signal to ensata
|
||||
*(vu32 *)0x4fff010 = 0x13579bdf; // ACK Signal 1
|
||||
*(vu32 *)0x4fff010 = 0xfdb97531; // ACK Signal 2
|
||||
onEmu = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Unidentified ...
|
||||
onEmu = FALSE;
|
||||
}
|
||||
}
|
||||
(void)OS_RestoreInterrupts(intr);
|
||||
}
|
||||
return (BOOL)onEmu;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif
|
||||
|
||||
#else // SDK_ARM7
|
||||
return FALSE; // always FALSE if ARM7
|
||||
#endif
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OS_GetConsoleType
|
||||
|
||||
Description: Detect console type
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns:
|
||||
*---------------------------------------------------------------------------*/
|
||||
u32 OS_GetConsoleType(void)
|
||||
{
|
||||
#if defined( SDK_FINALROM ) || defined( SDK_SMALL_BUILD )
|
||||
OSi_ConsoleTypeCache = OS_CONSOLE_NITRO | OS_CONSOLE_DEV_CARD | OS_CONSOLE_SIZE_4MB;
|
||||
|
||||
#else // if defined( SDK_FINALROM ) && defined( SDK_SMALL_BUILD )
|
||||
|
||||
//---- skip if detect already
|
||||
if (OSi_ConsoleTypeCache == OSi_CONSOLE_NOT_DETECT)
|
||||
{
|
||||
//---- whether device is cartridge?
|
||||
u32 type = OSi_GetDeviceType();
|
||||
|
||||
//---- running on software emulator Ensata?
|
||||
if (OS_IsRunOnEmulator())
|
||||
{
|
||||
type |= OS_CONSOLE_ENSATA;
|
||||
}
|
||||
//---- running on debugger?
|
||||
else if (OSi_IsRunOnDebugger())
|
||||
{
|
||||
type |= OS_CONSOLE_ISDEBUGGER;
|
||||
}
|
||||
//---- is card device cartridge? so that running on IS-Emulator
|
||||
else if (type & OS_CONSOLE_DEV_CARTRIDGE)
|
||||
{
|
||||
type |= OS_CONSOLE_ISEMULATOR;
|
||||
}
|
||||
//---- else, maybe retail NITRO.
|
||||
else
|
||||
{
|
||||
type |= OS_CONSOLE_NITRO;
|
||||
}
|
||||
|
||||
//---- main memory size (maybe ARM7 has already detected)
|
||||
type |= *(u16 *)HW_MMEMCHECKER_SUB;
|
||||
|
||||
OSi_ConsoleTypeCache = type;
|
||||
}
|
||||
#endif // if defined( SDK_FINALROM ) && defined( SDK_SMALL_BUILD )
|
||||
|
||||
return OSi_ConsoleTypeCache;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OSi_GetDeviceType
|
||||
|
||||
Description: get card device type
|
||||
(subroutine of OS_GetConsoleType)
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: decided by bus card data loaded
|
||||
OS_CONSOLE_DEV_CARTRIDGE : via cartridge bus
|
||||
OS_CONSOLE_DEV_CARD : via card bus
|
||||
*---------------------------------------------------------------------------*/
|
||||
u32 OSi_GetDeviceType(void)
|
||||
{
|
||||
u32 result = OS_CONSOLE_DEV_CARD;
|
||||
|
||||
#if 0
|
||||
BOOL checked = FALSE;
|
||||
u16 lockId = (u16)OS_GetLockID(); // treat as success absolutely
|
||||
|
||||
do
|
||||
{
|
||||
s32 ret = OS_LOCK_ERROR;
|
||||
OSIntrMode enabled = OS_DisableInterrupts();
|
||||
|
||||
//---- cartridge already locked or lock now success
|
||||
if ((OS_ReadOwnerOfLockCartridge() & OSi_CURPROC_LOCKED_FLAG)
|
||||
|| ((ret = (s32)OS_TryLockCartridge(lockId)) == OS_LOCK_SUCCESS))
|
||||
{
|
||||
//---- check cartridge header
|
||||
result =
|
||||
(u32)(((((vu32 *)HW_CTRDG_ROM)[0] == (u32)'TNIN') &&
|
||||
(((vu32 *)HW_CTRDG_ROM)[1] == (u32)'ODNE')) ?
|
||||
OS_CONSOLE_DEV_CARTRIDGE : OS_CONSOLE_DEV_CARD);
|
||||
//---- unlock cartridge
|
||||
if (ret == OS_LOCK_SUCCESS)
|
||||
{
|
||||
(void)OS_UnlockCartridge(lockId);
|
||||
checked = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
(void)OS_RestoreInterrupts(enabled);
|
||||
}
|
||||
while (!checked);
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OSi_IsRunOnDebugger
|
||||
|
||||
Description: Detect Debugger
|
||||
(subroutine of OS_GetConsoleType)
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: TRUE : debugger
|
||||
FALSE : not debugger
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL OSi_IsRunOnDebugger(void)
|
||||
{
|
||||
u16 *checkAddress = (u16 *)((*(u16 *)HW_CHECK_DEBUGGER_SW ==
|
||||
0) ? HW_CHECK_DEBUGGER_BUF1 : HW_CHECK_DEBUGGER_BUF2);
|
||||
|
||||
return (*checkAddress == 1) ? TRUE : FALSE;
|
||||
}
|
||||
523
build/libraries/os/common/os_exception.c
Normal file
523
build/libraries/os/common/os_exception.c
Normal file
@ -0,0 +1,523 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: NitroSDK - OS
|
||||
File: os_exception.c
|
||||
|
||||
Copyright 2003-2006 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.
|
||||
|
||||
$Log: os_exception.c,v $
|
||||
Revision 1.38 2006/05/24 07:54:06 kitase_hirotake
|
||||
例外ハンドラの設定条件の変更
|
||||
|
||||
Revision 1.37 2006/05/08 09:26:16 okubata_ryoma
|
||||
FINALROMの場合はデバッガ上でもOS_CONSOLE_NITROを返すことに関する修正
|
||||
|
||||
Revision 1.36 2006/04/04 06:05:53 yosizaki
|
||||
コールスタックの8バイト整合に関する修正.
|
||||
|
||||
Revision 1.35 2006/01/18 02:11:30 kitase_hirotake
|
||||
do-indent
|
||||
|
||||
Revision 1.34 2005/02/28 05:26:28 yosizaki
|
||||
do-indent.
|
||||
|
||||
Revision 1.33 2004/11/02 10:35:45 yada
|
||||
just fix comment
|
||||
|
||||
Revision 1.32 2004/10/03 09:59:16 yasu
|
||||
Avoid sdkindent in inline-asm{}
|
||||
|
||||
Revision 1.31 2004/09/02 02:53:42 yada
|
||||
only change comment
|
||||
|
||||
Revision 1.30 2004/08/26 00:20:10 yada
|
||||
change method to distinguish running on debugger
|
||||
|
||||
Revision 1.29 2004/06/11 06:24:43 yada
|
||||
close SDK_BB support
|
||||
|
||||
Revision 1.28 2004/06/10 06:25:06 yada
|
||||
consider for occurring exception in THUMB mode
|
||||
|
||||
Revision 1.27 2004/06/07 10:56:35 yada
|
||||
make difference to set handler according to exec environment
|
||||
|
||||
Revision 1.26 2004/05/12 11:00:48 yada
|
||||
OSi_ExPrintf always uses OS_Printf
|
||||
|
||||
Revision 1.25 2004/05/12 05:34:29 yada
|
||||
some fix
|
||||
|
||||
Revision 1.24 2004/05/12 05:31:46 yada
|
||||
modification for DEBUGGER
|
||||
|
||||
Revision 1.23 2004/05/07 02:11:06 takano_makoto
|
||||
Change OSiExContext offset definition.
|
||||
|
||||
Revision 1.22 2004/04/16 09:36:19 yada
|
||||
fix temporary exception vector
|
||||
0x27fffd9c->0x027ffd9c
|
||||
|
||||
Revision 1.21 2004/04/14 12:48:20 yada
|
||||
IS-NITRO-DEBUGGERへの暫定対応
|
||||
|
||||
Revision 1.20 2004/03/30 06:09:29 yada
|
||||
ldconst や lda を ldr = を使用する記述にした。
|
||||
|
||||
Revision 1.19 2004/03/18 12:56:43 yada
|
||||
例外ベクタ設定のミス修正
|
||||
|
||||
Revision 1.18 2004/03/11 09:47:14 yada
|
||||
例外時にFIQ,IRQ割り込み禁止していたのをIRQ割り込み禁止のみにした。
|
||||
|
||||
Revision 1.17 2004/03/09 02:37:59 yada
|
||||
debuggerモニタハンドラ呼び出し判定部分修正
|
||||
|
||||
Revision 1.16 2004/03/08 02:54:13 yada
|
||||
デバッガモニタの例外ハンドラを考慮
|
||||
|
||||
Revision 1.15 2004/03/01 11:54:24 yada
|
||||
英語の関数comment作成
|
||||
|
||||
Revision 1.14 2004/02/19 08:43:05 yada
|
||||
ユーザ例外ルーチンの型追加
|
||||
|
||||
Revision 1.13 2004/02/17 06:04:38 yada
|
||||
ARM7への対応
|
||||
|
||||
Revision 1.12 2004/02/16 09:40:12 yada
|
||||
ARM7側の割り込みもフックするようにした。
|
||||
|
||||
Revision 1.11 2004/02/16 00:49:30 yasu
|
||||
Don't switch ISD/noISD by SDK_LINK_ISD.
|
||||
Please use stubs library to resolve it at link time.
|
||||
|
||||
Revision 1.10 2004/02/13 04:05:28 yada
|
||||
ARM9とAMR7 の場合わけ考慮
|
||||
|
||||
Revision 1.9 2004/02/12 11:08:30 yada
|
||||
ARM9/ARM7 振り分け作業
|
||||
|
||||
Revision 1.8 2004/02/09 11:17:22 yasu
|
||||
include code32.h
|
||||
|
||||
Revision 1.7 2004/02/05 10:50:59 yada
|
||||
未定義命令で停止するようにした
|
||||
|
||||
Revision 1.6 2004/02/05 07:09:02 yasu
|
||||
change SDK prefix iris -> nitro
|
||||
|
||||
Revision 1.5 2004/02/02 05:34:54 yada
|
||||
OS_SetIrqMask()→OS_EnableIrqMask() へ
|
||||
|
||||
Revision 1.4 2004/01/30 08:05:36 yada
|
||||
FINALROMでは例外表示をしないように修正
|
||||
|
||||
Revision 1.3 2004/01/30 04:31:47 yada
|
||||
例外表示の組み込み
|
||||
|
||||
Revision 1.2 2004/01/16 01:18:05 yasu
|
||||
Support SDK_BB
|
||||
|
||||
Revision 1.1 2004/01/14 12:03:05 yada
|
||||
初版
|
||||
|
||||
$NoKeywords: $
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <nitro/hw/common/armArch.h>
|
||||
#include <nitro/memorymap.h>
|
||||
#include <nitro/os.h>
|
||||
|
||||
|
||||
//---- displaying function OSi_ExPrintf
|
||||
#ifdef SDK_ARM9
|
||||
#define OSi_ExPrintf OS_Printf
|
||||
//#define OSi_ExPrintf ISDPrintf
|
||||
//void ISDPrintf( const char *pBuf, ... );
|
||||
#else
|
||||
#define OSi_ExPrintf OS_Printf
|
||||
#endif
|
||||
|
||||
|
||||
static asm void OSi_ExceptionHandler( void );
|
||||
static asm void OSi_GetAndDisplayContext( void );
|
||||
static asm void OSi_SetExContext( void );
|
||||
static void OSi_DisplayExContext( void );
|
||||
|
||||
|
||||
//---- context for exception display
|
||||
typedef struct
|
||||
{
|
||||
OSContext context;
|
||||
u32 cp15;
|
||||
u32 spsr;
|
||||
u32 exinfo;
|
||||
u32 debug[4];
|
||||
} OSiExContext;
|
||||
|
||||
static OSiExContext OSi_ExContext;
|
||||
|
||||
//---- user's exception handler
|
||||
static OSExceptionHandler OSi_UserExceptionHandler;
|
||||
static void *OSi_UserExceptionHandlerArg;
|
||||
|
||||
//---- debugger's exception handler
|
||||
static void *OSi_DebuggerHandler = NULL;
|
||||
|
||||
//================================================================================
|
||||
// exception vector
|
||||
//================================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OS_SetExceptionVectorUpper
|
||||
|
||||
Description: set exception vector to high address
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <nitro/code32.h>
|
||||
asm void OS_SetExceptionVectorUpper( void )
|
||||
{
|
||||
mrc p15, 0, r0, c1, c0, 0
|
||||
orr r0, r0, #HW_C1_EXCEPT_VEC_UPPER
|
||||
mcr p15, 0, r0, c1, c0, 0
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OS_SetExceptionVectorLower
|
||||
|
||||
Description: set exception vector to low address
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm void OS_SetExceptionVectorLower( void )
|
||||
{
|
||||
mrc p15, 0, r0, c1, c0, 0
|
||||
bic r0, r0, #HW_C1_EXCEPT_VEC_UPPER
|
||||
mcr p15, 0, r0, c1, c0, 0
|
||||
bx lr
|
||||
}
|
||||
#include <nitro/codereset.h>
|
||||
|
||||
|
||||
//================================================================================
|
||||
// exception handling
|
||||
//================================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OS_InitException
|
||||
|
||||
Description: Initialize exception handling system
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
// 将来的には HW_EXCP_VECTOR_BUF をこの値に。
|
||||
#define HW_EXCP_VECTOR_BUF_FOR_DEBUGGER HW_EXCP_VECTOR_MAIN
|
||||
|
||||
void OS_InitException(void)
|
||||
{
|
||||
//---- consider for debugger exception handler
|
||||
if (0x2600000 <= *(u32 *)HW_EXCP_VECTOR_BUF_FOR_DEBUGGER
|
||||
&& *(u32 *)HW_EXCP_VECTOR_BUF_FOR_DEBUGGER < HW_MAIN_MEM_EX_END)
|
||||
{
|
||||
OSi_DebuggerHandler = *(void **)HW_EXCP_VECTOR_BUF_FOR_DEBUGGER;
|
||||
}
|
||||
else
|
||||
{
|
||||
OSi_DebuggerHandler = NULL;
|
||||
}
|
||||
|
||||
//---- exception hook
|
||||
if (!OSi_DebuggerHandler)
|
||||
{
|
||||
*(u32 *)(HW_EXCP_VECTOR_BUF_FOR_DEBUGGER) = (u32)OSi_ExceptionHandler;
|
||||
|
||||
// for not-debugger, store handler address into original hook
|
||||
*(u32 *)(HW_EXCP_VECTOR_BUF) = (u32)OSi_ExceptionHandler;
|
||||
}
|
||||
|
||||
//---- user's handler
|
||||
OSi_UserExceptionHandler = NULL;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OS_SetUserExceptionHandler
|
||||
|
||||
Description: set user exception handler and its argument
|
||||
|
||||
Arguments: handler exception hander
|
||||
arg its argument
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void OS_SetUserExceptionHandler(OSExceptionHandler handler, void *arg)
|
||||
{
|
||||
OSi_UserExceptionHandler = handler;
|
||||
OSi_UserExceptionHandlerArg = arg;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OSi_ExceptionHandler
|
||||
|
||||
Description: system exception handler
|
||||
user handler is called from here
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
//
|
||||
// status of stack is {cp15,spsr,r12,lr}
|
||||
// LSB = 1 means coming by reset
|
||||
//
|
||||
#include <nitro/code32.h>
|
||||
asm void OSi_ExceptionHandler( void )
|
||||
{
|
||||
//---- call debugger monitor handler (if exists)
|
||||
ldr r12, =OSi_DebuggerHandler // r12のみ破壊可
|
||||
ldr r12, [r12]
|
||||
cmp r12, #0
|
||||
movne lr, pc
|
||||
bxne r12
|
||||
|
||||
//---- setting stack pointer <------------------------- consider later
|
||||
#ifdef SDK_ARM9
|
||||
//---- ARM9 stack
|
||||
ldr r12, =HW_ITCM_END
|
||||
#else
|
||||
//---- ARM7 stack
|
||||
ldr r12, =0x3806000
|
||||
#endif
|
||||
stmfd r12!, {r0-r3,sp,lr}
|
||||
|
||||
and r0, sp, #1
|
||||
mov sp, r12
|
||||
|
||||
mrs r1, CPSR
|
||||
and r1, r1, #0x1f
|
||||
|
||||
//---- if ABORT exception, stop
|
||||
teq r1, #0x17
|
||||
bne @10
|
||||
bl OSi_GetAndDisplayContext
|
||||
b usr_return
|
||||
|
||||
@10:
|
||||
//---- if UNDEF exception, stop
|
||||
teq r1, #0x1b
|
||||
bne usr_return
|
||||
bl OSi_GetAndDisplayContext
|
||||
|
||||
usr_return:
|
||||
ldr r12, =OSi_DebuggerHandler
|
||||
ldr r12, [r12]
|
||||
cmp r12, #0
|
||||
@1: beq @1
|
||||
|
||||
//( stop now even if debugger )
|
||||
@2:
|
||||
mov r0,r0 // nop
|
||||
b @2
|
||||
|
||||
ldmfd sp!, {r0-r3, r12, lr}
|
||||
mov sp, r12
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OSi_GetAndDisplayContext
|
||||
|
||||
Description: stop after displaying registers
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static asm void OSi_GetAndDisplayContext( void )
|
||||
{
|
||||
stmfd sp!, {r0, lr} /* コールスタックを 8 バイト整合 */
|
||||
|
||||
//---- set exception context
|
||||
bl OSi_SetExContext
|
||||
//---- display exception context (and call user callback)
|
||||
bl OSi_DisplayExContext
|
||||
|
||||
ldmfd sp!, {r0, lr} /* コールスタックを 8 バイト整合 */
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OSi_SetExContext
|
||||
|
||||
Description: set context when exception occurred
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
// explanation registers at the top of this function.
|
||||
//
|
||||
// in r12, {r0-r3,sp} (sp is exception sp) stored.
|
||||
// in this sp, {cp15,spsr,r12,lr} (cp15,spsr,r12,lr is registers when exception occurred) stored.
|
||||
// r4-r11 is registers then exception occurred.
|
||||
// if you want to know spsr,sp,lr, please switch bank and read.
|
||||
//
|
||||
static asm void OSi_SetExContext( void )
|
||||
{
|
||||
//---- pointer ExContext structure
|
||||
ldr r1, =OSi_ExContext;
|
||||
|
||||
mrs r2, CPSR
|
||||
str r2, [r1, #OSiExContext.debug[1] ]
|
||||
|
||||
//---- store bit which means which is the reason, reset or exception
|
||||
str r0, [r1, #OSiExContext.exinfo ]
|
||||
|
||||
//---- store r0 - r3
|
||||
ldr r0, [r12,#0]
|
||||
str r0, [r1, #OS_CONTEXT_R0]
|
||||
ldr r0, [r12,#4]
|
||||
str r0, [r1, #OS_CONTEXT_R1]
|
||||
ldr r0, [r12,#8]
|
||||
str r0, [r1, #OS_CONTEXT_R2]
|
||||
ldr r0, [r12, #12]
|
||||
str r0, [r1, #OS_CONTEXT_R3]
|
||||
ldr r2, [r12, #16]
|
||||
bic r2, r2, #1
|
||||
|
||||
//---- store r4 - r11
|
||||
add r0, r1, #OS_CONTEXT_R4
|
||||
stmia r0, {r4-r11}
|
||||
|
||||
//---- (for debug)
|
||||
str r12, [r1, #OSiExContext.debug[0] ]
|
||||
|
||||
#ifdef SDK_ARM9
|
||||
//---- get {cp15,cpsr,r12,pc} from stack
|
||||
ldr r0, [r2, #0]
|
||||
str r0, [r1, #OSiExContext.cp15 ]
|
||||
ldr r3, [r2, #4]
|
||||
str r3, [r1, #OS_CONTEXT_CPSR]
|
||||
ldr r0, [r2, #8]
|
||||
str r0, [r1, #OS_CONTEXT_R12]
|
||||
ldr r0, [r2, #12]
|
||||
str r0, [r1, #OS_CONTEXT_PC_PLUS4]
|
||||
#else // ifdef SDK_ARM9
|
||||
//---- get {cpsr,r12,pc} from stack
|
||||
mov r0, #0
|
||||
str r0, [r1, #OSiExContext.cp15]
|
||||
ldr r3, [r2, #0]
|
||||
str r3, [r1, #OS_CONTEXT_CPSR]
|
||||
ldr r0, [r2, #4]
|
||||
str r0, [r1, #OS_CONTEXT_R12]
|
||||
ldr r0, [r2, #8]
|
||||
str r0, [r1, #OS_CONTEXT_PC_PLUS4]
|
||||
#endif // ifdef SDK_ARM9
|
||||
|
||||
//---- set mode to one which exception occurred
|
||||
// but, disable IRQ
|
||||
mrs r0, CPSR
|
||||
orr r3, r3, #0x80
|
||||
bic r3, r3, #0x20
|
||||
msr CPSR_cxsf, r3
|
||||
|
||||
//---- get sp, lr, spsr
|
||||
str sp, [r1, #OS_CONTEXT_R13]
|
||||
str lr, [r1, #OS_CONTEXT_R14]
|
||||
mrs r2, SPSR
|
||||
|
||||
//---- debugger
|
||||
str r2, [r1, #OSiExContext.debug[3] ]
|
||||
|
||||
//---- restore mode
|
||||
msr CPSR_cxsf, r0
|
||||
bx lr
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: OSi_DisplayExContext
|
||||
|
||||
Description: stop after display exception context
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void OSi_DisplayExContext()
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
int i;
|
||||
|
||||
OSi_ExPrintf("**** Exception Occurred ****\n");
|
||||
|
||||
//---------------- displaying registers
|
||||
//---- for R0-15 Registers
|
||||
for (i = 0; i < 13; i++)
|
||||
{
|
||||
OSi_ExPrintf("R%02d=%08X %c", i, OSi_ExContext.context.r[i], ((i & 3) == 3) ? '\n' : ' ');
|
||||
}
|
||||
OSi_ExPrintf("SP =%08X ", OSi_ExContext.context.sp);
|
||||
OSi_ExPrintf("LR =%08X ", OSi_ExContext.context.lr);
|
||||
OSi_ExPrintf("PC =%08X\n", OSi_ExContext.context.pc_plus4);
|
||||
|
||||
//---- for status Registers
|
||||
#ifdef SDK_ARM9
|
||||
OSi_ExPrintf(" CPSR=%08X SPSR=%08X CP15=%08X\n",
|
||||
OSi_ExContext.context.cpsr, OSi_ExContext.spsr, OSi_ExContext.cp15);
|
||||
#else
|
||||
OSi_ExPrintf(" CPSR=%08X SPSR=%08X\n", OSi_ExContext.context.cpsr, OSi_ExContext.spsr);
|
||||
#endif
|
||||
|
||||
//---- for Debug Values
|
||||
#if 0
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
OSi_ExPrintf("DEBUG%02d=%08X ", i, OSi_ExContext.debug[i]);
|
||||
}
|
||||
#endif
|
||||
OSi_ExPrintf("\n\n");
|
||||
#endif
|
||||
|
||||
//---------------- user's callback
|
||||
if (OSi_UserExceptionHandler)
|
||||
{
|
||||
//---- force to become SYS mode
|
||||
// but, use current stack not SYS mode stack
|
||||
asm
|
||||
{
|
||||
/* *INDENT-OFF* */
|
||||
mov r0, sp
|
||||
ldr r1, =0x9f
|
||||
msr CPSR_cxsf, r1
|
||||
mov sp, r0
|
||||
/* *INDENT-ON* */
|
||||
}
|
||||
|
||||
#ifdef SDK_ARM9
|
||||
OS_EnableProtectionUnit();
|
||||
#endif
|
||||
|
||||
//---- call user handler
|
||||
((void (*)(u32, void *))OSi_UserExceptionHandler) ((u32)&OSi_ExContext,
|
||||
OSi_UserExceptionHandlerArg);
|
||||
|
||||
#ifdef SDK_ARM9
|
||||
OS_DisableProtectionUnit();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#include <nitro/codereset.h>
|
||||
@ -206,12 +206,12 @@ OSIrqMask OS_SetIrqMask(OSIrqMask intr)
|
||||
{
|
||||
BOOL ime = OS_DisableIrq(); // IME disable
|
||||
OSIrqMask prep = reg_OS_IE;
|
||||
reg_OS_IE = intr;
|
||||
reg_OS_IE = (u32)intr;
|
||||
#ifdef SDK_ARM7
|
||||
{
|
||||
OSIrqMask prep2 = reg_OS_IE2;
|
||||
prep |= prep2 << 32;
|
||||
reg_OS_IE2 = intr >> 32;
|
||||
reg_OS_IE2 = (u32)(intr >> 32);
|
||||
}
|
||||
#endif
|
||||
(void)OS_RestoreIrq(ime);
|
||||
@ -231,12 +231,12 @@ OSIrqMask OS_EnableIrqMask(OSIrqMask intr)
|
||||
{
|
||||
BOOL ime = OS_DisableIrq(); // IME disable
|
||||
OSIrqMask prep = reg_OS_IE;
|
||||
reg_OS_IE = prep | intr;
|
||||
reg_OS_IE = (u32)(prep | intr);
|
||||
#ifdef SDK_ARM7
|
||||
{
|
||||
OSIrqMask prep2 = reg_OS_IE2;
|
||||
prep |= prep2 << 32;
|
||||
reg_OS_IE2 = prep2 | intr >> 32;
|
||||
reg_OS_IE2 = (u32)(prep2 | intr >> 32);
|
||||
}
|
||||
#endif
|
||||
(void)OS_RestoreIrq(ime);
|
||||
@ -256,12 +256,12 @@ OSIrqMask OS_DisableIrqMask(OSIrqMask intr)
|
||||
{
|
||||
BOOL ime = OS_DisableIrq(); // IME disable
|
||||
OSIrqMask prep = reg_OS_IE;
|
||||
reg_OS_IE = prep & ~intr;
|
||||
reg_OS_IE = (u32)(prep & ~intr);
|
||||
#ifdef SDK_ARM7
|
||||
{
|
||||
OSIrqMask prep2 = reg_OS_IE2;
|
||||
prep |= prep2 << 32;
|
||||
reg_OS_IE2 = prep2 & ~(intr >> 32);
|
||||
reg_OS_IE2 = (u32)(prep2 & ~(intr >> 32));
|
||||
}
|
||||
#endif
|
||||
(void)OS_RestoreIrq(ime);
|
||||
@ -282,12 +282,12 @@ OSIrqMask OS_ResetRequestIrqMask(OSIrqMask intr)
|
||||
{
|
||||
BOOL ime = OS_DisableIrq(); // IME disable
|
||||
OSIrqMask prep = reg_OS_IF;
|
||||
reg_OS_IF = intr;
|
||||
reg_OS_IF = (u32)intr;
|
||||
#ifdef SDK_ARM7
|
||||
{
|
||||
OSIrqMask prep2 = reg_OS_IF2;
|
||||
prep |= prep2 << 32;
|
||||
reg_OS_IF2 = intr >> 32;
|
||||
reg_OS_IF2 = (u32)(intr >> 32);
|
||||
}
|
||||
#endif
|
||||
(void)OS_RestoreIrq(ime);
|
||||
|
||||
@ -269,7 +269,7 @@ void OS_InitLock(void)
|
||||
MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM7);
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
_ISDbgLib_Initialize();
|
||||
// _ISDbgLib_Initialize();
|
||||
#endif
|
||||
|
||||
(void)OS_UnlockByWord(OS_MAINP_SYSTEM_LOCK_ID - 1, lockp, NULL);
|
||||
@ -289,7 +289,7 @@ void OS_InitLock(void)
|
||||
}
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
_ISDbgLib_Initialize();
|
||||
// _ISDbgLib_Initialize();
|
||||
#endif
|
||||
|
||||
// ロックIDカウンタ用フラグ 初期化
|
||||
|
||||
59
build/libraries/pxi/ARM7/Makefile
Normal file
59
build/libraries/pxi/ARM7/Makefile
Normal file
@ -0,0 +1,59 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - libraries - pxi
|
||||
# File: Makefile
|
||||
#
|
||||
# Copyright 2007 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.
|
||||
#
|
||||
# $Log: $
|
||||
# $NoKeywords: $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS =
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# build ARM & THUMB libraries
|
||||
TWL_CODEGEN_ALL ?= True
|
||||
|
||||
TWL_PROC = ARM7
|
||||
|
||||
SRCDIR = ../common .
|
||||
SRCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/pxi/common/src \
|
||||
$(TWL_NITROSDK_ROOT)/build/libraries/pxi/ARM7/src \
|
||||
|
||||
SRCS = pxi_init.c pxi_fifo.c
|
||||
|
||||
TARGET_LIB = libpxi_sp$(TWL_LIBSUFFIX).a
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# DEBUG版ビルドの場合、RELEASE版でビルドして
|
||||
# DEBUG版のライブラリを装います。
|
||||
|
||||
ifdef NITRO_DEBUG
|
||||
NITRO_BUILD_TYPE = RELEASE
|
||||
endif
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build: $(TARGETS)
|
||||
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
50
build/libraries/pxi/ARM9/Makefile
Normal file
50
build/libraries/pxi/ARM9/Makefile
Normal file
@ -0,0 +1,50 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - libraries - pxi
|
||||
# File: Makefile
|
||||
#
|
||||
# Copyright 2007 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.
|
||||
#
|
||||
# $Log: $
|
||||
# $NoKeywords: $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS =
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# build ARM & THUMB libraries
|
||||
TWL_CODEGEN_ALL ?= True
|
||||
|
||||
TWL_PROC = ARM9
|
||||
|
||||
SRCDIR = ../common .
|
||||
SRCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/pxi/common/src \
|
||||
$(TWL_NITROSDK_ROOT)/build/libraries/pxi/ARM9/src \
|
||||
|
||||
SRCS = pxi_init.c pxi_fifo.c
|
||||
|
||||
TARGET_LIB = libpxi$(TWL_LIBSUFFIX).a
|
||||
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build: $(TARGETS)
|
||||
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
34
build/libraries/pxi/Makefile
Normal file
34
build/libraries/pxi/Makefile
Normal file
@ -0,0 +1,34 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - libraries - pxi
|
||||
# File: Makefile
|
||||
#
|
||||
# Copyright 2007 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.
|
||||
#
|
||||
# $Log: $
|
||||
# $NoKeywords: $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9
|
||||
|
||||
#ifdef TWL_WITH_ARM7
|
||||
SUBDIRS += ARM7
|
||||
#endif
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
@ -21,7 +21,6 @@ SUBDIRS =
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
#TWL_CODEGEN = THUMB
|
||||
TWL_CODEGEN = ARM
|
||||
TWL_PROC = ARM7
|
||||
|
||||
TARGET_BIN = main.axf
|
||||
|
||||
162
include/nitro/hw/ARM7/mmap_global.h
Normal file
162
include/nitro/hw/ARM7/mmap_global.h
Normal file
@ -0,0 +1,162 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: NitroSDK - include/sp - HW
|
||||
File: mmap_global.h
|
||||
|
||||
Copyright 2003-2005 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.
|
||||
|
||||
$Log: mmap_global.h,v $
|
||||
Revision 1.13 2005/02/28 05:26:27 yosizaki
|
||||
do-indent.
|
||||
|
||||
Revision 1.12 2004/06/11 06:17:48 yada
|
||||
close SDK_BB support
|
||||
|
||||
Revision 1.11 2004/04/06 06:38:30 yasu
|
||||
small fix for WRAM address
|
||||
|
||||
Revision 1.10 2004/04/05 10:33:49 takano_makoto
|
||||
Small modyfy at indent.
|
||||
|
||||
Revision 1.9 2004/04/05 10:32:34 takano_makoto
|
||||
Add HW_EXT_WRAM
|
||||
|
||||
Revision 1.8 2004/03/25 01:29:45 yada
|
||||
only add comment
|
||||
|
||||
Revision 1.7 2004/03/23 07:41:29 yada
|
||||
TEGでないときの、ARM7専用WRAMを考慮
|
||||
|
||||
Revision 1.6 2004/02/17 08:22:07 yada
|
||||
tab整形
|
||||
|
||||
Revision 1.5 2004/02/13 10:40:18 yada
|
||||
(none)
|
||||
|
||||
Revision 1.4 2004/02/12 13:32:25 yasu
|
||||
change include guards
|
||||
|
||||
Revision 1.3 2004/02/05 07:09:03 yasu
|
||||
change SDK prefix iris -> nitro
|
||||
|
||||
Revision 1.2 2003/12/22 14:08:52 yasu
|
||||
include ガードの修正
|
||||
|
||||
Revision 1.1 2003/12/16 10:56:38 yasu
|
||||
spcode から移動
|
||||
|
||||
Revision 1.2 2003/12/16 06:29:41 ida
|
||||
DTCM の記述を削除
|
||||
内部ワークRAMの記述を追加
|
||||
|
||||
Revision 1.1 2003/12/11 05:38:05 yasu
|
||||
ARM9 版をコピー
|
||||
|
||||
$NoKeywords: $
|
||||
*---------------------------------------------------------------------------*/
|
||||
#ifndef NITRO_ARM7_HW_MMAP_GLOBAL_H_
|
||||
#define NITRO_ARM7_HW_MMAP_GLOBAL_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// GLOBAL MEMORY MAP
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------
|
||||
// Physical Address
|
||||
//
|
||||
//----------------------------- MAIN
|
||||
#define HW_MAIN_MEM 0x02000000
|
||||
#define HW_MAIN_MEM_SIZE 0x00400000
|
||||
#define HW_MAIN_MEM_EX_SIZE 0x01000000
|
||||
|
||||
#define HW_MAIN_MEM_END (HW_MAIN_MEM + HW_MAIN_MEM_SIZE)
|
||||
#define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE)
|
||||
|
||||
//----------------------------- MAIN_HI
|
||||
#define HW_MAIN_MEM_HI 0x0c000000
|
||||
#define HW_MAIN_MEM_HI_SIZE 0x01000000
|
||||
#define HW_MAIN_MEM_HI_EX_SIZE 0x02000000
|
||||
|
||||
#define HW_MAIN_MEM_HI_END (HW_MAIN_MEM_HI + HW_MAIN_MEM_HI_SIZE)
|
||||
#define HW_MAIN_MEM_HI_EX_END (HW_MAIN_MEM_HI + HW_MAIN_MEM_HI_EX_SIZE)
|
||||
|
||||
//----------------------------- WRAMs
|
||||
#define HW_WRAM 0x037f8000
|
||||
#define HW_WRAM_END 0x03800000
|
||||
#define HW_WRAM_SIZE (HW_WRAM_END-HW_WRAM)
|
||||
|
||||
//----------------------------- PRV-WRAMs
|
||||
#define HW_PRV_WRAM 0x03800000
|
||||
// TEG : ARM7 WRAM == 32KB
|
||||
// TS : ARM7 WRAM == 64KB
|
||||
#if defined(SDK_TEG)
|
||||
#define HW_PRV_WRAM_END 0x03808000
|
||||
#else
|
||||
#define HW_PRV_WRAM_END 0x03810000
|
||||
#endif
|
||||
#define HW_PRV_WRAM_SIZE (HW_PRV_WRAM_END-HW_PRV_WRAM)
|
||||
|
||||
//----------------------------- IOs
|
||||
#define HW_IOREG 0x04000000
|
||||
#define HW_IOREG_END 0x05000000
|
||||
#define HW_REG_BASE HW_IOREG // alias
|
||||
|
||||
//----------------------------- VRAMs
|
||||
#define HW_BG_PLTT 0x05000000
|
||||
#define HW_BG_PLTT_END 0x05000200
|
||||
#define HW_BG_PLTT_SIZE (HW_BG_PLTT_END-HW_BG_PLTT)
|
||||
|
||||
#define HW_OBJ_PLTT 0x05000200
|
||||
#define HW_OBJ_PLTT_END 0x05000400
|
||||
#define HW_OBJ_PLTT_SIZE (HW_OBJ_PLTT_END-HW_OBJ_PLTT)
|
||||
|
||||
#define HW_PLTT HW_BG_PLTT
|
||||
#define HW_PLTT_END HW_OBJ_PLTT_END
|
||||
#define HW_PLTT_SIZE (HW_PLTT_END-HW_PLTT)
|
||||
|
||||
#define HW_EXT_WRAM 0x06000000
|
||||
#define HW_EXT_WRAM_END 0x06040000
|
||||
#define HW_EXT_WRAM_SIZE (HW_EXT_WRAM_END-HW_EXT_WRAM)
|
||||
|
||||
#define HW_BG_VRAM 0x06000000
|
||||
#define HW_BG_VRAM_END 0x06080000
|
||||
#define HW_BG_VRAM_SIZE (HW_BG_VRAM_END-HW_BG_VRAM)
|
||||
|
||||
#define HW_OBJ_VRAM 0x06400000
|
||||
#define HW_OBJ_VRAM_END 0x06440000
|
||||
#define HW_OBJ_VRAM_SIZE (HW_OBJ_VRAM_END-HW_OBJ_VRAM)
|
||||
|
||||
#define HW_LCDC_VRAM 0x06800000
|
||||
#define HW_LCDC_VRAM_END 0x06898000
|
||||
#define HW_LCDC_VRAM_SIZE (HW_LCDC_VRAM_END-HW_LCDC_VRAM)
|
||||
|
||||
#define HW_OAM 0x07000000
|
||||
#define HW_OAM_END 0x07000400
|
||||
#define HW_OAM_SIZE (HW_OAM_END-HW_OAM)
|
||||
|
||||
//----------------------------- Cartridge Bus
|
||||
#define HW_CTRDG_ROM 0x08000000
|
||||
#define HW_CTRDG_ROM_END 0x0a000000
|
||||
#define HW_CTRDG_RAM 0x0a000000
|
||||
#define HW_CTRDG_RAM_END 0x0a010000
|
||||
|
||||
//----------------------------- System ROM
|
||||
#define HW_BIOS 0xffff0000
|
||||
#define HW_BIOS_END 0xffff8000
|
||||
|
||||
#define HW_RESET_VECTOR 0xffff0000
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
/* NITRO_ARM7_HW_MMAP_GLOBAL_H_ */
|
||||
#endif
|
||||
173
include/nitro/hw/ARM9/mmap_global.h
Normal file
173
include/nitro/hw/ARM9/mmap_global.h
Normal file
@ -0,0 +1,173 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: NitroSDK - HW - include
|
||||
File: mmap_global.h
|
||||
|
||||
Copyright 2003-2005 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.
|
||||
|
||||
$Log: mmap_global.h,v $
|
||||
Revision 1.16 2005/02/28 05:26:27 yosizaki
|
||||
do-indent.
|
||||
|
||||
Revision 1.15 2004/08/03 03:16:00 yasu
|
||||
Fix error when assembler source code includes nitro.h
|
||||
|
||||
Revision 1.14 2004/07/23 12:11:27 yada
|
||||
include types.h
|
||||
|
||||
Revision 1.13 2004/07/23 10:59:46 yada
|
||||
if SDK_TS, DTCM address is given from SDK_AUTOLOAD_DTCM_START
|
||||
|
||||
Revision 1.12 2004/05/19 09:06:00 yada
|
||||
fix HW_LCDC_VRAM_END. separate by TS or other
|
||||
|
||||
Revision 1.11 2004/04/07 02:03:17 yada
|
||||
fix header comment
|
||||
|
||||
Revision 1.10 2004/04/06 04:33:31 takano_makoto
|
||||
Add entry of HW_EXT_WRAM_ARM7.
|
||||
|
||||
Revision 1.9 2004/02/17 08:22:07 yada
|
||||
tab整形
|
||||
|
||||
Revision 1.8 2004/02/05 07:09:03 yasu
|
||||
change SDK prefix iris -> nitro
|
||||
|
||||
Revision 1.7 2004/02/02 00:25:37 nishida_kenji
|
||||
fix HW_DB_BG_PLTT and HW_DB_OBJ_PLTT.
|
||||
|
||||
Revision 1.6 2004/01/22 08:40:38 nishida_kenji
|
||||
for the 2nd display
|
||||
|
||||
Revision 1.5 2004/01/15 08:26:09 yada
|
||||
HW_ITCM_IMAGE を設定
|
||||
|
||||
Revision 1.4 2003/12/17 06:05:39 yasu
|
||||
mmap_reserved.h を mmap_tcm.h と mmap_shared.h に分割
|
||||
|
||||
Revision 1.3 2003/12/09 08:35:26 yasu
|
||||
メモリマップ周りを刷新
|
||||
|
||||
Revision 1.2 2003/12/08 12:18:31 yada
|
||||
動作するように「とりあえず変更」をかけた。要修正。
|
||||
|
||||
Revision 1.1 2003/12/08 09:08:53 yasu
|
||||
新規メモリマップ
|
||||
|
||||
$NoKeywords: $
|
||||
*---------------------------------------------------------------------------*/
|
||||
#ifndef NITRO_HW_MMAP_GLOBAL_H_
|
||||
#define NITRO_HW_MMAP_GLOBAL_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// GLOBAL MEMORY MAP
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
//----------------------------- ITCM
|
||||
#define HW_ITCM_IMAGE 0x01000000
|
||||
#define HW_ITCM 0x01ff8000
|
||||
#define HW_ITCM_SIZE 0x8000
|
||||
#define HW_ITCM_END (HW_ITCM + HW_ITCM_SIZE)
|
||||
|
||||
//----------------------------- DTCM
|
||||
#ifndef SDK_ASM
|
||||
#include <nitro/types.h>
|
||||
extern u32 SDK_AUTOLOAD_DTCM_START[];
|
||||
#define HW_DTCM ((u32)SDK_AUTOLOAD_DTCM_START)
|
||||
#else
|
||||
.extern SDK_AUTOLOAD_DTCM_START
|
||||
#define HW_DTCM SDK_AUTOLOAD_DTCM_START
|
||||
#endif
|
||||
#define HW_DTCM_SIZE 0x4000
|
||||
#define HW_DTCM_END (HW_DTCM + HW_DTCM_SIZE)
|
||||
//----------------------------- MAIN
|
||||
#define HW_MAIN_MEM 0x02000000
|
||||
#define HW_MAIN_MEM_SIZE 0x00400000
|
||||
#define HW_MAIN_MEM_EX_SIZE 0x01000000
|
||||
#define HW_MAIN_MEM_END (HW_MAIN_MEM + HW_MAIN_MEM_SIZE)
|
||||
#define HW_MAIN_MEM_EX_END (HW_MAIN_MEM + HW_MAIN_MEM_EX_SIZE)
|
||||
//----------------------------- MAIN_HI
|
||||
#define HW_MAIN_MEM_HI 0x0c000000
|
||||
#define HW_MAIN_MEM_HI_SIZE 0x01000000
|
||||
#define HW_MAIN_MEM_HI_EX_SIZE 0x02000000
|
||||
#define HW_MAIN_MEM_HI_END (HW_MAIN_MEM_HI + HW_MAIN_MEM_HI_SIZE)
|
||||
#define HW_MAIN_MEM_HI_EX_END (HW_MAIN_MEM_HI + HW_MAIN_MEM_HI_EX_SIZE)
|
||||
//----------------------------- WRAMs
|
||||
#define HW_WRAM 0x037f8000
|
||||
#define HW_WRAM_END 0x03800000
|
||||
#define HW_WRAM_SIZE (HW_WRAM_END-HW_WRAM)
|
||||
//----------------------------- IOs
|
||||
#define HW_IOREG 0x04000000
|
||||
#define HW_IOREG_END 0x05000000
|
||||
#define HW_REG_BASE HW_IOREG // alias
|
||||
//----------------------------- VRAMs
|
||||
#define HW_BG_PLTT 0x05000000
|
||||
#define HW_BG_PLTT_END 0x05000200
|
||||
#define HW_BG_PLTT_SIZE (HW_BG_PLTT_END-HW_BG_PLTT)
|
||||
#define HW_OBJ_PLTT 0x05000200
|
||||
#define HW_OBJ_PLTT_END 0x05000400
|
||||
#define HW_OBJ_PLTT_SIZE (HW_OBJ_PLTT_END-HW_OBJ_PLTT)
|
||||
#define HW_PLTT HW_BG_PLTT
|
||||
#define HW_PLTT_END HW_OBJ_PLTT_END
|
||||
#define HW_PLTT_SIZE (HW_PLTT_END-HW_PLTT)
|
||||
#define HW_DB_BG_PLTT 0x05000400
|
||||
#define HW_DB_BG_PLTT_END 0x05000600
|
||||
#define HW_DB_BG_PLTT_SIZE (HW_DB_BG_PLTT_END-HW_DB_BG_PLTT)
|
||||
#define HW_DB_OBJ_PLTT 0x05000600
|
||||
#define HW_DB_OBJ_PLTT_END 0x05000800
|
||||
#define HW_DB_OBJ_PLTT_SIZE (HW_DB_OBJ_PLTT_END-HW_DB_OBJ_PLTT)
|
||||
#define HW_DB_PLTT HW_DB_BG_PLTT
|
||||
#define HW_DB_PLTT_END HW_DB_OBJ_PLTT_END
|
||||
#define HW_DB_PLTT_SIZE (HW_DB_PLTT_END-HW_DB_PLTT)
|
||||
#define HW_BG_VRAM 0x06000000
|
||||
#define HW_BG_VRAM_END 0x06080000
|
||||
#define HW_BG_VRAM_SIZE (HW_BG_VRAM_END-HW_BG_VRAM)
|
||||
#define HW_DB_BG_VRAM 0x06200000
|
||||
#define HW_DB_BG_VRAM_END 0x06220000
|
||||
#define HW_DB_BG_VRAM_SIZE (HW_DB_BG_VRAM_END-HW_DB_BG_VRAM)
|
||||
#define HW_OBJ_VRAM 0x06400000
|
||||
#define HW_OBJ_VRAM_END 0x06440000
|
||||
#define HW_OBJ_VRAM_SIZE (HW_OBJ_VRAM_END-HW_OBJ_VRAM)
|
||||
#define HW_DB_OBJ_VRAM 0x06600000
|
||||
#define HW_DB_OBJ_VRAM_END 0x06620000
|
||||
#define HW_DB_OBJ_VRAM_SIZE (HW_DB_OBJ_VRAM_END-HW_DB_OBJ_VRAM)
|
||||
#define HW_LCDC_VRAM 0x06800000
|
||||
#ifdef SDK_TS
|
||||
#define HW_LCDC_VRAM_END 0x068A4000
|
||||
#else
|
||||
#define HW_LCDC_VRAM_END 0x06898000
|
||||
#endif
|
||||
#define HW_LCDC_VRAM_SIZE (HW_LCDC_VRAM_END-HW_LCDC_VRAM)
|
||||
#define HW_OAM 0x07000000
|
||||
#define HW_OAM_END 0x07000400
|
||||
#define HW_OAM_SIZE (HW_OAM_END-HW_OAM)
|
||||
#define HW_DB_OAM 0x07000400
|
||||
#define HW_DB_OAM_END 0x07000800
|
||||
#define HW_DB_OAM_SIZE (HW_DB_OAM_END-HW_DB_OAM)
|
||||
//----------------------------- Cartridge Bus
|
||||
#define HW_CTRDG_ROM 0x08000000
|
||||
#define HW_CTRDG_ROM_END 0x0a000000
|
||||
#define HW_CTRDG_RAM 0x0a000000
|
||||
#define HW_CTRDG_RAM_END 0x0a010000
|
||||
//----------------------------- System ROM
|
||||
#define HW_BIOS 0xffff0000
|
||||
#define HW_BIOS_END 0xffff8000
|
||||
#define HW_RESET_VECTOR 0xffff0000
|
||||
//----------------------------- for request to ARM7
|
||||
#define HW_EXT_WRAM_ARM7 0x06000000
|
||||
#define HW_EXT_WRAM_ARM7_END 0x06040000
|
||||
#define HW_EXT_WRAM_ARM7_SIZE (HW_EXT_WRAM_ARM7_END-HW_EXT_WRAM_ARM7)
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
/* NITRO_HW_MMAP_GLOBAL_H_ */
|
||||
#endif
|
||||
386
include/nitro/hw/common/mmap_shared.h
Normal file
386
include/nitro/hw/common/mmap_shared.h
Normal file
@ -0,0 +1,386 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: NitroSDK - HW - include
|
||||
File: mmap_shared.h
|
||||
|
||||
Copyright 2003-2006 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.
|
||||
|
||||
$Log: mmap_shared.h,v $
|
||||
Revision 1.41 2006/01/18 02:11:30 kitase_hirotake
|
||||
do-indent
|
||||
|
||||
Revision 1.40 2005/09/08 12:28:09 yasu
|
||||
SDK_FROM_TOOL の判定部分に SDK_WIN32 での判定も追加
|
||||
|
||||
Revision 1.39 2005/07/27 07:45:30 seiki_masashi
|
||||
OSSystemWork の wm_keyshare_control を wm_rssi_pool に変更
|
||||
|
||||
Revision 1.38 2005/06/02 10:28:11 terui
|
||||
OSSystemWork構造体内のfile_control及びis_reservedメンバを統合してrom_headerメンバに変名
|
||||
|
||||
Revision 1.37 2005/05/20 03:10:53 yosizaki
|
||||
add HW_CARD_ROM_HEADER, HW_DOWNLOAD_PARAMETER.
|
||||
|
||||
Revision 1.36 2005/02/28 05:26:01 yosizaki
|
||||
do-indent.
|
||||
|
||||
Revision 1.35 2004/12/02 00:26:02 yada
|
||||
add autoload sync
|
||||
|
||||
Revision 1.34 2004/11/22 01:14:51 yada
|
||||
add HW_ROM_BASE_OFFSET_BUF
|
||||
|
||||
Revision 1.33 2004/09/01 04:19:11 yada
|
||||
add HW_RESET_PARAMETER_BUF
|
||||
|
||||
Revision 1.32 2004/08/17 04:09:56 yada
|
||||
add some definition to detect debugger correctly
|
||||
|
||||
Revision 1.31 2004/08/16 08:16:16 yada
|
||||
HW_CHECK_DEBUGGER_BUF definition is moved to mmap_shared.h header
|
||||
|
||||
Revision 1.30 2004/08/16 08:08:06 yada
|
||||
add HW_BOOT_CHECK_INFO_BUF and HW_CTRDG_MODULE_INFO_BUF
|
||||
|
||||
Revision 1.29 2004/08/10 12:12:01 yada
|
||||
place VBlank count buffer in shared area
|
||||
|
||||
Revision 1.28 2004/08/07 00:58:46 terui
|
||||
wm_controlを削除、wm_callback_control wm_keyshare_controlを追加
|
||||
|
||||
Revision 1.27 2004/08/03 01:36:27 terui
|
||||
Add wm_control
|
||||
|
||||
Revision 1.26 2004/07/27 05:59:11 yada
|
||||
fix OSSystemWork structure.
|
||||
lowest 0x80 (increased in recent release) byte was forgotten.
|
||||
|
||||
Revision 1.25 2004/07/22 11:29:23 yada
|
||||
shared area is expanded 0x80 byte
|
||||
make HW_WM_BOOT_BUF
|
||||
|
||||
Revision 1.24 2004/06/15 02:10:00 yada
|
||||
only add HW_DMA_CLEAR_DATA_BUF_END
|
||||
|
||||
Revision 1.23 2004/06/08 10:41:55 yada
|
||||
only fix comment
|
||||
|
||||
Revision 1.22 2004/06/01 04:24:24 terui
|
||||
Add mic_sampling_data.
|
||||
|
||||
Revision 1.21 2004/05/28 09:40:30 terui
|
||||
Add mic_last_address
|
||||
|
||||
Revision 1.20 2004/05/24 09:54:31 yasu
|
||||
move RED_RESERVED_END to (HW_MAIN_MEM + 0x007ffa00)
|
||||
|
||||
Revision 1.19 2004/05/21 12:11:58 yasu
|
||||
Reduce the SHARED ARENA because of allocating HW_RED_RESERVED
|
||||
|
||||
Revision 1.18 2004/05/21 11:07:26 yada
|
||||
add HW_RED_RESERVED area
|
||||
|
||||
Revision 1.17 2004/05/19 05:19:17 yada
|
||||
add NVRAM user info area
|
||||
|
||||
Revision 1.16 2004/05/14 11:58:24 takano_makoto
|
||||
Add #ifndef SDK_FROM_TOOL for VC or BCB.
|
||||
|
||||
Revision 1.15 2004/05/11 12:08:13 yada
|
||||
some define names was changed,
|
||||
HW_BIOS_EXCP_STACK_MAIN, HW_EXCP_VECTOR_MAIN,
|
||||
HW_IS_RESERVED was deleted.
|
||||
|
||||
Revision 1.14 2004/05/11 01:14:33 yasu
|
||||
Allocate PXI related flags on shared area
|
||||
|
||||
Revision 1.13 2004/05/10 08:20:19 yada
|
||||
ram checker deleted, because put checker for main and sub.
|
||||
|
||||
Revision 1.12 2004/05/10 08:15:46 yada
|
||||
HW_COMPONENT_PARAM の位置変え
|
||||
|
||||
Revision 1.11 2004/05/06 00:38:14 yada
|
||||
add HW_IS_RESERVED
|
||||
|
||||
Revision 1.10 2004/05/06 00:17:13 yada
|
||||
add HW_REAL_TIME_CLOCK_BUF
|
||||
|
||||
Revision 1.9 2004/05/04 04:11:11 terui
|
||||
Change position of real time clock infromation area.
|
||||
|
||||
Revision 1.8 2004/05/04 02:08:50 terui
|
||||
Add real time clock information area.
|
||||
|
||||
Revision 1.7 2004/04/30 07:37:44 yada
|
||||
HW_LOCKIDFLAG_MAIN/SUB -> HW_LOCK_ID_FLAG_MAIN/SUB
|
||||
|
||||
Revision 1.6 2004/04/29 09:34:02 yada
|
||||
put HW_LOCKID_FLAG_MAIN/SUB
|
||||
|
||||
Revision 1.5 2004/04/14 05:05:21 takano_makoto
|
||||
Add Touch Panel Area.
|
||||
|
||||
Revision 1.4 2004/04/07 02:03:17 yada
|
||||
fix header comment
|
||||
|
||||
Revision 1.3 2004/03/15 11:02:15 yada
|
||||
インクルードガード名修正
|
||||
|
||||
Revision 1.2 2004/03/12 12:11:10 yada
|
||||
only arrange tab
|
||||
|
||||
Revision 1.1 2004/02/18 07:51:36 yada
|
||||
mmap_shared.h を A7/9共通に
|
||||
|
||||
Revision 1.5 2004/02/18 01:24:57 yada
|
||||
XYボタン情報領域を追加
|
||||
|
||||
Revision 1.4 2004/02/17 06:51:02 yada
|
||||
より直感的な表記へ変更
|
||||
|
||||
Revision 1.3 2004/02/14 06:57:48 yasu
|
||||
add HW_COMPONENT_PARAM
|
||||
|
||||
Revision 1.2 2004/02/13 10:39:58 yada
|
||||
ARENAを6個から9個にしてインフォエリア拡大
|
||||
|
||||
Revision 1.1 2004/02/13 01:52:31 yada
|
||||
ARM7用に追加 (temporary?)
|
||||
|
||||
Revision 1.11 2004/02/12 10:56:04 yasu
|
||||
new location of include files ARM9/ARM7
|
||||
|
||||
Revision 1.10 2004/02/05 07:09:03 yasu
|
||||
change SDK prefix iris -> nitro
|
||||
|
||||
Revision 1.9 2004/01/19 02:29:10 yada
|
||||
systemWork を 0x200→0x280と増やした。
|
||||
それに伴いメンバのオフセットが悉く変更に。
|
||||
|
||||
Revision 1.8 2004/01/17 11:43:29 yada
|
||||
アリーナ情報位置変更につき
|
||||
|
||||
Revision 1.7 2004/01/16 11:49:18 yada
|
||||
リザーブ領域を追加
|
||||
|
||||
Revision 1.6 2004/01/16 04:13:19 yada
|
||||
アリーナ定義修正
|
||||
|
||||
Revision 1.5 2004/01/15 12:14:13 yada
|
||||
SystemWork にアリーナ構造体を取るようにした
|
||||
|
||||
Revision 1.4 2004/01/07 01:41:34 yada
|
||||
arena用のデフォルトLo/Hi値定義
|
||||
|
||||
Revision 1.3 2003/12/25 07:30:42 yada
|
||||
型ルール統一による変更
|
||||
|
||||
Revision 1.2 2003/12/22 13:38:04 yasu
|
||||
OS_GetSystemWrokをマクロに OS_LockWord を struct タグでアクセスするよう変更
|
||||
|
||||
Revision 1.1 2003/12/17 06:05:39 yasu
|
||||
mmap_reserved.h を mmap_tcm.h と mmap_shared.h に分割
|
||||
|
||||
$NoKeywords: $
|
||||
*---------------------------------------------------------------------------*/
|
||||
#ifndef NITRO_HW_COMMON_MMAP_SHARED_H_
|
||||
#define NITRO_HW_COMMON_MMAP_SHARED_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// MEMORY MAP of SYSTEM SHARED AREA
|
||||
//----------------------------------------------------------------------
|
||||
//
|
||||
#define HW_RED_RESERVED (HW_MAIN_MEM_EX_END - 0x800) // maybe change later
|
||||
#define HW_RED_RESERVED_END (HW_RED_RESERVED + HW_RED_RESERVED_SIZE)
|
||||
#define HW_RED_RESERVED_SIZE 0x200
|
||||
|
||||
/* original ROM-header of NITRO-CARD for downloaded program */
|
||||
#define HW_CARD_ROM_HEADER_SIZE 0x160
|
||||
/* maximun size of parameters for downloaded program */
|
||||
#define HW_DOWNLOAD_PARAMETER_SIZE 0x20
|
||||
|
||||
//---- default address for shared memory arena
|
||||
#define HW_SHARED_ARENA_LO_DEFAULT HW_MAIN_MEM_SHARED
|
||||
#ifdef HW_RED_RESERVED
|
||||
# define HW_SHARED_ARENA_HI_DEFAULT (HW_RED_RESERVED - HW_CARD_ROM_HEADER_SIZE - HW_DOWNLOAD_PARAMETER_SIZE)
|
||||
#else
|
||||
# define HW_SHARED_ARENA_HI_DEFAULT (HW_MAIN_MEM_SYSTEM - HW_CARD_ROM_HEADER_SIZE - HW_DOWNLOAD_PARAMETER_SIZE)
|
||||
#endif
|
||||
|
||||
// 0x027ffa00-0x027ffa7f:(128byte):UNUSED
|
||||
|
||||
/* 0x027ffa80-0x027ffbdf:(352byte): original ROM-header */
|
||||
#define HW_CARD_ROM_HEADER (HW_MAIN_MEM + 0x00fffa80)
|
||||
|
||||
/* 0x027ffbe0-0x027ffbff:( 32byte): parameters for downloaded program */
|
||||
#define HW_DOWNLOAD_PARAMETER (HW_MAIN_MEM + 0x00fffbe0)
|
||||
|
||||
//-------------------------------- MainMemory shared area
|
||||
#define HW_MAIN_MEM_SYSTEM_SIZE 0x400
|
||||
#define HW_MAIN_MEM_SYSTEM (HW_MAIN_MEM_EX_END - 0x400)
|
||||
|
||||
#define HW_BOOT_CHECK_INFO_BUF (HW_MAIN_MEM_SYSTEM + 0x000) // Boot check info (END-0x400)
|
||||
#define HW_BOOT_CHECK_INFO_BUF_END (HW_MAIN_MEM_SYSTEM + 0x020) // (END-0x3e0)
|
||||
|
||||
#define HW_RESET_PARAMETER_BUF (HW_MAIN_MEM_SYSTEM + 0x020) // reset parameter (END-0x3e0)
|
||||
|
||||
// 0x027ffc24-0x027ffc2b:(8byte):UNUSED
|
||||
|
||||
#define HW_ROM_BASE_OFFSET_BUF (HW_MAIN_MEM_SYSTEM + 0x02c) // ROM offset of own program (END-0x3d4)
|
||||
#define HW_ROM_BASE_OFFSET_BUF_END (HW_MAIN_MEM_SYSTEM + 0x030) // (END-0x3d0)
|
||||
|
||||
#define HW_CTRDG_MODULE_INFO_BUF (HW_MAIN_MEM_SYSTEM + 0x030) // Cartridge module info (END-0x3d0)
|
||||
#define HW_CTRDG_MODULE_INFO_BUF_END (HW_MAIN_MEM_SYSTEM + 0x03c) // (END-0x3c4)
|
||||
|
||||
#define HW_VBLANK_COUNT_BUF (HW_MAIN_MEM_SYSTEM + 0x03c) // VBlank counter (END-0x3c4)
|
||||
|
||||
#define HW_WM_BOOT_BUF (HW_MAIN_MEM_SYSTEM + 0x040) // WM buffer for Multi-Boot (END-0x3c0)
|
||||
#define HW_WM_BOOT_BUF_END (HW_MAIN_MEM_SYSTEM + 0x080) // (END-0x380)
|
||||
|
||||
#define HW_NVRAM_USER_INFO (HW_MAIN_MEM_SYSTEM + 0x080) // NVRAM user info (END-0x380)
|
||||
#define HW_NVRAM_USER_INFO_END (HW_MAIN_MEM_SYSTEM + 0x180) // (END-0x280)
|
||||
|
||||
#define HW_BIOS_EXCP_STACK_MAIN (HW_MAIN_MEM_SYSTEM + 0x180) // MAINPデバッガモニタ例外ハンドラ (END-0x280)
|
||||
#define HW_BIOS_EXCP_STACK_MAIN_END (HW_MAIN_MEM_SYSTEM + 0x19c) // (END-0x264)
|
||||
#define HW_EXCP_VECTOR_MAIN (HW_MAIN_MEM_SYSTEM + 0x19c) // MAINP用HW_EXCP_VECTOR_BUF (END-0x264)
|
||||
|
||||
#define HW_ARENA_INFO_BUF (HW_MAIN_MEM_SYSTEM + 0x1a0) // アリーナ情報構造体(27F_FDA0~27F_FDE7) (END-0x260)
|
||||
#define HW_REAL_TIME_CLOCK_BUF (HW_MAIN_MEM_SYSTEM + 0x1e8) // RTC
|
||||
|
||||
#define HW_DMA_CLEAR_DATA_BUF (HW_MAIN_MEM_SYSTEM + 0x1f0) // DMAクリアデータ・バッファ (END-0x210)
|
||||
#define HW_DMA_CLEAR_DATA_BUF_END (HW_MAIN_MEM_SYSTEM + 0x200) // (この領域は ARM9-TEG にのみ使用する)
|
||||
|
||||
#define HW_ROM_HEADER_BUF (HW_MAIN_MEM_SYSTEM + 0x200) // ROM内登録エリアデータ・バッファ (END-0x200)
|
||||
#define HW_ROM_HEADER_BUF_END (HW_MAIN_MEM_SYSTEM + 0x360) // (END-0x0a0)
|
||||
#define HW_ISD_RESERVED (HW_MAIN_MEM_SYSTEM + 0x360) // IS DEBUGGER Reserved (END-0xa0)
|
||||
#define HW_ISD_RESERVED_END (HW_MAIN_MEM_SYSTEM + 0x380) // (END-0x80)
|
||||
|
||||
#define HW_PXI_SIGNAL_PARAM_ARM9 (HW_MAIN_MEM_SYSTEM + 0x380) // PXI Signal Param for ARM9
|
||||
#define HW_PXI_SIGNAL_PARAM_ARM7 (HW_MAIN_MEM_SYSTEM + 0x384) // PXI Signal Param for ARM7
|
||||
#define HW_PXI_HANDLE_CHECKER_ARM9 (HW_MAIN_MEM_SYSTEM + 0x388) // PXI Handle Checker for ARM9
|
||||
#define HW_PXI_HANDLE_CHECKER_ARM7 (HW_MAIN_MEM_SYSTEM + 0x38c) // PXI Handle Checker for ARM7
|
||||
|
||||
#define HW_MIC_LAST_ADDRESS (HW_MAIN_MEM_SYSTEM + 0x390) // MIC 最新サンプリングデータ格納アドレス
|
||||
#define HW_MIC_SAMPLING_DATA (HW_MAIN_MEM_SYSTEM + 0x394) // MIC 単体サンプリング結果
|
||||
|
||||
#define HW_WM_CALLBACK_CONTROL (HW_MAIN_MEM_SYSTEM + 0x396) // WM コールバック同期用パラメータ
|
||||
#define HW_WM_RSSI_POOL (HW_MAIN_MEM_SYSTEM + 0x398) // WM 受信強度による乱数源
|
||||
|
||||
#define HW_COMPONENT_PARAM (HW_MAIN_MEM_SYSTEM + 0x39c) // Component 同期用パラメータ
|
||||
|
||||
#define HW_THREADINFO_MAIN (HW_MAIN_MEM_SYSTEM + 0x3a0) // ThreadInfo for Main processor
|
||||
#define HW_THREADINFO_SUB (HW_MAIN_MEM_SYSTEM + 0x3a4) // ThreadInfo for Sub processor
|
||||
#define HW_BUTTON_XY_BUF (HW_MAIN_MEM_SYSTEM + 0x3a8) // buffer for X and Y button
|
||||
#define HW_TOUCHPANEL_BUF (HW_MAIN_MEM_SYSTEM + 0x3aa) // buffer for touch panel
|
||||
#define HW_AUTOLOAD_SYNC_BUF (HW_MAIN_MEM_SYSTEM + 0x3ae) // buffer for autoload sync
|
||||
|
||||
#define HW_LOCK_ID_FLAG_MAIN (HW_MAIN_MEM_SYSTEM + 0x3b0) // lockID flag for Main processor
|
||||
#define HW_LOCK_ID_FLAG_SUB (HW_MAIN_MEM_SYSTEM + 0x3b8) // lockID flag for Sub processor
|
||||
|
||||
// SpinLock Mutex
|
||||
#define HW_VRAM_C_LOCK_BUF (HW_MAIN_MEM_SYSTEM + 0x3c0) // VRAM-C・ロックバッファ (END-0x40)
|
||||
#define HW_VRAM_D_LOCK_BUF (HW_MAIN_MEM_SYSTEM + 0x3c8) // VRAM-D・ロックバッファ (END-0x38)
|
||||
#define HW_WRAM_BLOCK0_LOCK_BUF (HW_MAIN_MEM_SYSTEM + 0x3d0) // CPU内部ワークRAM・ブロック0・ロックバッファ (END-0x30)
|
||||
#define HW_WRAM_BLOCK1_LOCK_BUF (HW_MAIN_MEM_SYSTEM + 0x3d8) // CPU内部ワークRAM・ブロック1・ロックバッファ (END-0x28)
|
||||
#define HW_CARD_LOCK_BUF (HW_MAIN_MEM_SYSTEM + 0x3e0) // カード・ロックバッファ (END-0x20)
|
||||
#define HW_CTRDG_LOCK_BUF (HW_MAIN_MEM_SYSTEM + 0x3e8) // カートリッジ・ロックバッファ (END-0x18)
|
||||
#define HW_INIT_LOCK_BUF (HW_MAIN_MEM_SYSTEM + 0x3f0) // 初期化ロックバッファ (END-0x10)
|
||||
|
||||
#define HW_MMEMCHECKER_MAIN (HW_MAIN_MEM_SYSTEM + 0x3f8) // MainMomory Size Checker for Main processor (END-8)
|
||||
#define HW_MMEMCHECKER_SUB (HW_MAIN_MEM_SYSTEM + 0x3fa) // MainMomory Size Checker for Sub processor (END-6)
|
||||
|
||||
#define HW_CMD_AREA (HW_MAIN_MEM_SYSTEM + 0x3fe) // メインメモリコマンド発行エリア(使用禁止エリア)(END-2)
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
//---- Lock area
|
||||
#define HW_SHARED_LOCK_BUF (HW_VRAM_C_LOCK_BUF)
|
||||
#define HW_SHARED_LOCK_BUF_END (HW_INIT_LOCK_BUF + 8)
|
||||
|
||||
#define HW_CHECK_DEBUGGER_SW (HW_MAIN_MEM_SYSTEM + 0x010) // (u16)debugger check switch. if 0 check buf1, else buf2.
|
||||
#define HW_CHECK_DEBUGGER_BUF1 (HW_RED_RESERVED + 0x014) // (u16)debugger checker. 1 if run on debugger.
|
||||
#define HW_CHECK_DEBUGGER_BUF2 (HW_MAIN_MEM_SYSTEM + 0x014) // (u16)debugger checker. 1 if run on debugger.
|
||||
|
||||
/* if include from Other Environment for exsample VC or BCB, */
|
||||
/* please define SDK_FROM_TOOL */
|
||||
#if !(defined(SDK_WIN32) || defined(SDK_FROM_TOOL))
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
#ifndef SDK_ASM
|
||||
#include <nitro/types.h>
|
||||
|
||||
#include <nitro/os/common/thread.h>
|
||||
#include <nitro/os/common/spinLock.h>
|
||||
#include <nitro/os/common/arena.h>
|
||||
|
||||
typedef union
|
||||
{
|
||||
u32 b32;
|
||||
u16 b16;
|
||||
}
|
||||
OSDmaClearSrc;
|
||||
typedef struct
|
||||
{
|
||||
u8 bootCheckInfo[0x20]; // 000-01f: 32byte boot check info
|
||||
u32 resetParameter; // 020-023: 4byte reset parameter
|
||||
u8 padding5[0x8]; // 024-02c: (8byte)
|
||||
u32 romBaseOffset; // 02c-02f: 4byte ROM offset of own program
|
||||
u8 cartridgeModuleInfo[12]; // 030-03b: 12byte cartridge module info
|
||||
u32 vblankCount; // 03c-03f: 4byte Vブランクカウント
|
||||
u8 wmBootBuf[0x40]; // 040-07f: 64byte WM のマルチブート用バッファ
|
||||
u8 nvramUserInfo[0x100]; // 080-17f: 256bytes NVRAM user info
|
||||
u8 isd_reserved1[0x20]; // 180-19f: 32bytes ISDebugger 予約
|
||||
u8 arenaInfo[0x48]; // 1a0-1e7: 72bytte アリーナ情報
|
||||
u8 real_time_clock[8]; // 1e8-1ef: 8bytes RTC
|
||||
u32 dmaClearBuf[4]; // 1f0-1ff: 16bytes DMA クリア情報バッファ (ARM9-TEG用)
|
||||
u8 rom_header[0x160]; // 200-35f: 352bytes ROM 内登録エリア情報退避バッファ
|
||||
u8 isd_reserved2[32]; // 360-37f: 32bytes ISDebugger 予約
|
||||
u32 pxiSignalParam[2]; // 380-387: 8bytes Param for PXI Signal
|
||||
u32 pxiHandleChecker[2]; // 388-38f: 8bytes Flag for PXI Command Handler Installed
|
||||
u32 mic_last_address; // 390-393: 4bytes マイク 最新サンプリング結果の格納アドレス
|
||||
u16 mic_sampling_data; // 394-395: 2bytes マイク 単体サンプリング結果
|
||||
u16 wm_callback_control; // 396-397: 2bytes WM コールバック同期用パラメータ
|
||||
u16 wm_rssi_pool; // 398-399: 2bytes WM 受信強度による乱数源
|
||||
u8 padding3[2]; // 39a-39b: (2bytes)
|
||||
u32 component_param; // 39c-39f: 4bytes Component 同期用パラメータ
|
||||
OSThreadInfo *threadinfo_mainp; // 3a0-3a3: 4bytes ARM9 スレッド情報へのポインタ 初期値0であること
|
||||
OSThreadInfo *threadinfo_subp; // 3a4-3a7: 4bytes ARM7 スレッド情報へのポインタ 初期値0であること
|
||||
u16 button_XY; // 3a8-3a9: 2bytes XY ボタン情報格納位置
|
||||
u8 touch_panel[4]; // 3aa-3ad: 4bytes タッチパネル情報格納位置
|
||||
u16 autoloadSync; // 3ae-3af: 2bytes autoload sync between processors
|
||||
u32 lockIDFlag_mainp[2]; // 3b0-3b7: 8bytes lockID管理フラグ(ARM9用)
|
||||
u32 lockIDFlag_subp[2]; // 3b8-3bf: 8bytes lockID管理フラグ(ARM7用)
|
||||
struct OSLockWord lock_VRAM_C; // 3c0-3c7: 8bytes C・ロックバッファ
|
||||
struct OSLockWord lock_VRAM_D; // 3c8-3cf: 8bytes VRAM-D・ロックバッファ
|
||||
struct OSLockWord lock_WRAM_BLOCK0; // 3d0-3d7: 8bytes ブロック0・ロックバッファ
|
||||
struct OSLockWord lock_WRAM_BLOCK1; // 3d8-3df: 8bytes CPU内部ワークRAM・ブロック1・ロックバッファ
|
||||
struct OSLockWord lock_CARD; // 3e0-3e7: 8bytes カード・ロックバッファ
|
||||
struct OSLockWord lock_CARTRIDGE; // 3e8-3ef: 8bytes カートリッジ・ロックバッファ
|
||||
struct OSLockWord lock_INIT; // 3f0-3f7: 8bytes 初期化ロックバッファ
|
||||
u16 mmem_checker_mainp; // 3f8-3f9: 2bytes MainMomory Size Checker for Main processor
|
||||
u16 mmem_checker_subp; // 3fa-3fb: 2bytes MainMomory Size Checker for Sub processor
|
||||
u8 padding4[2]; // 3fc-3fd: (2bytes)
|
||||
u16 command_area; // 3fe-3ff: 2bytes Command Area
|
||||
}
|
||||
OSSystemWork;
|
||||
|
||||
#define OS_GetSystemWork() ((OSSystemWork *)HW_MAIN_MEM_SYSTEM)
|
||||
#endif
|
||||
|
||||
|
||||
#endif // SDK_FROM_TOOL
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
/* NITRO_HW_COMMON_MMAP_SHARED_H_ */
|
||||
#endif
|
||||
@ -137,18 +137,6 @@ void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), void *arg
|
||||
#define OS_IRQ_MAIN_BUFFER_SIZE (0x200)
|
||||
|
||||
|
||||
//---- interrupt handler type
|
||||
typedef void (*OSIrqFunction) (void);
|
||||
|
||||
//---- for irq callback (internal use)
|
||||
typedef struct
|
||||
{
|
||||
void (*func) (void *);
|
||||
u32 enable;
|
||||
void *arg;
|
||||
}
|
||||
OSIrqCallbackInfo;
|
||||
|
||||
//---- irq factor type define
|
||||
#ifndef OSi_OSIRQMASK_DEFINED
|
||||
#ifdef SDK_ARM9
|
||||
@ -159,6 +147,18 @@ typedef u64 OSIrqMask;
|
||||
#define OSi_OSIRQMASK_DEFINED
|
||||
#endif
|
||||
|
||||
//---- interrupt handler type
|
||||
typedef void (*OSIrqFunction) (void);
|
||||
|
||||
//---- for irq callback (internal use)
|
||||
typedef struct
|
||||
{
|
||||
void (*func) (void *);
|
||||
void *arg;
|
||||
OSIrqMask enable;
|
||||
}
|
||||
OSIrqCallbackInfo;
|
||||
|
||||
//---- table of irq functions
|
||||
extern OSIrqFunction OS_IRQTable[];
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@
|
||||
|
||||
Static $(TARGET_NAME)
|
||||
{
|
||||
Address 0x02380000
|
||||
Address 0x02f80000
|
||||
Library crt0.o
|
||||
StackSize 1024 512
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user