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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
// license:BSD-3-Clause
// copyright-holders:AJR
/****************************************************************************
Skeleton driver for Yamaha DX11 synthesizer.
****************************************************************************/
#include "emu.h"
//#include "bus/midi/midi.h"
#include "cpu/m6800/m6801.h"
#include "machine/adc0808.h"
#include "machine/nvram.h"
#include "sound/ymopz.h"
#include "video/hd44780.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
class yamaha_dx11_state : public driver_device
{
public:
yamaha_dx11_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_subcpu(*this, "subcpu")
, m_adc(*this, "adc")
, m_rombank(*this, "rombank")
{
}
void dx11(machine_config &config);
protected:
virtual void machine_start() override;
private:
HD44780_PIXEL_UPDATE(lcd_pixel_update);
void palette_init(palette_device &palette);
void cartridge_bank_w(u8 data);
void main_map(address_map &map);
required_device<hd6301y_cpu_device> m_maincpu;
required_device<hd6301y_cpu_device> m_subcpu;
required_device<adc0808_device> m_adc;
required_memory_bank m_rombank;
};
void yamaha_dx11_state::machine_start()
{
m_rombank->configure_entries(0, 2, memregion("firmware")->base(), 0x8000);
}
HD44780_PIXEL_UPDATE(yamaha_dx11_state::lcd_pixel_update)
{
if (x < 5 && y < 8 && line < 2 && pos < 16)
bitmap.pix(line * 8 + y, pos * 6 + x) = state;
}
void yamaha_dx11_state::palette_init(palette_device &palette)
{
palette.set_pen_color(0, rgb_t(131, 136, 139));
palette.set_pen_color(1, rgb_t( 92, 83, 88));
}
void yamaha_dx11_state::cartridge_bank_w(u8 data)
{
}
void yamaha_dx11_state::main_map(address_map &map)
{
map(0x0000, 0x0027).m(m_maincpu, FUNC(hd6301y_cpu_device::hd6301y_io));
map(0x0040, 0x013f).ram();
map(0x1400, 0x1400).mirror(0x3ff).w(FUNC(yamaha_dx11_state::cartridge_bank_w));
map(0x1800, 0x1801).mirror(0x3fe).rw("opz", FUNC(ym2414_device::read), FUNC(ym2414_device::write));
map(0x1c00, 0x1c01).mirror(0x3fe).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write));
map(0x2000, 0x3fff).ram().share("ram1");
map(0x4000, 0x5fff).ram().share("ram2");
//map(0x6000, 0x7fff).rw(FUNC(yamaha_dx11_state::cartridge_r), FUNC(yamaha_dx11_state::cartridge_w));
map(0x8000, 0xffff).bankr("rombank");
}
static INPUT_PORTS_START(dx11)
INPUT_PORTS_END
void yamaha_dx11_state::dx11(machine_config &config)
{
HD6303Y(config, m_maincpu, 8_MHz_XTAL); // HD63B03YP-N
m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_dx11_state::main_map);
m_maincpu->out_p2_cb().set_membank("rombank").bit(6);
HD6301Y0(config, m_subcpu, 8_MHz_XTAL).set_disable(); // HD63B01Y0D60P
NVRAM(config, "ram1", nvram_device::DEFAULT_ALL_0); // TC5564APL-15 + lithium battery
NVRAM(config, "ram2", nvram_device::DEFAULT_ALL_0); // TC5564APL-15 + lithium battery
M58990(config, m_adc, 8_MHz_XTAL / 16); // M58990P-1; divider not verified (actually clocked by P26 output of sub CPU)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
screen.set_color(rgb_t::green());
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update));
screen.set_size(6*16, 8*2);
screen.set_visarea_full();
screen.set_palette("palette");
PALETTE(config, "palette", FUNC(yamaha_dx11_state::palette_init), 2);
hd44780_device &lcdc(HD44780(config, "lcdc", 0));
lcdc.set_lcd_size(2, 16);
lcdc.set_pixel_update_cb(FUNC(yamaha_dx11_state::lcd_pixel_update));
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
ym2414_device &opz(YM2414(config, "opz", 3.579545_MHz_XTAL));
//opz.irq_handler().set_inputline(m_maincpu, hd6301y_cpu_device::IRQ2_LINE); // IRQ = P51
opz.add_route(0, "lspeaker", 0.60);
opz.add_route(1, "rspeaker", 0.60);
}
ROM_START(dx11)
ROM_REGION(0x10000, "firmware", 0)
ROM_LOAD("dx11_xd820_bo.ic15", 0x00000, 0x10000, CRC(d5355df7) SHA1(a5376c32fcce9e93a22b71ec476b14ff3091153f)) // 27C512
ROM_REGION(0x4000, "subcpu", 0)
ROM_LOAD("hd63b01y0d60p.ic18", 0x0000, 0x4000, NO_DUMP)
ROM_END
SYST(1988, dx11, 0, 0, dx11, dx11, yamaha_dx11_state, empty_init, "Yamaha", "DX11 Digital Programmable Algorithm Synthesizer", MACHINE_IS_SKELETON)
|