23
23
static INTERRUPT_GEN( flkatck_interrupt )
25
flkatck_state *state = device->machine->driver_data<flkatck_state>();
25
flkatck_state *state = device->machine().driver_data<flkatck_state>();
27
if (state->irq_enabled)
28
cpu_set_input_line(device, HD6309_IRQ_LINE, HOLD_LINE);
27
if (state->m_irq_enabled)
28
device_set_input_line(device, HD6309_IRQ_LINE, HOLD_LINE);
31
31
static WRITE8_HANDLER( flkatck_bankswitch_w )
33
33
/* bits 3-4: coin counters */
34
coin_counter_w(space->machine, 0, data & 0x08);
35
coin_counter_w(space->machine, 1, data & 0x10);
34
coin_counter_w(space->machine(), 0, data & 0x08);
35
coin_counter_w(space->machine(), 1, data & 0x10);
37
37
/* bits 0-1: bank # */
38
38
if ((data & 0x03) != 0x03) /* for safety */
39
memory_set_bank(space->machine, "bank1", data & 0x03);
39
memory_set_bank(space->machine(), "bank1", data & 0x03);
42
42
static READ8_HANDLER( flkatck_ls138_r )
50
data = input_port_read(space->machine, (offset & 0x01) ? "COIN" : "DSW3");
50
data = input_port_read(space->machine(), (offset & 0x01) ? "COIN" : "DSW3");
52
data = input_port_read(space->machine, (offset & 0x01) ? "P2" : "P1");
52
data = input_port_read(space->machine(), (offset & 0x01) ? "P2" : "P1");
56
data = input_port_read(space->machine, (offset & 0x01) ? "DSW1" : "DSW2");
56
data = input_port_read(space->machine(), (offset & 0x01) ? "DSW1" : "DSW2");
73
73
soundlatch_w(space, 0, data);
75
75
case 0x06: /* Cause interrupt on audio CPU */
76
cpu_set_input_line(state->audiocpu, 0, HOLD_LINE);
76
device_set_input_line(state->m_audiocpu, 0, HOLD_LINE);
78
78
case 0x07: /* watchdog reset */
79
79
watchdog_reset_w(space, 0, data);
84
84
/* Protection - an external multiplyer connected to the sound CPU */
85
85
static READ8_HANDLER( multiply_r )
87
flkatck_state *state = space->machine->driver_data<flkatck_state>();
88
return (state->multiply_reg[0] * state->multiply_reg[1]) & 0xff;
87
flkatck_state *state = space->machine().driver_data<flkatck_state>();
88
return (state->m_multiply_reg[0] * state->m_multiply_reg[1]) & 0xff;
91
91
static WRITE8_HANDLER( multiply_w )
93
flkatck_state *state = space->machine->driver_data<flkatck_state>();
94
state->multiply_reg[offset] = data;
93
flkatck_state *state = space->machine().driver_data<flkatck_state>();
94
state->m_multiply_reg[offset] = data;
98
static ADDRESS_MAP_START( flkatck_map, ADDRESS_SPACE_PROGRAM, 8 )
98
static ADDRESS_MAP_START( flkatck_map, AS_PROGRAM, 8 )
99
99
AM_RANGE(0x0000, 0x0007) AM_RAM_WRITE(flkatck_k007121_regs_w) /* 007121 registers */
100
100
AM_RANGE(0x0008, 0x03ff) AM_RAM /* RAM */
101
101
AM_RANGE(0x0400, 0x041f) AM_READWRITE(flkatck_ls138_r, flkatck_ls138_w) /* inputs, DIPS, bankswitch, counters, sound command */
102
102
AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_le_w) AM_BASE_GENERIC(paletteram) /* palette */
103
103
AM_RANGE(0x1000, 0x1fff) AM_RAM /* RAM */
104
AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(flkatck_k007121_w) AM_BASE_MEMBER(flkatck_state, k007121_ram) /* Video RAM (007121) */
104
AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(flkatck_k007121_w) AM_BASE_MEMBER(flkatck_state, m_k007121_ram) /* Video RAM (007121) */
105
105
AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank1") /* banked ROM */
106
106
AM_RANGE(0x6000, 0xffff) AM_ROM /* ROM */
109
static ADDRESS_MAP_START( flkatck_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
109
static ADDRESS_MAP_START( flkatck_sound_map, AS_PROGRAM, 8 )
110
110
AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM */
111
111
AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */
112
112
AM_RANGE(0x9000, 0x9000) AM_READWRITE(multiply_r, multiply_w) /* ??? */
198
198
static MACHINE_START( flkatck )
200
flkatck_state *state = machine->driver_data<flkatck_state>();
201
UINT8 *ROM = machine->region("maincpu")->base();
200
flkatck_state *state = machine.driver_data<flkatck_state>();
201
UINT8 *ROM = machine.region("maincpu")->base();
203
203
memory_configure_bank(machine, "bank1", 0, 3, &ROM[0x10000], 0x2000);
205
state->audiocpu = machine->device("audiocpu");
206
state->k007121 = machine->device("k007121");
205
state->m_audiocpu = machine.device("audiocpu");
206
state->m_k007121 = machine.device("k007121");
208
state_save_register_global(machine, state->irq_enabled);
209
state_save_register_global_array(machine, state->multiply_reg);
210
state_save_register_global(machine, state->flipscreen);
208
state->save_item(NAME(state->m_irq_enabled));
209
state->save_item(NAME(state->m_multiply_reg));
210
state->save_item(NAME(state->m_flipscreen));
213
213
static MACHINE_RESET( flkatck )
215
flkatck_state *state = machine->driver_data<flkatck_state>();
217
k007232_set_bank(machine->device("konami"), 0, 1);
219
state->irq_enabled = 0;
220
state->multiply_reg[0] = 0;
221
state->multiply_reg[1] = 0;
222
state->flipscreen = 0;
215
flkatck_state *state = machine.driver_data<flkatck_state>();
217
k007232_set_bank(machine.device("konami"), 0, 1);
219
state->m_irq_enabled = 0;
220
state->m_multiply_reg[0] = 0;
221
state->m_multiply_reg[1] = 0;
222
state->m_flipscreen = 0;
225
225
static MACHINE_CONFIG_START( flkatck, flkatck_state )
232
232
MCFG_CPU_ADD("audiocpu", Z80,3579545) /* NEC D780C-1, 3.579545 MHz */
233
233
MCFG_CPU_PROGRAM_MAP(flkatck_sound_map)
235
MCFG_QUANTUM_TIME(HZ(600))
235
MCFG_QUANTUM_TIME(attotime::from_hz(600))
237
237
MCFG_MACHINE_START(flkatck)
238
238
MCFG_MACHINE_RESET(flkatck)
244
244
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
245
245
MCFG_SCREEN_SIZE(37*8, 32*8)
246
246
MCFG_SCREEN_VISIBLE_AREA(0*8, 35*8-1, 2*8, 30*8-1)
247
MCFG_SCREEN_UPDATE(flkatck)
248
249
MCFG_GFXDECODE(flkatck)
249
250
MCFG_PALETTE_LENGTH(512)
251
252
MCFG_VIDEO_START(flkatck)
252
MCFG_VIDEO_UPDATE(flkatck)
254
254
MCFG_K007121_ADD("k007121")