1 // FinalBurn Neo - Emulator for MC68000/Z80 based arcade games
2 // Refer to the "license.txt" file for more info
3
4 // Burner emulation library
5 #ifndef _BURNH_H
6 #define _BURNH_H
7
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11
12 #if !defined (_WIN32)
13 #define __cdecl
14 #endif
15
16 #if !defined (_MSC_VER) && defined(FASTCALL)
17 #undef __fastcall
18 #define __fastcall __attribute__((fastcall))
19 #endif
20
21 #ifndef MAX_PATH
22 #define MAX_PATH 260
23 #endif
24
25 #include <time.h>
26
27 extern TCHAR szAppHiscorePath[MAX_PATH];
28 extern TCHAR szAppSamplesPath[MAX_PATH];
29 extern TCHAR szAppHDDPath[MAX_PATH];
30 extern TCHAR szAppBlendPath[MAX_PATH];
31 extern TCHAR szAppEEPROMPath[MAX_PATH];
32
33 // Macro to determine the size of a struct up to and including "member"
34 #define STRUCT_SIZE_HELPER(type, member) offsetof(type, member) + sizeof(((type*)0)->member)
35
36 // Enable the MAME logerror() function in debug builds
37 // #define MAME_USE_LOGERROR
38
39 // Give access to the CPUID function for various compilers
40 #if defined (__GNUC__)
41 #define CPUID(f,ra,rb,rc,rd) __asm__ __volatile__ ("cpuid" \
42 : "=a" (ra), "=b" (rb), "=c" (rc), "=d" (rd) \
43 : "a" (f) \
44 );
45 #elif defined (_MSC_VER)
46 #define CPUID(f,ra,rb,rc,rd) __asm { __asm mov eax, f \
47 __asm cpuid \
48 __asm mov ra, eax \
49 __asm mov rb, ebx \
50 __asm mov rc, ecx \
51 __asm mov rd, edx }
52 #else
53 #define CPUID(f,ra,rb,rc,rd)
54 #endif
55
56 #ifndef BUILD_X86_ASM
57 #undef CPUID
58 #define CPUID(f,ra,rb,rc,rd)
59 #endif
60
61 #ifdef _UNICODE
62 #define SEPERATOR_1 " \u2022 "
63 #define SEPERATOR_2 " \u25E6 "
64 #else
65 #define SEPERATOR_1 " ~ "
66 #define SEPERATOR_2 " ~ "
67 #endif
68
69 #ifdef _UNICODE
70 #define WRITE_UNICODE_BOM(file) { UINT16 BOM[] = { 0xFEFF }; fwrite(BOM, 2, 1, file); }
71 #else
72 #define WRITE_UNICODE_BOM(file)
73 #endif
74
75 typedef unsigned char UINT8;
76 typedef signed char INT8;
77 typedef unsigned short UINT16;
78 typedef signed short INT16;
79 typedef unsigned int UINT32;
80 typedef signed int INT32;
81 #ifdef _MSC_VER
82 typedef signed __int64 INT64;
83 typedef unsigned __int64 UINT64;
84 #else
85 __extension__ typedef unsigned long long UINT64;
86 __extension__ typedef long long INT64;
87 #endif
88
89 #include "state.h"
90 #include "cheat.h"
91 #include "hiscore.h"
92
93 extern INT32 nBurnVer; // Version number of the library
94
95 enum BurnCartrigeCommand { CART_INIT_START, CART_INIT_END, CART_EXIT };
96
97 // ---------------------------------------------------------------------------
98 // Callbacks
99
100 // Application-defined rom loading function
101 extern INT32 (__cdecl *BurnExtLoadRom)(UINT8* Dest, INT32* pnWrote, INT32 i);
102
103 // Application-defined progress indicator functions
104 extern INT32 (__cdecl *BurnExtProgressRangeCallback)(double dProgressRange);
105 extern INT32 (__cdecl *BurnExtProgressUpdateCallback)(double dProgress, const TCHAR* pszText, bool bAbs);
106
107 // Application-defined catridge initialisation function
108 extern INT32 (__cdecl *BurnExtCartridgeSetupCallback)(BurnCartrigeCommand nCommand);
109
110 // Application-defined colour conversion function
111 extern UINT32 (__cdecl *BurnHighCol) (INT32 r, INT32 g, INT32 b, INT32 i);
112
113 // ---------------------------------------------------------------------------
114
115 extern UINT32 nCurrentFrame;
116
GetCurrentFrame()117 inline static INT32 GetCurrentFrame() {
118 return nCurrentFrame;
119 }
120
SetCurrentFrame(const UINT32 n)121 inline static void SetCurrentFrame(const UINT32 n) {
122 nCurrentFrame = n;
123 }
124
125 // ---------------------------------------------------------------------------
126 // Driver info structures
127
128 // ROMs
129
130 #define BRF_PRG (1 << 20)
131 #define BRF_GRA (1 << 21)
132 #define BRF_SND (1 << 22)
133
134 #define BRF_ESS (1 << 24)
135 #define BRF_BIOS (1 << 25)
136 #define BRF_SELECT (1 << 26)
137 #define BRF_OPT (1 << 27)
138 #define BRF_NODUMP (1 << 28)
139
140 struct BurnRomInfo {
141 char szName[100];
142 UINT32 nLen;
143 UINT32 nCrc;
144 UINT32 nType;
145 };
146
147 struct BurnSampleInfo {
148 char szName[100];
149 UINT32 nFlags;
150 };
151
152 struct BurnHDDInfo {
153 char szName[100];
154 UINT32 nLen;
155 UINT32 nCrc;
156 };
157
158 // Inputs
159
160 #define BIT_DIGITAL (1)
161
162 #define BIT_GROUP_ANALOG (4)
163 #define BIT_ANALOG_REL (4)
164 #define BIT_ANALOG_ABS (5)
165
166 #define BIT_GROUP_CONSTANT (8)
167 #define BIT_CONSTANT (8)
168 #define BIT_DIPSWITCH (9)
169
170 struct BurnInputInfo {
171 char* szName;
172 UINT8 nType;
173 union {
174 UINT8* pVal; // Most inputs use a char*
175 UINT16* pShortVal; // All analog inputs use a short*
176 };
177 char* szInfo;
178 };
179
180 // DIPs
181
182 struct BurnDIPInfo {
183 INT32 nInput;
184 UINT8 nFlags;
185 UINT8 nMask;
186 UINT8 nSetting;
187 char* szText;
188 };
189
190 #define DIP_OFFSET(x) {x, 0xf0, 0xff, 0xff, NULL},
191
192 // ---------------------------------------------------------------------------
193 // Common CPU definitions
194
195 // sync to nCyclesDone[]
196 #define CPU_RUN(num,proc) do { nCyclesDone[num] += proc ## Run(((i + 1) * nCyclesTotal[num] / nInterleave) - nCyclesDone[num]); } while (0)
197 #define CPU_IDLE(num,proc) do { nCyclesDone[num] += proc ## Idle(((i + 1) * nCyclesTotal[num] / nInterleave) - nCyclesDone[num]); } while (0)
198 #define CPU_IDLE_NULL(num) do { nCyclesDone[num] += ((i + 1) * nCyclesTotal[num] / nInterleave) - nCyclesDone[num]; } while (0)
199 // sync to cpuTotalCycles()
200 #define CPU_RUN_SYNCINT(num,proc) do { nCyclesDone[num] += proc ## Run(((i + 1) * nCyclesTotal[num] / nInterleave) - proc ## TotalCycles()); } while (0)
201 #define CPU_IDLE_SYNCINT(num,proc) do { nCyclesDone[num] += proc ## Idle(((i + 1) * nCyclesTotal[num] / nInterleave) - proc ## TotalCycles()); } while (0)
202 // sync to timer
203 #define CPU_RUN_TIMER(num) do { BurnTimerUpdate((i + 1) * nCyclesTotal[num] / nInterleave); if (i == nInterleave - 1) BurnTimerEndFrame(nCyclesTotal[num]); } while (0)
204 #define CPU_RUN_TIMER_YM3812(num) do { BurnTimerUpdateYM3812((i + 1) * nCyclesTotal[num] / nInterleave); if (i == nInterleave - 1) BurnTimerEndFrameYM3812(nCyclesTotal[num]); } while (0)
205 #define CPU_RUN_TIMER_YM3526(num) do { BurnTimerUpdateYM3526((i + 1) * nCyclesTotal[num] / nInterleave); if (i == nInterleave - 1) BurnTimerEndFrameYM3526(nCyclesTotal[num]); } while (0)
206
207 #define CPU_IRQSTATUS_NONE 0
208 #define CPU_IRQSTATUS_ACK 1
209 #define CPU_IRQSTATUS_AUTO 2
210 #define CPU_IRQSTATUS_HOLD 4
211
212 #define CPU_IRQLINE0 0
213 #define CPU_IRQLINE1 1
214 #define CPU_IRQLINE2 2
215 #define CPU_IRQLINE3 3
216 #define CPU_IRQLINE4 4
217 #define CPU_IRQLINE5 5
218 #define CPU_IRQLINE6 6
219 #define CPU_IRQLINE7 7
220
221 #define CPU_IRQLINE_IRQ CPU_IRQLINE0
222 #define CPU_IRQLINE_FIRQ CPU_IRQLINE1
223 #define CPU_IRQLINE_NMI 0x20
224
225 #define MAP_READ 1
226 #define MAP_WRITE 2
227 #define MAP_FETCHOP 4
228 #define MAP_FETCHARG 8
229 #define MAP_FETCH (MAP_FETCHOP|MAP_FETCHARG)
230 #define MAP_ROM (MAP_READ|MAP_FETCH)
231 #define MAP_RAM (MAP_ROM|MAP_WRITE)
232
233 // Macros to Allocate and Free MemIndex
234 #define BurnAllocMemIndex() do { \
235 AllMem = NULL; \
236 MemIndex(); \
237 INT32 nLen = MemEnd - (UINT8 *)0; \
238 if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1; \
239 memset(AllMem, 0, nLen); \
240 MemIndex(); \
241 } while (0)
242
243 #define BurnFreeMemIndex() do { BurnFree(AllMem); } while (0)
244
245 // ---------------------------------------------------------------------------
246
247 extern bool bBurnUseMMX;
248 #ifdef BUILD_A68K
249 extern bool bBurnUseASMCPUEmulation;
250 #endif
251
252 extern UINT32 nFramesEmulated;
253 extern UINT32 nFramesRendered;
254 extern clock_t starttime; // system time when emulation started and after roms loaded
255
256 extern bool bForce60Hz;
257 extern bool bBurnUseBlend;
258
259 extern INT32 nBurnFPS;
260 extern INT32 nBurnCPUSpeedAdjust;
261
262 extern UINT32 nBurnDrvCount; // Count of game drivers
263 extern UINT32 nBurnDrvActive; // Which game driver is selected
264 extern UINT32 nBurnDrvSelect[8]; // Which games are selected (i.e. loaded but not necessarily active)
265
266 extern INT32 nMaxPlayers;
267
268 extern UINT8 *pBurnDraw; // Pointer to correctly sized bitmap
269 extern INT32 nBurnPitch; // Pitch between each line
270 extern INT32 nBurnBpp; // Bytes per pixel (2, 3, or 4)
271
272 extern UINT8 nBurnLayer; // Can be used externally to select which layers to show
273 extern UINT8 nSpriteEnable; // Can be used externally to select which Sprites to show
274
275 extern INT32 bRunAhead; // "Run Ahead" lag-reduction technique UI option (on/off)
276
277 extern INT32 bBurnRunAheadFrame; // for drivers, hiscore, etc, to recognize that this is the "runahead frame"
278 // for instance, you wouldn't want to apply hi-score data on a "runahead frame"
279
280 extern INT32 nBurnSoundRate; // Samplerate of sound
281 extern INT32 nBurnSoundLen; // Length in samples per frame
282 extern INT16* pBurnSoundOut; // Pointer to output buffer
283
284 extern INT32 nInterpolation; // Desired interpolation level for ADPCM/PCM sound
285 extern INT32 nFMInterpolation; // Desired interpolation level for FM sound
286
287 extern UINT32 *pBurnDrvPalette;
288
289 #define PRINT_NORMAL (0)
290 #define PRINT_UI (1)
291 #define PRINT_IMPORTANT (2)
292 #define PRINT_ERROR (3)
293 #define PRINT_LEVEL1 (4)
294 #define PRINT_LEVEL2 (5)
295 #define PRINT_LEVEL3 (6)
296 #define PRINT_LEVEL4 (7)
297 #define PRINT_LEVEL5 (8)
298 #define PRINT_LEVEL6 (9)
299 #define PRINT_LEVEL7 (10)
300 #define PRINT_LEVEL8 (11)
301 #define PRINT_LEVEL9 (12)
302 #define PRINT_LEVEL10 (13)
303
304 #ifndef bprintf
305 extern INT32 (__cdecl *bprintf) (INT32 nStatus, TCHAR* szFormat, ...);
306 #endif
307
308 INT32 BurnLibInit();
309 INT32 BurnLibExit();
310
311 INT32 BurnDrvInit();
312 INT32 BurnDrvExit();
313
314 INT32 BurnDrvCartridgeSetup(BurnCartrigeCommand nCommand);
315
316 INT32 BurnDrvFrame();
317 INT32 BurnDrvRedraw();
318 INT32 BurnRecalcPal();
319 INT32 BurnDrvGetPaletteEntries();
320
321 INT32 BurnSetProgressRange(double dProgressRange);
322 INT32 BurnUpdateProgress(double dProgressStep, const TCHAR* pszText, bool bAbs);
323
324 void BurnLocalisationSetName(char *szName, TCHAR *szLongName);
325
326 void BurnGetLocalTime(tm *nTime); // Retrieve local-time of machine w/tweaks for netgame and input recordings
327 UINT16 BurnRandom(); // State-able Random Number Generator (0-32767)
328 void BurnRandomScan(INT32 nAction); // Must be called in driver's DrvScan() if BurnRandom() is used
329 void BurnRandomInit(); // Called automatically in BurnDrvInit() / Internal use only
330 void BurnRandomSetSeed(UINT64 nSeed); // Set the seed - useful for netgames / input recordings
331
332 // Handy FM default callbacks
333 INT32 BurnSynchroniseStream(INT32 nSoundRate);
334 double BurnGetTime();
335
336 // Handy debug binary-file dumper
337 #if defined (FBNEO_DEBUG)
338 void BurnDump_(char *filename, UINT8 *buffer, INT32 bufsize, INT32 append);
339 #define BurnDump(fn, b, bs) do { \
340 bprintf(0, _T("Dumping %S (0x%x bytes) to %S\n"), #b, bs, #fn); \
341 BurnDump_(fn, b, bs, 0); } while (0)
342
343 #define BurnDumpAppend(fn, b, bs) do { \
344 bprintf(0, _T("Dumping %S (0x%x bytes) to %S (append)\n"), #b, bs, #fn); \
345 BurnDump_(fn, b, bs, 1); } while (0)
346
347 void BurnDumpLoad_(char *filename, UINT8 *buffer, INT32 bufsize);
348 #define BurnDumpLoad(fn, b, bs) do { \
349 bprintf(0, _T("Loading Dump %S (0x%x bytes) to %S\n"), #fn, bs, #b); \
350 BurnDumpLoad_(fn, b, bs); } while (0)
351
352 #endif
353
354 // ---------------------------------------------------------------------------
355 // Retrieve driver information
356
357 #define DRV_NAME (0)
358 #define DRV_DATE (1)
359 #define DRV_FULLNAME (2)
360 //#define DRV_MEDIUMNAME (3)
361 #define DRV_COMMENT (4)
362 #define DRV_MANUFACTURER (5)
363 #define DRV_SYSTEM (6)
364 #define DRV_PARENT (7)
365 #define DRV_BOARDROM (8)
366 #define DRV_SAMPLENAME (9)
367
368 #define DRV_NEXTNAME (1 << 8)
369 #define DRV_ASCIIONLY (1 << 12)
370 #define DRV_UNICODEONLY (1 << 13)
371
372 TCHAR* BurnDrvGetText(UINT32 i);
373 char* BurnDrvGetTextA(UINT32 i);
374
375 INT32 BurnDrvGetZipName(char** pszName, UINT32 i);
376 INT32 BurnDrvGetRomInfo(struct BurnRomInfo *pri, UINT32 i);
377 INT32 BurnDrvGetRomName(char** pszName, UINT32 i, INT32 nAka);
378 INT32 BurnDrvGetInputInfo(struct BurnInputInfo* pii, UINT32 i);
379 INT32 BurnDrvGetDIPInfo(struct BurnDIPInfo* pdi, UINT32 i);
380 INT32 BurnDrvGetVisibleSize(INT32* pnWidth, INT32* pnHeight);
381 INT32 BurnDrvGetVisibleOffs(INT32* pnLeft, INT32* pnTop);
382 INT32 BurnDrvGetFullSize(INT32* pnWidth, INT32* pnHeight);
383 INT32 BurnDrvGetAspect(INT32* pnXAspect, INT32* pnYAspect);
384 INT32 BurnDrvGetHardwareCode();
385 INT32 BurnDrvGetFlags();
386 bool BurnDrvIsWorking();
387 INT32 BurnDrvGetMaxPlayers();
388 INT32 BurnDrvSetVisibleSize(INT32 pnWidth, INT32 pnHeight);
389 INT32 BurnDrvSetAspect(INT32 pnXAspect, INT32 pnYAspect);
390 INT32 BurnDrvGetGenreFlags();
391 INT32 BurnDrvGetFamilyFlags();
392 INT32 BurnDrvGetSampleInfo(struct BurnSampleInfo *pri, UINT32 i);
393 INT32 BurnDrvGetSampleName(char** pszName, UINT32 i, INT32 nAka);
394 INT32 BurnDrvGetHDDInfo(struct BurnHDDInfo *pri, UINT32 i);
395 INT32 BurnDrvGetHDDName(char** pszName, UINT32 i, INT32 nAka);
396
397 void Reinitialise();
398
399 extern bool bDoIpsPatch;
400 extern INT32 nIpsMaxFileLen;
401 void IpsApplyPatches(UINT8* base, char* rom_name);
402
403 // ---------------------------------------------------------------------------
404 // Flags used with the Burndriver structure
405
406 // Flags for the flags member
407 #define BDF_GAME_NOT_WORKING (0)
408 #define BDF_GAME_WORKING (1 << 0)
409 #define BDF_ORIENTATION_FLIPPED (1 << 1)
410 #define BDF_ORIENTATION_VERTICAL (1 << 2)
411 #define BDF_BOARDROM (1 << 3)
412 #define BDF_CLONE (1 << 4)
413 #define BDF_BOOTLEG (1 << 5)
414 #define BDF_PROTOTYPE (1 << 6)
415 #define BDF_16BIT_ONLY (1 << 7)
416 #define BDF_HACK (1 << 8)
417 #define BDF_HOMEBREW (1 << 9)
418 #define BDF_DEMO (1 << 10)
419 #define BDF_HISCORE_SUPPORTED (1 << 11)
420 #define BDF_RUNAHEAD_DRAWSYNC (1 << 12)
421 #define BDF_RUNAHEAD_DISABLED (1 << 13)
422
423 // Flags for the hardware member
424 // Format: 0xDDEEFFFF, where DD: Manufacturer, EE: Hardware platform, FFFF: Flags (used by driver)
425
426 #define HARDWARE_PUBLIC_MASK (0x7FFF0000)
427
428 #define HARDWARE_PREFIX_CARTRIDGE ((INT32)0x80000000)
429
430 #define HARDWARE_PREFIX_MISC_PRE90S (0x00000000)
431 #define HARDWARE_PREFIX_CAPCOM (0x01000000)
432 #define HARDWARE_PREFIX_SEGA (0x02000000)
433 #define HARDWARE_PREFIX_KONAMI (0x03000000)
434 #define HARDWARE_PREFIX_TOAPLAN (0x04000000)
435 #define HARDWARE_PREFIX_SNK (0x05000000)
436 #define HARDWARE_PREFIX_CAVE (0x06000000)
437 #define HARDWARE_PREFIX_CPS2 (0x07000000)
438 #define HARDWARE_PREFIX_IGS_PGM (0x08000000)
439 #define HARDWARE_PREFIX_CPS3 (0x09000000)
440 #define HARDWARE_PREFIX_MISC_POST90S (0x0a000000)
441 #define HARDWARE_PREFIX_TAITO (0x0b000000)
442 #define HARDWARE_PREFIX_SEGA_MEGADRIVE (0x0c000000)
443 #define HARDWARE_PREFIX_PSIKYO (0x0d000000)
444 #define HARDWARE_PREFIX_KANEKO (0x0e000000)
445 #define HARDWARE_PREFIX_PACMAN (0x0f000000)
446 #define HARDWARE_PREFIX_GALAXIAN (0x10000000)
447 #define HARDWARE_PREFIX_IREM (0x11000000)
448 #define HARDWARE_PREFIX_DATAEAST (0x13000000)
449 #define HARDWARE_PREFIX_CAPCOM_MISC (0x14000000)
450 #define HARDWARE_PREFIX_SETA (0x15000000)
451 #define HARDWARE_PREFIX_TECHNOS (0x16000000)
452 #define HARDWARE_PREFIX_PCENGINE (0x17000000)
453 #define HARDWARE_PREFIX_SEGA_MASTER_SYSTEM (0x18000000)
454 #define HARDWARE_PREFIX_SEGA_SG1000 (0x19000000)
455 #define HARDWARE_PREFIX_COLECO (0x1A000000)
456 #define HARDWARE_PREFIX_MIDWAY (0x1B000000)
457 #define HARDWARE_PREFIX_SEGA_GAME_GEAR (0x12000000)
458 #define HARDWARE_PREFIX_MSX (0x1C000000)
459 #define HARDWARE_PREFIX_SPECTRUM (0x1D000000)
460 #define HARDWARE_PREFIX_NES (0x1E000000)
461 #define HARDWARE_PREFIX_FDS (0x1F000000)
462 #define HARDWARE_PREFIX_NGP (0x20000000)
463 #define HARDWARE_PREFIX_CHANNELF (0x21000000)
464
465 #define HARDWARE_SNK_NGP (HARDWARE_PREFIX_NGP | 0x00000000)
466 #define HARDWARE_SNK_NGPC (HARDWARE_PREFIX_NGP | 0x00000001)
467
468 #define HARDWARE_MISC_PRE90S (HARDWARE_PREFIX_MISC_PRE90S)
469 #define HARDWARE_MISC_POST90S (HARDWARE_PREFIX_MISC_POST90S)
470
471 #define HARDWARE_CAPCOM_CPS1 (HARDWARE_PREFIX_CAPCOM | 0x00010000)
472 #define HARDWARE_CAPCOM_CPS1_QSOUND (HARDWARE_PREFIX_CAPCOM | 0x00020000)
473 #define HARDWARE_CAPCOM_CPS1_GENERIC (HARDWARE_PREFIX_CAPCOM | 0x00030000)
474 #define HARDWARE_CAPCOM_CPSCHANGER (HARDWARE_PREFIX_CAPCOM | 0x00040000)
475 #define HARDWARE_CAPCOM_CPS2 (HARDWARE_PREFIX_CPS2 | 0x00010000)
476 #define HARDWARE_CAPCOM_CPS2_SIMM (0x0002)
477
478 #define HARDWARE_SEGA_SYSTEMX (HARDWARE_PREFIX_SEGA | 0x00010000)
479 #define HARDWARE_SEGA_SYSTEMY (HARDWARE_PREFIX_SEGA | 0x00020000)
480 #define HARDWARE_SEGA_SYSTEM16A (HARDWARE_PREFIX_SEGA | 0x00030000)
481 #define HARDWARE_SEGA_SYSTEM16B (HARDWARE_PREFIX_SEGA | 0x00040000)
482 #define HARDWARE_SEGA_SYSTEM16M (HARDWARE_PREFIX_SEGA | 0x00050000)
483 #define HARDWARE_SEGA_SYSTEM18 (HARDWARE_PREFIX_SEGA | 0x00060000)
484 #define HARDWARE_SEGA_HANGON (HARDWARE_PREFIX_SEGA | 0x00070000)
485 #define HARDWARE_SEGA_OUTRUN (HARDWARE_PREFIX_SEGA | 0x00080000)
486 #define HARDWARE_SEGA_SYSTEM1 (HARDWARE_PREFIX_SEGA | 0x00090000)
487 #define HARDWARE_SEGA_MISC (HARDWARE_PREFIX_SEGA | 0x000a0000)
488 #define HARDWARE_SEGA_SYSTEM24 (HARDWARE_PREFIX_SEGA | 0x000b0000)
489
490 #define HARDWARE_SEGA_PCB_MASK (0x0f)
491 #define HARDWARE_SEGA_5358 (0x01)
492 #define HARDWARE_SEGA_5358_SMALL (0x02)
493 #define HARDWARE_SEGA_5704 (0x03)
494 #define HARDWARE_SEGA_5521 (0x04)
495 #define HARDWARE_SEGA_5797 (0x05)
496 #define HARDWARE_SEGA_5704_PS2 (0x06)
497 #define HARDWARE_SEGA_171_SHADOW (0x07)
498 #define HARDWARE_SEGA_171_5874 (0x08)
499 #define HARDWARE_SEGA_171_5987 (0x09)
500 #define HARDWARE_SEGA_837_7525 (0x0a)
501
502 #define HARDWARE_SEGA_FD1089A_ENC (0x0010)
503 #define HARDWARE_SEGA_FD1089B_ENC (0x0020)
504 #define HARDWARE_SEGA_MC8123_ENC (0x0040)
505 #define HARDWARE_SEGA_FD1094_ENC (0x0080)
506 #define HARDWARE_SEGA_SPRITE_LOAD32 (0x0100)
507 #define HARDWARE_SEGA_YM2203 (0x0200)
508 #define HARDWARE_SEGA_INVERT_TILES (0x0400)
509 #define HARDWARE_SEGA_YM2413 (0x0800)
510 #define HARDWARE_SEGA_FD1094_ENC_CPU2 (0x1000)
511 #define HARDWARE_SEGA_ISGSM (0x2000)
512
513 #define HARDWARE_KONAMI_68K_Z80 (HARDWARE_PREFIX_KONAMI | 0x00010000)
514 #define HARDWARE_KONAMI_68K_ONLY (HARDWARE_PREFIX_KONAMI | 0x00020000)
515
516 #define HARDWARE_TOAPLAN_RAIZING (HARDWARE_PREFIX_TOAPLAN | 0x00010000)
517 #define HARDWARE_TOAPLAN_68K_Zx80 (HARDWARE_PREFIX_TOAPLAN | 0x00020000)
518 #define HARDWARE_TOAPLAN_68K_ONLY (HARDWARE_PREFIX_TOAPLAN | 0x00030000)
519 #define HARDWARE_TOAPLAN_MISC (HARDWARE_PREFIX_TOAPLAN | 0x00040000)
520
521 #define HARDWARE_SNK_NEOGEO (HARDWARE_PREFIX_SNK | 0x00010000)
522 #define HARDWARE_SNK_SWAPP (0x0001) // Swap code roms
523 #define HARDWARE_SNK_SWAPV (0x0002) // Swap sound roms
524 #define HARDWARE_SNK_SWAPC (0x0004) // Swap sprite roms
525 #define HARDWARE_SNK_CMC42 (0x0008) // CMC42 encryption chip
526 #define HARDWARE_SNK_CMC50 (0x0010) // CMC50 encryption chip
527 #define HARDWARE_SNK_ALTERNATE_TEXT (0x0020) // KOF2000 text layer banks
528 #define HARDWARE_SNK_SMA_PROTECTION (0x0040) // SMA protection
529 #define HARDWARE_SNK_KOF2K3 (0x0080) // KOF2K3 hardware
530 #define HARDWARE_SNK_ENCRYPTED_M1 (0x0100) // M1 encryption
531 #define HARDWARE_SNK_P32 (0x0200) // SWAP32 P ROMs
532 #define HARDWARE_SNK_SPRITE32 (0x0400)
533
534 #define HARDWARE_SNK_CONTROLMASK (0xF000)
535 #define HARDWARE_SNK_JOYSTICK (0x0000) // Uses joysticks
536 #define HARDWARE_SNK_PADDLE (0x1000) // Uses joysticks or paddles
537 #define HARDWARE_SNK_TRACKBALL (0x2000) // Uses a trackball
538 #define HARDWARE_SNK_4_JOYSTICKS (0x3000) // Uses 4 joysticks
539 #define HARDWARE_SNK_MAHJONG (0x4000) // Uses a special mahjong controller
540 #define HARDWARE_SNK_GAMBLING (0x5000) // Uses gambling controls
541
542 #define HARDWARE_SNK_MVS (HARDWARE_PREFIX_SNK | 0x00020000)
543 #define HARDWARE_SNK_NEOCD (HARDWARE_PREFIX_SNK | 0x00030000)
544 #define HARDWARE_SNK_DEDICATED_PCB (HARDWARE_PREFIX_SNK | 0x00040000)
545
546 #define HARDWARE_CAVE_68K_ONLY (HARDWARE_PREFIX_CAVE)
547 #define HARDWARE_CAVE_68K_Z80 (HARDWARE_PREFIX_CAVE | 0x0001)
548 #define HARDWARE_CAVE_M6295 (0x0002)
549 #define HARDWARE_CAVE_YM2151 (0x0004)
550
551 #define HARDWARE_IGS_PGM (HARDWARE_PREFIX_IGS_PGM)
552 #define HARDWARE_IGS_USE_ARM_CPU (0x0001)
553
554 #define HARDWARE_CAPCOM_CPS3 (HARDWARE_PREFIX_CPS3)
555 #define HARDWARE_CAPCOM_CPS3_NO_CD (0x0001)
556
557 #define HARDWARE_TAITO_TAITOZ (HARDWARE_PREFIX_TAITO | 0x00010000)
558 #define HARDWARE_TAITO_TAITOF2 (HARDWARE_PREFIX_TAITO | 0x00020000)
559 #define HARDWARE_TAITO_MISC (HARDWARE_PREFIX_TAITO | 0x00030000)
560 #define HARDWARE_TAITO_TAITOX (HARDWARE_PREFIX_TAITO | 0x00040000)
561 #define HARDWARE_TAITO_TAITOB (HARDWARE_PREFIX_TAITO | 0x00050000)
562
563 #define HARDWARE_IREM_M62 (HARDWARE_PREFIX_IREM | 0x00010000)
564 #define HARDWARE_IREM_M63 (HARDWARE_PREFIX_IREM | 0x00020000)
565 #define HARDWARE_IREM_M72 (HARDWARE_PREFIX_IREM | 0x00030000)
566 #define HARDWARE_IREM_M90 (HARDWARE_PREFIX_IREM | 0x00040000)
567 #define HARDWARE_IREM_M92 (HARDWARE_PREFIX_IREM | 0x00050000)
568 #define HARDWARE_IREM_MISC (HARDWARE_PREFIX_IREM | 0x00060000)
569
570 #define HARDWARE_SEGA_MASTER_SYSTEM (HARDWARE_PREFIX_SEGA_MASTER_SYSTEM)
571
572 #define HARDWARE_SMS_MAPPER_CODIES (0x01)
573 #define HARDWARE_SMS_MAPPER_MSX (0x02)
574 #define HARDWARE_SMS_MAPPER_MSX_NEMESIS (0x03)
575 #define HARDWARE_SMS_MAPPER_KOREA (0x04)
576 #define HARDWARE_SMS_MAPPER_KOREA8K (0x05)
577 #define HARDWARE_SMS_MAPPER_KOREA16K (0x06)
578 #define HARDWARE_SMS_MAPPER_4PAK (0x07)
579 #define HARDWARE_SMS_MAPPER_XIN1 (0x08)
580 #define HARDWARE_SMS_MAPPER_NONE (0x0F)
581
582 #define HARDWARE_SMS_NO_CART_HEADER (0x1000)
583 #define HARDWARE_SMS_GG_SMS_MODE (0x2000)
584 #define HARDWARE_SMS_DISPLAY_PAL (0x4000)
585 #define HARDWARE_SMS_JAPANESE (0x8000)
586
587 #define HARDWARE_SEGA_GAME_GEAR (HARDWARE_PREFIX_SEGA_GAME_GEAR)
588
589 #define HARDWARE_SEGA_MEGADRIVE (HARDWARE_PREFIX_SEGA_MEGADRIVE)
590
591 #define HARDWARE_SEGA_SG1000 (HARDWARE_PREFIX_SEGA_SG1000)
592 #define HARDWARE_SEGA_SG1000_RAMEXP_A (0x1000)
593 #define HARDWARE_SEGA_SG1000_RAMEXP_B (0x2000)
594 #define HARDWARE_SEGA_SG1000_RAMEXP_2K (0x4000)
595 #define HARDWARE_SEGA_SG1000_RAMEXP_8K (0x8000)
596 #define HARDWARE_COLECO (HARDWARE_PREFIX_COLECO)
597
598 #define HARDWARE_MSX (HARDWARE_PREFIX_MSX)
599 #define HARDWARE_MSX_MAPPER_ASCII8 (0x01)
600 #define HARDWARE_MSX_MAPPER_ASCII8_SRAM (0x01)
601 #define HARDWARE_MSX_MAPPER_ASCII16 (0x02)
602 #define HARDWARE_MSX_MAPPER_ASCII16_SRAM (0x02)
603 #define HARDWARE_MSX_MAPPER_KONAMI (0x03)
604 #define HARDWARE_MSX_MAPPER_KONAMI_SCC (0x04)
605 #define HARDWARE_MSX_MAPPER_BASIC (0x05)
606 #define HARDWARE_MSX_MAPPER_DOOLY (0x06)
607 #define HARDWARE_MSX_MAPPER_RTYPE (0x07)
608 #define HARDWARE_MSX_MAPPER_CROSS_BLAIM (0x08)
609 #define HARDWARE_MSX_MAPPER_48K (0x09)
610
611 #define HARDWARE_SEGA_MEGADRIVE_PCB_SEGA_EEPROM (1)
612 #define HARDWARE_SEGA_MEGADRIVE_PCB_SEGA_SRAM (2)
613 #define HARDWARE_SEGA_MEGADRIVE_PCB_SEGA_FRAM (3)
614 #define HARDWARE_SEGA_MEGADRIVE_PCB_CM_JCART (4)
615 #define HARDWARE_SEGA_MEGADRIVE_PCB_CM_JCART_SEPROM (5)
616 #define HARDWARE_SEGA_MEGADRIVE_PCB_CODE_MASTERS (6)
617 #define HARDWARE_SEGA_MEGADRIVE_PCB_SSF2 (7)
618 #define HARDWARE_SEGA_MEGADRIVE_PCB_GAME_KANDUME (8)
619 #define HARDWARE_SEGA_MEGADRIVE_PCB_BEGGAR (9)
620 #define HARDWARE_SEGA_MEGADRIVE_PCB_NBA_JAM (10)
621 #define HARDWARE_SEGA_MEGADRIVE_PCB_NBA_JAM_TE (11)
622 #define HARDWARE_SEGA_MEGADRIVE_PCB_NFL_QB_96 (12)
623 #define HARDWARE_SEGA_MEGADRIVE_PCB_C_SLAM (13)
624 #define HARDWARE_SEGA_MEGADRIVE_PCB_EA_NHLPA (14)
625 #define HARDWARE_SEGA_MEGADRIVE_PCB_LIONK3 (15)
626 #define HARDWARE_SEGA_MEGADRIVE_PCB_SDK99 (16)
627 #define HARDWARE_SEGA_MEGADRIVE_PCB_SKINGKONG (17)
628 #define HARDWARE_SEGA_MEGADRIVE_PCB_REDCL_EN (18)
629 #define HARDWARE_SEGA_MEGADRIVE_PCB_RADICA (19)
630 #define HARDWARE_SEGA_MEGADRIVE_PCB_KOF98 (20)
631 #define HARDWARE_SEGA_MEGADRIVE_PCB_KOF99 (21)
632 #define HARDWARE_SEGA_MEGADRIVE_PCB_SOULBLAD (22)
633 #define HARDWARE_SEGA_MEGADRIVE_PCB_MJLOVER (23)
634 #define HARDWARE_SEGA_MEGADRIVE_PCB_SQUIRRELK (24)
635 #define HARDWARE_SEGA_MEGADRIVE_PCB_SMOUSE (25)
636 #define HARDWARE_SEGA_MEGADRIVE_PCB_SMB (26)
637 #define HARDWARE_SEGA_MEGADRIVE_PCB_SMB2 (27)
638 #define HARDWARE_SEGA_MEGADRIVE_PCB_KAIJU (28)
639 #define HARDWARE_SEGA_MEGADRIVE_PCB_CHINFIGHT3 (29)
640 #define HARDWARE_SEGA_MEGADRIVE_PCB_LIONK2 (30)
641 #define HARDWARE_SEGA_MEGADRIVE_PCB_BUGSLIFE (31)
642 #define HARDWARE_SEGA_MEGADRIVE_PCB_ELFWOR (32)
643 #define HARDWARE_SEGA_MEGADRIVE_PCB_ROCKMANX3 (33)
644 #define HARDWARE_SEGA_MEGADRIVE_PCB_SBUBBOB (34)
645 #define HARDWARE_SEGA_MEGADRIVE_PCB_REALTEC (35)
646 #define HARDWARE_SEGA_MEGADRIVE_PCB_MC_SUP19IN1 (36)
647 #define HARDWARE_SEGA_MEGADRIVE_PCB_MC_SUP15IN1 (37)
648 #define HARDWARE_SEGA_MEGADRIVE_PCB_MC_12IN1 (38)
649 #define HARDWARE_SEGA_MEGADRIVE_PCB_TOPFIGHTER (39)
650 #define HARDWARE_SEGA_MEGADRIVE_PCB_POKEMON (40)
651 #define HARDWARE_SEGA_MEGADRIVE_PCB_POKEMON2 (41)
652 #define HARDWARE_SEGA_MEGADRIVE_PCB_MULAN (42)
653 #define HARDWARE_SEGA_MEGADRIVE_PCB_16ZHANG (43)
654 #define HARDWARE_SEGA_MEGADRIVE_TEAMPLAYER (0x40)
655 #define HARDWARE_SEGA_MEGADRIVE_TEAMPLAYER_PORT2 (0x80)
656 #define HARDWARE_SEGA_MEGADRIVE_FOURWAYPLAY (0xc0)
657
658 #define HARDWARE_SEGA_MEGADRIVE_SRAM_00400 (0x0100)
659 #define HARDWARE_SEGA_MEGADRIVE_SRAM_00800 (0x0200)
660 #define HARDWARE_SEGA_MEGADRIVE_SRAM_01000 (0x0400)
661 #define HARDWARE_SEGA_MEGADRIVE_SRAM_04000 (0x0800)
662 #define HARDWARE_SEGA_MEGADRIVE_SRAM_10000 (0x1000)
663 #define HARDWARE_SEGA_MEGADRIVE_FRAM_00400 (0x2000)
664
665 #define HARDWARE_PSIKYO (HARDWARE_PREFIX_PSIKYO)
666
667 #define HARDWARE_KANEKO16 (HARDWARE_PREFIX_KANEKO | 0x10000)
668 #define HARDWARE_KANEKO_MISC (HARDWARE_PREFIX_KANEKO | 0x20000)
669 #define HARDWARE_KANEKO_SKNS (HARDWARE_PREFIX_KANEKO | 0x30000)
670
671 #define HARDWARE_PACMAN (HARDWARE_PREFIX_PACMAN)
672
673 #define HARDWARE_GALAXIAN (HARDWARE_PREFIX_GALAXIAN)
674
675 #define HARWARE_CAPCOM_MISC (HARDWARE_PREFIX_CAPCOM_MISC)
676
677 #define HARDWARE_SETA1 (HARDWARE_PREFIX_SETA | 0x10000)
678 #define HARDWARE_SETA2 (HARDWARE_PREFIX_SETA | 0x20000)
679 #define HARDWARE_SETA_SSV (HARDWARE_PREFIX_SETA | 0x30000)
680
681 #define HARDWARE_TECHNOS (HARDWARE_PREFIX_TECHNOS)
682
683 #define HARDWARE_PCENGINE_PCENGINE (HARDWARE_PREFIX_PCENGINE | 0x00010000)
684 #define HARDWARE_PCENGINE_TG16 (HARDWARE_PREFIX_PCENGINE | 0x00020000)
685 #define HARDWARE_PCENGINE_SGX (HARDWARE_PREFIX_PCENGINE | 0x00030000)
686
687 #define HARDWARE_SPECTRUM (HARDWARE_PREFIX_SPECTRUM)
688
689 #define HARDWARE_MIDWAY_KINST (HARDWARE_PREFIX_MIDWAY | 0x00010000)
690 #define HARDWARE_MIDWAY_TUNIT (HARDWARE_PREFIX_MIDWAY | 0x00020000)
691 #define HARDWARE_MIDWAY_WUNIT (HARDWARE_PREFIX_MIDWAY | 0x00030000)
692 #define HARDWARE_MIDWAY_YUNIT (HARDWARE_PREFIX_MIDWAY | 0x00040000)
693
694 #define HARDWARE_NES (HARDWARE_PREFIX_NES)
695 #define HARDWARE_FDS (HARDWARE_PREFIX_FDS)
696
697 #define HARDWARE_CHANNELF (HARDWARE_PREFIX_CHANNELF)
698
699 // flags for the genre member
700 #define GBF_HORSHOOT (1 << 0)
701 #define GBF_VERSHOOT (1 << 1)
702 #define GBF_SCRFIGHT (1 << 2)
703 #define GBF_VSFIGHT (1 << 3)
704 #define GBF_BIOS (1 << 4)
705 #define GBF_BREAKOUT (1 << 5)
706 #define GBF_CASINO (1 << 6)
707 #define GBF_BALLPADDLE (1 << 7)
708 #define GBF_MAZE (1 << 8)
709 #define GBF_MINIGAMES (1 << 9)
710 #define GBF_PINBALL (1 << 10)
711 #define GBF_PLATFORM (1 << 11)
712 #define GBF_PUZZLE (1 << 12)
713 #define GBF_QUIZ (1 << 13)
714 #define GBF_SPORTSMISC (1 << 14)
715 #define GBF_SPORTSFOOTBALL (1 << 15)
716 #define GBF_MISC (1 << 16)
717 #define GBF_MAHJONG (1 << 17)
718 #define GBF_RACING (1 << 18)
719 #define GBF_SHOOT (1 << 19)
720 #define GBF_ACTION (1 << 20)
721 #define GBF_RUNGUN (1 << 21)
722 #define GBF_STRATEGY (1 << 22)
723 #define GBF_VECTOR (1 << 23)
724 #define GBF_RPG (1 << 24)
725 #define GBF_SIM (1 << 25)
726 #define GBF_ADV (1 << 26)
727
728 // flags for the family member
729 #define FBF_MSLUG (1 << 0)
730 #define FBF_SF (1 << 1)
731 #define FBF_KOF (1 << 2)
732 #define FBF_DSTLK (1 << 3)
733 #define FBF_FATFURY (1 << 4)
734 #define FBF_SAMSHO (1 << 5)
735 #define FBF_19XX (1 << 6)
736 #define FBF_SONICWI (1 << 7)
737 #define FBF_PWRINST (1 << 8)
738 #define FBF_SONIC (1 << 9)
739 #define FBF_DONPACHI (1 << 10)
740 #define FBF_MAHOU (1 << 11)
741
742 #ifdef __cplusplus
743 } // End of extern "C"
744 #endif
745
746 #endif
747