summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <lordkale4@gmail.com>2026-02-18 17:35:56 +0100
committer angelosa <lordkale4@gmail.com>2026-02-18 20:00:32 +0100
commitbde51c2bc0005f7533f78ac9f3a729f25c6c2fb2 (patch)
treed076cff03ba693dd5e8228900b4b2d7d91932fd3
parent3315ddce505bcce2fbd2cdfdb891101ed5a6f192 (diff)
machine/vt82c598mvp.cpp: initial PCI Bridge device
-rw-r--r--src/devices/machine/vt82c598mvp.cpp63
-rw-r--r--src/devices/machine/vt82c598mvp.h40
-rw-r--r--src/mame/misc/comebaby.cpp12
-rw-r--r--src/mame/misc/ez2d.cpp2
-rw-r--r--src/mame/misc/startouch.cpp2
-rw-r--r--src/mame/pc/pcipc.cpp6
-rw-r--r--src/mame/pc/pcipc_via.cpp7
-rw-r--r--src/mame/pc/quakeat.cpp6
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 )