summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author angelosa <lordkale4@gmail.com>2026-03-19 20:29:21 +0100
committer angelosa <lordkale4@gmail.com>2026-03-19 20:30:07 +0100
commitbc49262fbf33bd85cd5d438e712656b5da7f51a2 (patch)
tree53c9a1b2110fb41bda7d8b97ed57f128b0549117 /src
parent9816d2f2f051788ca0f58e233c3e70066b1be45a (diff)
bus/isa: add the original Microsoft Sound System card
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/isa/isa_cards.cpp2
-rw-r--r--src/devices/bus/isa/wss.cpp73
-rw-r--r--src/devices/bus/isa/wss.h40
-rw-r--r--src/mame/pc/conliner.cpp3
4 files changed, 117 insertions, 1 deletions
diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp
index f16f94fda11..2befce31841 100644
--- a/src/devices/bus/isa/isa_cards.cpp
+++ b/src/devices/bus/isa/isa_cards.cpp
@@ -78,6 +78,7 @@
#include "sblaster.h"
#include "ssi2001.h"
#include "stereo_fx.h"
+#include "wss.h"
// network
#include "3c503.h"
@@ -233,6 +234,7 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("omti8621", ISA16_OMTI8621);
device.option_add("lrk331", LRK331);
device.option_add("hpblp", HPBLP);
+ device.option_add("wss", ISA16_WSS);
// EISA cards
// TODO: move to own block
diff --git a/src/devices/bus/isa/wss.cpp b/src/devices/bus/isa/wss.cpp
new file mode 100644
index 00000000000..24235784237
--- /dev/null
+++ b/src/devices/bus/isa/wss.cpp
@@ -0,0 +1,73 @@
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese
+/**************************************************************************************************
+
+Microsoft Windows Sound System based cards
+
+TODO:
+- Untested;
+- Configuration jumpers;
+
+**************************************************************************************************/
+
+#include "emu.h"
+#include "wss.h"
+
+#include "speaker.h"
+
+DEFINE_DEVICE_TYPE(ISA16_WSS, isa16_wss_device, "wss", "Microsoft Windows Sound System (original design)")
+
+isa16_wss_device::isa16_wss_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, ISA16_WSS, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_opl3(*this, "opl3")
+ , m_soundport(*this, "soundport")
+{
+}
+
+
+void isa16_wss_device::device_add_mconfig(machine_config &config)
+{
+ SPEAKER(config, "speaker", 2).front();
+
+ YMF262(config, m_opl3, XTAL(14'318'181));
+ m_opl3->add_route(0, "speaker", 1.0, 0);
+ m_opl3->add_route(1, "speaker", 1.0, 1);
+ m_opl3->add_route(2, "speaker", 1.0, 0);
+ m_opl3->add_route(3, "speaker", 1.0, 1);
+
+ AD1848(config, m_soundport, 0);
+ m_soundport->irq().set([this] (int state) { m_isa->irq7_w(state); });
+ m_soundport->drq().set([this] (int state) { m_isa->drq0_w(state); });
+
+}
+
+void isa16_wss_device::device_start()
+{
+ set_isa_device();
+ m_isa->set_dma_channel(0, this, false);
+}
+
+void isa16_wss_device::device_reset()
+{
+ remap(AS_IO, 0, 0xffff);
+}
+
+void isa16_wss_device::remap(int space_id, offs_t start, offs_t end)
+{
+ if (space_id == AS_IO)
+ {
+ m_isa->install_device(0x0220, 0x022f, *this, &isa16_wss_device::host_io);
+
+ m_isa->install_device(0x0388, 0x038b, read8sm_delegate(*m_opl3, FUNC(ymf262_device::read)), write8sm_delegate(*m_opl3, FUNC(ymf262_device::write)));
+
+ m_isa->install_device(0x0534, 0x0537, read8sm_delegate(*m_soundport, FUNC(ad1848_device::read)), write8sm_delegate(*m_soundport, FUNC(ad1848_device::write)));
+ }
+}
+
+void isa16_wss_device::host_io(address_map &map)
+{
+ map(0x00, 0x03).rw(m_opl3, FUNC(ymf262_device::read), FUNC(ymf262_device::write));
+ map(0x04, 0x07).rw(m_soundport, FUNC(ad1848_device::read), FUNC(ad1848_device::write));
+ map(0x08, 0x09).rw(m_opl3, FUNC(ymf262_device::read), FUNC(ymf262_device::write));
+}
diff --git a/src/devices/bus/isa/wss.h b/src/devices/bus/isa/wss.h
new file mode 100644
index 00000000000..1fa951a33e3
--- /dev/null
+++ b/src/devices/bus/isa/wss.h
@@ -0,0 +1,40 @@
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese
+
+#ifndef MAME_BUS_ISA_WSS_H
+#define MAME_BUS_ISA_WSS_H
+
+#pragma once
+
+#include "isa.h"
+#include "sound/ad1848.h"
+#include "sound/ymopl.h"
+
+class isa16_wss_device : public device_t,
+ public device_isa16_card_interface
+{
+public:
+ isa16_wss_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ static constexpr feature_type imperfect_features() { return feature::SOUND; }
+
+protected:
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
+
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
+ // virtual ioport_constructor device_input_ports() const override ATTR_COLD;
+
+ virtual void remap(int space_id, offs_t start, offs_t end) override;
+
+private:
+ required_device<ymf262_device> m_opl3;
+ required_device<ad1848_device> m_soundport;
+
+ void host_io(address_map &map);
+};
+
+
+DECLARE_DEVICE_TYPE(ISA16_WSS, isa16_wss_device)
+
+#endif // MAME_BUS_ISA_WSS_H
diff --git a/src/mame/pc/conliner.cpp b/src/mame/pc/conliner.cpp
index 6ecdd8974cb..db440e79d8e 100644
--- a/src/mame/pc/conliner.cpp
+++ b/src/mame/pc/conliner.cpp
@@ -6,7 +6,7 @@
The machines need an online server to work, they won't boot up the games without it.
More info: https://www.recreativas.org/onliner-6342-comatel
- -Gigabyte GA-7VKMP Rev 3.4 motherboard (VIA KM266, VIA T8235, IT8705F, RTL8100BL, ALC650, etc.).
+ -Gigabyte GA-7VKMP Rev 3.4 motherboard (VIA VT8375 KM266, VIA VT8235, IT8705F, RTL8100BL, ALC650, etc.).
-256MB RAM PC2700 DDR
-AMD Athlon AXDA1800DLT3C processor.
-ATI Rage 128 Pro 32MB AGP video.
@@ -75,6 +75,7 @@ INPUT_PORTS_END
void conliner_state::conliner(machine_config &config)
{
+ // Socket A PGA462
PENTIUM(config, m_maincpu, 166'000'000); // Actually an AMD Athlon AXDA1800DLT3C
m_maincpu->set_addrmap(AS_PROGRAM, &conliner_state::mem_map);