diff options
Diffstat (limited to 'SrcShared/Patches/EmPatchMgr.h')
-rw-r--r-- | SrcShared/Patches/EmPatchMgr.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/SrcShared/Patches/EmPatchMgr.h b/SrcShared/Patches/EmPatchMgr.h new file mode 100644 index 0000000..d2d0155 --- /dev/null +++ b/SrcShared/Patches/EmPatchMgr.h @@ -0,0 +1,103 @@ +/* -*- mode: C++; tab-width: 4 -*- */ +/* ===================================================================== *\ + Copyright (c) 1998-2001 Palm, Inc. or its subsidiaries. + Copyright (c) 2001 PocketPyro, Inc. + All rights reserved. + + This file is part of the Palm OS Emulator. + + 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. +\* ===================================================================== */ + +#ifndef EmPatchMgr_h +#define EmPatchMgr_h + +#include "EcmObject.h" +#include "EmPatchIf.h" +#include "PreferenceMgr.h" // PrefKeyType + +#include <vector> + +class SessionFile; +struct SystemCallContext; + +struct IEmPatchModule; + + +class EmPatchMgr : public EcmObject, + ecm_implements IEmPatchContainer, + ecm_implements IEmPatchDllTempHacks +{ + public: + + ECM_CLASS_IF_LIST_BEGIN(EmPatchMgr, EcmObject) + ECM_CLASS_IF(kEmPatchContainerIfn, IEmPatchContainer) + ECM_CLASS_IF(kEmPatchDllTempHacksIfn, IEmPatchDllTempHacks) + ECM_CLASS_IF_LIST_END(EmPatchMgr, EcmObject) + + + +// ============================================================================== +// * BEGIN IEmPatchContainer +// ============================================================================== + +// ============================================================================== +// * END IEmPatchContainer +// ============================================================================== + +// ============================================================================== +// * BEGIN IEmPatchDllTempHacks +// ============================================================================== + + virtual Err GetGlobalMemBanks(void** membanksPP); + virtual Err GetGlobalRegs(void** regsPP); + +// ============================================================================== +// * END IEmPatchDllTempHacks +// ============================================================================== + + static void Initialize (void); + static void Reset (void); + static void Save (SessionFile&); + static void Load (SessionFile&); + static void Dispose (void); + + static void PostLoad (void); + + static CallROMType HandleSystemCall (const SystemCallContext&); + + static void HandleInstructionBreak (void); + static void InstallInstructionBreaks(void); + static void RemoveInstructionBreaks (void); + + static void GetPatches (const SystemCallContext&, + HeadpatchProc& hp, + TailpatchProc& tp); + + static CallROMType HandlePatches (const SystemCallContext&, + HeadpatchProc hp, + TailpatchProc tp); + + static IEmPatchModule* GetLibPatchTable (uint16 refNum); + + static CallROMType CallHeadpatch (HeadpatchProc, bool noProfiling = true); + static void CallTailpatch (TailpatchProc, bool noProfiling = true); + + static Err SwitchToApp (UInt16 cardNo, LocalID dbID); + + static void PuppetString (CallROMType& callROM, + Bool& clearTimeout); + + static Bool IntlMgrAvailable (void); + + private: + static void SetupForTailpatch (TailpatchProc tp, + const SystemCallContext&); + static TailpatchProc RecoverFromTailpatch (emuptr oldpc); +}; + +#endif /* EmPatchMgr_h */ + |