mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
jackal.cpp: avoided allocating memory in ROM regions, general cleanups. Needs proper K005885 device for further cleanup
This commit is contained in:
parent
b838ee7153
commit
4c3db1d280
@ -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);
|
||||
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_zram_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_rambank[0x0020 + offset] = data;
|
||||
}
|
||||
|
||||
|
||||
void jackal_state::jackal_voram_w(offs_t offset, uint8_t data)
|
||||
template <uint8_t Which>
|
||||
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_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_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_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_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_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_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
|
||||
|
@ -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<uint8_t> m_videoctrl;
|
||||
uint8_t * m_scrollram;
|
||||
required_shared_ptr_array<uint8_t, 2> m_videoram;
|
||||
memory_share_array_creator<uint8_t, 2> m_scrollram;
|
||||
required_memory_bank m_mainbank;
|
||||
memory_view m_videoview;
|
||||
required_memory_bank m_spritebank;
|
||||
memory_share_array_creator<uint8_t, 2> 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<cpu_device> m_mastercpu;
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_slavecpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_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 <uint8_t Which> 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);
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
|
||||
m_spritebank->configure_entry(0, m_spriteram[0]);
|
||||
m_spritebank->configure_entry(1, m_spriteram[1]);
|
||||
|
||||
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 )
|
||||
void jackal_state::draw_background(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint8_t *RAM = memregion("master")->base();
|
||||
int i;
|
||||
|
||||
m_scrollram = &RAM[0x0020];
|
||||
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user