1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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)
{
}
|