summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/pci/ess_maestro.cpp
blob: a6a3107d1ac6c7ff21f49ef5f5615c1a3aaf8f58 (plain) (blame)
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)
{
}