25
25
device_set_input_line(device, 0, HOLD_LINE);
28
static READ8_HANDLER( bankedram_r )
30
surpratk_state *state = space->machine().driver_data<surpratk_state>();
32
if (state->m_videobank & 0x02)
34
if (state->m_videobank & 0x04)
35
return space->machine().generic.paletteram.u8[offset + 0x0800];
37
return space->machine().generic.paletteram.u8[offset];
39
else if (state->m_videobank & 0x01)
40
return k053245_r(state->m_k053244, offset);
42
return state->m_ram[offset];
45
static WRITE8_HANDLER( bankedram_w )
47
surpratk_state *state = space->machine().driver_data<surpratk_state>();
49
if (state->m_videobank & 0x02)
51
if (state->m_videobank & 0x04)
52
paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset + 0x0800,data);
54
paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data);
56
else if (state->m_videobank & 0x01)
57
k053245_w(state->m_k053244, offset, data);
59
state->m_ram[offset] = data;
62
static WRITE8_HANDLER( surpratk_videobank_w )
64
surpratk_state *state = space->machine().driver_data<surpratk_state>();
66
logerror("%04x: videobank = %02x\n",cpu_get_pc(&space->device()),data);
28
READ8_MEMBER(surpratk_state::bankedram_r)
31
if (m_videobank & 0x02)
33
if (m_videobank & 0x04)
34
return m_generic_paletteram_8[offset + 0x0800];
36
return m_generic_paletteram_8[offset];
38
else if (m_videobank & 0x01)
39
return k053245_r(m_k053244, offset);
44
WRITE8_MEMBER(surpratk_state::bankedram_w)
47
if (m_videobank & 0x02)
49
if (m_videobank & 0x04)
50
paletteram_xBBBBBGGGGGRRRRR_byte_be_w(space,offset + 0x0800,data);
52
paletteram_xBBBBBGGGGGRRRRR_byte_be_w(space,offset,data);
54
else if (m_videobank & 0x01)
55
k053245_w(m_k053244, offset, data);
60
WRITE8_MEMBER(surpratk_state::surpratk_videobank_w)
63
logerror("%04x: videobank = %02x\n",cpu_get_pc(&space.device()),data);
67
64
/* bit 0 = select 053245 at 0000-07ff */
68
65
/* bit 1 = select palette at 0000-07ff */
69
66
/* bit 2 = select palette bank 0 or 1 */
70
state->m_videobank = data;
73
static WRITE8_HANDLER( surpratk_5fc0_w )
70
WRITE8_MEMBER(surpratk_state::surpratk_5fc0_w)
75
surpratk_state *state = space->machine().driver_data<surpratk_state>();
77
73
if ((data & 0xf4) != 0x10)
78
logerror("%04x: 3fc0 = %02x\n",cpu_get_pc(&space->device()),data);
74
logerror("%04x: 3fc0 = %02x\n",cpu_get_pc(&space.device()),data);
80
76
/* bit 0/1 = coin counters */
81
coin_counter_w(space->machine(), 0, data & 0x01);
82
coin_counter_w(space->machine(), 1, data & 0x02);
77
coin_counter_w(machine(), 0, data & 0x01);
78
coin_counter_w(machine(), 1, data & 0x02);
84
80
/* bit 3 = enable char ROM reading through the video RAM */
85
k052109_set_rmrd_line(state->m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
81
k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
87
83
/* other bits unknown */
91
87
/********************************************/
93
static ADDRESS_MAP_START( surpratk_map, AS_PROGRAM, 8 )
94
AM_RANGE(0x0000, 0x07ff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE_MEMBER(surpratk_state, m_ram)
89
static ADDRESS_MAP_START( surpratk_map, AS_PROGRAM, 8, surpratk_state )
90
AM_RANGE(0x0000, 0x07ff) AM_READWRITE(bankedram_r, bankedram_w) AM_SHARE("ram")
95
91
AM_RANGE(0x0800, 0x1fff) AM_RAM
96
92
AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank1") /* banked ROM */
97
93
AM_RANGE(0x5f8c, 0x5f8c) AM_READ_PORT("P1")
99
95
AM_RANGE(0x5f8e, 0x5f8e) AM_READ_PORT("DSW3")
100
96
AM_RANGE(0x5f8f, 0x5f8f) AM_READ_PORT("DSW1")
101
97
AM_RANGE(0x5f90, 0x5f90) AM_READ_PORT("DSW2")
102
AM_RANGE(0x5fa0, 0x5faf) AM_DEVREADWRITE("k053244", k053244_r, k053244_w)
103
AM_RANGE(0x5fb0, 0x5fbf) AM_DEVWRITE("k053251", k053251_w)
104
AM_RANGE(0x5fc0, 0x5fc0) AM_READWRITE(watchdog_reset_r, surpratk_5fc0_w)
105
AM_RANGE(0x5fd0, 0x5fd1) AM_DEVWRITE("ymsnd", ym2151_w)
98
AM_RANGE(0x5fa0, 0x5faf) AM_DEVREADWRITE_LEGACY("k053244", k053244_r, k053244_w)
99
AM_RANGE(0x5fb0, 0x5fbf) AM_DEVWRITE_LEGACY("k053251", k053251_w)
100
AM_RANGE(0x5fc0, 0x5fc0) AM_READ(watchdog_reset_r) AM_WRITE(surpratk_5fc0_w)
101
AM_RANGE(0x5fd0, 0x5fd1) AM_DEVWRITE_LEGACY("ymsnd", ym2151_w)
106
102
AM_RANGE(0x5fc4, 0x5fc4) AM_WRITE(surpratk_videobank_w)
107
AM_RANGE(0x4000, 0x7fff) AM_DEVREADWRITE("k052109", k052109_r, k052109_w)
103
AM_RANGE(0x4000, 0x7fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_r, k052109_w)
108
104
AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM */
195
191
static MACHINE_START( surpratk )
197
193
surpratk_state *state = machine.driver_data<surpratk_state>();
198
UINT8 *ROM = machine.region("maincpu")->base();
200
memory_configure_bank(machine, "bank1", 0, 28, &ROM[0x10000], 0x2000);
201
memory_configure_bank(machine, "bank1", 28, 4, &ROM[0x08000], 0x2000);
202
memory_set_bank(machine, "bank1", 0);
204
machine.generic.paletteram.u8 = auto_alloc_array_clear(machine, UINT8, 0x1000);
194
UINT8 *ROM = state->memregion("maincpu")->base();
196
state->membank("bank1")->configure_entries(0, 28, &ROM[0x10000], 0x2000);
197
state->membank("bank1")->configure_entries(28, 4, &ROM[0x08000], 0x2000);
198
state->membank("bank1")->set_entry(0);
200
state->m_generic_paletteram_8.allocate(0x1000);
206
202
state->m_maincpu = machine.device("maincpu");
207
203
state->m_k053244 = machine.device("k053244");