rpunch.cpp: Update drawing behaviors, misc updates (#6534)

* rpunch.cpp: Update drawing behaviors, misc updates
Use pdrawgfx for sprite priority, Use bitmap_ind16 for drawing framebuffer behavior, Fix notes and variable names
Add notes, Use set_rom_bank for upd bankswitching, Reduce unnecessary includes, Fix spacing, Fix address map related to framebuffer exists, Use shorter/correct type values, Simplify handlers, Cleanup gfx layouts

* rpunch.cpp : Use shorter type value
This commit is contained in:
cam900 2020-04-11 03:30:16 +09:00 committed by GitHub
parent 27d5232588
commit a0d861bc4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 212 additions and 224 deletions

View File

@ -55,8 +55,8 @@
W -------- ---x---- (background 1 palette bank) W -------- ---x---- (background 1 palette bank)
W -------- ----xxxx (bitmap palette bank) W -------- ----xxxx (bitmap palette bank)
0C000E W -------- xxxxxxxx Sound communications 0C000E W -------- xxxxxxxx Sound communications
0C0010 W -------- --xxxxxx Sprite bias (???) 0C0010 W -------- --xxxxxx Number of active sprite entries
0C0012 W -------- --xxxxxx Bitmap bias (???) 0C0012 W -------- --xxxxxx Split point of sprite priority
0C0018 R -xxxx-xx --xxxxxx Player 1 input port 0C0018 R -xxxx-xx --xxxxxx Player 1 input port
R -x------ -------- (2 player start) R -x------ -------- (2 player start)
R --x----- -------- (1 player start) R --x----- -------- (1 player start)
@ -110,7 +110,6 @@
#include "includes/rpunch.h" #include "includes/rpunch.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "cpu/m6809/m6809.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/input_merger.h" #include "machine/input_merger.h"
#include "sound/ym2151.h" #include "sound/ym2151.h"
@ -132,21 +131,15 @@ void rpunch_state::machine_start()
save_item(NAME(m_upd_rom_bank)); save_item(NAME(m_upd_rom_bank));
save_item(NAME(m_sprite_xoffs)); save_item(NAME(m_sprite_xoffs));
save_item(NAME(m_videoflags)); save_item(NAME(m_videoflags));
save_item(NAME(m_bins)); save_item(NAME(m_sprite_pri));
save_item(NAME(m_gins)); save_item(NAME(m_sprite_num));
} }
void rpunch_state::machine_reset() void rpunch_state::machine_reset()
{ {
if (memregion("upd"))
{
uint8_t *snd = memregion("upd")->base();
memcpy(snd, snd + 0x20000, 0x20000);
}
} }
/************************************* /*************************************
* *
* Input ports * Input ports
@ -165,32 +158,26 @@ CUSTOM_INPUT_MEMBER(rpunch_state::hi_bits_r)
* *
*************************************/ *************************************/
READ16_MEMBER(rpunch_state::sound_busy_r) u16 rpunch_state::sound_busy_r()
{ {
return m_soundlatch->pending_r(); return m_soundlatch->pending_r();
} }
/************************************* /*************************************
* *
* UPD7759 controller * UPD7759 controller
* *
*************************************/ *************************************/
WRITE8_MEMBER(rpunch_state::upd_control_w) void rpunch_state::upd_control_w(u8 data)
{ {
if ((data & 1) != m_upd_rom_bank) m_upd7759->set_rom_bank(BIT(data, 0));
{
uint8_t *snd = memregion("upd")->base();
m_upd_rom_bank = data & 1;
memcpy(snd, snd + 0x20000 * (m_upd_rom_bank + 1), 0x20000);
}
m_upd7759->reset_w(BIT(data, 7)); m_upd7759->reset_w(BIT(data, 7));
} }
WRITE8_MEMBER(rpunch_state::upd_data_w) void rpunch_state::upd_data_w(u8 data)
{ {
m_upd7759->port_w(data); m_upd7759->port_w(data);
m_upd7759->start_w(0); m_upd7759->start_w(0);
@ -198,26 +185,24 @@ WRITE8_MEMBER(rpunch_state::upd_data_w)
} }
/************************************* /*************************************
* *
* Main CPU memory handlers * Main CPU memory handlers
* *
*************************************/ *************************************/
void rpunch_state::main_map(address_map &map) void rpunch_state::svolley_map(address_map &map)
{ {
map.global_mask(0xfffff); map.global_mask(0xfffff);
map(0x000000, 0x03ffff).rom(); map(0x000000, 0x03ffff).rom();
map(0x040000, 0x04ffff).ram().share("bitmapram");
map(0x060000, 0x060fff).ram().share("spriteram"); map(0x060000, 0x060fff).ram().share("spriteram");
map(0x080000, 0x083fff).ram().w(FUNC(rpunch_state::rpunch_videoram_w)).share("videoram"); map(0x080000, 0x083fff).ram().w(FUNC(rpunch_state::videoram_w)).share("videoram");
map(0x0a0000, 0x0a07ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x0a0000, 0x0a07ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x0c0000, 0x0c0007).w(FUNC(rpunch_state::rpunch_scrollreg_w)); map(0x0c0000, 0x0c0007).w(FUNC(rpunch_state::scrollreg_w));
map(0x0c0009, 0x0c0009).select(0x20).w(FUNC(rpunch_state::rpunch_gga_w)); map(0x0c0009, 0x0c0009).select(0x20).w(FUNC(rpunch_state::gga_w));
map(0x0c000c, 0x0c000d).w(FUNC(rpunch_state::rpunch_videoreg_w)); map(0x0c000c, 0x0c000d).w(FUNC(rpunch_state::videoreg_w));
map(0x0c000f, 0x0c000f).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff); map(0x0c000f, 0x0c000f).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
map(0x0c0010, 0x0c0013).w(FUNC(rpunch_state::rpunch_ins_w)); map(0x0c0010, 0x0c0013).w(FUNC(rpunch_state::sprite_ctrl_w)).umask16(0x00ff);
map(0x0c0018, 0x0c0019).portr("P1"); map(0x0c0018, 0x0c0019).portr("P1");
map(0x0c001a, 0x0c001b).portr("P2"); map(0x0c001a, 0x0c001b).portr("P2");
map(0x0c001c, 0x0c001d).portr("DSW"); map(0x0c001c, 0x0c001d).portr("DSW");
@ -225,9 +210,16 @@ void rpunch_state::main_map(address_map &map)
map(0x0fc000, 0x0fffff).ram(); map(0x0fc000, 0x0fffff).ram();
} }
void rpunch_state::rpunch_map(address_map &map)
{
svolley_map(map);
map.global_mask(0xfffff);
map(0x040000, 0x04ffff).rw(FUNC(rpunch_state::pixmap_r), FUNC(rpunch_state::pixmap_w)); // mirrored?
}
void rpunch_state::svolleybl_main_map(address_map &map) void rpunch_state::svolleybl_main_map(address_map &map)
{ {
main_map(map); svolley_map(map);
// TODO: sound latch hook up is incomplete // TODO: sound latch hook up is incomplete
map(0x090000, 0x090fff).ram(); // ? map(0x090000, 0x090fff).ram(); // ?
@ -413,10 +405,10 @@ static const gfx_layout bglayout =
8,8, 8,8,
RGN_FRAC(1,1), RGN_FRAC(1,1),
4, 4,
{ 0, 1, 2, 3 }, { STEP4(0,1) },
{ 4, 0, 12, 8, 20, 16, 28, 24 }, { STEP4(3*4,-4), STEP4(7*4,-4) },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, { STEP8(0,8*4) },
8*32 8*8*4
}; };
@ -425,20 +417,17 @@ static const gfx_layout splayout =
16,32, 16,32,
RGN_FRAC(1,1), RGN_FRAC(1,1),
4, 4,
{ 0, 1, 2, 3 }, { STEP4(0,1) },
{ 12, 8, 4, 0, 28, 24, 20, 16, 44, 40, 36, 32, 60, 56, 52, 48 }, { STEP4(3*4,-4), STEP4(7*4,-4), STEP4(11*4,-4), STEP4(15*4,-4) },
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, { STEP32(0,16*4) },
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64, 16*32*4
16*64, 17*64, 18*64, 19*64, 20*64, 21*64, 22*64, 23*64,
24*64, 25*64, 26*64, 27*64, 28*64, 29*64, 30*64, 31*64 },
8*256
}; };
static GFXDECODE_START( gfx_rpunch ) static GFXDECODE_START( gfx_rpunch )
GFXDECODE_ENTRY( "gfx1", 0, bglayout, 0, 16 ) GFXDECODE_ENTRY( "gfx1", 0, bglayout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, bglayout, 256, 16 ) GFXDECODE_ENTRY( "gfx2", 0, bglayout, 256, 16 )
GFXDECODE_ENTRY( "sprites", 0, splayout, 0, 16*4 ) GFXDECODE_ENTRY( "sprites", 0, splayout, 0, 64 )
GFXDECODE_END GFXDECODE_END
@ -449,8 +438,8 @@ static const gfx_layout bootleg_tile_layout =
4, 4,
{ STEP4(0,8) }, { STEP4(0,8) },
{ STEP8(0,1) }, { STEP8(0,1) },
{ STEP8(0,32) }, { STEP8(0,8*4) },
8*32, 8*8*4
}; };
static const gfx_layout bootleg_sprite_layout = static const gfx_layout bootleg_sprite_layout =
@ -459,15 +448,15 @@ static const gfx_layout bootleg_sprite_layout =
RGN_FRAC(1,1), RGN_FRAC(1,1),
4, 4,
{ STEP4(0,8) }, { STEP4(0,8) },
{ STEP8(0,1), STEP8(1024,1) }, { STEP8(0,1), STEP8(32*8*4,1) },
{ STEP32(0,32) }, { STEP32(0,8*4) },
32*32*2, 16*32*4
}; };
static GFXDECODE_START( gfx_svolleybl ) static GFXDECODE_START( gfx_svolleybl )
GFXDECODE_ENTRY( "gfx1", 0, bootleg_tile_layout, 0, 16 ) GFXDECODE_ENTRY( "gfx1", 0, bootleg_tile_layout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, bootleg_tile_layout, 256, 16 ) GFXDECODE_ENTRY( "gfx2", 0, bootleg_tile_layout, 256, 16 )
GFXDECODE_ENTRY( "sprites", 0, bootleg_sprite_layout, 0, 16*4 ) GFXDECODE_ENTRY( "sprites", 0, bootleg_sprite_layout, 0, 64 )
GFXDECODE_END GFXDECODE_END
@ -481,7 +470,7 @@ void rpunch_state::rpunch(machine_config &config)
{ {
/* basic machine hardware */ /* basic machine hardware */
M68000(config, m_maincpu, MASTER_CLOCK/2); M68000(config, m_maincpu, MASTER_CLOCK/2);
m_maincpu->set_addrmap(AS_PROGRAM, &rpunch_state::main_map); m_maincpu->set_addrmap(AS_PROGRAM, &rpunch_state::rpunch_map);
Z80(config, m_audiocpu, MASTER_CLOCK/4); Z80(config, m_audiocpu, MASTER_CLOCK/4);
m_audiocpu->set_addrmap(AS_PROGRAM, &rpunch_state::sound_map); m_audiocpu->set_addrmap(AS_PROGRAM, &rpunch_state::sound_map);
@ -496,14 +485,14 @@ void rpunch_state::rpunch(machine_config &config)
m_screen->set_refresh_hz(60); m_screen->set_refresh_hz(60);
m_screen->set_size(304, 224); m_screen->set_size(304, 224);
m_screen->set_visarea(8, 303-8, 0, 223-8); m_screen->set_visarea(8, 303-8, 0, 223-8);
m_screen->set_screen_update(FUNC(rpunch_state::screen_update_rpunch)); m_screen->set_screen_update(FUNC(rpunch_state::screen_update));
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_rpunch); GFXDECODE(config, m_gfxdecode, m_palette, gfx_rpunch);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
VSYSTEM_GGA(config, m_gga, VIDEO_CLOCK/2); // verified from rpunch schematics VSYSTEM_GGA(config, m_gga, VIDEO_CLOCK/2); // verified from rpunch schematics
m_gga->write_cb().set(FUNC(rpunch_state::rpunch_gga_data_w)); m_gga->write_cb().set(FUNC(rpunch_state::gga_data_w));
MCFG_VIDEO_START_OVERRIDE(rpunch_state,rpunch) MCFG_VIDEO_START_OVERRIDE(rpunch_state,rpunch)
@ -521,6 +510,7 @@ void rpunch_state::rpunch(machine_config &config)
void rpunch_state::svolley(machine_config &config) void rpunch_state::svolley(machine_config &config)
{ {
rpunch(config); rpunch(config);
m_maincpu->set_addrmap(AS_PROGRAM, &rpunch_state::svolley_map);
MCFG_VIDEO_START_OVERRIDE(rpunch_state,svolley) MCFG_VIDEO_START_OVERRIDE(rpunch_state,svolley)
} }
@ -543,14 +533,14 @@ void rpunch_state::svolleybl(machine_config &config)
m_screen->set_refresh_hz(60); m_screen->set_refresh_hz(60);
m_screen->set_size(304, 224); m_screen->set_size(304, 224);
m_screen->set_visarea(8, 303-8, 0, 223-8); m_screen->set_visarea(8, 303-8, 0, 223-8);
m_screen->set_screen_update(FUNC(rpunch_state::screen_update_rpunch)); m_screen->set_screen_update(FUNC(rpunch_state::screen_update));
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_svolleybl); GFXDECODE(config, m_gfxdecode, m_palette, gfx_svolleybl);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
VSYSTEM_GGA(config, m_gga, VIDEO_CLOCK/2); VSYSTEM_GGA(config, m_gga, VIDEO_CLOCK/2);
m_gga->write_cb().set(FUNC(rpunch_state::rpunch_gga_data_w)); m_gga->write_cb().set(FUNC(rpunch_state::gga_data_w));
MCFG_VIDEO_START_OVERRIDE(rpunch_state,rpunch) MCFG_VIDEO_START_OVERRIDE(rpunch_state,rpunch)
@ -572,6 +562,7 @@ void rpunch_state::svolleybl(machine_config &config)
* *
*************************************/ *************************************/
// VS7-0102 PCB (CPU Board) with VS7-0101 PCB (Video/ROM Board?)
ROM_START( rpunch ) ROM_START( rpunch )
ROM_REGION( 0x40000, "maincpu", 0 ) ROM_REGION( 0x40000, "maincpu", 0 )
ROM_LOAD16_BYTE( "rpunch.20", 0x00000, 0x08000, CRC(a2028d59) SHA1(d304811853ad68b3977edb90b94f3e2c7507be82) ) ROM_LOAD16_BYTE( "rpunch.20", 0x00000, 0x08000, CRC(a2028d59) SHA1(d304811853ad68b3977edb90b94f3e2c7507be82) )
@ -583,15 +574,15 @@ ROM_START( rpunch )
ROM_LOAD( "rpunch.92", 0x00000, 0x10000, CRC(5e1870e3) SHA1(0ab33f39144ed72d805341d869f61764610d3df6) ) ROM_LOAD( "rpunch.92", 0x00000, 0x10000, CRC(5e1870e3) SHA1(0ab33f39144ed72d805341d869f61764610d3df6) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "rl_c13.bin", 0x00000, 0x40000, CRC(7c8403b0) SHA1(2fb92860a41f3331076c73b2b010e175cb4929ca) ) ROM_LOAD16_WORD_SWAP( "rl_c13.bin", 0x00000, 0x40000, CRC(7c8403b0) SHA1(2fb92860a41f3331076c73b2b010e175cb4929ca) )
ROM_LOAD( "rl_c10.bin", 0x40000, 0x08000, CRC(312eb260) SHA1(31faa90fde54fbc6c110bee7b4690a30beaec469) ) ROM_LOAD16_WORD_SWAP( "rl_c10.bin", 0x40000, 0x08000, CRC(312eb260) SHA1(31faa90fde54fbc6c110bee7b4690a30beaec469) )
ROM_LOAD( "rl_c12.bin", 0x48000, 0x08000, CRC(bea85219) SHA1(4036bdad921dd3555a2dc6bb12e9ffa615de70ca) ) ROM_LOAD16_WORD_SWAP( "rl_c12.bin", 0x48000, 0x08000, CRC(bea85219) SHA1(4036bdad921dd3555a2dc6bb12e9ffa615de70ca) )
ROM_FILL( 0x50000, 0x10000, 0xff ) ROM_FILL( 0x50000, 0x10000, 0xff )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "rl_a10.bin", 0x00000, 0x40000, CRC(c2a77619) SHA1(9b1e85fb18833c3b96a6c58b8714984f60a90afc) ) ROM_LOAD16_WORD_SWAP( "rl_a10.bin", 0x00000, 0x40000, CRC(c2a77619) SHA1(9b1e85fb18833c3b96a6c58b8714984f60a90afc) )
ROM_LOAD( "rl_a13.bin", 0x40000, 0x08000, CRC(a39c2c16) SHA1(d8d55eb58d3fc79f982f535ec85f69593fe9d883) ) ROM_LOAD16_WORD_SWAP( "rl_a13.bin", 0x40000, 0x08000, CRC(a39c2c16) SHA1(d8d55eb58d3fc79f982f535ec85f69593fe9d883) )
ROM_LOAD( "rpunch.54", 0x48000, 0x08000, CRC(e2969747) SHA1(8da996fc2e2e3d281f293d0ccaf35ebdb9379d48) ) ROM_LOAD16_WORD_SWAP( "rpunch.54", 0x48000, 0x08000, CRC(e2969747) SHA1(8da996fc2e2e3d281f293d0ccaf35ebdb9379d48) )
ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "rl_4g.bin", 0x00000, 0x20000, CRC(c5cb4b7a) SHA1(2b6be85800ab62b000a0b01cff8af689b25c4c65) ) ROM_LOAD16_BYTE( "rl_4g.bin", 0x00000, 0x20000, CRC(c5cb4b7a) SHA1(2b6be85800ab62b000a0b01cff8af689b25c4c65) )
@ -601,8 +592,8 @@ ROM_START( rpunch )
ROM_LOAD16_BYTE( "rpunch.85", 0x50000, 0x08000, CRC(60b88a2c) SHA1(b10aba06a5d88d0f27041f9e356aebf9f8a230df) ) ROM_LOAD16_BYTE( "rpunch.85", 0x50000, 0x08000, CRC(60b88a2c) SHA1(b10aba06a5d88d0f27041f9e356aebf9f8a230df) )
ROM_LOAD16_BYTE( "rpunch.86", 0x50001, 0x08000, CRC(91d204f6) SHA1(68b5fb29ea5404597adada1a197ad853e79ada1c) ) ROM_LOAD16_BYTE( "rpunch.86", 0x50001, 0x08000, CRC(91d204f6) SHA1(68b5fb29ea5404597adada1a197ad853e79ada1c) )
ROM_REGION( 0x60000, "upd", 0 ) ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "rl_f18.bin", 0x20000, 0x20000, CRC(47840673) SHA1(ffe20f8772a987f5dd06a3f348a1e3cfed26e19e) ) ROM_LOAD( "rl_f18.bin", 0x00000, 0x20000, CRC(47840673) SHA1(ffe20f8772a987f5dd06a3f348a1e3cfed26e19e) )
// ROM_LOAD( "rpunch.91", 0x00000, 0x0f000, CRC(7512cc59) ) // ROM_LOAD( "rpunch.91", 0x00000, 0x0f000, CRC(7512cc59) )
ROM_END ROM_END
@ -617,15 +608,15 @@ ROM_START( rabiolep )
ROM_LOAD( "rl_f20.bin", 0x00000, 0x10000, CRC(a6f50351) SHA1(3152d4ed100b0dfaf0da4ee79cd9e0f1692335e0) ) ROM_LOAD( "rl_f20.bin", 0x00000, 0x10000, CRC(a6f50351) SHA1(3152d4ed100b0dfaf0da4ee79cd9e0f1692335e0) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "rl_c13.bin", 0x00000, 0x40000, CRC(7c8403b0) SHA1(2fb92860a41f3331076c73b2b010e175cb4929ca) ) ROM_LOAD16_WORD_SWAP( "rl_c13.bin", 0x00000, 0x40000, CRC(7c8403b0) SHA1(2fb92860a41f3331076c73b2b010e175cb4929ca) )
ROM_LOAD( "rl_c10.bin", 0x40000, 0x08000, CRC(312eb260) SHA1(31faa90fde54fbc6c110bee7b4690a30beaec469) ) ROM_LOAD16_WORD_SWAP( "rl_c10.bin", 0x40000, 0x08000, CRC(312eb260) SHA1(31faa90fde54fbc6c110bee7b4690a30beaec469) )
ROM_LOAD( "rl_c12.bin", 0x48000, 0x08000, CRC(bea85219) SHA1(4036bdad921dd3555a2dc6bb12e9ffa615de70ca) ) ROM_LOAD16_WORD_SWAP( "rl_c12.bin", 0x48000, 0x08000, CRC(bea85219) SHA1(4036bdad921dd3555a2dc6bb12e9ffa615de70ca) )
ROM_FILL( 0x50000, 0x10000, 0xff ) ROM_FILL( 0x50000, 0x10000, 0xff )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "rl_a10.bin", 0x00000, 0x40000, CRC(c2a77619) SHA1(9b1e85fb18833c3b96a6c58b8714984f60a90afc) ) ROM_LOAD16_WORD_SWAP( "rl_a10.bin", 0x00000, 0x40000, CRC(c2a77619) SHA1(9b1e85fb18833c3b96a6c58b8714984f60a90afc) )
ROM_LOAD( "rl_a13.bin", 0x40000, 0x08000, CRC(a39c2c16) SHA1(d8d55eb58d3fc79f982f535ec85f69593fe9d883) ) ROM_LOAD16_WORD_SWAP( "rl_a13.bin", 0x40000, 0x08000, CRC(a39c2c16) SHA1(d8d55eb58d3fc79f982f535ec85f69593fe9d883) )
ROM_LOAD( "rl_a12.bin", 0x48000, 0x08000, CRC(970b0e32) SHA1(a1d4025ee4470a41aa047c6f06ca7aa98a1f7ffd) ) ROM_LOAD16_WORD_SWAP( "rl_a12.bin", 0x48000, 0x08000, CRC(970b0e32) SHA1(a1d4025ee4470a41aa047c6f06ca7aa98a1f7ffd) )
ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "rl_4g.bin", 0x00000, 0x20000, CRC(c5cb4b7a) SHA1(2b6be85800ab62b000a0b01cff8af689b25c4c65) ) ROM_LOAD16_BYTE( "rl_4g.bin", 0x00000, 0x20000, CRC(c5cb4b7a) SHA1(2b6be85800ab62b000a0b01cff8af689b25c4c65) )
@ -635,11 +626,11 @@ ROM_START( rabiolep )
ROM_LOAD16_BYTE( "rl_2g.bin", 0x50000, 0x08000, CRC(744903b4) SHA1(ba931a7f6bea8cebab8314551ed34896316b6661) ) ROM_LOAD16_BYTE( "rl_2g.bin", 0x50000, 0x08000, CRC(744903b4) SHA1(ba931a7f6bea8cebab8314551ed34896316b6661) )
ROM_LOAD16_BYTE( "rl_2h.bin", 0x50001, 0x08000, CRC(09649e75) SHA1(a650561a11970fbcbc4610fc67cb9f54fa3145a6) ) ROM_LOAD16_BYTE( "rl_2h.bin", 0x50001, 0x08000, CRC(09649e75) SHA1(a650561a11970fbcbc4610fc67cb9f54fa3145a6) )
ROM_REGION( 0x60000, "upd", 0 ) ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "rl_f18.bin", 0x20000, 0x20000, CRC(47840673) SHA1(ffe20f8772a987f5dd06a3f348a1e3cfed26e19e) ) ROM_LOAD( "rl_f18.bin", 0x00000, 0x20000, CRC(47840673) SHA1(ffe20f8772a987f5dd06a3f348a1e3cfed26e19e) )
ROM_END ROM_END
// VS-68K-2 (H2) PCB
ROM_START( svolley ) ROM_START( svolley )
ROM_REGION( 0x40000, "maincpu", 0 ) ROM_REGION( 0x40000, "maincpu", 0 )
ROM_LOAD16_BYTE( "sps_13.bin", 0x00000, 0x10000, CRC(2fbc5dcf) SHA1(fba4d353948f29b75b4db464509f7e606703f9dc) ) ROM_LOAD16_BYTE( "sps_13.bin", 0x00000, 0x10000, CRC(2fbc5dcf) SHA1(fba4d353948f29b75b4db464509f7e606703f9dc) )
@ -651,18 +642,18 @@ ROM_START( svolley )
ROM_LOAD( "sps_17.bin", 0x00000, 0x10000, CRC(48b89688) SHA1(1f39d979a852f5237a7d95231e86a28cdc1f4d65) ) ROM_LOAD( "sps_17.bin", 0x00000, 0x10000, CRC(48b89688) SHA1(1f39d979a852f5237a7d95231e86a28cdc1f4d65) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "sps_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) ) ROM_LOAD16_WORD_SWAP( "sps_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) )
ROM_LOAD( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) ) ROM_LOAD16_WORD_SWAP( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) )
ROM_LOAD( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) ) ROM_LOAD16_WORD_SWAP( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) )
ROM_LOAD( "sps_01.bin", 0x30000, 0x08000, CRC(6425e6d7) SHA1(b6c81155c22072d1de88ca23d58bd9621139dc6c) ) ROM_LOAD16_WORD_SWAP( "sps_01.bin", 0x30000, 0x08000, CRC(6425e6d7) SHA1(b6c81155c22072d1de88ca23d58bd9621139dc6c) )
ROM_LOAD( "sps_10.bin", 0x40000, 0x08000, CRC(a12b1589) SHA1(ecaa941f29c028ca94fcd1d86edfd69884e61d2c) ) ROM_LOAD16_WORD_SWAP( "sps_10.bin", 0x40000, 0x08000, CRC(a12b1589) SHA1(ecaa941f29c028ca94fcd1d86edfd69884e61d2c) )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) ) ROM_LOAD16_WORD_SWAP( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) )
ROM_LOAD( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) ) ROM_LOAD16_WORD_SWAP( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) )
ROM_LOAD( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) ) ROM_LOAD16_WORD_SWAP( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) )
ROM_LOAD( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) ) ROM_LOAD16_WORD_SWAP( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) )
ROM_LOAD( "sps_09.bin", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) ) ROM_LOAD16_WORD_SWAP( "sps_09.bin", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) )
ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "sps_20.bin", 0x00000, 0x10000, CRC(c9e7206d) SHA1(af5b2f49387a3b46c6693f4782aa0e587f17ab25) ) ROM_LOAD16_BYTE( "sps_20.bin", 0x00000, 0x10000, CRC(c9e7206d) SHA1(af5b2f49387a3b46c6693f4782aa0e587f17ab25) )
@ -674,9 +665,9 @@ ROM_START( svolley )
ROM_LOAD16_BYTE( "sps_21.bin", 0x30001, 0x08000, CRC(9dd28b42) SHA1(5f49456ee49ed7df59629d02a9da57eac370c388) ) ROM_LOAD16_BYTE( "sps_21.bin", 0x30001, 0x08000, CRC(9dd28b42) SHA1(5f49456ee49ed7df59629d02a9da57eac370c388) )
ROM_RELOAD(0x60001, 0x8000) ROM_RELOAD(0x60001, 0x8000)
ROM_REGION( 0x60000, "upd", 0 ) ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "sps_16.bin", 0x20000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) ) ROM_LOAD( "sps_16.bin", 0x00000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) )
ROM_LOAD( "sps_15.bin", 0x40000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) ) ROM_LOAD( "sps_15.bin", 0x20000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) )
ROM_END ROM_END
ROM_START( svolleyk ) ROM_START( svolleyk )
@ -690,19 +681,19 @@ ROM_START( svolleyk )
ROM_LOAD( "sps_17.bin", 0x00000, 0x10000, CRC(48b89688) SHA1(1f39d979a852f5237a7d95231e86a28cdc1f4d65) ) ROM_LOAD( "sps_17.bin", 0x00000, 0x10000, CRC(48b89688) SHA1(1f39d979a852f5237a7d95231e86a28cdc1f4d65) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "sps_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) ) ROM_LOAD16_WORD_SWAP( "sps_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) )
ROM_LOAD( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) ) ROM_LOAD16_WORD_SWAP( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) )
ROM_LOAD( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) ) ROM_LOAD16_WORD_SWAP( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) )
ROM_LOAD( "sps_01.bin", 0x30000, 0x08000, CRC(6425e6d7) SHA1(b6c81155c22072d1de88ca23d58bd9621139dc6c) ) ROM_LOAD16_WORD_SWAP( "sps_01.bin", 0x30000, 0x08000, CRC(6425e6d7) SHA1(b6c81155c22072d1de88ca23d58bd9621139dc6c) )
ROM_LOAD( "sps_10.bin", 0x40000, 0x08000, CRC(a12b1589) SHA1(ecaa941f29c028ca94fcd1d86edfd69884e61d2c) ) ROM_LOAD16_WORD_SWAP( "sps_10.bin", 0x40000, 0x08000, CRC(a12b1589) SHA1(ecaa941f29c028ca94fcd1d86edfd69884e61d2c) )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) ) ROM_LOAD16_WORD_SWAP( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) )
ROM_LOAD( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) ) ROM_LOAD16_WORD_SWAP( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) )
ROM_LOAD( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) ) ROM_LOAD16_WORD_SWAP( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) )
ROM_LOAD( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) ) ROM_LOAD16_WORD_SWAP( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) )
ROM_LOAD( "sps_09.bin", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) ) ROM_LOAD16_WORD_SWAP( "sps_09.bin", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) )
ROM_LOAD( "a09.bin", 0x50000, 0x08000, CRC(dd92dfe1) SHA1(08c956e11d567a215ec3cdaf6ef75fa9a886513a) ) // contains Korea, GB and Spain flags ROM_LOAD16_WORD_SWAP( "a09.bin", 0x50000, 0x08000, CRC(dd92dfe1) SHA1(08c956e11d567a215ec3cdaf6ef75fa9a886513a) ) // contains Korea, GB and Spain flags
ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "sps_20.bin", 0x00000, 0x10000, CRC(c9e7206d) SHA1(af5b2f49387a3b46c6693f4782aa0e587f17ab25) ) ROM_LOAD16_BYTE( "sps_20.bin", 0x00000, 0x10000, CRC(c9e7206d) SHA1(af5b2f49387a3b46c6693f4782aa0e587f17ab25) )
@ -714,9 +705,9 @@ ROM_START( svolleyk )
ROM_LOAD16_BYTE( "sps_21.bin", 0x30001, 0x08000, CRC(9dd28b42) SHA1(5f49456ee49ed7df59629d02a9da57eac370c388) ) ROM_LOAD16_BYTE( "sps_21.bin", 0x30001, 0x08000, CRC(9dd28b42) SHA1(5f49456ee49ed7df59629d02a9da57eac370c388) )
ROM_RELOAD(0x60001, 0x8000) ROM_RELOAD(0x60001, 0x8000)
ROM_REGION( 0x60000, "upd", 0 ) ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "sps_16.bin", 0x20000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) ) ROM_LOAD( "sps_16.bin", 0x00000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) )
ROM_LOAD( "sps_15.bin", 0x40000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) ) ROM_LOAD( "sps_15.bin", 0x20000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) )
ROM_END ROM_END
ROM_START( svolleyu ) ROM_START( svolleyu )
@ -730,19 +721,19 @@ ROM_START( svolleyu )
ROM_LOAD( "sps_17.bin", 0x00000, 0x10000, CRC(48b89688) SHA1(1f39d979a852f5237a7d95231e86a28cdc1f4d65) ) ROM_LOAD( "sps_17.bin", 0x00000, 0x10000, CRC(48b89688) SHA1(1f39d979a852f5237a7d95231e86a28cdc1f4d65) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "sps_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) ) ROM_LOAD16_WORD_SWAP( "sps_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) )
ROM_LOAD( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) ) ROM_LOAD16_WORD_SWAP( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) )
ROM_LOAD( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) ) ROM_LOAD16_WORD_SWAP( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) )
ROM_LOAD( "sps_01.bin", 0x30000, 0x08000, CRC(6425e6d7) SHA1(b6c81155c22072d1de88ca23d58bd9621139dc6c) ) ROM_LOAD16_WORD_SWAP( "sps_01.bin", 0x30000, 0x08000, CRC(6425e6d7) SHA1(b6c81155c22072d1de88ca23d58bd9621139dc6c) )
ROM_LOAD( "sps_10.bin", 0x40000, 0x08000, CRC(a12b1589) SHA1(ecaa941f29c028ca94fcd1d86edfd69884e61d2c) ) ROM_LOAD16_WORD_SWAP( "sps_10.bin", 0x40000, 0x08000, CRC(a12b1589) SHA1(ecaa941f29c028ca94fcd1d86edfd69884e61d2c) )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) ) ROM_LOAD16_WORD_SWAP( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) )
ROM_LOAD( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) ) ROM_LOAD16_WORD_SWAP( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) )
ROM_LOAD( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) ) ROM_LOAD16_WORD_SWAP( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) )
ROM_LOAD( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) ) ROM_LOAD16_WORD_SWAP( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) )
ROM_LOAD( "sps_09.bin", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) ) ROM_LOAD16_WORD_SWAP( "sps_09.bin", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) )
// ROM_LOAD( "a09.bin", 0x50000, 0x08000, CRC(dd92dfe1) SHA1(08c956e11d567a215ec3cdaf6ef75fa9a886513a) ) // not on this set? // ROM_LOAD16_WORD_SWAP( "a09.bin", 0x50000, 0x08000, CRC(dd92dfe1) SHA1(08c956e11d567a215ec3cdaf6ef75fa9a886513a) ) // not on this set?
ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF ) ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "sps_20.bin", 0x00000, 0x10000, CRC(c9e7206d) SHA1(af5b2f49387a3b46c6693f4782aa0e587f17ab25) ) ROM_LOAD16_BYTE( "sps_20.bin", 0x00000, 0x10000, CRC(c9e7206d) SHA1(af5b2f49387a3b46c6693f4782aa0e587f17ab25) )
@ -754,9 +745,9 @@ ROM_START( svolleyu )
ROM_LOAD16_BYTE( "sps_21.bin", 0x30001, 0x08000, CRC(9dd28b42) SHA1(5f49456ee49ed7df59629d02a9da57eac370c388) ) ROM_LOAD16_BYTE( "sps_21.bin", 0x30001, 0x08000, CRC(9dd28b42) SHA1(5f49456ee49ed7df59629d02a9da57eac370c388) )
ROM_RELOAD(0x60001, 0x8000) ROM_RELOAD(0x60001, 0x8000)
ROM_REGION( 0x60000, "upd", 0 ) ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "sps_16.bin", 0x20000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) ) ROM_LOAD( "sps_16.bin", 0x00000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) )
ROM_LOAD( "sps_15.bin", 0x40000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) ) ROM_LOAD( "sps_15.bin", 0x20000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) )
ROM_END ROM_END
@ -789,7 +780,6 @@ ROM_START( svolleybl )
ROM_LOAD32_BYTE( "21.bin", 0x000002, 0x010000, CRC(51cbe0d6) SHA1(d60b2a297d7e994c60db28e8ba60b0664e01f61d) ) ROM_LOAD32_BYTE( "21.bin", 0x000002, 0x010000, CRC(51cbe0d6) SHA1(d60b2a297d7e994c60db28e8ba60b0664e01f61d) )
ROM_LOAD32_BYTE( "22.bin", 0x000003, 0x010000, CRC(c289bfc0) SHA1(4a8929c5f304a1d203cad04c72fc6e96764dc858) ) ROM_LOAD32_BYTE( "22.bin", 0x000003, 0x010000, CRC(c289bfc0) SHA1(4a8929c5f304a1d203cad04c72fc6e96764dc858) )
ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 Sound CPU */ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 Sound CPU */
ROM_LOAD( "2-snd.bin", 0x00000, 0x10000, CRC(e3065b1d) SHA1(c4a3a95ba7f43cdf1b0c574f41de06d007ad2bd8) ) // matches 1.ic140 from spikes91 ROM_LOAD( "2-snd.bin", 0x00000, 0x10000, CRC(e3065b1d) SHA1(c4a3a95ba7f43cdf1b0c574f41de06d007ad2bd8) ) // matches 1.ic140 from spikes91
ROM_LOAD( "1-snd.bin", 0x10000, 0x08000, CRC(009d7157) SHA1(2cdda7094c7476289d75a78ee25b34fa3b3225c0) ) // matches 2.ic141 from spikes91, when halved ROM_LOAD( "1-snd.bin", 0x10000, 0x08000, CRC(009d7157) SHA1(2cdda7094c7476289d75a78ee25b34fa3b3225c0) ) // matches 2.ic141 from spikes91, when halved
@ -813,7 +803,6 @@ void rpunch_state::init_svolley()
/* the main differences between Super Volleyball and Rabbit Punch are */ /* the main differences between Super Volleyball and Rabbit Punch are */
/* the lack of direct-mapped bitmap and a different palette base for sprites */ /* the lack of direct-mapped bitmap and a different palette base for sprites */
m_sprite_palette = 0x080; m_sprite_palette = 0x080;
m_bitmapram.set_target(nullptr, 0);
} }
@ -831,5 +820,5 @@ GAME( 1989, svolleyk, svolley, svolley, svolley, rpunch_state, init_svolley
GAME( 1989, svolleyu, svolley, svolley, svolley, rpunch_state, init_svolley, ROT0, "V-System Co. (Data East license)", "Super Volleyball (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) GAME( 1989, svolleyu, svolley, svolley, svolley, rpunch_state, init_svolley, ROT0, "V-System Co. (Data East license)", "Super Volleyball (US)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
// video registers are changed, and there's some kind of RAM at 090xxx, possible a different sprite scheme for the bootleg (even if the original is intact) // video registers are changed, and there's some kind of RAM at 090xxx, possible a different sprite scheme for the bootleg (even if the original is intact)
// the sound system seems to be ripped from the later Power Spikes (see aerofgt.c) // the sound system seems to be ripped from the later Power Spikes (see aerofgt.cpp)
GAME( 1991, svolleybl, svolley, svolleybl, svolley, rpunch_state, init_svolley, ROT0, "bootleg", "Super Volleyball (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_NO_COCKTAIL ) // aka 1991 Spikes? GAME( 1991, svolleybl, svolley, svolleybl, svolley, rpunch_state, init_svolley, ROT0, "bootleg", "Super Volleyball (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_NO_COCKTAIL ) // aka 1991 Spikes?

View File

@ -26,7 +26,6 @@ public:
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_gga(*this, "gga"), m_gga(*this, "gga"),
m_videoram(*this, "videoram"), m_videoram(*this, "videoram"),
m_bitmapram(*this, "bitmapram"),
m_spriteram(*this, "spriteram") m_spriteram(*this, "spriteram")
{ } { }
@ -53,40 +52,43 @@ private:
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_device<vsystem_gga_device> m_gga; required_device<vsystem_gga_device> m_gga;
required_shared_ptr<uint16_t> m_videoram; required_shared_ptr<u16> m_videoram;
required_shared_ptr<uint16_t> m_bitmapram; required_shared_ptr<u16> m_spriteram;
required_shared_ptr<uint16_t> m_spriteram;
uint8_t m_upd_rom_bank; u8 m_upd_rom_bank;
int m_sprite_palette; int m_sprite_palette;
int m_sprite_xoffs; int m_sprite_xoffs;
uint16_t m_videoflags; u16 m_videoflags;
uint8_t m_bins; u8 m_sprite_pri;
uint8_t m_gins; u8 m_sprite_num;
tilemap_t *m_background[2]; tilemap_t *m_background[2];
std::unique_ptr<bitmap_ind16> m_pixmap;
emu_timer *m_crtc_timer; emu_timer *m_crtc_timer;
DECLARE_READ16_MEMBER(sound_busy_r); u16 sound_busy_r();
DECLARE_WRITE16_MEMBER(rpunch_videoram_w); u8 pixmap_r(offs_t offset);
DECLARE_WRITE16_MEMBER(rpunch_videoreg_w); void pixmap_w(offs_t offset, u8 data);
DECLARE_WRITE16_MEMBER(rpunch_scrollreg_w); void videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
DECLARE_WRITE8_MEMBER(rpunch_gga_w); void videoreg_w(offs_t offset, u16 data, u16 mem_mask = ~0);
DECLARE_WRITE8_MEMBER(rpunch_gga_data_w); void scrollreg_w(offs_t offset, u16 data, u16 mem_mask = ~0);
DECLARE_WRITE16_MEMBER(rpunch_ins_w); DECLARE_WRITE8_MEMBER(gga_w);
DECLARE_WRITE8_MEMBER(upd_control_w); DECLARE_WRITE8_MEMBER(gga_data_w);
DECLARE_WRITE8_MEMBER(upd_data_w); void sprite_ctrl_w(offs_t offset, u8 data);
void upd_control_w(u8 data);
void upd_data_w(u8 data);
TILE_GET_INFO_MEMBER(get_bg0_tile_info); TILE_GET_INFO_MEMBER(get_bg0_tile_info);
TILE_GET_INFO_MEMBER(get_bg1_tile_info); TILE_GET_INFO_MEMBER(get_bg1_tile_info);
DECLARE_VIDEO_START(rpunch); DECLARE_VIDEO_START(rpunch);
DECLARE_VIDEO_START(svolley); DECLARE_VIDEO_START(svolley);
uint32_t screen_update_rpunch(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(crtc_interrupt_gen); TIMER_CALLBACK_MEMBER(crtc_interrupt_gen);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int stop); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect);
void main_map(address_map &map);
void sound_map(address_map &map); void sound_map(address_map &map);
void rpunch_map(address_map &map);
void svolley_map(address_map &map);
void svolleybl_main_map(address_map &map); void svolleybl_main_map(address_map &map);
void svolleybl_sound_map(address_map &map); void svolleybl_sound_map(address_map &map);
}; };

