include/mgba/core/cheats.h (view raw)
1/* Copyright (c) 2013-2016 Jeffrey Pfau
2 *
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6#ifndef CHEATS_H
7#define CHEATS_H
8
9#include <mgba-util/common.h>
10
11CXX_GUARD_START
12
13#include <mgba/core/cpu.h>
14#include <mgba/core/log.h>
15#include <mgba-util/vector.h>
16
17enum mCheatType {
18 CHEAT_ASSIGN,
19 CHEAT_ASSIGN_INDIRECT,
20 CHEAT_AND,
21 CHEAT_ADD,
22 CHEAT_OR,
23 CHEAT_IF_EQ,
24 CHEAT_IF_NE,
25 CHEAT_IF_LT,
26 CHEAT_IF_GT,
27 CHEAT_IF_ULT,
28 CHEAT_IF_UGT,
29 CHEAT_IF_AND,
30 CHEAT_IF_LAND,
31 CHEAT_IF_NAND,
32 CHEAT_IF_BUTTON,
33};
34
35struct mCheat {
36 enum mCheatType type;
37 int width;
38 uint32_t address;
39 uint32_t operand;
40 uint32_t repeat;
41 uint32_t negativeRepeat;
42
43 int32_t addressOffset;
44 int32_t operandOffset;
45};
46
47mLOG_DECLARE_CATEGORY(CHEATS);
48
49DECLARE_VECTOR(mCheatList, struct mCheat);
50
51struct mCheatDevice;
52struct mCheatSet {
53 struct mCheatList list;
54
55 void (*deinit)(struct mCheatSet* set);
56 void (*add)(struct mCheatSet* set, struct mCheatDevice* device);
57 void (*remove)(struct mCheatSet* set, struct mCheatDevice* device);
58
59 bool (*addLine)(struct mCheatSet* set, const char* cheat, int type);
60 void (*copyProperties)(struct mCheatSet* set, struct mCheatSet* oldSet);
61
62 void (*parseDirectives)(struct mCheatSet* set, const struct StringList* directives);
63 void (*dumpDirectives)(struct mCheatSet* set, struct StringList* directives);
64
65 void (*refresh)(struct mCheatSet* set, struct mCheatDevice* device);
66
67 char* name;
68 bool enabled;
69 struct StringList lines;
70};
71
72DECLARE_VECTOR(mCheatSets, struct mCheatSet*);
73
74struct mCheatDevice {
75 struct mCPUComponent d;
76 struct mCore* p;
77
78 struct mCheatSet* (*createSet)(struct mCheatDevice*, const char* name);
79
80 struct mCheatSets cheats;
81 bool autosave;
82 bool buttonDown;
83};
84
85struct VFile;
86
87void mCheatDeviceCreate(struct mCheatDevice*);
88void mCheatDeviceDestroy(struct mCheatDevice*);
89void mCheatDeviceClear(struct mCheatDevice*);
90
91void mCheatSetInit(struct mCheatSet*, const char* name);
92void mCheatSetDeinit(struct mCheatSet*);
93void mCheatSetRename(struct mCheatSet*, const char* name);
94
95bool mCheatAddLine(struct mCheatSet*, const char* line, int type);
96
97void mCheatAddSet(struct mCheatDevice*, struct mCheatSet*);
98void mCheatRemoveSet(struct mCheatDevice*, struct mCheatSet*);
99
100bool mCheatParseFile(struct mCheatDevice*, struct VFile*);
101bool mCheatSaveFile(struct mCheatDevice*, struct VFile*);
102
103#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
104void mCheatAutosave(struct mCheatDevice*);
105#endif
106
107void mCheatRefresh(struct mCheatDevice*, struct mCheatSet*);
108void mCheatPressButton(struct mCheatDevice*, bool down);
109
110CXX_GUARD_END
111
112#endif