From ac0e11dba7223f3d4fd26ad6156b54bcaf244297 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 15 Mar 2025 11:42:17 +0100 Subject: taito tilemap chips: mark gfxram dirty after loadstate --- src/mame/taito/asuka.cpp | 4 ++-- src/mame/taito/tc0080vco.cpp | 19 ++++++++----------- src/mame/taito/tc0100scn.cpp | 26 ++++++++++++-------------- src/mame/taito/tc0480scp.cpp | 30 ++++++++++++++++-------------- 4 files changed, 38 insertions(+), 41 deletions(-) diff --git a/src/mame/taito/asuka.cpp b/src/mame/taito/asuka.cpp index 6cf60029b1c..8fbbea99290 100644 --- a/src/mame/taito/asuka.cpp +++ b/src/mame/taito/asuka.cpp @@ -638,7 +638,7 @@ void cadash_state::main_map(address_map &map) } void base_state::eto_map(address_map &map) -{ // N.B. tc100scn mirror overlaps spriteram +{ map(0x000000, 0x0fffff).rom(); map(0x100000, 0x10000f).rw("tc0110pcr", FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w)); map(0x200000, 0x203fff).ram(); @@ -648,7 +648,7 @@ void base_state::eto_map(address_map &map) map(0x4e0000, 0x4e0001).nopr(); map(0x4e0001, 0x4e0001).w("ciu", FUNC(pc060ha_device::master_port_w)); map(0x4e0003, 0x4e0003).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w)); - map(0xc00000, 0xc0ffff).w(m_tc0100scn, FUNC(tc0100scn_device::ram_w)); + map(0xc00000, 0xc0ffff).w(m_tc0100scn, FUNC(tc0100scn_device::ram_w)); // N.B. tc100scn mirror overlaps spriteram map(0xc00000, 0xc03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w)); // sprite RAM map(0xd00000, 0xd0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); // tilemaps map(0xd20000, 0xd2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w)); diff --git a/src/mame/taito/tc0080vco.cpp b/src/mame/taito/tc0080vco.cpp index b2bb9c01faa..1390750c31c 100644 --- a/src/mame/taito/tc0080vco.cpp +++ b/src/mame/taito/tc0080vco.cpp @@ -210,16 +210,14 @@ static const int tc0080vco_zoomy_conv_table[] = 0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f }; -/* Y chain size is 16/32?/64/64? pixels. X chain size - is always 64 pixels. */ - -static const u8 size[] = { 1, 2, 4, 4 }; - void tc0080vco_device::get_sprite_params(int offs, bool zoomy_enable) { m_sprite.tile_offs = (m_spriteram[offs + 3] & 0x1fff) << 2; if (m_sprite.tile_offs) { + // Y chain size is 16/32?/64/64? pixels. X chain size is always 64 pixels. + static const u8 size[] = { 1, 2, 4, 4 }; + m_sprite.x0 = m_spriteram[offs + 1] & 0x03ff; m_sprite.y0 = m_spriteram[offs + 0] & 0x03ff; m_sprite.zoomx = (m_spriteram[offs + 2] & 0x7f00) >> 8; @@ -369,10 +367,7 @@ TILE_GET_INFO_MEMBER(tc0080vco_device::get_tx_tile_info) tileinfo.category = 0; } - tileinfo.set(1, - tile, - 0, - 0); + tileinfo.set(1, tile, 0, 0); } @@ -706,8 +701,8 @@ void tc0080vco_device::bg1_tilemap_draw(screen_device &screen, bitmap_ind16 &bit else { /* adjustment for zx is entirely speculative */ - sx = (( 0x200 + m_scroll_ram[layer + 1]) << 16) - (max_x + min_x) * (zx - 0x10000); - sy = (( 0x3fe - m_scroll_ram[layer + 3]) << 16) - (max_y + min_y) * (zy - 0x10000); + sx = (( 0x200 + m_scroll_ram[layer + 1]) << 16) - (max_x + min_x) * (zx - 0x10000); + sy = (( 0x3fe - m_scroll_ram[layer + 3]) << 16) - (max_y + min_y) * (zy - 0x10000); } copyrozbitmap_core(bitmap, cliprect, srcbitmap, sx, sy, zx, 0, 0, zy, false, screen.priority(), [privalue = priority, primask = pmask](u16 &destp, u8 &pri, const u16 &srcp) { PIXEL_OP_COPY_TRANS0_SET_PRIORITY(destp, pri, srcp); }); @@ -786,4 +781,6 @@ void tc0080vco_device::device_post_load() m_bg1_scrollx = m_scroll_ram[2] & 0x03ff; m_bg0_scrolly = m_scroll_ram[3] & 0x03ff; m_bg1_scrolly = m_scroll_ram[4] & 0x03ff; + + gfx(1)->mark_all_dirty(); } diff --git a/src/mame/taito/tc0100scn.cpp b/src/mame/taito/tc0100scn.cpp index 989b887d416..72dad04efaf 100644 --- a/src/mame/taito/tc0100scn.cpp +++ b/src/mame/taito/tc0100scn.cpp @@ -240,8 +240,6 @@ void tc0100scn_base_device::device_start() 16*8 /* every sprite takes 16 consecutive bytes */ }; - int xd, yd; - /* Set up clipping for multi-TC0100SCN games. We assume this code won't ever affect single screen games: Thundfox is the only one of those with two chips, and @@ -269,8 +267,8 @@ void tc0100scn_base_device::device_start() 7 bits higher and 2 pixels to the left than chip #1 because that's how thundfox wants it. */ - xd = (m_multiscrn_hack == 0) ? (-m_x_offset) : (-m_x_offset - 2); - yd = (m_multiscrn_hack == 0) ? (8 - m_y_offset) : (1 - m_y_offset); + int xd = (m_multiscrn_hack == 0) ? (-m_x_offset) : (-m_x_offset - 2); + int yd = (m_multiscrn_hack == 0) ? (8 - m_y_offset) : (1 - m_y_offset); m_tilemap[0][0]->set_scrolldx(xd - 16, -m_flip_xoffs - xd - 16); m_tilemap[0][0]->set_scrolldy(yd, -m_flip_yoffs - yd); @@ -345,7 +343,8 @@ void tc0100scn_device::device_start() void tc0620scc_device::device_start() { decode_gfx(gfxinfo_6bpp); - /* make SCC tile GFX format suitable for gfxdecode */ + + // make SCC tile GFX format suitable for gfxdecode gfx_element *gx0 = gfx(0); gfx_element *gx1 = gfx(1); @@ -454,8 +453,6 @@ void tc0100scn_base_device::set_layer_ptrs() void tc0100scn_base_device::restore_scroll() { - int flip; - m_bgscrollx = -m_ctrl[0]; m_fgscrollx = -m_ctrl[1]; m_tilemap[2][0]->set_scrollx(0, -m_ctrl[2]); @@ -466,7 +463,7 @@ void tc0100scn_base_device::restore_scroll() m_tilemap[2][0]->set_scrolly(0, -m_ctrl[5]); m_tilemap[2][1]->set_scrolly(0, -m_ctrl[5]); - flip = (m_ctrl[7] & 0x01) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0; + int flip = (m_ctrl[7] & 0x01) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0; m_tilemap[0][0]->set_flip(flip); m_tilemap[1][0]->set_flip(flip); m_tilemap[2][0]->set_flip(flip); @@ -490,6 +487,9 @@ void tc0100scn_base_device::device_post_load() m_tilemap[0][1]->mark_all_dirty(); m_tilemap[1][1]->mark_all_dirty(); m_tilemap[2][1]->mark_all_dirty(); + + gfx(1)->mark_all_dirty(); + gfx(2)->mark_all_dirty(); } u16 tc0100scn_base_device::ram_r(offs_t offset) @@ -616,14 +616,12 @@ void tc0100scn_base_device::tilemap_update() m_dirty = false; } - int j; - m_tilemap[0][m_dblwidth]->set_scrolly(0, m_bgscrolly); m_tilemap[1][m_dblwidth]->set_scrolly(0, m_fgscrolly); - for (j = 0; j < 256; j++) + for (int j = 0; j < 256; j++) m_tilemap[0][m_dblwidth]->set_scrollx((j + m_bgscrolly) & 0x1ff, m_bgscrollx - m_bgscroll_ram[j]); - for (j = 0; j < 256; j++) + for (int j = 0; j < 256; j++) m_tilemap[1][m_dblwidth]->set_scrollx((j + m_fgscrolly) & 0x1ff, m_fgscrollx - m_fgscroll_ram[j]); } @@ -680,8 +678,8 @@ int tc0100scn_base_device::tilemap_draw( screen_device &screen, bitmap_ind16 &bi clip &= screen.visible_area(); #if 0 -if (disable != 0 && disable != 3 && disable != 7) - popmessage("layer disable = %x",disable); + if (disable != 0 && disable != 3 && disable != 7) + popmessage("layer disable = %x", disable); #endif switch (layer) diff --git a/src/mame/taito/tc0480scp.cpp b/src/mame/taito/tc0480scp.cpp index b34c52fab91..f54ab54d039 100644 --- a/src/mame/taito/tc0480scp.cpp +++ b/src/mame/taito/tc0480scp.cpp @@ -318,7 +318,7 @@ void tc0480scp_device::device_start() /* create the char set (gfx will then be updated dynamically from RAM) */ if (!gfx(1)) - set_gfx(1, std::make_unique(&palette(), tc0480scp_charlayout, (u8 *)&m_ram[0x7000], NATIVE_ENDIAN_VALUE_LE_BE(8,0), 64, m_col_base)); //e000 + set_gfx(1, std::make_unique(&palette(), tc0480scp_charlayout, (u8 *)&m_ram[0x7000], NATIVE_ENDIAN_VALUE_LE_BE(8,0), 64, m_col_base)); // e000 save_item(NAME(m_ram)); save_item(NAME(m_ctrl)); @@ -803,7 +803,7 @@ void tc0480scp_device::bg23_draw(screen_device &screen, bitmap_ind16 &bitmap, co /* flawed calc ?? */ x_index -= (m_x_offset - 0x1f + layer * 4) * ((row_zoom & 0xff) << 8); -/* We used to kludge 270 multiply factor, before adjusting x_index instead */ + /* We used to kludge 270 multiply factor, before adjusting x_index instead */ int x_step = zoomx; if (row_zoom) /* need to reduce x_step */ @@ -917,46 +917,48 @@ void tc0480scp_device::device_post_load() m_tilemap[4][1]->set_flip(flip); reg = m_ctrl[0]; - if (!flip) reg = -reg; + if (!flip) reg = -reg; m_bgscrollx[0] = reg; reg = m_ctrl[1] + 4; - if (!flip) reg = -reg; + if (!flip) reg = -reg; m_bgscrollx[1] = reg; reg = m_ctrl[2] + 8; - if (!flip) reg = -reg; + if (!flip) reg = -reg; m_bgscrollx[2] = reg; reg = m_ctrl[3] + 12; - if (!flip) reg = -reg; + if (!flip) reg = -reg; m_bgscrollx[3] = reg; reg = m_ctrl[4]; - if (flip) reg = -reg; + if (flip) reg = -reg; m_bgscrolly[0] = reg; reg = m_ctrl[5]; - if (flip) reg = -reg; + if (flip) reg = -reg; m_bgscrolly[1] = reg; reg = m_ctrl[6]; - if (flip) reg = -reg; + if (flip) reg = -reg; m_bgscrolly[2] = reg; reg = m_ctrl[7]; - if (flip) reg = -reg; + if (flip) reg = -reg; m_bgscrolly[3] = reg; reg = m_ctrl[0x0c]; - if (!flip) reg -= m_text_xoffs; - if (flip) reg += m_text_xoffs; + if (flip) reg += m_text_xoffs; + else reg -= m_text_xoffs; m_tilemap[4][0]->set_scrollx(0, -reg); m_tilemap[4][1]->set_scrollx(0, -reg); reg = m_ctrl[0x0d]; - if (!flip) reg -= m_text_yoffs; - if (flip) reg += m_text_yoffs; + if (flip) reg += m_text_yoffs; + else reg -= m_text_yoffs; m_tilemap[4][0]->set_scrolly(0, -reg); m_tilemap[4][1]->set_scrolly(0, -reg); + + gfx(1)->mark_all_dirty(); } -- cgit v1.2.3-70-g09d2