~ubuntu-branches/debian/sid/mame/sid

« back to all changes in this revision

Viewing changes to src/mame/drivers/cninja.c

  • Committer: Bazaar Package Importer
  • Author(s): Jordi Mallach, Emmanuel Kasper, Félix Arreola Rodríguez, Jordi Mallach
  • Date: 2011-05-11 21:06:50 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20110511210650-jizvh8a6x117y9hr
Tags: 0.142-1
[ Emmanuel Kasper ]
* New upstream release
* Set NOWERROR=1 to allow compiling with gcc-4.6
* Remove fix_powerpc_build.patch, as upstream has taken it in this release
* Add gnome-video-arcade front end as a suggested package

[ Félix Arreola Rodríguez ]
* Add kfreebsd-build.patch to quilt series, to fix build on kfreebsd

[ Jordi Mallach ]
* Remove unneeded and bogus addition of --with-quilt to the dh invocation.
* Add Cesare Falco (long time Ubuntu maintainer) to Uploaders, and wrap
  them into multiple lines.

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
#include "sound/2151intf.h"
52
52
#include "sound/okim6295.h"
53
53
#include "video/deco16ic.h"
54
 
 
 
54
#include "video/decospr.h"
 
55
#include "video/decocomn.h"
55
56
 
56
57
static WRITE16_HANDLER( cninja_sound_w )
57
58
{
58
 
        cninja_state *state = space->machine->driver_data<cninja_state>();
 
59
        cninja_state *state = space->machine().driver_data<cninja_state>();
59
60
 
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);
62
63
}
63
64
 
64
65
static WRITE16_HANDLER( stoneage_sound_w )
65
66
{
66
 
        cninja_state *state = space->machine->driver_data<cninja_state>();
 
67
        cninja_state *state = space->machine().driver_data<cninja_state>();
67
68
 
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);
70
71
}
71
72
 
72
73
static TIMER_DEVICE_CALLBACK( interrupt_gen )
73
74
{
74
 
        cninja_state *state = timer.machine->driver_data<cninja_state>();
 
75
        cninja_state *state = timer.machine().driver_data<cninja_state>();
75
76
 
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();
78
79
}
79
80
 
80
81
static READ16_HANDLER( cninja_irq_r )
81
82
{
82
 
        cninja_state *state = space->machine->driver_data<cninja_state>();
 
83
        cninja_state *state = space->machine().driver_data<cninja_state>();
83
84
 
84
85
        switch (offset)
85
86
        {
86
87
 
87
88
        case 1: /* Raster IRQ scanline position */
88
 
                return state->scanline;
 
89
                return state->m_scanline;
89
90
 
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);
93
94
                return 0;
94
95
        }
95
96
 
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);
97
98
        return 0;
98
99
}
99
100
 
100
101
static WRITE16_HANDLER( cninja_irq_w )
101
102
{
102
 
        cninja_state *state = space->machine->driver_data<cninja_state>();
 
103
        cninja_state *state = space->machine().driver_data<cninja_state>();
103
104
 
104
105
        switch (offset)
105
106
        {
109
110
            0xc8:   Raster IRQ turned on (68k IRQ level 4)
110
111
            0xd8:   Raster IRQ turned on (68k IRQ level 3)
111
112
        */
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;
114
115
                return;
115
116
 
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;
118
119
 
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);
121
122
                else
122
 
                        state->raster_irq_timer->reset();
 
123
                        state->m_raster_irq_timer->reset();
123
124
                return;
124
125
 
125
126
        case 2: /* VBL irq ack */
126
127
                return;
127
128
        }
128
129
 
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);
130
131
}
131
132
 
132
133
static READ16_HANDLER( robocop2_prot_r )
134
135
        switch (offset << 1)
135
136
        {
136
137
                case 0x41a: /* Player 1 & 2 input ports */
137
 
                        return input_port_read(space->machine, "IN0");
 
138
                        return input_port_read(space->machine(), "IN0");
138
139
                case 0x320: /* Coins */
139
 
                        return input_port_read(space->machine, "IN1");
 
140
                        return input_port_read(space->machine(), "IN1");
140
141
                case 0x4e6: /* Dip switches */
141
 
                        return input_port_read(space->machine, "DSW");
 
142
                        return input_port_read(space->machine(), "DSW");
142
143
                case 0x504: /* PC: 6b6.  b4, 2c, 36 written before read */
143
 
                        logerror("Protection PC %06x: warning - read unmapped memory address %04x\n", cpu_get_pc(space->cpu), offset);
 
144
                        logerror("Protection PC %06x: warning - read unmapped memory address %04x\n", cpu_get_pc(&space->device()), offset);
144
145
                        return 0x84;
145
146
        }
