slap fight: Correct placement

This commit is contained in:
Olivier Galibert 2022-05-07 10:34:23 +02:00
parent 19dfefb91b
commit c5b07e0fe7
3 changed files with 28 additions and 10 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;
}