32
32
cabaret_state(const machine_config &mconfig, device_type type, const char *tag)
33
: driver_device(mconfig, type, tag) { }
33
: driver_device(mconfig, type, tag) ,
34
m_fg_tile_ram(*this, "fg_tile_ram"),
35
m_fg_color_ram(*this, "fg_color_ram"),
36
m_bg_scroll(*this, "bg_scroll"),
37
m_bg_tile_ram(*this, "bg_tile_ram"){ }
39
required_shared_ptr<UINT8> m_fg_tile_ram;
40
required_shared_ptr<UINT8> m_fg_color_ram;
41
required_shared_ptr<UINT8> m_bg_scroll;
42
required_shared_ptr<UINT8> m_bg_tile_ram;
36
43
tilemap_t *m_bg_tilemap;
39
UINT8 *m_fg_color_ram;
40
44
tilemap_t *m_fg_tilemap;
47
DECLARE_WRITE8_MEMBER(bg_scroll_w);
48
DECLARE_WRITE8_MEMBER(bg_tile_w);
49
DECLARE_WRITE8_MEMBER(fg_tile_w);
50
DECLARE_WRITE8_MEMBER(fg_color_w);
51
DECLARE_WRITE8_MEMBER(cabaret_nmi_and_coins_w);
54
static WRITE8_HANDLER( bg_scroll_w )
64
WRITE8_MEMBER(cabaret_state::bg_scroll_w)
56
cabaret_state *state = space->machine().driver_data<cabaret_state>();
57
state->m_bg_scroll[offset] = data;
58
state->m_bg_tilemap->set_scrolly(offset,data);
66
m_bg_scroll[offset] = data;
67
m_bg_tilemap->set_scrolly(offset,data);
61
static WRITE8_HANDLER( bg_tile_w )
70
WRITE8_MEMBER(cabaret_state::bg_tile_w)
63
cabaret_state *state = space->machine().driver_data<cabaret_state>();
64
state->m_bg_tile_ram[offset] = data;
65
state->m_bg_tilemap->mark_tile_dirty(offset);
72
m_bg_tile_ram[offset] = data;
73
m_bg_tilemap->mark_tile_dirty(offset);
68
76
static TILE_GET_INFO( get_bg_tile_info )
80
88
SET_TILE_INFO(0, code, tile != 0x1fff ? ((code >> 12) & 0xe) + 1 : 0, 0);
83
static WRITE8_HANDLER( fg_tile_w )
91
WRITE8_MEMBER(cabaret_state::fg_tile_w)
85
cabaret_state *state = space->machine().driver_data<cabaret_state>();
86
state->m_fg_tile_ram[offset] = data;
87
state->m_fg_tilemap->mark_tile_dirty(offset);
93
m_fg_tile_ram[offset] = data;
94
m_fg_tilemap->mark_tile_dirty(offset);
90
static WRITE8_HANDLER( fg_color_w )
97
WRITE8_MEMBER(cabaret_state::fg_color_w)
92
cabaret_state *state = space->machine().driver_data<cabaret_state>();
93
state->m_fg_color_ram[offset] = data;
94
state->m_fg_tilemap->mark_tile_dirty(offset);
99
m_fg_color_ram[offset] = data;
100
m_fg_tilemap->mark_tile_dirty(offset);
97
103
static VIDEO_START(cabaret)
125
static void show_out(cabaret_state *state)
131
void cabaret_state::show_out()
127
133
#ifdef MAME_DEBUG
128
popmessage("%02x %02x %02x", state->m_out[0], state->m_out[1], state->m_out[2]);
134
popmessage("%02x %02x %02x",m_out[0], m_out[1], m_out[2]);
132
static WRITE8_HANDLER( cabaret_nmi_and_coins_w )
138
WRITE8_MEMBER(cabaret_state::cabaret_nmi_and_coins_w)
134
cabaret_state *state = space->machine().driver_data<cabaret_state>();
135
if ((state->m_nmi_enable ^ data) & (~0xdd))
140
if ((m_nmi_enable ^ data) & (~0xdd))
137
logerror("PC %06X: nmi_and_coins = %02x\n",cpu_get_pc(&space->device()),data);
142
logerror("PC %06X: nmi_and_coins = %02x\n",cpu_get_pc(&space.device()),data);
138
143
// popmessage("%02x",data);
141
coin_counter_w(space->machine(), 0, data & 0x01); // coin_a
142
coin_counter_w(space->machine(), 1, data & 0x04); // coin_c
143
coin_counter_w(space->machine(), 2, data & 0x08); // key in
144
coin_counter_w(space->machine(), 3, data & 0x10); // coin state->m_out mech
146
set_led_status(space->machine(), 6, data & 0x40); // led for coin state->m_out / hopper active
148
state->m_nmi_enable = data; // data & 0x80 // nmi enable?
150
state->m_out[0] = data;
146
coin_counter_w(machine(), 0, data & 0x01); // coin_a
147
coin_counter_w(machine(), 1, data & 0x04); // coin_c
148
coin_counter_w(machine(), 2, data & 0x08); // key in
149
coin_counter_w(machine(), 3, data & 0x10); // coin m_out mech
151
set_led_status(machine(), 6, data & 0x40); // led for coin m_out / hopper active
153
m_nmi_enable = data; // data & 0x80 // nmi enable?
156
static ADDRESS_MAP_START( cabaret_map, AS_PROGRAM, 8 )
161
static ADDRESS_MAP_START( cabaret_map, AS_PROGRAM, 8, cabaret_state )
157
162
AM_RANGE( 0x00000, 0x0efff ) AM_ROM
158
163
AM_RANGE( 0x0f000, 0x0ffff ) AM_RAM AM_REGION("maincpu", 0xf000)
161
static ADDRESS_MAP_START( cabaret_portmap, AS_IO, 8 )
166
static ADDRESS_MAP_START( cabaret_portmap, AS_IO, 8, cabaret_state )
162
167
AM_RANGE( 0x0000, 0x003f ) AM_RAM // Z180 internal regs
164
169
AM_RANGE( 0x0080, 0x0080 ) AM_READ_PORT( "BUTTONS2" )
165
170
AM_RANGE( 0x0081, 0x0081 ) AM_READ_PORT( "SERVICE" )
166
171
AM_RANGE( 0x0082, 0x0082 ) AM_READ_PORT( "COINS" )
167
172
AM_RANGE( 0x0090, 0x0090 ) AM_READ_PORT( "BUTTONS1" )
168
AM_RANGE( 0x00a0, 0x00a0 ) AM_WRITE( cabaret_nmi_and_coins_w )
173
AM_RANGE( 0x00a0, 0x00a0 ) AM_WRITE(cabaret_nmi_and_coins_w )
170
175
AM_RANGE( 0x00a1, 0x00a1 ) AM_READ_PORT("DSW1") /* DSW1 */
171
176
AM_RANGE( 0x00a2, 0x00a2 ) AM_READ_PORT("DSW2") /* DSW2 */
172
177
AM_RANGE( 0x00b0, 0x00b0 ) AM_READ_PORT("DSW3") /* DSW3 */
174
AM_RANGE( 0x00e0, 0x00e1 ) AM_DEVWRITE( "ymsnd", ym2413_w )
176
AM_RANGE( 0x2000, 0x27ff ) AM_RAM_WRITE( fg_tile_w ) AM_BASE_MEMBER(cabaret_state, m_fg_tile_ram )
177
AM_RANGE( 0x2800, 0x2fff ) AM_RAM_WRITE( fg_color_w ) AM_BASE_MEMBER(cabaret_state, m_fg_color_ram )
179
AM_RANGE( 0x3000, 0x37ff ) AM_RAM_WRITE( paletteram_xBBBBBGGGGGRRRRR_split1_w ) AM_BASE_GENERIC( paletteram )
180
AM_RANGE( 0x3800, 0x3fff ) AM_RAM_WRITE( paletteram_xBBBBBGGGGGRRRRR_split2_w ) AM_BASE_GENERIC( paletteram2 )
182
AM_RANGE( 0x1000, 0x103f ) AM_RAM_WRITE( bg_scroll_w ) AM_BASE_MEMBER(cabaret_state, m_bg_scroll )
184
AM_RANGE( 0x1800, 0x19ff ) AM_RAM_WRITE( bg_tile_w ) AM_BASE_MEMBER(cabaret_state, m_bg_tile_ram )
179
AM_RANGE( 0x00e0, 0x00e1 ) AM_DEVWRITE_LEGACY("ymsnd", ym2413_w )
181
AM_RANGE( 0x2000, 0x27ff ) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
182
AM_RANGE( 0x2800, 0x2fff ) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
184
AM_RANGE( 0x3000, 0x37ff ) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_byte_split_lo_w ) AM_SHARE("paletteram")
185
AM_RANGE( 0x3800, 0x3fff ) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_byte_split_hi_w ) AM_SHARE("paletteram2")
187
AM_RANGE( 0x1000, 0x103f ) AM_RAM_WRITE(bg_scroll_w ) AM_SHARE("bg_scroll")
189
AM_RANGE( 0x1800, 0x19ff ) AM_RAM_WRITE(bg_tile_w ) AM_SHARE("bg_tile_ram")
185
190
AM_RANGE( 0x8000, 0xffff ) AM_ROM AM_REGION("gfx3", 0)