src/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 "util/common.h"
10
11#include "core/cpu.h"
12#include "core/log.h"
13#include "util/vector.h"
14
15#define MAX_ROM_PATCHES 4
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};
32
33struct mCheat {
34 enum mCheatType type;
35 int width;
36 uint32_t address;
37 uint32_t operand;
38 uint32_t repeat;
39 uint32_t negativeRepeat;
40
41 int32_t addressOffset;
42 int32_t operandOffset;
43};
44
45mLOG_DECLARE_CATEGORY(CHEATS);
46
47DECLARE_VECTOR(mCheatList, struct mCheat);
48DECLARE_VECTOR(StringList, char*);
49
50struct mCheatDevice;
51struct mCheatSet {
52 struct mCheatList list;
53
54 void (*deinit)(struct mCheatSet* set);
55 void (*add)(struct mCheatSet* set, struct mCheatDevice* device);
56 void (*remove)(struct mCheatSet* set, struct mCheatDevice* device);
57
58 bool (*addLine)(struct mCheatSet* set, const char* cheat, int type);
59 void (*copyProperties)(struct mCheatSet* set, struct mCheatSet* oldSet);
60
61 void (*parseDirectives)(struct mCheatSet* set, const struct StringList* directives);
62 void (*dumpDirectives)(struct mCheatSet* set, struct StringList* directives);
63
64 void (*refresh)(struct mCheatSet* set, struct mCheatDevice* device);
65
66 char* name;
67 bool enabled;
68 struct StringList lines;
69};
70
71DECLARE_VECTOR(mCheatSets, struct mCheatSet*);
72
73struct mCheatDevice {
74 struct mCPUComponent d;
75 struct mCore* p;
76
77 struct mCheatSet* (*createSet)(struct mCheatDevice*, const char* name);
78
79 struct mCheatSets cheats;
80};
81
82struct VFile;
83
84void mCheatDeviceCreate(struct mCheatDevice*);
85void mCheatDeviceDestroy(struct mCheatDevice*);
86void mCheatDeviceClear(struct mCheatDevice*);
87
88void mCheatSetInit(struct mCheatSet*, const char* name);
89void mCheatSetDeinit(struct mCheatSet*);
90void mCheatSetRename(struct mCheatSet*, const char* name);
91
92bool mCheatAddLine(struct mCheatSet*, const char* line, int type);
93
94void mCheatAddSet(struct mCheatDevice*, struct mCheatSet*);
95void mCheatRemoveSet(struct mCheatDevice*, struct mCheatSet*);
96
97bool mCheatParseFile(struct mCheatDevice*, struct VFile*);
98bool mCheatSaveFile(struct mCheatDevice*, struct VFile*);
99
100void mCheatRefresh(struct mCheatDevice*, struct mCheatSet*);
101
102#endif