146
 
        logerror("Protection PC %06x: warning - read unmapped memory address %04x\n", cpu_get_pc(space->cpu), offset);
 
147
        logerror("Protection PC %06x: warning - read unmapped memory address %04x\n", cpu_get_pc(&space->device()), offset);
147
148
        return 0;
148
149
}
149
150
 
151
152
 
152
153
static WRITE16_HANDLER( cninja_pf12_control_w )
153
154
{
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());
157
158
}
158
159
 
159
160
 
160
161
static WRITE16_HANDLER( cninja_pf34_control_w )
161
162
{
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());
165
166
}
166
167
 
167
168
 
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
170
171
 
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)
176
177
 
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)
182
183
 
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)
186
187
 
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 */
197
198
        // todo:
198
199
}
199
200
 
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
202
203
 
203
204
        AM_RANGE(0x138000, 0x1387ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* bootleg sprite-ram (sprites rewritten here in new format) */
204
205
 
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)
210
211
 
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)
216
217
 
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?
223
224
 
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)
226
227
 
227
228
        AM_RANGE(0x1b4000, 0x1b4001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */
228
229
ADDRESS_MAP_END
229
230
 
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
232
233
 
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)
238
239
 
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)
244
245
 
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 */
255
256
ADDRESS_MAP_END
256
257
 
257
258
 
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
260
261
 
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)
266
267
 
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)
272
273
 
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 */
283
284
ADDRESS_MAP_END
284
285
 
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)
296
297
 
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)
302
303
 
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)
308
309
 
309
310
        AM_RANGE(0xad00ac, 0xad00ff) AM_READNOP /* Reads from here seem to be a game code bug */
310
311
ADDRESS_MAP_END
311
312
 
312
313
/******************************************************************************/
313
314
 
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)
323
324
        AM_RANGE(0x1ff400, 0x1ff403) AM_WRITE(h6280_irq_status_w)
324
325
ADDRESS_MAP_END
325
326
 
326
 
static ADDRESS_MAP_START( sound_map_mutantf, ADDRESS_SPACE_PROGRAM, 8 )
 
327
static ADDRESS_MAP_START( sound_map_mutantf, AS_PROGRAM, 8 )
327
328
        AM_RANGE(0x000000, 0x00ffff) AM_ROM
328
329
        AM_RANGE(0x100000, 0x100001) AM_READNOP AM_WRITENOP
329
330
        AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w)
335
336
        AM_RANGE(0x1ff400, 0x1ff403) AM_WRITE(h6280_irq_status_w)
336
337
ADDRESS_MAP_END
337
338
 
338
 
static ADDRESS_MAP_START( stoneage_s_map, ADDRESS_SPACE_PROGRAM, 8 )
 
339
static ADDRESS_MAP_START( stoneage_s_map, AS_PROGRAM, 8 )
339
340
        AM_RANGE(0x0000, 0x7fff) AM_ROM
340
341
        AM_RANGE(0x8000, 0x87ff) AM_RAM
341
342
        AM_RANGE(0x8800, 0x8801) AM_DEVREADWRITE("ymsnd", 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 */
718
719
GFXDECODE_END
719
720
 
720
721
/**********************************************************************************/
721
722
 
722
723
static void sound_irq(device_t *device, int state)
723
724
{
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 */
726
727
}
727
728
 
728
729
static void sound_irq2(device_t *device, int state)
729
730
{
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);
732
733
}
733
734
 
734
735
static WRITE8_DEVICE_HANDLER( sound_bankswitch_w )
735
736
{
736
 
        cninja_state *state = device->machine->driver_data<cninja_state>();
 
737
        cninja_state *state = device->machine().driver_data<cninja_state>();
737
738
 
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);
740
741
}
741
742
 
742
743
static const ym2151_interface ym2151_config =
774
775
        return ((bank >> 5) & 0x1) << 14;
775
776
}
776
777
 
777
 
static const deco16ic_interface cninja_deco16ic_intf =
778
 
{
779
 
        "screen",
780
 
        0, 1, 1,
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) */
784
 
        NULL,
785
 
        NULL,
786
 
        cninja_bank_callback,
787
 
        cninja_bank_callback
788
 
};
789
 
 
790
 
static const deco16ic_interface edrandy_deco16ic_intf =
791
 
{
792
 
        "screen",
793
 
        0, 0, 1,
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) */
797
 
        NULL,
798
 
        NULL,
799
 
        cninja_bank_callback,
800
 
        cninja_bank_callback
