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 -------- ----xxxx (bitmap palette bank)
0C000E W -------- xxxxxxxx Sound communications
0C0010 W -------- --xxxxxx Sprite bias (???)
0C0012 W -------- --xxxxxx Bitmap bias (???)
0C0010 W -------- --xxxxxx Number of active sprite entries
0C0012 W -------- --xxxxxx Split point of sprite priority
0C0018 R -xxxx-xx --xxxxxx Player 1 input port
R -x------ -------- (2 player start)
R --x----- -------- (1 player start)
@ -110,7 +110,6 @@
#include "includes/rpunch.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m6809/m6809.h"
#include "cpu/z80/z80.h"
#include "machine/input_merger.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_sprite_xoffs));
save_item(NAME(m_videoflags));
save_item(NAME(m_bins));
save_item(NAME(m_gins));
save_item(NAME(m_sprite_pri));
save_item(NAME(m_sprite_num));
}
void rpunch_state::machine_reset()
{
if (memregion("upd"))
{
uint8_t *snd = memregion("upd")->base();
memcpy(snd, snd + 0x20000, 0x20000);
}
}
/*************************************
*
* 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();
}
/*************************************
*
* UPD7759 controller
*
*************************************/
WRITE8_MEMBER(rpunch_state::upd_control_w)
void rpunch_state::upd_control_w(u8 data)
{
if ((data & 1) != m_upd_rom_bank)
{
uint8_t *snd = memregion("upd")->base();
m_upd_rom_bank = data & 1;
memcpy(snd, snd + 0x20000 * (m_upd_rom_bank + 1), 0x20000);
}
m_upd7759->set_rom_bank(BIT(data, 0));
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->start_w(0);
@ -198,26 +185,24 @@ WRITE8_MEMBER(rpunch_state::upd_data_w)
}
/*************************************
*
* 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(0x000000, 0x03ffff).rom();
map(0x040000, 0x04ffff).ram().share("bitmapram");
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(0x0c0000, 0x0c0007).w(FUNC(rpunch_state::rpunch_scrollreg_w));
map(0x0c0009, 0x0c0009).select(0x20).w(FUNC(rpunch_state::rpunch_gga_w));
map(0x0c000c, 0x0c000d).w(FUNC(rpunch_state::rpunch_videoreg_w));
map(0x0c0000, 0x0c0007).w(FUNC(rpunch_state::scrollreg_w));
map(0x0c0009, 0x0c0009).select(0x20).w(FUNC(rpunch_state::gga_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(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(0x0c001a, 0x0c001b).portr("P2");
map(0x0c001c, 0x0c001d).portr("DSW");
@ -225,9 +210,16 @@ void rpunch_state::main_map(address_map &map)
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)
{
main_map(map);
svolley_map(map);
// TODO: sound latch hook up is incomplete
map(0x090000, 0x090fff).ram(); // ?
@ -413,10 +405,10 @@ static const gfx_layout bglayout =
8,8,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 4, 0, 12, 8, 20, 16, 28, 24 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
8*32
{ STEP4(0,1) },
{ STEP4(3*4,-4), STEP4(7*4,-4) },
{ STEP8(0,8*4) },
8*8*4
};
@ -425,20 +417,17 @@ static const gfx_layout splayout =
16,32,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 12, 8, 4, 0, 28, 24, 20, 16, 44, 40, 36, 32, 60, 56, 52, 48 },
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64,
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
{ STEP4(0,1) },
{ STEP4(3*4,-4), STEP4(7*4,-4), STEP4(11*4,-4), STEP4(15*4,-4) },
{ STEP32(0,16*4) },
16*32*4
};
static GFXDECODE_START( gfx_rpunch )
GFXDECODE_ENTRY( "gfx1", 0, bglayout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, bglayout, 256, 16 )
GFXDECODE_ENTRY( "sprites", 0, splayout, 0, 16*4 )
GFXDECODE_ENTRY( "gfx1", 0, bglayout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, bglayout, 256, 16 )
GFXDECODE_ENTRY( "sprites", 0, splayout, 0, 64 )
GFXDECODE_END
@ -449,8 +438,8 @@ static const gfx_layout bootleg_tile_layout =
4,
{ STEP4(0,8) },
{ STEP8(0,1) },
{ STEP8(0,32) },
8*32,
{ STEP8(0,8*4) },
8*8*4
};
static const gfx_layout bootleg_sprite_layout =
@ -459,15 +448,15 @@ static const gfx_layout bootleg_sprite_layout =
RGN_FRAC(1,1),
4,
{ STEP4(0,8) },
{ STEP8(0,1), STEP8(1024,1) },
{ STEP32(0,32) },
32*32*2,
{ STEP8(0,1), STEP8(32*8*4,1) },
{ STEP32(0,8*4) },
16*32*4
};
static GFXDECODE_START( gfx_svolleybl )
GFXDECODE_ENTRY( "gfx1", 0, bootleg_tile_layout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, bootleg_tile_layout, 256, 16 )
GFXDECODE_ENTRY( "sprites", 0, bootleg_sprite_layout, 0, 16*4 )
GFXDECODE_ENTRY( "gfx1", 0, bootleg_tile_layout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, bootleg_tile_layout, 256, 16 )
GFXDECODE_ENTRY( "sprites", 0, bootleg_sprite_layout, 0, 64 )
GFXDECODE_END
@ -481,7 +470,7 @@ void rpunch_state::rpunch(machine_config &config)
{
/* basic machine hardware */
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);
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_size(304, 224);
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);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_rpunch);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
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)
@ -521,6 +510,7 @@ void rpunch_state::rpunch(machine_config &config)
void rpunch_state::svolley(machine_config &config)
{
rpunch(config);
m_maincpu->set_addrmap(AS_PROGRAM, &rpunch_state::svolley_map);
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_size(304, 224);
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);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_svolleybl);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
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)
@ -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_REGION( 0x40000, "maincpu", 0 )
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_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "rl_c13.bin", 0x00000, 0x40000, CRC(7c8403b0) SHA1(2fb92860a41f3331076c73b2b010e175cb4929ca) )
ROM_LOAD( "rl_c10.bin", 0x40000, 0x08000, CRC(312eb260) SHA1(31faa90fde54fbc6c110bee7b4690a30beaec469) )
ROM_LOAD( "rl_c12.bin", 0x48000, 0x08000, CRC(bea85219) SHA1(4036bdad921dd3555a2dc6bb12e9ffa615de70ca) )
ROM_FILL( 0x50000, 0x10000, 0xff )
ROM_LOAD16_WORD_SWAP( "rl_c13.bin", 0x00000, 0x40000, CRC(7c8403b0) SHA1(2fb92860a41f3331076c73b2b010e175cb4929ca) )
ROM_LOAD16_WORD_SWAP( "rl_c10.bin", 0x40000, 0x08000, CRC(312eb260) SHA1(31faa90fde54fbc6c110bee7b4690a30beaec469) )
ROM_LOAD16_WORD_SWAP( "rl_c12.bin", 0x48000, 0x08000, CRC(bea85219) SHA1(4036bdad921dd3555a2dc6bb12e9ffa615de70ca) )
ROM_FILL( 0x50000, 0x10000, 0xff )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "rl_a10.bin", 0x00000, 0x40000, CRC(c2a77619) SHA1(9b1e85fb18833c3b96a6c58b8714984f60a90afc) )
ROM_LOAD( "rl_a13.bin", 0x40000, 0x08000, CRC(a39c2c16) SHA1(d8d55eb58d3fc79f982f535ec85f69593fe9d883) )
ROM_LOAD( "rpunch.54", 0x48000, 0x08000, CRC(e2969747) SHA1(8da996fc2e2e3d281f293d0ccaf35ebdb9379d48) )
ROM_LOAD16_WORD_SWAP( "rl_a10.bin", 0x00000, 0x40000, CRC(c2a77619) SHA1(9b1e85fb18833c3b96a6c58b8714984f60a90afc) )
ROM_LOAD16_WORD_SWAP( "rl_a13.bin", 0x40000, 0x08000, CRC(a39c2c16) SHA1(d8d55eb58d3fc79f982f535ec85f69593fe9d883) )
ROM_LOAD16_WORD_SWAP( "rpunch.54", 0x48000, 0x08000, CRC(e2969747) SHA1(8da996fc2e2e3d281f293d0ccaf35ebdb9379d48) )
ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF )
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.86", 0x50001, 0x08000, CRC(91d204f6) SHA1(68b5fb29ea5404597adada1a197ad853e79ada1c) )
ROM_REGION( 0x60000, "upd", 0 )
ROM_LOAD( "rl_f18.bin", 0x20000, 0x20000, CRC(47840673) SHA1(ffe20f8772a987f5dd06a3f348a1e3cfed26e19e) )
ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "rl_f18.bin", 0x00000, 0x20000, CRC(47840673) SHA1(ffe20f8772a987f5dd06a3f348a1e3cfed26e19e) )
// ROM_LOAD( "rpunch.91", 0x00000, 0x0f000, CRC(7512cc59) )
ROM_END
@ -617,15 +608,15 @@ ROM_START( rabiolep )
ROM_LOAD( "rl_f20.bin", 0x00000, 0x10000, CRC(a6f50351) SHA1(3152d4ed100b0dfaf0da4ee79cd9e0f1692335e0) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "rl_c13.bin", 0x00000, 0x40000, CRC(7c8403b0) SHA1(2fb92860a41f3331076c73b2b010e175cb4929ca) )
ROM_LOAD( "rl_c10.bin", 0x40000, 0x08000, CRC(312eb260) SHA1(31faa90fde54fbc6c110bee7b4690a30beaec469) )
ROM_LOAD( "rl_c12.bin", 0x48000, 0x08000, CRC(bea85219) SHA1(4036bdad921dd3555a2dc6bb12e9ffa615de70ca) )
ROM_FILL( 0x50000, 0x10000, 0xff )
ROM_LOAD16_WORD_SWAP( "rl_c13.bin", 0x00000, 0x40000, CRC(7c8403b0) SHA1(2fb92860a41f3331076c73b2b010e175cb4929ca) )
ROM_LOAD16_WORD_SWAP( "rl_c10.bin", 0x40000, 0x08000, CRC(312eb260) SHA1(31faa90fde54fbc6c110bee7b4690a30beaec469) )
ROM_LOAD16_WORD_SWAP( "rl_c12.bin", 0x48000, 0x08000, CRC(bea85219) SHA1(4036bdad921dd3555a2dc6bb12e9ffa615de70ca) )
ROM_FILL( 0x50000, 0x10000, 0xff )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "rl_a10.bin", 0x00000, 0x40000, CRC(c2a77619) SHA1(9b1e85fb18833c3b96a6c58b8714984f60a90afc) )
ROM_LOAD( "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_a10.bin", 0x00000, 0x40000, CRC(c2a77619) SHA1(9b1e85fb18833c3b96a6c58b8714984f60a90afc) )
ROM_LOAD16_WORD_SWAP( "rl_a13.bin", 0x40000, 0x08000, CRC(a39c2c16) SHA1(d8d55eb58d3fc79f982f535ec85f69593fe9d883) )
ROM_LOAD16_WORD_SWAP( "rl_a12.bin", 0x48000, 0x08000, CRC(970b0e32) SHA1(a1d4025ee4470a41aa047c6f06ca7aa98a1f7ffd) )
ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF )
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_2h.bin", 0x50001, 0x08000, CRC(09649e75) SHA1(a650561a11970fbcbc4610fc67cb9f54fa3145a6) )
ROM_REGION( 0x60000, "upd", 0 )
ROM_LOAD( "rl_f18.bin", 0x20000, 0x20000, CRC(47840673) SHA1(ffe20f8772a987f5dd06a3f348a1e3cfed26e19e) )
ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "rl_f18.bin", 0x00000, 0x20000, CRC(47840673) SHA1(ffe20f8772a987f5dd06a3f348a1e3cfed26e19e) )
ROM_END
// VS-68K-2 (H2) PCB
ROM_START( svolley )
ROM_REGION( 0x40000, "maincpu", 0 )
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_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "sps_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) )
ROM_LOAD( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) )
ROM_LOAD( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) )
ROM_LOAD( "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_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) )
ROM_LOAD16_WORD_SWAP( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) )
ROM_LOAD16_WORD_SWAP( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) )
ROM_LOAD16_WORD_SWAP( "sps_01.bin", 0x30000, 0x08000, CRC(6425e6d7) SHA1(b6c81155c22072d1de88ca23d58bd9621139dc6c) )
ROM_LOAD16_WORD_SWAP( "sps_10.bin", 0x40000, 0x08000, CRC(a12b1589) SHA1(ecaa941f29c028ca94fcd1d86edfd69884e61d2c) )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) )
ROM_LOAD( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) )
ROM_LOAD( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) )
ROM_LOAD( "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_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) )
ROM_LOAD16_WORD_SWAP( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) )
ROM_LOAD16_WORD_SWAP( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) )
ROM_LOAD16_WORD_SWAP( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) )
ROM_LOAD16_WORD_SWAP( "sps_09.bin", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) )
ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF )
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_RELOAD(0x60001, 0x8000)
ROM_REGION( 0x60000, "upd", 0 )
ROM_LOAD( "sps_16.bin", 0x20000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) )
ROM_LOAD( "sps_15.bin", 0x40000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) )
ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "sps_16.bin", 0x00000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) )
ROM_LOAD( "sps_15.bin", 0x20000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) )
ROM_END
ROM_START( svolleyk )
@ -690,19 +681,19 @@ ROM_START( svolleyk )
ROM_LOAD( "sps_17.bin", 0x00000, 0x10000, CRC(48b89688) SHA1(1f39d979a852f5237a7d95231e86a28cdc1f4d65) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "sps_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) )
ROM_LOAD( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) )
ROM_LOAD( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) )
ROM_LOAD( "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_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) )
ROM_LOAD16_WORD_SWAP( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) )
ROM_LOAD16_WORD_SWAP( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) )
ROM_LOAD16_WORD_SWAP( "sps_01.bin", 0x30000, 0x08000, CRC(6425e6d7) SHA1(b6c81155c22072d1de88ca23d58bd9621139dc6c) )
ROM_LOAD16_WORD_SWAP( "sps_10.bin", 0x40000, 0x08000, CRC(a12b1589) SHA1(ecaa941f29c028ca94fcd1d86edfd69884e61d2c) )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) )
ROM_LOAD( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) )
ROM_LOAD( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) )
ROM_LOAD( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) )
ROM_LOAD( "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( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) )
ROM_LOAD16_WORD_SWAP( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) )
ROM_LOAD16_WORD_SWAP( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) )
ROM_LOAD16_WORD_SWAP( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) )
ROM_LOAD16_WORD_SWAP( "sps_09.bin", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) )
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_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_RELOAD(0x60001, 0x8000)
ROM_REGION( 0x60000, "upd", 0 )
ROM_LOAD( "sps_16.bin", 0x20000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) )
ROM_LOAD( "sps_15.bin", 0x40000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) )
ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "sps_16.bin", 0x00000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) )
ROM_LOAD( "sps_15.bin", 0x20000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) )
ROM_END
ROM_START( svolleyu )
@ -730,19 +721,19 @@ ROM_START( svolleyu )
ROM_LOAD( "sps_17.bin", 0x00000, 0x10000, CRC(48b89688) SHA1(1f39d979a852f5237a7d95231e86a28cdc1f4d65) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_ERASEFF )
ROM_LOAD( "sps_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) )
ROM_LOAD( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) )
ROM_LOAD( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) )
ROM_LOAD( "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_02.bin", 0x00000, 0x10000, CRC(1a0abe75) SHA1(49251c5e377f9317471f7df26ac2c6b8cfa51007) )
ROM_LOAD16_WORD_SWAP( "sps_03.bin", 0x10000, 0x10000, CRC(36279075) SHA1(6c4cf3fab9eb764cb8bc10ab4f8aa54d0afb65d9) )
ROM_LOAD16_WORD_SWAP( "sps_04.bin", 0x20000, 0x10000, CRC(7cede7d9) SHA1(9c7e3a9b7dd8d390b327d52ced35b03b8c1fd5ee) )
ROM_LOAD16_WORD_SWAP( "sps_01.bin", 0x30000, 0x08000, CRC(6425e6d7) SHA1(b6c81155c22072d1de88ca23d58bd9621139dc6c) )
ROM_LOAD16_WORD_SWAP( "sps_10.bin", 0x40000, 0x08000, CRC(a12b1589) SHA1(ecaa941f29c028ca94fcd1d86edfd69884e61d2c) )
ROM_REGION( 0x80000, "gfx2", ROMREGION_ERASEFF )
ROM_LOAD( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) )
ROM_LOAD( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) )
ROM_LOAD( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) )
ROM_LOAD( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) )
ROM_LOAD( "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( "sps_05.bin", 0x00000, 0x10000, CRC(b0671d12) SHA1(defc71b6d7c31c74a58789a1620a506f36b85837) )
ROM_LOAD16_WORD_SWAP( "sps_06.bin", 0x10000, 0x10000, CRC(c231957e) SHA1(b56afd41969bd865ad3ca16fb51e39030aeb1943) )
ROM_LOAD16_WORD_SWAP( "sps_07.bin", 0x20000, 0x10000, CRC(904b7709) SHA1(9b66a565cd599928b666baad9f97c50f35ffcc37) )
ROM_LOAD16_WORD_SWAP( "sps_08.bin", 0x30000, 0x10000, CRC(5430ffac) SHA1(163311d96f2f7e1ecb0901d0be73ac357b01bf6a) )
ROM_LOAD16_WORD_SWAP( "sps_09.bin", 0x40000, 0x10000, CRC(414a6278) SHA1(baa9dc9ab0dd3c5f27c128de23053edcddf45ad0) )
// ROM_LOAD16_WORD_SWAP( "a09.bin", 0x50000, 0x08000, CRC(dd92dfe1) SHA1(08c956e11d567a215ec3cdaf6ef75fa9a886513a) ) // not on this set?
ROM_REGION( 0x80000, "sprites", ROMREGION_ERASEFF )
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_RELOAD(0x60001, 0x8000)
ROM_REGION( 0x60000, "upd", 0 )
ROM_LOAD( "sps_16.bin", 0x20000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) )
ROM_LOAD( "sps_15.bin", 0x40000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) )
ROM_REGION( 0x40000, "upd", 0 )
ROM_LOAD( "sps_16.bin", 0x00000, 0x20000, CRC(456d0f36) SHA1(3d1bdc5c79b41a7b33932d6a8b838f01cea9d4ed) )
ROM_LOAD( "sps_15.bin", 0x20000, 0x10000, CRC(f33f415f) SHA1(1dd465d9b3009754a7d53400562a53dacff364fc) )
ROM_END
@ -789,7 +780,6 @@ ROM_START( svolleybl )
ROM_LOAD32_BYTE( "21.bin", 0x000002, 0x010000, CRC(51cbe0d6) SHA1(d60b2a297d7e994c60db28e8ba60b0664e01f61d) )
ROM_LOAD32_BYTE( "22.bin", 0x000003, 0x010000, CRC(c289bfc0) SHA1(4a8929c5f304a1d203cad04c72fc6e96764dc858) )
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( "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 lack of direct-mapped bitmap and a different palette base for sprites */
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 )
// 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?

