[wrap]
/*************************************************************************
3dfx Voodoo Graphics SST-1 emulator
driver by Aaron Giles
**************************************************************************/
/***************************************************************************
CONSTANTS
***************************************************************************/
/* enumeration specifying which model of Voodoo we are emulating */
enum
{
VOODOO_1,
VOODOO_2,
VOODOO_BANSHEE,
VOODOO_3,
MAX_VOODOO_TYPES
};
#define STD_VOODOO_1_CLOCK 50000000
#define STD_VOODOO_2_CLOCK 90000000
#define STD_VOODOO_BANSHEE_CLOCK 90000000
#define STD_VOODOO_3_CLOCK 132000000
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
typedef void (*voodoo_vblank_func)(const device_config *device, int state);
typedef void (*voodoo_stall_func)(const device_config *device, int state);
typedef struct _voodoo_config voodoo_config;
struct _voodoo_config
{
int type;
UINT32 clock;
UINT8 fbmem;
UINT8 tmumem0;
UINT8 tmumem1;
const char * screen;
voodoo_vblank_func vblank;
voodoo_stall_func stall;
};
/***************************************************************************
DEVICE CONFIGURATION MACROS
***************************************************************************/
#define MDRV_3DFX_VOODOO_ADD(_tag, _type, _clock, _fbmem, _screen) \
MDRV_DEVICE_ADD(_tag, VOODOO_GRAPHICS) \
MDRV_DEVICE_CONFIG_DATA32(voodoo_config, type, _type) \
MDRV_DEVICE_CONFIG_DATA32(voodoo_config, clock, _clock) \
MDRV_DEVICE_CONFIG_DATA32(voodoo_config, fbmem, _fbmem) \
MDRV_DEVICE_CONFIG_DATAPTR(voodoo_config, screen, _screen)
#define MDRV_3DFX_VOODOO_1_ADD(_tag, _clock, _fbmem, _screen) \
MDRV_3DFX_VOODOO_ADD(_tag, VOODOO_1, _clock, _fbmem, _screen)
#define MDRV_3DFX_VOODOO_2_ADD(_tag, _clock, _fbmem, _screen) \
MDRV_3DFX_VOODOO_ADD(_tag, VOODOO_2, _clock, _fbmem, _screen)
#define MDRV_3DFX_VOODOO_BANSHEE_ADD(_tag, _clock, _fbmem, _screen) \
MDRV_3DFX_VOODOO_ADD(_tag, VOODOO_BANSHEE, _clock, _fbmem, _screen)
#define MDRV_3DFX_VOODOO_3_ADD(_tag, _clock, _fbmem, _screen) \
MDRV_3DFX_VOODOO_ADD(_tag, VOODOO_3, _clock, _fbmem, _screen)
#define MDRV_3DFX_VOODOO_TMU_MEMORY(_tmu, _tmumem) \
MDRV_DEVICE_CONFIG_DATA32(voodoo_config, tmumem##_tmu, _tmumem)
#define MDRV_3DFX_VOODOO_VBLANK(_vblank) \
MDRV_DEVICE_CONFIG_DATAPTR(voodoo_config, vblank, _vblank)
#define MDRV_3DFX_VOODOO_STALL(_stall) \
MDRV_DEVICE_CONFIG_DATAPTR(voodoo_config, stall, _stall)
#define MDRV_3DFX_VOODOO_MODIFY(_tag) \
MDRV_DEVICE_MODIFY(_tag, VOODOO_GRAPHICS)
#define MDRV_3DFX_VOODOO_REMOVE(_tag) \
MDRV_DEVICE_REMOVE(_tag, VOODOO_GRAPHICS)
/***************************************************************************
FUNCTION PROTOTYPES
***************************************************************************/
int voodoo_update(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect);
int voodoo_get_type(const device_config *device);
int voodoo_is_stalled(const device_config *device);
void voodoo_set_init_enable(const device_config *device, UINT32 newval);
READ32_DEVICE_HANDLER( voodoo_r );
WRITE32_DEVICE_HANDLER( voodoo_w );
READ32_DEVICE_HANDLER( banshee_r );
WRITE32_DEVICE_HANDLER( banshee_w );
READ32_DEVICE_HANDLER( banshee_fb_r );
WRITE32_DEVICE_HANDLER( banshee_fb_w );
READ32_DEVICE_HANDLER( banshee_io_r );
WRITE32_DEVICE_HANDLER( banshee_io_w );
READ32_DEVICE_HANDLER( banshee_rom_r );
/* ----- device interface ----- */
/* device get info callback */
#define VOODOO_GRAPHICS DEVICE_GET_INFO_NAME(voodoo)
DEVICE_GET_INFO( voodoo );