static WRITE8_HANDLER( bg_bank_w ) { dacholer_state *state = (dacholer_state *)space->machine->driver_data; if ((data & 3) != state->bg_bank) { state->bg_bank = data & 3; tilemap_mark_all_tiles_dirty(state->bg_tilemap); } flip_screen_set(space->machine, data & 0xc); // probably one bit for flipx and one for flipy }
void rf2_set_layer_banks(running_machine &machine, int banks) { seibuspi_state *state = machine.driver_data<seibuspi_state>(); if (state->m_rf2_layer_bank[0] != BIT(banks,0)) { state->m_rf2_layer_bank[0] = BIT(banks,0); tilemap_mark_all_tiles_dirty(state->m_back_layer); } if (state->m_rf2_layer_bank[1] != BIT(banks,1)) { state->m_rf2_layer_bank[1] = BIT(banks,1); tilemap_mark_all_tiles_dirty(state->m_mid_layer); } if (state->m_rf2_layer_bank[2] != BIT(banks,2)) { state->m_rf2_layer_bank[2] = BIT(banks,2); tilemap_mark_all_tiles_dirty(state->m_fore_layer); } }
static SCREEN_UPDATE( panicr) { panicr_state *state = screen->machine().driver_data<panicr_state>(); bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine())); tilemap_mark_all_tiles_dirty( state->m_txttilemap ); tilemap_set_scrollx( state->m_bgtilemap,0, ((state->m_scrollram[0x02]&0x0f)<<12)+((state->m_scrollram[0x02]&0xf0)<<4)+((state->m_scrollram[0x04]&0x7f)<<1)+((state->m_scrollram[0x04]&0x80)>>7) ); tilemap_draw(bitmap,cliprect,state->m_bgtilemap,0,0); draw_sprites(screen->machine(),bitmap,cliprect); tilemap_draw(bitmap,cliprect,state->m_txttilemap,0,0); return 0; }
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; } } }
void atarig1_scanline_update(screen_device &screen, int scanline) { atarig1_state *state = (atarig1_state *)screen.machine->driver_data; UINT16 *base = &state->atarigen.alpha[(scanline / 8) * 64 + 48]; int i; //if (scanline == 0) logerror("-------\n"); /* keep in range */ if (base >= &state->atarigen.alpha[0x800]) return; screen.update_partial(MAX(scanline - 1, 0)); /* update the playfield scrolls */ for (i = 0; i < 8; i++) { UINT16 word; /* first word controls horizontal scroll */ word = *base++; if (word & 0x8000) { int newscroll = ((word >> 6) + state->pfscroll_xoffset) & 0x1ff; if (newscroll != state->playfield_xscroll) { screen.update_partial(MAX(scanline + i - 1, 0)); tilemap_set_scrollx(state->atarigen.playfield_tilemap, 0, newscroll); state->playfield_xscroll = newscroll; } } /* second word controls vertical scroll and tile bank */ word = *base++; if (word & 0x8000) { int newscroll = ((word >> 6) - (scanline + i)) & 0x1ff; int newbank = word & 7; if (newscroll != state->playfield_yscroll) { screen.update_partial(MAX(scanline + i - 1, 0)); tilemap_set_scrolly(state->atarigen.playfield_tilemap, 0, newscroll); state->playfield_yscroll = newscroll; } if (newbank != state->playfield_tile_bank) { screen.update_partial(MAX(scanline + i - 1, 0)); tilemap_mark_all_tiles_dirty(state->atarigen.playfield_tilemap); state->playfield_tile_bank = newbank; } }
static void draw_edges(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int flip, int scroll_mode) { madalien_state *state = machine->driver_data<madalien_state>(); rectangle clip_edge1; rectangle clip_edge2; clip_edge1 = *cliprect; clip_edge2 = *cliprect; if (flip) { clip_edge1.min_y = *state->edge1_pos | 0x80; clip_edge2.max_y = (*state->edge2_pos & 0x7f) ^ 0x7f; } else { clip_edge1.max_y = (*state->edge1_pos & 0x7f) ^ 0x7f; clip_edge2.min_y = *state->edge2_pos | 0x80; } sect_rect(&clip_edge1, cliprect); sect_rect(&clip_edge2, cliprect); tilemap_mark_all_tiles_dirty(state->tilemap_edge1[scroll_mode]); tilemap_mark_all_tiles_dirty(state->tilemap_edge2[scroll_mode]); tilemap_set_flip(state->tilemap_edge1[scroll_mode], flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0); tilemap_set_scrollx(state->tilemap_edge1[scroll_mode], 0, -(*state->scroll & 0xfc)); tilemap_set_scrolly(state->tilemap_edge1[scroll_mode], 0, *state->edge1_pos & 0x7f); tilemap_set_flip(state->tilemap_edge2[scroll_mode], flip ? TILEMAP_FLIPX : TILEMAP_FLIPY); tilemap_set_scrollx(state->tilemap_edge2[scroll_mode], 0, -(*state->scroll & 0xfc)); tilemap_set_scrolly(state->tilemap_edge2[scroll_mode], 0, *state->edge2_pos & 0x7f); tilemap_draw(bitmap, &clip_edge1, state->tilemap_edge1[scroll_mode], 0, 0); tilemap_draw(bitmap, &clip_edge2, state->tilemap_edge2[scroll_mode], 0, 0); }
static void draw_edges(bitmap_t *bitmap, const rectangle *cliprect, int flip, int scroll_mode) { rectangle clip_edge1; rectangle clip_edge2; clip_edge1 = *cliprect; clip_edge2 = *cliprect; if (flip) { clip_edge1.min_y = *madalien_edge1_pos | 0x80; clip_edge2.max_y = (*madalien_edge2_pos & 0x7f) ^ 0x7f; } else { clip_edge1.max_y = (*madalien_edge1_pos & 0x7f) ^ 0x7f; clip_edge2.min_y = *madalien_edge2_pos | 0x80; } sect_rect(&clip_edge1, cliprect); sect_rect(&clip_edge2, cliprect); tilemap_mark_all_tiles_dirty(tilemap_edge1[scroll_mode]); tilemap_mark_all_tiles_dirty(tilemap_edge2[scroll_mode]); tilemap_set_flip(tilemap_edge1[scroll_mode], flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0); tilemap_set_scrollx(tilemap_edge1[scroll_mode], 0, -(*madalien_scroll & 0xfc)); tilemap_set_scrolly(tilemap_edge1[scroll_mode], 0, *madalien_edge1_pos & 0x7f); tilemap_set_flip(tilemap_edge2[scroll_mode], flip ? TILEMAP_FLIPX : TILEMAP_FLIPY); tilemap_set_scrollx(tilemap_edge2[scroll_mode], 0, -(*madalien_scroll & 0xfc)); tilemap_set_scrolly(tilemap_edge2[scroll_mode], 0, *madalien_edge2_pos & 0x7f); tilemap_draw(bitmap, &clip_edge1, tilemap_edge1[scroll_mode], 0, 0); tilemap_draw(bitmap, &clip_edge2, tilemap_edge2[scroll_mode], 0, 0); }
void atarig1_scanline_update(int scanline) { UINT16 *base = &atarigen_alpha[(scanline / 8) * 64 + 48]; int i; //if (scanline == 0) logerror("-------\n"); /* keep in range */ if (base >= &atarigen_alpha[0x800]) return; /* update the playfield scrolls */ for (i = 0; i < 8; i++) { UINT16 word; /* first word controls horizontal scroll */ word = *base++; if (word & 0x8000) { int newscroll = ((word >> 6) + pfscroll_xoffset) & 0x1ff; if (newscroll != playfield_xscroll) { video_screen_update_partial(0, scanline + i - 1); tilemap_set_scrollx(atarigen_playfield_tilemap, 0, newscroll); playfield_xscroll = newscroll; } } /* second word controls vertical scroll and tile bank */ word = *base++; if (word & 0x8000) { int newscroll = ((word >> 6) - (scanline + i)) & 0x1ff; int newbank = word & 7; if (newscroll != playfield_yscroll) { video_screen_update_partial(0, scanline + i - 1); tilemap_set_scrolly(atarigen_playfield_tilemap, 0, newscroll); playfield_yscroll = newscroll; } if (newbank != playfield_tile_bank) { video_screen_update_partial(0, scanline + i - 1); tilemap_mark_all_tiles_dirty(atarigen_playfield_tilemap); playfield_tile_bank = newbank; } }
static void video_update_common( struct mame_bitmap *bitmap, const struct rectangle *cliprect, int bROZ ) { const int xadjust[4] = { 0,2,3,4 }; int i,pri; handle_mcu(); namconb1_install_palette(); fillbitmap(priority_bitmap,0,NULL); /* not actually used (yet) */ /* I have no idea what the background color should be, but I doubt it ever pokes through. */ fillbitmap( bitmap, 0, 0 ); for( i=0; i<6; i++ ) { int tilemap_color = nth_word32( &namconb1_scrollram32[0x30/4], i )&7; if( tilemap_palette_bank[i]!= tilemap_color ) { tilemap_palette_bank[i] = tilemap_color; tilemap_mark_all_tiles_dirty( background[i] ); } if( i<4 ) { tilemap_set_scrollx( background[i],0,namconb1_scrollram32[i*2]+48-xadjust[i] ); tilemap_set_scrolly( background[i],0,namconb1_scrollram32[i*2+1]+24 ); } } for( pri=0; pri<8; pri++ ) { if( bROZ ) { namco_roz_draw( bitmap,cliprect,pri ); } for( i=0; i<6; i++ ) { if( nth_word32( &namconb1_scrollram32[0x20/4],i ) == pri ) { tilemap_draw( bitmap,cliprect,background[i],0,0/*1<<pri*/ ); } } namco_obj_draw( bitmap, cliprect, pri ); } } /* video_update_common */
static VIDEO_UPDATE(cshooter) { fillbitmap(bitmap, 0/*get_black_pen(machine)*/, &machine->screen[0].visarea); tilemap_mark_all_tiles_dirty(cshooter_txtilemap); //sprites { int i; for(i=0;i<spriteram_size;i+=4) { if(spriteram[i+3]!=0) { int tile=0x30+((spriteram[i]>>2)&0x1f); drawgfx(bitmap,machine->gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3],spriteram[i+2], cliprect,TRANSPARENCY_PEN,3); drawgfx(bitmap,machine->gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3]+8,spriteram[i+2], cliprect,TRANSPARENCY_PEN,3); drawgfx(bitmap,machine->gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3]+8,spriteram[i+2]+8, cliprect,TRANSPARENCY_PEN,3); drawgfx(bitmap,machine->gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3],spriteram[i+2]+8, cliprect,TRANSPARENCY_PEN,3); } } }
static WRITE16_HANDLER( latch_w ) { batman_state *state = space->machine().driver_data<batman_state>(); int oldword = state->m_latch_data; COMBINE_DATA(&state->m_latch_data); /* bit 4 is connected to the /RESET pin on the 6502 */ if (state->m_latch_data & 0x0010) cputag_set_input_line(space->machine(), "jsa", INPUT_LINE_RESET, CLEAR_LINE); else cputag_set_input_line(space->machine(), "jsa", INPUT_LINE_RESET, ASSERT_LINE); /* alpha bank is selected by the upper 4 bits */ if ((oldword ^ state->m_latch_data) & 0x7000) { space->machine().primary_screen->update_partial(space->machine().primary_screen->vpos()); tilemap_mark_all_tiles_dirty(state->m_alpha_tilemap); state->m_alpha_tile_bank = (state->m_latch_data >> 12) & 7; }
static SCREEN_UPDATE(cshooter) { cshooter_state *state = screen->machine().driver_data<cshooter_state>(); bitmap_fill(bitmap, cliprect, 0/*get_black_pen(screen->screen->machine())*/); tilemap_mark_all_tiles_dirty(state->m_txtilemap); //sprites { UINT8 *spriteram = state->m_spriteram; int i; for(i=0;i<state->m_spriteram_size;i+=4) { if(spriteram[i+3]!=0) { int tile=0x30+((spriteram[i]>>2)&0x1f); drawgfx_transpen(bitmap,cliprect,screen->machine().gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3],spriteram[i+2],3); drawgfx_transpen(bitmap,cliprect,screen->machine().gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3]+8,spriteram[i+2],3); drawgfx_transpen(bitmap,cliprect,screen->machine().gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3]+8,spriteram[i+2]+8,3); drawgfx_transpen(bitmap,cliprect,screen->machine().gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3],spriteram[i+2]+8,3); } } }
static VIDEO_UPDATE(cshooter) { bitmap_fill(bitmap, cliprect, 0/*get_black_pen(screen->screen->machine)*/); tilemap_mark_all_tiles_dirty(cshooter_txtilemap); //sprites { UINT8 *spriteram = screen->machine->generic.spriteram.u8; int i; for(i=0;i<screen->machine->generic.spriteram_size;i+=4) { if(spriteram[i+3]!=0) { int tile=0x30+((spriteram[i]>>2)&0x1f); drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3],spriteram[i+2],3); drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3]+8,spriteram[i+2],3); drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3]+8,spriteram[i+2]+8,3); drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[0], tile, spriteram[i+1], 0, 0, spriteram[i+3],spriteram[i+2]+8,3); } } }
static WRITE8_HANDLER( tile_banking_w ) { tile_bank = data & 1; tilemap_mark_all_tiles_dirty(bg_tilemap); }
static VIDEO_UPDATE( suprgolf ) { tilemap_mark_all_tiles_dirty(suprgolf_tilemap); tilemap_draw(bitmap,cliprect,suprgolf_tilemap,TILEMAP_IGNORE_TRANSPARENCY,0); }
static void dirty_tilemaps(void) // will be used for save states { tilemap_mark_all_tiles_dirty(gcpinbal_tilemap[0]); tilemap_mark_all_tiles_dirty(gcpinbal_tilemap[1]); tilemap_mark_all_tiles_dirty(gcpinbal_tilemap[2]); }
static WRITE8_HANDLER( tile_banking_w ) { wink_state *state = space->machine().driver_data<wink_state>(); state->m_tile_bank = data & 1; tilemap_mark_all_tiles_dirty(state->m_bg_tilemap); }
static void update_page( running_machine &machine ) { segas1x_bootleg_state *state = machine.driver_data<segas1x_bootleg_state>(); int all_dirty = 0; int i, offset; if (state->m_old_tile_bank1 != state->m_tile_bank1) { all_dirty = 1; state->m_old_tile_bank1 = state->m_tile_bank1; } if (state->m_old_tile_bank0 != state->m_tile_bank0) { all_dirty = 1; state->m_old_tile_bank0 = state->m_tile_bank0; tilemap_mark_all_tiles_dirty(state->m_text_layer); } if (all_dirty) { tilemap_mark_all_tiles_dirty(state->m_background); tilemap_mark_all_tiles_dirty(state->m_foreground); if (state->m_system18) { tilemap_mark_all_tiles_dirty(state->m_background2); tilemap_mark_all_tiles_dirty(state->m_foreground2); } } else { for (i = 0; i < 4; i++) { int page0 = 64 * 32 * i; if (state->m_old_bg_page[i] != state->m_bg_page[i]) { state->m_old_bg_page[i] = state->m_bg_page[i]; for (offset = page0; offset < page0 + 64 * 32; offset++) { tilemap_mark_tile_dirty(state->m_background, offset); } } if (state->m_old_fg_page[i] != state->m_fg_page[i]) { state->m_old_fg_page[i] = state->m_fg_page[i]; for (offset = page0; offset < page0 + 64 * 32; offset++) { tilemap_mark_tile_dirty(state->m_foreground, offset); } } if (state->m_system18) { if (state->m_old_bg2_page[i] != state->m_bg2_page[i]) { state->m_old_bg2_page[i] = state->m_bg2_page[i]; for (offset = page0; offset < page0 + 64 * 32; offset++) { tilemap_mark_tile_dirty(state->m_background2, offset); } } if (state->m_old_fg2_page[i] != state->m_fg2_page[i]) { state->m_old_fg2_page[i] = state->m_fg2_page[i]; for (offset = page0; offset < page0 + 64 * 32; offset++) { tilemap_mark_tile_dirty(state->m_foreground2, offset); } } } } } }
void vb_mark_all_dirty( void ) { tilemap_mark_all_tiles_dirty(bg_tilemap); }
static WRITE8_HANDLER(fgpalette_w) { pturn_state *state = space->machine().driver_data<pturn_state>(); state->m_fgpalette=data&0x1f; tilemap_mark_all_tiles_dirty(state->m_fgmap); }
static VIDEO_UPDATE( suprgolf ) { tilemap_mark_all_tiles_dirty(suprgolf_tilemap); tilemap_draw(bitmap,cliprect,suprgolf_tilemap,TILEMAP_DRAW_OPAQUE,0); return 0; }
static void mark_all_tiles_dirty(void) { tilemap_mark_all_tiles_dirty(tx_tilemap); tilemap_mark_all_tiles_dirty(bg1_tilemap); tilemap_mark_all_tiles_dirty(bg2_tilemap); }
static void tx_tilemap_mark_all_dirty(void) { tilemap_mark_all_tiles_dirty(tx_tilemap); tilemap_set_flip(tx_tilemap, flip_x | flip_y); }
static void dirty_piv_tilemaps(void) { tilemap_mark_all_tiles_dirty(wgp_piv_tilemap[0]); tilemap_mark_all_tiles_dirty(wgp_piv_tilemap[1]); tilemap_mark_all_tiles_dirty(wgp_piv_tilemap[2]); }
static void all_tiles_dirty(void) { tilemap_mark_all_tiles_dirty(bg_tilemap); tilemap_mark_all_tiles_dirty(fg_tilemap); }
static WRITE8_HANDLER( dynadice_videoram_w ) { videoram[offset] = data; tilemap_mark_tile_dirty(bg_tilemap, offset); tilemap_mark_all_tiles_dirty(top_tilemap); }
int namcos2_vh_start(void){ #ifdef NAMCOS2_DEBUG_MODE namcos2_used_colour_count=0; namcos2_used_colour_cached=0; namcos2_max_used_colour_count=0; namcos2_max_used_colour_cached=0; /* palette_max_ran_out=0;*/ /* palette_ran_out=0;*/ #endif namcos2_tilemap0 = tilemap_create( namcos2_tilemap0_get_info,tilemap_scan_rows,TILEMAP_BITMASK,8,8,64,64 ); namcos2_tilemap1 = tilemap_create( namcos2_tilemap1_get_info,tilemap_scan_rows,TILEMAP_BITMASK,8,8,64,64 ); namcos2_tilemap2 = tilemap_create( namcos2_tilemap2_get_info,tilemap_scan_rows,TILEMAP_BITMASK,8,8,64,64 ); namcos2_tilemap3 = tilemap_create( namcos2_tilemap3_get_info,tilemap_scan_rows,TILEMAP_BITMASK,8,8,64,64 ); namcos2_tilemap4 = tilemap_create( namcos2_tilemap4_get_info,tilemap_scan_rows,TILEMAP_BITMASK,8,8,36,28 ); namcos2_tilemap5 = tilemap_create( namcos2_tilemap5_get_info,tilemap_scan_rows,TILEMAP_BITMASK,8,8,36,28 ); if( !(namcos2_tilemap0 && namcos2_tilemap1 && namcos2_tilemap2 && namcos2_tilemap3 && namcos2_tilemap4 && namcos2_tilemap5) ) return 1; /* insufficient memory */ /* Setup fixed planes */ tilemap_set_scrollx( namcos2_tilemap4, 0, 0 ); tilemap_set_scrolly( namcos2_tilemap4, 0, 0 ); tilemap_set_scrollx( namcos2_tilemap5, 0, 0 ); tilemap_set_scrolly( namcos2_tilemap5, 0, 0 ); namcos2_tilemap0_flip=0; namcos2_tilemap1_flip=0; namcos2_tilemap2_flip=0; namcos2_tilemap3_flip=0; namcos2_tilemap4_flip=0; namcos2_tilemap5_flip=0; tilemap_mark_all_tiles_dirty(ALL_TILEMAPS); /* Rotate/Flip the mask ROM */ #ifndef PREROTATE_GFX // // TILEMAP MANAGER SEEMS TO BE ABLE TO COPE OK WITH X/Y FLIPS BUT NOT SWAPXY // // if (Machine->orientation & ORIENTATION_FLIP_Y) // { // int loopY,tilenum; // unsigned char tilecache[8],*tiledata; // for(tilenum=0;tilenum<0x10000;tilenum++) // { // tiledata=memory_region(REGION_GFX4)+(tilenum*0x08); // /* Cache tile data */ // for(loopY=0;loopY<8;loopY++) tilecache[loopY]=tiledata[loopY]; // /* Flip in Y - write back in reverse */ // for(loopY=0;loopY<8;loopY++) tiledata[loopY]=tilecache[7-loopY]; // } // } // if (Machine->orientation & ORIENTATION_FLIP_X) // { // int loopX,loopY,tilenum; // unsigned char tilecache[8],*tiledata; // for(tilenum=0;tilenum<0x10000;tilenum++) // { // tiledata=memory_region(REGION_GFX4)+(tilenum*0x08); // /* Cache tile data */ // for(loopY=0;loopY<8;loopY++) tilecache[loopY]=tiledata[loopY]; // /* Wipe source data */ // for(loopY=0;loopY<8;loopY++) tiledata[loopY]=0; // /* Flip in X - do bit reversal */ // for(loopY=0;loopY<8;loopY++) // { // for(loopX=0;loopX<8;loopX++) // { // tiledata[loopY]|=(tilecache[loopY]&(1<<loopX))?(0x80>>loopX):0x00; // } // } // } // } if (Machine->orientation & ORIENTATION_SWAP_XY) { int loopX,loopY,tilenum; unsigned char tilecache[8],*tiledata; for(tilenum=0;tilenum<0x10000;tilenum++) { tiledata=memory_region(REGION_GFX4)+(tilenum*0x08); /* Cache tile data */ for(loopY=0;loopY<8;loopY++) tilecache[loopY]=tiledata[loopY]; /* Wipe source data */ for(loopY=0;loopY<8;loopY++) tiledata[loopY]=0; /* Swap X/Y data */ for(loopY=0;loopY<8;loopY++) { for(loopX=0;loopX<8;loopX++) { tiledata[loopX]|=(tilecache[loopY]&(0x01<<loopX))?(1<<loopY):0x00; } } } /* For some reason the tilemap mgr NEEDS these additional steps */ /* I've no idea why but it seems to work */ for(tilenum=0;tilenum<0x10000;tilenum++) { tiledata=memory_region(REGION_GFX4)+(tilenum*0x08); /* Cache tile data */ for(loopY=0;loopY<8;loopY++) tilecache[loopY]=tiledata[loopY]; /* Flip in Y - write back in reverse */ for(loopY=0;loopY<8;loopY++) tiledata[loopY]=tilecache[7-loopY]; } for(tilenum=0;tilenum<0x10000;tilenum++) { tiledata=memory_region(REGION_GFX4)+(tilenum*0x08); /* Cache tile data */ for(loopY=0;loopY<8;loopY++) tilecache[loopY]=tiledata[loopY]; /* Wipe source data */ for(loopY=0;loopY<8;loopY++) tiledata[loopY]=0; /* Flip in X - do bit reversal */ for(loopY=0;loopY<8;loopY++) { for(loopX=0;loopX<8;loopX++) { tiledata[loopY]|=(tilecache[loopY]&(1<<loopX))?(0x80>>loopX):0x00; } } } }
static WRITE8_HANDLER(bgbank_w) { pturn_state *state = space->machine().driver_data<pturn_state>(); state->m_bgbank=data&1; tilemap_mark_all_tiles_dirty(state->m_bgmap); }
static VIDEO_UPDATE( tattack ) { tilemap_mark_all_tiles_dirty(tmap); tilemap_draw(bitmap,cliprect,tmap, 0,0); return 0; }