View File

@ -26,7 +26,6 @@ public:
m_palette(*this, "palette"),
m_gga(*this, "gga"),
m_videoram(*this, "videoram"),
m_bitmapram(*this, "bitmapram"),
m_spriteram(*this, "spriteram")
{ }
@ -53,40 +52,43 @@ private:
required_device<palette_device> m_palette;
required_device<vsystem_gga_device> m_gga;
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_bitmapram;
required_shared_ptr<uint16_t> m_spriteram;
required_shared_ptr<u16> m_videoram;
required_shared_ptr<u16> m_spriteram;
uint8_t m_upd_rom_bank;
u8 m_upd_rom_bank;
int m_sprite_palette;
int m_sprite_xoffs;
uint16_t m_videoflags;
uint8_t m_bins;
uint8_t m_gins;
u16 m_videoflags;
u8 m_sprite_pri;
u8 m_sprite_num;
tilemap_t *m_background[2];
std::unique_ptr<bitmap_ind16> m_pixmap;
emu_timer *m_crtc_timer;
DECLARE_READ16_MEMBER(sound_busy_r);
DECLARE_WRITE16_MEMBER(rpunch_videoram_w);
DECLARE_WRITE16_MEMBER(rpunch_videoreg_w);
DECLARE_WRITE16_MEMBER(rpunch_scrollreg_w);
DECLARE_WRITE8_MEMBER(rpunch_gga_w);
DECLARE_WRITE8_MEMBER(rpunch_gga_data_w);
DECLARE_WRITE16_MEMBER(rpunch_ins_w);
DECLARE_WRITE8_MEMBER(upd_control_w);
DECLARE_WRITE8_MEMBER(upd_data_w);
u16 sound_busy_r();
u8 pixmap_r(offs_t offset);
void pixmap_w(offs_t offset, u8 data);
void videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
void videoreg_w(offs_t offset, u16 data, u16 mem_mask = ~0);
void scrollreg_w(offs_t offset, u16 data, u16 mem_mask = ~0);
DECLARE_WRITE8_MEMBER(gga_w);
DECLARE_WRITE8_MEMBER(gga_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_bg1_tile_info);
DECLARE_VIDEO_START(rpunch);
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);
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 main_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_sound_map(address_map &map);
};

