mirror of
https://github.com/holub/mame
synced 2025-07-05 09:57:47 +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, 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, 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( 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( 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, 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 )
|
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:
|
bank 0:
|
||||||
0:
|
0:
|
||||||
bit 0 (0x1) set = 8*8 tiles, else 16*16 tiles
|
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 2 (0x4) set enables rowscroll
|
||||||
bit 3 (0x8) set enables colscroll
|
bit 3 (0x8) set enables colscroll
|
||||||
bit 7 (0x80) set in playfield 1 is reverse screen (set via dip-switch)
|
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
|
The shift register controls the granularity of the scroll offsets
|
||||||
(more details given later).
|
(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):
|
Playfield priority (Bad Dudes, etc):
|
||||||
In the bottommost playfield, pens 8-15 can have priority over the next playfield.
|
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.
|
In that next playfield, pens 8-15 can have priority over sprites.
|
||||||
@ -63,8 +60,6 @@ Priority word (Midres):
|
|||||||
Bit 2
|
Bit 2
|
||||||
Bit 3 set = ...
|
Bit 3 set = ...
|
||||||
|
|
||||||
Note that priority mixing is handled outside of the BAC-06 chip.
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "emu.h"
|
#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)
|
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);
|
return (col & 0xf) + ((row & 0xf) << 4) + ((col & 0x1f0) << 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_scan)
|
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);
|
return (col & 0xf) + ((row & 0x1f) << 4) + ((col & 0xf0) << 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_scan)
|
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);
|
return (col & 0xf) + ((row & 0x3f) << 4) + ((col & 0x70) << 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape0_8x8_scan)
|
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);
|
return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x60) << 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape1_8x8_scan)
|
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);
|
return (col & 0x1f) + ((row & 0x1f) << 5) + ((row & 0x20) << 5) + ((col & 0x20) << 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
TILEMAP_MAPPER_MEMBER(deco_bac06_device::tile_shape2_8x8_scan)
|
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);
|
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;
|
if (m_rambank&1) tile_index+=0x1000;
|
||||||
int tile=m_pf_data[tile_index];
|
int tile=m_pf_data[tile_index];
|
||||||
int colourpri=(tile>>12);
|
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,0);
|
||||||
SET_TILE_INFO_MEMBER(m_tile_region_8,tile&0xfff,0,flags);
|
|
||||||
tileinfo.category = colourpri;
|
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;
|
if (m_rambank&1) tile_index+=0x1000;
|
||||||
int tile=m_pf_data[tile_index];
|
int tile=m_pf_data[tile_index];
|
||||||
int colourpri=(tile>>12);
|
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,0);
|
||||||
SET_TILE_INFO_MEMBER(m_tile_region_16,tile&0xfff,0,flags);
|
|
||||||
tileinfo.category = colourpri;
|
tileinfo.category = colourpri;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,10 +238,7 @@ void deco_bac06_device::custom_tilemap_draw(bitmap_ind16 &bitmap,
|
|||||||
|
|
||||||
if (control1)
|
if (control1)
|
||||||
{
|
{
|
||||||
if ((control0 && control0[0]&2)==0) // Use of column major mode inverts scroll direction
|
scrollx = control1[0];
|
||||||
scrollx = -control1[0] - 0x100;
|
|
||||||
else
|
|
||||||
scrollx = control1[0];
|
|
||||||
scrolly = control1[1];
|
scrolly = control1[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ void deco_mxc06_device::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cli
|
|||||||
offs = 0;
|
offs = 0;
|
||||||
while (offs < m_ramsize / 2)
|
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];
|
sy = spriteram[offs];
|
||||||
sx = spriteram[offs + 2];
|
sx = spriteram[offs + 2];
|
||||||
@ -70,9 +70,12 @@ void deco_mxc06_device::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cli
|
|||||||
flash = sx & 0x800;
|
flash = sx & 0x800;
|
||||||
|
|
||||||
flipx = sy & 0x2000;
|
flipx = sy & 0x2000;
|
||||||
parentFlipY = flipy = sy & 0x4000;
|
flipy = sy & 0x4000;
|
||||||
h = (1 << ((sy & 0x1800) >> 11)); /* 1x, 2x, 4x, 8x height */
|
h = (1 << ((sy & 0x1800) >> 11)); /* 1x, 2x, 4x, 8x height */
|
||||||
w = (1 << ((sy & 0x0600) >> 9)); /* 1x, 2x, 4x, 8x width */
|
w = (1 << ((sy & 0x0600) >> 9)); /* 1x, 2x, 4x, 8x width */
|
||||||
|
/* multi width used only on the title screen? */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sx = sx & 0x01ff;
|
sx = sx & 0x01ff;
|
||||||
sy = sy & 0x01ff;
|
sy = sy & 0x01ff;
|
||||||
@ -109,7 +112,7 @@ void deco_mxc06_device::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cli
|
|||||||
code &= ~(h - 1);
|
code &= ~(h - 1);
|
||||||
|
|
||||||
// not affected by flipscreen
|
// 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;
|
incy = -1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user