diff options
Diffstat (limited to 'backends/PalmOS/Src/arm/PNOMain.cpp')
| -rw-r--r-- | backends/PalmOS/Src/arm/PNOMain.cpp | 60 | 
1 files changed, 60 insertions, 0 deletions
diff --git a/backends/PalmOS/Src/arm/PNOMain.cpp b/backends/PalmOS/Src/arm/PNOMain.cpp new file mode 100644 index 0000000000..6fc59e0000 --- /dev/null +++ b/backends/PalmOS/Src/arm/PNOMain.cpp @@ -0,0 +1,60 @@ +#include "PACEInterfaceLib.h" +#include "ArmNative.h" + +// Linker still looks for ARMlet_Main as entry point, but the +// "ARMlet" name is now officially discouraged.  Compare an +// contrast to "PilotMain" for 68K applications. +#define PNO_Main ARMlet_Main +// entry point +extern "C" +unsigned long PNO_Main(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP); + +#ifndef WIN32 + +#pragma thumb off +asm void * __ARMlet_Take_Func_Addr__(void *f) +{ +    sub     r0, r0, r10         //  0 convert pointer to zero-based address +    ldr     r12, [pc, #8]       //  4 load zero-based address of this routine plus offset into r12 +    sub     r12, pc, r12        //  8 compute start of PNO by subtracting this from PC +    add     r0, r0, r12         // 12 add PNO start to function pointer +    bx      lr                  // 16 return to caller +    dcd     __ARMlet_Take_Func_Addr__ + 16    // 20 +} +#pragma thumb reset + +#else +#define	__ARMlet_Take_Func_Addr__(x)	x +#endif + +unsigned long PNO_Main(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) { +/*	const PnoProc call[] = { +		(PnoProc)__ARMlet_Take_Func_Addr__(OSystem_PALMOS_update_screen__wide_portrait), +		(PnoProc)__ARMlet_Take_Func_Addr__(OSystem_PALMOS_update_screen__wide_landscape), +		//OSystem_PALMOS_copy_rect +	}; +*/ +#ifndef WIN32 +	// needed before making any OS calls using the  +	// PACEInterface library +	InitPACEInterface(emulStateP, call68KFuncP); +#else +	global.call68KFuncP = call68KFuncP; +	global.emulStateP = emulStateP; +	global.userData68KP = userData68KP; +#endif + +	UInt32 run = ByteSwap32(*(UInt32 *)userData68KP); + +	switch (run) { +		case 0: +			OSystem_PALMOS_update_screen__wide_portrait(userData68KP); +			break; +		case 1: +			OSystem_PALMOS_update_screen__wide_landscape(userData68KP); +			break; +	} + +	return 0; +//	return call[run](userData68KP); +}  | 
