trunk/src/mame/video/tetrisp2.c
| r30656 | r30657 | |
| 46 | 46 | /* BBBBBGGGGGRRRRRx xxxxxxxxxxxxxxxx */ |
| 47 | 47 | WRITE16_MEMBER(tetrisp2_state::tetrisp2_palette_w) |
| 48 | 48 | { |
| 49 | | data = COMBINE_DATA(&m_generic_paletteram_16[offset]); |
| 49 | data = COMBINE_DATA(&m_paletteram[offset]); |
| 50 | 50 | if ((offset & 1) == 0) |
| 51 | 51 | m_palette->set_pen_color(offset/2,pal5bit(data >> 1),pal5bit(data >> 6),pal5bit(data >> 11)); |
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | WRITE16_MEMBER(tetrisp2_state::rocknms_sub_palette_w) |
| 55 | 55 | { |
| 56 | | data = COMBINE_DATA(&m_generic_paletteram2_16[offset]); |
| 56 | data = COMBINE_DATA(&m_sub_paletteram[offset]); |
| 57 | 57 | if ((offset & 1) == 0) |
| 58 | | m_palette->set_pen_color((0x8000 + (offset/2)),pal5bit(data >> 1),pal5bit(data >> 6),pal5bit(data >> 11)); |
| 58 | m_sub_palette->set_pen_color(offset/2,pal5bit(data >> 1),pal5bit(data >> 6),pal5bit(data >> 11)); |
| 59 | 59 | } |
| 60 | 60 | |
| 61 | 61 | |
| r30656 | r30657 | |
| 166 | 166 | { |
| 167 | 167 | UINT16 code_hi = m_rocknms_sub_vram_bg[ 2 * tile_index + 0]; |
| 168 | 168 | UINT16 code_lo = m_rocknms_sub_vram_bg[ 2 * tile_index + 1]; |
| 169 | | SET_TILE_INFO_MEMBER(5, |
| 169 | SET_TILE_INFO_MEMBER(1, |
| 170 | 170 | code_hi, |
| 171 | 171 | code_lo & 0xf, |
| 172 | 172 | 0); |
| r30656 | r30657 | |
| 183 | 183 | { |
| 184 | 184 | UINT16 code_hi = m_rocknms_sub_vram_fg[ 2 * tile_index + 0]; |
| 185 | 185 | UINT16 code_lo = m_rocknms_sub_vram_fg[ 2 * tile_index + 1]; |
| 186 | | SET_TILE_INFO_MEMBER(7, |
| 186 | SET_TILE_INFO_MEMBER(3, |
| 187 | 187 | code_hi, |
| 188 | 188 | code_lo & 0xf, |
| 189 | 189 | 0); |
| r30656 | r30657 | |
| 200 | 200 | { |
| 201 | 201 | UINT16 code_hi = m_rocknms_sub_vram_rot[ 2 * tile_index + 0]; |
| 202 | 202 | UINT16 code_lo = m_rocknms_sub_vram_rot[ 2 * tile_index + 1]; |
| 203 | | SET_TILE_INFO_MEMBER(6, |
| 203 | SET_TILE_INFO_MEMBER(2, |
| 204 | 204 | code_hi, |
| 205 | 205 | code_lo & 0xf, |
| 206 | 206 | 0); |
| r30656 | r30657 | |
| 258 | 258 | { |
| 259 | 259 | VIDEO_START_CALL_MEMBER( rockntread ); |
| 260 | 260 | |
| 261 | | m_tilemap_sub_bg = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(tetrisp2_state::get_tile_info_rocknms_sub_bg),this),TILEMAP_SCAN_ROWS,16, 16, 32, 256); // rockn ms(sub) |
| 262 | | m_tilemap_sub_fg = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(tetrisp2_state::get_tile_info_rocknms_sub_fg),this),TILEMAP_SCAN_ROWS,8, 8, 64, 64); |
| 263 | | m_tilemap_sub_rot = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(tetrisp2_state::get_tile_info_rocknms_sub_rot),this),TILEMAP_SCAN_ROWS,16, 16, 128, 128); |
| 261 | m_tilemap_sub_bg = &machine().tilemap().create(m_sub_gfxdecode, tilemap_get_info_delegate(FUNC(tetrisp2_state::get_tile_info_rocknms_sub_bg),this),TILEMAP_SCAN_ROWS,16, 16, 32, 256); // rockn ms(sub) |
| 262 | m_tilemap_sub_fg = &machine().tilemap().create(m_sub_gfxdecode, tilemap_get_info_delegate(FUNC(tetrisp2_state::get_tile_info_rocknms_sub_fg),this),TILEMAP_SCAN_ROWS,8, 8, 64, 64); |
| 263 | m_tilemap_sub_rot = &machine().tilemap().create(m_sub_gfxdecode, tilemap_get_info_delegate(FUNC(tetrisp2_state::get_tile_info_rocknms_sub_rot),this),TILEMAP_SCAN_ROWS,16, 16, 128, 128); |
| 264 | 264 | |
| 265 | 265 | m_tilemap_sub_bg->set_transparent_pen(0); |
| 266 | 266 | m_tilemap_sub_fg->set_transparent_pen(0); |
| r30656 | r30657 | |
| 312 | 312 | -- it appears that sprites which should be shadows are often rendered *UNDER* the tilemaps, maybe related? |
| 313 | 313 | */ |
| 314 | 314 | template<class _BitmapClass> |
| 315 | | static void tetrisp2_draw_sprites( tetrisp2_state *state, _BitmapClass &bitmap, bitmap_ind8 &bitmap_pri, const rectangle &cliprect, UINT8* priority_ram, |
| 316 | | UINT16 *sprram_top, size_t sprram_size, int gfxnum, int flip ) |
| 315 | static void tetrisp2_draw_sprites(_BitmapClass &bitmap, bitmap_ind8 &bitmap_pri, const rectangle &cliprect, UINT8* priority_ram, |
| 316 | UINT16 *sprram_top, size_t sprram_size, gfx_element *gfx, int flip ) |
| 317 | 317 | { |
| 318 | 318 | int tx, ty, sx, sy, flipx, flipy; |
| 319 | 319 | int xsize, ysize; |
| r30656 | r30657 | |
| 321 | 321 | int pri; |
| 322 | 322 | int xzoom, yzoom; |
| 323 | 323 | UINT32 primask; |
| 324 | | gfx_element *gfx = state->m_gfxdecode->gfx(gfxnum); |
| 325 | 324 | |
| 326 | 325 | UINT16 *source = sprram_top; |
| 327 | 326 | UINT16 *finish = sprram_top + (sprram_size - 0x10) / 2; |
| r30656 | r30657 | |
| 479 | 478 | else if (asc_pri == 2) |
| 480 | 479 | m_tilemap_fg->draw(screen, bitmap, cliprect, 0, 1 << 2); |
| 481 | 480 | |
| 482 | | tetrisp2_draw_sprites( this, bitmap, screen.priority(), cliprect, m_priority, |
| 483 | | m_spriteram, m_spriteram.bytes(), 0, (m_systemregs[0x00] & 0x02) ); |
| 481 | tetrisp2_draw_sprites(bitmap, screen.priority(), cliprect, m_priority, |
| 482 | m_spriteram, m_spriteram.bytes(), m_gfxdecode->gfx(0), (m_systemregs[0x00] & 0x02) ); |
| 484 | 483 | return 0; |
| 485 | 484 | } |
| 486 | 485 | |
| r30656 | r30657 | |
| 564 | 563 | else if (asc_pri == 2) |
| 565 | 564 | m_tilemap_fg->draw(screen, bitmap, cliprect, 0, 1 << 2); |
| 566 | 565 | |
| 567 | | tetrisp2_draw_sprites( this, bitmap, screen.priority(), cliprect, m_priority, |
| 568 | | m_spriteram, m_spriteram.bytes(), 0, (m_systemregs[0x00] & 0x02) ); |
| 566 | tetrisp2_draw_sprites(bitmap, screen.priority(), cliprect, m_priority, |
| 567 | m_spriteram, m_spriteram.bytes(), m_gfxdecode->gfx(0), (m_systemregs[0x00] & 0x02) ); |
| 569 | 568 | return 0; |
| 570 | 569 | } |
| 571 | 570 | |
| r30656 | r30657 | |
| 626 | 625 | else if (asc_pri == 2) |
| 627 | 626 | m_tilemap_sub_fg->draw(screen, bitmap, cliprect, 0, 1 << 2); |
| 628 | 627 | |
| 629 | | tetrisp2_draw_sprites( this, bitmap, screen.priority(), cliprect, m_priority, |
| 630 | | m_spriteram2, m_spriteram2.bytes(), 4, (m_systemregs[0x00] & 0x02) ); |
| 628 | tetrisp2_draw_sprites(bitmap, screen.priority(), cliprect, m_priority, |
| 629 | m_spriteram2, m_spriteram2.bytes(), m_sub_gfxdecode->gfx(0), (m_systemregs[0x00] & 0x02) ); |
| 631 | 630 | |
| 632 | 631 | return 0; |
| 633 | 632 | } |
| r30656 | r30657 | |
| 687 | 686 | else if (asc_pri == 2) |
| 688 | 687 | m_tilemap_fg->draw(screen, bitmap, cliprect, 0, 1 << 2); |
| 689 | 688 | |
| 690 | | tetrisp2_draw_sprites( this, bitmap, screen.priority(), cliprect, m_priority, |
| 691 | | m_spriteram, m_spriteram.bytes(), 0, (m_systemregs[0x00] & 0x02) ); |
| 689 | tetrisp2_draw_sprites(bitmap, screen.priority(), cliprect, m_priority, |
| 690 | m_spriteram, m_spriteram.bytes(), m_gfxdecode->gfx(0), (m_systemregs[0x00] & 0x02) ); |
| 692 | 691 | |
| 693 | 692 | return 0; |
| 694 | 693 | } |
| r30656 | r30657 | |
| 741 | 740 | bitmap.fill(0, cliprect); |
| 742 | 741 | screen.priority().fill(0); |
| 743 | 742 | |
| 744 | | tetrisp2_draw_sprites( this, bitmap, screen.priority(), cliprect, m_priority, |
| 745 | | m_spriteram, m_spriteram.bytes(), 1, (m_systemregs[0x00] & 0x02) ); |
| 743 | tetrisp2_draw_sprites(bitmap, screen.priority(), cliprect, m_priority, |
| 744 | m_spriteram, m_spriteram.bytes(), m_gfxdecode->gfx(1), (m_systemregs[0x00] & 0x02) ); |
| 746 | 745 | return 0; |
| 747 | 746 | } |
| 748 | 747 | UINT32 stepstag_state::screen_update_stepstag_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| r30656 | r30657 | |
| 750 | 749 | bitmap.fill(0, cliprect); |
| 751 | 750 | screen.priority().fill(0); |
| 752 | 751 | |
| 753 | | tetrisp2_draw_sprites( this, bitmap, screen.priority(), cliprect, m_priority, |
| 754 | | m_spriteram3, m_spriteram3.bytes(), 1, (m_systemregs[0x00] & 0x02) ); |
| 752 | tetrisp2_draw_sprites(bitmap, screen.priority(), cliprect, m_priority, |
| 753 | m_spriteram3, m_spriteram3.bytes(), m_gfxdecode->gfx(1), (m_systemregs[0x00] & 0x02) ); |
| 755 | 754 | return 0; |
| 756 | 755 | } |
| 757 | 756 | |
| r30656 | r30657 | |
| 760 | 759 | bitmap.fill(0, cliprect); |
| 761 | 760 | screen.priority().fill(0); |
| 762 | 761 | |
| 763 | | tetrisp2_draw_sprites( this, bitmap, screen.priority(), cliprect, m_priority, |
| 764 | | m_spriteram2, m_spriteram2.bytes(), 0, (m_systemregs[0x00] & 0x02) ); |
| 762 | tetrisp2_draw_sprites(bitmap, screen.priority(), cliprect, m_priority, |
| 763 | m_spriteram2, m_spriteram2.bytes(), m_gfxdecode->gfx(0), (m_systemregs[0x00] & 0x02) ); |
| 765 | 764 | |
| 766 | 765 | m_tilemap_fg->draw(screen, bitmap, cliprect, 0, 1 << 2); |
| 767 | 766 | |
| r30656 | r30657 | |
| 779 | 778 | |
| 780 | 779 | WRITE16_MEMBER(stepstag_state::stepstag_palette_w) |
| 781 | 780 | { |
| 782 | | data = COMBINE_DATA(&m_generic_paletteram_16[offset]); |
| 781 | data = COMBINE_DATA(&m_paletteram[offset]); |
| 783 | 782 | // if ((offset & 1) == 0) |
| 784 | 783 | m_palette->set_pen_color(offset/4, |
| 785 | | mypal(m_generic_paletteram_16[offset/4*4+0] & 0xff), |
| 786 | | mypal(m_generic_paletteram_16[offset/4*4+1] & 0xff), |
| 787 | | mypal(m_generic_paletteram_16[offset/4*4+2] & 0xff) |
| 784 | mypal(m_paletteram[offset/4*4+0] & 0xff), |
| 785 | mypal(m_paletteram[offset/4*4+1] & 0xff), |
| 786 | mypal(m_paletteram[offset/4*4+2] & 0xff) |
| 788 | 787 | ); |
| 789 | 788 | } |
trunk/src/mame/drivers/tetrisp2.c
| r30656 | r30657 | |
| 503 | 503 | AM_RANGE(0x104000, 0x107fff) AM_RAM // Spare Object RAM |
| 504 | 504 | AM_RANGE(0x108000, 0x10ffff) AM_RAM // Work RAM |
| 505 | 505 | AM_RANGE(0x200000, 0x23ffff) AM_RAM_WRITE(rocknms_sub_priority_w) AM_SHARE("sub_priority") // Priority |
| 506 | | AM_RANGE(0x300000, 0x31ffff) AM_RAM_WRITE(rocknms_sub_palette_w) AM_SHARE("paletteram2") // Palette |
| 506 | AM_RANGE(0x300000, 0x31ffff) AM_RAM_WRITE(rocknms_sub_palette_w) AM_SHARE("sub_paletteram") // Palette |
| 507 | 507 | // AM_RANGE(0x500000, 0x50ffff) AM_RAM // Line |
| 508 | 508 | AM_RANGE(0x600000, 0x60ffff) AM_RAM_WRITE(rocknms_sub_vram_rot_w) AM_SHARE("sub_vram_rot") // Rotation |
| 509 | 509 | AM_RANGE(0x800000, 0x803fff) AM_RAM_WRITE(rocknms_sub_vram_fg_w) AM_SHARE("sub_vram_fg") // Foreground |
| r30656 | r30657 | |
| 640 | 640 | AM_RANGE(0x200000, 0x20ffff) AM_RAM |
| 641 | 641 | |
| 642 | 642 | // scrambled palettes? |
| 643 | | AM_RANGE(0x300000, 0x33ffff) AM_RAM/*_WRITE(stepstag_palette_w) AM_SHARE("paletteram")*/ |
| 643 | AM_RANGE(0x300000, 0x33ffff) AM_RAM/*_WRITE(stepstag_palette_w)*/ AM_SHARE("paletteram") |
| 644 | 644 | |
| 645 | | AM_RANGE(0x400000, 0x43ffff) AM_RAM/*_WRITE(stepstag_palette_w) AM_SHARE("paletteram2")*/ |
| 645 | AM_RANGE(0x400000, 0x43ffff) AM_RAM/*_WRITE(stepstag_palette_w)*/ AM_SHARE("paletteram2") |
| 646 | 646 | |
| 647 | | AM_RANGE(0x500000, 0x53ffff) AM_RAM/*_WRITE(stepstag_palette_w) AM_SHARE("paletteram3")*/ |
| 647 | AM_RANGE(0x500000, 0x53ffff) AM_RAM/*_WRITE(stepstag_palette_w)*/ AM_SHARE("paletteram3") |
| 648 | 648 | |
| 649 | 649 | // rgb brightness? |
| 650 | 650 | AM_RANGE(0x700000, 0x700001) AM_WRITENOP // 0-f |
| r30656 | r30657 | |
| 1219 | 1219 | GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x8, 0x6000, 0x10 ) // [3] Foreground |
| 1220 | 1220 | GFXDECODE_END |
| 1221 | 1221 | |
| 1222 | | static GFXDECODE_START( rocknms ) |
| 1223 | | GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0x0000, 0x10 ) // [0] Sprites |
| 1224 | | GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x8, 0x1000, 0x10 ) // [1] Background |
| 1225 | | GFXDECODE_ENTRY( "gfx3", 0, layout_16x16x8, 0x2000, 0x10 ) // [2] Rotation |
| 1226 | | GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x8, 0x6000, 0x10 ) // [3] Foreground |
| 1227 | | GFXDECODE_ENTRY( "gfx5", 0, spritelayout, 0x8000, 0x10 ) // [0] Sprites |
| 1228 | | GFXDECODE_ENTRY( "gfx6", 0, layout_16x16x8, 0x9000, 0x10 ) // [1] Background |
| 1229 | | GFXDECODE_ENTRY( "gfx7", 0, layout_16x16x8, 0xa000, 0x10 ) // [2] Rotation |
| 1230 | | GFXDECODE_ENTRY( "gfx8", 0, layout_8x8x8, 0xe000, 0x10 ) // [3] Foreground |
| 1222 | static GFXDECODE_START( rocknms_sub ) |
| 1223 | GFXDECODE_ENTRY( "gfx5", 0, spritelayout, 0x0000, 0x10 ) // [0] Sprites |
| 1224 | GFXDECODE_ENTRY( "gfx6", 0, layout_16x16x8, 0x1000, 0x10 ) // [1] Background |
| 1225 | GFXDECODE_ENTRY( "gfx7", 0, layout_16x16x8, 0x2000, 0x10 ) // [2] Rotation |
| 1226 | GFXDECODE_ENTRY( "gfx8", 0, layout_8x8x8, 0x6000, 0x10 ) // [3] Foreground |
| 1231 | 1227 | GFXDECODE_END |
| 1232 | 1228 | |
| 1233 | 1229 | static GFXDECODE_START( stepstag ) |
| r30656 | r30657 | |
| 1462 | 1458 | |
| 1463 | 1459 | /* video hardware */ |
| 1464 | 1460 | |
| 1465 | | MCFG_GFXDECODE_ADD("gfxdecode", "palette", rocknms) |
| 1466 | | MCFG_PALETTE_ADD("palette", 0x10000) |
| 1461 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", tetrisp2) |
| 1462 | MCFG_PALETTE_ADD("palette", 0x8000) |
| 1463 | |
| 1464 | MCFG_GFXDECODE_ADD("sub_gfxdecode", "sub_palette", rocknms_sub) |
| 1465 | MCFG_PALETTE_ADD("sub_palette", 0x8000) |
| 1466 | |
| 1467 | 1467 | MCFG_DEFAULT_LAYOUT(layout_rocknms) |
| 1468 | 1468 | |
| 1469 | 1469 | MCFG_SCREEN_ADD("lscreen", RASTER) |