From 4c3db1d280141c5b5945a86e16e998d7c8a8f033 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 26 May 2021 19:32:36 +0200 Subject: jackal.cpp: avoided allocating memory in ROM regions, general cleanups. Needs proper K005885 device for further cleanup --- src/mame/drivers/jackal.cpp | 283 +++++++++++++++++++------------------------- src/mame/includes/jackal.h | 71 +++++------ src/mame/video/jackal.cpp | 73 ++++-------- 3 files changed, 184 insertions(+), 243 deletions(-) diff --git a/src/mame/drivers/jackal.cpp b/src/mame/drivers/jackal.cpp index fd0ad5d14ba..84f73f821eb 100644 --- a/src/mame/drivers/jackal.cpp +++ b/src/mame/drivers/jackal.cpp @@ -18,6 +18,7 @@ TODO: beginning of the game. This is kludged by overclocking the sound CPU. This looks like a CPU communication timing issue however fiddling with the interleave factor has no effect. +- create a K005885 device shared with other drivers. Memory Map @@ -86,41 +87,21 @@ Address Dir Data Description * *************************************/ -uint8_t jackal_state::jackalr_rotary_r(offs_t offset) +uint8_t jackal_state::rotary_r(offs_t offset) { return (1 << m_dials[offset].read_safe(0x00)) ^ 0xff; } -void jackal_state::jackal_flipscreen_w(uint8_t data) +void jackal_state::flipscreen_w(uint8_t data) { - m_irq_enable = data & 0x02; - flip_screen_set(data & 0x08); + m_irq_enable = BIT(data, 1); + flip_screen_set(BIT(data, 3)); } -uint8_t jackal_state::jackal_zram_r(offs_t offset) +void jackal_state::rambank_w(uint8_t data) { - return m_rambank[0x0020 + offset]; -} - - -uint8_t jackal_state::jackal_voram_r(offs_t offset) -{ - return m_rambank[0x2000 + offset]; -} - - -uint8_t jackal_state::jackal_spriteram_r(offs_t offset) -{ - return m_spritebank[0x3000 + offset]; -} - - -void jackal_state::jackal_rambank_w(uint8_t data) -{ - uint8_t *rgn = memregion("master")->base(); - if (data & 0x04) - popmessage("jackal_rambank_w %02x", data); + popmessage("rambank_w %02x", data); // all revisions flips the coin counter bit between 1 -> 0 five times, causing the bookkeeping to report 5 coins inserted. // most likely solution in HW is a f/f that disables coin counters when any of the other bits are enabled. @@ -130,56 +111,48 @@ void jackal_state::jackal_rambank_w(uint8_t data) machine().bookkeeping().coin_counter_w(1, data & 0x02); } - m_spritebank = &rgn[((data & 0x08) << 13)]; - m_rambank = &rgn[((data & 0x10) << 12)]; - membank("bank1")->set_entry((data & 0x20) ? 1 : 0); -} - - -void jackal_state::jackal_zram_w(offs_t offset, uint8_t data) -{ - m_rambank[0x0020 + offset] = data; + m_spritebank->set_entry(BIT(data, 3)); + m_scrollbank->set_entry(BIT(data, 4)); + m_videoview.select(BIT(data, 4)); + m_mainbank->set_entry(BIT(data, 5)); } - -void jackal_state::jackal_voram_w(offs_t offset, uint8_t data) +template +void jackal_state::voram_w(offs_t offset, uint8_t data) { if ((offset & 0xf800) == 0) - jackal_mark_tile_dirty(offset & 0x3ff); + m_bg_tilemap->mark_tile_dirty(offset & 0x3ff); - m_rambank[0x2000 + offset] = data; + m_videoram[Which][offset] = data; } -void jackal_state::jackal_spriteram_w(offs_t offset, uint8_t data) -{ - m_spritebank[0x3000 + offset] = data; -} - /************************************* * * Address maps * *************************************/ -void jackal_state::master_map(address_map &map) +void jackal_state::main_map(address_map &map) { - map(0x0000, 0x0003).ram().share("videoctrl"); // scroll + other things - map(0x0004, 0x0004).w(FUNC(jackal_state::jackal_flipscreen_w)); + map(0x0000, 0x0003).ram().share(m_videoctrl); // scroll + other things + map(0x0004, 0x0004).w(FUNC(jackal_state::flipscreen_w)); map(0x0010, 0x0010).portr("DSW1"); map(0x0011, 0x0011).portr("IN1"); map(0x0012, 0x0012).portr("IN2"); map(0x0013, 0x0013).portr("IN0"); - map(0x0014, 0x0015).r(FUNC(jackal_state::jackalr_rotary_r)); + map(0x0014, 0x0015).r(FUNC(jackal_state::rotary_r)); map(0x0018, 0x0018).portr("DSW2"); map(0x0019, 0x0019).w("watchdog", FUNC(watchdog_timer_device::reset_w)); - map(0x001c, 0x001c).w(FUNC(jackal_state::jackal_rambank_w)); - map(0x0020, 0x005f).rw(FUNC(jackal_state::jackal_zram_r), FUNC(jackal_state::jackal_zram_w)); // MAIN Z RAM,SUB Z RAM - map(0x0060, 0x1fff).ram().share("share1"); // M COMMON RAM,S COMMON RAM - map(0x2000, 0x2fff).rw(FUNC(jackal_state::jackal_voram_r), FUNC(jackal_state::jackal_voram_w)); // MAIN V O RAM,SUB V O RAM - map(0x3000, 0x3fff).rw(FUNC(jackal_state::jackal_spriteram_r), FUNC(jackal_state::jackal_spriteram_w)); // MAIN V O RAM,SUB V O RAM - map(0x4000, 0xbfff).bankr("bank1"); - map(0xc000, 0xffff).rom(); + map(0x001c, 0x001c).w(FUNC(jackal_state::rambank_w)); + map(0x0020, 0x005f).bankrw(m_scrollbank); // MAIN Z RAM,SUB Z RAM + map(0x0060, 0x1fff).ram().share("mainsub"); // M COMMON RAM,S COMMON RAM + map(0x2000, 0x2fff).view(m_videoview); + m_videoview[0](0x2000, 0x2fff).ram().share(m_videoram[0]).w(FUNC(jackal_state::voram_w<0>)); // MAIN V O RAM,SUB V O RAM + m_videoview[1](0x2000, 0x2fff).ram().share(m_videoram[1]).w(FUNC(jackal_state::voram_w<1>)); // MAIN V O RAM,SUB V O RAM + map(0x3000, 0x3fff).bankrw(m_spritebank); // MAIN V O RAM,SUB V O RAM + map(0x4000, 0xbfff).bankr(m_mainbank); + map(0xc000, 0xffff).rom().region("maincpu", 0); } void jackal_state::slave_map(address_map &map) @@ -187,8 +160,8 @@ void jackal_state::slave_map(address_map &map) map(0x2000, 0x2001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); map(0x4000, 0x43ff).ram().w(m_palette, FUNC(palette_device::write_indirect)).share("palette"); // self test only checks 0x4000-0x423f, 007327 should actually go up to 4fff map(0x6000, 0x605f).ram(); // SOUND RAM (Self test check 0x6000-605f, 0x7c00-0x7fff) - map(0x6060, 0x7fff).ram().share("share1"); - map(0x8000, 0xffff).rom(); + map(0x6060, 0x7fff).ram().share("mainsub"); + map(0x8000, 0xffff).rom().region("slave", 0); } /************************************* @@ -200,7 +173,7 @@ void jackal_state::slave_map(address_map &map) static INPUT_PORTS_START( jackal ) PORT_START("DSW1") KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1) - /* "No Coin B" = coins produce sound, but no effect on coin counter */ + // "No Coin B" = coins produce sound, but no effect on coin counter PORT_START("DSW2") PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION( "SW2:1,2" ) @@ -253,10 +226,10 @@ static INPUT_PORTS_START( jackalr ) PORT_MODIFY("IN0") PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("DIAL0") // player 1 8-way rotary control - converted in jackalr_rotary_r() + PORT_START("DIAL0") // player 1 8-way rotary control - converted in rotary_r() PORT_BIT( 0xff, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(8) PORT_WRAPS PORT_SENSITIVITY(15) PORT_KEYDELTA(1) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_FULL_TURN_COUNT(8) - PORT_START("DIAL1") // player 2 8-way rotary control - converted in jackalr_rotary_r() + PORT_START("DIAL1") // player 2 8-way rotary control - converted in rotary_r() PORT_BIT( 0xff, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(8) PORT_WRAPS PORT_SENSITIVITY(15) PORT_KEYDELTA(1) PORT_CODE_DEC(KEYCODE_N) PORT_CODE_INC(KEYCODE_M) PORT_PLAYER(2) PORT_FULL_TURN_COUNT(8) INPUT_PORTS_END @@ -271,7 +244,7 @@ static const gfx_layout charlayout = { 8, 8, RGN_FRAC(1,4), - 8, /* 8 bits per pixel (!) */ + 8, // 8 bits per pixel (!) { 0, 1, 2, 3, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+1, RGN_FRAC(1,2)+2, RGN_FRAC(1,2)+3 }, { 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 }, { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, @@ -320,7 +293,7 @@ WRITE_LINE_MEMBER(jackal_state::vblank_irq) { if (state && m_irq_enable) { - m_mastercpu->set_input_line(0, HOLD_LINE); + m_maincpu->set_input_line(0, HOLD_LINE); m_slavecpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } } @@ -334,62 +307,54 @@ WRITE_LINE_MEMBER(jackal_state::vblank_irq) void jackal_state::machine_start() { - uint8_t *ROM = memregion("master")->base(); - - membank("bank1")->configure_entry(0, &ROM[0x04000]); - membank("bank1")->configure_entry(1, &ROM[0x14000]); - membank("bank1")->set_entry(0); + m_mainbank->configure_entries(0, 2, memregion("maincpu")->base() + 0x4000, 0x8000); + m_mainbank->set_entry(0); save_item(NAME(m_irq_enable)); } void jackal_state::machine_reset() { - uint8_t *rgn = memregion("master")->base(); - // HACK: running at the nominal clock rate, music stops working // at the beginning of the game. This fixes it. m_slavecpu->set_clock_scale(1.5); - m_rambank = rgn; - m_spritebank = rgn; - m_irq_enable = 0; } void jackal_state::jackal(machine_config &config) { - /* basic machine hardware */ - MC6809E(config, m_mastercpu, MASTER_CLOCK/12); // verified on pcb - m_mastercpu->set_addrmap(AS_PROGRAM, &jackal_state::master_map); + // basic machine hardware + MC6809E(config, m_maincpu, 18.432_MHz_XTAL / 12); // verified on pcb + m_maincpu->set_addrmap(AS_PROGRAM, &jackal_state::main_map); - MC6809E(config, m_slavecpu, MASTER_CLOCK/12); // verified on pcb + MC6809E(config, m_slavecpu, 18.432_MHz_XTAL / 12); // verified on pcb m_slavecpu->set_addrmap(AS_PROGRAM, &jackal_state::slave_map); config.set_maximum_quantum(attotime::from_hz(6000)); WATCHDOG_TIMER(config, "watchdog"); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(32*8, 32*8); screen.set_visarea(1*8, 31*8-1, 2*8, 30*8-1); - screen.set_screen_update(FUNC(jackal_state::screen_update_jackal)); + screen.set_screen_update(FUNC(jackal_state::screen_update)); screen.set_palette(m_palette); screen.screen_vblank().set(FUNC(jackal_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_jackal); - PALETTE(config, m_palette, FUNC(jackal_state::jackal_palette)); + PALETTE(config, m_palette, FUNC(jackal_state::palette)); m_palette->set_format(palette_device::xBGR_555, 0x300, 0x200); m_palette->set_endianness(ENDIANNESS_LITTLE); - /* sound hardware */ + // sound hardware SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - YM2151(config, "ymsnd", SOUND_CLOCK).add_route(0, "lspeaker", 0.50).add_route(1, "rspeaker", 0.50); // verified on pcb + YM2151(config, "ymsnd", 3.579545_MHz_XTAL).add_route(0, "lspeaker", 0.50).add_route(1, "rspeaker", 0.50); // verified on pcb } /************************************* @@ -398,106 +363,102 @@ void jackal_state::jackal(machine_config &config) * *************************************/ -ROM_START( jackal ) /* 8-Way Joystick: You can only shoot in one direction regardless of travel - up the screen */ - ROM_REGION( 0x20000, "master", 0 ) /* Banked 64k for 1st CPU */ - ROM_LOAD( "631_v02.15d", 0x04000, 0x8000, CRC(0b7e0584) SHA1(e4019463345a4c020d5a004c9a400aca4bdae07b) ) - ROM_CONTINUE( 0x14000, 0x8000 ) - ROM_LOAD( "631_v03.16d", 0x0c000, 0x4000, CRC(3e0dfb83) SHA1(5ba7073751eee33180e51143b348256597909516) ) +ROM_START( jackal ) // 8-Way Joystick: You can only shoot in one direction regardless of travel - up the screen + ROM_REGION( 0x14000, "maincpu", 0 ) // Banked 64k for 1st CPU + ROM_LOAD( "631_v03.16d", 0x00000, 0x04000, CRC(3e0dfb83) SHA1(5ba7073751eee33180e51143b348256597909516) ) + ROM_LOAD( "631_v02.15d", 0x04000, 0x10000, CRC(0b7e0584) SHA1(e4019463345a4c020d5a004c9a400aca4bdae07b) ) - ROM_REGION( 0x10000, "slave", 0 ) /* 64k for 2nd cpu (Graphics & Sound)*/ - ROM_LOAD( "631_t01.11d", 0x8000, 0x8000, CRC(b189af6a) SHA1(f7df996c394fdd6f2ce128a8df38d7838f7ec6d6) ) + ROM_REGION( 0x8000, "slave", 0 ) // 64k for 2nd cpu (Graphics & Sound) + ROM_LOAD( "631_t01.11d", 0x0000, 0x8000, CRC(b189af6a) SHA1(f7df996c394fdd6f2ce128a8df38d7838f7ec6d6) ) ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "631t04.7h", 0x00000, 0x20000, CRC(457f42f0) SHA1(08413a13d128875dddcf4f6ad302363096bf1d41) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631t05.8h", 0x00001, 0x20000, CRC(732b3fc1) SHA1(7e89650b9e5e2b7ae82f8c55ac9995740f6fdfe1) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631t06.12h", 0x40000, 0x20000, CRC(2d10e56e) SHA1(447b464ea725fb9ef87da067a41bcf463b427cce) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631t07.13h", 0x40001, 0x20000, CRC(4961c397) SHA1(b430df58fc3bb722d6fb23bed7d04afdb7e5d9c1) ) /* Silkscreened MASK1M */ - - ROM_REGION( 0x0200, "proms", 0 ) /* color lookup tables */ - ROM_LOAD( "631r08.9h", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) /* MMI 63S141AN or compatible (silkscreened 6301) */ - ROM_LOAD( "631r09.14h", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) /* MMI 63S141AN or compatible (silkscreened 6301) */ + ROM_LOAD16_BYTE( "631t04.7h", 0x00000, 0x20000, CRC(457f42f0) SHA1(08413a13d128875dddcf4f6ad302363096bf1d41) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631t05.8h", 0x00001, 0x20000, CRC(732b3fc1) SHA1(7e89650b9e5e2b7ae82f8c55ac9995740f6fdfe1) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631t06.12h", 0x40000, 0x20000, CRC(2d10e56e) SHA1(447b464ea725fb9ef87da067a41bcf463b427cce) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631t07.13h", 0x40001, 0x20000, CRC(4961c397) SHA1(b430df58fc3bb722d6fb23bed7d04afdb7e5d9c1) ) // Silkscreened MASK1M + + ROM_REGION( 0x0200, "proms", 0 ) // color lookup tables + ROM_LOAD( "631r08.9h", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) // MMI 63S141AN or compatible (silkscreened 6301) + ROM_LOAD( "631r09.14h", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) // MMI 63S141AN or compatible (silkscreened 6301) ROM_END -ROM_START( jackalr ) /* Rotary Joystick: Shot direction is controlled via the rotary function of the joystick */ - ROM_REGION( 0x20000, "master", 0 ) /* Banked 64k for 1st CPU */ - ROM_LOAD( "631_q02.15d", 0x04000, 0x8000, CRC(ed2a7d66) SHA1(3d9b31fa8b31e509880d617feb0dd4bd9790d2d5) ) - ROM_CONTINUE( 0x14000, 0x8000 ) - ROM_LOAD( "631_q03.16d", 0x0c000, 0x4000, CRC(b9d34836) SHA1(af23a0c844fb9e60a757511ca898d73eef4c2e51) ) +ROM_START( jackalr ) // Rotary Joystick: Shot direction is controlled via the rotary function of the joystick + ROM_REGION( 0x14000, "maincpu", 0 ) // Banked 64k for 1st CPU + ROM_LOAD( "631_q03.16d", 0x00000, 0x04000, CRC(b9d34836) SHA1(af23a0c844fb9e60a757511ca898d73eef4c2e51) ) + ROM_LOAD( "631_q02.15d", 0x04000, 0x10000, CRC(ed2a7d66) SHA1(3d9b31fa8b31e509880d617feb0dd4bd9790d2d5) ) - ROM_REGION( 0x10000, "slave", 0 ) /* 64k for 2nd cpu (Graphics & Sound)*/ - ROM_LOAD( "631_q01.11d", 0x8000, 0x8000, CRC(54aa2d29) SHA1(ebc6b3a5db5120cc33d62e3213d0e881f658282d) ) + ROM_REGION( 0x8000, "slave", 0 ) // 64k for 2nd cpu (Graphics & Sound) + ROM_LOAD( "631_q01.11d", 0x0000, 0x8000, CRC(54aa2d29) SHA1(ebc6b3a5db5120cc33d62e3213d0e881f658282d) ) ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "631t04.7h", 0x00000, 0x20000, CRC(457f42f0) SHA1(08413a13d128875dddcf4f6ad302363096bf1d41) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631t05.8h", 0x00001, 0x20000, CRC(732b3fc1) SHA1(7e89650b9e5e2b7ae82f8c55ac9995740f6fdfe1) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631t06.12h", 0x40000, 0x20000, CRC(2d10e56e) SHA1(447b464ea725fb9ef87da067a41bcf463b427cce) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631t07.13h", 0x40001, 0x20000, CRC(4961c397) SHA1(b430df58fc3bb722d6fb23bed7d04afdb7e5d9c1) ) /* Silkscreened MASK1M */ - /* These roms are on a tiny riser board - two smaller roms instead of MASK1M roms */ + ROM_LOAD16_BYTE( "631t04.7h", 0x00000, 0x20000, CRC(457f42f0) SHA1(08413a13d128875dddcf4f6ad302363096bf1d41) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631t05.8h", 0x00001, 0x20000, CRC(732b3fc1) SHA1(7e89650b9e5e2b7ae82f8c55ac9995740f6fdfe1) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631t06.12h", 0x40000, 0x20000, CRC(2d10e56e) SHA1(447b464ea725fb9ef87da067a41bcf463b427cce) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631t07.13h", 0x40001, 0x20000, CRC(4961c397) SHA1(b430df58fc3bb722d6fb23bed7d04afdb7e5d9c1) ) // Silkscreened MASK1M + // These roms are on a tiny riser board - two smaller roms instead of MASK1M roms // ROM_LOAD16_BYTE( "631_q04.7h", 0x20000, 0x10000, CRC(0) SHA1(0) ) // ROM_LOAD16_BYTE( "631_q05.7h", 0x00000, 0x10000, CRC(0) SHA1(0) ) // ROM_LOAD16_BYTE( "631_q06.8h", 0x20001, 0x10000, CRC(0) SHA1(0) ) -// ROM_LOAD16_BYTE( "631_q07.8h", 0x00001, 0x10000, CRC(0) SHA1(0) ) /* 631 Q04 through 631 Q11 need to be redumped and verified. Should be the same data */ -// ROM_LOAD16_BYTE( "631_q08.12h", 0x40000, 0x10000, CRC(0) SHA1(0) ) /* until then we are going to use the standard MASK1M roms - Will fixed when dumped */ +// ROM_LOAD16_BYTE( "631_q07.8h", 0x00001, 0x10000, CRC(0) SHA1(0) ) // 631 Q04 through 631 Q11 need to be redumped and verified. Should be the same data +// ROM_LOAD16_BYTE( "631_q08.12h", 0x40000, 0x10000, CRC(0) SHA1(0) ) // until then we are going to use the standard MASK1M roms - Will fixed when dumped // ROM_LOAD16_BYTE( "631_q09.12h", 0x60000, 0x10000, CRC(0) SHA1(0) ) // ROM_LOAD16_BYTE( "631_q10.13h", 0x40001, 0x10000, CRC(0) SHA1(0) ) // ROM_LOAD16_BYTE( "631_q11.13h", 0x60001, 0x10000, CRC(0) SHA1(0) ) - ROM_REGION( 0x0200, "proms", 0 ) /* color lookup tables */ - ROM_LOAD( "631r08.9h", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) /* MMI 63S141AN or compatible (silkscreened 6301) */ - ROM_LOAD( "631r09.14h", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) /* MMI 63S141AN or compatible (silkscreened 6301) */ + ROM_REGION( 0x0200, "proms", 0 ) // color lookup tables + ROM_LOAD( "631r08.9h", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) // MMI 63S141AN or compatible (silkscreened 6301) + ROM_LOAD( "631r09.14h", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) // MMI 63S141AN or compatible (silkscreened 6301) ROM_END -ROM_START( topgunr ) /* 8-Way Joystick: You can only shoot in one direction regardless of travel - up the screen */ - ROM_REGION( 0x20000, "master", 0 ) /* Banked 64k for 1st CPU */ - ROM_LOAD( "631_u02.15d", 0x04000, 0x8000, CRC(f7e28426) SHA1(db2d5f252a574b8aa4d8406a8e93b423fd2a7fef) ) - ROM_CONTINUE( 0x14000, 0x8000 ) - ROM_LOAD( "631_u03.16d", 0x0c000, 0x4000, CRC(c086844e) SHA1(4d6f27ac3aabb4b2d673aa619e407e417ad89337) ) +ROM_START( topgunr ) // 8-Way Joystick: You can only shoot in one direction regardless of travel - up the screen + ROM_REGION( 0x14000, "maincpu", 0 ) // Banked 64k for 1st CPU + ROM_LOAD( "631_u03.16d", 0x00000, 0x04000, CRC(c086844e) SHA1(4d6f27ac3aabb4b2d673aa619e407e417ad89337) ) + ROM_LOAD( "631_u02.15d", 0x04000, 0x10000, CRC(f7e28426) SHA1(db2d5f252a574b8aa4d8406a8e93b423fd2a7fef) ) - ROM_REGION( 0x10000, "slave", 0 ) /* 64k for 2nd cpu (Graphics & Sound)*/ - ROM_LOAD( "631_t01.11d", 0x8000, 0x8000, CRC(b189af6a) SHA1(f7df996c394fdd6f2ce128a8df38d7838f7ec6d6) ) + ROM_REGION( 0x8000, "slave", 0 ) // 64k for 2nd cpu (Graphics & Sound) + ROM_LOAD( "631_t01.11d", 0x0000, 0x8000, CRC(b189af6a) SHA1(f7df996c394fdd6f2ce128a8df38d7838f7ec6d6) ) ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "631u04.7h", 0x00000, 0x20000, CRC(50122a12) SHA1(c9e0132a3a40d9d28685c867c70231947d8a9cb7) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631u05.8h", 0x00001, 0x20000, CRC(6943b1a4) SHA1(40de2b434600ea4c8fb42e6b21be2c3705a55d67) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631u06.12h", 0x40000, 0x20000, CRC(37dbbdb0) SHA1(f94db780d69e7dd40231a75629af79469d957378) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631u07.13h", 0x40001, 0x20000, CRC(22effcc8) SHA1(4d174b0ce64def32050f87343c4b1424e0fef6f7) ) /* Silkscreened MASK1M */ - - ROM_REGION( 0x0200, "proms", 0 ) /* color lookup tables */ - ROM_LOAD( "631r08.9h", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) /* MMI 63S141AN or compatible (silkscreened 6301) */ - ROM_LOAD( "631r09.14h", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) /* MMI 63S141AN or compatible (silkscreened 6301) */ + ROM_LOAD16_BYTE( "631u04.7h", 0x00000, 0x20000, CRC(50122a12) SHA1(c9e0132a3a40d9d28685c867c70231947d8a9cb7) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631u05.8h", 0x00001, 0x20000, CRC(6943b1a4) SHA1(40de2b434600ea4c8fb42e6b21be2c3705a55d67) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631u06.12h", 0x40000, 0x20000, CRC(37dbbdb0) SHA1(f94db780d69e7dd40231a75629af79469d957378) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631u07.13h", 0x40001, 0x20000, CRC(22effcc8) SHA1(4d174b0ce64def32050f87343c4b1424e0fef6f7) ) // Silkscreened MASK1M + + ROM_REGION( 0x0200, "proms", 0 ) // color lookup tables + ROM_LOAD( "631r08.9h", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) // MMI 63S141AN or compatible (silkscreened 6301) + ROM_LOAD( "631r09.14h", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) // MMI 63S141AN or compatible (silkscreened 6301) ROM_END -ROM_START( jackalj ) /* 8-Way Joystick: You can only shoot in the direction you're traveling */ - ROM_REGION( 0x20000, "master", 0 ) /* Banked 64k for 1st CPU */ - ROM_LOAD( "631_t02.15d", 0x04000, 0x8000, CRC(14db6b1a) SHA1(b469ea50aa94a2bda3bd0442300aa1272e5f30c4) ) - ROM_CONTINUE( 0x14000, 0x8000 ) - ROM_LOAD( "631_t03.16d", 0x0c000, 0x4000, CRC(fd5f9624) SHA1(2520c1ff54410ef498ecbf52877f011900baed4c) ) +ROM_START( jackalj ) // 8-Way Joystick: You can only shoot in the direction you're traveling + ROM_REGION( 0x14000, "maincpu", 0 ) // Banked 64k for 1st CPU + ROM_LOAD( "631_t03.16d", 0x00000, 0x04000, CRC(fd5f9624) SHA1(2520c1ff54410ef498ecbf52877f011900baed4c) ) + ROM_LOAD( "631_t02.15d", 0x04000, 0x10000, CRC(14db6b1a) SHA1(b469ea50aa94a2bda3bd0442300aa1272e5f30c4) ) - ROM_REGION( 0x10000, "slave", 0 ) /* 64k for 2nd cpu (Graphics & Sound)*/ - ROM_LOAD( "631_t01.11d", 0x8000, 0x8000, CRC(b189af6a) SHA1(f7df996c394fdd6f2ce128a8df38d7838f7ec6d6) ) + ROM_REGION( 0x8000, "slave", 0 ) // 64k for 2nd cpu (Graphics & Sound) + ROM_LOAD( "631_t01.11d", 0x0000, 0x8000, CRC(b189af6a) SHA1(f7df996c394fdd6f2ce128a8df38d7838f7ec6d6) ) ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "631t04.7h", 0x00000, 0x20000, CRC(457f42f0) SHA1(08413a13d128875dddcf4f6ad302363096bf1d41) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631t05.8h", 0x00001, 0x20000, CRC(732b3fc1) SHA1(7e89650b9e5e2b7ae82f8c55ac9995740f6fdfe1) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631t06.12h", 0x40000, 0x20000, CRC(2d10e56e) SHA1(447b464ea725fb9ef87da067a41bcf463b427cce) ) /* Silkscreened MASK1M */ - ROM_LOAD16_BYTE( "631t07.13h", 0x40001, 0x20000, CRC(4961c397) SHA1(b430df58fc3bb722d6fb23bed7d04afdb7e5d9c1) ) /* Silkscreened MASK1M */ - - ROM_REGION( 0x0200, "proms", 0 ) /* color lookup tables */ - ROM_LOAD( "631r08.9h", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) /* MMI 63S141AN or compatible (silkscreened 6301) */ - ROM_LOAD( "631r09.14h", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) /* MMI 63S141AN or compatible (silkscreened 6301) */ + ROM_LOAD16_BYTE( "631t04.7h", 0x00000, 0x20000, CRC(457f42f0) SHA1(08413a13d128875dddcf4f6ad302363096bf1d41) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631t05.8h", 0x00001, 0x20000, CRC(732b3fc1) SHA1(7e89650b9e5e2b7ae82f8c55ac9995740f6fdfe1) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631t06.12h", 0x40000, 0x20000, CRC(2d10e56e) SHA1(447b464ea725fb9ef87da067a41bcf463b427cce) ) // Silkscreened MASK1M + ROM_LOAD16_BYTE( "631t07.13h", 0x40001, 0x20000, CRC(4961c397) SHA1(b430df58fc3bb722d6fb23bed7d04afdb7e5d9c1) ) // Silkscreened MASK1M + + ROM_REGION( 0x0200, "proms", 0 ) // color lookup tables + ROM_LOAD( "631r08.9h", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) // MMI 63S141AN or compatible (silkscreened 6301) + ROM_LOAD( "631r09.14h", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) // MMI 63S141AN or compatible (silkscreened 6301) ROM_END ROM_START( jackalbl ) // This is based on jackalr. Was dumped from 2 different PCBs. - ROM_REGION( 0x20000, "master", 0 ) /* Banked 64k for 1st CPU */ - ROM_LOAD( "epr-a-3.bin", 0x04000, 0x8000, CRC(5fffee27) SHA1(224d5fd26dd1e0f15a3c99fd2fffbb76f641416e) ) // also found labeled "3.17" - ROM_LOAD( "epr-a-2.bin", 0x0c000, 0x4000, CRC(ae2a290a) SHA1(e9bee75a02aef5cf330dccb9e7a45b0171a8c1d7) ) // also found labeled "2.20" - ROM_LOAD( "epr-a-4.bin", 0x14000, 0x8000, CRC(976c8431) SHA1(c199f57c25380d741aec85b0e0bfb6acf383e6a6) ) // also found labeled "4.18" + ROM_REGION( 0x14000, "maincpu", 0 ) // Banked 64k for 1st CPU + ROM_LOAD( "epr-a-2.bin", 0x00000, 0x04000, CRC(ae2a290a) SHA1(e9bee75a02aef5cf330dccb9e7a45b0171a8c1d7) ) // also found labeled "2.20" + ROM_LOAD( "epr-a-3.bin", 0x04000, 0x08000, CRC(5fffee27) SHA1(224d5fd26dd1e0f15a3c99fd2fffbb76f641416e) ) // also found labeled "3.17" + ROM_LOAD( "epr-a-4.bin", 0x0c000, 0x08000, CRC(976c8431) SHA1(c199f57c25380d741aec85b0e0bfb6acf383e6a6) ) // also found labeled "4.18" - ROM_REGION( 0x10000, "slave", 0 ) /* 64k for 2nd cpu (Graphics & Sound)*/ - ROM_LOAD( "epr-a-1.bin", 0x8000, 0x8000, CRC(54aa2d29) SHA1(ebc6b3a5db5120cc33d62e3213d0e881f658282d) ) // also found labeled "1.19" + ROM_REGION( 0x8000, "slave", 0 ) // 64k for 2nd cpu (Graphics & Sound) + ROM_LOAD( "epr-a-1.bin", 0x0000, 0x8000, CRC(54aa2d29) SHA1(ebc6b3a5db5120cc33d62e3213d0e881f658282d) ) // also found labeled "1.19" ROM_REGION( 0x80000, "gfx1", 0 ) - /* same data, different layout */ + // same data, different layout ROM_LOAD16_WORD_SWAP( "epr-a-17.bin", 0x00000, 0x08000, CRC(a96720b6) SHA1(d3c2a1848fa9d9d1232e58e412bdd69032fe2c83) ) // also found labeled "17.5" ROM_LOAD16_WORD_SWAP( "epr-a-18.bin", 0x08000, 0x08000, CRC(932d0ecb) SHA1(20bf789f45c5b3ba90012e1a945523236578a014) ) // also found labeled "18.6" ROM_LOAD16_WORD_SWAP( "epr-a-19.bin", 0x10000, 0x08000, CRC(1e3412e7) SHA1(dc0be23d6c89b7b131c3bd5cd117123e5f9d971c) ) // also found labeled "19.7" @@ -515,11 +476,11 @@ ROM_START( jackalbl ) // This is based on jackalr. Was dumped from 2 different P ROM_LOAD16_WORD_SWAP( "epr-a-11.bin", 0x70000, 0x08000, CRC(a48e9f60) SHA1(6d5af16c16b40fb092fdba6dce852b94ac4767f4) ) // also found labeled "11.15" ROM_LOAD16_WORD_SWAP( "epr-a-12.bin", 0x78000, 0x08000, CRC(79b7c71c) SHA1(8510226114ab9098ec48e02840465fc8b69b5262) ) // also found labeled "12.16" - ROM_REGION( 0x0200, "proms", 0 ) /* color lookup tables */ + ROM_REGION( 0x0200, "proms", 0 ) // color lookup tables ROM_LOAD( "n82s129n.prom2", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) ROM_LOAD( "n82s129n.prom1", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) - ROM_REGION( 0x1000, "pals", 0 ) /* currently not used by the emulation */ + ROM_REGION( 0x1000, "pals", 0 ) // currently not used by the emulation ROM_LOAD( "pal16r6cn.pal1", 0x0000, 0x0104, CRC(9bba948f) SHA1(5f42568489f16f8b3719eb2ec178e7c61d7ce25f) ) ROM_LOAD( "ampal16l8pc.pal2", 0x0200, 0x0104, CRC(17c9de2f) SHA1(2db42618f9ca1174bdcdbf92ea91ebc1a79bc6d2) ) ROM_LOAD( "ampal16r4pc.pal3", 0x0400, 0x0104, CRC(e54cd288) SHA1(5b8ae5a2a4a9ec3fab603b063fd18c96dd1fd0cf) ) @@ -530,17 +491,17 @@ ROM_START( jackalbl ) // This is based on jackalr. Was dumped from 2 different P ROM_LOAD( "d5c121.ep1200", 0x0e00, 0x0200, NO_DUMP ) // not dumped yet ROM_END -ROM_START( topgunbl ) /* Rotary Joystick: Shot direction is controlled via the Rotary function of the joystick */ - ROM_REGION( 0x20000, "master", 0 ) /* Banked 64k for 1st CPU */ - ROM_LOAD( "t-3.c5", 0x04000, 0x8000, CRC(7826ad38) SHA1(875e87867924905b9b83bc203eb7ffe81cf72233) ) - ROM_LOAD( "t-4.c4", 0x14000, 0x8000, CRC(976c8431) SHA1(c199f57c25380d741aec85b0e0bfb6acf383e6a6) ) /* == 2nd half of 631_q02.15d */ - ROM_LOAD( "t-2.c6", 0x0c000, 0x4000, CRC(d53172e5) SHA1(44b7f180c17f9a121a2f06f2d3471920a8989e21) ) +ROM_START( topgunbl ) // Rotary Joystick: Shot direction is controlled via the Rotary function of the joystick + ROM_REGION( 0x14000, "maincpu", 0 ) // Banked 64k for 1st CPU + ROM_LOAD( "t-2.c6", 0x00000, 0x04000, CRC(d53172e5) SHA1(44b7f180c17f9a121a2f06f2d3471920a8989e21) ) + ROM_LOAD( "t-3.c5", 0x04000, 0x08000, CRC(7826ad38) SHA1(875e87867924905b9b83bc203eb7ffe81cf72233) ) + ROM_LOAD( "t-4.c4", 0x0c000, 0x08000, CRC(976c8431) SHA1(c199f57c25380d741aec85b0e0bfb6acf383e6a6) ) // == 2nd half of 631_q02.15d - ROM_REGION( 0x10000, "slave", 0 ) /* 64k for 2nd cpu (Graphics & Sound)*/ - ROM_LOAD( "t-1.c14", 0x8000, 0x8000, CRC(54aa2d29) SHA1(ebc6b3a5db5120cc33d62e3213d0e881f658282d) ) /* == 631_q01.11d */ + ROM_REGION( 0x8000, "slave", 0 ) // 64k for 2nd cpu (Graphics & Sound) + ROM_LOAD( "t-1.c14", 0x0000, 0x8000, CRC(54aa2d29) SHA1(ebc6b3a5db5120cc33d62e3213d0e881f658282d) ) // == 631_q01.11d ROM_REGION( 0x80000, "gfx1", 0 ) - /* same data, different layout */ + // same data, different layout ROM_LOAD16_WORD_SWAP( "t-17.n12", 0x00000, 0x08000, CRC(e8875110) SHA1(73f4c47ab039dce8c285bf222253084c860c95bf) ) ROM_LOAD16_WORD_SWAP( "t-18.n13", 0x08000, 0x08000, CRC(cf14471d) SHA1(896aa8d7c93f837f6661d30bd0d6e19d16669107) ) ROM_LOAD16_WORD_SWAP( "t-19.n14", 0x10000, 0x08000, CRC(46ee5dd2) SHA1(1a910984a197af341f13b4683babee857aafb245) ) @@ -558,7 +519,7 @@ ROM_START( topgunbl ) /* Rotary Joystick: Shot direction is controlled via the R ROM_LOAD16_WORD_SWAP( "t-11.n6", 0x70000, 0x08000, CRC(7895c22d) SHA1(c81ae51116fb32ac99d37eb7c2000c990d089b8d) ) ROM_LOAD16_WORD_SWAP( "t-12.n7", 0x78000, 0x08000, CRC(15606dfc) SHA1(829492da49dbe70f81d15237803c5203aa011957) ) - ROM_REGION( 0x0200, "proms", 0 ) /* color lookup tables */ + ROM_REGION( 0x0200, "proms", 0 ) // color lookup tables ROM_LOAD( "631r08.bpr", 0x0000, 0x0100, CRC(7553a172) SHA1(eadf1b4157f62c3af4602da764268df954aa0018) ) ROM_LOAD( "631r09.bpr", 0x0100, 0x0100, CRC(a74dd86c) SHA1(571f606f8fc0fd3d98d26761de79ccb4cc9ab044) ) ROM_END diff --git a/src/mame/includes/jackal.h b/src/mame/includes/jackal.h index 56818414488..22c4b108e91 100644 --- a/src/mame/includes/jackal.h +++ b/src/mame/includes/jackal.h @@ -9,10 +9,6 @@ #include "emupal.h" #include "tilemap.h" -#define MASTER_CLOCK XTAL(18'432'000) -#define SOUND_CLOCK XTAL(3'579'545) - - class jackal_state : public driver_device { @@ -20,8 +16,15 @@ public: jackal_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_videoctrl(*this, "videoctrl"), + m_videoram(*this, "videoram%u", 0U), + m_scrollram(*this, "scrollram%u", 0U, 0x40U, ENDIANNESS_BIG), + m_mainbank(*this, "mainbank"), + m_videoview(*this, "videoview"), + m_spritebank(*this, "spritebank"), + m_spriteram(*this, "spriteram%u", 0U, 0x1000U, ENDIANNESS_BIG), + m_scrollbank(*this, "scrollbank"), m_dials(*this, "DIAL%u", 0U), - m_mastercpu(*this, "master"), + m_maincpu(*this, "maincpu"), m_slavecpu(*this, "slave"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette") @@ -29,47 +32,47 @@ public: void jackal(machine_config &config); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + private: - /* memory pointers */ + // memory pointers required_shared_ptr m_videoctrl; - uint8_t * m_scrollram; + required_shared_ptr_array m_videoram; + memory_share_array_creator m_scrollram; + required_memory_bank m_mainbank; + memory_view m_videoview; + required_memory_bank m_spritebank; + memory_share_array_creator m_spriteram; + required_memory_bank m_scrollbank; - /* video-related */ - tilemap_t *m_bg_tilemap; + // video-related + tilemap_t *m_bg_tilemap; - /* misc */ - int m_irq_enable; - uint8_t *m_rambank; - uint8_t *m_spritebank; + // misc + uint8_t m_irq_enable; optional_ioport_array<2> m_dials; - /* devices */ - required_device m_mastercpu; + // devices + required_device m_maincpu; required_device m_slavecpu; required_device m_gfxdecode; required_device m_palette; - uint8_t jackalr_rotary_r(offs_t offset); - void jackal_flipscreen_w(uint8_t data); - uint8_t jackal_zram_r(offs_t offset); - uint8_t jackal_voram_r(offs_t offset); - uint8_t jackal_spriteram_r(offs_t offset); - void jackal_rambank_w(uint8_t data); - void jackal_zram_w(offs_t offset, uint8_t data); - void jackal_voram_w(offs_t offset, uint8_t data); - void jackal_spriteram_w(offs_t offset, uint8_t data); + uint8_t rotary_r(offs_t offset); + void flipscreen_w(uint8_t data); + void rambank_w(uint8_t data); + template void voram_w(offs_t offset, uint8_t data); TILE_GET_INFO_MEMBER(get_bg_tile_info); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - void jackal_palette(palette_device &palette) const; - uint32_t screen_update_jackal(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void palette(palette_device &palette) const; + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(vblank_irq); - void jackal_mark_tile_dirty( int offset ); - void draw_background( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); - void draw_sprites_region( bitmap_ind16 &bitmap, const rectangle &cliprect, const uint8_t *sram, int length, int bank ); - void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - void master_map(address_map &map); + void draw_background(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void draw_sprites_region(bitmap_ind16 &bitmap, const rectangle &cliprect, const uint8_t *sram, int length, int bank); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); + void main_map(address_map &map); void slave_map(address_map &map); }; diff --git a/src/mame/video/jackal.cpp b/src/mame/video/jackal.cpp index 10a587fdc82..a3f5664409a 100644 --- a/src/mame/video/jackal.cpp +++ b/src/mame/video/jackal.cpp @@ -3,7 +3,7 @@ // thanks-to:Kenneth Lin (original driver author) /*************************************************************************** - video.c + jackal.cpp Functions to emulate the video hardware of the machine. @@ -13,7 +13,7 @@ #include "includes/jackal.h" -void jackal_state::jackal_palette(palette_device &palette) const +void jackal_state::palette(palette_device &palette) const { uint8_t const *const color_prom = memregion("proms")->base(); @@ -36,18 +36,10 @@ void jackal_state::jackal_palette(palette_device &palette) const } } - -void jackal_state::jackal_mark_tile_dirty( int offset ) -{ - m_bg_tilemap->mark_tile_dirty(offset); -} - TILE_GET_INFO_MEMBER(jackal_state::get_bg_tile_info) { - uint8_t *RAM = memregion("master")->base(); - - int attr = RAM[0x2000 + tile_index]; - int code = RAM[0x2400 + tile_index] + ((attr & 0xc0) << 2) + ((attr & 0x30) << 6); + int attr = m_videoram[0][tile_index]; + int code = m_videoram[0][0x400 + tile_index] + ((attr & 0xc0) << 2) + ((attr & 0x30) << 6); int color = 0;//attr & 0x0f; int flags = ((attr & 0x10) ? TILE_FLIPX : 0) | ((attr & 0x20) ? TILE_FLIPY : 0); @@ -57,15 +49,16 @@ TILE_GET_INFO_MEMBER(jackal_state::get_bg_tile_info) void jackal_state::video_start() { m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(jackal_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); -} -void jackal_state::draw_background( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ) -{ - uint8_t *RAM = memregion("master")->base(); - int i; + m_spritebank->configure_entry(0, m_spriteram[0]); + m_spritebank->configure_entry(1, m_spriteram[1]); - m_scrollram = &RAM[0x0020]; + m_scrollbank->configure_entry(0, m_scrollram[0]); + m_scrollbank->configure_entry(1, m_scrollram[1]); +} +void jackal_state::draw_background(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ m_bg_tilemap->set_scroll_rows(1); m_bg_tilemap->set_scroll_cols(1); @@ -78,16 +71,16 @@ void jackal_state::draw_background( screen_device &screen, bitmap_ind16 &bitmap, { m_bg_tilemap->set_scroll_rows(32); - for (i = 0; i < 32; i++) - m_bg_tilemap->set_scrollx(i, m_scrollram[i]); + for (int i = 0; i < 32; i++) + m_bg_tilemap->set_scrollx(i, m_scrollram[0][i]); } if (m_videoctrl[2] & 0x04) { m_bg_tilemap->set_scroll_cols(32); - for (i = 0; i < 32; i++) - m_bg_tilemap->set_scrolly(i, m_scrollram[i]); + for (int i = 0; i < 32; i++) + m_bg_tilemap->set_scrolly(i, m_scrollram[0][i]); } } @@ -96,11 +89,9 @@ void jackal_state::draw_background( screen_device &screen, bitmap_ind16 &bitmap, #define DRAW_SPRITE(bank, code, sx, sy) m_gfxdecode->gfx(bank)->transpen(bitmap,cliprect, code, color, flipx, flipy, sx, sy, 0); -void jackal_state::draw_sprites_region( bitmap_ind16 &bitmap, const rectangle &cliprect, const uint8_t *sram, int length, int bank ) +void jackal_state::draw_sprites_region(bitmap_ind16 &bitmap, const rectangle &cliprect, const uint8_t *sram, int length, int bank) { - int offs; - - for (offs = 0; offs < length; offs += 5) + for (int offs = 0; offs < length; offs += 5) { int sn1 = sram[offs]; int sn2 = sram[offs + 1]; @@ -124,7 +115,7 @@ void jackal_state::draw_sprites_region( bitmap_ind16 &bitmap, const rectangle &c flipy = !flipy; } - if (attr & 0xC) // half-size sprite + if (attr & 0xc) // half-size sprite { int spritenum = sn1 * 4 + ((sn2 & (8 + 4)) >> 2) + ((sn2 & (2 + 1)) << 10); int mod = -8; @@ -136,20 +127,20 @@ void jackal_state::draw_sprites_region( bitmap_ind16 &bitmap, const rectangle &c mod = 8; } - if ((attr & 0x0C) == 0x0C) + if ((attr & 0x0c) == 0x0c) { if (flip_screen()) sy += 16; DRAW_SPRITE(bank + 1, spritenum, sx, sy) } - if ((attr & 0x0C) == 0x08) + if ((attr & 0x0c) == 0x08) { sy += 8; DRAW_SPRITE(bank + 1, spritenum, sx, sy) DRAW_SPRITE(bank + 1, spritenum - 2, sx, sy + mod) } - if ((attr & 0x0C) == 0x04) + if ((attr & 0x0c) == 0x04) { DRAW_SPRITE(bank + 1, spritenum, sx, sy) DRAW_SPRITE(bank + 1, spritenum + 1, sx + mod, sy) @@ -180,27 +171,13 @@ void jackal_state::draw_sprites_region( bitmap_ind16 &bitmap, const rectangle &c } } -void jackal_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) +void jackal_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) { - uint8_t *RAM = memregion("master")->base(); - uint8_t *sr, *ss; - - if (m_videoctrl[0x03] & 0x08) - { - sr = &RAM[0x03800]; // Sprite 2 - ss = &RAM[0x13800]; // Additional Sprite 2 - } - else - { - sr = &RAM[0x03000]; // Sprite 1 - ss = &RAM[0x13000]; // Additional Sprite 1 - } - - draw_sprites_region(bitmap, cliprect, ss, 0x0f5, 3); - draw_sprites_region(bitmap, cliprect, sr, 0x500, 1); + draw_sprites_region(bitmap, cliprect, &m_spriteram[1][BIT(m_videoctrl[0x03], 3) * 0x800], 0x0f5, 3); + draw_sprites_region(bitmap, cliprect, &m_spriteram[0][BIT(m_videoctrl[0x03], 3) * 0x800], 0x500, 1); } -uint32_t jackal_state::screen_update_jackal(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t jackal_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { draw_background(screen, bitmap, cliprect); draw_sprites(bitmap, cliprect); -- cgit v1.2.3