summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/pci/ess_maestro.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/pci/ess_maestro.cpp')
-rw-r--r--src/devices/bus/pci/ess_maestro.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/devices/bus/pci/ess_maestro.cpp b/src/devices/bus/pci/ess_maestro.cpp
new file mode 100644
index 00000000000..a6a3107d1ac
--- /dev/null
+++ b/src/devices/bus/pci/ess_maestro.cpp
@@ -0,0 +1,117 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/**************************************************************************************************
+
+ESS Solo-1/Maestro audio PCI cards
+
+- PCI rev 2.2, APM 1.2, ACPI 1.0, PPMI 1.0;
+- ESFM (SoundBlaster clone);
+- Spatializer VBX 3-D as DSP core;
+- 2x game ports;
+- i2s Zoom Video port for MPEG audio;
+- Known to have a poor SnR ratio (around -64 dB)
+
+- Required by misc/gammagic.cpp
+- Embedded on Chaintech 6ESA-2-E100N (Slot 1, I440EX / PIIX4E)
+- Embedded on ASUS ME-99 (Socket 370, SiS620 / SiS5595)
+
+**************************************************************************************************/
+
+#include "emu.h"
+#include "ess_maestro.h"
+
+#define LOG_WARN (1U << 1)
+
+#define VERBOSE (LOG_GENERAL | LOG_WARN)
+//#define LOG_OUTPUT_FUNC osd_printf_info
+#include "logmacro.h"
+
+#define LOGWARN(...) LOGMASKED(LOG_WARN, __VA_ARGS__)
+
+// ES1938 Solo-1
+DEFINE_DEVICE_TYPE(ES1946_SOLO1E, es1946_solo1e_device, "es1946_solo1e", "ES1938/ES1946/ES1969 Solo-1 Audiodrive")
+// ES1969 Solo-1
+// ES1948 Maestro-1
+// ES1968 Maestro-2
+// ES1978 Maestro-2E
+
+
+es1946_solo1e_device::es1946_solo1e_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : pci_card_device(mconfig, type, tag, owner, clock)
+{
+ // TODO: subvendor from EEPROM
+ set_ids(0x125d1969, 0x01, 0x040100, 0x125d1969);
+}
+
+es1946_solo1e_device::es1946_solo1e_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : es1946_solo1e_device(mconfig, ES1946_SOLO1E, tag, owner, clock)
+{
+}
+
+void es1946_solo1e_device::device_add_mconfig(machine_config &config)
+{
+
+}
+
+void es1946_solo1e_device::device_start()
+{
+ pci_card_device::device_start();
+
+ add_map(64, M_IO, FUNC(es1946_solo1e_device::extended_map));
+ add_map(16, M_IO, FUNC(es1946_solo1e_device::sb_map));
+ add_map(16, M_IO, FUNC(es1946_solo1e_device::vcbase_map));
+ add_map( 4, M_IO, FUNC(es1946_solo1e_device::mpu_map));
+ add_map( 4, M_IO, FUNC(es1946_solo1e_device::gameport_map));
+
+ // INTA#
+ intr_pin = 1;
+}
+
+void es1946_solo1e_device::device_reset()
+{
+ pci_card_device::device_reset();
+
+ command = 0x0000;
+ // ACPI capable, Fast back-to-back, medium DEVSEL#
+ status = 0x0290;
+ // TODO: min_gnt 0x02, max_lat = 0x18
+
+ remap_cb();
+}
+
+uint8_t es1946_solo1e_device::capptr_r()
+{
+ return 0xc0;
+}
+
+void es1946_solo1e_device::config_map(address_map &map)
+{
+ pci_card_device::config_map(map);
+// map(0x40, 0x41) Legacy Audio Control
+// map(0x50, 0x53) ES1946 Config
+// map(0x60, 0x61) DDMA Control
+ // ACPI
+ map(0xc0, 0xc0).lr8(NAME([] () { return 0x01; }));
+ map(0xc1, 0xc1).lr8(NAME([] () { return 0x00; })); // NULL pointer
+// map(0xc2, 0xc3) Power Management Capabilities
+// map(0xc4, 0xc5) Power Management Control/Status
+}
+
+void es1946_solo1e_device::extended_map(address_map &map)
+{
+}
+void es1946_solo1e_device::sb_map(address_map &map)
+{
+}
+
+void es1946_solo1e_device::vcbase_map(address_map &map)
+{
+}
+
+void es1946_solo1e_device::mpu_map(address_map &map)
+{
+}
+
+void es1946_solo1e_device::gameport_map(address_map &map)
+{
+}