1 /*  Cheat Support for PCSX-Reloaded
2  *  Copyright (C) 2009, Wei Mingzhi <whistler_wmz@users.sf.net>.
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License
15  *  along with this program; if not, write to the Free Software
16  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA
17  */
18 
19 #ifndef CHEAT_H
20 #define CHEAT_H
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 typedef struct {
27 	uint32_t	Addr;
28 	uint16_t	Val;
29 	uint16_t	OldVal;
30 } CheatCode;
31 
32 typedef struct {
33 	char		*Descr;
34 	int			First;		// index of the first cheat code
35 	int			n;			// number of cheat codes for this cheat
36 	int			Enabled;
37 	int			WasEnabled;
38 } Cheat;
39 
40 void ClearAllCheats();
41 
42 void LoadCheats(const char *filename);
43 void SaveCheats(const char *filename);
44 
45 void ApplyCheats();
46 
47 int AddCheat(const char *descr, char *code);
48 void RemoveCheat(int index);
49 int EditCheat(int index, const char *descr, char *code);
50 
51 void FreeCheatSearchResults();
52 void FreeCheatSearchMem();
53 void CheatSearchBackupMemory();
54 
55 void CheatSearchEqual8(u8 val);
56 void CheatSearchEqual16(u16 val);
57 void CheatSearchEqual32(u32 val);
58 void CheatSearchNotEqual8(u8 val);
59 void CheatSearchNotEqual16(u16 val);
60 void CheatSearchNotEqual32(u32 val);
61 void CheatSearchRange8(u8 min, u8 max);
62 void CheatSearchRange16(u16 min, u16 max);
63 void CheatSearchRange32(u32 min, u32 max);
64 void CheatSearchIncreasedBy8(u8 val);
65 void CheatSearchIncreasedBy16(u16 val);
66 void CheatSearchIncreasedBy32(u32 val);
67 void CheatSearchDecreasedBy8(u8 val);
68 void CheatSearchDecreasedBy16(u16 val);
69 void CheatSearchDecreasedBy32(u32 val);
70 void CheatSearchIncreased8();
71 void CheatSearchIncreased16();
72 void CheatSearchIncreased32();
73 void CheatSearchDecreased8();
74 void CheatSearchDecreased16();
75 void CheatSearchDecreased32();
76 void CheatSearchDifferent8();
77 void CheatSearchDifferent16();
78 void CheatSearchDifferent32();
79 void CheatSearchNoChange8();
80 void CheatSearchNoChange16();
81 void CheatSearchNoChange32();
82 
83 extern Cheat *Cheats;
84 extern CheatCode *CheatCodes;
85 extern int NumCheats;
86 extern int NumCodes;
87 
88 extern s8 *prevM;
89 extern u32 *SearchResults;
90 extern int NumSearchResults;
91 
92 extern int NumCheatsAllocated;
93 extern int NumCodesAllocated;
94 
95 #define PREVM(mem)		(&prevM[mem])
96 #define PrevMu8(mem)	(*(u8 *)PREVM(mem))
97 #define PrevMu16(mem)	(SWAP16(*(u16 *)PREVM(mem)))
98 #define PrevMu32(mem)	(SWAP32(*(u32 *)PREVM(mem)))
99 
100 // cheat types
101 #define CHEAT_CONST8		0x30	/* 8-bit Constant Write */
102 #define CHEAT_CONST16		0x80	/* 16-bit Constant Write */
103 #define CHEAT_INC16			0x10	/* 16-bit Increment */
104 #define CHEAT_DEC16			0x11	/* 16-bit Decrement */
105 #define CHEAT_INC8			0x20	/* 8-bit Increment */
106 #define CHEAT_DEC8			0x21	/* 8-bit Decrement */
107 #define CHEAT_SLIDE			0x50	/* Slide Codes */
108 #define CHEAT_MEMCPY		0xC2	/* Memory Copy */
109 
110 #define CHEAT_EQU8			0xE0	/* 8-bit Equal To */
111 #define CHEAT_NOTEQU8		0xE1	/* 8-bit Not Equal To */
112 #define CHEAT_LESSTHAN8		0xE2	/* 8-bit Less Than */
113 #define CHEAT_GREATERTHAN8  0xE3	/* 8-bit Greater Than */
114 #define CHEAT_EQU16			0xD0	/* 16-bit Equal To */
115 #define CHEAT_NOTEQU16		0xD1	/* 16-bit Not Equal To */
116 #define CHEAT_LESSTHAN16	0xD2	/* 16-bit Less Than */
117 #define CHEAT_GREATERTHAN16 0xD3	/* 16-bit Greater Than */
118 
119 #ifdef __cplusplus
120 }
121 #endif
122 #endif
123