801
 
};
802
 
 
803
 
static const deco16ic_interface robocop2_deco16ic_intf =
804
 
{
805
 
        "screen",
806
 
        0, 0, 1,
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) */
810
 
        NULL,
811
 
        robocop2_bank_callback,
812
 
        robocop2_bank_callback,
813
 
        robocop2_bank_callback
814
 
};
815
 
 
816
 
static const deco16ic_interface mutantf_deco16ic_intf =
817
 
{
818
 
        "screen",
819
 
        0, 0, 1,
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 =
 
779
{
 
780
        "screen",
 
781
};
 
782
 
 
783
static const deco16ic_interface cninja_deco16ic_tilegen1_intf =
 
784
{
 
785
        "screen",
 
786
        1, 1,
 
787
        0x0f, 0x0f, /* trans masks (default values) */
 
788
        0, 16, /* color base */
 
789
        0x0f, 0x0f,     /* color masks (default values) */
 
790
        NULL,
 
791
        NULL,
 
792
        0, 1,
 
793
};
 
794
 
 
795
static const deco16ic_interface cninja_deco16ic_tilegen2_intf =
 
796
{
 
797
        "screen",
 
798
        0, 1,
 
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,
 
804
        0, 2,
 
805
};
 
806
 
 
807
 
 
808
 
 
809
static const deco16ic_interface edrandy_deco16ic_tilegen1_intf =
 
810
{
 
811
        "screen",
 
812
        0, 1,
 
813
        0x0f, 0x0f, /* trans masks (default values) */
 
814
        0, 16, /* color base  */
 
815
        0x0f, 0x0f, /* color masks (default values) */
 
816
        NULL,
 
817
        NULL,
 
818
        0,1,
 
819
};
 
820
 
 
821
static const deco16ic_interface edrandy_deco16ic_tilegen2_intf =
 
822
{
 
823
        "screen",
 
824
        0, 1,
 
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,
 
830
        0,2,
 
831
};
 
832
 
 
833
 
 
834
static const deco16ic_interface robocop2_deco16ic_tilegen1_intf =
 
835
{
 
836
        "screen",
 
837
        0, 1,
 
838
        0x0f, 0x0f,     /* trans masks (default values) */
 
839
        0, 16, /* color base */
 
840
        0x0f, 0x0f, /* color masks (default values) */
 
841
        NULL,
 
842
        robocop2_bank_callback,
 
843
        0,1,
 
844
};
 
845
 
 
846
static const deco16ic_interface robocop2_deco16ic_tilegen2_intf =
 
847
{
 
848
        "screen",
 
849
        0, 1,
 
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,
 
855
        0,2,
 
856
};
 
857
 
 
858
 
 
859
static const deco16ic_interface mutantf_deco16ic_tilegen1_intf =
 
860
{
 
861
        "screen",
 
862
        0, 1,
 
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
827
 
};
 
868
        0,1,
 
869
};
 
870
 
 
871
static const deco16ic_interface mutantf_deco16ic_tilegen2_intf =
 
872
{
 
873
        "screen",
 
874
        0, 1,
 
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,
 
880
        0,2,
 
881
};
 
882
 
828
883
 
829
884
static MACHINE_START( cninja )
830
885
{
831
 
        cninja_state *state = machine->driver_data<cninja_state>();
 
886
        cninja_state *state = machine.driver_data<cninja_state>();
832
887
 
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));
835
890
}
836
891
 
837
892
static MACHINE_RESET( cninja )
838
893
{
839
 
        cninja_state *state = machine->driver_data<cninja_state>();
840
 
 
841
 
        state->scanline = 0;
842
 
        state->irq_mask = 0;
843
 
}
 
894
        cninja_state *state = machine.driver_data<cninja_state>();
 
895
 
 
896
        state->m_scanline = 0;
 
897
        state->m_irq_mask = 0;
 
898
}
 
899
 
 
900
 
 
901
UINT16 cninja_pri_callback(UINT16 x)
 
902
{
 
903
        /* Sprite/playfield priority */
 
904
        switch (x & 0xc000)
 
905
        {
 
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) */
 
910
        }
 
911
 
 
912
        return 0;
 
913
}
 
914
 
844
915
 
845
916
static MACHINE_CONFIG_START( cninja, cninja_state )
846
917
 
865
936
        MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
866
937
        MCFG_SCREEN_SIZE(32*8, 32*8)
867
938
        MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
 
939
        MCFG_SCREEN_UPDATE(cninja)
868
940
 
869
941
        MCFG_GFXDECODE(cninja)
