TwlIPL/build/debugsoft/MakerTitle/SaveData/DisplayVersion_target/src/main.c
(no author) 220cad3329 同一メーカータイトルNANDセーブデータへのアクセス確認プログラムのコミット
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2066 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2008-08-01 05:19:04 +00:00

217 lines
5.7 KiB
C
Raw Blame History

/*---------------------------------------------------------------------------*
Project: TwlSDK - demos - yasuda - MenuTest
File: main.c
Copyright 2003 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date::$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifdef SDK_TWL
#include <twl.h>
#else
#include <nitro.h>
#endif
#include <nitro/rtc.h>
#include "font.h"
#include "screen.h"
#include "menu.h"
static void myInit(void);
static void myVBlankIntr(void);
static void PrintBootType(void);
extern BOOL PubDataAccessTest(void);
/*---------------------------------------------------------------------------*
Name: NitroMain
Description: main
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
#ifdef SDK_TWL
void TwlMain(void)
#else
void NitroMain(void)
#endif
{
u16 trigger;
u16 preButton = PAD_Read();
u16 button;
//---------------- initialize
myInit();
InitMenu();
PrintBootType();
#if 0
if( PubDataAccessTest() == FALSE )
{
OS_Printf("Data access NG\n");
return;
}
#endif
//---------------- main loop
while (TRUE)
{
button = PAD_Read();
trigger = (u16)((button ^ preButton) & button);
preButton = button;
//---- clear screen buffer
ClearScreen();
//---- display menus
DisplayMenuSet();
//---- press UP key (toggle menu)
if(trigger & PAD_KEY_UP)
{
ChangeMenuItem(MENU_ITEM_UP);
}
if(trigger & PAD_KEY_DOWN)
{
ChangeMenuItem(MENU_ITEM_DOWN);
}
//---- push A
if (trigger & PAD_BUTTON_A)
{
ExecMenuItem();
}
//---- push X
if (trigger & PAD_BUTTON_X)
{
ExecMenuItemX();
}
OS_WaitVBlankIntr();
}
}
//----------------------------------------------------------------
// myInit
//
void myInit(void)
{
//---- init
OS_Init();
OS_InitTick();
OS_InitAlarm();
RTC_Init();
FX_Init();
GX_Init();
GX_DispOff();
GXS_DispOff();
//---- init displaying
GX_SetBankForLCDC(GX_VRAM_LCDC_ALL);
MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE);
(void)GX_DisableBankForLCDC();
MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE);
MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE);
MI_CpuFillFast((void *)HW_DB_OAM, 192, HW_DB_OAM_SIZE);
MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE);
//---- setting 2D for top screen
GX_SetBankForBG(GX_VRAM_BG_128_A);
G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256,
GX_BG_COLORMODE_16,
GX_BG_SCRBASE_0xf800, GX_BG_CHARBASE_0x00000, GX_BG_EXTPLTT_01);
G2_SetBG0Priority(0);
G2_BG0Mosaic(FALSE);
GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D);
GX_SetVisiblePlane(GX_PLANEMASK_BG0);
GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData));
GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData));
//---- setting 2D for bottom screen
GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C);
G2S_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256,
GX_BG_COLORMODE_16,
GX_BG_SCRBASE_0xf800, GX_BG_CHARBASE_0x00000, GX_BG_EXTPLTT_01);
G2S_SetBG0Priority(0);
G2S_BG0Mosaic(FALSE);
GXS_SetGraphicsMode(GX_BGMODE_0);
GXS_SetVisiblePlane(GX_PLANEMASK_BG0);
GXS_LoadBG0Char(d_CharData, 0, sizeof(d_CharData));
GXS_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData));
//---- screen
MI_CpuFillFast((void *)gScreen, 0, sizeof(gScreen));
DC_FlushRange(gScreen, sizeof(gScreen));
/* DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IO<49><4F><EFBFBD>W<EFBFBD>X<EFBFBD>^<5E>փA<D683>N<EFBFBD>Z<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>̂ŃL<C583><4C><EFBFBD>b<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD> Wait <20>͕s<CD95>v */
// DC_WaitWriteBufferEmpty();
GX_LoadBG0Scr(gScreen, 0, sizeof(gScreen));
GXS_LoadBG0Scr(gScreen, 0, sizeof(gScreen));
//---- init interrupt
OS_SetIrqFunction(OS_IE_V_BLANK, myVBlankIntr);
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
(void)GX_VBlankIntr(TRUE);
(void)OS_EnableIrq();
(void)OS_EnableInterrupts();
//---- FileSystemInit
(void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV);
FS_Init( FS_DMA_NOT_USE );
//---- start displaying
GX_DispOn();
GXS_DispOn();
}
//----------------------------------------------------------------
// myVBlankIntr
// vblank interrupt handler
//
static void myVBlankIntr(void)
{
//---- upload pseudo screen to VRAM
DC_FlushRange(gScreen, sizeof(gScreen));
/* DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IO<49><4F><EFBFBD>W<EFBFBD>X<EFBFBD>^<5E>փA<D683>N<EFBFBD>Z<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>̂ŃL<C583><4C><EFBFBD>b<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD> Wait <20>͕s<CD95>v */
// DC_WaitWriteBufferEmpty();
GX_LoadBG0Scr(gScreen, 0, sizeof(gScreen));
GXS_LoadBG0Scr(gScreen, 0, sizeof(gScreen));
OS_SetIrqCheckFlag(OS_IE_V_BLANK);
}
static void PrintBootType(void)
{
const OSBootType btype = OS_GetBootType();
switch( btype )
{
case OS_BOOTTYPE_ROM: OS_TPrintf("OS_GetBootType = OS_BOOTTYPE_ROM\n"); break;
case OS_BOOTTYPE_NAND: OS_TPrintf("OS_GetBootType = OS_BOOTTYPE_NAND\n"); break;
default:
{
OS_Warning("unknown BootType(=%d)", btype);
}
break;
}
}