diff --git a/.gitattributes b/.gitattributes index f373d2f8bee..0f1728c36e4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -699,8 +699,8 @@ src/emu/distate.h svneol=native#text/plain src/emu/drawgfx.c svneol=native#text/plain src/emu/drawgfx.h svneol=native#text/plain src/emu/drawgfxm.h svneol=native#text/plain -src/emu/driver.c svneol=native#text/plain -src/emu/driver.h svneol=native#text/plain +src/emu/drivenum.c svneol=native#text/plain +src/emu/drivenum.h svneol=native#text/plain src/emu/drivers/empty.c svneol=native#text/plain src/emu/drivers/emudummy.c svneol=native#text/plain src/emu/drivers/testcpu.c svneol=native#text/plain @@ -721,6 +721,7 @@ src/emu/emupal.h svneol=native#text/plain src/emu/emutempl.h svneol=native#text/plain src/emu/fileio.c svneol=native#text/plain src/emu/fileio.h svneol=native#text/plain +src/emu/gamedrv.h svneol=native#text/plain src/emu/hash.c svneol=native#text/plain src/emu/hash.h svneol=native#text/plain src/emu/hashfile.c svneol=native#text/plain diff --git a/src/build/makelist.c b/src/build/makelist.c index d6f0aa88786..21b0d284e7e 100644 --- a/src/build/makelist.c +++ b/src/build/makelist.c @@ -251,6 +251,7 @@ int main(int argc, char *argv[]) // start with a header printf("#include \"emu.h\"\n\n"); + printf("#include \"drivenum.h\"\n\n"); // output the list of externs first for (int index = 0; index < drivcount; index++) diff --git a/src/emu/audit.h b/src/emu/audit.h index ee802f94e5f..1dd47c0a112 100644 --- a/src/emu/audit.h +++ b/src/emu/audit.h @@ -42,6 +42,7 @@ #ifndef __AUDIT_H__ #define __AUDIT_H__ +#include "drivenum.h" #include "hash.h" diff --git a/src/emu/clifront.h b/src/emu/clifront.h index bc95761034e..02ec7dd2142 100644 --- a/src/emu/clifront.h +++ b/src/emu/clifront.h @@ -43,6 +43,7 @@ #define __CLIFRONT_H__ #include "emuopts.h" +#include "drivenum.h" //************************************************************************** diff --git a/src/emu/config.c b/src/emu/config.c index d2937d38f21..c0df9f9737d 100644 --- a/src/emu/config.c +++ b/src/emu/config.c @@ -11,6 +11,7 @@ #include "emu.h" #include "emuopts.h" +#include "drivenum.h" #include "config.h" #include "xmlfile.h" diff --git a/src/emu/diimage.c b/src/emu/diimage.c index 16ff28ba107..11fdec1f6b9 100644 --- a/src/emu/diimage.c +++ b/src/emu/diimage.c @@ -39,6 +39,7 @@ #include "emu.h" #include "emuopts.h" +#include "drivenum.h" #include "ui.h" #include "zippath.h" #include "uiimage.h" diff --git a/src/emu/driver.c b/src/emu/drivenum.c similarity index 99% rename from src/emu/driver.c rename to src/emu/drivenum.c index e0e121e1d50..2f06589ad2b 100644 --- a/src/emu/driver.c +++ b/src/emu/drivenum.c @@ -1,6 +1,6 @@ /*************************************************************************** - driver.c + drivenum.c Driver enumeration helpers. @@ -38,6 +38,7 @@ ***************************************************************************/ #include "emu.h" +#include "drivenum.h" #include diff --git a/src/emu/driver.h b/src/emu/drivenum.h similarity index 51% rename from src/emu/driver.h rename to src/emu/drivenum.h index 40c3364d8e7..40fc2ea0c13 100644 --- a/src/emu/driver.h +++ b/src/emu/drivenum.h @@ -1,6 +1,6 @@ /*************************************************************************** - driver.h + drivenum.h Driver enumeration helpers. @@ -39,77 +39,15 @@ #pragma once -#ifndef __EMU_H__ -#error Dont include this file directly; include emu.h instead. -#endif - -#ifndef __DRIVER_H__ -#define __DRIVER_H__ +#ifndef __DRIVENUM_H__ +#define __DRIVENUM_H__ -/*************************************************************************** - CONSTANTS -***************************************************************************/ - -/* maxima */ -#define MAX_DRIVER_NAME_CHARS 8 - - - -/* ----- flags for game drivers ----- */ - -#define ORIENTATION_MASK 0x00000007 -#define GAME_NOT_WORKING 0x00000008 -#define GAME_UNEMULATED_PROTECTION 0x00000010 /* game's protection not fully emulated */ -#define GAME_WRONG_COLORS 0x00000020 /* colors are totally wrong */ -#define GAME_IMPERFECT_COLORS 0x00000040 /* colors are not 100% accurate, but close */ -#define GAME_IMPERFECT_GRAPHICS 0x00000080 /* graphics are wrong/incomplete */ -#define GAME_NO_COCKTAIL 0x00000100 /* screen flip support is missing */ -#define GAME_NO_SOUND 0x00000200 /* sound is missing */ -#define GAME_IMPERFECT_SOUND 0x00000400 /* sound is known to be wrong */ -#define GAME_SUPPORTS_SAVE 0x00000800 /* game supports save states */ -#define GAME_IS_BIOS_ROOT 0x00001000 /* this driver entry is a BIOS root */ -#define GAME_NO_STANDALONE 0x00002000 /* this driver cannot stand alone */ -#define GAME_REQUIRES_ARTWORK 0x00004000 /* the driver requires external artwork for key elements of the game */ -#define GAME_UNOFFICIAL 0x00008000 /* unofficial hardware change */ -#define GAME_NO_SOUND_HW 0x00010000 /* sound hardware not available */ -#define GAME_MECHANICAL 0x00020000 /* contains mechanical parts (pinball, redemption games,...) */ -#define GAME_IS_SKELETON 0x00000208 /* mask for skelly games */ -#define GAME_IS_SKELETON_MECHANICAL 0x00024208 /* mask for skelly mechanical games */ -#define GAME_TYPE_ARCADE 0x00040000 /* arcade machine (coin operated machines) */ -#define GAME_TYPE_CONSOLE 0x00080000 /* console system */ -#define GAME_TYPE_COMPUTER 0x00100000 /* any kind of computer including home computers, minis, calcs,... */ -#define GAME_TYPE_OTHER 0x00200000 /* any other emulated system that doesn't fit above (ex. clock, satelite receiver,...) */ - -/* ----- flags to return from video_update ----- */ -#define UPDATE_HAS_NOT_CHANGED 0x0001 /* the video has not changed */ - - - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -typedef void (*driver_init_func)(running_machine &machine); - - -struct game_driver -{ - const char * source_file; /* set this to __FILE__ */ - const char * parent; /* if this is a clone, the name of the parent */ - const char * name; /* short (8-character) name of the game */ - const char * description; /* full name of the game */ - const char * year; /* year the game was released */ - const char * manufacturer; /* manufacturer of the game */ - machine_config_constructor machine_config; /* machine driver tokens */ - ioport_constructor ipt; /* pointer to array of input port tokens */ - void (*driver_init)(running_machine &machine); /* DRIVER_INIT callback */ - const rom_entry * rom; /* pointer to list of ROMs for the game */ - const char * compatible_with; - UINT32 flags; /* orientation and other flags; see defines below */ - const char * default_layout; /* default internally defined layout */ -}; +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** +// ======================> driver_list // driver_list is a purely static class that wraps the global driver list class driver_list @@ -153,6 +91,8 @@ protected: }; +// ======================> driver_enumerator + // driver_enumerator enables efficient iteration through the driver list class driver_enumerator : public driver_list { @@ -238,104 +178,4 @@ private: mutable simple_list m_config_cache; }; - - -/*************************************************************************** - MACROS FOR BUILDING GAME DRIVERS -***************************************************************************/ - - -#define DRIVER_INIT_NAME(name) driver_init_##name -#define DRIVER_INIT(name) void DRIVER_INIT_NAME(name)(running_machine &machine) -#define DRIVER_INIT_CALL(name) DRIVER_INIT_NAME(name)(machine) - -#define driver_init_0 NULL - - -#define GAME_NAME(name) driver_##name -#define GAME_EXTERN(name) extern const game_driver GAME_NAME(name) - -#define GAME(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS) \ - GAMEL(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS,((const char *)0)) - -#define GAMEL(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS,LAYOUT) \ -extern const game_driver GAME_NAME(NAME) = \ -{ \ - __FILE__, \ - #PARENT, \ - #NAME, \ - FULLNAME, \ - #YEAR, \ - COMPANY, \ - MACHINE_CONFIG_NAME(MACHINE), \ - INPUT_PORTS_NAME(INPUT), \ - DRIVER_INIT_NAME(INIT), \ - ROM_NAME(NAME), \ - NULL, \ - (MONITOR)|(FLAGS)|GAME_TYPE_ARCADE, \ - &LAYOUT[0] \ -}; - -#define CONS(YEAR,NAME,PARENT,COMPAT,MACHINE,INPUT,INIT,COMPANY,FULLNAME,FLAGS) \ -extern const game_driver GAME_NAME(NAME) = \ -{ \ - __FILE__, \ - #PARENT, \ - #NAME, \ - FULLNAME, \ - #YEAR, \ - COMPANY, \ - MACHINE_CONFIG_NAME(MACHINE), \ - INPUT_PORTS_NAME(INPUT), \ - DRIVER_INIT_NAME(INIT), \ - ROM_NAME(NAME), \ - #COMPAT, \ - ROT0|(FLAGS)|GAME_TYPE_CONSOLE, \ - NULL \ -}; - -#define COMP(YEAR,NAME,PARENT,COMPAT,MACHINE,INPUT,INIT,COMPANY,FULLNAME,FLAGS) \ -extern const game_driver GAME_NAME(NAME) = \ -{ \ - __FILE__, \ - #PARENT, \ - #NAME, \ - FULLNAME, \ - #YEAR, \ - COMPANY, \ - MACHINE_CONFIG_NAME(MACHINE), \ - INPUT_PORTS_NAME(INPUT), \ - DRIVER_INIT_NAME(INIT), \ - ROM_NAME(NAME), \ - #COMPAT, \ - ROT0|(FLAGS)|GAME_TYPE_COMPUTER, \ - NULL \ -}; - -#define SYST(YEAR,NAME,PARENT,COMPAT,MACHINE,INPUT,INIT,COMPANY,FULLNAME,FLAGS) \ -extern const game_driver GAME_NAME(NAME) = \ -{ \ - __FILE__, \ - #PARENT, \ - #NAME, \ - FULLNAME, \ - #YEAR, \ - COMPANY, \ - MACHINE_CONFIG_NAME(MACHINE), \ - INPUT_PORTS_NAME(INPUT), \ - DRIVER_INIT_NAME(INIT), \ - ROM_NAME(NAME), \ - #COMPAT, \ - ROT0|(FLAGS)|GAME_TYPE_OTHER, \ - NULL \ -}; - -/*************************************************************************** - GLOBAL VARIABLES -***************************************************************************/ - -GAME_EXTERN(___empty); - - - #endif diff --git a/src/emu/emu.h b/src/emu/emu.h index 1ff548835d4..005efc2244e 100644 --- a/src/emu/emu.h +++ b/src/emu/emu.h @@ -112,7 +112,7 @@ typedef device_t * (*machine_config_constructor)(machine_config &config, device_ // machine and driver configuration #include "mconfig.h" -#include "driver.h" +#include "gamedrv.h" // image-related #include "softlist.h" diff --git a/src/emu/emu.mak b/src/emu/emu.mak index 03779bea239..2ad743db39e 100644 --- a/src/emu/emu.mak +++ b/src/emu/emu.mak @@ -70,7 +70,7 @@ EMUOBJS = \ $(EMUOBJ)/disound.o \ $(EMUOBJ)/distate.o \ $(EMUOBJ)/drawgfx.o \ - $(EMUOBJ)/driver.o \ + $(EMUOBJ)/drivenum.o \ $(EMUOBJ)/emualloc.o \ $(EMUOBJ)/emucore.o \ $(EMUOBJ)/emuopts.o \ diff --git a/src/emu/emuopts.c b/src/emu/emuopts.c index ddea3ecdf9e..72baf54a2f0 100644 --- a/src/emu/emuopts.c +++ b/src/emu/emuopts.c @@ -39,6 +39,7 @@ #include "emu.h" #include "emuopts.h" +#include "drivenum.h" #include diff --git a/src/emu/gamedrv.h b/src/emu/gamedrv.h new file mode 100644 index 00000000000..bb5f2111618 --- /dev/null +++ b/src/emu/gamedrv.h @@ -0,0 +1,221 @@ +/*************************************************************************** + + gamedrv.h + + Definitions for game drivers. + +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +***************************************************************************/ + +#pragma once + +#ifndef __GAMEDRV_H__ +#define __GAMEDRV_H__ + + +//************************************************************************** +// CONSTANTS +//************************************************************************** + +// maxima +const int MAX_DRIVER_NAME_CHARS = 8; + +// flags for game drivers +const UINT32 ORIENTATION_MASK = 0x00000007; +const UINT32 GAME_NOT_WORKING = 0x00000008; +const UINT32 GAME_UNEMULATED_PROTECTION = 0x00000010; // game's protection not fully emulated +const UINT32 GAME_WRONG_COLORS = 0x00000020; // colors are totally wrong +const UINT32 GAME_IMPERFECT_COLORS = 0x00000040; // colors are not 100% accurate, but close +const UINT32 GAME_IMPERFECT_GRAPHICS = 0x00000080; // graphics are wrong/incomplete +const UINT32 GAME_NO_COCKTAIL = 0x00000100; // screen flip support is missing +const UINT32 GAME_NO_SOUND = 0x00000200; // sound is missing +const UINT32 GAME_IMPERFECT_SOUND = 0x00000400; // sound is known to be wrong +const UINT32 GAME_SUPPORTS_SAVE = 0x00000800; // game supports save states +const UINT32 GAME_IS_BIOS_ROOT = 0x00001000; // this driver entry is a BIOS root +const UINT32 GAME_NO_STANDALONE = 0x00002000; // this driver cannot stand alone +const UINT32 GAME_REQUIRES_ARTWORK = 0x00004000; // the driver requires external artwork for key elements of the game +const UINT32 GAME_UNOFFICIAL = 0x00008000; // unofficial hardware change +const UINT32 GAME_NO_SOUND_HW = 0x00010000; // sound hardware not available +const UINT32 GAME_MECHANICAL = 0x00020000; // contains mechanical parts (pinball, redemption games,...) +const UINT32 GAME_TYPE_ARCADE = 0x00040000; // arcade machine (coin operated machines) +const UINT32 GAME_TYPE_CONSOLE = 0x00080000; // console system +const UINT32 GAME_TYPE_COMPUTER = 0x00100000; // any kind of computer including home computers, minis, calcs,... +const UINT32 GAME_TYPE_OTHER = 0x00200000; // any other emulated system that doesn't fit above (ex. clock, satelite receiver,...) + +// useful combinations of flags +const UINT32 GAME_IS_SKELETON = GAME_NO_SOUND | GAME_NOT_WORKING; // mask for skelly games +const UINT32 GAME_IS_SKELETON_MECHANICAL = GAME_IS_SKELETON | GAME_MECHANICAL | GAME_REQUIRES_ARTWORK; // mask for skelly mechanical games + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// static driver initialization callback +typedef void (*driver_init_func)(running_machine &machine); + +/* +// wrapper template to allow members +template +void driver_init_wrapper(running_machine &machine) +{ + _DriverClass *object = machine.driver_data<_DriverClass>(); + (object->*_Function)(); +} +*/ + +// static POD structure describing each game driver entry +struct game_driver +{ + const char * source_file; // set this to __FILE__ + const char * parent; // if this is a clone, the name of the parent + const char * name; // short (8-character) name of the game + const char * description; // full name of the game + const char * year; // year the game was released + const char * manufacturer; // manufacturer of the game + machine_config_constructor machine_config; // machine driver tokens + ioport_constructor ipt; // pointer to constructor for input ports + void (*driver_init)(running_machine &machine); // DRIVER_INIT callback + const rom_entry * rom; // pointer to list of ROMs for the game + const char * compatible_with; + UINT32 flags; // orientation and other flags; see defines below + const char * default_layout; // default internally defined layout +}; + + + +//************************************************************************** +// MACROS +//************************************************************************** + +// wrappers for the DRIVER_INIT callback +#define DRIVER_INIT_NAME(name) driver_init_##name +#define DRIVER_INIT(name) void DRIVER_INIT_NAME(name)(running_machine &machine) +#define DRIVER_INIT_CALL(name) DRIVER_INIT_NAME(name)(machine) + +#define driver_init_0 NULL + +// wrappers for declaring and defining game drivers +#define GAME_NAME(name) driver_##name +#define GAME_EXTERN(name) extern const game_driver GAME_NAME(name) + +// standard GAME() macro +#define GAME(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS) \ + GAMEL(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS,((const char *)0)) + +// standard macro with additional layout +#define GAMEL(YEAR,NAME,PARENT,MACHINE,INPUT,INIT,MONITOR,COMPANY,FULLNAME,FLAGS,LAYOUT) \ +extern const game_driver GAME_NAME(NAME) = \ +{ \ + __FILE__, \ + #PARENT, \ + #NAME, \ + FULLNAME, \ + #YEAR, \ + COMPANY, \ + MACHINE_CONFIG_NAME(MACHINE), \ + INPUT_PORTS_NAME(INPUT), \ + DRIVER_INIT_NAME(INIT), \ + ROM_NAME(NAME), \ + NULL, \ + (MONITOR)|(FLAGS)|GAME_TYPE_ARCADE, \ + &LAYOUT[0] \ +}; + +// standard console definition macro +#define CONS(YEAR,NAME,PARENT,COMPAT,MACHINE,INPUT,INIT,COMPANY,FULLNAME,FLAGS) \ +extern const game_driver GAME_NAME(NAME) = \ +{ \ + __FILE__, \ + #PARENT, \ + #NAME, \ + FULLNAME, \ + #YEAR, \ + COMPANY, \ + MACHINE_CONFIG_NAME(MACHINE), \ + INPUT_PORTS_NAME(INPUT), \ + DRIVER_INIT_NAME(INIT), \ + ROM_NAME(NAME), \ + #COMPAT, \ + ROT0|(FLAGS)|GAME_TYPE_CONSOLE, \ + NULL \ +}; + +// standard computer definition macro +#define COMP(YEAR,NAME,PARENT,COMPAT,MACHINE,INPUT,INIT,COMPANY,FULLNAME,FLAGS) \ +extern const game_driver GAME_NAME(NAME) = \ +{ \ + __FILE__, \ + #PARENT, \ + #NAME, \ + FULLNAME, \ + #YEAR, \ + COMPANY, \ + MACHINE_CONFIG_NAME(MACHINE), \ + INPUT_PORTS_NAME(INPUT), \ + DRIVER_INIT_NAME(INIT), \ + ROM_NAME(NAME), \ + #COMPAT, \ + ROT0|(FLAGS)|GAME_TYPE_COMPUTER, \ + NULL \ +}; + +// standard system definition macro +#define SYST(YEAR,NAME,PARENT,COMPAT,MACHINE,INPUT,INIT,COMPANY,FULLNAME,FLAGS) \ +extern const game_driver GAME_NAME(NAME) = \ +{ \ + __FILE__, \ + #PARENT, \ + #NAME, \ + FULLNAME, \ + #YEAR, \ + COMPANY, \ + MACHINE_CONFIG_NAME(MACHINE), \ + INPUT_PORTS_NAME(INPUT), \ + DRIVER_INIT_NAME(INIT), \ + ROM_NAME(NAME), \ + #COMPAT, \ + ROT0|(FLAGS)|GAME_TYPE_OTHER, \ + NULL \ +}; + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +GAME_EXTERN(___empty); + +#endif diff --git a/src/emu/hashfile.c b/src/emu/hashfile.c index f80b21158d8..e79cf84e186 100644 --- a/src/emu/hashfile.c +++ b/src/emu/hashfile.c @@ -11,6 +11,7 @@ #include "expat.h" #include "emuopts.h" #include "hash.h" +#include "drivenum.h" /*************************************************************************** diff --git a/src/emu/info.h b/src/emu/info.h index 1ebdea13322..5deb4946ea7 100644 --- a/src/emu/info.h +++ b/src/emu/info.h @@ -42,6 +42,8 @@ #ifndef __INFO_H__ #define __INFO_H__ +#include "drivenum.h" + //************************************************************************** // FUNCTION PROTOTYPES diff --git a/src/emu/render.c b/src/emu/render.c index 7f971618b25..f9482214cd3 100644 --- a/src/emu/render.c +++ b/src/emu/render.c @@ -72,6 +72,7 @@ #include "rendlay.h" #include "rendutil.h" #include "config.h" +#include "drivenum.h" #include "xmlfile.h" diff --git a/src/emu/romload.c b/src/emu/romload.c index 99acddceef0..a4138fcfea5 100644 --- a/src/emu/romload.c +++ b/src/emu/romload.c @@ -11,6 +11,7 @@ #include "emu.h" #include "emuopts.h" +#include "drivenum.h" #include "png.h" #include "harddisk.h" #include "config.h" diff --git a/src/emu/screen.h b/src/emu/screen.h index bb854ce2d3a..ed141513c18 100644 --- a/src/emu/screen.h +++ b/src/emu/screen.h @@ -61,6 +61,10 @@ enum screen_type_enum }; +// screen_update callback flags +const UINT32 UPDATE_HAS_NOT_CHANGED = 0x0001; // the video has not changed + + //************************************************************************** // TYPE DEFINITIONS diff --git a/src/emu/uimain.h b/src/emu/uimain.h index b2b6d22530c..31eb79090a8 100644 --- a/src/emu/uimain.h +++ b/src/emu/uimain.h @@ -15,6 +15,7 @@ #define __UIMAIN_H__ #include "crsshair.h" +#include "drivenum.h" class ui_menu_main : public ui_menu { public: diff --git a/src/emu/validity.h b/src/emu/validity.h index 1e56d138930..dd7799b3047 100644 --- a/src/emu/validity.h +++ b/src/emu/validity.h @@ -43,6 +43,7 @@ #define __VALIDITY_H__ #include "emu.h" +#include "drivenum.h" //**************************************************************************