openmohaa/code/gamespy/common/nitro/main.c
2023-02-04 21:00:01 +01:00

122 lines
No EOL
2.5 KiB
C

#include "..\nonport.h"
#include "screen.h"
#include "key.h"
#include "wireless.h"
#include "touch.h"
#include "backup.h"
static void Startup(void)
{
/* System */
// init the OS system - internally initializes:
// arena - OS_InitArenaEx()
// communication system between preprocessors - PXI_Init()
// lock system - OS_InitLock()
// IRQ interrupt tables - OS_InitIrqTable()
// exception display system - OS_InitException()
// both WRAMs to the ARM7 - MI_SetWramBank()
// V count alarm system - OS_InitVAlarm()
// thread system - OS_InitThread()
// reset system - OS_InitReset()
// Game Pak library - CTRDG_Init()
// Card library - CARD_Init()
// power control system - PM_Init()
OS_Init();
/* Time */
// init the system tick count
OS_InitTick();
// init the alarm
// this is needed for OS_Sleep()
OS_InitAlarm();
/* RTC */
RTC_Init();
/* FIFO */
PXI_InitFifo();
/* Screen */
ScreenInit();
Printf("Screen initialized\n");
SetTopScreenLineCentered(SCREEN_HEIGHT / 2, SCWhite, "Starting GameSpy Sample");
/* Keys */
KeyInit();
Printf("Input initialized\n");
/* Touch */
TouchInit();
Printf("Touch initialized\n");
/* Interrupts */
OS_EnableIrq();
OS_EnableInterrupts();
Printf("Interrupts initialized\n");
/* Heap */
{
u32 nHeapAdrs = 0;
u32 nHeapSize = 1 * 1024 * 1024;
OSHeapHandle hHeap;
OS_SetMainArenaLo(OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1));
nHeapAdrs = (u32)OS_AllocFromMainArenaLo(nHeapSize, 32);
hHeap = OS_CreateHeap(OS_ARENA_MAIN, (void*)(nHeapAdrs), (void*)(nHeapAdrs + nHeapSize));
OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap);
}
Printf("Heap initialized\n");
/* Backup */
BackupInit();
/* Wireless */
WirelessInit();
}
static void Shutdown(void)
{
// close down wireless
Printf("Wireless cleanup\n");
WirelessCleanup();
// ClearScreens();
// SetTopScreenLineCentered(SCREEN_HEIGHT / 2, SCWhite, "GameSpy Sample Shutdown");
// SVC_WaitVBlankIntr();
// terminate the os system
Printf("Terminating OS\n");
OS_Terminate();
}
extern int test_main(int argc, char ** argv);
static void Run(void)
{
SetPrintMode(PRINT_TO_SCREEN|PRINT_TO_DEBUGGER);
Printf("\n");
Printf("GameSpy Test App Starting\n");
Printf("-------------------------\n");
test_main(0, NULL);
Printf("------------------------\n");
Printf("GameSpy Test App Exiting\n");
SetPrintMode(PRINT_TO_DEBUGGER);
}
void NitroMain(void)
{
// startup everything we need
Startup();
// do stuff
Run();
// shutdown the system
Shutdown();
}