20
20
#include "includes/skykid.h"
23
static WRITE8_HANDLER( inputport_select_w )
23
WRITE8_MEMBER(skykid_state::inputport_select_w)
25
skykid_state *state = space->machine().driver_data<skykid_state>();
26
25
if ((data & 0xe0) == 0x60)
27
state->m_inputport_selected = data & 0x07;
26
m_inputport_selected = data & 0x07;
28
27
else if ((data & 0xe0) == 0xc0)
30
coin_lockout_global_w(space->machine(), ~data & 1);
31
coin_counter_w(space->machine(), 0,data & 2);
32
coin_counter_w(space->machine(), 1,data & 4);
29
coin_lockout_global_w(machine(), ~data & 1);
30
coin_counter_w(machine(), 0,data & 2);
31
coin_counter_w(machine(), 1,data & 4);
36
static READ8_HANDLER( inputport_r )
35
READ8_MEMBER(skykid_state::inputport_r)
38
skykid_state *state = space->machine().driver_data<skykid_state>();
39
switch (state->m_inputport_selected)
37
switch (m_inputport_selected)
41
39
case 0x00: /* DSW B (bits 0-4) */
42
return (input_port_read(space->machine(), "DSWB") & 0xf8) >> 3;
40
return (ioport("DSWB")->read() & 0xf8) >> 3;
43
41
case 0x01: /* DSW B (bits 5-7), DSW A (bits 0-1) */
44
return ((input_port_read(space->machine(), "DSWB") & 0x07) << 2) | ((input_port_read(space->machine(), "DSWA") & 0xc0) >> 6);
42
return ((ioport("DSWB")->read() & 0x07) << 2) | ((ioport("DSWA")->read() & 0xc0) >> 6);
45
43
case 0x02: /* DSW A (bits 2-6) */
46
return (input_port_read(space->machine(), "DSWA") & 0x3e) >> 1;
44
return (ioport("DSWA")->read() & 0x3e) >> 1;
47
45
case 0x03: /* DSW A (bit 7), DSW C (bits 0-3) */
48
return ((input_port_read(space->machine(), "DSWA") & 0x01) << 4) | (input_port_read(space->machine(), "BUTTON2") & 0x0f);
46
return ((ioport("DSWA")->read() & 0x01) << 4) | (ioport("BUTTON2")->read() & 0x0f);
49
47
case 0x04: /* coins, start */
50
return input_port_read(space->machine(), "SYSTEM");
48
return ioport("SYSTEM")->read();
51
49
case 0x05: /* 2P controls */
52
return input_port_read(space->machine(), "P2");
50
return ioport("P2")->read();
53
51
case 0x06: /* 1P controls */
54
return input_port_read(space->machine(), "P1");
52
return ioport("P1")->read();
60
static WRITE8_HANDLER( skykid_led_w )
62
set_led_status(space->machine(), 0,data & 0x08);
63
set_led_status(space->machine(), 1,data & 0x10);
66
static WRITE8_HANDLER( skykid_subreset_w )
68
int bit = !BIT(offset,11);
69
cputag_set_input_line(space->machine(), "mcu", INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
72
static WRITE8_HANDLER( skykid_bankswitch_w )
74
memory_set_bank(space->machine(), "bank1", !BIT(offset,11));
77
static WRITE8_HANDLER( skykid_irq_1_ctrl_w )
79
skykid_state *state = space->machine().driver_data<skykid_state>();
80
int bit = !BIT(offset,11);
81
state->m_main_irq_mask = bit;
58
WRITE8_MEMBER(skykid_state::skykid_led_w)
60
set_led_status(machine(), 0,data & 0x08);
61
set_led_status(machine(), 1,data & 0x10);
64
WRITE8_MEMBER(skykid_state::skykid_subreset_w)
66
int bit = !BIT(offset,11);
67
cputag_set_input_line(machine(), "mcu", INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
70
WRITE8_MEMBER(skykid_state::skykid_bankswitch_w)
72
membank("bank1")->set_entry(!BIT(offset,11));
75
WRITE8_MEMBER(skykid_state::skykid_irq_1_ctrl_w)
77
int bit = !BIT(offset,11);
78
m_main_irq_mask = bit;
83
cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
80
cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
86
static WRITE8_HANDLER( skykid_irq_2_ctrl_w )
83
WRITE8_MEMBER(skykid_state::skykid_irq_2_ctrl_w)
88
skykid_state *state = space->machine().driver_data<skykid_state>();
89
85
int bit = !BIT(offset,13);
90
state->m_mcu_irq_mask = bit;
92
cputag_set_input_line(space->machine(), "mcu", 0, CLEAR_LINE);
88
cputag_set_input_line(machine(), "mcu", 0, CLEAR_LINE);
95
91
static MACHINE_START( skykid )
97
93
skykid_state *state = machine.driver_data<skykid_state>();
98
94
/* configure the banks */
99
memory_configure_bank(machine, "bank1", 0, 2, machine.region("maincpu")->base() + 0x10000, 0x2000);
95
state->membank("bank1")->configure_entries(0, 2, state->memregion("maincpu")->base() + 0x10000, 0x2000);
101
97
state_save_register_global(machine, state->m_inputport_selected);
106
static ADDRESS_MAP_START( skykid_map, AS_PROGRAM, 8 )
102
static ADDRESS_MAP_START( skykid_map, AS_PROGRAM, 8, skykid_state )
107
103
AM_RANGE(0x0000, 0x1fff) AM_ROMBANK("bank1") /* banked ROM */
108
AM_RANGE(0x2000, 0x2fff) AM_READWRITE(skykid_videoram_r,skykid_videoram_w) AM_BASE_MEMBER(skykid_state, m_videoram)/* Video RAM (background) */
109
AM_RANGE(0x4000, 0x47ff) AM_READWRITE(skykid_textram_r,skykid_textram_w) AM_BASE_MEMBER(skykid_state, m_textram) /* video RAM (text layer) */
110
AM_RANGE(0x4800, 0x5fff) AM_RAM AM_BASE_MEMBER(skykid_state, m_spriteram) /* RAM + Sprite RAM */
104
AM_RANGE(0x2000, 0x2fff) AM_READWRITE(skykid_videoram_r,skykid_videoram_w) AM_SHARE("videoram")/* Video RAM (background) */
105
AM_RANGE(0x4000, 0x47ff) AM_READWRITE(skykid_textram_r,skykid_textram_w) AM_SHARE("textram") /* video RAM (text layer) */
106
AM_RANGE(0x4800, 0x5fff) AM_RAM AM_SHARE("spriteram") /* RAM + Sprite RAM */
111
107
AM_RANGE(0x6000, 0x60ff) AM_WRITE(skykid_scroll_y_w) /* Y scroll register map */
112
108
AM_RANGE(0x6200, 0x63ff) AM_WRITE(skykid_scroll_x_w) /* X scroll register map */
113
AM_RANGE(0x6800, 0x6bff) AM_DEVREADWRITE("namco", namcos1_cus30_r, namcos1_cus30_w) /* PSG device, shared RAM */
109
AM_RANGE(0x6800, 0x6bff) AM_DEVREADWRITE_LEGACY("namco", namcos1_cus30_r, namcos1_cus30_w) /* PSG device, shared RAM */
114
110
AM_RANGE(0x7000, 0x7fff) AM_WRITE(skykid_irq_1_ctrl_w) /* IRQ control */
115
111
AM_RANGE(0x7800, 0x7fff) AM_READ(watchdog_reset_r) /* watchdog reset */
116
112
AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM */