diff options
| author | 2026-02-18 17:35:56 +0100 | |
|---|---|---|
| committer | 2026-02-18 20:00:32 +0100 | |
| commit | bde51c2bc0005f7533f78ac9f3a729f25c6c2fb2 (patch) | |
| tree | d076cff03ba693dd5e8228900b4b2d7d91932fd3 | |
| parent | 3315ddce505bcce2fbd2cdfdb891101ed5a6f192 (diff) | |
machine/vt82c598mvp.cpp: initial PCI Bridge device
| -rw-r--r-- | src/devices/machine/vt82c598mvp.cpp | 63 | ||||
| -rw-r--r-- | src/devices/machine/vt82c598mvp.h | 40 | ||||
| -rw-r--r-- | src/mame/misc/comebaby.cpp | 12 | ||||
| -rw-r--r-- | src/mame/misc/ez2d.cpp | 2 | ||||
| -rw-r--r-- | src/mame/misc/startouch.cpp | 2 | ||||
| -rw-r--r-- | src/mame/pc/pcipc.cpp | 6 | ||||
| -rw-r--r-- | src/mame/pc/pcipc_via.cpp | 7 | ||||
| -rw-r--r-- | src/mame/pc/quakeat.cpp | 6 |
8 files changed, 120 insertions, 18 deletions
diff --git a/src/devices/machine/vt82c598mvp.cpp b/src/devices/machine/vt82c598mvp.cpp index ca77d961eab..9ad7aaa992e 100644 --- a/src/devices/machine/vt82c598mvp.cpp +++ b/src/devices/machine/vt82c598mvp.cpp @@ -14,7 +14,7 @@ #include "logmacro.h" -DEFINE_DEVICE_TYPE(VT82C598MVP_HOST, vt82c598mvp_host_device, "vt82c598mvp_host", "Via VT82C598MVP \"Apollo MVP3\"") +DEFINE_DEVICE_TYPE(VT82C598MVP_HOST, vt82c598mvp_host_device, "vt82c598mvp_host", "Via VT82C598MVP \"Apollo MVP3\" Host") vt82c598mvp_host_device::vt82c598mvp_host_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : pci_host_device(mconfig, VT82C598MVP_HOST, tag, owner, clock) @@ -36,7 +36,7 @@ void vt82c598mvp_host_device::device_start() m_ram.resize(m_ram_size/4); // TODO: special, uses register 84h to define the size -// add_map(256 * 1024 * 1024, M_MEM | M_PREF, FUNC(vt82c598mvp_host_device::aperture_map)); +// add_map(256 * 1024 * 1024, M_MEM | M_PREF, FUNC(vt82c598mvp_host_device::aperture_map)); save_item(NAME(m_cache_control_1)); save_item(NAME(m_cache_control_2)); @@ -458,3 +458,62 @@ void vt82c598mvp_host_device::map_extra( } +/* + * + * VT82C598MVP Bridge section + * + */ + +DEFINE_DEVICE_TYPE(VT82C598MVP_BRIDGE, vt82c598mvp_bridge_device, "vt82c598mvp_bridge", "Via VT82C598MVP \"Apollo MVP3\" PCI-to-PCI Bridge") + +vt82c598mvp_bridge_device::vt82c598mvp_bridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : pci_bridge_device(mconfig, VT82C598MVP_BRIDGE, tag, owner, clock) +// , m_vga(*this, finder_base::DUMMY_TAG) +{ + set_ids_bridge(0x11068598, 0x00); +} + +void vt82c598mvp_bridge_device::device_start() +{ + pci_bridge_device::device_start(); + + save_item(NAME(m_pci2_flow_control)); + save_item(NAME(m_pci2_master_control)); +} + +void vt82c598mvp_bridge_device::device_reset() +{ + pci_bridge_device::device_reset(); + + std::fill(std::begin(m_pci2_flow_control), std::end(m_pci2_flow_control), 0); + m_pci2_master_control = 0; +} + +void vt82c598mvp_bridge_device::config_map(address_map &map) +{ + pci_bridge_device::config_map(map); + map(0x40, 0x40).lrw8( + NAME([this] () { return m_pci2_flow_control[0]; }), + NAME([this] (offs_t offset, u8 data) { + m_pci2_flow_control[0] = data; + LOG("40h: CPU-to-PCI#2 Flow Control 1 %02x\n", data); + }) + ); + map(0x41, 0x41).lrw8( + NAME([this] () { return m_pci2_flow_control[1]; }), + NAME([this] (offs_t offset, u8 data) { + if (BIT(data, 7)) + m_pci2_flow_control[1] &= ~(1 << 7); + m_pci2_flow_control[1] &= ~0x7e; + m_pci2_flow_control[1] |= (data & 0x7e); + LOG("41h: CPU-to-PCI#2 Flow Control 2 %02x -> %02x\n", data, m_pci2_flow_control[1]); + }) + ); + map(0x42, 0x42).lrw8( + NAME([this] () { return m_pci2_master_control; }), + NAME([this] (offs_t offset, u8 data) { + m_pci2_master_control = data; + LOG("42h: CPU-to-PCI#2 Master Control %02x\n", data); + }) + ); +} diff --git a/src/devices/machine/vt82c598mvp.h b/src/devices/machine/vt82c598mvp.h index de7bfd31f17..63c29284716 100644 --- a/src/devices/machine/vt82c598mvp.h +++ b/src/devices/machine/vt82c598mvp.h @@ -32,7 +32,7 @@ protected: virtual void map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space, uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) override; - virtual void config_map(address_map &map) override ATTR_COLD; + virtual void config_map(address_map &map) override ATTR_COLD; private: required_device<cpu_device> m_host_cpu; @@ -77,8 +77,42 @@ private: u8 m_agp_control; }; -// TODO: bridge +class vt82c598mvp_bridge_device : public pci_bridge_device +{ +public: + /*template <typename T> vt82c598mvp_bridge_device( + const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, + T &&gui_tag + ) : vt82c598mvp_bridge_device(mconfig, tag, owner, clock) + { + set_ids_bridge(xxxxxxxx, 0x00); + //set_multifunction_device(true); + //m_vga.set_tag(std::forward<T>(gui_tag)); + }*/ + + vt82c598mvp_bridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + //vt82c598mvp_bridge_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + +// virtual void map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space, +// uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) override; + + virtual void config_map(address_map &map) override ATTR_COLD; +private: + //required_device<sis630_gui_device> m_vga; + + //virtual void bridge_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; + + u8 m_pci2_flow_control[2]; + u8 m_pci2_master_control; +}; + -DECLARE_DEVICE_TYPE(VT82C598MVP_HOST, vt82c598mvp_host_device) +DECLARE_DEVICE_TYPE(VT82C598MVP_HOST, vt82c598mvp_host_device) +DECLARE_DEVICE_TYPE(VT82C598MVP_BRIDGE, vt82c598mvp_bridge_device) #endif // MAME_MACHINE_VT82C598MVP_H diff --git a/src/mame/misc/comebaby.cpp b/src/mame/misc/comebaby.cpp index e3974b1b42b..63c65e99465 100644 --- a/src/mame/misc/comebaby.cpp +++ b/src/mame/misc/comebaby.cpp @@ -13,9 +13,15 @@ TODO: - In pcipc with a manually rebuilt image will throw an exception in "Internat" module once it loads Windows 98 (and installs the diff drivers); +Notes: +- Game is in cob folder (as "cobdemo.exe"), said folder also has a EEP.ROM that probably needs to + be removed; +- Recycled bin has plenty of .vue and .3ds files; + =================================================================================================== - There also appears to be a sequel which may be running on the same hardware, but which does not seem to have been released. + There also appears to be a sequel which may be running on the same hardware, but which does + not seem to have been released. Come On Baby - Ballympic Heroes! (c) 2001 Other games in this series include: @@ -319,7 +325,7 @@ void comebaby_state::comebaby(machine_config &config) screen.set_visarea(0, 640 - 1, 0, 480 - 1); screen.set_screen_update(PCI_AGP_ID, FUNC(voodoo_3_pci_device::screen_update)); #else - PCI_SLOT(config, "pci:01.0:1", agp_cards, 0, 0, 1, 2, 3, "rivatnt").set_fixed(true); + PCI_SLOT(config, "pci:01.0:1", agp_cards, 1, 0, 1, 2, 3, "rivatnt").set_fixed(true); #endif PCI_SLOT(config, "pci:1", pci_cards, 13, 0, 1, 2, 3, nullptr); PCI_SLOT(config, "pci:2", pci_cards, 14, 1, 2, 3, 0, nullptr); @@ -350,7 +356,7 @@ ROM_START(comebaby) ROM_LOAD("b1120iag.bin", 0x000000, 0x40000, CRC(9b6f95f1) SHA1(65d6a2fea9911593f093b2e2a43d1534b54d60b3) ) DISK_REGION( "pci:07.1:ide1:0:hdd" ) -// DISK_IMAGE( "comebaby", 0, BAD_DUMP SHA1(ea57919319c0b6a1d4abd7822cff028855bf082f) ) +// DISK_IMAGE( "comebaby", 0, BAD_DUMP SHA1(ea57919319c0b6a1d4abd7822cff028855bf082f) ) // rebuilt image with -chs 16383,16,63 DISK_IMAGE( "comebaby", 0, BAD_DUMP SHA1(85ced9e63dd10ef39449d3ea997b2200aa06562d) ) ROM_END diff --git a/src/mame/misc/ez2d.cpp b/src/mame/misc/ez2d.cpp index 2fae2399864..e1b3b8eb4e6 100644 --- a/src/mame/misc/ez2d.cpp +++ b/src/mame/misc/ez2d.cpp @@ -187,7 +187,7 @@ void ez2d_state::cubx(machine_config &config) serport1.cts_handler().set("board4:w83977tf", FUNC(fdc37c93x_device::ncts2_w)); #endif - PCI_SLOT(config, "pci:01.0:1", agp_cards, 0, 0, 1, 2, 3, "rivatnt").set_fixed(true); + PCI_SLOT(config, "pci:01.0:1", agp_cards, 1, 0, 1, 2, 3, "rivatnt").set_fixed(true); } void ez2d_state::ez2d(machine_config &config) diff --git a/src/mame/misc/startouch.cpp b/src/mame/misc/startouch.cpp index 6039a43fc8e..8d83eecea28 100644 --- a/src/mame/misc/startouch.cpp +++ b/src/mame/misc/startouch.cpp @@ -17,7 +17,7 @@ MB Soyo SY-5EH5 or similar (e.g. Biostar M5ATD) 16384 KB RAM Intel Pentium MMX 233 MHz or compatible (e.g. Cyrix M II-300GP 66MHz Bus 3.5x 2.9V) -- Soyo SY-5EH5 uses a VIA Apollo MVP3 chipset with VT82C597 + VT82C586B +- Soyo SY-5EH5 uses a VIA Apollo MVP3 chipset with VT82C598 + VT82C586B - Biostar M5ATD uses an ALi ALADDiN IV+ M1531B + M1543 MicroTouch ISA diff --git a/src/mame/pc/pcipc.cpp b/src/mame/pc/pcipc.cpp index 6e797b229bf..7d6a7972189 100644 --- a/src/mame/pc/pcipc.cpp +++ b/src/mame/pc/pcipc.cpp @@ -755,8 +755,8 @@ void pcipc_state::se440bx2(machine_config &config) I82371EB_USB (config, "pci:07.2", 0); I82371EB_ACPI(config, "pci:07.3", 0); -// i82371eb_acpi_device &acpi(I82371EB_ACPI(config, "pci:07.3", 0)); -// acpi.apmc_en().set("pci:07.0", FUNC(i82371eb_isa_device::apmc_en_w)); +// i82371eb_acpi_device &acpi(I82371EB_ACPI(config, "pci:07.3", 0)); +// acpi.apmc_en().set("pci:07.0", FUNC(i82371eb_isa_device::apmc_en_w)); ACPI_PIIX4 (config, "pci:07.3:acpi", 0); SMBUS (config, "pci:07.3:smbus", 0); @@ -779,7 +779,7 @@ void pcipc_state::se440bx2(machine_config &config) serport1.cts_handler().set("board4:fdc37m707", FUNC(fdc37c93x_device::ncts2_w)); // FIXME: int mapping is unchecked for all slots - PCI_SLOT(config, "pci:01.0:1", agp_cards, 0, 0, 1, 2, 3, "laguna3d"); + PCI_SLOT(config, "pci:01.0:1", agp_cards, 1, 0, 1, 2, 3, "laguna3d"); // TODO: 0c is for YMF740 audio PCI_SLOT(config, "pci:1", pci_cards, 13, 0, 1, 2, 3, nullptr); diff --git a/src/mame/pc/pcipc_via.cpp b/src/mame/pc/pcipc_via.cpp index 99c97329e89..4eaaa3bdb90 100644 --- a/src/mame/pc/pcipc_via.cpp +++ b/src/mame/pc/pcipc_via.cpp @@ -101,14 +101,17 @@ void mvp3_state::mvp3(machine_config &config) PCI_ROOT(config, "pci", 0); // Max 768 MB VT82C598MVP_HOST(config, "pci:00.0", 0, "maincpu", 256*1024*1024); + VT82C598MVP_BRIDGE(config, "pci:01.0", 0 ); vt82c586b_isa_device &isa(VT82C586B_ISA(config, "pci:07.0", XTAL(33'000'000), m_maincpu)); isa.boot_state_hook().set([](u8 data) { /* printf("%02x\n", data); */ }); -// isa.smi().set_inputline("maincpu", INPUT_LINE_SMI); +// isa.smi().set_inputline("maincpu", INPUT_LINE_SMI); // TODO: IDE, USB, ACPI - // TODO: 1 AGP slot, 4 PCI slots + PCI_SLOT(config, "pci:01.0:1", agp_cards, 1, 0, 1, 2, 3, "sis6326_agp"); + + // TODO: 4 PCI slots ISA16_SLOT(config, "board4", 0, "pci:07.0:isabus", isa_internal_devices, "it8661f", true).set_option_machine_config("it8661f", ite_superio_config); ISA16_SLOT(config, "isa1", 0, "pci:07.0:isabus", pc_isa16_cards, nullptr, false); diff --git a/src/mame/pc/quakeat.cpp b/src/mame/pc/quakeat.cpp index fb26225576a..5a7955f830f 100644 --- a/src/mame/pc/quakeat.cpp +++ b/src/mame/pc/quakeat.cpp @@ -212,9 +212,9 @@ void quakeat_state::quake(machine_config &config) ga6la7(config); // TODO: has problems mapping a VGA // (different legacy control method?) -// config.device_remove(PCI_AGP_ID); -// config.device_remove("screen"); -// PCI_SLOT(config, "pci:01.0:1", agp_cards, 0, 0, 1, 2, 3, "rivatnt").set_fixed(true); +// config.device_remove(PCI_AGP_ID); +// config.device_remove("screen"); +// PCI_SLOT(config, "pci:01.0:1", agp_cards, 1, 0, 1, 2, 3, "rivatnt").set_fixed(true); } ROM_START( ga6la7 ) |
