summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/konami/labyrunr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/konami/labyrunr.cpp')
-rw-r--r--src/mame/konami/labyrunr.cpp123
1 files changed, 52 insertions, 71 deletions
diff --git a/src/mame/konami/labyrunr.cpp b/src/mame/konami/labyrunr.cpp
index f64243f7dd4..59c99313a6d 100644
--- a/src/mame/konami/labyrunr.cpp
+++ b/src/mame/konami/labyrunr.cpp
@@ -95,7 +95,6 @@ void labyrunr_state::palette(palette_device &palette) const
for (int i = 0; i < 0x100; i++)
{
uint8_t const ctabentry = !color_prom[i] ? 0 : ((pal << 4) | (color_prom[i] & 0x0f));
-
palette.set_pen_indirect((pal << 8) | i, ctabentry);
}
}
@@ -188,13 +187,12 @@ uint32_t labyrunr_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
screen.priority().fill(0, cliprect);
const rectangle &visarea = screen.visible_area();
+ rectangle clip[3];
+ clip[0] = clip[1] = clip[2] = visarea;
- if (~m_k007121->ctrl_r(3) & 0x20)
+ if (m_k007121->ctrl_r(3) & 0x10)
{
// compute clipping
- rectangle clip[2];
- clip[0] = clip[1] = visarea;
-
if (m_k007121->flipscreen())
{
clip[0].max_x -= 40;
@@ -212,6 +210,7 @@ uint32_t labyrunr_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
// set scroll registers
m_tilemap[0]->set_scrollx(0, ctrl_0 - 40);
m_tilemap[1]->set_scrollx(0, 0);
+ m_k007121->set_sprite_offsets(40, 16);
for (int i = 0; i < 32; i++)
{
@@ -230,39 +229,31 @@ uint32_t labyrunr_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
}
else
{
- rectangle clip[3];
- int use_clip2[2] = { 0, 0 };
-
- // custom cliprects needed for the weird effect used in the ending sequence to hide and show the needed part of text
- clip[0] = clip[1] = clip[2] = visarea;
-
+ // custom clipping needed for the weird effect used in the ending sequence to hide and show the needed part of text
if (m_k007121->ctrl_r(1) & 1)
{
- if (ctrl_0 < 40)
- {
- use_clip2[0] = 1;
- clip[1].min_x = 40 - ctrl_0;
- }
-
- clip[0].min_x = clip[0].max_x - ctrl_0 + 8;
- clip[1].max_x = clip[1].max_x - ctrl_0 + 8;
+ clip[0].min_x = clip[0].max_x - ctrl_0 - 8;
+ clip[1].max_x = clip[1].max_x - ctrl_0 - 8;
}
else
{
- if (ctrl_0 < 40)
- {
- use_clip2[1] = 1;
- clip[0].min_x = 40 - ctrl_0;
- }
-
- clip[0].max_x = clip[0].max_x - ctrl_0 + 8;
- clip[1].min_x = clip[1].max_x - ctrl_0 + 8;
+ clip[0].max_x = clip[0].max_x - ctrl_0 - 8;
+ clip[1].min_x = clip[1].max_x - ctrl_0 - 8;
}
- if (use_clip2[0] || use_clip2[1])
- clip[2].max_x = 40 - ctrl_0 - 8;
+ // width of 240 or 256
+ if (m_k007121->ctrl_r(3) & 0x40)
+ {
+ clip[2].min_x += 24;
+ clip[2].max_x -= 16;
+ }
+ else
+ {
+ clip[2].min_x += 16;
+ clip[2].max_x -= 8;
+ }
- for (int i = 0; i < 3; i++)
+ for (int i = 2; i >= 0; i--)
{
// flip the cliprects
if (m_k007121->flipscreen())
@@ -273,26 +264,19 @@ uint32_t labyrunr_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
clip[i].min_x = min_x;
}
- clip[i] &= cliprect;
+ clip[i] &= (i == 2) ? cliprect : clip[2];
}
- m_tilemap[0]->set_scrollx(0, ctrl_0 - 40);
- m_tilemap[1]->set_scrollx(0, ctrl_0 - 40);
+ // set scroll registers
+ m_tilemap[0]->set_scrollx(0, ctrl_0 - 16);
+ m_tilemap[1]->set_scrollx(0, ctrl_0 - 16);
+ m_k007121->set_sprite_offsets(16, -8);
// draw the graphics
m_tilemap[0]->draw(screen, bitmap, clip[0], TILEMAP_DRAW_CATEGORY(0), 0);
- if (use_clip2[0])
- m_tilemap[0]->draw(screen, bitmap, clip[2], TILEMAP_DRAW_CATEGORY(0), 0);
-
- draw_sprites(bitmap, cliprect, screen.priority());
-
+ draw_sprites(bitmap, clip[2], screen.priority());
m_tilemap[0]->draw(screen, bitmap, clip[0], TILEMAP_DRAW_CATEGORY(1), 0);
- if (use_clip2[0])
- m_tilemap[0]->draw(screen, bitmap, clip[2], TILEMAP_DRAW_CATEGORY(1), 0);
-
m_tilemap[1]->draw(screen, bitmap, clip[1], 0, 0);
- if (use_clip2[1])
- m_tilemap[1]->draw(screen, bitmap, clip[2], 0, 0);
}
return 0;
@@ -304,7 +288,7 @@ void labyrunr_state::bankswitch_w(uint8_t data)
if (data & 0xe0) logerror("bankswitch %02x", data);
// bits 0-2 = bank number
- m_mainbank->set_entry(data & 0x07); // shall we check if data & 7 > #banks?
+ m_mainbank->set_entry(data & 0x07);
// bits 3 and 4 are coin counters
machine().bookkeeping().coin_counter_w(0, data & 0x08);
@@ -338,7 +322,7 @@ void labyrunr_state::prg_map(address_map &map)
map(0x3000, 0x37ff).ram().w(FUNC(labyrunr_state::vram_w<0>)).share(m_videoram[0]);
map(0x3800, 0x3fff).ram().w(FUNC(labyrunr_state::vram_w<1>)).share(m_videoram[1]);
map(0x4000, 0x7fff).bankr(m_mainbank);
- map(0x8000, 0xffff).rom();
+ map(0x8000, 0xffff).rom().region("maincpu", 0x18000);
}
@@ -421,9 +405,7 @@ GFXDECODE_END
void labyrunr_state::machine_start()
{
- uint8_t *ROM = memregion("maincpu")->base();
-
- m_mainbank->configure_entries(0, 6, &ROM[0x10000], 0x4000);
+ m_mainbank->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000);
}
void labyrunr_state::labyrunr(machine_config &config)
@@ -434,24 +416,23 @@ void labyrunr_state::labyrunr(machine_config &config)
WATCHDOG_TIMER(config, "watchdog");
+ K051733(config, "k051733", 24_MHz_XTAL / 2);
+
// video hardware
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_raw(24_MHz_XTAL / 4, 384, 0, 280, 264, 16, 240);
- screen.set_screen_update(FUNC(labyrunr_state::screen_update));
- screen.set_palette(m_palette);
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(24_MHz_XTAL / 4, 384, 0, 280, 264, 16, 240);
+ m_screen->set_screen_update(FUNC(labyrunr_state::screen_update));
+ m_screen->set_palette(m_palette);
PALETTE(config, m_palette, FUNC(labyrunr_state::palette));
m_palette->set_format(palette_device::xBGR_555, 8*16*16, 128);
K007121(config, m_k007121, 0, gfx_labyrunr, m_palette, "screen");
- m_k007121->set_sprite_offsets(40, 16);
m_k007121->set_irq_cb().set_inputline(m_maincpu, HD6309_IRQ_LINE);
m_k007121->set_nmi_cb().set_inputline(m_maincpu, INPUT_LINE_NMI);
m_k007121->set_flipscreen_cb().set(FUNC(labyrunr_state::flipscreen_w));
m_k007121->set_sprite_callback(FUNC(labyrunr_state::sprite_callback));
- K051733(config, "k051733", 24_MHz_XTAL / 2);
-
// sound hardware
SPEAKER(config, "mono").front_center();
@@ -479,10 +460,10 @@ void labyrunr_state::labyrunr(machine_config &config)
***************************************************************************/
ROM_START( tricktrp )
- ROM_REGION( 0x28000, "maincpu", 0 ) // code + banked ROMs
- ROM_LOAD( "771e04", 0x10000, 0x08000, CRC(ba2c7e20) SHA1(713dcc0e65bf9431f2c0df9db1210346a9476a52) )
- ROM_CONTINUE( 0x08000, 0x08000 )
- ROM_LOAD( "771e03", 0x18000, 0x10000, CRC(d0d68036) SHA1(8589ee07e229259341a4cc22bc64de8f06536472) )
+ ROM_REGION( 0x20000, "maincpu", 0 ) // code + banked ROMs
+ ROM_LOAD( "771e04", 0x00000, 0x08000, CRC(ba2c7e20) SHA1(713dcc0e65bf9431f2c0df9db1210346a9476a52) )
+ ROM_CONTINUE( 0x18000, 0x08000 )
+ ROM_LOAD( "771e03", 0x08000, 0x10000, CRC(d0d68036) SHA1(8589ee07e229259341a4cc22bc64de8f06536472) )
ROM_REGION( 0x40000, "gfx", 0 )
ROM_LOAD16_BYTE( "771e01a", 0x00001, 0x10000, CRC(103ffa0d) SHA1(1949c49ca3b243e4cfb5fb19ecd3a1e1492cfddd) ) // tiles + sprites
@@ -496,10 +477,10 @@ ROM_START( tricktrp )
ROM_END
ROM_START( labyrunr )
- ROM_REGION( 0x28000, "maincpu", 0 ) // code + banked ROMs
- ROM_LOAD( "771j04.10f", 0x10000, 0x08000, CRC(354a41d0) SHA1(302e8f5c469ad3f615aeca8005ebde6b6051aaae) )
- ROM_CONTINUE( 0x08000, 0x08000 )
- ROM_LOAD( "771j03.08f", 0x18000, 0x10000, CRC(12b49044) SHA1(e9b22fb093cfb746a9767e94ef5deef98bed5b7a) )
+ ROM_REGION( 0x20000, "maincpu", 0 ) // code + banked ROMs
+ ROM_LOAD( "771j04.10f", 0x00000, 0x08000, CRC(354a41d0) SHA1(302e8f5c469ad3f615aeca8005ebde6b6051aaae) )
+ ROM_CONTINUE( 0x18000, 0x08000 )
+ ROM_LOAD( "771j03.08f", 0x08000, 0x10000, CRC(12b49044) SHA1(e9b22fb093cfb746a9767e94ef5deef98bed5b7a) )
ROM_REGION( 0x40000, "gfx", 0 )
ROM_LOAD16_WORD_SWAP( "771d01.14a", 0x00000, 0x40000, CRC(15c8f5f9) SHA1(e4235e1315d0331f3ce5047834a68764ed43aa4b) ) // tiles + sprites
@@ -510,10 +491,10 @@ ROM_START( labyrunr )
ROM_END
ROM_START( labyrunrk )
- ROM_REGION( 0x28000, "maincpu", 0 ) // code + banked ROMs
- ROM_LOAD( "771k04.10f", 0x10000, 0x08000, CRC(9816ab35) SHA1(6efb0332f4a62f20889f212682ee7225e4a182a9) )
- ROM_CONTINUE( 0x08000, 0x08000 )
- ROM_LOAD( "771k03.8f", 0x18000, 0x10000, CRC(48d732ae) SHA1(8bc7917397f32cf5f995b3763ae921725e27de05) )
+ ROM_REGION( 0x20000, "maincpu", 0 ) // code + banked ROMs
+ ROM_LOAD( "771k04.10f", 0x00000, 0x08000, CRC(9816ab35) SHA1(6efb0332f4a62f20889f212682ee7225e4a182a9) )
+ ROM_CONTINUE( 0x18000, 0x08000 )
+ ROM_LOAD( "771k03.8f", 0x08000, 0x10000, CRC(48d732ae) SHA1(8bc7917397f32cf5f995b3763ae921725e27de05) )
ROM_REGION( 0x40000, "gfx", 0 )
ROM_LOAD16_BYTE( "771d01a.13a", 0x00001, 0x10000, CRC(0cd1ed1a) SHA1(eac6c106de28acc54535ae1fb99f778c1ed4013e) ) // tiles + sprites
@@ -527,10 +508,10 @@ ROM_START( labyrunrk )
ROM_END
ROM_START( labyrunrf )
- ROM_REGION( 0x28000, "maincpu", 0 ) // code + banked ROMs
- ROM_LOAD( "771k04.10f", 0x10000, 0x08000, CRC(86a36806) SHA1(d1c916a24117290e890b5e14d6e1932d65943bc6) )
- ROM_CONTINUE( 0x08000, 0x08000 )
- ROM_LOAD( "771k03.8f", 0x18000, 0x10000, CRC(6c073295) SHA1(67be17ad0c3bfd5ff8cd6ed31b217e438733ed1c) )
+ ROM_REGION( 0x20000, "maincpu", 0 ) // code + banked ROMs
+ ROM_LOAD( "771k04.10f", 0x00000, 0x08000, CRC(86a36806) SHA1(d1c916a24117290e890b5e14d6e1932d65943bc6) )
+ ROM_CONTINUE( 0x18000, 0x08000 )
+ ROM_LOAD( "771k03.8f", 0x08000, 0x10000, CRC(6c073295) SHA1(67be17ad0c3bfd5ff8cd6ed31b217e438733ed1c) )
ROM_REGION( 0x40000, "gfx", 0 )
ROM_LOAD16_BYTE( "771d01a.13a", 0x00001, 0x10000, CRC(0cd1ed1a) SHA1(eac6c106de28acc54535ae1fb99f778c1ed4013e) ) // tiles + sprites