diff options
-rwxr-xr-x | backends/PalmOS/Src/native/pnoARM.c | 83 | ||||
-rwxr-xr-x | backends/PalmOS/Src/native/pnoStartup.c | 27 | ||||
-rwxr-xr-x | backends/PalmOS/Src/native/znative_cine.h | 7 | ||||
-rwxr-xr-x | backends/PalmOS/Src/native/znative_kyra.h | 7 | ||||
-rwxr-xr-x | backends/PalmOS/Src/native/znative_lure.h | 7 | ||||
-rwxr-xr-x | backends/PalmOS/Src/native/zodiacARM.cpp | 123 | ||||
-rwxr-xr-x | backends/PalmOS/Src/native/zodiacStartup.cpp | 173 |
7 files changed, 427 insertions, 0 deletions
diff --git a/backends/PalmOS/Src/native/pnoARM.c b/backends/PalmOS/Src/native/pnoARM.c new file mode 100755 index 0000000000..7a62f3c7d9 --- /dev/null +++ b/backends/PalmOS/Src/native/pnoARM.c @@ -0,0 +1,83 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifdef COMPILE_OS5 + +//#include <tapwave.h> +#include <PalmOS.h> +#include <stdlib.h> +#include "pace.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 + +#ifdef COMPILE_ZODIAC + const void* twEmulState; + Call68KFuncType* twCall68KFunc; +#endif +struct TwGlue* twGlue; + +unsigned long PNO_Main(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) { +#ifdef COMPILE_ZODIAC + twEmulState = emulStateP; + twCall68KFunc = call68KFuncP; +#else + global.emulStateP = (EmulStateType *)emulStateP; + global.call68KFuncP = call68KFuncP; +#endif + twGlue = (struct TwGlue*) userData68KP; + +// FrmCustomAlert(1200,"test",0,0); + + return PilotMain(sysAppLaunchCmdNormalLaunch, userData68KP, 0); +} + + // + // The following functions provide malloc/free support to Metrowerks + // Standard Library (MSL). This feature requires the MSL library be + // built with _MSL_OS_DIRECT_MALLOC enabled. + // +void* +__sys_alloc(UInt32 size) +{ + void * ptr = malloc(size); + ErrFatalDisplayIf(ptr == NULL, "out of memory"); + return ptr; +} + +void +__sys_free(void* ptr) +{ + (void) MemPtrFree(ptr); +} + +UInt32 +__sys_pointer_size(void* ptr) +{ + return (UInt32) MemPtrSize(ptr); +} + +#endif
\ No newline at end of file diff --git a/backends/PalmOS/Src/native/pnoStartup.c b/backends/PalmOS/Src/native/pnoStartup.c new file mode 100755 index 0000000000..77623721f9 --- /dev/null +++ b/backends/PalmOS/Src/native/pnoStartup.c @@ -0,0 +1,27 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifdef COMPILE_OS5 +# include "(Source)/ARMlet_Startup.c" +#endif
\ No newline at end of file diff --git a/backends/PalmOS/Src/native/znative_cine.h b/backends/PalmOS/Src/native/znative_cine.h new file mode 100755 index 0000000000..7cd087aa86 --- /dev/null +++ b/backends/PalmOS/Src/native/znative_cine.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "znative_common.h" +#undef DISABLE_CINE + +#endif diff --git a/backends/PalmOS/Src/native/znative_kyra.h b/backends/PalmOS/Src/native/znative_kyra.h new file mode 100755 index 0000000000..440043998b --- /dev/null +++ b/backends/PalmOS/Src/native/znative_kyra.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "znative_common.h" +#undef DISABLE_KYRA + +#endif diff --git a/backends/PalmOS/Src/native/znative_lure.h b/backends/PalmOS/Src/native/znative_lure.h new file mode 100755 index 0000000000..817d2229af --- /dev/null +++ b/backends/PalmOS/Src/native/znative_lure.h @@ -0,0 +1,7 @@ +#ifndef PREFIX_H +#define PREFIX_H + +#include "znative_common.h" +#undef DISABLE_LURE + +#endif diff --git a/backends/PalmOS/Src/native/zodiacARM.cpp b/backends/PalmOS/Src/native/zodiacARM.cpp new file mode 100755 index 0000000000..c6ac947a9b --- /dev/null +++ b/backends/PalmOS/Src/native/zodiacARM.cpp @@ -0,0 +1,123 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include "globals.h" +#include "extend.h" +#include "args.h" +#include "palmdefs.h" + +#include "rumble.h" + + +#include <AdnDebugMgr.h> +//#define DEBUG_ARM + +GlobalsDataType g_vars; +GlobalsDataPtr gVars = &g_vars; +UInt32 g_stackSize; + +static void Go() { + void *tmp; + char **argvP; + int argc; + +#ifdef DEBUG_ARM +// Tell the debugger we want to enable full debugging + UInt32 flags = AdnDebugEnableGet(); + flags |= kAdnEnableMasterSwitch | kAdnEnableFullDebugging; + AdnDebugEnableSet(flags); +// Tell the debugger where our code lives in memory: + AdnDebugNativeRegister(sysFileTApplication, appFileCreator, 'ARMC', 1); +#endif + + // get global struct + FtrGet(appFileCreator, ftrVars, (UInt32 *)&tmp); + MemMove(gVars, tmp, sizeof(GlobalsDataType)); + + // init STDIO + StdioSetCacheSize(0); + StdioInit(gVars->VFS.volRefNum, "/PALM/Programs/ScummVM/scumm.log"); + if (gVars->indicator.showLED) + StdioSetLedProc(DrawStatus); + StdioSetCacheSize(gVars->VFS.cacheSize); + gUnistdCWD = SCUMMVM_SAVEPATH; + + // get args + FtrGet(appFileCreator, ftrArgsData, (UInt32 *)&argvP); + FtrGet(appFileCreator, ftrArgsCount, (UInt32 *)&argc); + + // init system + WinSetDrawWindow(WinGetDisplayWindow()); + if (HWR_INIT(INIT_VIBRATOR)) gVars->vibrator = RumbleInit(); + + // run ... + extern int main(int, char **); + DO_EXIT ( main(argc, argvP); ) + + // release + if (HWR_INIT(INIT_VIBRATOR)) RumbleRelease(); + StdioRelease(); + +#ifdef DEBUG_ARM + AdnDebugNativeUnregister(); +#endif +} + +/* stack size */ + +Int8 *g_newStack, *g_newStackPos; +void *g_oldStack; + +static asm void *StkSwap(void *newStack ,void *dummy) { + mov r1, r13 + mov r13, r0 + mov r0, r1 + bx lr +} + +extern UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { + if (cmd == sysAppLaunchCmdNormalLaunch) { + FtrGet(appFileCreator, ftrStack, &g_stackSize); + if (!g_stackSize) + g_stackSize = 32 * 1024; + + g_newStack = (Int8 *)malloc(g_stackSize + 8); + g_newStackPos = (g_newStack + g_stackSize); + g_newStackPos -= ((UInt32)g_newStackPos & 7); + + g_oldStack = StkSwap(g_newStackPos, 0); + + Go(); + + StkSwap(g_oldStack, 0); + free(g_newStack); + } + + return 0; +} + diff --git a/backends/PalmOS/Src/native/zodiacStartup.cpp b/backends/PalmOS/Src/native/zodiacStartup.cpp new file mode 100755 index 0000000000..4e7426e0ac --- /dev/null +++ b/backends/PalmOS/Src/native/zodiacStartup.cpp @@ -0,0 +1,173 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * Copyright (C) 2001-2006 The ScummVM project + * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifdef COMPILE_ZODIAC + +#include <TapWave.h> + +#ifndef __PALMOS_ARMLET__ +#error "__PALMOS_ARMLET__ is not defined!!!" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This variable holds the Tapwave Native Application interface + * dispatch table. General ARM API calls will go through this table. + */ +struct TwGlue* twGlue; +const void* twEmulState; +Call68KFuncType* twCall68KFunc; + +#ifdef __MWERKS__ + +#if __PALMOS_ARMLET__ < 0x120 +#error "You must use CodeWarrior for Palm OS 9.3 or later!!!" +#endif + + +UInt32 __ARMlet_Startup__(const void*, void*, Call68KFuncType*); + +/* + * These symbols aren't real, but are linker-generated symbols that + * mark the start and end of the various data sections. + */ +extern long __DataStart__[]; +extern long __RODataStart__[]; +extern long __BSSStart__[]; +extern long __BSSEnd__[]; +extern long __CodeRelocStart__[]; +extern long __CodeRelocEnd__[]; +extern long __DataRelocStart__[]; +extern long __DataRelocEnd__[]; + +/* + * This function performs relocation for Tapwave Native Application. + */ +static void relocate(void) +{ + // this symbol points to the very beginning of current application + long base = (long) __ARMlet_Startup__; + long *cur, *end; + + // handle code-to-data relocation + cur = __CodeRelocStart__; + end = __CodeRelocEnd__; + for (; cur < end; cur++) { + *(long*)(base + *cur) += base; + } + + // handle data-to-data relocation + cur = __DataRelocStart__; + end = __DataRelocEnd__; + for (; cur < end; cur++) { + *(long*)(base + *cur) += base; + } +} + +// + // The following functions provide malloc/free support to Metrowerks + // Standard Library (MSL). This feature requires the MSL library be + // built with _MSL_OS_DIRECT_MALLOC enabled. + // +void* +__sys_alloc(size_t size) +{ + void * ptr = MemPtrNew(size); + ErrFatalDisplayIf(ptr == NULL, "out of memory"); + return ptr; +} + +void +__sys_free(void* ptr) +{ + (void) MemPtrFree(ptr); +} + +size_t +__sys_pointer_size(void* ptr) +{ + return (size_t) MemPtrSize(ptr); +} + +/* + * This is the real entrypoint for Tapwave Native Application. It + * depends on various CodeWarrior 9.2 compiler/linker/runtime features. + */ +static SYSTEM_CALLBACK UInt32 +Startup(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) +{ + if (emulStateP) { + twEmulState = emulStateP; + twCall68KFunc = call68KFuncP; + // COMMENT: normal pace native object launch + return PilotMain(sysAppLaunchCmdNormalLaunch, userData68KP, 0); + } else { + // Setup TNA interface dispatch table + twGlue = (struct TwGlue*) userData68KP; + + // OPTIONAL: relocate data segment + relocate(); + + // OPTIONAL: initialize the floating-point library + // _fp_init(); + + return 0; + } +} + +#pragma PIC off +asm UInt32 +__ARMlet_Startup__(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) +{ + b Startup // 0 forwarding call + nop // 4 + nop // 8 + nop // 12 + nop // 16 + nop // 20 + nop // 24 + dcd 'TWNA' // 28 Tapwave Native Application + dcd 1 // 32 version 1 + dcd 'cdwr' // 36 make this section the same as the __ARMlet_Startup__ + dcd __DataStart__ // 40 used by CodeWarrior 9.2 + dcd __RODataStart__ // 44 + dcd __BSSStart__ // 48 + dcd __BSSEnd__ // 52 + dcd __CodeRelocStart__ // 56 + dcd __CodeRelocEnd__ // 60 + dcd __DataRelocStart__ // 64 + dcd __DataRelocEnd__ // 68 +} +#pragma PIC reset + +#endif // __MWERKS__ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif |