1 #include <nitro.h>
2
3
4 #define HEAP_ID ((OSHeapHandle)0)
5 #define ARENA_ID ((OSArenaId)OS_ARENA_MAIN)
6 #define ROUND(n, a) (((u32) (n) + (a) - 1) & ~((a) - 1))
7
8 //----------------------------------------------------------------
9 //
operator new(std::size_t blocksize)10 void* operator new ( std::size_t blocksize )
11 {
12 return OS_AllocFromHeap( ARENA_ID, HEAP_ID, blocksize );
13 }
14
15 //----------------------------------------------------------------
16 //
operator new[](std::size_t blocksize)17 void* operator new[] ( std::size_t blocksize )
18 {
19 return OS_AllocFromHeap( ARENA_ID, HEAP_ID, blocksize );
20 }
21
22 //----------------------------------------------------------------
23 //
operator delete(void * block)24 void operator delete ( void* block ) throw()
25 {
26 OS_FreeToHeap( ARENA_ID, HEAP_ID, block );
27 }
28
29 //----------------------------------------------------------------
30 //
operator delete[](void * block)31 void operator delete[] ( void* block ) throw()
32 {
33 OS_FreeToHeap( ARENA_ID, HEAP_ID, block );
34 }
35
36 /*---------------------------------------------------------------------------*
37 Name: NitroStartUp
38
39 Description: startup befor NitroMain()
40
41 Arguments: None
42
43 Returns: None
44 *---------------------------------------------------------------------------*/
NitroStartUp(void)45 void NitroStartUp(void)
46 {
47 void* arenaLo;
48 void* arenaHi;
49
50 OS_Init();
51
52 arenaLo = OS_GetArenaLo( ARENA_ID );
53 arenaHi = OS_GetArenaHi( ARENA_ID );
54
55 // Create a heap
56 arenaLo = OS_InitAlloc( ARENA_ID, arenaLo, arenaHi, 1 );
57 OS_SetArenaLo( ARENA_ID, arenaLo );
58
59 // Ensure boundaries are 32B aligned
60 arenaLo = (void*)ROUND( arenaLo, 32 );
61 arenaHi = (void*)ROUND( arenaHi, 32 );
62
63 // The boundaries given to OSCreateHeap should be 32B aligned
64 (void)OS_SetCurrentHeap( ARENA_ID, OS_CreateHeap( ARENA_ID, arenaLo, arenaHi ) );
65
66 // From here on out, OS_Alloc and OS_Free behave like malloc and free respectively
67 OS_SetArenaLo( ARENA_ID, arenaLo = arenaHi );
68 }
69