mirror of
https://github.com/holub/mame
synced 2025-06-06 12:53:46 +03:00
fix rowscroll in cutefght (nw)
This commit is contained in:
parent
c576d46ea7
commit
9937f167c0
@ -121,6 +121,11 @@ public:
|
||||
required_shared_ptr<UINT32> m_vregs;
|
||||
required_shared_ptr<UINT32> m_workram;
|
||||
|
||||
UINT16* m_lineram16;
|
||||
|
||||
DECLARE_READ16_MEMBER(lineram16_r) { return m_lineram16[offset]; }
|
||||
DECLARE_WRITE16_MEMBER(lineram16_w) { COMBINE_DATA(&m_lineram16[offset]); }
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_bg2_tilemap;
|
||||
@ -255,15 +260,17 @@ void dreamwld_state::video_start()
|
||||
m_bg2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(dreamwld_state::get_dreamwld_bg2_tile_info),this),TILEMAP_SCAN_ROWS, 16, 16, 64,64);
|
||||
m_bg2_tilemap->set_transparent_pen(0);
|
||||
|
||||
m_bg_tilemap->set_scroll_rows(256); // line scrolling
|
||||
m_bg_tilemap->set_scroll_rows(64*16); // line scrolling
|
||||
m_bg_tilemap->set_scroll_cols(1);
|
||||
|
||||
m_bg2_tilemap->set_scroll_rows(256); // line scrolling
|
||||
m_bg2_tilemap->set_scroll_rows(64*16); // line scrolling
|
||||
m_bg2_tilemap->set_scroll_cols(1);
|
||||
|
||||
m_spritebuf1 = auto_alloc_array(machine(), UINT32, 0x2000 / 4);
|
||||
m_spritebuf2 = auto_alloc_array(machine(), UINT32, 0x2000 / 4);
|
||||
|
||||
m_lineram16 = (UINT16*)auto_alloc_array_clear(this->machine(), UINT16, 0x400 / 2);
|
||||
save_pointer(NAME(m_lineram16), 0x400/2);
|
||||
|
||||
}
|
||||
|
||||
@ -287,13 +294,30 @@ UINT32 dreamwld_state::screen_update_dreamwld(screen_device &screen, bitmap_ind1
|
||||
tmptilemap0 = m_bg_tilemap;
|
||||
tmptilemap1 = m_bg2_tilemap;
|
||||
|
||||
int layer0_scrolly = m_vregs[(0x400 / 4)] + 32;
|
||||
int layer1_scrolly = m_vregs[(0x400 / 4) + 2] + 32;
|
||||
int layer0_scrolly = m_vregs[(0x000 / 4)]+32;
|
||||
int layer1_scrolly = m_vregs[(0x008 / 4)]+32;
|
||||
|
||||
int layer0_scrollx = m_vregs[(0x004 / 4)] + 3;
|
||||
int layer1_scrollx = m_vregs[(0x00c / 4)] + 5;
|
||||
UINT32 layer0_ctrl = m_vregs[0x010 / 4];
|
||||
UINT32 layer1_ctrl = m_vregs[0x014 / 4];
|
||||
|
||||
m_tilebank[0] = (layer0_ctrl >> 6) & 1;
|
||||
m_tilebank[1] = (layer1_ctrl >> 6) & 1;
|
||||
|
||||
if (m_tilebank[0] != m_tilebankold[0])
|
||||
{
|
||||
m_tilebankold[0] = m_tilebank[0];
|
||||
m_bg_tilemap->mark_all_dirty();
|
||||
}
|
||||
|
||||
if (m_tilebank[1] != m_tilebankold[1])
|
||||
{
|
||||
m_tilebankold[1] = m_tilebank[1];
|
||||
m_bg2_tilemap->mark_all_dirty();
|
||||
}
|
||||
|
||||
|
||||
int layer0_scrollx = m_vregs[(0x400 / 4) + 1] + 3;
|
||||
int layer1_scrollx = m_vregs[(0x400 / 4) + 3] + 5;
|
||||
UINT32 layer0_ctrl = m_vregs[0x412 / 4];
|
||||
UINT32 layer1_ctrl = m_vregs[0x416 / 4];
|
||||
|
||||
tmptilemap0->set_scrolly(0, layer0_scrolly);
|
||||
tmptilemap1->set_scrolly(0, layer1_scrolly);
|
||||
@ -322,56 +346,48 @@ UINT32 dreamwld_state::screen_update_dreamwld(screen_device &screen, bitmap_ind1
|
||||
{
|
||||
int x0 = 0, x1 = 0;
|
||||
|
||||
UINT16* linebase;
|
||||
|
||||
|
||||
|
||||
/* layer 0 */
|
||||
UINT16 *vregs = reinterpret_cast<UINT16 *>(m_vregs.target());
|
||||
linebase = &m_lineram16[0x000];
|
||||
|
||||
if (layer0_ctrl & 0x0300)
|
||||
{
|
||||
if (layer0_ctrl & 0x0200)
|
||||
/* per-tile rowscroll */
|
||||
x0 = vregs[BYTE_XOR_BE(0x000/2 + i/16)];
|
||||
x0 = linebase[((i+32)&0xff)/16];
|
||||
else
|
||||
/* per-line rowscroll */
|
||||
x0 = vregs[BYTE_XOR_BE(0x000/2 + ((i + layer0_scrolly)&0xff))]; // different handling to psikyo.c? ( + scrolly )
|
||||
x0 = linebase[(i+32)&0xff];
|
||||
}
|
||||
|
||||
|
||||
tmptilemap0->set_scrollx(
|
||||
(i + layer0_scrolly) % 256 /*tilemap_width(tm0size) */,
|
||||
layer0_scrollx + x0 );
|
||||
tmptilemap0->set_scrollx(
|
||||
(i + layer0_scrolly) % 1024,
|
||||
layer0_scrollx + x0 );
|
||||
|
||||
|
||||
/* layer 1 */
|
||||
linebase = &m_lineram16[0x200/2];
|
||||
|
||||
if (layer1_ctrl & 0x0300)
|
||||
{
|
||||
if (layer1_ctrl & 0x0200)
|
||||
/* per-tile rowscroll */
|
||||
x1 = vregs[BYTE_XOR_BE(0x200/2 + i/16)];
|
||||
x1 = linebase[((i+32)&0xff)/16];
|
||||
else
|
||||
/* per-line rowscroll */
|
||||
x1 = vregs[BYTE_XOR_BE(0x200/2 + ((i + layer1_scrolly)&0xff))]; // different handling to psikyo.c? ( + scrolly )
|
||||
x1 = linebase[(i+32)&0xff];
|
||||
}
|
||||
|
||||
|
||||
tmptilemap1->set_scrollx(
|
||||
(i + layer1_scrolly) % 256 /* tilemap_width(tm1size) */,
|
||||
layer1_scrollx + x1 );
|
||||
tmptilemap1->set_scrollx(
|
||||
(i + layer1_scrolly) % 1024,
|
||||
layer1_scrollx + x1 );
|
||||
}
|
||||
|
||||
|
||||
m_tilebank[0] = (m_vregs[(0x400 / 4) + 4] >> 6) & 1;
|
||||
m_tilebank[1] = (m_vregs[(0x400 / 4) + 5] >> 6) & 1;
|
||||
|
||||
if (m_tilebank[0] != m_tilebankold[0])
|
||||
{
|
||||
m_tilebankold[0] = m_tilebank[0];
|
||||
m_bg_tilemap->mark_all_dirty();
|
||||
}
|
||||
|
||||
if (m_tilebank[1] != m_tilebankold[1])
|
||||
{
|
||||
m_tilebankold[1] = m_tilebank[1];
|
||||
m_bg2_tilemap->mark_all_dirty();
|
||||
}
|
||||
|
||||
tmptilemap0->draw(screen, bitmap, cliprect, 0, 0);
|
||||
tmptilemap1->draw(screen, bitmap, cliprect, 0, 0);
|
||||
@ -434,7 +450,8 @@ static ADDRESS_MAP_START( baryon_map, AS_PROGRAM, 32, dreamwld_state )
|
||||
AM_RANGE(0x600000, 0x601fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0x800000, 0x801fff) AM_RAM_WRITE(dreamwld_bg_videoram_w ) AM_SHARE("bg_videoram")
|
||||
AM_RANGE(0x802000, 0x803fff) AM_RAM_WRITE(dreamwld_bg2_videoram_w ) AM_SHARE("bg2_videoram")
|
||||
AM_RANGE(0x804000, 0x805fff) AM_RAM AM_SHARE("vregs") // scroll regs etc.
|
||||
AM_RANGE(0x804000, 0x8043ff) AM_READWRITE16(lineram16_r, lineram16_w, 0xffffffff) // linescroll
|
||||
AM_RANGE(0x804400, 0x805fff) AM_RAM AM_SHARE("vregs")
|
||||
|
||||
AM_RANGE(0xc00000, 0xc00003) AM_READ_PORT("INPUTS")
|
||||
AM_RANGE(0xc00004, 0xc00007) AM_READ_PORT("c00004")
|
||||
@ -1174,7 +1191,7 @@ ROM_END
|
||||
|
||||
GAME( 1997, baryon, 0, baryon, baryon, driver_device, 0, ROT270, "SemiCom / Tirano", "Baryon - Future Assault (set 1)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1997, baryona, baryon, baryon, baryon, driver_device, 0, ROT270, "SemiCom / Tirano", "Baryon - Future Assault (set 2)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1998, cutefght, 0, dreamwld, cutefght, driver_device, 0, ROT0, "SemiCom", "Cute Fighter", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) // wrong linescroll?
|
||||
GAME( 1999, rolcrush, 0, baryon, rolcrush, driver_device, 0, ROT0, "Trust / SemiCom", "Rolling Crush (version 1.07.E - 1999/02/11)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS ) // wrong
|
||||
GAME( 1998, cutefght, 0, dreamwld, cutefght, driver_device, 0, ROT0, "SemiCom", "Cute Fighter", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1999, rolcrush, 0, baryon, rolcrush, driver_device, 0, ROT0, "Trust / SemiCom", "Rolling Crush (version 1.07.E - 1999/02/11)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1999, gaialast, 0, baryon, gaialast, driver_device, 0, ROT0, "SemiCom / XESS", "Gaia - The Last Choice of Earth", GAME_NOT_WORKING )
|
||||
GAME( 2000, dreamwld, 0, dreamwld, dreamwld, driver_device, 0, ROT0, "SemiCom", "Dream World", GAME_SUPPORTS_SAVE )
|
||||
|
Loading…
Reference in New Issue
Block a user