From 30ae22c2e218b4e3abde191bcc596ed9ff9dec4e Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sun, 24 Feb 2019 13:28:15 +1100 Subject: (nw) revert decbac06 and decmcx06 changes from 779b7626265c29145b06d451af2088fa43635374 * The decbac06 changes break other games on the same hardware * The change to sprite flipping in decmxc06 won't work with screen flipping --- src/mame/drivers/dec0.cpp | 2 +- src/mame/video/decbac06.cpp | 30 ++++-------------------------- src/mame/video/decmxc06.cpp | 9 ++++++--- 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/src/mame/drivers/dec0.cpp b/src/mame/drivers/dec0.cpp index 3dbea394cc5..f099930d29d 100644 --- a/src/mame/drivers/dec0.cpp +++ b/src/mame/drivers/dec0.cpp @@ -3982,7 +3982,7 @@ GAME( 1988, robocop, 0, robocop, robocop, dec0_state, empty_init GAME( 1988, robocopw, robocop, robocop, robocop, dec0_state, empty_init, ROT0, "Data East Corporation", "Robocop (World revision 3)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, robocopj, robocop, robocop, robocop, dec0_state, empty_init, ROT0, "Data East Corporation", "Robocop (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, robocopu, robocop, robocop, robocop, dec0_state, empty_init, ROT0, "Data East USA", "Robocop (US revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, bandit, 0, bandit, bandit, dec0_state, init_hbarrel, ROT90, "Data East USA", "Bandit (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, bandit, 0, bandit, bandit, dec0_state, init_hbarrel, ROT90, "Data East USA", "Bandit (US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1988, robocopu0, robocop, robocop, robocop, dec0_state, empty_init, ROT0, "Data East USA", "Robocop (US revision 0)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, hippodrm, 0, hippodrm, hippodrm, dec0_state, init_hippodrm, ROT0, "Data East USA", "Hippodrome (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, ffantasy, hippodrm, hippodrm, ffantasy, dec0_state, init_hippodrm, ROT0, "Data East Corporation", "Fighting Fantasy (Japan revision 3)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/video/decbac06.cpp b/src/mame/video/decbac06.cpp index c724a8c6f87..590a569e245 100644 --- a/src/mame/video/decbac06.cpp +++ b/src/mame/video/decbac06.cpp @@ -25,7 +25,7 @@ configuration is 2 chips of 16*16 tiles, 1 of 8*8. bank 0: 0: bit 0 (0x1) set = 8*8 tiles, else 16*16 tiles - Bit 1 (0x2) set = row major tile layout, else column major* + Bit 1 (0x2) unknown bit 2 (0x4) set enables rowscroll bit 3 (0x8) set enables colscroll bit 7 (0x80) set in playfield 1 is reverse screen (set via dip-switch) @@ -44,9 +44,6 @@ configuration is 2 chips of 16*16 tiles, 1 of 8*8. The shift register controls the granularity of the scroll offsets (more details given later). - * Bandit is the only game known to use column major tile layout, when in this - mode X scrolling is also inverted, and tile character data is flipped on X. - Playfield priority (Bad Dudes, etc): In the bottommost playfield, pens 8-15 can have priority over the next playfield. In that next playfield, pens 8-15 can have priority over sprites. @@ -63,8 +60,6 @@ Priority word (Midres): Bit 2 Bit 3 set = ... - Note that priority mixing is handled outside of the BAC-06 chip. - */ #include "emu.h" @@ -144,43 +139,31 @@ void deco_bac06_device::set_flip_screen(bool flip) TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_scan) { - if ((m_pf_control_0[0]&2)==0) - return (row & 0xf) + ((0x3f - (col & 0x3f)) << 4); return (col & 0xf) + ((row & 0xf) << 4) + ((col & 0x1f0) << 4); } TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_scan) { - //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (row & 0xf) + ((col & 0x1f) << 4) + ((col & 0xf0) << 5); return (col & 0xf) + ((row & 0x1f) << 4) + ((col & 0xf0) << 5); } TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_scan) { - //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (col & 0xf) + ((row & 0x3f) << 4) + ((row & 0x70) << 6); return (col & 0xf) + ((row & 0x3f) << 4) + ((col & 0x70) << 6); } TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_8x8_scan) { - //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x60) << 5); return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x60) << 5); } TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_8x8_scan) { - //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (row & 0x1f) + ((col & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6); return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x20) << 5) + ((col & 0x20) << 6); } TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_8x8_scan) { - //if (m_pf_control_0[0]&2) // Needs testing on real hardware, not used by any game - // return (row & 0x1f) + ((col & 0x7f) << 5); return (col & 0x1f) + ((row & 0x7f) << 5); } @@ -189,8 +172,7 @@ TILE_GET_INFO_MEMBER(deco_bac06_device::get_pf8x8_tile_info) if (m_rambank&1) tile_index+=0x1000; int tile=m_pf_data[tile_index]; int colourpri=(tile>>12); - int flags=(m_pf_control_0[0]&2) ? 0 : TILE_FLIPX; - SET_TILE_INFO_MEMBER(m_tile_region_8,tile&0xfff,0,flags); + SET_TILE_INFO_MEMBER(m_tile_region_8,tile&0xfff,0,0); tileinfo.category = colourpri; } @@ -199,8 +181,7 @@ TILE_GET_INFO_MEMBER(deco_bac06_device::get_pf16x16_tile_info) if (m_rambank&1) tile_index+=0x1000; int tile=m_pf_data[tile_index]; int colourpri=(tile>>12); - int flags=(m_pf_control_0[0]&2) ? 0 : TILE_FLIPX; - SET_TILE_INFO_MEMBER(m_tile_region_16,tile&0xfff,0,flags); + SET_TILE_INFO_MEMBER(m_tile_region_16,tile&0xfff,0,0); tileinfo.category = colourpri; } @@ -257,10 +238,7 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap, if (control1) { - if ((control0 && control0[0]&2)==0) // Use of column major mode inverts scroll direction - scrollx = -control1[0] - 0x100; - else - scrollx = control1[0]; + scrollx = control1[0]; scrolly = control1[1]; } diff --git a/src/mame/video/decmxc06.cpp b/src/mame/video/decmxc06.cpp index fbf91e3cbaa..76e15e189cc 100644 --- a/src/mame/video/decmxc06.cpp +++ b/src/mame/video/decmxc06.cpp @@ -61,7 +61,7 @@ void deco_mxc06_device::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cli offs = 0; while (offs < m_ramsize / 2) { - int sx, sy, code, color, w, h, flipx, flipy, incy, flash, mult, x, y, parentFlipY; + int sx, sy, code, color, w, h, flipx, flipy, incy, flash, mult, x, y; sy = spriteram[offs]; sx = spriteram[offs + 2]; @@ -70,9 +70,12 @@ void deco_mxc06_device::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cli flash = sx & 0x800; flipx = sy & 0x2000; - parentFlipY = flipy = sy & 0x4000; + flipy = sy & 0x4000; h = (1 << ((sy & 0x1800) >> 11)); /* 1x, 2x, 4x, 8x height */ w = (1 << ((sy & 0x0600) >> 9)); /* 1x, 2x, 4x, 8x width */ + /* multi width used only on the title screen? */ + + sx = sx & 0x01ff; sy = sy & 0x01ff; @@ -109,7 +112,7 @@ void deco_mxc06_device::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cli code &= ~(h - 1); // not affected by flipscreen - if (parentFlipY) // in the case of multi-width sprites the y flip bit is set by the parent + if (spriteram[offs] & 0x4000) incy = -1; else { -- cgit v1.2.3