1 // -*- C++ -*-
2 // VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator.
3 // Copyright (C) 1999-2003 Forgotten
4 // Copyright (C) 2004 Forgotten and the VBA development team
5 
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 2, or(at your option)
9 // any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software Foundation,
18 // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 
20 #ifndef VBA_CHEATSEARCH_H
21 #define VBA_CHEATSEARCH_H
22 
23 #include "System.h"
24 
25 struct CheatSearchBlock {
26   int size;
27   u32 offset;
28   u8 *bits;
29   u8 *data;
30   u8 *saved;
31 };
32 
33 struct CheatSearchData {
34   int count;
35   CheatSearchBlock *blocks;
36 };
37 
38 enum {
39   SEARCH_EQ,
40   SEARCH_NE,
41   SEARCH_LT,
42   SEARCH_LE,
43   SEARCH_GT,
44   SEARCH_GE
45 };
46 
47 enum {
48   BITS_8,
49   BITS_16,
50   BITS_32
51 };
52 
53 #define SET_BIT(bits,off) \
54   (bits)[(off) >> 3] |= (1 << ((off) & 7))
55 
56 #define CLEAR_BIT(bits, off) \
57   (bits)[(off) >> 3] &= ~(1 << ((off) & 7))
58 
59 #define IS_BIT_SET(bits, off) \
60   (bits)[(off) >> 3] & (1 << ((off) & 7))
61 
62 extern CheatSearchData cheatSearchData;
63 extern void cheatSearchCleanup(CheatSearchData *cs);
64 extern void cheatSearchStart(const CheatSearchData *cs);
65 extern void cheatSearch(const CheatSearchData *cs, int compare, int size,
66                         bool isSigned);
67 extern void cheatSearchValue(const CheatSearchData *cs, int compare, int size,
68                              bool isSigned, u32 value);
69 extern int cheatSearchGetCount(const CheatSearchData *cs, int size);
70 extern void cheatSearchUpdateValues(const CheatSearchData *cs);
71 extern s32 cheatSearchSignedRead(u8 *data, int off, int size);
72 extern u32 cheatSearchRead(u8 *data, int off, int size);
73 #endif
74