870
942
        MCFG_PALETTE_LENGTH(2048)
871
943
 
872
 
        MCFG_VIDEO_UPDATE(cninja)
873
 
 
874
 
        MCFG_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf)
 
944
        MCFG_DECOCOMN_ADD("deco_common", cninja_decocomn_intf)
 
945
 
 
946
        MCFG_DECO16IC_ADD("tilegen1", cninja_deco16ic_tilegen1_intf)
 
947
        MCFG_DECO16IC_ADD("tilegen2", cninja_deco16ic_tilegen2_intf)
 
948
 
 
949
        MCFG_DEVICE_ADD("spritegen", decospr_, 0)
 
950
        decospr_device_config::set_gfx_region(device, 3);
 
951
        decospr_device_config::set_pri_callback(device, cninja_pri_callback);
875
952
 
876
953
        /* sound hardware */
877
954
        MCFG_SPEAKER_STANDARD_MONO("mono")
914
991
        MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
915
992
        MCFG_SCREEN_SIZE(32*8, 32*8)
916
993
        MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
 
994
        MCFG_SCREEN_UPDATE(cninja)
917
995
 
918
996
        MCFG_GFXDECODE(cninja)
919
997
        MCFG_PALETTE_LENGTH(2048)
920
998
 
921
999
        MCFG_VIDEO_START(stoneage)
922
 
        MCFG_VIDEO_UPDATE(cninja)
923
 
 
924
 
        MCFG_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf)
 
1000
 
 
1001
        MCFG_DECOCOMN_ADD("deco_common", cninja_decocomn_intf)
 
1002
 
 
1003
        MCFG_DECO16IC_ADD("tilegen1", cninja_deco16ic_tilegen1_intf)
 
1004
        MCFG_DECO16IC_ADD("tilegen2", cninja_deco16ic_tilegen2_intf)
 
1005
 
 
1006
        MCFG_DEVICE_ADD("spritegen", decospr_, 0)
 
1007
        decospr_device_config::set_gfx_region(device, 3);
 
1008
        decospr_device_config::set_pri_callback(device, cninja_pri_callback);
925
1009
 
926
1010
        /* sound hardware */
927
1011
        MCFG_SPEAKER_STANDARD_MONO("mono")
962
1046
        MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
963
1047
        MCFG_SCREEN_SIZE(32*8, 32*8)
964
1048
        MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
 
1049
        MCFG_SCREEN_UPDATE(cninjabl)
965
1050
 
966
1051
        MCFG_GFXDECODE(cninjabl)
967
1052
        MCFG_PALETTE_LENGTH(2048)
968
1053
 
969
 
        MCFG_VIDEO_UPDATE(cninjabl)
 
1054
        MCFG_DECOCOMN_ADD("deco_common", cninja_decocomn_intf)
970
1055
 
971
 
        MCFG_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf)
 
1056
        MCFG_DECO16IC_ADD("tilegen1", cninja_deco16ic_tilegen1_intf)
 
1057
        MCFG_DECO16IC_ADD("tilegen2", cninja_deco16ic_tilegen2_intf)
972
1058
 
973
1059
        /* sound hardware */
974
1060
        MCFG_SPEAKER_STANDARD_MONO("mono")
1006
1092
        MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1007
1093
        MCFG_SCREEN_SIZE(32*8, 32*8)
1008
1094
        MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
 
1095
        MCFG_SCREEN_UPDATE(edrandy)
1009
1096
 
1010
1097
        MCFG_GFXDECODE(cninja)
1011
1098
        MCFG_PALETTE_LENGTH(2048)
1012
1099
 
1013
 
        MCFG_VIDEO_UPDATE(edrandy)
1014
 
 
1015
 
        MCFG_DECO16IC_ADD("deco_custom", edrandy_deco16ic_intf)
 
1100
        MCFG_DECOCOMN_ADD("deco_common", cninja_decocomn_intf)
 
1101
 
 
1102
        MCFG_DECO16IC_ADD("tilegen1", edrandy_deco16ic_tilegen1_intf)
 
1103
        MCFG_DECO16IC_ADD("tilegen2", edrandy_deco16ic_tilegen2_intf)
 
1104
 
 
1105
        MCFG_DEVICE_ADD("spritegen", decospr_, 0)
 
1106
        decospr_device_config::set_gfx_region(device, 3);
 
1107
        decospr_device_config::set_pri_callback(device, cninja_pri_callback);
1016
1108
 
1017
1109
        /* sound hardware */
1018
1110
        MCFG_SPEAKER_STANDARD_MONO("mono")
1055
1147
        MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1056
