40
static WRITE16_HANDLER( fromanc2_sndcmd_w )
42
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
44
soundlatch_w(space, offset, (data >> 8) & 0xff); // 1P (LEFT)
45
soundlatch2_w(space, offset, data & 0xff); // 2P (RIGHT)
47
device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, PULSE_LINE);
48
state->m_sndcpu_nmi_flag = 0;
51
static WRITE16_HANDLER( fromanc2_portselect_w )
53
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
54
state->m_portselect = data;
57
static READ16_HANDLER( fromanc2_keymatrix_r )
59
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
40
WRITE16_MEMBER(fromanc2_state::fromanc2_sndcmd_w)
43
soundlatch_byte_w(space, offset, (data >> 8) & 0xff); // 1P (LEFT)
44
soundlatch2_byte_w(space, offset, data & 0xff); // 2P (RIGHT)
46
device_set_input_line(m_audiocpu, INPUT_LINE_NMI, PULSE_LINE);
47
m_sndcpu_nmi_flag = 0;
50
WRITE16_MEMBER(fromanc2_state::fromanc2_portselect_w)
55
READ16_MEMBER(fromanc2_state::fromanc2_keymatrix_r)
62
switch (state->m_portselect)
64
case 0x01: ret = input_port_read(space->machine(), "KEY0"); break;
65
case 0x02: ret = input_port_read(space->machine(), "KEY1"); break;
66
case 0x04: ret = input_port_read(space->machine(), "KEY2"); break;
67
case 0x08: ret = input_port_read(space->machine(), "KEY3"); break;
61
case 0x01: ret = ioport("KEY0")->read(); break;
62
case 0x02: ret = ioport("KEY1")->read(); break;
63
case 0x04: ret = ioport("KEY2")->read(); break;
64
case 0x08: ret = ioport("KEY3")->read(); break;
68
65
default: ret = 0xffff;
69
logerror("PC:%08X unknown %02X\n", cpu_get_pc(&space->device()), state->m_portselect);
66
logerror("PC:%08X unknown %02X\n", cpu_get_pc(&space.device()), m_portselect);
76
static CUSTOM_INPUT( subcpu_int_r )
78
fromanc2_state *state = field.machine().driver_data<fromanc2_state>();
79
return state->m_subcpu_int_flag & 0x01;
82
static CUSTOM_INPUT( sndcpu_nmi_r )
84
fromanc2_state *state = field.machine().driver_data<fromanc2_state>();
85
return state->m_sndcpu_nmi_flag & 0x01;
88
static CUSTOM_INPUT( subcpu_nmi_r )
90
fromanc2_state *state = field.machine().driver_data<fromanc2_state>();
91
return state->m_subcpu_nmi_flag & 0x01;
94
static WRITE16_HANDLER( fromanc2_eeprom_w )
73
CUSTOM_INPUT_MEMBER(fromanc2_state::subcpu_int_r)
75
return m_subcpu_int_flag & 0x01;
78
CUSTOM_INPUT_MEMBER(fromanc2_state::sndcpu_nmi_r)
80
return m_sndcpu_nmi_flag & 0x01;
83
CUSTOM_INPUT_MEMBER(fromanc2_state::subcpu_nmi_r)
85
return m_subcpu_nmi_flag & 0x01;
88
WRITE16_MEMBER(fromanc2_state::fromanc2_eeprom_w)
96
90
if (ACCESSING_BITS_8_15)
97
input_port_write(space->machine(), "EEPROMOUT", data, 0xffff);
91
ioport("EEPROMOUT")->write(data, 0xffff);
100
static WRITE16_HANDLER( fromancr_eeprom_w )
94
WRITE16_MEMBER(fromanc2_state::fromancr_eeprom_w)
102
96
if (ACCESSING_BITS_0_7)
104
fromancr_gfxbank_w(space->machine(), data & 0xfff8);
105
input_port_write(space->machine(), "EEPROMOUT", data, 0xff);
98
fromancr_gfxbank_w(machine(), data & 0xfff8);
99
ioport("EEPROMOUT")->write(data, 0xff);
109
static WRITE16_HANDLER( fromanc4_eeprom_w )
103
WRITE16_MEMBER(fromanc2_state::fromanc4_eeprom_w)
111
105
if (ACCESSING_BITS_0_7)
112
input_port_write(space->machine(), "EEPROMOUT", data, 0xff);
115
static WRITE16_HANDLER( fromanc2_subcpu_w )
117
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
118
state->m_datalatch1 = data;
120
device_set_input_line(state->m_subcpu, 0, HOLD_LINE);
121
state->m_subcpu_int_flag = 0;
124
static READ16_HANDLER( fromanc2_subcpu_r )
126
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
127
device_set_input_line(state->m_subcpu, INPUT_LINE_NMI, PULSE_LINE);
128
state->m_subcpu_nmi_flag = 0;
130
return (state->m_datalatch_2h << 8) | state->m_datalatch_2l;
133
static READ8_HANDLER( fromanc2_maincpu_r_l )
135
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
136
return state->m_datalatch1 & 0x00ff;
139
static READ8_HANDLER( fromanc2_maincpu_r_h )
141
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
142
state->m_subcpu_int_flag = 1;
144
return (state->m_datalatch1 & 0xff00) >> 8;
147
static WRITE8_HANDLER( fromanc2_maincpu_w_l )
149
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
150
state->m_datalatch_2l = data;
153
static WRITE8_HANDLER( fromanc2_maincpu_w_h )
155
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
156
state->m_datalatch_2h = data;
159
static WRITE8_HANDLER( fromanc2_subcpu_nmi_clr )
161
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
162
state->m_subcpu_nmi_flag = 1;
165
static READ8_HANDLER( fromanc2_sndcpu_nmi_clr )
167
fromanc2_state *state = space->machine().driver_data<fromanc2_state>();
168
state->m_sndcpu_nmi_flag = 1;
106
ioport("EEPROMOUT")->write(data, 0xff);
109
WRITE16_MEMBER(fromanc2_state::fromanc2_subcpu_w)
113
device_set_input_line(m_subcpu, 0, HOLD_LINE);
114
m_subcpu_int_flag = 0;
117
READ16_MEMBER(fromanc2_state::fromanc2_subcpu_r)
119
device_set_input_line(m_subcpu, INPUT_LINE_NMI, PULSE_LINE);
120
m_subcpu_nmi_flag = 0;
122
return (m_datalatch_2h << 8) | m_datalatch_2l;
125
READ8_MEMBER(fromanc2_state::fromanc2_maincpu_r_l)
127
return m_datalatch1 & 0x00ff;
130
READ8_MEMBER(fromanc2_state::fromanc2_maincpu_r_h)
132
m_subcpu_int_flag = 1;
134
return (m_datalatch1 & 0xff00) >> 8;
137
WRITE8_MEMBER(fromanc2_state::fromanc2_maincpu_w_l)
139
m_datalatch_2l = data;
142
WRITE8_MEMBER(fromanc2_state::fromanc2_maincpu_w_h)
144
m_datalatch_2h = data;
147
WRITE8_MEMBER(fromanc2_state::fromanc2_subcpu_nmi_clr)
149
m_subcpu_nmi_flag = 1;
152
READ8_MEMBER(fromanc2_state::fromanc2_sndcpu_nmi_clr)
154
m_sndcpu_nmi_flag = 1;
173
static WRITE8_HANDLER( fromanc2_subcpu_rombank_w )
159
WRITE8_MEMBER(fromanc2_state::fromanc2_subcpu_rombank_w)
175
161
// Change ROM BANK
176
memory_set_bank(space->machine(), "bank1", data & 0x03);
162
membank("bank1")->set_entry(data & 0x03);
178
164
// Change RAM BANK
179
memory_set_bank(space->machine(), "bank2", (data & 0x0c) >> 2);
165
membank("bank2")->set_entry((data & 0x0c) >> 2);
302
static ADDRESS_MAP_START( fromanc2_sound_map, AS_PROGRAM, 8 )
288
static ADDRESS_MAP_START( fromanc2_sound_map, AS_PROGRAM, 8, fromanc2_state )
303
289
AM_RANGE(0x0000, 0xdfff) AM_ROM
304
290
AM_RANGE(0xe000, 0xffff) AM_RAM
307
static ADDRESS_MAP_START( fromanc2_sound_io_map, AS_IO, 8 )
293
static ADDRESS_MAP_START( fromanc2_sound_io_map, AS_IO, 8, fromanc2_state )
308
294
ADDRESS_MAP_GLOBAL_MASK(0xff)
309
AM_RANGE(0x00, 0x00) AM_READ(soundlatch_r) AM_WRITENOP // snd cmd (1P) / ?
310
AM_RANGE(0x04, 0x04) AM_READ(soundlatch2_r) // snd cmd (2P)
311
AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ymsnd", ym2610_r, ym2610_w)
295
AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r) AM_WRITENOP // snd cmd (1P) / ?
296
AM_RANGE(0x04, 0x04) AM_READ(soundlatch2_byte_r) // snd cmd (2P)
297
AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE_LEGACY("ymsnd", ym2610_r, ym2610_w)
312
298
AM_RANGE(0x0c, 0x0c) AM_READ(fromanc2_sndcpu_nmi_clr)
325
311
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
326
312
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 )
327
313
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 )
328
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(subcpu_int_r, NULL) // SUBCPU INT FLAG
329
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(sndcpu_nmi_r, NULL) // SNDCPU NMI FLAG
330
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(subcpu_nmi_r, NULL) // SUBCPU NMI FLAG
314
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, fromanc2_state,subcpu_int_r, NULL) // SUBCPU INT FLAG
315
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, fromanc2_state,sndcpu_nmi_r, NULL) // SNDCPU NMI FLAG
316
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, fromanc2_state,subcpu_nmi_r, NULL) // SUBCPU NMI FLAG
331
317
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_device, read_bit)
332
318
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME( "Service Mode (1P)" ) PORT_CODE(KEYCODE_F2) // TEST (1P)
333
319
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME( "Service Mode (2P)" ) PORT_CODE(KEYCODE_F2) // TEST (2P)