View File

@ -2,7 +2,7 @@
// copyright-holders:Aaron Giles // copyright-holders:Aaron Giles
/*************************************************************************** /***************************************************************************
video/rpunch.c video/rpunch.cpp
Functions to emulate the video hardware of the machine. Functions to emulate the video hardware of the machine.
@ -12,11 +12,6 @@
#include "includes/rpunch.h" #include "includes/rpunch.h"
#define BITMAP_WIDTH 304
#define BITMAP_HEIGHT 224
#define BITMAP_XOFFSET 4
/************************************* /*************************************
* *
* Tilemap callbacks * Tilemap callbacks
@ -25,8 +20,7 @@
TILE_GET_INFO_MEMBER(rpunch_state::get_bg0_tile_info) TILE_GET_INFO_MEMBER(rpunch_state::get_bg0_tile_info)
{ {
uint16_t *videoram = m_videoram; const u16 data = m_videoram[tile_index];
int data = videoram[tile_index];
int code; int code;
if (m_videoflags & 0x0400) code = (data & 0x0fff) | 0x2000; if (m_videoflags & 0x0400) code = (data & 0x0fff) | 0x2000;
else code = (data & 0x1fff); else code = (data & 0x1fff);
@ -39,8 +33,7 @@ TILE_GET_INFO_MEMBER(rpunch_state::get_bg0_tile_info)
TILE_GET_INFO_MEMBER(rpunch_state::get_bg1_tile_info) TILE_GET_INFO_MEMBER(rpunch_state::get_bg1_tile_info)
{ {
uint16_t *videoram = m_videoram; const u16 data = m_videoram[0x1000 | tile_index];
int data = videoram[0x2000 / 2 + tile_index];
int code; int code;
if (m_videoflags & 0x0800) code = (data & 0x0fff) | 0x2000; if (m_videoflags & 0x0800) code = (data & 0x0fff) | 0x2000;
else code = (data & 0x1fff); else code = (data & 0x1fff);
@ -68,6 +61,7 @@ TIMER_CALLBACK_MEMBER(rpunch_state::crtc_interrupt_gen)
VIDEO_START_MEMBER(rpunch_state,rpunch) VIDEO_START_MEMBER(rpunch_state,rpunch)
{ {
m_videoflags = 0;
m_sprite_xoffs = 0; m_sprite_xoffs = 0;
/* allocate tilemaps for the backgrounds */ /* allocate tilemaps for the backgrounds */
@ -77,11 +71,15 @@ VIDEO_START_MEMBER(rpunch_state,rpunch)
/* configure the tilemaps */ /* configure the tilemaps */
m_background[1]->set_transparent_pen(15); m_background[1]->set_transparent_pen(15);
if (m_bitmapram) m_pixmap = std::make_unique<bitmap_ind16>(512, 256);
memset(m_bitmapram, 0xff, m_bitmapram.bytes());
const rectangle pixmap_rect(0,511,0,255);
m_pixmap->fill(0xf, pixmap_rect);
/* reset the timer */ /* reset the timer */
m_crtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rpunch_state::crtc_interrupt_gen),this)); m_crtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rpunch_state::crtc_interrupt_gen),this));
save_item(NAME(*m_pixmap));
} }
@ -93,28 +91,41 @@ VIDEO_START_MEMBER(rpunch_state,svolley)
} }
/************************************* /*************************************
* *
* Write handlers * Write handlers
* *
*************************************/ *************************************/
WRITE16_MEMBER(rpunch_state::rpunch_videoram_w) u8 rpunch_state::pixmap_r(offs_t offset)
{ {
uint16_t *videoram = m_videoram; const int sy = offset >> 8;
int tmap = offset >> 12; const int sx = (offset & 0xff) << 1;
int tile_index = offset & 0xfff;
COMBINE_DATA(&videoram[offset]); return ((m_pixmap->pix16(sy & 0xff, sx & ~1) & 0xf) << 4) | (m_pixmap->pix16(sy & 0xff, sx | 1) & 0xf);
}
void rpunch_state::pixmap_w(offs_t offset, u8 data)
{
const int sy = offset >> 8;
const int sx = (offset & 0xff) << 1;
m_pixmap->pix16(sy & 0xff, sx & ~1) = ((data & 0xf0) >> 4);
m_pixmap->pix16(sy & 0xff, sx | 1) = (data & 0x0f);
}
void rpunch_state::videoram_w(offs_t offset, u16 data, u16 mem_mask)
{
const int tmap = offset >> 12;
const int tile_index = offset & 0xfff;
COMBINE_DATA(&m_videoram[offset]);
m_background[tmap]->mark_tile_dirty(tile_index); m_background[tmap]->mark_tile_dirty(tile_index);
} }
WRITE16_MEMBER(rpunch_state::rpunch_videoreg_w) void rpunch_state::videoreg_w(offs_t offset, u16 data, u16 mem_mask)
{ {
int oldword = m_videoflags; const int oldword = m_videoflags;
COMBINE_DATA(&m_videoflags); COMBINE_DATA(&m_videoflags);
if (m_videoflags != oldword) if (m_videoflags != oldword)
@ -128,7 +139,7 @@ WRITE16_MEMBER(rpunch_state::rpunch_videoreg_w)
} }
WRITE16_MEMBER(rpunch_state::rpunch_scrollreg_w) void rpunch_state::scrollreg_w(offs_t offset, u16 data, u16 mem_mask)
{ {
if (ACCESSING_BITS_0_7 && ACCESSING_BITS_8_15) if (ACCESSING_BITS_0_7 && ACCESSING_BITS_8_15)
switch (offset) switch (offset)
@ -152,13 +163,13 @@ WRITE16_MEMBER(rpunch_state::rpunch_scrollreg_w)
} }
WRITE8_MEMBER(rpunch_state::rpunch_gga_w) WRITE8_MEMBER(rpunch_state::gga_w)
{ {
m_gga->write(space, offset >> 5, data & 0xff); m_gga->write(space, offset >> 5, data & 0xff);
} }
WRITE8_MEMBER(rpunch_state::rpunch_gga_data_w) WRITE8_MEMBER(rpunch_state::gga_data_w)
{ {
switch (offset) switch (offset)
{ {
@ -174,20 +185,17 @@ WRITE8_MEMBER(rpunch_state::rpunch_gga_data_w)
} }
WRITE16_MEMBER(rpunch_state::rpunch_ins_w) void rpunch_state::sprite_ctrl_w(offs_t offset, u8 data)
{ {
if (ACCESSING_BITS_0_7) if (offset == 0)
{ {
if (offset == 0) m_sprite_num = data & 0x3f;
{ logerror("Number of sprites = %02X\n", data & 0x3f);
m_gins = data & 0x3f; }
logerror("GINS = %02X\n", data & 0x3f); else
} {
else m_sprite_pri = data & 0x3f;
{ logerror("Sprite priority point = %02X\n", data & 0x3f);
m_bins = data & 0x3f;
logerror("BINS = %02X\n", data & 0x3f);
}
} }
} }
@ -198,33 +206,36 @@ WRITE16_MEMBER(rpunch_state::rpunch_ins_w)
* *
*************************************/ *************************************/
void rpunch_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int stop) void rpunch_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
uint16_t *spriteram16 = m_spriteram;
int offs;
start *= 4;
stop *= 4;
/* draw the sprites */ /* draw the sprites */
for (offs = start; offs < stop; offs += 4) int offs = m_sprite_num;
while (offs > 0)
{ {
int data1 = spriteram16[offs + 1]; offs--;
int code = data1 & 0x7ff; const u32 ram = offs << 2;
u32 pri = 0; // above everything except direct mapped bitmap
/* this seems like the most plausible explanation */
if (offs < m_sprite_pri)
pri |= GFX_PMASK_2; // behind foreground
int data0 = spriteram16[offs + 0]; const u16 data1 = m_spriteram[ram + 1];
int data2 = spriteram16[offs + 2]; const u32 code = data1 & 0x7ff;
const u16 data0 = m_spriteram[ram + 0];
const u16 data2 = m_spriteram[ram + 2];
int x = (data2 & 0x1ff) + 8; int x = (data2 & 0x1ff) + 8;
int y = 513 - (data0 & 0x1ff); int y = 513 - (data0 & 0x1ff);
int xflip = data1 & 0x1000; const bool xflip = data1 & 0x1000;
int yflip = data1 & 0x0800; const bool yflip = data1 & 0x0800;
int color = ((data1 >> 13) & 7) | ((m_videoflags & 0x0040) >> 3); const u32 color = ((data1 >> 13) & 7) | ((m_videoflags & 0x0040) >> 3);
if (x >= BITMAP_WIDTH) x -= 512; if (x > cliprect.max_x) x -= 512;
if (y >= BITMAP_HEIGHT) y -= 512; if (y > cliprect.max_y) y -= 512;
m_gfxdecode->gfx(2)->transpen(bitmap,cliprect, m_gfxdecode->gfx(2)->prio_transpen(bitmap,cliprect,
code, color + (m_sprite_palette / 16), xflip, yflip, x+m_sprite_xoffs, y, 15); code, color + (m_sprite_palette / 16), xflip, yflip, x + m_sprite_xoffs, y,
m_screen->priority(), pri, 15);
} }
} }
@ -237,25 +248,17 @@ void rpunch_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect,
void rpunch_state::draw_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect) void rpunch_state::draw_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int colourbase; const u32 colourbase = 512 + ((m_videoflags & 0x000f) << 4);
int xxx=512/4;
int yyy=256;
int x,y,count;
colourbase = 512 + ((m_videoflags & 15) * 16); for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
count = 0;
for (y=0;y<yyy;y++)
{ {
for(x=0;x<xxx;x++) const u16 *src = &m_pixmap->pix16(y & 0xff);
u16 *dst = &bitmap.pix16(y);
for(int x = cliprect.min_x / 4; x <= cliprect.max_x; x++)
{ {
int coldat; const u16 pix = src[(x + 4) & 0x1ff];
coldat = (m_bitmapram[count]>>12)&0xf; if (coldat!=15) bitmap.pix16(y, ((x*4+0)-4)&0x1ff) = coldat+colourbase; if ((pix & 0xf) != 0xf)
coldat = (m_bitmapram[count]>>8 )&0xf; if (coldat!=15) bitmap.pix16(y, ((x*4+1)-4)&0x1ff) = coldat+colourbase; dst[x] = colourbase + pix;
coldat = (m_bitmapram[count]>>4 )&0xf; if (coldat!=15) bitmap.pix16(y, ((x*4+2)-4)&0x1ff) = coldat+colourbase;
coldat = (m_bitmapram[count]>>0 )&0xf; if (coldat!=15) bitmap.pix16(y, ((x*4+3)-4)&0x1ff) = coldat+colourbase;
count++;
} }
} }
} }
@ -267,18 +270,12 @@ void rpunch_state::draw_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect)
* *
*************************************/ *************************************/
uint32_t rpunch_state::screen_update_rpunch(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) u32 rpunch_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int effbins; screen.priority().fill(0, cliprect);
m_background[0]->draw(screen, bitmap, cliprect, 0,1);
/* this seems like the most plausible explanation */ m_background[1]->draw(screen, bitmap, cliprect, 0,2);
effbins = (m_bins > m_gins) ? m_gins : m_bins; draw_sprites(bitmap, cliprect);
draw_bitmap(bitmap, cliprect);
m_background[0]->draw(screen, bitmap, cliprect, 0,0);
draw_sprites(bitmap, cliprect, 0, effbins);
m_background[1]->draw(screen, bitmap, cliprect, 0,0);
draw_sprites(bitmap, cliprect, effbins, m_gins);
if (m_bitmapram)
draw_bitmap(bitmap, cliprect);
return 0; return 0;
} }