// license:BSD-3-Clause // copyright-holders:David Haywood /******************************************************************** Ashita no Joe (Success Joe) [Wave] video hardware emulation *********************************************************************/ #include "emu.h" #include "includes/ashnojoe.h" TILE_GET_INFO_MEMBER(ashnojoe_state::get_tile_info_highest) { int code = m_tileram[0][tile_index]; SET_TILE_INFO_MEMBER(2, code & 0xfff, ((code >> 12) & 0x0f), 0); } TILE_GET_INFO_MEMBER(ashnojoe_state::get_tile_info_midlow) { int code = m_tileram[1][tile_index * 2]; int attr = m_tileram[1][tile_index * 2 + 1]; SET_TILE_INFO_MEMBER(4, (code & 0x7fff), ((attr >> 8) & 0x1f) + 0x40, 0); } TILE_GET_INFO_MEMBER(ashnojoe_state::get_tile_info_high) { int code = m_tileram[2][tile_index]; SET_TILE_INFO_MEMBER(0, code & 0xfff, ((code >> 12) & 0x0f) + 0x10, 0); } TILE_GET_INFO_MEMBER(ashnojoe_state::get_tile_info_low) { int code = m_tileram[3][tile_index]; SET_TILE_INFO_MEMBER(1, code & 0xfff, ((code >> 12) & 0x0f) + 0x60, 0); } TILE_GET_INFO_MEMBER(ashnojoe_state::get_tile_info_midhigh) { int code = m_tileram[4][tile_index * 2]; int attr = m_tileram[4][tile_index * 2 + 1]; SET_TILE_INFO_MEMBER(4, (code & 0x7fff), ((attr >> 8) & 0x1f) + 0x20, 0); } TILE_GET_INFO_MEMBER(ashnojoe_state::get_tile_info_lowest) { const int buffer = (m_tilemap_reg[0] & 0x02) >> 1; int code = m_tileram[5 + buffer][tile_index * 2]; int attr = m_tileram[5 + buffer][tile_index * 2 + 1]; SET_TILE_INFO_MEMBER(3, (code & 0x1fff), ((attr >> 8) & 0x1f) + 0x70, 0); } void ashnojoe_state::tilemaps_xscroll_w(offs_t offset, u16 data) { switch (offset) { case 0: m_tilemap[2]->set_scrollx(0, data); break; case 1: m_tilemap[4]->set_scrollx(0, data); break; case 2: m_tilemap[1]->set_scrollx(0, data); break; case 3: m_tilemap[3]->set_scrollx(0, data); break; case 4: m_tilemap[5]->set_scrollx(0, data); break; } } void ashnojoe_state::tilemaps_yscroll_w(offs_t offset, u16 data) { switch (offset) { case 0: m_tilemap[2]->set_scrolly(0, data); break; case 1: m_tilemap[4]->set_scrolly(0, data); break; case 2: m_tilemap[1]->set_scrolly(0, data); break; case 3: m_tilemap[3]->set_scrolly(0, data); break; case 4: m_tilemap[5]->set_scrolly(0, data); break; } } void ashnojoe_state::tilemap_regs_w(offs_t offset, u16 data, u16 mem_mask) { const u16 old = m_tilemap_reg[offset]; data = COMBINE_DATA(&m_tilemap_reg[offset]); if (old != data) { if (offset == 0) { if ((old ^ data) & 0x02) m_tilemap[5]->mark_all_dirty(); } } } void ashnojoe_state::video_start() { m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ashnojoe_state::get_tile_info_highest)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ashnojoe_state::get_tile_info_midlow)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ashnojoe_state::get_tile_info_high)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); m_tilemap[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ashnojoe_state::get_tile_info_low)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64); m_tilemap[4] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ashnojoe_state::get_tile_info_midhigh)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); m_tilemap[5] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ashnojoe_state::get_tile_info_lowest)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); m_tilemap[0]->set_transparent_pen(15); m_tilemap[1]->set_transparent_pen(15); m_tilemap[2]->set_transparent_pen(15); m_tilemap[3]->set_transparent_pen(15); m_tilemap[4]->set_transparent_pen(15); } u32 ashnojoe_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { //m_tilemap_reg[0] & 0x10 // ?? on coin insertion flip_screen_set(m_tilemap_reg[0] & 1); m_tilemap[5]->draw(screen, bitmap, cliprect, 0, 0); m_tilemap[3]->draw(screen, bitmap, cliprect, 0, 0); m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0); m_tilemap[4]->draw(screen, bitmap, cliprect, 0, 0); m_tilemap[2]->draw(screen, bitmap, cliprect, 0, 0); m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0); return 0; }