48
static WRITE8_HANDLER( poolshrk_da_latch_w )
48
WRITE8_MEMBER(poolshrk_state::poolshrk_da_latch_w)
50
poolshrk_state *state = space->machine().driver_data<poolshrk_state>();
51
state->m_da_latch = data & 15;
50
m_da_latch = data & 15;
55
static WRITE8_HANDLER( poolshrk_led_w )
54
WRITE8_MEMBER(poolshrk_state::poolshrk_led_w)
58
set_led_status(space->machine(), 0, offset & 1);
57
set_led_status(machine(), 0, offset & 1);
60
set_led_status(space->machine(), 1, offset & 1);
59
set_led_status(machine(), 1, offset & 1);
64
static WRITE8_HANDLER( poolshrk_watchdog_w )
63
WRITE8_MEMBER(poolshrk_state::poolshrk_watchdog_w)
66
65
if ((offset & 3) == 3)
73
static READ8_HANDLER( poolshrk_input_r )
72
READ8_MEMBER(poolshrk_state::poolshrk_input_r)
75
poolshrk_state *state = space->machine().driver_data<poolshrk_state>();
76
74
static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3" };
77
UINT8 val = input_port_read(space->machine(), portnames[offset & 3]);
79
int x = input_port_read(space->machine(), (offset & 1) ? "AN1" : "AN0");
80
int y = input_port_read(space->machine(), (offset & 1) ? "AN3" : "AN2");
82
if (x >= state->m_da_latch) val |= 8;
83
if (y >= state->m_da_latch) val |= 4;
75
UINT8 val = ioport(portnames[offset & 3])->read();
77
int x = ioport((offset & 1) ? "AN1" : "AN0")->read();
78
int y = ioport((offset & 1) ? "AN3" : "AN2")->read();
80
if (x >= m_da_latch) val |= 8;
81
if (y >= m_da_latch) val |= 4;
85
83
if ((offset & 3) == 3)
94
static READ8_HANDLER( poolshrk_irq_reset_r )
92
READ8_MEMBER(poolshrk_state::poolshrk_irq_reset_r)
96
cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
94
cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
102
static ADDRESS_MAP_START( poolshrk_cpu_map, AS_PROGRAM, 8 )
100
static ADDRESS_MAP_START( poolshrk_cpu_map, AS_PROGRAM, 8, poolshrk_state )
103
101
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
104
102
AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0x2300) AM_RAM
105
AM_RANGE(0x0400, 0x07ff) AM_MIRROR(0x2000) AM_WRITEONLY AM_BASE_MEMBER(poolshrk_state, m_playfield_ram)
106
AM_RANGE(0x0800, 0x080f) AM_MIRROR(0x23f0) AM_WRITEONLY AM_BASE_MEMBER(poolshrk_state, m_hpos_ram)
107
AM_RANGE(0x0c00, 0x0c0f) AM_MIRROR(0x23f0) AM_WRITEONLY AM_BASE_MEMBER(poolshrk_state, m_vpos_ram)
103
AM_RANGE(0x0400, 0x07ff) AM_MIRROR(0x2000) AM_WRITEONLY AM_SHARE("playfield_ram")
104
AM_RANGE(0x0800, 0x080f) AM_MIRROR(0x23f0) AM_WRITEONLY AM_SHARE("hpos_ram")
105
AM_RANGE(0x0c00, 0x0c0f) AM_MIRROR(0x23f0) AM_WRITEONLY AM_SHARE("vpos_ram")
108
106
AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x2000) AM_READWRITE(poolshrk_input_r, poolshrk_watchdog_w)
109
AM_RANGE(0x1400, 0x17ff) AM_MIRROR(0x2000) AM_DEVWRITE("discrete", poolshrk_scratch_sound_w)
110
AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x2000) AM_DEVWRITE("discrete", poolshrk_score_sound_w)
111
AM_RANGE(0x1c00, 0x1fff) AM_MIRROR(0x2000) AM_DEVWRITE("discrete", poolshrk_click_sound_w)
107
AM_RANGE(0x1400, 0x17ff) AM_MIRROR(0x2000) AM_DEVWRITE_LEGACY("discrete", poolshrk_scratch_sound_w)
108
AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x2000) AM_DEVWRITE_LEGACY("discrete", poolshrk_score_sound_w)
109
AM_RANGE(0x1c00, 0x1fff) AM_MIRROR(0x2000) AM_DEVWRITE_LEGACY("discrete", poolshrk_click_sound_w)
112
110
AM_RANGE(0x4000, 0x4000) AM_NOP /* diagnostic ROM location */
113
111
AM_RANGE(0x6000, 0x63ff) AM_WRITE(poolshrk_da_latch_w)
114
AM_RANGE(0x6400, 0x67ff) AM_DEVWRITE("discrete", poolshrk_bump_sound_w)
112
AM_RANGE(0x6400, 0x67ff) AM_DEVWRITE_LEGACY("discrete", poolshrk_bump_sound_w)
115
113
AM_RANGE(0x6800, 0x6bff) AM_READ(poolshrk_irq_reset_r)
116
114
AM_RANGE(0x6c00, 0x6fff) AM_WRITE(poolshrk_led_w)
117
115
AM_RANGE(0x7000, 0x7fff) AM_ROM