VirtualC64 v5.0 beta
Commodore 64 Emulator
Loading...
Searching...
No Matches
CartridgeTypes.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2// This file is part of VirtualC64
3//
4// Copyright (C) Dirk W. Hoffmann. www.dirkwhoffmann.de
5// This FILE is dual-licensed. You are free to choose between:
6//
7// - The GNU General Public License v3 (or any later version)
8// - The Mozilla Public License v2
9//
10// SPDX-License-Identifier: GPL-3.0-or-later OR MPL-2.0
11// -----------------------------------------------------------------------------
13
14#pragma once
15
16#include "Reflection.h"
17
18namespace vc64 {
19
20//
21// Enumerations
22//
23
24enum_long(CRT_TYPE)
25{
26 // Cartridges with a defined CRT ID (values must match)
27 CRT_NORMAL = 0,
28 CRT_ACTION_REPLAY = 1,
29 CRT_KCS_POWER = 2,
30 CRT_FINAL_III = 3,
31 CRT_SIMONS_BASIC = 4,
32 CRT_OCEAN = 5,
33 CRT_EXPERT = 6,
34 CRT_FUNPLAY = 7,
35 CRT_SUPER_GAMES = 8,
36 CRT_ATOMIC_POWER = 9,
37 CRT_EPYX_FASTLOAD = 10,
38 CRT_WESTERMANN = 11,
39 CRT_REX = 12,
40 CRT_FINAL_I = 13,
41 CRT_MAGIC_FORMEL = 14,
42 CRT_GS = 15,
43 CRT_WARPSPEED = 16,
44 CRT_DINAMIC = 17,
45 CRT_ZAXXON = 18,
46 CRT_MAGIC_DESK = 19,
47 CRT_SUPER_SNAPSHOT_V5 = 20,
48 CRT_COMAL80 = 21,
49 CRT_STRUCTURED_BASIC = 22,
50 CRT_ROSS = 23,
51 CRT_DELA_EP64 = 24,
52 CRT_DELA_EP7X8 = 25,
53 CRT_DELA_EP256 = 26,
54 CRT_REX_EP256 = 27,
55 CRT_MIKRO_ASSEMBLER = 28,
56 CRT_FINAL_PLUS = 29,
57 CRT_ACTION_REPLAY4 = 30,
58 CRT_STARDOS = 31,
59 CRT_EASYFLASH = 32,
60 CRT_EASYFLASH_XBANK = 33,
61 CRT_CAPTURE = 34,
62 CRT_ACTION_REPLAY3 = 35,
63 CRT_RETRO_REPLAY = 36,
64 CRT_MMC64 = 37,
65 CRT_MMC_REPLAY = 38,
66 CRT_IDE64 = 39,
67 CRT_SUPER_SNAPSHOT = 40,
68 CRT_IEEE488 = 41,
69 CRT_GAME_KILLER = 42,
70 CRT_P64 = 43,
71 CRT_EXOS = 44,
72 CRT_FREEZE_FRAME = 45,
73 CRT_FREEZE_MACHINE = 46,
74 CRT_SNAPSHOT64 = 47,
75 CRT_SUPER_EXPLODE_V5 = 48,
76 CRT_MAGIC_VOICE = 49,
77 CRT_ACTION_REPLAY2 = 50,
78 CRT_MACH5 = 51,
79 CRT_DIASHOW_MAKER = 52,
80 CRT_PAGEFOX = 53,
81 CRT_KINGSOFT = 54,
82 CRT_SILVERROCK_128 = 55,
83 CRT_FORMEL64 = 56,
84 CRT_RGCD = 57,
85 CRT_RRNETMK3 = 58,
86 CRT_EASYCALC = 59,
87 CRT_GMOD2 = 60,
88 CRT_MAX_BASIC = 61,
89 CRT_GMOD3 = 62,
90 CRT_ZIPPCODE48 = 63,
91 CRT_BLACKBOX8 = 64,
92 CRT_BLACKBOX3 = 65,
93 CRT_BLACKBOX4 = 66,
94 CRT_REX_RAMFLOPPY = 67,
95 CRT_BISPLUS = 68,
96 CRT_SDBOX = 69,
97 CRT_MULTIMAX = 70,
98 CRT_BLACKBOX9 = 71,
99 CRT_LT_KERNAL = 72,
100 CRT_RAMLINK = 73,
101 CRT_HERO = 74,
102
103 // Cartridges with no CRT ID (values can be arbitrary)
104 CRT_ISEPIC,
105 CRT_GEO_RAM,
106 CRT_REU,
107 CRT_NONE
108};
109typedef CRT_TYPE CartridgeType;
110
111struct CartridgeTypeEnum : util::Reflection<CartridgeTypeEnum, CartridgeType> {
112
113 static constexpr long minVal = 0;
114 static constexpr long maxVal = CRT_NONE;
115 static bool isValid(auto value) { return value >= minVal && value <= maxVal; }
116
117 static const char *prefix() { return "CRT"; }
118 static const char *key(long value)
119 {
120 switch (value) {
121
122 case CRT_NORMAL: return "NORMAL";
123 case CRT_ACTION_REPLAY: return "ACTION_REPLAY";
124 case CRT_KCS_POWER: return "KCS_POWER";
125 case CRT_FINAL_III: return "FINAL_III";
126 case CRT_SIMONS_BASIC: return "SIMONS_BASIC";
127 case CRT_OCEAN: return "OCEAN";
128 case CRT_EXPERT: return "EXPERT";
129 case CRT_FUNPLAY: return "FUNPLAY";
130 case CRT_SUPER_GAMES: return "SUPER_GAMES";
131 case CRT_ATOMIC_POWER: return "ATOMIC_POWER";
132 case CRT_EPYX_FASTLOAD: return "EPYX_FASTLOAD";
133 case CRT_WESTERMANN: return "WESTERMANN";
134 case CRT_REX: return "REX";
135 case CRT_FINAL_I: return "FINAL_I";
136 case CRT_MAGIC_FORMEL: return "MAGIC_FORMEL";
137 case CRT_GS: return "GS";
138 case CRT_WARPSPEED: return "WARPSPEED";
139 case CRT_DINAMIC: return "DINAMIC";
140 case CRT_ZAXXON: return "ZAXXON";
141 case CRT_MAGIC_DESK: return "MAGIC_DESK";
142 case CRT_SUPER_SNAPSHOT_V5: return "SUPER_SNAPSHOT_V5";
143 case CRT_COMAL80: return "COMAL80";
144 case CRT_STRUCTURED_BASIC: return "STRUCTURED_BASIC";
145 case CRT_ROSS: return "ROSS";
146 case CRT_DELA_EP64: return "DELA_EP64";
147 case CRT_DELA_EP7X8: return "DELA_EP7X8";
148 case CRT_DELA_EP256: return "DELA_EP256";
149 case CRT_REX_EP256: return "REX_EP256";
150 case CRT_MIKRO_ASSEMBLER: return "MIKRO_ASSEMBLER";
151 case CRT_FINAL_PLUS: return "FINAL_PLUS";
152 case CRT_ACTION_REPLAY4: return "ACTION_REPLAY4";
153 case CRT_STARDOS: return "STARDOS";
154 case CRT_EASYFLASH: return "EASYFLASH";
155 case CRT_EASYFLASH_XBANK: return "EASYFLASH_XBANK";
156 case CRT_CAPTURE: return "CAPTURE";
157 case CRT_ACTION_REPLAY3: return "REAACTION_REPLAY3D";
158 case CRT_RETRO_REPLAY: return "RETRO_REPLAY";
159 case CRT_MMC64: return "MMC64";
160 case CRT_MMC_REPLAY: return "MMC_REPLAY";
161 case CRT_IDE64: return "IDE64";
162 case CRT_SUPER_SNAPSHOT: return "SUPER_SNAPSHOT";
163 case CRT_IEEE488: return "IEEE488";
164 case CRT_GAME_KILLER: return "GAME_KILLER";
165 case CRT_P64: return "P64";
166 case CRT_EXOS: return "EXOS";
167 case CRT_FREEZE_FRAME: return "FREEZE_FRAME";
168 case CRT_FREEZE_MACHINE: return "FREEZE_MACHINE";
169 case CRT_SNAPSHOT64: return "SNAPSHOT64";
170 case CRT_SUPER_EXPLODE_V5: return "SUPER_EXPLODE_V5";
171 case CRT_MAGIC_VOICE: return "MAGIC_VOICE";
172 case CRT_ACTION_REPLAY2: return "ACTION_REPLAY2";
173 case CRT_MACH5: return "MACH5";
174 case CRT_DIASHOW_MAKER: return "DIASHOW_MAKER";
175 case CRT_PAGEFOX: return "PAGEFOX";
176 case CRT_KINGSOFT: return "KINGSOFT";
177 case CRT_SILVERROCK_128: return "SILVERROCK_128";
178 case CRT_FORMEL64: return "FORMEL64";
179 case CRT_RGCD: return "RGCD";
180 case CRT_RRNETMK3: return "RRNETMK3";
181 case CRT_EASYCALC: return "EASYCALC";
182 case CRT_GMOD2: return "GMOD2";
183 case CRT_MAX_BASIC: return "MAX_BASIC";
184 case CRT_GMOD3: return "GMOD3";
185 case CRT_ZIPPCODE48: return "ZIPPCODE48";
186 case CRT_BLACKBOX8: return "BLACKBOX8";
187 case CRT_BLACKBOX3: return "BLACKBOX3";
188 case CRT_BLACKBOX4: return "BLACKBOX4";
189 case CRT_REX_RAMFLOPPY: return "REX_RAMFLOPPY";
190 case CRT_BISPLUS: return "BISPLUS";
191 case CRT_SDBOX: return "SDBOX";
192 case CRT_MULTIMAX: return "MULTIMAX";
193 case CRT_BLACKBOX9: return "BLACKBOX9";
194 case CRT_LT_KERNAL: return "LT_KERNAL";
195 case CRT_RAMLINK: return "RAMLINK";
196 case CRT_HERO: return "HERO";
197 case CRT_ISEPIC: return "ISEPIC";
198 case CRT_GEO_RAM: return "GEO_RAM";
199 case CRT_REU: return "REU";
200 case CRT_NONE: return "NONE";
201 }
202 return "???";
203 }
204};
205
206enum_long(FLASH_STATE)
207{
208 FLASH_READ,
209 FLASH_MAGIC_1,
210 FLASH_MAGIC_2,
211 FLASH_AUTOSELECT,
212 FLASH_BYTE_PROGRAM,
213 FLASH_BYTE_PROGRAM_ERROR,
214 FLASH_ERASE_MAGIC_1,
215 FLASH_ERASE_MAGIC_2,
216 FLASH_ERASE_SELECT,
217 FLASH_CHIP_ERASE,
218 FLASH_SECTOR_ERASE,
219 FLASH_SECTOR_ERASE_TIMEOUT,
220 FLASH_SECTOR_ERASE_SUSPEND
221};
222typedef FLASH_STATE FlashState;
223
224struct FlashStateEnum : util::Reflection<FlashStateEnum, FlashState> {
225
226 static constexpr long minVal = 0;
227 static constexpr long maxVal = FLASH_SECTOR_ERASE_SUSPEND;
228 static bool isValid(auto value) { return value >= minVal && value <= maxVal; }
229
230 static const char *prefix() { return "FLASH"; }
231 static const char *key(long value)
232 {
233 switch (value) {
234
235 case FLASH_READ: return "READ";
236 case FLASH_MAGIC_1: return "MAGIC_1";
237 case FLASH_MAGIC_2: return "MAGIC_2";
238 case FLASH_AUTOSELECT: return "AUTOSELECT";
239 case FLASH_BYTE_PROGRAM: return "BYTE_PROGRAM";
240 case FLASH_BYTE_PROGRAM_ERROR: return "BYTE_PROGRAM_ERROR";
241 case FLASH_ERASE_MAGIC_1: return "ERASE_MAGIC_1";
242 case FLASH_ERASE_MAGIC_2: return "ERASE_MAGIC_2";
243 case FLASH_ERASE_SELECT: return "ERASE_SELECT";
244 case FLASH_CHIP_ERASE: return "CHIP_ERASE";
245 case FLASH_SECTOR_ERASE: return "SECTOR_ERASE";
246 case FLASH_SECTOR_ERASE_TIMEOUT: return "SECTOR_ERASE_TIMEOUT";
247 case FLASH_SECTOR_ERASE_SUSPEND: return "SECTOR_ERASE_SUSPEND";
248 }
249 return "???";
250 }
251};
252
253//
254// Structures
255//
256
257typedef struct
258{
259 CartridgeType type;
260 const char *title;
261
262 isize memory;
263 bool battery;
264
265 isize buttons;
266 const char *button1;
267 const char *button2;
268
269 isize switches;
270 const char *switchLeft;
271 const char *switchNeutral;
272 const char *switchRight;
273
274 isize leds;
275}
276CartridgeTraits;
277
278typedef struct
279{
280 CartridgeType type; // DEPRECATED
281 bool supported;
282 bool gameLineInCrtFile;
283 bool exromLineInCrtFile;
284 isize numPackets;
285 isize switchPos;
286 bool led;
287}
288CartridgeInfo;
289
290typedef struct
291{
292 u16 size;
293 u16 loadAddress;
294}
295CartridgeRomInfo;
296
297}
VirtualC64 project namespace.
Definition CmdQueue.cpp:16