summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mediagx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mediagx.cpp')
-rw-r--r--src/mame/drivers/mediagx.cpp66
1 files changed, 20 insertions, 46 deletions
diff --git a/src/mame/drivers/mediagx.cpp b/src/mame/drivers/mediagx.cpp
index 61f4cfae945..658d666d67d 100644
--- a/src/mame/drivers/mediagx.cpp
+++ b/src/mame/drivers/mediagx.cpp
@@ -81,17 +81,11 @@
#define SPEEDUP_HACKS 1
-struct speedup_entry
-{
- uint32_t offset;
- uint32_t pc;
-};
-
class mediagx_state : public pcat_base_state
{
public:
- mediagx_state(const machine_config &mconfig, device_type type, const char *tag)
- : pcat_base_state(mconfig, type, tag),
+ mediagx_state(const machine_config &mconfig, device_type type, const char *tag) :
+ pcat_base_state(mconfig, type, tag),
m_ide(*this, "ide"),
m_ramdac(*this, "ramdac"),
m_dmadac(*this, "dac%u", 0U),
@@ -114,6 +108,12 @@ protected:
virtual void video_start() override;
private:
+ struct speedup_entry
+ {
+ uint32_t offset;
+ uint32_t pc;
+ };
+
DECLARE_READ32_MEMBER(disp_ctrl_r);
DECLARE_WRITE32_MEMBER(disp_ctrl_w);
DECLARE_READ32_MEMBER(memory_ctrl_r);
@@ -127,18 +127,7 @@ private:
DECLARE_READ8_MEMBER(io20_r);
DECLARE_WRITE8_MEMBER(io20_w);
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- DECLARE_READ32_MEMBER(speedup0_r);
- DECLARE_READ32_MEMBER(speedup1_r);
- DECLARE_READ32_MEMBER(speedup2_r);
- DECLARE_READ32_MEMBER(speedup3_r);
- DECLARE_READ32_MEMBER(speedup4_r);
- DECLARE_READ32_MEMBER(speedup5_r);
- DECLARE_READ32_MEMBER(speedup6_r);
- DECLARE_READ32_MEMBER(speedup7_r);
- DECLARE_READ32_MEMBER(speedup8_r);
- DECLARE_READ32_MEMBER(speedup9_r);
- DECLARE_READ32_MEMBER(speedup10_r);
- DECLARE_READ32_MEMBER(speedup11_r);
+ template <offs_t N> uint32_t speedup_r(address_space &space) { return generic_speedup(space, N); }
TIMER_DEVICE_CALLBACK_MEMBER(sound_timer_callback);
void draw_char(bitmap_rgb32 &bitmap, const rectangle &cliprect, gfx_element *gfx, int ch, int att, int x, int y);
void draw_framebuffer(bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -220,7 +209,9 @@ private:
int m_speedup_count;
#endif
- static const read32_delegate s_speedup_handlers[];
+ using speedup_handler = std::pair<uint32_t (mediagx_state::*)(address_space &), const char *>;
+ static const speedup_handler s_speedup_handlers[];
+ static const speedup_entry a51site4_speedups[];
};
// Display controller registers
@@ -891,8 +882,7 @@ void mediagx_state::mediagx(machine_config &config)
pcat_common(config);
pci_bus_legacy_device &pcibus(PCI_BUS_LEGACY(config, "pcibus", 0, 0));
- pcibus.set_device_read (18, FUNC(mediagx_state::cx5510_pci_r), this);
- pcibus.set_device_write(18, FUNC(mediagx_state::cx5510_pci_w), this);
+ pcibus.set_device(18, FUNC(mediagx_state::cx5510_pci_r), FUNC(mediagx_state::cx5510_pci_w));
ide_controller_32_device &ide(IDE_CONTROLLER_32(config, "ide").options(ata_devices, "hdd", nullptr, true));
ide.irq_handler().set(m_pic8259_2, FUNC(pic8259_device::ir6_w));
@@ -940,24 +930,11 @@ uint32_t mediagx_state::generic_speedup(address_space &space, int idx)
return m_main_ram[m_speedup_table[idx].offset/4];
}
-READ32_MEMBER(mediagx_state::speedup0_r) { return generic_speedup(space, 0); }
-READ32_MEMBER(mediagx_state::speedup1_r) { return generic_speedup(space, 1); }
-READ32_MEMBER(mediagx_state::speedup2_r) { return generic_speedup(space, 2); }
-READ32_MEMBER(mediagx_state::speedup3_r) { return generic_speedup(space, 3); }
-READ32_MEMBER(mediagx_state::speedup4_r) { return generic_speedup(space, 4); }
-READ32_MEMBER(mediagx_state::speedup5_r) { return generic_speedup(space, 5); }
-READ32_MEMBER(mediagx_state::speedup6_r) { return generic_speedup(space, 6); }
-READ32_MEMBER(mediagx_state::speedup7_r) { return generic_speedup(space, 7); }
-READ32_MEMBER(mediagx_state::speedup8_r) { return generic_speedup(space, 8); }
-READ32_MEMBER(mediagx_state::speedup9_r) { return generic_speedup(space, 9); }
-READ32_MEMBER(mediagx_state::speedup10_r) { return generic_speedup(space, 10); }
-READ32_MEMBER(mediagx_state::speedup11_r) { return generic_speedup(space, 11); }
-
-const read32_delegate mediagx_state::s_speedup_handlers[]
+const mediagx_state::speedup_handler mediagx_state::s_speedup_handlers[]
{
- { FUNC(mediagx_state::speedup0_r), (mediagx_state*)nullptr }, { FUNC(mediagx_state::speedup1_r), (mediagx_state*)nullptr }, { FUNC(mediagx_state::speedup2_r), (mediagx_state*)nullptr }, { FUNC(mediagx_state::speedup3_r), (mediagx_state*)nullptr },
- { FUNC(mediagx_state::speedup4_r), (mediagx_state*)nullptr }, { FUNC(mediagx_state::speedup5_r), (mediagx_state*)nullptr }, { FUNC(mediagx_state::speedup6_r), (mediagx_state*)nullptr }, { FUNC(mediagx_state::speedup7_r), (mediagx_state*)nullptr },
- { FUNC(mediagx_state::speedup8_r), (mediagx_state*)nullptr }, { FUNC(mediagx_state::speedup9_r), (mediagx_state*)nullptr }, { FUNC(mediagx_state::speedup10_r), (mediagx_state*)nullptr }, { FUNC(mediagx_state::speedup11_r), (mediagx_state*)nullptr }
+ { FUNC(mediagx_state::speedup_r<0>) }, { FUNC(mediagx_state::speedup_r<1>) }, { FUNC(mediagx_state::speedup_r<2>) }, { FUNC(mediagx_state::speedup_r<3>) },
+ { FUNC(mediagx_state::speedup_r<4>) }, { FUNC(mediagx_state::speedup_r<5>) }, { FUNC(mediagx_state::speedup_r<6>) }, { FUNC(mediagx_state::speedup_r<7>) },
+ { FUNC(mediagx_state::speedup_r<8>) }, { FUNC(mediagx_state::speedup_r<9>) }, { FUNC(mediagx_state::speedup_r<10>) }, { FUNC(mediagx_state::speedup_r<11>) }
};
#ifdef MAME_DEBUG
@@ -975,18 +952,15 @@ void mediagx_state::install_speedups(const speedup_entry *entries, int count)
m_speedup_table = entries;
m_speedup_count = count;
- for (int i = 0; i < count; i++) {
- read32_delegate func = s_speedup_handlers[i];
- func.late_bind(*this);
- m_maincpu->space(AS_PROGRAM).install_read_handler(entries[i].offset, entries[i].offset + 3, func);
- }
+ for (int i = 0; i < count; i++)
+ m_maincpu->space(AS_PROGRAM).install_read_handler(entries[i].offset, entries[i].offset + 3, read32mo_delegate(*this, s_speedup_handlers[i].first, s_speedup_handlers[i].second));
#ifdef MAME_DEBUG
machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(&mediagx_state::report_speedups, this));
#endif
}
-static const speedup_entry a51site4_speedups[] =
+const mediagx_state::speedup_entry mediagx_state::a51site4_speedups[] =
{
{ 0x5504c, 0x0363e },
{ 0x5f11c, 0x0363e },