tiamc1: tilemap bit layers disable control (used in test mode only)

This commit is contained in:
MetalliC 2016-07-27 19:25:23 +03:00
parent b48ada64c5
commit 0e6a1a5d75
3 changed files with 32 additions and 9 deletions

View File

@ -113,7 +113,6 @@
- Use machine/pit8253.c in sound
- Check sprites priorities on the real hardware
- Check vertical background scrolling on the real hardware
- What charset control is used for?
- Kot Rybolov viewable area size likely controlled by pit8253 timers 0 and 1, used in test mode only
*/
@ -168,7 +167,7 @@ static ADDRESS_MAP_START( tiamc1_io_map, AS_IO, 8, tiamc1_state )
AM_RANGE(0xbc, 0xbc) AM_WRITE(tiamc1_bg_vshift_w)/* background V scroll */
AM_RANGE(0xbd, 0xbd) AM_WRITE(tiamc1_bg_hshift_w)/* background H scroll */
AM_RANGE(0xbe, 0xbe) AM_WRITE(tiamc1_bankswitch_w) /* VRAM selector */
AM_RANGE(0xbf, 0xbf) AM_WRITENOP /* charset control */
AM_RANGE(0xbf, 0xbf) AM_WRITE(tiamc1_bg_bplctrl_w) /* charset control */
AM_RANGE(0xc0, 0xc3) AM_DEVWRITE("2x8253", tiamc1_sound_device, tiamc1_timer0_w) /* timer 0 */
AM_RANGE(0xd0, 0xd3) AM_DEVREADWRITE("kr580vv55a", i8255_device, read, write) /* input ports + coin counters & lockout */
AM_RANGE(0xd4, 0xd7) AM_DEVWRITE("2x8253", tiamc1_sound_device, tiamc1_timer1_w) /* timer 1 */
@ -236,8 +235,8 @@ static INPUT_PORTS_START( gorodki )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* OUT:game counter */
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* RAZR ??? */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) // right button
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) // left button
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) // right button
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) // left button
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@ -337,7 +336,7 @@ static MACHINE_CONFIG_START( tiamc1, tiamc1_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tiamc1)
MCFG_PALETTE_ADD("palette", 16)
MCFG_PALETTE_ADD("palette", 32)
MCFG_PALETTE_INIT_OWNER(tiamc1_state, tiamc1)
/* sound hardware */

View File

@ -22,9 +22,11 @@ public:
UINT8 *m_spriteram_y;
UINT8 *m_spriteram_a;
UINT8 *m_spriteram_n;
UINT8 *m_paletteram;
UINT8 m_layers_ctrl;
UINT8 m_bg_vshift;
UINT8 m_bg_hshift;
UINT8 m_bg_bplctrl;
tilemap_t *m_bg_tilemap1;
tilemap_t *m_bg_tilemap2;
std::unique_ptr<rgb_t[]> m_palette_ptr;
@ -37,6 +39,7 @@ public:
DECLARE_WRITE8_MEMBER(tiamc1_sprite_n_w);
DECLARE_WRITE8_MEMBER(tiamc1_bg_vshift_w);
DECLARE_WRITE8_MEMBER(tiamc1_bg_hshift_w);
DECLARE_WRITE8_MEMBER(tiamc1_bg_bplctrl_w);
DECLARE_WRITE8_MEMBER(tiamc1_palette_w);
DECLARE_WRITE8_MEMBER(kot_bankswitch_w);
DECLARE_WRITE8_MEMBER(kot_videoram_w);
@ -56,6 +59,7 @@ public:
required_device<palette_device> m_palette;
private:
optional_device<speaker_sound_device> m_speaker;
void update_bg_palette();
};

View File

@ -89,9 +89,24 @@ WRITE8_MEMBER(tiamc1_state::tiamc1_bg_hshift_w)
m_bg_hshift = data;
}
WRITE8_MEMBER(tiamc1_state::tiamc1_bg_bplctrl_w)
{
m_bg_bplctrl = data;
update_bg_palette();
}
WRITE8_MEMBER(tiamc1_state::tiamc1_palette_w)
{
m_paletteram[offset] = data;
m_palette->set_pen_color(offset, m_palette_ptr[data]);
update_bg_palette();
}
void tiamc1_state::update_bg_palette()
{
UINT8 bplmask = ((m_bg_bplctrl >> 0) & 1) | ((m_bg_bplctrl >> 1) & 2) | ((m_bg_bplctrl >> 2) & 4) | ((m_bg_bplctrl >> 3) & 8);
for (int i = 0; i < 16; i++)
m_palette->set_pen_color(i + 16, m_palette_ptr[m_paletteram[i | bplmask]]);
}
PALETTE_INIT_MEMBER(tiamc1_state, tiamc1)
@ -139,7 +154,7 @@ TILE_GET_INFO_MEMBER(tiamc1_state::get_bg2_tile_info)
void tiamc1_state::video_start()
{
m_videoram = make_unique_clear<UINT8[]>(0x3040);
m_videoram = make_unique_clear<UINT8[]>(0x3050);
m_charram = m_videoram.get() + 0x0800; /* Ram is banked */
m_tileram = m_videoram.get() + 0x0000;
@ -148,8 +163,9 @@ void tiamc1_state::video_start()
m_spriteram_x = m_videoram.get() + 0x3010;
m_spriteram_n = m_videoram.get() + 0x3020;
m_spriteram_a = m_videoram.get() + 0x3030;
m_paletteram = m_videoram.get() + 0x3040;
save_pointer(NAME(m_videoram.get()), 0x3040);
save_pointer(NAME(m_videoram.get()), 0x3050);
m_bg_tilemap1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(tiamc1_state::get_bg1_tile_info),this), TILEMAP_SCAN_ROWS,
8, 8, 32, 32);
@ -158,9 +174,12 @@ void tiamc1_state::video_start()
8, 8, 32, 32);
m_bg_tilemap1->set_scrolldx(4, 4);
m_bg_tilemap2->set_scrolldx(4, 4);
m_bg_tilemap1->set_palette_offset(16);
m_bg_tilemap2->set_palette_offset(16);
m_bg_vshift = 0;
m_bg_hshift = 0;
m_bg_bplctrl = 0;
save_item(NAME(m_layers_ctrl));
save_item(NAME(m_bg_vshift));
@ -173,14 +192,15 @@ VIDEO_START_MEMBER(tiamc1_state, kot)
{
m_charram = memregion("gfx2")->base();
m_videoram = make_unique_clear<UINT8[]>(0x440);
m_videoram = make_unique_clear<UINT8[]>(0x450);
m_tileram = m_videoram.get() + 0x000;
m_spriteram_y = m_videoram.get() + 0x400;
m_spriteram_x = m_videoram.get() + 0x410;
m_spriteram_n = m_videoram.get() + 0x420;
m_spriteram_a = m_videoram.get() + 0x430;
m_paletteram = m_videoram.get() + 0x440;
save_pointer(NAME(m_videoram.get()), 0x440);
save_pointer(NAME(m_videoram.get()), 0x450);
m_bg_tilemap1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(tiamc1_state::get_bg1_tile_info), this), TILEMAP_SCAN_ROWS,
8, 8, 32, 32);