55
56
UINT8 m_68k_to_z80_data;
57
58
UINT16 m_bsmt_data;
59
DECLARE_WRITE16_MEMBER(palette_w);
60
DECLARE_READ16_MEMBER(read_from_z80);
61
DECLARE_WRITE16_MEMBER(write_to_z80);
62
DECLARE_READ16_MEMBER(irq_ack_r);
63
DECLARE_READ8_MEMBER(sound_irq_clear);
64
DECLARE_WRITE8_MEMBER(controls_mux);
65
DECLARE_READ8_MEMBER(controls_r);
66
DECLARE_WRITE8_MEMBER(write_index_to_68k);
67
DECLARE_WRITE8_MEMBER(write_data_to_68k);
68
DECLARE_READ8_MEMBER(read_index_from_68k);
69
DECLARE_READ8_MEMBER(read_data_from_68k);
70
DECLARE_READ8_MEMBER(bsmt_status_r);
71
DECLARE_WRITE8_MEMBER(bsmt_data_lo_w);
72
DECLARE_WRITE8_MEMBER(bsmt_data_hi_w);
73
DECLARE_WRITE8_MEMBER(bsmt_reg_w);
60
static WRITE16_HANDLER(palette_w)
76
WRITE16_MEMBER(tapatune_state::palette_w)
62
tapatune_state *state = space->machine().driver_data<tapatune_state>();
64
79
//logerror("Palette write: offset = %02x, data = %04x, mask = %04x\n", offset, data, mem_mask );
67
82
case 0: // address register
68
state->m_palette_write_address = ((data >> 8) & 0xff) * 3;
83
m_palette_write_address = ((data >> 8) & 0xff) * 3;
70
85
case 1: // palette data
71
state->m_paletteram[state->m_palette_write_address++] = (data >> 8) & 0xff;
86
m_paletteram[m_palette_write_address++] = (data >> 8) & 0xff;
73
88
case 2: // unknown?
78
static READ16_HANDLER(read_from_z80)
93
READ16_MEMBER(tapatune_state::read_from_z80)
80
tapatune_state *state = space->machine().driver_data<tapatune_state>();
82
//logerror("Reading data from Z80: index = %02x, data = %02x\n", state->m_z80_to_68k_index, state->m_z80_to_68k_data );
96
//logerror("Reading data from Z80: index = %02x, data = %02x\n", m_z80_to_68k_index, m_z80_to_68k_data );
87
return ((UINT16)state->m_z80_to_68k_data << 8) | (state->m_z80_to_68k_index);
101
return ((UINT16)m_z80_to_68k_data << 8) | (m_z80_to_68k_index);
93
static WRITE16_HANDLER(write_to_z80)
107
WRITE16_MEMBER(tapatune_state::write_to_z80)
95
tapatune_state *state = space->machine().driver_data<tapatune_state>();
100
113
//if ( (data >> 8) & 0xff )
101
114
// logerror("Command to Z80: %04x\n", data);
102
state->m_68k_to_z80_index = data & 0xff;
103
state->m_68k_to_z80_data = (data >> 8) & 0xff;
104
cputag_set_input_line(space->machine(), "maincpu", 3, CLEAR_LINE);
115
m_68k_to_z80_index = data & 0xff;
116
m_68k_to_z80_data = (data >> 8) & 0xff;
117
cputag_set_input_line(machine(), "maincpu", 3, CLEAR_LINE);
111
static READ16_HANDLER(irq_ack_r)
124
READ16_MEMBER(tapatune_state::irq_ack_r)
113
cputag_set_input_line(space->machine(), "maincpu", 2, CLEAR_LINE);
126
cputag_set_input_line(machine(), "maincpu", 2, CLEAR_LINE);
117
static ADDRESS_MAP_START( tapatune_map, AS_PROGRAM, 16 )
130
static ADDRESS_MAP_START( tapatune_map, AS_PROGRAM, 16, tapatune_state )
118
131
AM_RANGE(0x000000, 0x2fffff) AM_ROM // program rom and graphics roms
119
AM_RANGE(0x300000, 0x31ffff) AM_RAM AM_BASE_MEMBER(tapatune_state, m_videoram) // hardware video buffer
132
AM_RANGE(0x300000, 0x31ffff) AM_RAM AM_SHARE("videoram") // hardware video buffer
120
133
AM_RANGE(0x320000, 0x327fff) AM_RAM // workram
121
134
AM_RANGE(0x328000, 0x32ffff) AM_RAM
122
135
AM_RANGE(0x330000, 0x337fff) AM_RAM // ram used as system video buffer
124
137
AM_RANGE(0x400000, 0x400003) AM_READWRITE(read_from_z80, write_to_z80)
125
138
AM_RANGE(0x400010, 0x400011) AM_READ(irq_ack_r)
126
139
AM_RANGE(0x600000, 0x600005) AM_WRITE(palette_w)
127
AM_RANGE(0x800000, 0x800001) AM_DEVWRITE8_MODERN("crtc", mc6845_device, address_w, 0xff00)
128
AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8_MODERN("crtc", mc6845_device, register_r, register_w, 0xff00)
140
AM_RANGE(0x800000, 0x800001) AM_DEVWRITE8("crtc", mc6845_device, address_w, 0xff00)
141
AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0xff00)
131
static READ8_HANDLER(sound_irq_clear)
144
READ8_MEMBER(tapatune_state::sound_irq_clear)
133
cputag_set_input_line(space->machine(), "soundcpu", 0, CLEAR_LINE);
146
cputag_set_input_line(machine(), "soundcpu", 0, CLEAR_LINE);
137
static WRITE8_HANDLER(controls_mux)
150
WRITE8_MEMBER(tapatune_state::controls_mux)
139
tapatune_state *state = space->machine().driver_data<tapatune_state>();
140
152
//logerror("Controls mux written with %02x\n", data);
141
state->m_controls_mux = data;
153
m_controls_mux = data;
144
static READ8_HANDLER(controls_r)
156
READ8_MEMBER(tapatune_state::controls_r)
146
tapatune_state *state = space->machine().driver_data<tapatune_state>();
147
switch( state->m_controls_mux )
158
switch( m_controls_mux )
149
case 0x07: return input_port_read(space->machine(), "DSW1");
150
case 0x08: return input_port_read(space->machine(), "DSW2");
151
case 0x09: return input_port_read(space->machine(), "IN0");
160
case 0x07: return ioport("DSW1")->read();
161
case 0x08: return ioport("DSW2")->read();
162
case 0x09: return ioport("IN0")->read();
152
163
default: return 0xff;
156
static WRITE8_HANDLER(write_index_to_68k)
158
tapatune_state *state = space->machine().driver_data<tapatune_state>();
159
state->m_z80_to_68k_index = data;
162
static WRITE8_HANDLER(write_data_to_68k)
164
tapatune_state *state = space->machine().driver_data<tapatune_state>();
165
state->m_z80_to_68k_data = data;
166
//logerror("Writing data from Z80: index = %02x, data = %02x\n", state->m_z80_to_68k_index, state->m_z80_to_68k_data );
167
cputag_set_input_line(space->machine(), "maincpu", 3, ASSERT_LINE);
170
static READ8_HANDLER(read_index_from_68k)
172
tapatune_state *state = space->machine().driver_data<tapatune_state>();
173
return state->m_68k_to_z80_index;
176
static READ8_HANDLER(read_data_from_68k)
178
tapatune_state *state = space->machine().driver_data<tapatune_state>();
179
//if ( state->m_68k_to_z80_data != 0 )
180
// logerror("Load command from 68K: %02x %02x\n", state->m_68k_to_z80_index, state->m_68k_to_z80_data);
181
return state->m_68k_to_z80_data;
184
static READ8_HANDLER(bsmt_status_r)
186
bsmt2000_device *bsmt = space->machine().device<bsmt2000_device>("bsmt");
167
WRITE8_MEMBER(tapatune_state::write_index_to_68k)
169
m_z80_to_68k_index = data;
172
WRITE8_MEMBER(tapatune_state::write_data_to_68k)
174
m_z80_to_68k_data = data;
175
//logerror("Writing data from Z80: index = %02x, data = %02x\n", m_z80_to_68k_index, m_z80_to_68k_data );
176
cputag_set_input_line(machine(), "maincpu", 3, ASSERT_LINE);
179
READ8_MEMBER(tapatune_state::read_index_from_68k)
181
return m_68k_to_z80_index;
184
READ8_MEMBER(tapatune_state::read_data_from_68k)
186
//if ( m_68k_to_z80_data != 0 )
187
// logerror("Load command from 68K: %02x %02x\n", m_68k_to_z80_index, m_68k_to_z80_data);
188
return m_68k_to_z80_data;
191
READ8_MEMBER(tapatune_state::bsmt_status_r)
193
bsmt2000_device *bsmt = machine().device<bsmt2000_device>("bsmt");
187
194
return (bsmt->read_status() << 7) ^ 0x80;
190
static WRITE8_HANDLER(bsmt_data_lo_w)
192
tapatune_state *state = space->machine().driver_data<tapatune_state>();
193
state->m_bsmt_data = (state->m_bsmt_data & 0xff00) | data;
196
static WRITE8_HANDLER(bsmt_data_hi_w)
198
tapatune_state *state = space->machine().driver_data<tapatune_state>();
199
state->m_bsmt_data = (state->m_bsmt_data & 0x00ff) | (data << 8);
202
static WRITE8_HANDLER(bsmt_reg_w)
204
bsmt2000_device *bsmt = space->machine().device<bsmt2000_device>("bsmt");
205
tapatune_state *state = space->machine().driver_data<tapatune_state>();
207
//logerror("Writing BSMT reg: %02X data: %04X\n", data, state->m_bsmt_data);
197
WRITE8_MEMBER(tapatune_state::bsmt_data_lo_w)
199
m_bsmt_data = (m_bsmt_data & 0xff00) | data;
202
WRITE8_MEMBER(tapatune_state::bsmt_data_hi_w)
204
m_bsmt_data = (m_bsmt_data & 0x00ff) | (data << 8);
207
WRITE8_MEMBER(tapatune_state::bsmt_reg_w)
209
bsmt2000_device *bsmt = machine().device<bsmt2000_device>("bsmt");
212
//logerror("Writing BSMT reg: %02X data: %04X\n", data, m_bsmt_data);
208
213
bsmt->write_reg(data);
209
bsmt->write_data(state->m_bsmt_data);
214
bsmt->write_data(m_bsmt_data);
212
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
217
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, tapatune_state )
213
218
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_WRITENOP
214
219
AM_RANGE(0xe000, 0xefff) AM_RAM
215
220
AM_RANGE(0xf000, 0xffff) AM_RAM
218
static ADDRESS_MAP_START ( sound_io_map, AS_IO, 8)
223
static ADDRESS_MAP_START ( sound_io_map, AS_IO, 8, tapatune_state )
219
224
ADDRESS_MAP_GLOBAL_MASK(0xff)
220
225
AM_RANGE(0x00, 0x00) AM_WRITE(bsmt_data_lo_w)
221
226
AM_RANGE(0x08, 0x08) AM_WRITE(bsmt_data_hi_w)