Previous 199869 Revisions Next

r30657 Sunday 25th May, 2014 at 11:02:09 UTC by Alex Jackson
tetrisp2.c: fix generic_paletteram regression; use separate palette (and gfxdecode) per screen in rocknms (nw)
[src/mame/drivers]tetrisp2.c
[src/mame/includes]tetrisp2.h
[src/mame/video]tetrisp2.c

trunk/src/mame/includes/tetrisp2.h
r30656r30657
2222      m_rocknms_sub_scroll_bg(*this, "sub_scroll_bg"),
2323      m_rocknms_sub_rotregs(*this, "sub_rotregs"),
2424      m_gfxdecode(*this, "gfxdecode"),
25      m_sub_gfxdecode(*this, "sub_gfxdecode"),
2526      m_palette(*this, "palette"),
26      m_generic_paletteram_16(*this, "paletteram"),
27      m_generic_paletteram2_16(*this, "paletteram2")
27      m_sub_palette(*this, "sub_palette"),
28      m_paletteram(*this, "paletteram"),
29      m_sub_paletteram(*this, "sub_paletteram")
2830   { }
2931
3032   required_device<cpu_device> m_maincpu;
r30656r30657
5052   optional_shared_ptr<UINT16> m_rocknms_sub_scroll_bg;
5153   optional_shared_ptr<UINT16> m_rocknms_sub_rotregs;
5254   required_device<gfxdecode_device> m_gfxdecode;
55   optional_device<gfxdecode_device> m_sub_gfxdecode;
5356   required_device<palette_device> m_palette;
54   required_shared_ptr<UINT16> m_generic_paletteram_16;
55   required_shared_ptr<UINT16> m_generic_paletteram2_16;
57   optional_device<palette_device> m_sub_palette;
58   required_shared_ptr<UINT16> m_paletteram;
59   optional_shared_ptr<UINT16> m_sub_paletteram;
5660
5761   UINT16 m_rocknms_sub_systemregs[0x10];
5862   UINT16 m_rockn_protectdata;
trunk/src/mame/video/tetrisp2.c
r30656r30657
4646/* BBBBBGGGGGRRRRRx xxxxxxxxxxxxxxxx */
4747WRITE16_MEMBER(tetrisp2_state::tetrisp2_palette_w)
4848{
49   data = COMBINE_DATA(&m_generic_paletteram_16[offset]);
49   data = COMBINE_DATA(&m_paletteram[offset]);
5050   if ((offset & 1) == 0)
5151      m_palette->set_pen_color(offset/2,pal5bit(data >> 1),pal5bit(data >> 6),pal5bit(data >> 11));
5252}
5353
5454WRITE16_MEMBER(tetrisp2_state::rocknms_sub_palette_w)
5555{
56   data = COMBINE_DATA(&m_generic_paletteram2_16[offset]);
56   data = COMBINE_DATA(&m_sub_paletteram[offset]);
5757   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));
5959}
6060
6161
r30656r30657
166166{
167167   UINT16 code_hi = m_rocknms_sub_vram_bg[ 2 * tile_index + 0];
168168   UINT16 code_lo = m_rocknms_sub_vram_bg[ 2 * tile_index + 1];
169   SET_TILE_INFO_MEMBER(5,
169   SET_TILE_INFO_MEMBER(1,
170170         code_hi,
171171         code_lo & 0xf,
172172         0);
r30656r30657
183183{
184184   UINT16 code_hi = m_rocknms_sub_vram_fg[ 2 * tile_index + 0];
185185   UINT16 code_lo = m_rocknms_sub_vram_fg[ 2 * tile_index + 1];
186   SET_TILE_INFO_MEMBER(7,
186   SET_TILE_INFO_MEMBER(3,
187187         code_hi,
188188         code_lo & 0xf,
189189         0);
r30656r30657
200200{
201201   UINT16 code_hi = m_rocknms_sub_vram_rot[ 2 * tile_index + 0];
202202   UINT16 code_lo = m_rocknms_sub_vram_rot[ 2 * tile_index + 1];
203   SET_TILE_INFO_MEMBER(6,
203   SET_TILE_INFO_MEMBER(2,
204204         code_hi,
205205         code_lo & 0xf,
206206         0);
r30656r30657
258258{
259259   VIDEO_START_CALL_MEMBER( rockntread );
260260
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);
264264
265265   m_tilemap_sub_bg->set_transparent_pen(0);
266266   m_tilemap_sub_fg->set_transparent_pen(0);
r30656r30657
312312  -- it appears that sprites which should be shadows are often rendered *UNDER* the tilemaps, maybe related?
313313*/
314314template<class _BitmapClass>
315static 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    )
315static 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    )
317317{
318318   int tx, ty, sx, sy, flipx, flipy;
319319   int xsize, ysize;
r30656r30657
321321   int pri;
322322   int xzoom, yzoom;
323323   UINT32 primask;
324   gfx_element *gfx = state->m_gfxdecode->gfx(gfxnum);
325324
326325   UINT16  *source =   sprram_top;
327326   UINT16  *finish =   sprram_top + (sprram_size - 0x10) / 2;
r30656r30657
479478   else if (asc_pri == 2)
480479      m_tilemap_fg->draw(screen, bitmap, cliprect, 0, 1 << 2);
481480
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)    );
484483   return 0;
485484}
486485
r30656r30657
564563   else if (asc_pri == 2)
565564      m_tilemap_fg->draw(screen, bitmap, cliprect, 0, 1 << 2);
566565
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)    );
569568   return 0;
570569}
571570
r30656r30657
626625   else if (asc_pri == 2)
627626      m_tilemap_sub_fg->draw(screen, bitmap, cliprect, 0, 1 << 2);
628627
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)  );
631630
632631   return 0;
633632}
r30656r30657
687686   else if (asc_pri == 2)
688687      m_tilemap_fg->draw(screen, bitmap, cliprect, 0, 1 << 2);
689688
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)    );
692691
693692   return 0;
694693}
r30656r30657
741740   bitmap.fill(0, cliprect);
742741   screen.priority().fill(0);
743742
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)    );
746745   return 0;
747746}
748747UINT32 stepstag_state::screen_update_stepstag_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
r30656r30657
750749   bitmap.fill(0, cliprect);
751750   screen.priority().fill(0);
752751
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)  );
755754   return 0;
756755}
757756
r30656r30657
760759   bitmap.fill(0, cliprect);
761760   screen.priority().fill(0);
762761
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)  );
765764
766765   m_tilemap_fg->draw(screen, bitmap, cliprect, 0, 1 << 2);
767766
r30656r30657
779778
780779WRITE16_MEMBER(stepstag_state::stepstag_palette_w)
781780{
782   data = COMBINE_DATA(&m_generic_paletteram_16[offset]);
781   data = COMBINE_DATA(&m_paletteram[offset]);
783782//  if ((offset & 1) == 0)
784783      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)
788787   );
789788}
trunk/src/mame/drivers/tetrisp2.c
r30656r30657
503503   AM_RANGE(0x104000, 0x107fff) AM_RAM                                                         // Spare Object RAM
504504   AM_RANGE(0x108000, 0x10ffff) AM_RAM                                                         // Work RAM
505505   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
507507//  AM_RANGE(0x500000, 0x50ffff) AM_RAM                                                         // Line
508508   AM_RANGE(0x600000, 0x60ffff) AM_RAM_WRITE(rocknms_sub_vram_rot_w) AM_SHARE("sub_vram_rot") // Rotation
509509   AM_RANGE(0x800000, 0x803fff) AM_RAM_WRITE(rocknms_sub_vram_fg_w) AM_SHARE("sub_vram_fg") // Foreground
r30656r30657
640640   AM_RANGE(0x200000, 0x20ffff) AM_RAM
641641
642642   // 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")
644644
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")
646646
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")
648648
649649   // rgb brightness?
650650   AM_RANGE(0x700000, 0x700001) AM_WRITENOP // 0-f
r30656r30657
12191219   GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x8,   0x6000, 0x10 ) // [3] Foreground
12201220GFXDECODE_END
12211221
1222static 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
1222static 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
12311227GFXDECODE_END
12321228
12331229static GFXDECODE_START( stepstag )
r30656r30657
14621458
14631459   /* video hardware */
14641460
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
14671467   MCFG_DEFAULT_LAYOUT(layout_rocknms)
14681468
14691469   MCFG_SCREEN_ADD("lscreen", RASTER)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team