--- /dev/null
-u32 mappableSpaceFree(); // get free mappable space in bytes
+ #pragma once
+
+ // Functions for allocating/deallocating mappable memory
+ void* mappableAlloc(size_t size); // returns a page-aligned address
+ void mappableFree(void* mem);
++u32 mappableSpaceFree(void); // get free mappable space in bytes
extern Handle hidMemHandle;
extern vu32* hidSharedMem;
- Result hidInit(u32* sharedMem);
-Result hidInit();
-void hidExit();
++Result hidInit(void);
+void hidExit(void);
-void hidScanInput();
-u32 hidKeysHeld();
-u32 hidKeysDown();
-u32 hidKeysUp();
+void hidScanInput(void);
+u32 hidKeysHeld(void);
+u32 hidKeysDown(void);
+u32 hidKeysUp(void);
void hidTouchRead(touchPosition* pos);
void hidCircleRead(circlePosition* pos);
void hidAccelRead(accelVector* vector);
extern Handle irrstMemHandle;
extern vu32* irrstSharedMem;
- Result irrstInit(u32* sharedMem);
-Result irrstInit();
-void irrstExit();
++Result irrstInit(void);
+void irrstExit(void);
-void irrstScanInput();
-u32 irrstKeysHeld();
+void irrstScanInput(void);
+u32 irrstKeysHeld(void);
void irrstCstickRead(circlePosition* pos);
void irrstWaitForEvent(bool nextEvent);
#include <3ds/gfx.h>
#include <3ds/svc.h>
#include <3ds/linear.h>
+ #include <3ds/mappable.h>
#include <3ds/vram.h>
+#include <3ds/gpu/gx.h>
GSP_FramebufferInfo topFramebufferInfo, bottomFramebufferInfo;
gspInit();
- gfxSharedMemory=(u8*)0x10002000;
+ gfxSharedMemory=(u8*)mappableAlloc(0x1000);
- GSPGPU_AcquireRight(NULL, 0x0);
+ GSPGPU_AcquireRight(0x0);
//setup our gsp shared mem section
svcCreateEvent(&gspEvent, 0x0);
//unmap GSP shared mem
svcUnmapMemoryBlock(gspSharedMemHandle, 0x10002000);
- GSPGPU_UnregisterInterruptRelayQueue(NULL);
+ GSPGPU_UnregisterInterruptRelayQueue();
svcCloseHandle(gspSharedMemHandle);
+ if(gfxSharedMemory != NULL)
+ {
+ mappableFree(gfxSharedMemory);
+ gfxSharedMemory = NULL;
+ }
+
svcCloseHandle(gspEvent);
- GSPGPU_ReleaseRight(NULL);
+ GSPGPU_ReleaseRight();
gspExit();
#include <3ds/types.h>
#include <3ds/svc.h>
#include <3ds/srv.h>
+ #include <3ds/mappable.h>
#include <3ds/os.h>
#include <3ds/services/csnd.h>
+#include <3ds/ipc.h>
// See here regarding CSND shared-mem commands, etc: http://3dbrew.org/wiki/CSND_Shared_Memory
ret = CSND_Shutdown();
svcCloseHandle(csndHandle);
-
++
+ if(csndSharedMem != NULL)
+ {
+ mappableFree((void*) csndSharedMem);
+ csndSharedMem = NULL;
+ }
+
return ret;
}
static bool hidInitialised;
- Result hidInit(u32* sharedMem)
-Result hidInit()
++Result hidInit(void)
{
u8 val=0;
Result ret=0;
// Get sharedmem handle.
if((ret=HIDUSER_GetHandles(&hidMemHandle, &hidEvents[HIDEVENT_PAD0], &hidEvents[HIDEVENT_PAD1], &hidEvents[HIDEVENT_Accel], &hidEvents[HIDEVENT_Gyro], &hidEvents[HIDEVENT_DebugPad]))) goto cleanup1;
- // Map HID shared memory at addr "sharedMem".
- hidSharedMem=sharedMem;
+ // Map HID shared memory.
+ hidSharedMem=(vu32*)mappableAlloc(0x2b0);
+ if(!hidSharedMem)
+ {
+ ret = -1;
+ goto cleanup1;
+ }
+
if((ret=svcMapMemoryBlock(hidMemHandle, (u32)hidSharedMem, MEMPERM_READ, 0x10000000)))goto cleanup2;
- APT_CheckNew3DS(NULL, &val);
+ APT_CheckNew3DS(&val);
if(val)
{
#include <3ds/types.h>
#include <3ds/svc.h>
#include <3ds/srv.h>
+ #include <3ds/mappable.h>
#include <3ds/services/irrst.h>
+#include <3ds/ipc.h>
// used to determine whether or not we should do IRRST_Initialize
Handle __get_handle_from_list(char* name);
static circlePosition csPos;
static bool irrstUsed = false;
- Result irrstInit(u32* sharedMem)
-Result irrstInit()
++Result irrstInit(void)
{
if(irrstUsed)return 0;