src/mess/drivers/supracan.c
| r7286 | r7287 | |
| 135 | 135 | int scrollx,scrolly; |
| 136 | 136 | int region; |
| 137 | 137 | int gfx_mode; |
| 138 | | int size; |
| 138 | int xsize,ysize; |
| 139 | 139 | UINT16 tile_bank,pal_bank; |
| 140 | 140 | |
| 141 | 141 | count = (state->tilemap_base_addr[layer]); |
| 142 | 142 | /* FIXME: I guess that this truly controls tilemap paging. */ |
| 143 | 143 | if((state->tilemap_flags[layer] & 0x0f00) == 0xa00) |
| 144 | | size = 128; |
| 144 | { |
| 145 | xsize = 128; |
| 146 | ysize = 32; |
| 147 | } |
| 145 | 148 | else |
| 146 | | size = (state->video_flags & 0x100) ? 64 : 32; |
| 149 | xsize = ysize = (state->video_flags & 0x100) ? 64 : 32; |
| 147 | 150 | |
| 148 | | /* FIXME: swap scrollx / scrolly */ |
| 149 | | scrolly = (state->tilemap_scrolly[layer] & 0x800) ? ((state->tilemap_scrolly[layer] & (size*8-1)) - size*8) : (state->tilemap_scrolly[layer] & (size*8-1)); |
| 150 | | scrollx = (state->tilemap_scrollx[layer] & 0x800) ? ((state->tilemap_scrollx[layer] & (size*8-1)) - size*8) : (state->tilemap_scrollx[layer] & (size*8-1)); |
| 151 | scrollx = (state->tilemap_scrollx[layer] & 0x800) ? ((state->tilemap_scrollx[layer] & (xsize*8-1)) - xsize*8) : (state->tilemap_scrollx[layer] & (xsize*8-1)); |
| 152 | scrolly = (state->tilemap_scrolly[layer] & 0x800) ? ((state->tilemap_scrolly[layer] & (ysize*8-1)) - ysize*8) : (state->tilemap_scrolly[layer] & (ysize*8-1)); |
| 151 | 153 | |
| 152 | 154 | gfx_mode = (state->tilemap_mode[layer] & 0x7000) >> 12; |
| 153 | 155 | |
| r7286 | r7287 | |
| 161 | 163 | } |
| 162 | 164 | |
| 163 | 165 | |
| 164 | | for (y=0;y<size;y++) |
| 166 | for (y=0;y<ysize;y++) |
| 165 | 167 | { |
| 166 | | for (x=0;x<size;x++) |
| 168 | for (x=0;x<xsize;x++) |
| 167 | 169 | { |
| 168 | 170 | int tile, flipx, flipy, pal; |
| 169 | 171 | tile = (supracan_vram[count] & 0x03ff) + tile_bank; |
| r7286 | r7287 | |
| 174 | 176 | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx,(y*8)-scrolly,0); |
| 175 | 177 | if(state->tilemap_flags[layer] & 0x20) //wrap-around enable |
| 176 | 178 | { |
| 177 | | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx+size*8,(y*8)-scrolly,0); |
| 178 | | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx,(y*8)-scrolly+size*8,0); |
| 179 | | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx+size*8,(y*8)-scrolly+size*8,0); |
| 180 | | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx-size*8,(y*8)-scrolly,0); |
| 181 | | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx,(y*8)-scrolly-size*8,0); |
| 182 | | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx-size*8,(y*8)-scrolly-size*8,0); |
| 179 | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx+xsize*8,(y*8)-scrolly,0); |
| 180 | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx,(y*8)-scrolly+ysize*8,0); |
| 181 | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx+xsize*8,(y*8)-scrolly+ysize*8,0); |
| 182 | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx-xsize*8,(y*8)-scrolly,0); |
| 183 | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx,(y*8)-scrolly-ysize*8,0); |
| 184 | drawgfx_transpen(bitmap,cliprect,machine->gfx[region],tile,pal,flipx,flipy,(x*8)-scrollx-xsize*8,(y*8)-scrolly-ysize*8,0); |
| 183 | 185 | } |
| 184 | 186 | count++; |
| 185 | 187 | } |
| r7286 | r7287 | |
| 445 | 447 | if(state->video_flags & 4) |
| 446 | 448 | draw_roz(screen->machine,bitmap,cliprect); |
| 447 | 449 | |
| 448 | | |
| 449 | 450 | return 0; |
| 450 | 451 | } |
| 451 | 452 | |