mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
funtech/supracan.cpp: implement linescroll x
This commit is contained in:
parent
ca1df2fcb2
commit
d75b6cd0cb
@ -227,6 +227,7 @@ private:
|
||||
uint16_t m_tilemap_flags[3]{};
|
||||
uint16_t m_tilemap_mode[3]{};
|
||||
uint16_t m_tilemap_tile_mode[3]{};
|
||||
uint16_t m_tilemap_linescrollx_addr[3]{};
|
||||
|
||||
uint32_t m_roz_base_addr = 0;
|
||||
uint16_t m_roz_mode = 0;
|
||||
@ -1093,14 +1094,22 @@ uint32_t supracan_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
|
||||
|
||||
uint16_t *src = &src_bitmap.pix(realy & ((ysize * 8) - 1));
|
||||
uint8_t *priop = &m_prio_bitmap.pix(y);
|
||||
int line_scroll_x = scrollx;
|
||||
|
||||
// formduel main menu
|
||||
if (BIT(m_tilemap_tile_mode[layer], 14))
|
||||
{
|
||||
int16_t linescrollx = (int16_t)m_vram[((m_tilemap_linescrollx_addr[layer] << 1) + y) & 0xffff];
|
||||
line_scroll_x += linescrollx;
|
||||
}
|
||||
|
||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
{
|
||||
int actualx = x & mosaic_mask;
|
||||
int realx = actualx + scrollx;
|
||||
int realx = actualx + line_scroll_x;
|
||||
|
||||
if (!wrap)
|
||||
if (scrollx + x < 0 || scrollx + x > ((xsize * 8) - 1))
|
||||
if (line_scroll_x + x < 0 || line_scroll_x + x > ((xsize * 8) - 1))
|
||||
continue;
|
||||
|
||||
uint16_t srcpix = src[realx & ((xsize * 8) - 1)];
|
||||
@ -1943,6 +1952,7 @@ void supracan_state::video_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
||||
|
||||
visarea.set(0, (h320_mode ? 320 : 256) - 1, 8, 232 - 1);
|
||||
m_screen->configure(htotal, 262, visarea, attotime::from_ticks(htotal * 262, U13_CLOCK / divider).as_attoseconds());
|
||||
//m_screen->reset_origin(0, 0);
|
||||
}
|
||||
|
||||
m_video_flags = data;
|
||||
@ -1991,6 +2001,7 @@ void supracan_state::video_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
||||
case 0x106/2: m_tilemap_scrolly[0] = data; LOGMASKED(LOG_TILEMAP0, "tilemap_scrolly[0] = %04x\n", data); break;
|
||||
case 0x108/2: m_tilemap_base_addr[0] = data << 1; LOGMASKED(LOG_TILEMAP0, "tilemap_base_addr[0] = %05x\n", data << 2); break;
|
||||
case 0x10a/2: m_tilemap_mode[0] = data; LOGMASKED(LOG_TILEMAP0, "tilemap_mode[0] = %04x\n", data); break;
|
||||
case 0x10c/2: m_tilemap_linescrollx_addr[0] = data; break;
|
||||
|
||||
/* Tilemap 1 */
|
||||
case 0x120/2: {
|
||||
@ -2004,6 +2015,7 @@ void supracan_state::video_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
||||
case 0x126/2: m_tilemap_scrolly[1] = data; LOGMASKED(LOG_TILEMAP1, "tilemap_scrolly[1] = %04x\n", data); break;
|
||||
case 0x128/2: m_tilemap_base_addr[1] = data << 1; LOGMASKED(LOG_TILEMAP1, "tilemap_base_addr[1] = %05x\n", data << 2); break;
|
||||
case 0x12a/2: m_tilemap_mode[1] = data; LOGMASKED(LOG_TILEMAP1, "tilemap_mode[1] = %04x\n", data); break;
|
||||
case 0x12c/2: m_tilemap_linescrollx_addr[1] = data; break;
|
||||
|
||||
/* Tilemap 2 */
|
||||
case 0x140/2: {
|
||||
@ -2017,6 +2029,7 @@ void supracan_state::video_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
||||
case 0x146/2: m_tilemap_scrolly[2] = data; LOGMASKED(LOG_TILEMAP2, "tilemap_scrolly[2] = %04x\n", data); break;
|
||||
case 0x148/2: m_tilemap_base_addr[2] = data << 1; LOGMASKED(LOG_TILEMAP2, "tilemap_base_addr[2] = %05x\n", data << 2); break;
|
||||
case 0x14a/2: m_tilemap_mode[2] = data; LOGMASKED(LOG_TILEMAP2, "tilemap_mode[2] = %04x\n", data); break;
|
||||
case 0x14c/2: m_tilemap_linescrollx_addr[2] = data; break;
|
||||
|
||||
/* ROZ */
|
||||
case 0x180/2: {
|
||||
|
Loading…
Reference in New Issue
Block a user