mirror of
https://github.com/holub/mame
synced 2025-05-28 16:43:04 +03:00
undrfire.c, groundfx.c: improve documentation (TC0620SCC is the 6bpp tilemap chip) (nw)
This commit is contained in:
parent
3480032ae5
commit
cc723e85ec
@ -48,8 +48,8 @@
|
||||
|
||||
Ground Effects combines the sprite system used in Taito Z games with
|
||||
the TC0480SCP tilemap chip plus some features from the Taito F3 system.
|
||||
It has an extra tilemap chip which is a dead ringer for the TC0100SCN
|
||||
(check the inits), like Under Fire.
|
||||
It has an extra TC0620SCC tilemap chip which is a 6bpp version of the
|
||||
TC0100SCN (check the inits), like Under Fire.
|
||||
|
||||
Ground Effects is effectively a 30Hz game - though the vblank interrupts
|
||||
still come in at 60Hz, the game uses a hardware frame counter to limit
|
||||
@ -190,7 +190,7 @@ static ADDRESS_MAP_START( groundfx_map, AS_PROGRAM, 32, groundfx_state )
|
||||
AM_RANGE(0x700000, 0x7007ff) AM_RAM AM_SHARE("snd_shared")
|
||||
AM_RANGE(0x800000, 0x80ffff) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, long_r, long_w) /* tilemaps */
|
||||
AM_RANGE(0x830000, 0x83002f) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, ctrl_long_r, ctrl_long_w) // debugging
|
||||
AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* piv tilemaps */
|
||||
AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* 6bpp tilemaps */
|
||||
AM_RANGE(0x920000, 0x92000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_long_r, ctrl_long_w)
|
||||
AM_RANGE(0xa00000, 0xa0ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0xb00000, 0xb003ff) AM_RAM // ?? single bytes, blending ??
|
||||
@ -279,7 +279,7 @@ static const gfx_layout charlayout =
|
||||
128*8 /* every sprite takes 128 consecutive bytes */
|
||||
};
|
||||
|
||||
static const gfx_layout pivlayout =
|
||||
static const gfx_layout scclayout =
|
||||
{
|
||||
8,8, /* 8*8 characters */
|
||||
RGN_FRAC(1,2),
|
||||
@ -293,7 +293,7 @@ static const gfx_layout pivlayout =
|
||||
static GFXDECODE_START( groundfx )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x0, tile16x16_layout, 4096, 512 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 512 )
|
||||
GFXDECODE_ENTRY( "gfx3", 0x0, pivlayout, 0, 512 )
|
||||
GFXDECODE_ENTRY( "gfx3", 0x0, scclayout, 0, 512 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
@ -375,7 +375,7 @@ ROM_START( groundfx )
|
||||
ROM_LOAD32_BYTE( "d51-07.51", 0x000003, 0x200000, CRC(24b2f97d) SHA1(6980e67b435d189ce897c0301e0411763410ab47) )
|
||||
|
||||
ROM_REGION( 0x400000, "gfx3", 0 )
|
||||
ROM_LOAD16_BYTE( "d51-10.95", 0x000000, 0x100000, CRC(d5910604) SHA1(8efe13884cfdef208394ddfe19f43eb1b9f78ff3) ) /* PIV 8x8 tiles, 6bpp */
|
||||
ROM_LOAD16_BYTE( "d51-10.95", 0x000000, 0x100000, CRC(d5910604) SHA1(8efe13884cfdef208394ddfe19f43eb1b9f78ff3) ) /* SCC 8x8 tiles, 6bpp */
|
||||
ROM_LOAD16_BYTE( "d51-11.96", 0x000001, 0x100000, CRC(fee5f5c6) SHA1(1be88747f9c71c348dd61a8f0040007df3a3e6a6) )
|
||||
ROM_LOAD ( "d51-12.97", 0x300000, 0x100000, CRC(d630287b) SHA1(2fa09e1821b7280d193ca9a2a270759c3c3189d1) )
|
||||
ROM_FILL ( 0x200000, 0x100000, 0 )
|
||||
@ -418,7 +418,7 @@ DRIVER_INIT_MEMBER(groundfx_state,groundfx)
|
||||
/* Speedup handlers */
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x20b574, 0x20b577, read32_delegate(FUNC(groundfx_state::irq_speedup_r_groundfx),this));
|
||||
|
||||
/* make piv tile GFX format suitable for gfxdecode */
|
||||
/* make SCC tile GFX format suitable for gfxdecode */
|
||||
offset = size/2;
|
||||
for (i = size/2+size/4; i<size; i++)
|
||||
{
|
||||
|
@ -7,12 +7,12 @@
|
||||
|
||||
Board Info (Underfire):
|
||||
|
||||
TC0470LIN : ?
|
||||
TC0470LIN : object line buffer?
|
||||
TC0480SCP : known tilemap chip
|
||||
TC0510NIO : known input chip
|
||||
TC0570SPC : must be the object chip (next to spritemap and OBJ roms)
|
||||
TC0590PIV : Piv tilemaps
|
||||
TC0620SCC : lightgun ??? pivot port ???
|
||||
TC0590PIV : object related???
|
||||
TC0620SCC : tilemap chip (6bpp version of TC0100SCN)
|
||||
TC0650FDA : palette ? (Slapshot and F3 games also have one)
|
||||
|
||||
M43E0278A
|
||||
@ -46,9 +46,8 @@
|
||||
|
||||
Under Fire combines the sprite system used in Taito Z games with
|
||||
the TC0480SCP tilemap chip plus some features from the Taito F3 system.
|
||||
It has an extra tilemap chip which is a dead ringer for the TC0100SCN
|
||||
(check the inits). Why did Taito give it a different name in this
|
||||
incarnation?
|
||||
It has an extra TC0620SCC tilemap chip which is a 6bpp version of the
|
||||
TC0100SCN (check the inits).
|
||||
|
||||
|
||||
Game misbehaviours
|
||||
@ -452,7 +451,7 @@ static ADDRESS_MAP_START( undrfire_map, AS_PROGRAM, 32, undrfire_state )
|
||||
AM_RANGE(0x700000, 0x7007ff) AM_RAM AM_SHARE("snd_shared")
|
||||
AM_RANGE(0x800000, 0x80ffff) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, long_r, long_w) /* tilemaps */
|
||||
AM_RANGE(0x830000, 0x83002f) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, ctrl_long_r, ctrl_long_w)
|
||||
AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* piv tilemaps */
|
||||
AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* 6bpp tilemaps */
|
||||
AM_RANGE(0x920000, 0x92000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_long_r, ctrl_long_w)
|
||||
AM_RANGE(0xa00000, 0xa0ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0xb00000, 0xb003ff) AM_RAM /* single bytes, blending ??? */
|
||||
@ -471,7 +470,7 @@ static ADDRESS_MAP_START( cbombers_cpua_map, AS_PROGRAM, 32, undrfire_state )
|
||||
AM_RANGE(0x700000, 0x7007ff) AM_RAM AM_SHARE("snd_shared")
|
||||
AM_RANGE(0x800000, 0x80ffff) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, long_r, long_w) /* tilemaps */
|
||||
AM_RANGE(0x830000, 0x83002f) AM_DEVREADWRITE("tc0480scp", tc0480scp_device, ctrl_long_r, ctrl_long_w)
|
||||
AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* piv tilemaps */
|
||||
AM_RANGE(0x900000, 0x90ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, long_r, long_w) /* 6bpp tilemaps */
|
||||
AM_RANGE(0x920000, 0x92000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_long_r, ctrl_long_w)
|
||||
AM_RANGE(0xa00000, 0xa0ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0xb00000, 0xb0000f) AM_RAM /* ? */
|
||||
@ -639,7 +638,7 @@ static const gfx_layout charlayout =
|
||||
128*8 /* every sprite takes 128 consecutive bytes */
|
||||
};
|
||||
|
||||
static const gfx_layout pivlayout =
|
||||
static const gfx_layout scclayout =
|
||||
{
|
||||
8,8, /* 8*8 characters */
|
||||
RGN_FRAC(1,2),
|
||||
@ -653,13 +652,13 @@ static const gfx_layout pivlayout =
|
||||
static GFXDECODE_START( undrfire )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x0, tile16x16_layout, 0, 512 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 512 )
|
||||
GFXDECODE_ENTRY( "gfx3", 0x0, pivlayout, 0, 512 )
|
||||
GFXDECODE_ENTRY( "gfx3", 0x0, scclayout, 0, 512 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( cbombers )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x0, tile16x16_layout, 0, 512 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0x1000, 512 )
|
||||
GFXDECODE_ENTRY( "gfx3", 0x0, pivlayout, 0, 512 )
|
||||
GFXDECODE_ENTRY( "gfx3", 0x0, scclayout, 0, 512 )
|
||||
GFXDECODE_END
|
||||
|
||||
/***********************************************************
|
||||
@ -1099,7 +1098,7 @@ DRIVER_INIT_MEMBER(undrfire_state,undrfire)
|
||||
int size=memregion("gfx3")->bytes();
|
||||
int data;
|
||||
|
||||
/* make piv tile GFX format suitable for gfxdecode */
|
||||
/* make SCC tile GFX format suitable for gfxdecode */
|
||||
offset = size/2;
|
||||
for (i = size/2+size/4; i<size; i++)
|
||||
{
|
||||
@ -1129,7 +1128,7 @@ DRIVER_INIT_MEMBER(undrfire_state,cbombers)
|
||||
int data;
|
||||
|
||||
|
||||
/* make piv tile GFX format suitable for gfxdecode */
|
||||
/* make SCC tile GFX format suitable for gfxdecode */
|
||||
offset = size/2;
|
||||
for (i = size/2+size/4; i<size; i++)
|
||||
{
|
||||
|
@ -197,7 +197,7 @@ UINT32 groundfx_state::screen_update_groundfx(screen_device &screen, bitmap_ind1
|
||||
{
|
||||
address_space &space = machine().driver_data()->generic_space();
|
||||
UINT8 layer[5];
|
||||
UINT8 pivlayer[3];
|
||||
UINT8 scclayer[3];
|
||||
UINT16 priority;
|
||||
|
||||
m_tc0100scn->tilemap_update();
|
||||
@ -211,15 +211,15 @@ UINT32 groundfx_state::screen_update_groundfx(screen_device &screen, bitmap_ind1
|
||||
layer[3] = (priority & 0x000f) >> 0; /* tells us which is top */
|
||||
layer[4] = 4; /* text layer always over bg layers */
|
||||
|
||||
pivlayer[0] = m_tc0100scn->bottomlayer();
|
||||
pivlayer[1] = pivlayer[0]^1;
|
||||
pivlayer[2] = 2;
|
||||
scclayer[0] = m_tc0100scn->bottomlayer();
|
||||
scclayer[1] = scclayer[0]^1;
|
||||
scclayer[2] = 2;
|
||||
|
||||
screen.priority().fill(0, cliprect);
|
||||
bitmap.fill(0, cliprect); /* wrong color? */
|
||||
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[0], TILEMAP_DRAW_OPAQUE, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[1], 0, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0);
|
||||
|
||||
/* BIG HACK!
|
||||
|
||||
@ -244,7 +244,7 @@ UINT32 groundfx_state::screen_update_groundfx(screen_device &screen, bitmap_ind1
|
||||
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 4);
|
||||
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[3], 0, 8);
|
||||
|
||||
//m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, 0, pivlayer[2], 0, 0);
|
||||
//m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, 0, scclayer[2], 0, 0);
|
||||
|
||||
if (m_tc0480scp->long_r(space, 0x20 / 4, 0xffffffff) != 0x240866) /* Stupid hack for start of race */
|
||||
m_tc0480scp->tilemap_draw(screen, bitmap, m_hack_cliprect, layer[0], 0, 0);
|
||||
@ -257,7 +257,7 @@ UINT32 groundfx_state::screen_update_groundfx(screen_device &screen, bitmap_ind1
|
||||
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[2], 0, 4);
|
||||
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[3], 0, 8);
|
||||
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[2], 0, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0);
|
||||
|
||||
draw_sprites(screen, bitmap, cliprect, 0, 44, -574);
|
||||
}
|
||||
|
@ -347,14 +347,14 @@ UINT32 undrfire_state::screen_update_undrfire(screen_device &screen, bitmap_ind1
|
||||
{
|
||||
address_space &space = machine().driver_data()->generic_space();
|
||||
UINT8 layer[5];
|
||||
UINT8 pivlayer[3];
|
||||
UINT8 scclayer[3];
|
||||
UINT16 priority;
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if (machine().input().code_pressed_once (KEYCODE_X))
|
||||
{
|
||||
m_dislayer[5] ^= 1;
|
||||
popmessage("piv text: %01x",m_dislayer[5]);
|
||||
popmessage("scc text: %01x",m_dislayer[5]);
|
||||
}
|
||||
if (machine().input().code_pressed_once (KEYCODE_C))
|
||||
{
|
||||
@ -398,22 +398,22 @@ UINT32 undrfire_state::screen_update_undrfire(screen_device &screen, bitmap_ind1
|
||||
layer[3] = (priority & 0x000f) >> 0; /* tells us which is top */
|
||||
layer[4] = 4; /* text layer always over bg layers */
|
||||
|
||||
pivlayer[0] = m_tc0100scn->bottomlayer();
|
||||
pivlayer[1] = pivlayer[0] ^ 1;
|
||||
pivlayer[2] = 2;
|
||||
scclayer[0] = m_tc0100scn->bottomlayer();
|
||||
scclayer[1] = scclayer[0] ^ 1;
|
||||
scclayer[2] = 2;
|
||||
|
||||
screen.priority().fill(0, cliprect);
|
||||
bitmap.fill(0, cliprect); /* wrong color? */
|
||||
|
||||
|
||||
/* The "PIV" chip seems to be a renamed TC0100SCN. It has a
|
||||
/* The "SCC" chip seems to be a 6bpp TC0100SCN. It has a
|
||||
bottom layer usually full of bright garish colors that
|
||||
vaguely mimic the structure of the layers on top. Seems
|
||||
pointless - it's always hidden by other layers. Does it
|
||||
serve some blending pupose ? */
|
||||
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[0], TILEMAP_DRAW_OPAQUE, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[1], 0, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0);
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if (m_dislayer[layer[0]]==0)
|
||||
@ -455,7 +455,7 @@ UINT32 undrfire_state::screen_update_undrfire(screen_device &screen, bitmap_ind1
|
||||
#ifdef MAME_DEBUG
|
||||
if (m_dislayer[5]==0)
|
||||
#endif
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[2], 0, 0); /* piv text layer */
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0); /* TC0620SCC text layer */
|
||||
|
||||
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[4], 0, 0); /* TC0480SCP text layer */
|
||||
|
||||
@ -488,14 +488,14 @@ UINT32 undrfire_state::screen_update_cbombers(screen_device &screen, bitmap_ind1
|
||||
{
|
||||
address_space &space = machine().driver_data()->generic_space();
|
||||
UINT8 layer[5];
|
||||
UINT8 pivlayer[3];
|
||||
UINT8 scclayer[3];
|
||||
UINT16 priority;
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if (machine().input().code_pressed_once (KEYCODE_X))
|
||||
{
|
||||
m_dislayer[5] ^= 1;
|
||||
popmessage("piv text: %01x",m_dislayer[5]);
|
||||
popmessage("scc text: %01x",m_dislayer[5]);
|
||||
}
|
||||
if (machine().input().code_pressed_once (KEYCODE_C))
|
||||
{
|
||||
@ -539,22 +539,22 @@ UINT32 undrfire_state::screen_update_cbombers(screen_device &screen, bitmap_ind1
|
||||
layer[3] = (priority & 0x000f) >> 0; /* tells us which is top */
|
||||
layer[4] = 4; /* text layer always over bg layers */
|
||||
|
||||
pivlayer[0] = m_tc0100scn->bottomlayer();
|
||||
pivlayer[1] = pivlayer[0] ^ 1;
|
||||
pivlayer[2] = 2;
|
||||
scclayer[0] = m_tc0100scn->bottomlayer();
|
||||
scclayer[1] = scclayer[0] ^ 1;
|
||||
scclayer[2] = 2;
|
||||
|
||||
screen.priority().fill(0, cliprect);
|
||||
bitmap.fill(0, cliprect); /* wrong color? */
|
||||
|
||||
|
||||
/* The "PIV" chip seems to be a renamed TC0100SCN. It has a
|
||||
/* The "SCC" chip seems to be a 6bpp TC0100SCN. It has a
|
||||
bottom layer usually full of bright garish colors that
|
||||
vaguely mimic the structure of the layers on top. Seems
|
||||
pointless - it's always hidden by other layers. Does it
|
||||
serve some blending pupose ? */
|
||||
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[0], TILEMAP_DRAW_OPAQUE, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[1], 0, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[0], TILEMAP_DRAW_OPAQUE, 0);
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[1], 0, 0);
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if (m_dislayer[layer[0]]==0)
|
||||
@ -596,7 +596,7 @@ UINT32 undrfire_state::screen_update_cbombers(screen_device &screen, bitmap_ind1
|
||||
#ifdef MAME_DEBUG
|
||||
if (m_dislayer[5]==0)
|
||||
#endif
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, pivlayer[2], 0, 0); /* piv text layer */
|
||||
m_tc0100scn->tilemap_draw(screen, bitmap, cliprect, scclayer[2], 0, 0); /* TC0620SCC text layer */
|
||||
|
||||
m_tc0480scp->tilemap_draw(screen, bitmap, cliprect, layer[4], 0, 0); /* TC0480SCP text layer */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user