void cave_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh) { int pri; int layers_ctrl = -1; int glob_flipx = READ_WORD(&cave_videoregs[0]) & 0x8000; int glob_flipy = READ_WORD(&cave_videoregs[2]) & 0x8000; tilemap_set_flip(ALL_TILEMAPS, (glob_flipx ? TILEMAP_FLIPX : 0) | (glob_flipy ? TILEMAP_FLIPY : 0) ); tilemap_set_enable( tilemap_0, READ_WORD(&cave_vctrl_0[4]) & 1 ); tilemap_set_scrollx(tilemap_0, 0, READ_WORD(&cave_vctrl_0[0]) ); tilemap_set_scrolly(tilemap_0, 0, READ_WORD(&cave_vctrl_0[2]) ); if (tilemap_1) { tilemap_set_enable( tilemap_1, READ_WORD(&cave_vctrl_1[4]) & 1 ); tilemap_set_scrollx(tilemap_1, 0, READ_WORD(&cave_vctrl_1[0]) ); tilemap_set_scrolly(tilemap_1, 0, READ_WORD(&cave_vctrl_1[2]) ); } if (tilemap_2) { tilemap_set_enable( tilemap_2, READ_WORD(&cave_vctrl_2[4]) & 1 ); tilemap_set_scrollx(tilemap_2, 0, READ_WORD(&cave_vctrl_2[0]) ); tilemap_set_scrolly(tilemap_2, 0, READ_WORD(&cave_vctrl_2[2]) ); } tilemap_update(ALL_TILEMAPS); palette_init_used_colors(); get_sprite_info(); sprite_update(); if (palette_recalc()) tilemap_mark_all_pixels_dirty(ALL_TILEMAPS); tilemap_render(ALL_TILEMAPS); /* Clear the background if at least one of layer 0's tile priorities is lacking */ if ((layers_ctrl & 0xf) != 0xf) osd_clearbitmap(Machine->scrbitmap); /* Pen 0 of layer 0's tiles (any priority) goes below anything else */ for ( pri = 0; pri < 4; pri++ ) if ((layers_ctrl&(1<<(pri+0)))&&tilemap_0) tilemap_draw(bitmap, tilemap_0, TILEMAP_IGNORE_TRANSPARENCY | pri); /* Draw the rest with transparency */ for ( pri = 0; pri < 4; pri++ ) { if ((layers_ctrl&(1<<(pri+12)))) sprite_draw(sprite_list, pri); if ((layers_ctrl&(1<<(pri+0)))&&tilemap_0) tilemap_draw(bitmap, tilemap_0, pri); if ((layers_ctrl&(1<<(pri+4)))&&tilemap_1) tilemap_draw(bitmap, tilemap_1, pri); if ((layers_ctrl&(1<<(pri+8)))&&tilemap_2) tilemap_draw(bitmap, tilemap_2, pri); } }
void twincobr_display(int enable) { twincobr_display_on = enable; tilemap_set_enable(bg_tilemap, enable); tilemap_set_enable(fg_tilemap, enable); tilemap_set_enable(tx_tilemap, enable); }
static void bg_ctrl(int offset, int data, tilemap_t* tilemap) { int scrollx = tilemap_get_scrollx(tilemap, 0); int scrolly = tilemap_get_scrolly(tilemap, 0); switch (offset) { case 0: scrollx = ((scrollx & 0x100) | data); break; case 1: scrollx = ((scrollx & 0x0ff) | (data << 8)); break; case 2: scrolly = ((scrolly & 0x100) | data); break; case 3: scrolly = ((scrolly & 0x0ff) | (data << 8)); break; case 4: tilemap_set_enable(tilemap, data & 1); break; } tilemap_set_scrollx(tilemap, 0, scrollx); tilemap_set_scrolly(tilemap, 0, scrolly); }
INLINE void dooyong_scroll8_w(offs_t offset, UINT8 data, UINT8 *scroll, tilemap_t *map) { UINT8 old = scroll[offset]; if (old != data) { scroll[offset] = data; if (map != NULL) switch (offset) { case 0: /* Low byte of x scroll - scroll tilemap */ tilemap_set_scrollx(map, 0, data); break; case 1: /* High byte of x scroll - mark tilemap dirty so new tile gfx will be loaded */ tilemap_mark_all_tiles_dirty(map); break; case 3: /* Low byte of y scroll */ case 4: /* High byte of y scroll */ tilemap_set_scrolly(map, 0, (int)scroll[3] | ((int)scroll[4] << 8)); break; case 6: /* Tilemap enable and mode control */ tilemap_set_enable(map, !(data & 0x10)); if ((data & 0x20) != (old & 0x20)) // This sets the tilemap data format tilemap_mark_all_tiles_dirty(map); break; default: /* Other addresses are used but function is unknown */ /* 0x05 and 0x07 are initialised on startup */ /* 0x02 is initialised on startup by some games and written to continuously by others */ /*{ const char *name; if (scroll == state->bgscroll8) name = "bg"; else if (scroll == state->bg2scroll8) name = "bg2"; else if (scroll == state->fgscroll8) name = "fg"; else if (scroll == state->fg2scroll8) name = "fg2"; else name = "unknown"; printf("Unknown %s tilemap control: 0x%02x = 0x%02x\n", name, (unsigned)offset, (unsigned)data); }*/ break; } } }