diff options
Diffstat (limited to 'src/devices/bus/pci/ess_maestro.cpp')
-rw-r--r-- | src/devices/bus/pci/ess_maestro.cpp | 117 |
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) +{ +} |