26
26
device_set_input_line(device, 0, HOLD_LINE);
29
static READ8_HANDLER( bankedram_r )
31
parodius_state *state = space->machine().driver_data<parodius_state>();
33
if (state->m_videobank & 0x01)
35
if (state->m_videobank & 0x04)
36
return space->machine().generic.paletteram.u8[offset + 0x0800];
38
return space->machine().generic.paletteram.u8[offset];
41
return state->m_ram[offset];
44
static WRITE8_HANDLER( bankedram_w )
46
parodius_state *state = space->machine().driver_data<parodius_state>();
48
if (state->m_videobank & 0x01)
50
if (state->m_videobank & 0x04)
51
paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset + 0x0800, data);
53
paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset, data);
56
state->m_ram[offset] = data;
59
static READ8_HANDLER( parodius_052109_053245_r )
61
parodius_state *state = space->machine().driver_data<parodius_state>();
63
if (state->m_videobank & 0x02)
64
return k053245_r(state->m_k053245, offset);
66
return k052109_r(state->m_k052109, offset);
69
static WRITE8_HANDLER( parodius_052109_053245_w )
71
parodius_state *state = space->machine().driver_data<parodius_state>();
73
if (state->m_videobank & 0x02)
74
k053245_w(state->m_k053245, offset, data);
76
k052109_w(state->m_k052109, offset, data);
79
static WRITE8_HANDLER( parodius_videobank_w )
81
parodius_state *state = space->machine().driver_data<parodius_state>();
83
if (state->m_videobank & 0xf8)
84
logerror("%04x: videobank = %02x\n",cpu_get_pc(&space->device()),data);
29
READ8_MEMBER(parodius_state::bankedram_r)
32
if (m_videobank & 0x01)
34
if (m_videobank & 0x04)
35
return m_generic_paletteram_8[offset + 0x0800];
37
return m_generic_paletteram_8[offset];
43
WRITE8_MEMBER(parodius_state::bankedram_w)
46
if (m_videobank & 0x01)
48
if (m_videobank & 0x04)
49
paletteram_xBBBBBGGGGGRRRRR_byte_be_w(space, offset + 0x0800, data);
51
paletteram_xBBBBBGGGGGRRRRR_byte_be_w(space, offset, data);
57
READ8_MEMBER(parodius_state::parodius_052109_053245_r)
60
if (m_videobank & 0x02)
61
return k053245_r(m_k053245, offset);
63
return k052109_r(m_k052109, offset);
66
WRITE8_MEMBER(parodius_state::parodius_052109_053245_w)
69
if (m_videobank & 0x02)
70
k053245_w(m_k053245, offset, data);
72
k052109_w(m_k052109, offset, data);
75
WRITE8_MEMBER(parodius_state::parodius_videobank_w)
78
if (m_videobank & 0xf8)
79
logerror("%04x: videobank = %02x\n",cpu_get_pc(&space.device()),data);
86
81
/* bit 0 = select palette or work RAM at 0000-07ff */
87
82
/* bit 1 = select 052109 or 053245 at 2000-27ff */
88
83
/* bit 2 = select palette bank 0 or 1 */
89
state->m_videobank = data;
92
static WRITE8_HANDLER( parodius_3fc0_w )
87
WRITE8_MEMBER(parodius_state::parodius_3fc0_w)
94
parodius_state *state = space->machine().driver_data<parodius_state>();
96
90
if ((data & 0xf4) != 0x10)
97
logerror("%04x: 3fc0 = %02x\n",cpu_get_pc(&space->device()),data);
91
logerror("%04x: 3fc0 = %02x\n",cpu_get_pc(&space.device()),data);
99
93
/* bit 0/1 = coin counters */
100
coin_counter_w(space->machine(), 0, data & 0x01);
101
coin_counter_w(space->machine(), 1, data & 0x02);
94
coin_counter_w(machine(), 0, data & 0x01);
95
coin_counter_w(machine(), 1, data & 0x02);
103
97
/* bit 3 = enable char ROM reading through the video RAM */
104
k052109_set_rmrd_line(state->m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
98
k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
106
100
/* other bits unknown */
134
127
device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, ASSERT_LINE);
137
static WRITE8_HANDLER( sound_arm_nmi_w )
130
WRITE8_MEMBER(parodius_state::sound_arm_nmi_w)
139
parodius_state *state = space->machine().driver_data<parodius_state>();
141
device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, CLEAR_LINE);
142
space->machine().scheduler().timer_set(attotime::from_usec(50), FUNC(nmi_callback)); /* kludge until the K053260 is emulated correctly */
133
device_set_input_line(m_audiocpu, INPUT_LINE_NMI, CLEAR_LINE);
134
machine().scheduler().timer_set(attotime::from_usec(50), FUNC(nmi_callback)); /* kludge until the K053260 is emulated correctly */
145
137
/********************************************/
147
static ADDRESS_MAP_START( parodius_map, AS_PROGRAM, 8 )
148
AM_RANGE(0x0000, 0x07ff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE_MEMBER(parodius_state, m_ram)
139
static ADDRESS_MAP_START( parodius_map, AS_PROGRAM, 8, parodius_state )
140
AM_RANGE(0x0000, 0x07ff) AM_READWRITE(bankedram_r, bankedram_w) AM_SHARE("ram")
149
141
AM_RANGE(0x0800, 0x1fff) AM_RAM
150
142
AM_RANGE(0x3f8c, 0x3f8c) AM_READ_PORT("P1")
151
143
AM_RANGE(0x3f8d, 0x3f8d) AM_READ_PORT("P2")
152
144
AM_RANGE(0x3f8e, 0x3f8e) AM_READ_PORT("DSW3")
153
145
AM_RANGE(0x3f8f, 0x3f8f) AM_READ_PORT("DSW1")
154
146
AM_RANGE(0x3f90, 0x3f90) AM_READ_PORT("DSW2")
155
AM_RANGE(0x3fa0, 0x3faf) AM_DEVREADWRITE("k053245", k053244_r, k053244_w)
156
AM_RANGE(0x3fb0, 0x3fbf) AM_DEVWRITE("k053251", k053251_w)
157
AM_RANGE(0x3fc0, 0x3fc0) AM_READWRITE(watchdog_reset_r,parodius_3fc0_w)
147
AM_RANGE(0x3fa0, 0x3faf) AM_DEVREADWRITE_LEGACY("k053245", k053244_r, k053244_w)
148
AM_RANGE(0x3fb0, 0x3fbf) AM_DEVWRITE_LEGACY("k053251", k053251_w)
149
AM_RANGE(0x3fc0, 0x3fc0) AM_READ(watchdog_reset_r) AM_WRITE(parodius_3fc0_w)
158
150
AM_RANGE(0x3fc4, 0x3fc4) AM_WRITE(parodius_videobank_w)
159
151
AM_RANGE(0x3fc8, 0x3fc8) AM_WRITE(parodius_sh_irqtrigger_w)
160
AM_RANGE(0x3fcc, 0x3fcd) AM_DEVREADWRITE("k053260", parodius_sound_r, k053260_w) /* K053260 */
152
AM_RANGE(0x3fcc, 0x3fcd) AM_DEVREADWRITE_LEGACY("k053260", parodius_sound_r, k053260_w) /* K053260 */
161
153
AM_RANGE(0x2000, 0x27ff) AM_READWRITE(parodius_052109_053245_r, parodius_052109_053245_w)
162
AM_RANGE(0x2000, 0x5fff) AM_DEVREADWRITE("k052109", k052109_r, k052109_w)
154
AM_RANGE(0x2000, 0x5fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_r, k052109_w)
163
155
AM_RANGE(0x6000, 0x9fff) AM_ROMBANK("bank1") /* banked ROM */
164
156
AM_RANGE(0xa000, 0xffff) AM_ROM /* ROM */
167
static ADDRESS_MAP_START( parodius_sound_map, AS_PROGRAM, 8 )
159
static ADDRESS_MAP_START( parodius_sound_map, AS_PROGRAM, 8, parodius_state )
168
160
AM_RANGE(0x0000, 0xefff) AM_ROM
169
161
AM_RANGE(0xf000, 0xf7ff) AM_RAM
170
AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_r,ym2151_w)
162
AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r,ym2151_w)
171
163
AM_RANGE(0xfa00, 0xfa00) AM_WRITE(sound_arm_nmi_w)
172
AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("k053260", k053260_r,k053260_w)
164
AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE_LEGACY("k053260", k053260_r,k053260_w)
256
248
static MACHINE_START( parodius )
258
250
parodius_state *state = machine.driver_data<parodius_state>();
259
UINT8 *ROM = machine.region("maincpu")->base();
261
memory_configure_bank(machine, "bank1", 0, 14, &ROM[0x10000], 0x4000);
262
memory_configure_bank(machine, "bank1", 14, 2, &ROM[0x08000], 0x4000);
263
memory_set_bank(machine, "bank1", 0);
265
machine.generic.paletteram.u8 = auto_alloc_array_clear(machine, UINT8, 0x1000);
251
UINT8 *ROM = state->memregion("maincpu")->base();
253
state->membank("bank1")->configure_entries(0, 14, &ROM[0x10000], 0x4000);
254
state->membank("bank1")->configure_entries(14, 2, &ROM[0x08000], 0x4000);
255
state->membank("bank1")->set_entry(0);
257
state->m_generic_paletteram_8.allocate(0x1000);
267
259
state->m_maincpu = machine.device("maincpu");
268
260
state->m_audiocpu = machine.device("audiocpu");