summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2022-05-07 10:34:23 +0200
committer Olivier Galibert <galibert@pobox.com>2022-05-17 10:12:12 +0200
commitc5b07e0fe76e452a1e0b14b09c8b70a9620a7412 (patch)
treecd0f5c439456fc2b3bdaf76375eb1577c3038a2e
parent19dfefb91b2b37d1436652f39564184eecf80224 (diff)
slap fight: Correct placement
-rw-r--r--src/mame/drivers/slapfght.cpp18
-rw-r--r--src/mame/includes/slapfght.h2
-rw-r--r--src/mame/video/slapfght.cpp18
3 files changed, 28 insertions, 10 deletions
diff --git a/src/mame/drivers/slapfght.cpp b/src/mame/drivers/slapfght.cpp
index 30cef7c02b3..ed52274a41e 100644
--- a/src/mame/drivers/slapfght.cpp
+++ b/src/mame/drivers/slapfght.cpp
@@ -67,7 +67,7 @@ $00 Status register - cycle 0xc7, 0x55, 0x00 (Thanks to Dave Spicer for the
Known Info
----------
-2K Character RAM at write only address $f000-$f7fff looks to be organised
+2K Character RAM at write only address $f000-$f7ff looks to be organised
64x32 chars with the screen rotated through 90 degrees clockwise. There
appears to be some kind of attribute(?) RAM above at $f800-$ffff organised
in the same manner.
@@ -79,6 +79,12 @@ Print function maybe around $09a2 based on info from log file.
$e000 looks like sprite ram, setup routines at $0008.
+Partial hand-made schematics don't show a buffer, but the games most
+definitely need it. Could be the second half of the ram, which seems
+otherwise unused, but it would be weird bandwidth-wise. It's not
+double-buffering through page swapping, sprite updates are
+incremental.
+
Sound System CPU Details
------------------------
@@ -910,9 +916,12 @@ void slapfght_state::perfrman(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(36_MHz_XTAL/6, 388, 0, 296, 270, 0, 240);
m_screen->set_screen_update(FUNC(slapfght_state::screen_update_perfrman));
+ m_screen->screen_vblank().set(m_spriteram_buffer, FUNC(buffered_spriteram8_device::vblank_copy_falling));
m_screen->screen_vblank().append(FUNC(slapfght_state::vblank_irq));
m_screen->set_palette(m_palette);
+ BUFFERED_SPRITERAM8(config, m_spriteram_buffer);
+
GFXDECODE(config, m_gfxdecode, m_palette, gfx_perfrman);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
MCFG_VIDEO_START_OVERRIDE(slapfght_state, perfrman)
@@ -956,9 +965,12 @@ void slapfght_state::tigerh(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(36_MHz_XTAL/6, 388, 0, 296, 270, 0, 240);
m_screen->set_screen_update(FUNC(slapfght_state::screen_update_slapfight));
+ m_screen->screen_vblank().set(m_spriteram_buffer, FUNC(buffered_spriteram8_device::vblank_copy_falling));
m_screen->screen_vblank().append(FUNC(slapfght_state::vblank_irq));
m_screen->set_palette(m_palette);
+ BUFFERED_SPRITERAM8(config, m_spriteram_buffer);
+
GFXDECODE(config, m_gfxdecode, m_palette, gfx_slapfght);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
MCFG_VIDEO_START_OVERRIDE(slapfght_state, slapfight)
@@ -1036,9 +1048,12 @@ void slapfght_state::slapfigh(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(36_MHz_XTAL/6, 388, 0, 296, 270, 0, 240);
m_screen->set_screen_update(FUNC(slapfght_state::screen_update_slapfight));
+ m_screen->screen_vblank().set(m_spriteram_buffer, FUNC(buffered_spriteram8_device::vblank_copy_falling));
m_screen->screen_vblank().append(FUNC(slapfght_state::vblank_irq));
m_screen->set_palette(m_palette);
+ BUFFERED_SPRITERAM8(config, m_spriteram_buffer);
+
GFXDECODE(config, m_gfxdecode, m_palette, gfx_slapfght);
PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
MCFG_VIDEO_START_OVERRIDE(slapfght_state, slapfight)
@@ -2101,3 +2116,4 @@ GAME( 1986, grdian, 0, slapfigh, getstar, slapfght_state, init_sl
GAME( 1986, getstarj, grdian, slapfigh, getstarj, slapfght_state, init_slapfigh, ROT0, "Toaplan / Taito", "Get Star (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, getstarb1, grdian, getstarb1, getstarj, slapfght_state, init_getstarb1, ROT0, "bootleg", "Get Star (bootleg set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1986, getstarb2, grdian, getstarb2, getstarb2, slapfght_state, init_getstarb2, ROT0, "bootleg", "Get Star (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
+z
diff --git a/src/mame/includes/slapfght.h b/src/mame/includes/slapfght.h
index 3ecbf90dff1..015faa57fdc 100644
--- a/src/mame/includes/slapfght.h
+++ b/src/mame/includes/slapfght.h
@@ -31,6 +31,7 @@ public:
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_spriteram(*this, "spriteram"),
+ m_spriteram_buffer(*this, "spriteram"),
m_fixvideoram(*this, "fixvideoram"),
m_fixcolorram(*this, "fixcolorram")
{ }
@@ -64,6 +65,7 @@ private:
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_colorram;
required_shared_ptr<uint8_t> m_spriteram;
+ required_device<buffered_spriteram8_device> m_spriteram_buffer;
optional_shared_ptr<uint8_t> m_fixvideoram;
optional_shared_ptr<uint8_t> m_fixcolorram;
diff --git a/src/mame/video/slapfght.cpp b/src/mame/video/slapfght.cpp
index 0418c2d6cb8..e64a5b6262e 100644
--- a/src/mame/video/slapfght.cpp
+++ b/src/mame/video/slapfght.cpp
@@ -63,8 +63,8 @@ VIDEO_START_MEMBER(slapfght_state, slapfight)
m_pf1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(slapfght_state::get_pf1_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(slapfght_state::get_fix_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
- m_fix_tilemap->set_scrolldy(0, 15);
- m_pf1_tilemap->set_scrolldy(0, 14);
+ m_fix_tilemap->set_scrolldy(-16, 0);
+ m_pf1_tilemap->set_scrolldy(-17, -1);
m_fix_tilemap->set_transparent_pen(0);
}
@@ -136,9 +136,9 @@ WRITE_LINE_MEMBER(slapfght_state::palette_bank_w)
void slapfght_state::draw_perfrman_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int layer)
{
- const uint8_t *src = m_spriteram;
+ const uint8_t *src = m_spriteram_buffer->buffer();
- for (int offs = 0; offs < m_spriteram.bytes(); offs += 4)
+ for (int offs = 0; offs < 0x800; offs += 4)
{
/*
0: xxxxxxxx - code
@@ -186,9 +186,9 @@ uint32_t slapfght_state::screen_update_perfrman(screen_device &screen, bitmap_in
void slapfght_state::draw_slapfight_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- const uint8_t *src = m_spriteram;
+ const uint8_t *src = m_spriteram_buffer->buffer();
- for (int offs = 0; offs < m_spriteram.bytes(); offs += 4)
+ for (int offs = 0; offs < 0x800; offs += 4)
{
/*
0: xxxxxxxx - code low
@@ -201,14 +201,14 @@ void slapfght_state::draw_slapfight_sprites(bitmap_ind16 &bitmap, const rectangl
*/
int code = src[offs + 0] | ((src[offs + 2] & 0xc0) << 2);
- int sy = src[offs + 3] + 2;
- int sx = (src[offs + 1] | (src[offs + 2] << 8 & 0x100)) - 17;
+ int sy = src[offs + 3] - 17;
+ int sx = (src[offs + 1] | (src[offs + 2] << 8 & 0x100)) - 13;
int color = src[offs + 2] >> 1 & 0xf;
int fx = 0, fy = 0;
if (flip_screen())
{
- sy = (238 - sy) & 0xff;
+ sy = (206 - sy) & 0xff;
sx = 284 - sx;
fx = fy = 1;
}