aboutsummaryrefslogtreecommitdiff
path: root/SrcShared/Patches/EmPatchMgr.h
blob: d2d015583f66a4d36e75f118b325c48b627312dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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 */