diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index c2d458bd23f..c8557bc60c4 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -5466,6 +5466,8 @@ if (BUSES["PCI"]~=null) then MAME_DIR .. "src/devices/bus/pci/audiowerk2.h", MAME_DIR .. "src/devices/bus/pci/ds2416.cpp", MAME_DIR .. "src/devices/bus/pci/ds2416.h", + MAME_DIR .. "src/devices/bus/pci/ess_maestro.cpp", + MAME_DIR .. "src/devices/bus/pci/ess_maestro.h", MAME_DIR .. "src/devices/bus/pci/geforce.cpp", MAME_DIR .. "src/devices/bus/pci/geforce.h", MAME_DIR .. "src/devices/bus/pci/mga2064w.cpp", diff --git a/src/devices/bus/pci/ess_maestro.cpp b/src/devices/bus/pci/ess_maestro.cpp new file mode 100644 index 00000000000..c32a3b03c3c --- /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 PCI card") +// 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) +{ +} diff --git a/src/devices/bus/pci/ess_maestro.h b/src/devices/bus/pci/ess_maestro.h new file mode 100644 index 00000000000..ad730ca3d96 --- /dev/null +++ b/src/devices/bus/pci/ess_maestro.h @@ -0,0 +1,44 @@ +// license:BSD-3-Clause +// copyright-holders: + +#ifndef MAME_BUS_PCI_ES1946_SOLO1E_H +#define MAME_BUS_PCI_ES1946_SOLO1E_H + +#pragma once + +#include "pci_slot.h" + +class es1946_solo1e_device : public pci_card_device +{ +public: + es1946_solo1e_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + static constexpr feature_type unemulated_features() { return feature::SOUND; } + +protected: + es1946_solo1e_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + +// virtual const tiny_rom_entry *device_rom_region() const override; + +// 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; + + virtual u8 capptr_r() override; + +private: + void extended_map(address_map &map); + void sb_map(address_map &map); + void vcbase_map(address_map &map); + void mpu_map(address_map &map); + void gameport_map(address_map &map); +}; + +DECLARE_DEVICE_TYPE(ES1946_SOLO1E, es1946_solo1e_device) + +#endif // MAME_BUS_PCI_ES1946_SOLO1E_H diff --git a/src/devices/bus/pci/pci_slot.cpp b/src/devices/bus/pci/pci_slot.cpp index 582f4026c96..04ea93b8520 100644 --- a/src/devices/bus/pci/pci_slot.cpp +++ b/src/devices/bus/pci/pci_slot.cpp @@ -9,6 +9,7 @@ #include "aha2940au.h" #include "audiowerk2.h" #include "ds2416.h" +#include "ess_maestro.h" #include "geforce.h" #include "mga2064w.h" #include "opti82c861.h" @@ -128,6 +129,7 @@ void pci_cards(device_slot_interface &device) device.option_add("sonicvibes", SONICVIBES); device.option_add("zr36057", ZR36057_PCI); device.option_add("audiowerk2", AUDIOWERK2); + device.option_add("ess_solo1", ES1946_SOLO1E); // 0x05 - memory controllers // 0x06 - bridge devices diff --git a/src/mame/misc/gammagic.cpp b/src/mame/misc/gammagic.cpp index 88028eb5beb..7f89d83b1c6 100644 --- a/src/mame/misc/gammagic.cpp +++ b/src/mame/misc/gammagic.cpp @@ -12,7 +12,7 @@ TODO: identify packet device command (shutms11 ATAPI returns 0x0208). Seems to be a Toshiba XM-3301 CD/DVD drive according to RAM buffer. -- gammagic: requires Voodoo and an "ESS audio PCI" to boot; +- gammagic: requires Voodoo and a ESS Solo-1/Maestro PCI card family to boot; - 99bottles: "not High Sierra or ISO9660", likely bad (disc-at-once with one track?) @@ -38,7 +38,7 @@ V8000 platform includes: 1 Motherboard MICRONICS M55Hi-Plus PCI/ISA, Chipset INTEL i430HX (TRITON II), 64 MB Ram (4 SIMM M x 16 MB SIMM) On board Sound Blaster Vibra 16C chipset. - [has optional ESS references in dump -AS] + [has reference to an ESS Solo-1/Maestro driver -AS] 1 TOSHIBA CD-ROM or DVD-ROM Drive w/Bootable CD-ROM with Game. 1 OAK SVGA PCI Video Board. 1 Voodoo Graphics PCI Video Board, connected to the monitor.