View File

@ -2,7 +2,7 @@
// copyright-holders:Aaron Giles
/***************************************************************************
video/rpunch.c
video/rpunch.cpp
Functions to emulate the video hardware of the machine.
@ -12,11 +12,6 @@
#include "includes/rpunch.h"
#define BITMAP_WIDTH 304
#define BITMAP_HEIGHT 224
#define BITMAP_XOFFSET 4
/*************************************
*
* Tilemap callbacks
@ -25,8 +20,7 @@
TILE_GET_INFO_MEMBER(rpunch_state::get_bg0_tile_info)
{
uint16_t *videoram = m_videoram;
int data = videoram[tile_index];
const u16 data = m_videoram[tile_index];
int code;
if (m_videoflags & 0x0400) code = (data & 0x0fff) | 0x2000;
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)
{
uint16_t *videoram = m_videoram;
int data = videoram[0x2000 / 2 + tile_index];
const u16 data = m_videoram[0x1000 | tile_index];
int code;
if (m_videoflags & 0x0800) code = (data & 0x0fff) | 0x2000;
else code = (data & 0x1fff);
@ -68,6 +61,7 @@ TIMER_CALLBACK_MEMBER(rpunch_state::crtc_interrupt_gen)
VIDEO_START_MEMBER(rpunch_state,rpunch)
{
m_videoflags = 0;
m_sprite_xoffs = 0;
/* allocate tilemaps for the backgrounds */
@ -77,11 +71,15 @@ VIDEO_START_MEMBER(rpunch_state,rpunch)
/* configure the tilemaps */
m_background[1]->set_transparent_pen(15);
if (m_bitmapram)
memset(m_bitmapram, 0xff, m_bitmapram.bytes());
m_pixmap = std::make_unique<bitmap_ind16>(512, 256);
const rectangle pixmap_rect(0,511,0,255);
m_pixmap->fill(0xf, pixmap_rect);
/* reset the timer */
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
*
*************************************/
WRITE16_MEMBER(rpunch_state::rpunch_videoram_w)
u8 rpunch_state::pixmap_r(offs_t offset)
{
uint16_t *videoram = m_videoram;
int tmap = offset >> 12;
int tile_index = offset & 0xfff;
COMBINE_DATA(&videoram[offset]);
const int sy = offset >> 8;
const int sx = (offset & 0xff) << 1;
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);
}
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);
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)
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);
}
WRITE8_MEMBER(rpunch_state::rpunch_gga_data_w)
WRITE8_MEMBER(rpunch_state::gga_data_w)
{
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_gins = data & 0x3f;
logerror("GINS = %02X\n", data & 0x3f);
}
else
{
m_bins = data & 0x3f;
logerror("BINS = %02X\n", data & 0x3f);
}
m_sprite_num = data & 0x3f;
logerror("Number of sprites = %02X\n", data & 0x3f);
}
else
{
m_sprite_pri = data & 0x3f;
logerror("Sprite priority point = %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 */
for (offs = start; offs < stop; offs += 4)
int offs = m_sprite_num;
while (offs > 0)
{
int data1 = spriteram16[offs + 1];
int code = data1 & 0x7ff;
offs--;
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];
int data2 = spriteram16[offs + 2];
const u16 data1 = m_spriteram[ram + 1];
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 y = 513 - (data0 & 0x1ff);
int xflip = data1 & 0x1000;
int yflip = data1 & 0x0800;
int color = ((data1 >> 13) & 7) | ((m_videoflags & 0x0040) >> 3);
const bool xflip = data1 & 0x1000;
const bool yflip = data1 & 0x0800;
const u32 color = ((data1 >> 13) & 7) | ((m_videoflags & 0x0040) >> 3);
if (x >= BITMAP_WIDTH) x -= 512;
if (y >= BITMAP_HEIGHT) y -= 512;
if (x > cliprect.max_x) x -= 512;
if (y > cliprect.max_y) y -= 512;
m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
code, color + (m_sprite_palette / 16), xflip, yflip, x+m_sprite_xoffs, y, 15);
m_gfxdecode->gfx(2)->prio_transpen(bitmap,cliprect,
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)
{
int colourbase;
int xxx=512/4;
int yyy=256;
int x,y,count;
const u32 colourbase = 512 + ((m_videoflags & 0x000f) << 4);
colourbase = 512 + ((m_videoflags & 15) * 16);
count = 0;
for (y=0;y<yyy;y++)
for (int y = cliprect.min_y; y <= cliprect.max_y; 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;
coldat = (m_bitmapram[count]>>12)&0xf; if (coldat!=15) bitmap.pix16(y, ((x*4+0)-4)&0x1ff) = coldat+colourbase;
coldat = (m_bitmapram[count]>>8 )&0xf; if (coldat!=15) bitmap.pix16(y, ((x*4+1)-4)&0x1ff) = coldat+colourbase;
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++;
const u16 pix = src[(x + 4) & 0x1ff];
if ((pix & 0xf) != 0xf)
dst[x] = colourbase + pix;
}
}
}
@ -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;
/* this seems like the most plausible explanation */
effbins = (m_bins > m_gins) ? m_gins : m_bins;
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);
screen.priority().fill(0, cliprect);
m_background[0]->draw(screen, bitmap, cliprect, 0,1);
m_background[1]->draw(screen, bitmap, cliprect, 0,2);
draw_sprites(bitmap, cliprect);
draw_bitmap(bitmap, cliprect);
return 0;
}