mirror of
https://github.com/holub/mame
synced 2025-07-01 16:19:38 +03:00
(nw) revert decbac06 and decmcx06 changes from 779b762626
* The decbac06 changes break other games on the same hardware * The change to sprite flipping in decmxc06 won't work with screen flipping
This commit is contained in:
parent
84d5f8f738
commit
30ae22c2e2
@ -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 )
|
||||
|
@ -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];
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user