diff --git a/src/emu/video/vooddefs.h b/src/emu/video/vooddefs.h index 6e80fdb001e..22bfb94e1f4 100644 --- a/src/emu/video/vooddefs.h +++ b/src/emu/video/vooddefs.h @@ -1447,7 +1447,6 @@ struct pci_state fifo_state fifo; /* PCI FIFO */ UINT32 init_enable; /* initEnable value */ UINT8 stall_state; /* state of the system if we're stalled */ - devcb_resolved_write_line stall_callback; /* callback for stalling/unstalling */ UINT8 op_pending; /* true if an operation is pending */ attotime op_end_time; /* time when the pending operation ends */ emu_timer * continue_timer; /* timer to use to continue processing */ @@ -1563,7 +1562,6 @@ struct fbi_state UINT8 vblank_swap_pending; /* a swap is pending, waiting for a vblank */ UINT8 vblank_swap; /* swap when we hit this count */ UINT8 vblank_dont_swap; /* don't actually swap when we hit this point */ - devcb_resolved_write_line vblank_client; /* client callback */ /* triangle setup info */ UINT8 cheating_allowed; /* allow cheating? */ @@ -1692,7 +1690,7 @@ struct banshee_info struct voodoo_state { UINT8 index; /* index of board */ - device_t *device; /* pointer to our containing device */ + voodoo_device *device; /* pointer to our containing device */ screen_device *screen; /* the screen we are acting on */ device_t *cpu; /* the CPU we interact with */ UINT8 type; /* type of system */ diff --git a/src/emu/video/voodoo.c b/src/emu/video/voodoo.c index ab0096077e8..46bc0a579c8 100644 --- a/src/emu/video/voodoo.c +++ b/src/emu/video/voodoo.c @@ -977,15 +977,15 @@ static TIMER_CALLBACK( vblank_off_callback ) { v->reg[intrCtrl].u |= 0x200; // VSYNC int (falling) active - if (!v->fbi.vblank_client.isnull()) - v->fbi.vblank_client(FALSE); + if (!v->device->m_vblank.isnull()) + v->device->m_vblank(FALSE); } } else { - if (!v->fbi.vblank_client.isnull()) - v->fbi.vblank_client(FALSE); + if (!v->device->m_vblank.isnull()) + v->device->m_vblank(FALSE); } /* go to the end of the next frame */ @@ -1033,14 +1033,14 @@ static TIMER_CALLBACK( vblank_callback ) { v->reg[intrCtrl].u |= 0x100; // VSYNC int (rising) active - if (!v->fbi.vblank_client.isnull()) - v->fbi.vblank_client(TRUE); + if (!v->device->m_vblank.isnull()) + v->device->m_vblank(TRUE); } } else { - if (!v->fbi.vblank_client.isnull()) - v->fbi.vblank_client(TRUE); + if (!v->device->m_vblank.isnull()) + v->device->m_vblank(TRUE); } } @@ -2148,8 +2148,8 @@ static void check_stalled_cpu(voodoo_state *v, attotime current_time) v->pci.stall_state = NOT_STALLED; /* either call the callback, or trigger the trigger */ - if (!v->pci.stall_callback.isnull()) - v->pci.stall_callback(FALSE); + if (!v->device->m_stall.isnull()) + v->device->m_stall(FALSE); else v->device->machine().scheduler().trigger(v->trigger); } @@ -2172,8 +2172,8 @@ static void stall_cpu(voodoo_state *v, int state, attotime current_time) v->stats.stalls++; /* either call the callback, or spin the CPU */ - if (!v->pci.stall_callback.isnull()) - v->pci.stall_callback(TRUE); + if (!v->device->m_stall.isnull()) + v->device->m_stall(TRUE); else v->cpu->execute().spin_until_trigger(v->trigger); @@ -2530,8 +2530,8 @@ static INT32 register_w(voodoo_state *v, offs_t offset, UINT32 data) v->reg[intrCtrl].u &= ~0x80000000; // TODO: rename vblank_client for less confusion? - if (!v->fbi.vblank_client.isnull()) - v->fbi.vblank_client(TRUE); + if (!v->device->m_vblank.isnull()) + v->device->m_vblank(TRUE); break; /* gamma table access -- Voodoo/Voodoo2 only */ @@ -4858,10 +4858,9 @@ WRITE32_MEMBER( voodoo_banshee_device::banshee_io_w ) device start callback -------------------------------------------------*/ -static void common_start_voodoo(device_t *device, UINT8 type) +void voodoo_device::common_start_voodoo(UINT8 type) { - const voodoo_config *config = (const voodoo_config *)device->static_config(); - voodoo_state *v = get_safe_token(device); + voodoo_state *v = get_safe_token(this); const raster_info *info; void *fbmem, *tmumem[2]; UINT32 tmumem0; @@ -4873,17 +4872,17 @@ static void common_start_voodoo(device_t *device, UINT8 type) assert(config->fbmem > 0); /* store a pointer back to the device */ - v->device = device; + v->device = this; v->type = type; /* copy config data */ - v->freq = device->clock(); - v->fbi.vblank_client.resolve(config->vblank,*device); - v->pci.stall_callback.resolve(config->stall,*device); + v->freq = clock(); + v->device->m_vblank.resolve(); + v->device->m_stall.resolve(); /* create a multiprocessor work queue */ - v->poly = poly_alloc(device->machine(), 64, sizeof(poly_extra_data), 0); - v->thread_stats = auto_alloc_array(device->machine(), stats_block, WORK_MAX_THREADS); + v->poly = poly_alloc(machine(), 64, sizeof(poly_extra_data), 0); + v->thread_stats = auto_alloc_array(machine(), stats_block, WORK_MAX_THREADS); /* create a table of precomputed 1/n and log2(n) values */ /* n ranges from 1.0000 to 2.0000 */ @@ -4951,18 +4950,18 @@ static void common_start_voodoo(device_t *device, UINT8 type) } /* set the type, and initialize the chip mask */ - device_iterator iter(device->machine().root_device()); + device_iterator iter(machine().root_device()); v->index = 0; for (device_t *scan = iter.first(); scan != NULL; scan = iter.next()) - if (scan->type() == device->type()) + if (scan->type() == this->type()) { - if (scan == device) + if (scan == this) break; v->index++; } - v->screen = downcast(device->machine().device(config->screen)); + v->screen = downcast(machine().device(m_screen)); assert_always(v->screen != NULL, "Unable to find screen attached to voodoo"); - v->cpu = device->machine().device(config->cputag); + v->cpu = machine().device(m_cputag); assert_always(v->cpu != NULL, "Unable to find CPU attached to voodoo"); v->chipmask = 0x01; v->attoseconds_per_cycle = ATTOSECONDS_PER_SECOND / v->freq; @@ -4977,26 +4976,26 @@ static void common_start_voodoo(device_t *device, UINT8 type) v->pci.fifo.size = 64*2; v->pci.fifo.in = v->pci.fifo.out = 0; v->pci.stall_state = NOT_STALLED; - v->pci.continue_timer = v->device->machine().scheduler().timer_alloc(FUNC(stall_cpu_callback), v); + v->pci.continue_timer = machine().scheduler().timer_alloc(FUNC(stall_cpu_callback), v); /* allocate memory */ - tmumem0 = config->tmumem0; + tmumem0 = m_tmumem0; if (v->type <= TYPE_VOODOO_2) { /* separate FB/TMU memory */ - fbmem = auto_alloc_array(device->machine(), UINT8, config->fbmem << 20); - tmumem[0] = auto_alloc_array(device->machine(), UINT8, config->tmumem0 << 20); - tmumem[1] = (config->tmumem1 != 0) ? auto_alloc_array(device->machine(), UINT8, config->tmumem1 << 20) : NULL; + fbmem = auto_alloc_array(machine(), UINT8, m_fbmem << 20); + tmumem[0] = auto_alloc_array(machine(), UINT8, m_tmumem0 << 20); + tmumem[1] = (m_tmumem1 != 0) ? auto_alloc_array(machine(), UINT8, m_tmumem1 << 20) : NULL; } else { /* shared memory */ - tmumem[0] = tmumem[1] = fbmem = auto_alloc_array(device->machine(), UINT8, config->fbmem << 20); - tmumem0 = config->fbmem; + tmumem[0] = tmumem[1] = fbmem = auto_alloc_array(machine(), UINT8, m_fbmem << 20); + tmumem0 = m_fbmem; } /* set up frame buffer */ - init_fbi(v, &v->fbi, fbmem, config->fbmem << 20); + init_fbi(v, &v->fbi, fbmem, m_fbmem << 20); /* build shared TMU tables */ init_tmu_shared(&v->tmushare); @@ -5004,9 +5003,9 @@ static void common_start_voodoo(device_t *device, UINT8 type) /* set up the TMUs */ init_tmu(v, &v->tmu[0], &v->reg[0x100], tmumem[0], tmumem0 << 20); v->chipmask |= 0x02; - if (config->tmumem1 != 0 || v->type == TYPE_VOODOO_3) + if (m_tmumem1 != 0 || v->type == TYPE_VOODOO_3) { - init_tmu(v, &v->tmu[1], &v->reg[0x200], tmumem[1], config->tmumem1 << 20); + init_tmu(v, &v->tmu[1], &v->reg[0x200], tmumem[1], m_tmumem1 << 20); v->chipmask |= 0x04; } @@ -5033,7 +5032,7 @@ static void common_start_voodoo(device_t *device, UINT8 type) soft_reset(v); /* register for save states */ - init_save_state(device); + init_save_state(this); } @@ -5666,7 +5665,14 @@ static void dump_rasterizer_stats(voodoo_state *v) } voodoo_device::voodoo_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) - : device_t(mconfig, type, name, tag, owner, clock, shortname, source) + : device_t(mconfig, type, name, tag, owner, clock, shortname, source), + m_fbmem(0), + m_tmumem0(0), + m_tmumem1(0), + m_screen(NULL), + m_cputag(NULL), + m_vblank(*this), + m_stall(*this) { m_token = global_alloc_clear(voodoo_state); } @@ -5723,7 +5729,7 @@ voodoo_1_device::voodoo_1_device(const machine_config &mconfig, const char *tag, void voodoo_1_device::device_start() { - common_start_voodoo(this, TYPE_VOODOO_1); + common_start_voodoo(TYPE_VOODOO_1); } @@ -5740,7 +5746,7 @@ voodoo_2_device::voodoo_2_device(const machine_config &mconfig, const char *tag, void voodoo_2_device::device_start() { - common_start_voodoo(this, TYPE_VOODOO_2); + common_start_voodoo(TYPE_VOODOO_2); } @@ -5762,7 +5768,7 @@ voodoo_banshee_device::voodoo_banshee_device(const machine_config &mconfig, devi void voodoo_banshee_device::device_start() { - common_start_voodoo(this, TYPE_VOODOO_BANSHEE); + common_start_voodoo(TYPE_VOODOO_BANSHEE); } @@ -5779,7 +5785,7 @@ voodoo_3_device::voodoo_3_device(const machine_config &mconfig, const char *tag, void voodoo_3_device::device_start() { - common_start_voodoo(this, TYPE_VOODOO_3); + common_start_voodoo(TYPE_VOODOO_3); } diff --git a/src/emu/video/voodoo.h b/src/emu/video/voodoo.h index 26362bb168d..2e9c1afea1a 100644 --- a/src/emu/video/voodoo.h +++ b/src/emu/video/voodoo.h @@ -39,13 +39,13 @@ enum struct voodoo_config { - UINT8 fbmem; - UINT8 tmumem0; - UINT8 tmumem1; - const char * screen; - const char * cputag; - devcb_write_line vblank; - devcb_write_line stall; + UINT8 l_fbmem; + UINT8 l_tmumem0; + UINT8 l_tmumem1; + const char * l_screen; + const char * l_cputag; + devcb_write_line l_vblank; + devcb_write_line l_stall; }; @@ -54,21 +54,24 @@ struct voodoo_config DEVICE CONFIGURATION MACROS ***************************************************************************/ -#define MCFG_3DFX_VOODOO_1_ADD(_tag, _clock, _config) \ - MCFG_DEVICE_ADD(_tag, VOODOO_1, _clock) \ - MCFG_DEVICE_CONFIG(_config) +#define MCFG_VOODOO_FBMEM(_value) \ + voodoo_device::static_set_fbmem(*device, _value); -#define MCFG_3DFX_VOODOO_2_ADD(_tag, _clock, _config) \ - MCFG_DEVICE_ADD(_tag, VOODOO_2, _clock) \ - MCFG_DEVICE_CONFIG(_config) +#define MCFG_VOODOO_TMUMEM(_value1, _value2) \ + voodoo_device::static_set_tmumem(*device, _value1, _value2); -#define MCFG_3DFX_VOODOO_BANSHEE_ADD(_tag, _clock, _config) \ - MCFG_DEVICE_ADD(_tag, VOODOO_BANSHEE, _clock) \ - MCFG_DEVICE_CONFIG(_config) +#define MCFG_VOODOO_SCREEN_TAG(_tag) \ + voodoo_device::static_set_screen_tag(*device, _tag); -#define MCFG_3DFX_VOODOO_3_ADD(_tag, _clock, _config) \ - MCFG_DEVICE_ADD(_tag, VOODOO_3, _clock) \ - MCFG_DEVICE_CONFIG(_config) +#define MCFG_VOODOO_CPU_TAG(_tag) \ + voodoo_device::static_set_cpu_tag(*device, _tag); + +#define MCFG_VOODOO_VBLANK_CB(_devcb) \ + devcb = &voodoo_device::static_set_vblank_callback(*device, DEVCB2_##_devcb); + +#define MCFG_VOODOO_STALL_CB(_devcb) \ + devcb = &voodoo_device::static_set_stall_callback(*device, DEVCB2_##_devcb); + /*************************************************************************** FUNCTION PROTOTYPES @@ -87,11 +90,29 @@ public: voodoo_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); ~voodoo_device(); + + static void static_set_fbmem(device_t &device, int value) { downcast(device).m_fbmem = value; } + static void static_set_tmumem(device_t &device, int value1, int value2) { downcast(device).m_tmumem0 = value1; downcast(device).m_tmumem1 = value2; } + static void static_set_screen_tag(device_t &device, const char *tag) { downcast(device).m_screen = tag; } + static void static_set_cpu_tag(device_t &device, const char *tag) { downcast(device).m_cputag = tag; } + template static devcb2_base &static_set_vblank_callback(device_t &device, _Object object) { return downcast(device).m_vblank.set_callback(object); } + template static devcb2_base &static_set_stall_callback(device_t &device, _Object object) { return downcast(device).m_stall.set_callback(object); } + DECLARE_READ32_MEMBER( voodoo_r ); DECLARE_WRITE32_MEMBER( voodoo_w ); // access to legacy token struct voodoo_state *token() const { assert(m_token != NULL); return m_token; } + void common_start_voodoo(UINT8 type); + + UINT8 m_fbmem; + UINT8 m_tmumem0; + UINT8 m_tmumem1; + const char * m_screen; + const char * m_cputag; + devcb2_write_line m_vblank; + devcb2_write_line m_stall; + protected: // device-level overrides virtual void device_config_complete(); diff --git a/src/mame/drivers/funkball.c b/src/mame/drivers/funkball.c index f3dce777ba2..0e0530077dd 100644 --- a/src/mame/drivers/funkball.c +++ b/src/mame/drivers/funkball.c @@ -847,17 +847,6 @@ UINT32 funkball_state::screen_update_funkball(screen_device &screen, bitmap_rgb3 return 0; } -static const voodoo_config voodoo_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 0,// tmumem1; - "screen",// screen; - "maincpu",// cputag; - DEVCB_NULL,// vblank; - DEVCB_NULL// stall; -}; - static MACHINE_CONFIG_START( funkball, funkball_state ) MCFG_CPU_ADD("maincpu", MEDIAGX, 66666666*3.5) // 66,6 MHz x 3.5 MCFG_CPU_PROGRAM_MAP(funkball_map) @@ -874,7 +863,11 @@ static MACHINE_CONFIG_START( funkball, funkball_state ) MCFG_ATA_INTERFACE_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w)) /* video hardware */ - MCFG_3DFX_VOODOO_1_ADD("voodoo_0", STD_VOODOO_1_CLOCK, voodoo_intf) + MCFG_DEVICE_ADD("voodoo_0", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,0) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/gticlub.c b/src/mame/drivers/gticlub.c index a216765e52c..e081580c9bd 100644 --- a/src/mame/drivers/gticlub.c +++ b/src/mame/drivers/gticlub.c @@ -1038,28 +1038,6 @@ MACHINE_RESET_MEMBER(gticlub_state,hangplt) m_dsp2->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } -static const voodoo_config voodoo_l_intf = -{ - 2, // fbmem; - 2,// tmumem0; - 2,// tmumem1; - "lscreen",// screen; - "dsp",// cputag; - DEVCB_DRIVER_LINE_MEMBER(gticlub_state,voodoo_vblank_0),// vblank; - DEVCB_NULL// stall; -}; - -static const voodoo_config voodoo_r_intf = -{ - 2, // fbmem; - 2,// tmumem0; - 2,// tmumem1; - "rscreen",// screen; - "dsp2",// cputag; - DEVCB_DRIVER_LINE_MEMBER(gticlub_state,voodoo_vblank_1),// vblank; - DEVCB_NULL// stall; -}; - static MACHINE_CONFIG_START( hangplt, gticlub_state ) /* basic machine hardware */ @@ -1090,8 +1068,19 @@ static MACHINE_CONFIG_START( hangplt, gticlub_state ) MCFG_DEVICE_ADD("k056230", K056230, 0) MCFG_K056230_CPU("maincpu") - MCFG_3DFX_VOODOO_1_ADD("voodoo0", STD_VOODOO_1_CLOCK, voodoo_l_intf) - MCFG_3DFX_VOODOO_1_ADD("voodoo1", STD_VOODOO_1_CLOCK, voodoo_r_intf) + MCFG_DEVICE_ADD("voodoo0", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(2,2) + MCFG_VOODOO_SCREEN_TAG("lscreen") + MCFG_VOODOO_CPU_TAG("dsp") + MCFG_VOODOO_VBLANK_CB(WRITELINE(gticlub_state,voodoo_vblank_0)) + + MCFG_DEVICE_ADD("voodoo1", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(2,2) + MCFG_VOODOO_SCREEN_TAG("rscreen") + MCFG_VOODOO_CPU_TAG("dsp2") + MCFG_VOODOO_VBLANK_CB(WRITELINE(gticlub_state,voodoo_vblank_1)) MCFG_DEVICE_ADD("k033906_1", K033906, 0) MCFG_K033906_VOODOO("voodoo0") diff --git a/src/mame/drivers/hornet.c b/src/mame/drivers/hornet.c index 5993c70e653..65b28167ae7 100644 --- a/src/mame/drivers/hornet.c +++ b/src/mame/drivers/hornet.c @@ -960,17 +960,6 @@ ADC12138_IPT_CONVERT_CB(hornet_state::adc12138_input_callback) return (double)(value) / 2047.0; } -static const voodoo_config hornet_voodoo_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 0,// tmumem1; - "screen",// screen; - "dsp",// cputag; - DEVCB_DRIVER_LINE_MEMBER(hornet_state,voodoo_vblank_0),// vblank; - DEVCB_NULL// stall; -}; - static MACHINE_CONFIG_START( hornet, hornet_state ) /* basic machine hardware */ @@ -990,7 +979,12 @@ static MACHINE_CONFIG_START( hornet, hornet_state ) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") - MCFG_3DFX_VOODOO_1_ADD("voodoo0", STD_VOODOO_1_CLOCK, hornet_voodoo_intf) + MCFG_DEVICE_ADD("voodoo0", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,0) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("dsp") + MCFG_VOODOO_VBLANK_CB(WRITELINE(hornet_state,voodoo_vblank_0)) MCFG_DEVICE_ADD("k033906_1", K033906, 0) MCFG_K033906_VOODOO("voodoo0") @@ -1050,28 +1044,6 @@ MACHINE_RESET_MEMBER(hornet_state,hornet_2board) } } -static const voodoo_config voodoo_l_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 0,// tmumem1; - "lscreen",// screen; - "dsp",// cputag; - DEVCB_DRIVER_LINE_MEMBER(hornet_state,voodoo_vblank_0),// vblank; - DEVCB_NULL// stall; -}; - -static const voodoo_config voodoo_r_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 0,// tmumem1; - "rscreen",// screen; - "dsp2",// cputag; - DEVCB_DRIVER_LINE_MEMBER(hornet_state,voodoo_vblank_1),// vblank; - DEVCB_NULL// stall; -}; - static MACHINE_CONFIG_DERIVED( hornet_2board, hornet ) MCFG_CPU_ADD("dsp2", ADSP21062, XTAL_36MHz) @@ -1091,8 +1063,20 @@ static MACHINE_CONFIG_DERIVED( hornet_2board, hornet ) MCFG_K037122_PALETTE("palette") MCFG_DEVICE_REMOVE("voodoo0") - MCFG_3DFX_VOODOO_1_ADD("voodoo0", STD_VOODOO_1_CLOCK, voodoo_l_intf) - MCFG_3DFX_VOODOO_1_ADD("voodoo1", STD_VOODOO_1_CLOCK, voodoo_r_intf) + + MCFG_DEVICE_ADD("voodoo0", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,0) + MCFG_VOODOO_SCREEN_TAG("lscreen") + MCFG_VOODOO_CPU_TAG("dsp") + MCFG_VOODOO_VBLANK_CB(WRITELINE(hornet_state,voodoo_vblank_0)) + + MCFG_DEVICE_ADD("voodoo1", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,0) + MCFG_VOODOO_SCREEN_TAG("rscreen") + MCFG_VOODOO_CPU_TAG("dsp2") + MCFG_VOODOO_VBLANK_CB(WRITELINE(hornet_state,voodoo_vblank_1)) MCFG_DEVICE_ADD("k033906_2", K033906, 0) MCFG_K033906_VOODOO("voodoo1") @@ -1128,12 +1112,21 @@ static MACHINE_CONFIG_DERIVED( terabrst, hornet_2board ) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( hornet_2board_v2, hornet_2board ) - MCFG_DEVICE_REMOVE("voodoo0") - MCFG_3DFX_VOODOO_2_ADD("voodoo0", STD_VOODOO_2_CLOCK, voodoo_l_intf) - + MCFG_DEVICE_ADD("voodoo0", VOODOO_2, STD_VOODOO_2_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,0) + MCFG_VOODOO_SCREEN_TAG("lscreen") + MCFG_VOODOO_CPU_TAG("dsp") + MCFG_VOODOO_VBLANK_CB(WRITELINE(hornet_state,voodoo_vblank_0)) + MCFG_DEVICE_REMOVE("voodoo1") - MCFG_3DFX_VOODOO_2_ADD("voodoo1", STD_VOODOO_2_CLOCK, voodoo_r_intf) + MCFG_DEVICE_ADD("voodoo1", VOODOO_2, STD_VOODOO_2_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,0) + MCFG_VOODOO_SCREEN_TAG("rscreen") + MCFG_VOODOO_CPU_TAG("dsp2") + MCFG_VOODOO_VBLANK_CB(WRITELINE(hornet_state,voodoo_vblank_1)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( sscope2, hornet_2board_v2) diff --git a/src/mame/drivers/iteagle.c b/src/mame/drivers/iteagle.c index 2727aa5c008..9b4f0a78796 100644 --- a/src/mame/drivers/iteagle.c +++ b/src/mame/drivers/iteagle.c @@ -181,17 +181,6 @@ INPUT_PORTS_END * *************************************/ -static const voodoo_config iteagle_voodoo_intf = -{ - 16, // fbmem; - 0,// tmumem0; - 0,// tmumem1; - "screen",// screen; - "maincpu",// cputag; - DEVCB_DRIVER_LINE_MEMBER(iteagle_state,vblank_assert),// vblank; - DEVCB_NULL// stall; -}; - static const mips3_config r4310_config = { 16384, /* code cache size */ @@ -217,7 +206,11 @@ static MACHINE_CONFIG_START( gtfore, iteagle_state ) MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239) MCFG_SCREEN_UPDATE_DRIVER(iteagle_state, screen_update_iteagle) - MCFG_3DFX_VOODOO_BANSHEE_ADD("voodoo", STD_VOODOO_BANSHEE_CLOCK, iteagle_voodoo_intf) + MCFG_DEVICE_ADD("voodoo", VOODOO_BANSHEE, STD_VOODOO_BANSHEE_CLOCK) + MCFG_VOODOO_FBMEM(16) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") + MCFG_VOODOO_VBLANK_CB(WRITELINE(iteagle_state,vblank_assert)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/magictg.c b/src/mame/drivers/magictg.c index 6330a7648f7..159c2cba6af 100644 --- a/src/mame/drivers/magictg.c +++ b/src/mame/drivers/magictg.c @@ -888,27 +888,6 @@ static const mips3_config config = }; #endif -static const voodoo_config voodoo_1_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 0,// tmumem1; - "screen",// screen; - "mips",// cputag; - DEVCB_NULL,// vblank; - DEVCB_NULL// stall; -}; - -static const voodoo_config voodoo_2_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 0,// tmumem1; - "screen",// screen; - "mips",// cputag; - DEVCB_NULL,//vblank_assert vblank; - DEVCB_NULL// voodoo_stall stall; -}; /************************************* * * Machine driver @@ -942,9 +921,17 @@ static MACHINE_CONFIG_START( magictg, magictg_state ) #endif MCFG_PCI_BUS_LEGACY_DEVICE(9, "zr36120", zr36120_pci_r, zr36120_pci_w) - MCFG_3DFX_VOODOO_1_ADD("voodoo_0", STD_VOODOO_1_CLOCK, voodoo_1_intf) + MCFG_DEVICE_ADD("voodoo_0", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,0) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("mips") - MCFG_3DFX_VOODOO_1_ADD("voodoo_1", STD_VOODOO_1_CLOCK, voodoo_2_intf) + MCFG_DEVICE_ADD("voodoo_1", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,0) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("mips") MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/nwk-tr.c b/src/mame/drivers/nwk-tr.c index 7bd5f381a2f..94d51b049e0 100644 --- a/src/mame/drivers/nwk-tr.c +++ b/src/mame/drivers/nwk-tr.c @@ -721,17 +721,6 @@ void nwktr_state::machine_reset() m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } -static const voodoo_config voodoo_intf = -{ - 2, // fbmem; - 2,// tmumem0; - 2,// tmumem1; - "screen",// screen; - "dsp",// cputag; - DEVCB_DRIVER_LINE_MEMBER(nwktr_state,voodoo_vblank_0),// vblank; - DEVCB_NULL// stall; -}; - static MACHINE_CONFIG_START( nwktr, nwktr_state ) /* basic machine hardware */ @@ -756,7 +745,12 @@ static MACHINE_CONFIG_START( nwktr, nwktr_state ) MCFG_K033906_VOODOO("voodoo0") /* video hardware */ - MCFG_3DFX_VOODOO_1_ADD("voodoo0", STD_VOODOO_1_CLOCK, voodoo_intf) + MCFG_DEVICE_ADD("voodoo0", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(2,2) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("dsp") + MCFG_VOODOO_VBLANK_CB(WRITELINE(nwktr_state,voodoo_vblank_0)) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/savquest.c b/src/mame/drivers/savquest.c index edf4ffa2714..ab7ca24516c 100644 --- a/src/mame/drivers/savquest.c +++ b/src/mame/drivers/savquest.c @@ -659,17 +659,6 @@ WRITE_LINE_MEMBER(savquest_state::vblank_assert) { } -static const voodoo_config voodoo_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 4,// tmumem1; - "screen",// screen; - "maincpu",// cputag; - DEVCB_DRIVER_LINE_MEMBER(savquest_state,vblank_assert),// vblank; - DEVCB_NULL// stall; -}; - static MACHINE_CONFIG_START( savquest, savquest_state ) MCFG_CPU_ADD("maincpu", PENTIUM2, 450000000) // actually Pentium II 450 MCFG_CPU_PROGRAM_MAP(savquest_map) @@ -691,7 +680,12 @@ static MACHINE_CONFIG_START( savquest, savquest_state ) /* video hardware */ MCFG_FRAGMENT_ADD( pcvideo_s3_vga ) - MCFG_3DFX_VOODOO_2_ADD("voodoo", STD_VOODOO_2_CLOCK, voodoo_intf) + MCFG_DEVICE_ADD("voodoo", VOODOO_2, STD_VOODOO_2_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,4) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") + MCFG_VOODOO_VBLANK_CB(WRITELINE(savquest_state,vblank_assert)) MACHINE_CONFIG_END ROM_START( savquest ) diff --git a/src/mame/drivers/seattle.c b/src/mame/drivers/seattle.c index 23c62ff9701..12aab45df14 100644 --- a/src/mame/drivers/seattle.c +++ b/src/mame/drivers/seattle.c @@ -2513,17 +2513,6 @@ static const mips3_config r5000_config = SYSTEM_CLOCK /* system clock rate */ }; -static const voodoo_config voodoo_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 0,// tmumem1; - "screen",// screen; - "maincpu",// cputag; - DEVCB_DRIVER_LINE_MEMBER(seattle_state,vblank_assert),// vblank; - DEVCB_DRIVER_LINE_MEMBER(seattle_state,voodoo_stall)// stall; -}; - static MACHINE_CONFIG_START( seattle_common, seattle_state ) /* basic machine hardware */ @@ -2537,7 +2526,13 @@ static MACHINE_CONFIG_START( seattle_common, seattle_state ) MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE(seattle_state, ide_interrupt)) MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE("maincpu", AS_PROGRAM) - MCFG_3DFX_VOODOO_1_ADD("voodoo", STD_VOODOO_1_CLOCK, voodoo_intf) + MCFG_DEVICE_ADD("voodoo", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,0) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") + MCFG_VOODOO_VBLANK_CB(WRITELINE(seattle_state,vblank_assert)) + MCFG_VOODOO_STALL_CB(WRITELINE(seattle_state,voodoo_stall)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2581,17 +2576,6 @@ static MACHINE_CONFIG_DERIVED( seattle200_widget, seattle200 ) MCFG_SMC91C94_IRQ_CALLBACK(WRITELINE(seattle_state, ethernet_interrupt)) MACHINE_CONFIG_END -static const voodoo_config voodoo_2_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 4,// tmumem1; - "screen",// screen; - "maincpu",// cputag; - DEVCB_DRIVER_LINE_MEMBER(seattle_state,vblank_assert),// vblank; - DEVCB_DRIVER_LINE_MEMBER(seattle_state,voodoo_stall)// stall; -}; - static MACHINE_CONFIG_DERIVED( flagstaff, seattle_common ) MCFG_CPU_REPLACE("maincpu", R5000LE, SYSTEM_CLOCK*4) MCFG_CPU_CONFIG(r5000_config) @@ -2601,7 +2585,13 @@ static MACHINE_CONFIG_DERIVED( flagstaff, seattle_common ) MCFG_SMC91C94_IRQ_CALLBACK(WRITELINE(seattle_state, ethernet_interrupt)) MCFG_DEVICE_REMOVE("voodoo") - MCFG_3DFX_VOODOO_1_ADD("voodoo", STD_VOODOO_1_CLOCK, voodoo_2_intf) + MCFG_DEVICE_ADD("voodoo", VOODOO_1, STD_VOODOO_1_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,4) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") + MCFG_VOODOO_VBLANK_CB(WRITELINE(seattle_state,vblank_assert)) + MCFG_VOODOO_STALL_CB(WRITELINE(seattle_state,voodoo_stall)) MACHINE_CONFIG_END // Per game configurations diff --git a/src/mame/drivers/vegas.c b/src/mame/drivers/vegas.c index b360efeb27b..92515bf749b 100644 --- a/src/mame/drivers/vegas.c +++ b/src/mame/drivers/vegas.c @@ -2213,17 +2213,6 @@ static const mips3_config r5000_config = SYSTEM_CLOCK /* system clock rate */ }; -static const voodoo_config voodoo_intf = -{ - 2, // fbmem; - 4,// tmumem0; - 4,// tmumem1; - "screen",// screen; - "maincpu",// cputag; - DEVCB_DRIVER_LINE_MEMBER(vegas_state,vblank_assert),// vblank; - DEVCB_NULL// stall; -}; - static MACHINE_CONFIG_START( vegascore, vegas_state ) /* basic machine hardware */ @@ -2240,7 +2229,12 @@ static MACHINE_CONFIG_START( vegascore, vegas_state ) MCFG_SMC91C94_ADD("ethernet") MCFG_SMC91C94_IRQ_CALLBACK(WRITELINE(vegas_state, ethernet_interrupt)) - MCFG_3DFX_VOODOO_2_ADD("voodoo", STD_VOODOO_2_CLOCK, voodoo_intf) + MCFG_DEVICE_ADD("voodoo", VOODOO_2, STD_VOODOO_2_CLOCK) + MCFG_VOODOO_FBMEM(2) + MCFG_VOODOO_TMUMEM(4,4) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") + MCFG_VOODOO_VBLANK_CB(WRITELINE(vegas_state,vblank_assert)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2267,22 +2261,16 @@ static MACHINE_CONFIG_DERIVED( vegas32m, vegascore ) MACHINE_CONFIG_END -static const voodoo_config vegasban_voodoo_intf = -{ - 16, // fbmem; - 0,// tmumem0; - 0,// tmumem1; - "screen",// screen; - "maincpu",// cputag; - DEVCB_DRIVER_LINE_MEMBER(vegas_state,vblank_assert),// vblank; - DEVCB_NULL// stall; -}; static MACHINE_CONFIG_DERIVED( vegasban, vegascore ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(vegas_map_32mb) MCFG_DEVICE_REMOVE("voodoo") - MCFG_3DFX_VOODOO_BANSHEE_ADD("voodoo", STD_VOODOO_BANSHEE_CLOCK, vegasban_voodoo_intf) + MCFG_DEVICE_ADD("voodoo", VOODOO_BANSHEE, STD_VOODOO_BANSHEE_CLOCK) + MCFG_VOODOO_FBMEM(16) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") + MCFG_VOODOO_VBLANK_CB(WRITELINE(vegas_state,vblank_assert)) MACHINE_CONFIG_END @@ -2292,7 +2280,11 @@ static MACHINE_CONFIG_DERIVED( vegasv3, vegas32m ) MCFG_CPU_PROGRAM_MAP(vegas_map_8mb) MCFG_DEVICE_REMOVE("voodoo") - MCFG_3DFX_VOODOO_3_ADD("voodoo", STD_VOODOO_3_CLOCK, vegasban_voodoo_intf) + MCFG_DEVICE_ADD("voodoo", VOODOO_3, STD_VOODOO_3_CLOCK) + MCFG_VOODOO_FBMEM(16) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") + MCFG_VOODOO_VBLANK_CB(WRITELINE(vegas_state,vblank_assert)) MACHINE_CONFIG_END @@ -2302,7 +2294,11 @@ static MACHINE_CONFIG_DERIVED( denver, vegascore ) MCFG_CPU_PROGRAM_MAP(vegas_map_32mb) MCFG_DEVICE_REMOVE("voodoo") - MCFG_3DFX_VOODOO_3_ADD("voodoo", STD_VOODOO_3_CLOCK, vegasban_voodoo_intf) + MCFG_DEVICE_ADD("voodoo", VOODOO_3, STD_VOODOO_3_CLOCK) + MCFG_VOODOO_FBMEM(16) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") + MCFG_VOODOO_VBLANK_CB(WRITELINE(vegas_state,vblank_assert)) MACHINE_CONFIG_END // Per driver configs diff --git a/src/mame/drivers/viper.c b/src/mame/drivers/viper.c index 2ae102e774b..24d547bfe92 100644 --- a/src/mame/drivers/viper.c +++ b/src/mame/drivers/viper.c @@ -2029,17 +2029,6 @@ void viper_state::machine_reset() identify_device[67] = 0x00f0; /* 67: minimum PIO transfer cycle time without flow control */ } -static const voodoo_config voodoo_intf = -{ - 8, // fbmem; - 0,// tmumem0; - 0,// tmumem1; - "screen",// screen; - "maincpu",// cputag; - DEVCB_DRIVER_LINE_MEMBER(viper_state,voodoo_vblank),// vblank; - DEVCB_NULL// stall; -}; - static MACHINE_CONFIG_START( viper, viper_state ) /* basic machine hardware */ @@ -2054,7 +2043,11 @@ static MACHINE_CONFIG_START( viper, viper_state ) MCFG_ATA_INTERFACE_ADD("ata", ata_devices, "hdd", NULL, true) - MCFG_3DFX_VOODOO_3_ADD("voodoo", STD_VOODOO_3_CLOCK, voodoo_intf) + MCFG_DEVICE_ADD("voodoo", VOODOO_3, STD_VOODOO_3_CLOCK) + MCFG_VOODOO_FBMEM(8) + MCFG_VOODOO_SCREEN_TAG("screen") + MCFG_VOODOO_CPU_TAG("maincpu") + MCFG_VOODOO_VBLANK_CB(WRITELINE(viper_state,voodoo_vblank)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER)