summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2019-02-24 13:28:15 +1100
committer Vas Crabb <vas@vastheman.com>2019-02-24 13:28:15 +1100
commit30ae22c2e218b4e3abde191bcc596ed9ff9dec4e (patch)
tree8c013a0ae890e7fde48a5ab151d9fedd550e04d2
parent84d5f8f73822e27acb16c3f23f7e1fb1dae1cb87 (diff)
(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
-rw-r--r--src/mame/drivers/dec0.cpp2
-rw-r--r--src/mame/video/decbac06.cpp30
-rw-r--r--src/mame/video/decmxc06.cpp9
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
{