1148
        MCFG_SCREEN_SIZE(40*8, 32*8)
1057
1149
        MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
 
1150
        MCFG_SCREEN_UPDATE(robocop2)
1058
1151
 
1059
1152
        MCFG_GFXDECODE(robocop2)
1060
1153
        MCFG_PALETTE_LENGTH(2048)
1061
1154
 
1062
 
        MCFG_VIDEO_UPDATE(robocop2)
1063
 
 
1064
 
        MCFG_DECO16IC_ADD("deco_custom", robocop2_deco16ic_intf)
 
1155
        MCFG_DECOCOMN_ADD("deco_common", cninja_decocomn_intf)
 
1156
 
 
1157
        MCFG_DECO16IC_ADD("tilegen1", robocop2_deco16ic_tilegen1_intf)
 
1158
        MCFG_DECO16IC_ADD("tilegen2", robocop2_deco16ic_tilegen2_intf)
 
1159
 
 
1160
        MCFG_DEVICE_ADD("spritegen", decospr_, 0)
 
1161
        decospr_device_config::set_gfx_region(device, 3);
 
1162
        decospr_device_config::set_pri_callback(device, cninja_pri_callback);
1065
1163
 
1066
1164
        /* sound hardware */
1067
1165
        MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1105
1203
        MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
1106
1204
        MCFG_SCREEN_SIZE(40*8, 32*8)
1107
1205
        MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
 
1206
        MCFG_SCREEN_UPDATE(mutantf)
 
1207
 
 
1208
        MCFG_VIDEO_START(mutantf)
1108
1209
 
1109
1210
        MCFG_GFXDECODE(mutantf)
1110
1211
        MCFG_PALETTE_LENGTH(2048)
1111
1212
 
1112
 
        MCFG_VIDEO_UPDATE(mutantf)
1113
 
 
1114
 
        MCFG_DECO16IC_ADD("deco_custom", mutantf_deco16ic_intf)
 
1213
        MCFG_DECOCOMN_ADD("deco_common", cninja_decocomn_intf)
 
1214
 
 
1215
        MCFG_DECO16IC_ADD("tilegen1", mutantf_deco16ic_tilegen1_intf)
 
1216
        MCFG_DECO16IC_ADD("tilegen2", mutantf_deco16ic_tilegen2_intf)
 
1217
 
 
1218
        MCFG_DEVICE_ADD("spritegen1", decospr_, 0)
 
1219
        decospr_device_config::set_gfx_region(device, 3);
 
1220
 
 
1221
        MCFG_DEVICE_ADD("spritegen2", decospr_, 0)
 
1222
        decospr_device_config::set_gfx_region(device, 4);
 
1223
 
1115
1224
 
1116
1225
        /* sound hardware */
1117
1226
        MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1893
2002
 
1894
2003
/**********************************************************************************/
1895
2004
 
1896
 
static void cninja_patch( running_machine *machine )
 
2005
static void cninja_patch( running_machine &machine )
1897
2006
{
1898
 
        UINT16 *RAM = (UINT16 *)machine->region("maincpu")->base();
 
2007
        UINT16 *RAM = (UINT16 *)machine.region("maincpu")->base();
1899
2008
        int i;
1900
2009
 
1901
2010
        for (i = 0; i < 0x80000 / 2; i++)
1923
2032
 
1924
2033
static DRIVER_INIT( cninja )
1925
2034
{
1926
 
        memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x1bc0a8, 0x1bc0a9, 0, 0, cninja_sound_w);
 
2035
        machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x1bc0a8, 0x1bc0a9, FUNC(cninja_sound_w));
1927
2036
        cninja_patch(machine);
1928
2037
}
1929
2038
 
1930
2039
static DRIVER_INIT( stoneage )
1931
2040
{
1932
 
        memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x1bc0a8, 0x1bc0a9, 0, 0, stoneage_sound_w);
 
2041
        machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x1bc0a8, 0x1bc0a9, FUNC(stoneage_sound_w));
1933
2042
}
1934
2043
 
1935
2044
static DRIVER_INIT( mutantf )
1936
2045
{
1937
 
        const UINT8 *src = machine->region("gfx2")->base();
1938
 
        UINT8 *dst = machine->region("gfx1")->base();
 
2046
        const UINT8 *src = machine.region("gfx2")->base();
 
2047
        UINT8 *dst = machine.region("gfx1")->base();
1939
2048
 
1940
2049
        /* The 16x16 graphic has some 8x8 chars in it - decode them in GFX1 */
1941
2050
        memcpy(dst + 0x50000, dst + 0x10000, 0x10000);