51
51
#include "sound/2151intf.h"
52
52
#include "sound/okim6295.h"
53
53
#include "video/deco16ic.h"
54
#include "video/decospr.h"
55
#include "video/decocomn.h"
56
57
static WRITE16_HANDLER( cninja_sound_w )
58
cninja_state *state = space->machine->driver_data<cninja_state>();
59
cninja_state *state = space->machine().driver_data<cninja_state>();
60
61
soundlatch_w(space, 0, data & 0xff);
61
cpu_set_input_line(state->audiocpu, 0, HOLD_LINE);
62
device_set_input_line(state->m_audiocpu, 0, HOLD_LINE);
64
65
static WRITE16_HANDLER( stoneage_sound_w )
66
cninja_state *state = space->machine->driver_data<cninja_state>();
67
cninja_state *state = space->machine().driver_data<cninja_state>();
68
69
soundlatch_w(space, 0, data & 0xff);
69
cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE);
70
device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, PULSE_LINE);
72
73
static TIMER_DEVICE_CALLBACK( interrupt_gen )
74
cninja_state *state = timer.machine->driver_data<cninja_state>();
75
cninja_state *state = timer.machine().driver_data<cninja_state>();
76
cpu_set_input_line(state->maincpu, (state->irq_mask & 0x10) ? 3 : 4, ASSERT_LINE);
77
state->raster_irq_timer->reset();
77
device_set_input_line(state->m_maincpu, (state->m_irq_mask & 0x10) ? 3 : 4, ASSERT_LINE);
78
state->m_raster_irq_timer->reset();
80
81
static READ16_HANDLER( cninja_irq_r )
82
cninja_state *state = space->machine->driver_data<cninja_state>();
83
cninja_state *state = space->machine().driver_data<cninja_state>();
87
88
case 1: /* Raster IRQ scanline position */
88
return state->scanline;
89
return state->m_scanline;
90
91
case 2: /* Raster IRQ ACK - value read is not used */
91
cpu_set_input_line(state->maincpu, 3, CLEAR_LINE);
92
cpu_set_input_line(state->maincpu, 4, CLEAR_LINE);
92
device_set_input_line(state->m_maincpu, 3, CLEAR_LINE);
93
device_set_input_line(state->m_maincpu, 4, CLEAR_LINE);
96
logerror("%08x: Unmapped IRQ read %d\n", cpu_get_pc(space->cpu), offset);
97
logerror("%08x: Unmapped IRQ read %d\n", cpu_get_pc(&space->device()), offset);
100
101
static WRITE16_HANDLER( cninja_irq_w )
102
cninja_state *state = space->machine->driver_data<cninja_state>();
103
cninja_state *state = space->machine().driver_data<cninja_state>();
109
110
0xc8: Raster IRQ turned on (68k IRQ level 4)
110
111
0xd8: Raster IRQ turned on (68k IRQ level 3)
112
logerror("%08x: IRQ write %d %08x\n", cpu_get_pc(space->cpu), offset, data);
113
state->irq_mask = data & 0xff;
113
logerror("%08x: IRQ write %d %08x\n", cpu_get_pc(&space->device()), offset, data);
114
state->m_irq_mask = data & 0xff;
116
117
case 1: /* Raster IRQ scanline position, only valid for values between 1 & 239 (0 and 240-256 do NOT generate IRQ's) */
117
state->scanline = data & 0xff;
118
state->m_scanline = data & 0xff;
119
if (!BIT(state->irq_mask, 1) && state->scanline > 0 && state->scanline < 240)
120
state->raster_irq_timer->adjust(space->machine->primary_screen->time_until_pos(state->scanline), state->scanline);
120
if (!BIT(state->m_irq_mask, 1) && state->m_scanline > 0 && state->m_scanline < 240)
121
state->m_raster_irq_timer->adjust(space->machine().primary_screen->time_until_pos(state->m_scanline), state->m_scanline);
122
state->raster_irq_timer->reset();
123
state->m_raster_irq_timer->reset();
125
126
case 2: /* VBL irq ack */
129
logerror("%08x: Unmapped IRQ write %d %04x\n", cpu_get_pc(space->cpu), offset, data);
130
logerror("%08x: Unmapped IRQ write %d %04x\n", cpu_get_pc(&space->device()), offset, data);
132
133
static READ16_HANDLER( robocop2_prot_r )
152
153
static WRITE16_HANDLER( cninja_pf12_control_w )
154
cninja_state *state = space->machine->driver_data<cninja_state>();
155
deco16ic_pf12_control_w(state->deco16ic, offset, data, mem_mask);
156
space->machine->primary_screen->update_partial(space->machine->primary_screen->vpos());
155
cninja_state *state = space->machine().driver_data<cninja_state>();
156
deco16ic_pf_control_w(state->m_deco_tilegen1, offset, data, mem_mask);
157
space->machine().primary_screen->update_partial(space->machine().primary_screen->vpos());
160
161
static WRITE16_HANDLER( cninja_pf34_control_w )
162
cninja_state *state = space->machine->driver_data<cninja_state>();
163
deco16ic_pf34_control_w(state->deco16ic, offset, data, mem_mask);
164
space->machine->primary_screen->update_partial(space->machine->primary_screen->vpos());
163
cninja_state *state = space->machine().driver_data<cninja_state>();
164
deco16ic_pf_control_w(state->m_deco_tilegen2, offset, data, mem_mask);
165
space->machine().primary_screen->update_partial(space->machine().primary_screen->vpos());
168
static ADDRESS_MAP_START( cninja_map, ADDRESS_SPACE_PROGRAM, 16 )
169
static ADDRESS_MAP_START( cninja_map, AS_PROGRAM, 16 )
169
170
AM_RANGE(0x000000, 0x0bffff) AM_ROM
171
172
AM_RANGE(0x140000, 0x14000f) AM_WRITE(cninja_pf12_control_w)
172
AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
173
AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
174
AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE_MEMBER(cninja_state, pf1_rowscroll)
175
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
173
AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
174
AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
175
AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE_MEMBER(cninja_state, m_pf1_rowscroll)
176
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf2_rowscroll)
177
178
AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w)
178
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
179
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
180
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
181
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
179
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
180
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
181
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf3_rowscroll)
182
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf4_rowscroll)
183
AM_RANGE(0x184000, 0x187fff) AM_RAM AM_BASE_MEMBER(cninja_state, ram)
184
AM_RANGE(0x184000, 0x187fff) AM_RAM AM_BASE_MEMBER(cninja_state, m_ram)
184
185
AM_RANGE(0x190000, 0x190007) AM_READWRITE(cninja_irq_r, cninja_irq_w)
185
AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_custom", deco16ic_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
186
AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_common", decocomn_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
187
188
AM_RANGE(0x1a4000, 0x1a47ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* Sprites */
188
189
AM_RANGE(0x1b4000, 0x1b4001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */
200
static ADDRESS_MAP_START( cninjabl_map, ADDRESS_SPACE_PROGRAM, 16 )
201
static ADDRESS_MAP_START( cninjabl_map, AS_PROGRAM, 16 )
201
202
AM_RANGE(0x000000, 0x0bffff) AM_ROM
203
204
AM_RANGE(0x138000, 0x1387ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* bootleg sprite-ram (sprites rewritten here in new format) */
205
206
AM_RANGE(0x140000, 0x14000f) AM_WRITE(cninja_pf12_control_w)
206
AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
207
AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
208
AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE_MEMBER(cninja_state, pf1_rowscroll)
209
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
207
AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
208
AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
209
AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE_MEMBER(cninja_state, m_pf1_rowscroll)
210
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf2_rowscroll)
211
212
AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w) // not used / incorrect on this
212
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
213
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
214
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
215
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
213
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
214
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
215
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf3_rowscroll)
216
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf4_rowscroll)
217
218
AM_RANGE(0x17ff22, 0x17ff23) AM_READ_PORT("DSW")
218
219
AM_RANGE(0x17ff28, 0x17ff29) AM_READ_PORT("IN1")
222
223
AM_RANGE(0x180000, 0x187fff) AM_RAM // more ram on bootleg?
224
225
AM_RANGE(0x190000, 0x190007) AM_READWRITE(cninja_irq_r, cninja_irq_w)
225
AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_custom", deco16ic_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
226
AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_common", decocomn_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
227
228
AM_RANGE(0x1b4000, 0x1b4001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */
230
static ADDRESS_MAP_START( edrandy_map, ADDRESS_SPACE_PROGRAM, 16 )
231
static ADDRESS_MAP_START( edrandy_map, AS_PROGRAM, 16 )
231
232
AM_RANGE(0x000000, 0x0fffff) AM_ROM
233
234
AM_RANGE(0x140000, 0x14000f) AM_WRITE(cninja_pf12_control_w)
234
AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
235
AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
236
AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf1_rowscroll)
237
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
235
AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
236
AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
237
AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf1_rowscroll)
238
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf2_rowscroll)
239
240
AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w)
240
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
241
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
242
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
243
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
241
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
242
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
243
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf3_rowscroll)
244
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf4_rowscroll)
245
AM_RANGE(0x188000, 0x189fff) AM_RAM_DEVWRITE("deco_custom", deco16ic_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
246
AM_RANGE(0x194000, 0x197fff) AM_RAM AM_BASE_MEMBER(cninja_state, ram) /* Main ram */
246
AM_RANGE(0x188000, 0x189fff) AM_RAM_DEVWRITE("deco_common", decocomn_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
247
AM_RANGE(0x194000, 0x197fff) AM_RAM AM_BASE_MEMBER(cninja_state, m_ram) /* Main ram */
247
248
AM_RANGE(0x198000, 0x1987ff) AM_READWRITE(deco16_60_prot_r, deco16_60_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */
248
249
AM_RANGE(0x199550, 0x199551) AM_WRITENOP /* Looks like a bug in game code, a protection write is referenced off a5 instead of a6 and ends up here */
249
250
AM_RANGE(0x199750, 0x199751) AM_WRITENOP /* Looks like a bug in game code, a protection write is referenced off a5 instead of a6 and ends up here */
258
static ADDRESS_MAP_START( robocop2_map, ADDRESS_SPACE_PROGRAM, 16 )
259
static ADDRESS_MAP_START( robocop2_map, AS_PROGRAM, 16 )
259
260
AM_RANGE(0x000000, 0x0fffff) AM_ROM
261
262
AM_RANGE(0x140000, 0x14000f) AM_WRITE(cninja_pf12_control_w)
262
AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
263
AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
264
AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf1_rowscroll)
265
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
263
AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
264
AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
265
AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf1_rowscroll)
266
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf2_rowscroll)
267
268
AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w)
268
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
269
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
270
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
271
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
269
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
270
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
271
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf3_rowscroll)
272
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf4_rowscroll)
273
274
AM_RANGE(0x180000, 0x1807ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
274
275
// AM_RANGE(0x18c000, 0x18c0ff) AM_WRITE(cninja_loopback_w) /* Protection writes */
275
276
AM_RANGE(0x18c000, 0x18c7ff) AM_READ(robocop2_prot_r) /* Protection device */
276
277
AM_RANGE(0x18c064, 0x18c065) AM_WRITE(cninja_sound_w)
277
278
AM_RANGE(0x198000, 0x198001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */
278
AM_RANGE(0x1a8000, 0x1a9fff) AM_RAM_DEVWRITE("deco_custom", deco16ic_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
279
AM_RANGE(0x1a8000, 0x1a9fff) AM_RAM_DEVWRITE("deco_common", decocomn_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
279
280
AM_RANGE(0x1b0000, 0x1b0007) AM_READWRITE(cninja_irq_r, cninja_irq_w)
280
AM_RANGE(0x1b8000, 0x1bbfff) AM_RAM AM_BASE_MEMBER(cninja_state, ram) /* Main ram */
281
AM_RANGE(0x1f0000, 0x1f0001) AM_DEVWRITE("deco_custom", deco16ic_priority_w)
281
AM_RANGE(0x1b8000, 0x1bbfff) AM_RAM AM_BASE_MEMBER(cninja_state, m_ram) /* Main ram */
282
AM_RANGE(0x1f0000, 0x1f0001) AM_DEVWRITE("deco_common", decocomn_priority_w)
282
283
AM_RANGE(0x1f8000, 0x1f8001) AM_READ_PORT("DSW3") /* Dipswitch #3 */
285
static ADDRESS_MAP_START( mutantf_map, ADDRESS_SPACE_PROGRAM, 16 )
286
static ADDRESS_MAP_START( mutantf_map, AS_PROGRAM, 16 )
286
287
AM_RANGE(0x000000, 0x07ffff) AM_ROM
287
288
AM_RANGE(0x100000, 0x103fff) AM_RAM
288
289
AM_RANGE(0x120000, 0x1207ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
289
290
AM_RANGE(0x140000, 0x1407ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram2)
290
AM_RANGE(0x160000, 0x161fff) AM_RAM_DEVWRITE("deco_custom", deco16ic_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
291
AM_RANGE(0x180000, 0x180001) AM_DEVWRITE("deco_custom", deco16ic_priority_w)
291
AM_RANGE(0x160000, 0x161fff) AM_RAM_DEVWRITE("deco_common", decocomn_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
292
AM_RANGE(0x180000, 0x180001) AM_DEVWRITE("deco_common", decocomn_priority_w)
292
293
AM_RANGE(0x180002, 0x180003) AM_WRITENOP /* VBL irq ack */
293
294
AM_RANGE(0x1a0000, 0x1a07ff) AM_READWRITE(deco16_66_prot_r, deco16_66_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */
294
AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(buffer_spriteram16_w) AM_DEVREAD("deco_custom", deco16ic_71_r)
295
AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(buffer_spriteram16_w) AM_DEVREAD("deco_common", decocomn_71_r)
295
296
AM_RANGE(0x1e0000, 0x1e0001) AM_WRITE(buffer_spriteram16_2_w)
297
298
AM_RANGE(0x300000, 0x30000f) AM_WRITE(cninja_pf12_control_w)
298
AM_RANGE(0x304000, 0x305fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
299
AM_RANGE(0x306000, 0x307fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
300
AM_RANGE(0x308000, 0x3087ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf1_rowscroll)
301
AM_RANGE(0x30a000, 0x30a7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
299
AM_RANGE(0x304000, 0x305fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
300
AM_RANGE(0x306000, 0x307fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
301
AM_RANGE(0x308000, 0x3087ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf1_rowscroll)
302
AM_RANGE(0x30a000, 0x30a7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf2_rowscroll)
303
304
AM_RANGE(0x310000, 0x31000f) AM_WRITE(cninja_pf34_control_w)
304
AM_RANGE(0x314000, 0x315fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
305
AM_RANGE(0x316000, 0x317fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
306
AM_RANGE(0x318000, 0x3187ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
307
AM_RANGE(0x31a000, 0x31a7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
305
AM_RANGE(0x314000, 0x315fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
306
AM_RANGE(0x316000, 0x317fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
307
AM_RANGE(0x318000, 0x3187ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf3_rowscroll)
308
AM_RANGE(0x31a000, 0x31a7ff) AM_RAM AM_BASE_MEMBER(cninja_state, m_pf4_rowscroll)
309
310
AM_RANGE(0xad00ac, 0xad00ff) AM_READNOP /* Reads from here seem to be a game code bug */
312
313
/******************************************************************************/
314
static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
315
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
315
316
AM_RANGE(0x000000, 0x00ffff) AM_ROM
316
317
AM_RANGE(0x100000, 0x100001) AM_DEVREADWRITE("ym1", ym2203_r, ym2203_w)
317
318
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ym2", ym2151_r, ym2151_w)
713
714
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 64 ) /* Characters 8x8 */
714
715
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 64 ) /* Tiles 16x16 */
715
716
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0, 64 ) /* Tiles 16x16 */
716
GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 256, 128 ) /* Sprites 16x16 */
717
GFXDECODE_ENTRY( "gfx5", 0, spritelayout, 1024+768, 16 ) /* Sprites 16x16 */
717
GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 0, 128 ) /* Sprites 16x16 */
718
GFXDECODE_ENTRY( "gfx5", 0, spritelayout, 0, 16 ) /* Sprites 16x16 */
720
721
/**********************************************************************************/
722
723
static void sound_irq(device_t *device, int state)
724
cninja_state *driver_state = device->machine->driver_data<cninja_state>();
725
cpu_set_input_line(driver_state->audiocpu, 1, state); /* IRQ 2 */
725
cninja_state *driver_state = device->machine().driver_data<cninja_state>();
726
device_set_input_line(driver_state->m_audiocpu, 1, state); /* IRQ 2 */
728
729
static void sound_irq2(device_t *device, int state)
730
cninja_state *driver_state = device->machine->driver_data<cninja_state>();
731
cpu_set_input_line(driver_state->audiocpu, 0, state);
731
cninja_state *driver_state = device->machine().driver_data<cninja_state>();
732
device_set_input_line(driver_state->m_audiocpu, 0, state);
734
735
static WRITE8_DEVICE_HANDLER( sound_bankswitch_w )
736
cninja_state *state = device->machine->driver_data<cninja_state>();
737
cninja_state *state = device->machine().driver_data<cninja_state>();
738
739
/* the second OKIM6295 ROM is bank switched */
739
state->oki2->set_bank_base((data & 1) * 0x40000);
740
state->m_oki2->set_bank_base((data & 1) * 0x40000);
742
743
static const ym2151_interface ym2151_config =
774
775
return ((bank >> 5) & 0x1) << 14;
777
static const deco16ic_interface cninja_deco16ic_intf =
781
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
782
0, 16, 0, 48, /* color base */
783
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
786
cninja_bank_callback,
790
static const deco16ic_interface edrandy_deco16ic_intf =
794
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
795
0, 16, 0, 48, /* color base */
796
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
799
cninja_bank_callback,
803
static const deco16ic_interface robocop2_deco16ic_intf =
807
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
808
0, 16, 0, 48, /* color base */
809
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
811
robocop2_bank_callback,
812
robocop2_bank_callback,
813
robocop2_bank_callback
816
static const deco16ic_interface mutantf_deco16ic_intf =
820
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
821
0, 0x30, 0x20, 0x40, /* color base */
822
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
778
static const decocomn_interface cninja_decocomn_intf =
783
static const deco16ic_interface cninja_deco16ic_tilegen1_intf =
787
0x0f, 0x0f, /* trans masks (default values) */
788
0, 16, /* color base */
789
0x0f, 0x0f, /* color masks (default values) */
795
static const deco16ic_interface cninja_deco16ic_tilegen2_intf =
799
0x0f, 0x0f, /* trans masks (default values) */
800
0, 48, /* color base */
801
0x0f, 0x0f, /* color masks (default values) */
802
cninja_bank_callback,
803
cninja_bank_callback,
809
static const deco16ic_interface edrandy_deco16ic_tilegen1_intf =
813
0x0f, 0x0f, /* trans masks (default values) */
814
0, 16, /* color base */
815
0x0f, 0x0f, /* color masks (default values) */
821
static const deco16ic_interface edrandy_deco16ic_tilegen2_intf =
825
0x0f, 0x0f, /* trans masks (default values) */
826
0, 48, /* color base */
827
0x0f, 0x0f, /* color masks (default values) */
828
cninja_bank_callback,
829
cninja_bank_callback,
834
static const deco16ic_interface robocop2_deco16ic_tilegen1_intf =
838
0x0f, 0x0f, /* trans masks (default values) */
839
0, 16, /* color base */
840
0x0f, 0x0f, /* color masks (default values) */
842
robocop2_bank_callback,
846
static const deco16ic_interface robocop2_deco16ic_tilegen2_intf =
850
0x0f, 0x0f, /* trans masks (default values) */
851
0, 48, /* color base */
852
0x0f, 0x0f, /* color masks (default values) */
853
robocop2_bank_callback,
854
robocop2_bank_callback,
859
static const deco16ic_interface mutantf_deco16ic_tilegen1_intf =
863
0x0f, 0x0f, /* trans masks (default values) */
864
0, 0x30, /* color base */
865
0x0f, 0x0f, /* color masks (default values) */
823
866
mutantf_1_bank_callback,
824
867
mutantf_2_bank_callback,
825
mutantf_1_bank_callback,
826
mutantf_1_bank_callback
871
static const deco16ic_interface mutantf_deco16ic_tilegen2_intf =
875
0x0f, 0x0f, /* trans masks (default values) */
876
0x20, 0x40, /* color base */
877
0x0f, 0x0f, /* color masks (default values) */
878
mutantf_1_bank_callback,
879
mutantf_1_bank_callback,
829
884
static MACHINE_START( cninja )
831
cninja_state *state = machine->driver_data<cninja_state>();
886
cninja_state *state = machine.driver_data<cninja_state>();
833
state_save_register_global(machine, state->scanline);
834
state_save_register_global(machine, state->irq_mask);
888
state->save_item(NAME(state->m_scanline));
889
state->save_item(NAME(state->m_irq_mask));
837
892
static MACHINE_RESET( cninja )
839
cninja_state *state = machine->driver_data<cninja_state>();
894
cninja_state *state = machine.driver_data<cninja_state>();
896
state->m_scanline = 0;
897
state->m_irq_mask = 0;
901
UINT16 cninja_pri_callback(UINT16 x)
903
/* Sprite/playfield priority */
906
case 0x0000: return 0;
907
case 0x4000: return 0xf0;
908
case 0x8000: return 0xf0 | 0xcc;
909
case 0xc000: return 0xf0 | 0xcc; /* Perhaps 0xf0|0xcc|0xaa (Sprite under bottom layer) */
845
916
static MACHINE_CONFIG_START( cninja, cninja_state )