ddribble.cpp, finalizr.cpp, ironhors.cpp: minor cleanups

This commit is contained in:
Ivan Vangelista 2021-05-31 18:23:42 +02:00
parent bfe4aa26da
commit bded3b3861
9 changed files with 506 additions and 516 deletions

View File

@ -9,6 +9,8 @@
2008-08 2008-08
Dip locations and suggested settings verified with US manual. Dip locations and suggested settings verified with US manual.
TODO: using a debug build, the cmd prompt is filled with sound_assert: u32(start) < samples()
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
@ -24,128 +26,108 @@
WRITE_LINE_MEMBER(ddribble_state::vblank_irq) WRITE_LINE_MEMBER(ddribble_state::vblank_irq)
{ {
if (state && m_int_enable_0) if (state && m_int_enable[0])
m_maincpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE); m_maincpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
if (state && m_int_enable_1) if (state && m_int_enable[1])
m_cpu1->set_input_line(M6809_FIRQ_LINE, HOLD_LINE); m_subcpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
} }
void ddribble_state::ddribble_bankswitch_w(uint8_t data) void ddribble_state::bankswitch_w(uint8_t data)
{ {
membank("bank1")->set_entry(data & 0x07); m_mainbank->set_entry(data & 0x07);
} }
uint8_t ddribble_state::ddribble_sharedram_r(offs_t offset) void ddribble_state::coin_counter_w(uint8_t data)
{ {
return m_sharedram[offset]; // b4-b7: unused
// b2-b3: unknown
// b1: coin counter 2
// b0: coin counter 1
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
} }
void ddribble_state::ddribble_sharedram_w(offs_t offset, uint8_t data) uint8_t ddribble_state::vlm5030_busy_r()
{ {
m_sharedram[offset] = data; return machine().rand(); // patch
} // FIXME: remove ?
uint8_t ddribble_state::ddribble_snd_sharedram_r(offs_t offset)
{
return m_snd_sharedram[offset];
}
void ddribble_state::ddribble_snd_sharedram_w(offs_t offset, uint8_t data)
{
m_snd_sharedram[offset] = data;
}
void ddribble_state::ddribble_coin_counter_w(uint8_t data)
{
/* b4-b7: unused */
/* b2-b3: unknown */
/* b1: coin counter 2 */
/* b0: coin counter 1 */
machine().bookkeeping().coin_counter_w(0,(data) & 0x01);
machine().bookkeeping().coin_counter_w(1,(data >> 1) & 0x01);
}
uint8_t ddribble_state::ddribble_vlm5030_busy_r()
{
return machine().rand(); /* patch */
/* FIXME: remove ? */
#if 0 #if 0
if (m_vlm->bsy()) return 1; if (m_vlm->bsy()) return 1;
else return 0; else return 0;
#endif #endif
} }
void ddribble_state::ddribble_vlm5030_ctrl_w(uint8_t data) void ddribble_state::vlm5030_ctrl_w(uint8_t data)
{ {
/* b7 : vlm data bus OE */ // b7 : vlm data bus OE
/* b6 : VLM5030-RST */ // b6 : VLM5030-RST
m_vlm->rst(data & 0x40 ? 1 : 0); m_vlm->rst(BIT(data, 6));
/* b5 : VLM5030-ST */ // b5 : VLM5030-ST
m_vlm->st(data & 0x20 ? 1 : 0); m_vlm->st(BIT(data, 5));
/* b4 : VLM5300-VCU */ // b4 : VLM5300-VCU
m_vlm->vcu(data & 0x10 ? 1 : 0); m_vlm->vcu(BIT(data, 4));
/* b3 : ROM bank select */ // b3 : ROM bank select
membank("vlmbank")->set_entry(data & 0x08 ? 1 : 0); m_vlmbank->set_entry(BIT(data, 3));
/* b2 : SSG-C rc filter enable */ // b2 : SSG-C rc filter enable
m_filter3->filter_rc_set_RC(filter_rc_device::LOWPASS, 1000, 2200, 1000, data & 0x04 ? CAP_N(150) : 0); /* YM2203-SSG-C */ m_filter[2]->filter_rc_set_RC(filter_rc_device::LOWPASS, 1000, 2200, 1000, BIT(data, 2) ? CAP_N(150) : 0); // YM2203-SSG-C
/* b1 : SSG-B rc filter enable */ // b1 : SSG-B rc filter enable
m_filter2->filter_rc_set_RC(filter_rc_device::LOWPASS, 1000, 2200, 1000, data & 0x02 ? CAP_N(150) : 0); /* YM2203-SSG-B */ m_filter[1]->filter_rc_set_RC(filter_rc_device::LOWPASS, 1000, 2200, 1000, BIT(data, 1) ? CAP_N(150) : 0); // YM2203-SSG-B
/* b0 : SSG-A rc filter enable */ // b0 : SSG-A rc filter enable
m_filter1->filter_rc_set_RC(filter_rc_device::LOWPASS, 1000, 2200, 1000, data & 0x01 ? CAP_N(150) : 0); /* YM2203-SSG-A */ m_filter[0]->filter_rc_set_RC(filter_rc_device::LOWPASS, 1000, 2200, 1000, BIT(data, 0) ? CAP_N(150) : 0); // YM2203-SSG-A
} }
void ddribble_state::cpu0_map(address_map &map) void ddribble_state::maincpu_map(address_map &map)
{ {
map(0x0000, 0x0004).w(FUNC(ddribble_state::K005885_0_w)); /* video registers (005885 #1) */ map(0x0000, 0x0004).w(FUNC(ddribble_state::K005885_0_w)); // video registers (005885 #1)
map(0x0800, 0x0804).w(FUNC(ddribble_state::K005885_1_w)); /* video registers (005885 #2) */ map(0x0800, 0x0804).w(FUNC(ddribble_state::K005885_1_w)); // video registers (005885 #2)
map(0x1800, 0x187f).ram().w("palette", FUNC(palette_device::write_indirect)).share("palette"); /* palette */ map(0x1800, 0x187f).ram().w("palette", FUNC(palette_device::write_indirect)).share("palette");
map(0x2000, 0x2fff).ram().w(FUNC(ddribble_state::ddribble_fg_videoram_w)).share("fg_videoram"); /* Video RAM 1 */ map(0x2000, 0x2fff).ram().w(FUNC(ddribble_state::fg_videoram_w)).share(m_fg_videoram); // Video RAM 1
map(0x3000, 0x3fff).ram().share("spriteram_1"); /* Object RAM 1 */ map(0x3000, 0x3fff).ram().share(m_spriteram[0]); // Object RAM 1
map(0x4000, 0x5fff).ram().share("sharedram"); /* shared RAM with CPU #1 */ map(0x4000, 0x5fff).ram().share("sharedram"); // shared RAM with CPU #1
map(0x6000, 0x6fff).ram().w(FUNC(ddribble_state::ddribble_bg_videoram_w)).share("bg_videoram"); /* Video RAM 2 */ map(0x6000, 0x6fff).ram().w(FUNC(ddribble_state::bg_videoram_w)).share(m_bg_videoram); // Video RAM 2
map(0x7000, 0x7fff).ram().share("spriteram_2"); /* Object RAM 2 */ map(0x7000, 0x7fff).ram().share(m_spriteram[1]); // Object RAM 2
map(0x8000, 0x8000).w(FUNC(ddribble_state::ddribble_bankswitch_w)); /* bankswitch control */ map(0x8000, 0x8000).w(FUNC(ddribble_state::bankswitch_w));
map(0x8000, 0x9fff).bankr("bank1"); /* banked ROM */ map(0x8000, 0x9fff).bankr(m_mainbank);
map(0xa000, 0xffff).rom(); /* ROM */ map(0xa000, 0xffff).rom().region("maincpu", 0xa000);
} }
void ddribble_state::cpu1_map(address_map &map) void ddribble_state::subcpu_map(address_map &map)
{ {
map(0x0000, 0x1fff).rw(FUNC(ddribble_state::ddribble_sharedram_r), FUNC(ddribble_state::ddribble_sharedram_w)); /* shared RAM with CPU #0 */ map(0x0000, 0x1fff).ram().share("sharedram"); // shared RAM with CPU #0
map(0x2000, 0x27ff).rw(FUNC(ddribble_state::ddribble_snd_sharedram_r), FUNC(ddribble_state::ddribble_snd_sharedram_w)); /* shared RAM with CPU #2 */ map(0x2000, 0x27ff).ram().share("snd_sharedram"); // shared RAM with CPU #2
map(0x2800, 0x2800).portr("DSW1"); map(0x2800, 0x2800).portr("DSW1");
map(0x2801, 0x2801).portr("P1"); map(0x2801, 0x2801).portr("P1");
map(0x2802, 0x2802).portr("P2"); map(0x2802, 0x2802).portr("P2");
map(0x2803, 0x2803).portr("SYSTEM"); /* coinsw & start */ map(0x2803, 0x2803).portr("SYSTEM"); // coinsw & start
map(0x2c00, 0x2c00).portr("DSW2"); map(0x2c00, 0x2c00).portr("DSW2");
map(0x3000, 0x3000).portr("DSW3"); map(0x3000, 0x3000).portr("DSW3");
map(0x3400, 0x3400).w(FUNC(ddribble_state::ddribble_coin_counter_w)); /* coin counters */ map(0x3400, 0x3400).w(FUNC(ddribble_state::coin_counter_w));
map(0x3c00, 0x3c00).w("watchdog", FUNC(watchdog_timer_device::reset_w)); /* watchdog reset */ map(0x3c00, 0x3c00).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0x8000, 0xffff).rom(); /* ROM */ map(0x8000, 0xffff).rom().region("subcpu", 0);
} }
void ddribble_state::cpu2_map(address_map &map) void ddribble_state::audiocpu_map(address_map &map)
{ {
map(0x0000, 0x07ff).ram().share("snd_sharedram"); /* shared RAM with CPU #1 */ map(0x0000, 0x07ff).ram().share("snd_sharedram"); // shared RAM with CPU #1
map(0x1000, 0x1001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); /* YM2203 */ map(0x1000, 0x1001).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
map(0x3000, 0x3000).w(m_vlm, FUNC(vlm5030_device::data_w)); /* Speech data */ map(0x3000, 0x3000).w(m_vlm, FUNC(vlm5030_device::data_w));
map(0x8000, 0xffff).rom(); /* ROM */ map(0x8000, 0xffff).rom().region("audiocpu", 0);
} }
void ddribble_state::vlm_map(address_map &map) void ddribble_state::vlm_map(address_map &map)
{ {
map(0x0000, 0xffff).bankr("vlmbank"); map(0x0000, 0xffff).bankr(m_vlmbank);
} }
static INPUT_PORTS_START( ddribble ) static INPUT_PORTS_START( ddribble )
@ -164,13 +146,13 @@ static INPUT_PORTS_START( ddribble )
KONAMI_COINAGE_ALT_LOC(SW1) KONAMI_COINAGE_ALT_LOC(SW1)
PORT_START("DSW2") PORT_START("DSW2")
PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW2:1" ) /* Manual says it's Unused */ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW2:1" ) // Manual says it's Unused
PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW2:2" ) /* Manual says it's Unused */ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW2:2" ) // Manual says it's Unused
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) )
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) ) PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) )
PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW2:4" ) /* Manual says it's Unused */ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW2:4" ) // Manual says it's Unused
PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x00, "SW2:5" ) /* Manual says it's Unused */ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x00, "SW2:5" ) // Manual says it's Unused
PORT_DIPNAME( 0x60, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7") PORT_DIPNAME( 0x60, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:6,7")
PORT_DIPSETTING( 0x60, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x60, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x40, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x40, DEF_STR( Normal ) )
@ -184,7 +166,7 @@ static INPUT_PORTS_START( ddribble )
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW3:2" ) /* Manual says it's Unused */ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW3:2" ) // Manual says it's Unused
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW3:3" ) PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW3:3" )
PORT_DIPNAME( 0x08, 0x08, "Allow vs match with 1 Credit" ) PORT_DIPLOCATION("SW3:4") PORT_DIPNAME( 0x08, 0x08, "Allow vs match with 1 Credit" ) PORT_DIPLOCATION("SW3:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
@ -222,58 +204,54 @@ static const gfx_layout spritelayout =
}; };
static GFXDECODE_START( gfx_ddribble ) static GFXDECODE_START( gfx_ddribble )
GFXDECODE_ENTRY( "gfx1", 0x00000, charlayout, 48, 1 ) /* colors 48-63 */ GFXDECODE_ENTRY( "gfx1", 0x00000, charlayout, 48, 1 ) // colors 48-63
GFXDECODE_ENTRY( "gfx2", 0x00000, charlayout, 16, 1 ) /* colors 16-31 */ GFXDECODE_ENTRY( "gfx2", 0x00000, charlayout, 16, 1 ) // colors 16-31
GFXDECODE_ENTRY( "gfx1", 0x20000, spritelayout, 32, 1 ) /* colors 32-47 */ GFXDECODE_ENTRY( "gfx1", 0x20000, spritelayout, 32, 1 ) // colors 32-47
GFXDECODE_ENTRY( "gfx2", 0x40000, spritelayout, 64, 16 ) /* colors 0-15 but using lookup table */ GFXDECODE_ENTRY( "gfx2", 0x40000, spritelayout, 64, 16 ) // colors 0-15 but using lookup table
GFXDECODE_END GFXDECODE_END
void ddribble_state::machine_start() void ddribble_state::machine_start()
{ {
membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base(), 0x2000); m_mainbank->configure_entries(0, 8, memregion("maincpu")->base(), 0x2000);
membank("vlmbank")->configure_entries(0, 2, memregion("vlm")->base(), 0x10000); m_vlmbank->configure_entries(0, 2, memregion("vlm")->base(), 0x10000);
save_item(NAME(m_int_enable_0)); save_item(NAME(m_int_enable));
save_item(NAME(m_int_enable_1)); save_item(NAME(m_vregs));
save_item(NAME(m_vregs[0]));
save_item(NAME(m_vregs[1]));
save_item(NAME(m_charbank)); save_item(NAME(m_charbank));
} }
void ddribble_state::machine_reset() void ddribble_state::machine_reset()
{ {
int i; for (int i = 0; i < 5; i++)
for (i = 0; i < 5; i++)
{ {
m_vregs[0][i] = 0; m_vregs[0][i] = 0;
m_vregs[1][i] = 0; m_vregs[1][i] = 0;
} }
m_int_enable_0 = 0; m_int_enable[0] = 0;
m_int_enable_1 = 0; m_int_enable[1] = 0;
m_charbank[0] = 0; m_charbank[0] = 0;
m_charbank[1] = 0; m_charbank[1] = 0;
} }
void ddribble_state::ddribble(machine_config &config) void ddribble_state::ddribble(machine_config &config)
{ {
/* basic machine hardware */ // basic machine hardware
MC6809E(config, m_maincpu, XTAL(18'432'000)/12); /* verified on pcb */ MC6809E(config, m_maincpu, XTAL(18'432'000)/12); // verified on pcb
m_maincpu->set_addrmap(AS_PROGRAM, &ddribble_state::cpu0_map); m_maincpu->set_addrmap(AS_PROGRAM, &ddribble_state::maincpu_map);
MC6809E(config, m_cpu1, XTAL(18'432'000)/12); /* verified on pcb */ MC6809E(config, m_subcpu, XTAL(18'432'000)/12); // verified on pcb
m_cpu1->set_addrmap(AS_PROGRAM, &ddribble_state::cpu1_map); m_subcpu->set_addrmap(AS_PROGRAM, &ddribble_state::subcpu_map);
mc6809e_device &cpu2(MC6809E(config, "cpu2", XTAL(18'432'000)/12)); /* verified on pcb */ mc6809e_device &audiocpu(MC6809E(config, "audiocpu", XTAL(18'432'000)/12)); // verified on pcb
cpu2.set_addrmap(AS_PROGRAM, &ddribble_state::cpu2_map); audiocpu.set_addrmap(AS_PROGRAM, &ddribble_state::audiocpu_map);
config.set_maximum_quantum(attotime::from_hz(6000)); /* we need heavy synch */ config.set_maximum_quantum(attotime::from_hz(6000)); // we need heavy synch
WATCHDOG_TIMER(config, "watchdog"); WATCHDOG_TIMER(config, "watchdog");
/* video hardware */ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60); screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
@ -281,60 +259,60 @@ void ddribble_state::ddribble(machine_config &config)
screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
/* screen.set_size(64*8, 32*8); /* screen.set_size(64*8, 32*8);
screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); */ screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); */
screen.set_screen_update(FUNC(ddribble_state::screen_update_ddribble)); screen.set_screen_update(FUNC(ddribble_state::screen_update));
screen.set_palette("palette"); screen.set_palette("palette");
screen.screen_vblank().set(FUNC(ddribble_state::vblank_irq)); screen.screen_vblank().set(FUNC(ddribble_state::vblank_irq));
GFXDECODE(config, m_gfxdecode, "palette", gfx_ddribble); GFXDECODE(config, m_gfxdecode, "palette", gfx_ddribble);
PALETTE(config, "palette", FUNC(ddribble_state::ddribble_palette)).set_format(palette_device::xBGR_555, 64 + 256, 64); PALETTE(config, "palette", FUNC(ddribble_state::palette)).set_format(palette_device::xBGR_555, 64 + 256, 64);
/* sound hardware */ // sound hardware
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(3'579'545))); /* verified on pcb */ ym2203_device &ymsnd(YM2203(config, "ymsnd", XTAL(3'579'545))); // verified on pcb
ymsnd.port_b_read_callback().set(FUNC(ddribble_state::ddribble_vlm5030_busy_r)); ymsnd.port_b_read_callback().set(FUNC(ddribble_state::vlm5030_busy_r));
ymsnd.port_a_write_callback().set(FUNC(ddribble_state::ddribble_vlm5030_ctrl_w)); ymsnd.port_a_write_callback().set(FUNC(ddribble_state::vlm5030_ctrl_w));
ymsnd.add_route(0, "filter1", 0.25); ymsnd.add_route(0, "filter1", 0.25);
ymsnd.add_route(1, "filter2", 0.25); ymsnd.add_route(1, "filter2", 0.25);
ymsnd.add_route(2, "filter3", 0.25); ymsnd.add_route(2, "filter3", 0.25);
ymsnd.add_route(3, "mono", 0.25); ymsnd.add_route(3, "mono", 0.25);
VLM5030(config, m_vlm, XTAL(3'579'545)); /* verified on pcb */ VLM5030(config, m_vlm, XTAL(3'579'545)); // verified on pcb
m_vlm->add_route(ALL_OUTPUTS, "mono", 1.0); m_vlm->add_route(ALL_OUTPUTS, "mono", 1.0);
m_vlm->set_addrmap(0, &ddribble_state::vlm_map); m_vlm->set_addrmap(0, &ddribble_state::vlm_map);
FILTER_RC(config, m_filter1).add_route(ALL_OUTPUTS, "mono", 1.0); FILTER_RC(config, m_filter[0]).add_route(ALL_OUTPUTS, "mono", 1.0);
FILTER_RC(config, m_filter2).add_route(ALL_OUTPUTS, "mono", 1.0); FILTER_RC(config, m_filter[1]).add_route(ALL_OUTPUTS, "mono", 1.0);
FILTER_RC(config, m_filter3).add_route(ALL_OUTPUTS, "mono", 1.0); FILTER_RC(config, m_filter[2]).add_route(ALL_OUTPUTS, "mono", 1.0);
} }
ROM_START( ddribble ) ROM_START( ddribble )
ROM_REGION( 0x10000, "maincpu", 0 ) /* 64K for the CPU #0 */ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "690c03.bin", 0x00000, 0x10000, CRC(07975a58) SHA1(96fd1b2348bbdf560067d8ee3cd4c0514e263d7a) ) ROM_LOAD( "690c03.bin", 0x00000, 0x10000, CRC(07975a58) SHA1(96fd1b2348bbdf560067d8ee3cd4c0514e263d7a) )
ROM_REGION( 0x10000, "cpu1", 0 ) /* 64 for the CPU #1 */ ROM_REGION( 0x8000, "subcpu", 0 )
ROM_LOAD( "690c02.bin", 0x08000, 0x08000, CRC(f07c030a) SHA1(db96a10f8bb657bf285266db9e775fa6af82f38c) ) ROM_LOAD( "690c02.bin", 0x0000, 0x8000, CRC(f07c030a) SHA1(db96a10f8bb657bf285266db9e775fa6af82f38c) )
ROM_REGION( 0x10000, "cpu2", 0 ) /* 64k for the SOUND CPU */ ROM_REGION( 0x8000, "audiocpu", 0 )
ROM_LOAD( "690b01.bin", 0x08000, 0x08000, CRC(806b8453) SHA1(3184772c5e5181438a17ac72129070bf164b2965) ) ROM_LOAD( "690b01.bin", 0x0000, 0x8000, CRC(806b8453) SHA1(3184772c5e5181438a17ac72129070bf164b2965) )
ROM_REGION( 0x40000, "gfx1", 0 ) ROM_REGION( 0x40000, "gfx1", 0 )
ROM_LOAD16_BYTE( "690a05.bin", 0x00000, 0x20000, CRC(6a816d0d) SHA1(73f2527d5f2b9d51b784be36e07e0d0c566a28d9) ) /* characters & objects */ ROM_LOAD16_BYTE( "690a05.bin", 0x00000, 0x20000, CRC(6a816d0d) SHA1(73f2527d5f2b9d51b784be36e07e0d0c566a28d9) ) // characters & objects
ROM_LOAD16_BYTE( "690a06.bin", 0x00001, 0x20000, CRC(46300cd0) SHA1(07197a546fff452a41575fcd481da64ac6bf601e) ) ROM_LOAD16_BYTE( "690a06.bin", 0x00001, 0x20000, CRC(46300cd0) SHA1(07197a546fff452a41575fcd481da64ac6bf601e) )
ROM_REGION( 0x80000, "gfx2", 0 ) ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "690a10.bin", 0x00000, 0x20000, CRC(61efa222) SHA1(bd7b993ad1c06d8f6ac29fbc07c4a987abe1ab42) ) /* characters */ ROM_LOAD16_BYTE( "690a10.bin", 0x00000, 0x20000, CRC(61efa222) SHA1(bd7b993ad1c06d8f6ac29fbc07c4a987abe1ab42) ) // characters
ROM_LOAD16_BYTE( "690a09.bin", 0x00001, 0x20000, CRC(ab682186) SHA1(a28982835042a07354557e1539b097cdf93fc466) ) ROM_LOAD16_BYTE( "690a09.bin", 0x00001, 0x20000, CRC(ab682186) SHA1(a28982835042a07354557e1539b097cdf93fc466) )
ROM_LOAD16_BYTE( "690a08.bin", 0x40000, 0x20000, CRC(9a889944) SHA1(ca96815aefb1e336bd2288841b00a5c21cacf90f) ) /* objects */ ROM_LOAD16_BYTE( "690a08.bin", 0x40000, 0x20000, CRC(9a889944) SHA1(ca96815aefb1e336bd2288841b00a5c21cacf90f) ) // objects
ROM_LOAD16_BYTE( "690a07.bin", 0x40001, 0x20000, CRC(faf81b3f) SHA1(0bd647b4cdd3f2209472e303fd22eedd5533d1b1) ) ROM_LOAD16_BYTE( "690a07.bin", 0x40001, 0x20000, CRC(faf81b3f) SHA1(0bd647b4cdd3f2209472e303fd22eedd5533d1b1) )
ROM_REGION( 0x0100, "proms", 0 ) ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "690a11.i15", 0x0000, 0x0100, CRC(f34617ad) SHA1(79ceba6fe204472a5a659641ac4f14bb1f0ee3f6) ) /* sprite lookup table */ ROM_LOAD( "690a11.i15", 0x0000, 0x0100, CRC(f34617ad) SHA1(79ceba6fe204472a5a659641ac4f14bb1f0ee3f6) ) // sprite lookup table
ROM_REGION( 0x20000, "vlm", 0 ) /* 128k for the VLM5030 data */ ROM_REGION( 0x20000, "vlm", 0 ) // 128k for the VLM5030 data
ROM_LOAD( "690a04.bin", 0x00000, 0x20000, CRC(1bfeb763) SHA1(f3e9acb2a7a9b4c8dee6838c1344a7a65c27ff77) ) ROM_LOAD( "690a04.bin", 0x00000, 0x20000, CRC(1bfeb763) SHA1(f3e9acb2a7a9b4c8dee6838c1344a7a65c27ff77) )
ROM_REGION( 0x0100, "plds", 0 ) ROM_REGION( 0x0100, "plds", 0 )
@ -342,35 +320,35 @@ ROM_START( ddribble )
ROM_END ROM_END
ROM_START( ddribblep ) ROM_START( ddribblep )
ROM_REGION( 0x10000, "maincpu", 0 ) /* 64K for the CPU #0 */ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ebs_11-19.c19", 0x00000, 0x10000, CRC(0a81c926) SHA1(1ecd30f0d352cf6c96d246bb443b5a6738624b9b) ) ROM_LOAD( "ebs_11-19.c19", 0x00000, 0x10000, CRC(0a81c926) SHA1(1ecd30f0d352cf6c96d246bb443b5a6738624b9b) )
ROM_REGION( 0x10000, "cpu1", 0 ) /* 64 for the CPU #1 */ ROM_REGION( 0x8000, "subcpu", 0 )
ROM_LOAD( "eb_11-19.c12", 0x08000, 0x08000, CRC(22130292) SHA1(a5f9bf3f63ff85d171f096867433513419458b0e) ) ROM_LOAD( "eb_11-19.c12", 0x0000, 0x8000, CRC(22130292) SHA1(a5f9bf3f63ff85d171f096867433513419458b0e) )
ROM_REGION( 0x10000, "cpu2", 0 ) /* 64k for the SOUND CPU */ ROM_REGION( 0x8000, "audiocpu", 0 )
ROM_LOAD( "master_sound.a6", 0x08000, 0x08000, CRC(090e3a31) SHA1(4c645b55d52abb859354ea2ea401e4ab99f5d493) ) ROM_LOAD( "master_sound.a6", 0x0000, 0x8000, CRC(090e3a31) SHA1(4c645b55d52abb859354ea2ea401e4ab99f5d493) )
ROM_REGION( 0x40000, "gfx1", 0 ) /* same content as parent */ ROM_REGION( 0x40000, "gfx1", 0 ) // same content as parent
ROM_LOAD16_BYTE( "v1a.e12", 0x00000, 0x10000, CRC(53724765) SHA1(55a45ab71f7bf55ed805d4dc2345cadc4171f323) ) /* characters & objects */ ROM_LOAD16_BYTE( "v1a.e12", 0x00000, 0x10000, CRC(53724765) SHA1(55a45ab71f7bf55ed805d4dc2345cadc4171f323) ) // characters & objects
ROM_LOAD16_BYTE( "01a.e11", 0x20000, 0x10000, CRC(1ae5d725) SHA1(d8dd41cc1872c6d218cc425d1cd03f8d8eefe3e3) ) /* characters & objects */ ROM_LOAD16_BYTE( "01a.e11", 0x20000, 0x10000, CRC(1ae5d725) SHA1(d8dd41cc1872c6d218cc425d1cd03f8d8eefe3e3) ) // characters & objects
ROM_LOAD16_BYTE( "v1b.e13", 0x00001, 0x10000, CRC(d9dc6f1a) SHA1(f50169525c5109ba65acdccbb01dddb92926462a) ) ROM_LOAD16_BYTE( "v1b.e13", 0x00001, 0x10000, CRC(d9dc6f1a) SHA1(f50169525c5109ba65acdccbb01dddb92926462a) )
ROM_LOAD16_BYTE( "01b.d14", 0x20001, 0x10000, CRC(054c5242) SHA1(411389e36d33fd27e13ffc6a7d4b295a42f08869) ) ROM_LOAD16_BYTE( "01b.d14", 0x20001, 0x10000, CRC(054c5242) SHA1(411389e36d33fd27e13ffc6a7d4b295a42f08869) )
ROM_REGION( 0x80000, "gfx2", 0 ) /* same content as parent */ ROM_REGION( 0x80000, "gfx2", 0 ) // same content as parent
ROM_LOAD16_BYTE( "v2a00.i13", 0x00000, 0x10000, CRC(a33f7d6d) SHA1(c2b9a9a66e4712785250cad69a5e43338af60a82) ) /* characters */ ROM_LOAD16_BYTE( "v2a00.i13", 0x00000, 0x10000, CRC(a33f7d6d) SHA1(c2b9a9a66e4712785250cad69a5e43338af60a82) ) // characters
ROM_LOAD16_BYTE( "v2a10.h13", 0x20000, 0x10000, CRC(8fbc7454) SHA1(93782d148afe64b14fa46deb4d227ef167030c94) ) /* characters */ ROM_LOAD16_BYTE( "v2a10.h13", 0x20000, 0x10000, CRC(8fbc7454) SHA1(93782d148afe64b14fa46deb4d227ef167030c94) ) // characters
ROM_LOAD16_BYTE( "v2b00.i12", 0x00001, 0x10000, CRC(e63759bb) SHA1(df7e94f40266aa8995509346cdfdce08a885de16) ) ROM_LOAD16_BYTE( "v2b00.i12", 0x00001, 0x10000, CRC(e63759bb) SHA1(df7e94f40266aa8995509346cdfdce08a885de16) )
ROM_LOAD16_BYTE( "v2b10.h12", 0x20001, 0x10000, CRC(8a7d4062) SHA1(5b5eb4edc765f0e13e22f9de62ddae7380ba3790) ) ROM_LOAD16_BYTE( "v2b10.h12", 0x20001, 0x10000, CRC(8a7d4062) SHA1(5b5eb4edc765f0e13e22f9de62ddae7380ba3790) )
ROM_LOAD16_BYTE( "02a00.i11", 0x40000, 0x10000, CRC(6751a942) SHA1(a71c9cbbf1fba92664144d571d49cf2c15f45408) ) /* objects */ ROM_LOAD16_BYTE( "02a00.i11", 0x40000, 0x10000, CRC(6751a942) SHA1(a71c9cbbf1fba92664144d571d49cf2c15f45408) ) // objects
ROM_LOAD16_BYTE( "02a10.h11", 0x60000, 0x10000, CRC(bc5ff11c) SHA1(b02296982298e1a659ce05606b291eda9a605cc8) ) /* objects */ ROM_LOAD16_BYTE( "02a10.h11", 0x60000, 0x10000, CRC(bc5ff11c) SHA1(b02296982298e1a659ce05606b291eda9a605cc8) ) // objects
ROM_LOAD16_BYTE( "02b00_11-4.i8.bin", 0x40001, 0x10000, CRC(460aa7b4) SHA1(9e928d6150e7a91d411c0510198e80d523a88272) ) ROM_LOAD16_BYTE( "02b00_11-4.i8.bin", 0x40001, 0x10000, CRC(460aa7b4) SHA1(9e928d6150e7a91d411c0510198e80d523a88272) )
ROM_LOAD16_BYTE( "02b10.h8", 0x60001, 0x10000, CRC(2cc7ee28) SHA1(c96890383dbef755953f851a43449cf563e2e1a5) ) ROM_LOAD16_BYTE( "02b10.h8", 0x60001, 0x10000, CRC(2cc7ee28) SHA1(c96890383dbef755953f851a43449cf563e2e1a5) )
ROM_REGION( 0x0100, "proms", 0 ) ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "6301-1.i15", 0x0000, 0x0100, CRC(f34617ad) SHA1(79ceba6fe204472a5a659641ac4f14bb1f0ee3f6) ) /* sprite lookup table */ ROM_LOAD( "6301-1.i15", 0x0000, 0x0100, CRC(f34617ad) SHA1(79ceba6fe204472a5a659641ac4f14bb1f0ee3f6) ) // sprite lookup table
ROM_REGION( 0x20000, "vlm", 0 ) /* same content as parent */ /* 128k for the VLM5030 data */ ROM_REGION( 0x20000, "vlm", 0 ) // same content as parent, 128k for the VLM5030 data
ROM_LOAD( "voice_00.e7", 0x00000, 0x10000, CRC(8bd0fcf7) SHA1(d55644f8b33eff6f960725f00ba842e0253e3b36) ) ROM_LOAD( "voice_00.e7", 0x00000, 0x10000, CRC(8bd0fcf7) SHA1(d55644f8b33eff6f960725f00ba842e0253e3b36) )
ROM_LOAD( "voice_10.d7", 0x10000, 0x10000, CRC(b4c97494) SHA1(93f7c3c93f6f790c3f480e183da0105b5ac3593b) ) ROM_LOAD( "voice_10.d7", 0x10000, 0x10000, CRC(b4c97494) SHA1(93f7c3c93f6f790c3f480e183da0105b5ac3593b) )
ROM_END ROM_END

View File

@ -27,7 +27,7 @@
#include "speaker.h" #include "speaker.h"
TIMER_DEVICE_CALLBACK_MEMBER(finalizr_state::finalizr_scanline) TIMER_DEVICE_CALLBACK_MEMBER(finalizr_state::scanline)
{ {
int scanline = param; int scanline = param;
@ -38,20 +38,20 @@ TIMER_DEVICE_CALLBACK_MEMBER(finalizr_state::finalizr_scanline)
} }
void finalizr_state::finalizr_videoctrl_w(uint8_t data) void finalizr_state::videoctrl_w(uint8_t data)
{ {
m_charbank = data & 3; m_charbank = data & 3;
m_spriterambank = data & 8; m_spriterambank = data & 8;
/* other bits unknown */ // other bits unknown
} }
void finalizr_state::finalizr_coin_w(uint8_t data) void finalizr_state::coin_w(uint8_t data)
{ {
machine().bookkeeping().coin_counter_w(0, data & 0x01); machine().bookkeeping().coin_counter_w(0, data & 0x01);
machine().bookkeeping().coin_counter_w(1, data & 0x02); machine().bookkeeping().coin_counter_w(1, data & 0x02);
} }
void finalizr_state::finalizr_flipscreen_w(uint8_t data) void finalizr_state::flipscreen_w(uint8_t data)
{ {
m_nmi_enable = data & 0x01; m_nmi_enable = data & 0x01;
m_irq_enable = data & 0x02; m_irq_enable = data & 0x02;
@ -59,7 +59,7 @@ void finalizr_state::finalizr_flipscreen_w(uint8_t data)
flip_screen_set(~data & 0x08); flip_screen_set(~data & 0x08);
} }
void finalizr_state::finalizr_i8039_irq_w(uint8_t data) void finalizr_state::i8039_irq_w(uint8_t data)
{ {
m_audiocpu->set_input_line(0, ASSERT_LINE); m_audiocpu->set_input_line(0, ASSERT_LINE);
} }
@ -87,9 +87,9 @@ READ_LINE_MEMBER(finalizr_state::i8039_t1_r)
based on the I8039 main xtal clock input frequency of 9.216MHz based on the I8039 main xtal clock input frequency of 9.216MHz
*/ */
m_T1_line++; m_t1_line++;
m_T1_line %= 16; m_t1_line %= 16;
return (!(m_T1_line % 3) && (m_T1_line > 0)); return (!(m_t1_line % 3) && (m_t1_line > 0));
} }
void finalizr_state::i8039_t0_w(uint8_t data) void finalizr_state::i8039_t0_w(uint8_t data)
@ -104,10 +104,10 @@ void finalizr_state::i8039_t0_w(uint8_t data)
void finalizr_state::main_map(address_map &map) void finalizr_state::main_map(address_map &map)
{ {
map(0x0001, 0x0001).writeonly().share("scroll"); map(0x0001, 0x0001).writeonly().share(m_scroll);
map(0x0003, 0x0003).w(FUNC(finalizr_state::finalizr_videoctrl_w)); map(0x0003, 0x0003).w(FUNC(finalizr_state::videoctrl_w));
map(0x0004, 0x0004).w(FUNC(finalizr_state::finalizr_flipscreen_w)); map(0x0004, 0x0004).w(FUNC(finalizr_state::flipscreen_w));
// map(0x0020, 0x003f).writeonly().share("scroll"); // map(0x0020, 0x003f).writeonly().share(m_scroll);
map(0x0800, 0x0800).portr("DSW3"); map(0x0800, 0x0800).portr("DSW3");
map(0x0808, 0x0808).portr("DSW2"); map(0x0808, 0x0808).portr("DSW2");
map(0x0810, 0x0810).portr("SYSTEM"); map(0x0810, 0x0810).portr("SYSTEM");
@ -115,18 +115,18 @@ void finalizr_state::main_map(address_map &map)
map(0x0812, 0x0812).portr("P2"); map(0x0812, 0x0812).portr("P2");
map(0x0813, 0x0813).portr("DSW1"); map(0x0813, 0x0813).portr("DSW1");
map(0x0818, 0x0818).w("watchdog", FUNC(watchdog_timer_device::reset_w)); map(0x0818, 0x0818).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0x0819, 0x0819).w(FUNC(finalizr_state::finalizr_coin_w)); map(0x0819, 0x0819).w(FUNC(finalizr_state::coin_w));
map(0x081a, 0x081a).w("snsnd", FUNC(sn76489a_device::write)); /* This address triggers the SN chip to read the data port. */ map(0x081a, 0x081a).w("snsnd", FUNC(sn76489a_device::write)); // This address triggers the SN chip to read the data port.
map(0x081b, 0x081b).nopw(); /* Loads the snd command into the snd latch */ map(0x081b, 0x081b).nopw(); // Loads the snd command into the snd latch
map(0x081c, 0x081c).w(FUNC(finalizr_state::finalizr_i8039_irq_w)); /* custom sound chip */ map(0x081c, 0x081c).w(FUNC(finalizr_state::i8039_irq_w)); // custom sound chip
map(0x081d, 0x081d).w("soundlatch", FUNC(generic_latch_8_device::write)); /* custom sound chip */ map(0x081d, 0x081d).w("soundlatch", FUNC(generic_latch_8_device::write)); // custom sound chip
map(0x2000, 0x23ff).ram().share("colorram"); map(0x2000, 0x23ff).ram().share(m_colorram[0]);
map(0x2400, 0x27ff).ram().share("videoram"); map(0x2400, 0x27ff).ram().share(m_videoram[0]);
map(0x2800, 0x2bff).ram().share("colorram2"); map(0x2800, 0x2bff).ram().share(m_colorram[1]);
map(0x2c00, 0x2fff).ram().share("videoram2"); map(0x2c00, 0x2fff).ram().share(m_videoram[1]);
map(0x3000, 0x31ff).ram().share("spriteram"); map(0x3000, 0x31ff).ram().share(m_spriteram[0]);
map(0x3200, 0x37ff).ram(); map(0x3200, 0x37ff).ram();
map(0x3800, 0x39ff).ram().share("spriteram_2"); map(0x3800, 0x39ff).ram().share(m_spriteram[1]);
map(0x3a00, 0x3fff).ram(); map(0x3a00, 0x3fff).ram();
map(0x4000, 0xffff).rom(); map(0x4000, 0xffff).rom();
} }
@ -157,7 +157,7 @@ static INPUT_PORTS_START( finalizr )
PORT_START("DSW1") PORT_START("DSW1")
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1) 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_START("DSW2")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
@ -239,7 +239,7 @@ static const gfx_layout spritelayout =
static GFXDECODE_START( gfx_finalizr ) static GFXDECODE_START( gfx_finalizr )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 16*16, 16 ) GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 16*16, 16 )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 16*16, 16 ) /* to handle 8x8 sprites */ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 16*16, 16 ) // to handle 8x8 sprites
GFXDECODE_END GFXDECODE_END
@ -247,7 +247,7 @@ void finalizr_state::machine_start()
{ {
save_item(NAME(m_spriterambank)); save_item(NAME(m_spriterambank));
save_item(NAME(m_charbank)); save_item(NAME(m_charbank));
save_item(NAME(m_T1_line)); save_item(NAME(m_t1_line));
save_item(NAME(m_nmi_enable)); save_item(NAME(m_nmi_enable));
save_item(NAME(m_irq_enable)); save_item(NAME(m_irq_enable));
} }
@ -256,19 +256,19 @@ void finalizr_state::machine_reset()
{ {
m_spriterambank = 0; m_spriterambank = 0;
m_charbank = 0; m_charbank = 0;
m_T1_line = 0; m_t1_line = 0;
m_nmi_enable = 0; m_nmi_enable = 0;
m_irq_enable = 0; m_irq_enable = 0;
} }
void finalizr_state::finalizr(machine_config &config) void finalizr_state::finalizr(machine_config &config)
{ {
/* basic machine hardware */ // basic machine hardware
KONAMI1(config, m_maincpu, XTAL(18'432'000)/6); /* ??? */ KONAMI1(config, m_maincpu, XTAL(18'432'000)/6); // ???
m_maincpu->set_addrmap(AS_PROGRAM, &finalizr_state::main_map); m_maincpu->set_addrmap(AS_PROGRAM, &finalizr_state::main_map);
TIMER(config, "scantimer").configure_scanline(FUNC(finalizr_state::finalizr_scanline), "screen", 0, 1); TIMER(config, "scantimer").configure_scanline(FUNC(finalizr_state::scanline), "screen", 0, 1);
I8039(config, m_audiocpu, XTAL(18'432'000)/2); /* 9.216MHz clkin ?? */ I8039(config, m_audiocpu, XTAL(18'432'000)/2); // 9.216MHz clkin ??
m_audiocpu->set_addrmap(AS_PROGRAM, &finalizr_state::sound_map); m_audiocpu->set_addrmap(AS_PROGRAM, &finalizr_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &finalizr_state::sound_io_map); m_audiocpu->set_addrmap(AS_IO, &finalizr_state::sound_io_map);
m_audiocpu->p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w)); m_audiocpu->p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w));
@ -278,19 +278,19 @@ void finalizr_state::finalizr(machine_config &config)
WATCHDOG_TIMER(config, "watchdog"); WATCHDOG_TIMER(config, "watchdog");
/* video hardware */ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60); screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
screen.set_size(36*8, 32*8); screen.set_size(36*8, 32*8);
screen.set_visarea(1*8, 35*8-1, 2*8, 30*8-1); screen.set_visarea(1*8, 35*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(finalizr_state::screen_update_finalizr)); screen.set_screen_update(FUNC(finalizr_state::screen_update));
screen.set_palette(m_palette); screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_finalizr); GFXDECODE(config, m_gfxdecode, m_palette, gfx_finalizr);
PALETTE(config, m_palette, FUNC(finalizr_state::finalizr_palette), 2*16*16, 32); PALETTE(config, m_palette, FUNC(finalizr_state::palette), 2*16*16, 32);
/* sound hardware */ // sound hardware
SPEAKER(config, "speaker").front_center(); SPEAKER(config, "speaker").front_center();
GENERIC_LATCH_8(config, "soundlatch"); GENERIC_LATCH_8(config, "soundlatch");
@ -314,8 +314,8 @@ ROM_START( finalizr )
ROM_LOAD( "523k02.12c", 0x8000, 0x4000, CRC(1bccc696) SHA1(3c29f4a030e76660b5a25347e042e344b0653343) ) ROM_LOAD( "523k02.12c", 0x8000, 0x4000, CRC(1bccc696) SHA1(3c29f4a030e76660b5a25347e042e344b0653343) )
ROM_LOAD( "523k03.13c", 0xc000, 0x4000, CRC(c48927c6) SHA1(9cf6b285034670370ba0246c33e1fe0a057457e7) ) ROM_LOAD( "523k03.13c", 0xc000, 0x4000, CRC(c48927c6) SHA1(9cf6b285034670370ba0246c33e1fe0a057457e7) )
ROM_REGION( 0x1000, "audiocpu", 0 ) /* 8039 */ ROM_REGION( 0x1000, "audiocpu", 0 ) // 8039
ROM_LOAD( "d8749hd.bin", 0x0000, 0x0800, BAD_DUMP CRC(978dfc33) SHA1(13d24ce577b88bf6ec2e970d36dc67a7ec691c55) ) /* this comes from the bootleg, the original has a custom IC */ ROM_LOAD( "d8749hd.bin", 0x0000, 0x0800, BAD_DUMP CRC(978dfc33) SHA1(13d24ce577b88bf6ec2e970d36dc67a7ec691c55) ) // this comes from the bootleg, the original has a custom IC
ROM_REGION( 0x20000, "gfx1", 0 ) ROM_REGION( 0x20000, "gfx1", 0 )
ROM_LOAD16_BYTE( "523h04.5e", 0x00000, 0x4000, CRC(c056d710) SHA1(3fe0ab7ef3bce7298c2a073d0985c33f9dc40062) ) ROM_LOAD16_BYTE( "523h04.5e", 0x00000, 0x4000, CRC(c056d710) SHA1(3fe0ab7ef3bce7298c2a073d0985c33f9dc40062) )
@ -324,13 +324,13 @@ ROM_START( finalizr )
ROM_LOAD16_BYTE( "523h08.6f", 0x08001, 0x4000, CRC(79f44e17) SHA1(cb32edc4df9f2209f13fc258fec4e67ee91badef) ) ROM_LOAD16_BYTE( "523h08.6f", 0x08001, 0x4000, CRC(79f44e17) SHA1(cb32edc4df9f2209f13fc258fec4e67ee91badef) )
ROM_LOAD16_BYTE( "523h06.7e", 0x10000, 0x4000, CRC(d2db9689) SHA1(ceb5913716b4da2ddff2e837ddaa04d91e52f9e1) ) ROM_LOAD16_BYTE( "523h06.7e", 0x10000, 0x4000, CRC(d2db9689) SHA1(ceb5913716b4da2ddff2e837ddaa04d91e52f9e1) )
ROM_LOAD16_BYTE( "523h09.7f", 0x10001, 0x4000, CRC(8896dc85) SHA1(91493c6b69655de482f0c2a0cb3662fc0d1b6e45) ) ROM_LOAD16_BYTE( "523h09.7f", 0x10001, 0x4000, CRC(8896dc85) SHA1(91493c6b69655de482f0c2a0cb3662fc0d1b6e45) )
/* 18000-1ffff empty */ // 18000-1ffff empty
ROM_REGION( 0x0240, "proms", 0 ) /* PROMs at 2F & 3F are MMI 63S081N (or compatibles), PROMs at 10F & 11F are MMI 6301-1N (or compatibles) */ ROM_REGION( 0x0240, "proms", 0 ) // PROMs at 2F & 3F are MMI 63S081N (or compatibles), PROMs at 10F & 11F are MMI 6301-1N (or compatibles)
ROM_LOAD( "523h10.2f", 0x0000, 0x0020, CRC(ec15dd15) SHA1(710384b154a9363fdc88edffda252f1d60e000dc) ) /* palette */ ROM_LOAD( "523h10.2f", 0x0000, 0x0020, CRC(ec15dd15) SHA1(710384b154a9363fdc88edffda252f1d60e000dc) ) // palette
ROM_LOAD( "523h11.3f", 0x0020, 0x0020, CRC(54be2e83) SHA1(3200abc7f2238d62d7204ef57a6daa2df150538d) ) /* palette */ ROM_LOAD( "523h11.3f", 0x0020, 0x0020, CRC(54be2e83) SHA1(3200abc7f2238d62d7204ef57a6daa2df150538d) ) // palette
ROM_LOAD( "523h13.11f", 0x0040, 0x0100, CRC(4e0647a0) SHA1(fb87f878456b8b76bb2c028cb890d2a5c1c3e388) ) /* characters */ ROM_LOAD( "523h13.11f", 0x0040, 0x0100, CRC(4e0647a0) SHA1(fb87f878456b8b76bb2c028cb890d2a5c1c3e388) ) // characters
ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) /* sprites */ ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) // sprites
ROM_END ROM_END
ROM_START( finalizra ) ROM_START( finalizra )
@ -339,8 +339,8 @@ ROM_START( finalizra )
ROM_LOAD( "2.12c", 0x8000, 0x4000, CRC(383dc94e) SHA1(f192e16e83ae34cc97af07072a4dc68e7c4c362c) ) ROM_LOAD( "2.12c", 0x8000, 0x4000, CRC(383dc94e) SHA1(f192e16e83ae34cc97af07072a4dc68e7c4c362c) )
ROM_LOAD( "3.13c", 0xc000, 0x4000, CRC(ce177f6e) SHA1(034cbe0c1e2baf9577741b3c222a8b4a8ac8c919) ) ROM_LOAD( "3.13c", 0xc000, 0x4000, CRC(ce177f6e) SHA1(034cbe0c1e2baf9577741b3c222a8b4a8ac8c919) )
ROM_REGION( 0x1000, "audiocpu", 0 ) /* 8039 */ ROM_REGION( 0x1000, "audiocpu", 0 ) // 8039
ROM_LOAD( "d8749hd.bin", 0x0000, 0x0800, BAD_DUMP CRC(978dfc33) SHA1(13d24ce577b88bf6ec2e970d36dc67a7ec691c55) ) /* this comes from the bootleg, the original has a custom IC */ ROM_LOAD( "d8749hd.bin", 0x0000, 0x0800, BAD_DUMP CRC(978dfc33) SHA1(13d24ce577b88bf6ec2e970d36dc67a7ec691c55) ) // this comes from the bootleg, the original has a custom IC
ROM_REGION( 0x20000, "gfx1", 0 ) ROM_REGION( 0x20000, "gfx1", 0 )
ROM_LOAD16_BYTE( "523h04.5e", 0x00000, 0x4000, CRC(c056d710) SHA1(3fe0ab7ef3bce7298c2a073d0985c33f9dc40062) ) ROM_LOAD16_BYTE( "523h04.5e", 0x00000, 0x4000, CRC(c056d710) SHA1(3fe0ab7ef3bce7298c2a073d0985c33f9dc40062) )
@ -349,13 +349,13 @@ ROM_START( finalizra )
ROM_LOAD16_BYTE( "523h08.6f", 0x08001, 0x4000, CRC(79f44e17) SHA1(cb32edc4df9f2209f13fc258fec4e67ee91badef) ) ROM_LOAD16_BYTE( "523h08.6f", 0x08001, 0x4000, CRC(79f44e17) SHA1(cb32edc4df9f2209f13fc258fec4e67ee91badef) )
ROM_LOAD16_BYTE( "523h06.7e", 0x10000, 0x4000, CRC(d2db9689) SHA1(ceb5913716b4da2ddff2e837ddaa04d91e52f9e1) ) ROM_LOAD16_BYTE( "523h06.7e", 0x10000, 0x4000, CRC(d2db9689) SHA1(ceb5913716b4da2ddff2e837ddaa04d91e52f9e1) )
ROM_LOAD16_BYTE( "523h09.7f", 0x10001, 0x4000, CRC(8896dc85) SHA1(91493c6b69655de482f0c2a0cb3662fc0d1b6e45) ) ROM_LOAD16_BYTE( "523h09.7f", 0x10001, 0x4000, CRC(8896dc85) SHA1(91493c6b69655de482f0c2a0cb3662fc0d1b6e45) )
/* 18000-1ffff empty */ // 18000-1ffff empty
ROM_REGION( 0x0240, "proms", 0 ) /* PROMs at 2F & 3F are MMI 63S081N (or compatibles), PROMs at 10F & 11F are MMI 6301-1N (or compatibles) */ ROM_REGION( 0x0240, "proms", 0 ) // PROMs at 2F & 3F are MMI 63S081N (or compatibles), PROMs at 10F & 11F are MMI 6301-1N (or compatibles)
ROM_LOAD( "523h10.2f", 0x0000, 0x0020, CRC(ec15dd15) SHA1(710384b154a9363fdc88edffda252f1d60e000dc) ) /* palette */ ROM_LOAD( "523h10.2f", 0x0000, 0x0020, CRC(ec15dd15) SHA1(710384b154a9363fdc88edffda252f1d60e000dc) ) // palette
ROM_LOAD( "523h11.3f", 0x0020, 0x0020, CRC(54be2e83) SHA1(3200abc7f2238d62d7204ef57a6daa2df150538d) ) /* palette */ ROM_LOAD( "523h11.3f", 0x0020, 0x0020, CRC(54be2e83) SHA1(3200abc7f2238d62d7204ef57a6daa2df150538d) ) // palette
ROM_LOAD( "523h13.11f", 0x0040, 0x0100, CRC(4e0647a0) SHA1(fb87f878456b8b76bb2c028cb890d2a5c1c3e388) ) /* characters */ ROM_LOAD( "523h13.11f", 0x0040, 0x0100, CRC(4e0647a0) SHA1(fb87f878456b8b76bb2c028cb890d2a5c1c3e388) ) // characters
ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) /* sprites */ ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) // sprites
ROM_END ROM_END
ROM_START( finalizrb ) ROM_START( finalizrb )
@ -363,7 +363,7 @@ ROM_START( finalizrb )
ROM_LOAD( "finalizr.5", 0x4000, 0x8000, CRC(a55e3f14) SHA1(47f6da214b36cc56be547fa4313afcc5572508a2) ) ROM_LOAD( "finalizr.5", 0x4000, 0x8000, CRC(a55e3f14) SHA1(47f6da214b36cc56be547fa4313afcc5572508a2) )
ROM_LOAD( "finalizr.6", 0xc000, 0x4000, CRC(ce177f6e) SHA1(034cbe0c1e2baf9577741b3c222a8b4a8ac8c919) ) ROM_LOAD( "finalizr.6", 0xc000, 0x4000, CRC(ce177f6e) SHA1(034cbe0c1e2baf9577741b3c222a8b4a8ac8c919) )
ROM_REGION( 0x1000, "audiocpu", 0 ) /* 8039 */ ROM_REGION( 0x1000, "audiocpu", 0 ) // 8039
ROM_LOAD( "d8749hd.bin", 0x0000, 0x0800, CRC(978dfc33) SHA1(13d24ce577b88bf6ec2e970d36dc67a7ec691c55) ) ROM_LOAD( "d8749hd.bin", 0x0000, 0x0800, CRC(978dfc33) SHA1(13d24ce577b88bf6ec2e970d36dc67a7ec691c55) )
ROM_REGION( 0x20000, "gfx1", 0 ) ROM_REGION( 0x20000, "gfx1", 0 )
@ -373,13 +373,13 @@ ROM_START( finalizrb )
ROM_LOAD16_BYTE( "523h08.6f", 0x08001, 0x4000, CRC(79f44e17) SHA1(cb32edc4df9f2209f13fc258fec4e67ee91badef) ) ROM_LOAD16_BYTE( "523h08.6f", 0x08001, 0x4000, CRC(79f44e17) SHA1(cb32edc4df9f2209f13fc258fec4e67ee91badef) )
ROM_LOAD16_BYTE( "523h06.7e", 0x10000, 0x4000, CRC(d2db9689) SHA1(ceb5913716b4da2ddff2e837ddaa04d91e52f9e1) ) ROM_LOAD16_BYTE( "523h06.7e", 0x10000, 0x4000, CRC(d2db9689) SHA1(ceb5913716b4da2ddff2e837ddaa04d91e52f9e1) )
ROM_LOAD16_BYTE( "523h09.7f", 0x10001, 0x4000, CRC(8896dc85) SHA1(91493c6b69655de482f0c2a0cb3662fc0d1b6e45) ) ROM_LOAD16_BYTE( "523h09.7f", 0x10001, 0x4000, CRC(8896dc85) SHA1(91493c6b69655de482f0c2a0cb3662fc0d1b6e45) )
/* 18000-1ffff empty */ // 18000-1ffff empty
ROM_REGION( 0x0240, "proms", 0 ) /* PROMs at 2F & 3F are MMI 63S081N (or compatibles), PROMs at 10F & 11F are MMI 6301-1N (or compatibles) */ ROM_REGION( 0x0240, "proms", 0 ) // PROMs at 2F & 3F are MMI 63S081N (or compatibles), PROMs at 10F & 11F are MMI 6301-1N (or compatibles)
ROM_LOAD( "523h10.2f", 0x0000, 0x0020, CRC(ec15dd15) SHA1(710384b154a9363fdc88edffda252f1d60e000dc) ) /* palette */ ROM_LOAD( "523h10.2f", 0x0000, 0x0020, CRC(ec15dd15) SHA1(710384b154a9363fdc88edffda252f1d60e000dc) ) // palette
ROM_LOAD( "523h11.3f", 0x0020, 0x0020, CRC(54be2e83) SHA1(3200abc7f2238d62d7204ef57a6daa2df150538d) ) /* palette */ ROM_LOAD( "523h11.3f", 0x0020, 0x0020, CRC(54be2e83) SHA1(3200abc7f2238d62d7204ef57a6daa2df150538d) ) // palette
ROM_LOAD( "523h13.11f", 0x0040, 0x0100, CRC(4e0647a0) SHA1(fb87f878456b8b76bb2c028cb890d2a5c1c3e388) ) /* characters */ ROM_LOAD( "523h13.11f", 0x0040, 0x0100, CRC(4e0647a0) SHA1(fb87f878456b8b76bb2c028cb890d2a5c1c3e388) ) // characters
ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) /* sprites */ ROM_LOAD( "523h12.10f", 0x0140, 0x0100, CRC(53166a2a) SHA1(6cdde206036df7176679711f7888d72acee27c8f) ) // sprites
ROM_END ROM_END

View File

@ -24,7 +24,7 @@
* *
*************************************/ *************************************/
TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::ironhors_scanline_tick) TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::scanline_tick)
{ {
int scanline = param; int scanline = param;
@ -40,12 +40,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::ironhors_scanline_tick)
} }
} }
void ironhors_state::sh_irqtrigger_w(uint8_t data) void ironhors_base_state::sh_irqtrigger_w(uint8_t data)
{ {
m_soundcpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80 m_soundcpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
} }
void ironhors_state::filter_w(uint8_t data) void ironhors_base_state::filter_w(uint8_t data)
{ {
m_disc_ih->write(NODE_11, (data & 0x04) >> 2); m_disc_ih->write(NODE_11, (data & 0x04) >> 2);
m_disc_ih->write(NODE_12, (data & 0x02) >> 1); m_disc_ih->write(NODE_12, (data & 0x02) >> 1);
@ -62,9 +62,9 @@ void ironhors_state::master_map(address_map &map)
{ {
map(0x0000, 0x0002).ram(); map(0x0000, 0x0002).ram();
map(0x0003, 0x0003).ram().w(FUNC(ironhors_state::charbank_w)); map(0x0003, 0x0003).ram().w(FUNC(ironhors_state::charbank_w));
map(0x0004, 0x0004).ram().share("int_enable"); map(0x0004, 0x0004).ram().share(m_interrupt_enable);
map(0x0005, 0x001f).ram(); map(0x0005, 0x001f).ram();
map(0x0020, 0x003f).ram().share("scroll"); map(0x0020, 0x003f).ram().share(m_scroll);
map(0x0040, 0x005f).ram(); map(0x0040, 0x005f).ram();
map(0x0060, 0x00df).ram(); map(0x0060, 0x00df).ram();
map(0x0800, 0x0800).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x0800, 0x0800).w(m_soundlatch, FUNC(generic_latch_8_device::write));
@ -77,12 +77,12 @@ void ironhors_state::master_map(address_map &map)
map(0x1800, 0x1800).nopw(); // ??? map(0x1800, 0x1800).nopw(); // ???
map(0x1a00, 0x1a01).nopw(); // ??? map(0x1a00, 0x1a01).nopw(); // ???
map(0x1c00, 0x1dff).nopw(); // ??? map(0x1c00, 0x1dff).nopw(); // ???
map(0x2000, 0x23ff).ram().w(FUNC(ironhors_state::colorram_w)).share("colorram"); map(0x2000, 0x23ff).ram().w(FUNC(ironhors_state::colorram_w)).share(m_colorram);
map(0x2400, 0x27ff).ram().w(FUNC(ironhors_state::videoram_w)).share("videoram"); map(0x2400, 0x27ff).ram().w(FUNC(ironhors_state::videoram_w)).share(m_videoram);
map(0x2800, 0x2fff).ram(); map(0x2800, 0x2fff).ram();
map(0x3000, 0x30ff).ram().share("spriteram2"); map(0x3000, 0x30ff).ram().share(m_spriteram[1]);
map(0x3100, 0x37ff).ram(); map(0x3100, 0x37ff).ram();
map(0x3800, 0x38ff).ram().share("spriteram"); map(0x3800, 0x38ff).ram().share(m_spriteram[0]);
map(0x3900, 0x3fff).ram(); map(0x3900, 0x3fff).ram();
map(0x4000, 0xffff).rom(); map(0x4000, 0xffff).rom();
} }
@ -100,7 +100,7 @@ void ironhors_state::slave_io_map(address_map &map)
map(0x00, 0x01).rw("ym2203", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); map(0x00, 0x01).rw("ym2203", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
} }
void ironhors_state::farwest_master_map(address_map &map) void farwest_state::master_map(address_map &map)
{ {
map(0x0000, 0x1bff).rom(); map(0x0000, 0x1bff).rom();
@ -111,31 +111,31 @@ void ironhors_state::farwest_master_map(address_map &map)
map(0x0040, 0x005f).ram(); map(0x0040, 0x005f).ram();
map(0x0060, 0x00ff).ram(); map(0x0060, 0x00ff).ram();
map(0x0800, 0x0800).w(m_soundlatch, FUNC(generic_latch_8_device::write)); map(0x0800, 0x0800).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x0900, 0x0900) /*.protr("DSW3") */ .w(FUNC(ironhors_state::sh_irqtrigger_w)); map(0x0900, 0x0900) /*.protr("DSW3") */ .w(FUNC(farwest_state::sh_irqtrigger_w));
map(0x0a00, 0x0a00).portr("DSW2"); //.w(FUNC(ironhors_state::palettebank_w)); map(0x0a00, 0x0a00).portr("DSW2"); //.w(FUNC(farwest_state::palettebank_w));
map(0x0b00, 0x0b00).portr("DSW1").w(FUNC(ironhors_state::flipscreen_w)); map(0x0b00, 0x0b00).portr("DSW1").w(FUNC(farwest_state::flipscreen_w));
map(0x0b01, 0x0b01).portr("DSW2"); //.w(FUNC(ironhors_state::palettebank_w)); map(0x0b01, 0x0b01).portr("DSW2"); //.w(FUNC(farwest_state::palettebank_w));
map(0x0b02, 0x0b02).portr("P1"); map(0x0b02, 0x0b02).portr("P1");
map(0x0b03, 0x0b03).portr("SYSTEM"); map(0x0b03, 0x0b03).portr("SYSTEM");
map(0x1800, 0x1800).w(FUNC(ironhors_state::sh_irqtrigger_w)); map(0x1800, 0x1800).w(FUNC(farwest_state::sh_irqtrigger_w));
map(0x1a00, 0x1a00).ram().share("int_enable"); map(0x1a00, 0x1a00).ram().share(m_interrupt_enable);
map(0x1a01, 0x1a01).ram().w(FUNC(ironhors_state::charbank_w)); map(0x1a01, 0x1a01).ram().w(FUNC(farwest_state::charbank_w));
map(0x1a02, 0x1a02).w(FUNC(ironhors_state::palettebank_w)); map(0x1a02, 0x1a02).w(FUNC(farwest_state::palettebank_w));
map(0x1e00, 0x1eff).ram().share("spriteram"); map(0x1e00, 0x1eff).ram().share(m_spriteram[0]);
map(0x2000, 0x23ff).ram().w(FUNC(ironhors_state::colorram_w)).share("colorram"); map(0x2000, 0x23ff).ram().w(FUNC(farwest_state::colorram_w)).share(m_colorram);
map(0x2400, 0x27ff).ram().w(FUNC(ironhors_state::videoram_w)).share("videoram"); map(0x2400, 0x27ff).ram().w(FUNC(farwest_state::videoram_w)).share(m_videoram);
map(0x2800, 0x2fff).ram(); map(0x2800, 0x2fff).ram();
map(0x1c00, 0x1dff).ram().share("spriteram2"); map(0x1c00, 0x1dff).ram().share(m_spriteram[1]);
map(0x3000, 0x31da).ram(); map(0x3000, 0x31da).ram();
map(0x31db, 0x31fa).ram().share("scroll"); map(0x31db, 0x31fa).ram().share(m_scroll);
map(0x31fb, 0x3fff).ram(); map(0x31fb, 0x3fff).ram();
map(0x4000, 0xffff).rom(); map(0x4000, 0xffff).rom();
} }
void ironhors_state::farwest_slave_map(address_map &map) void farwest_state::slave_map(address_map &map)
{ {
map(0x0000, 0x3fff).rom(); map(0x0000, 0x3fff).rom();
map(0x4000, 0x43ff).ram(); map(0x4000, 0x43ff).ram();
@ -161,7 +161,7 @@ static INPUT_PORTS_START( dairesya )
PORT_START("DSW1") PORT_START("DSW1")
KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "No Coin B", SW1) 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_START("DSW2")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
@ -202,7 +202,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( ironhors ) static INPUT_PORTS_START( ironhors )
PORT_INCLUDE( dairesya ) PORT_INCLUDE( dairesya )
/* here button 3 for player 1 and 2 are exchanged */ // here button 3 for player 1 and 2 are exchanged
PORT_MODIFY("P1") PORT_MODIFY("P1")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
@ -245,49 +245,49 @@ static const gfx_layout ironhors_spritelayout =
static GFXDECODE_START( gfx_ironhors ) static GFXDECODE_START( gfx_ironhors )
GFXDECODE_ENTRY( "gfx1", 0, ironhors_charlayout, 0, 16*8 ) GFXDECODE_ENTRY( "gfx1", 0, ironhors_charlayout, 0, 16*8 )
GFXDECODE_ENTRY( "gfx1", 0, ironhors_spritelayout, 16*8*16, 16*8 ) GFXDECODE_ENTRY( "gfx1", 0, ironhors_spritelayout, 16*8*16, 16*8 )
GFXDECODE_ENTRY( "gfx1", 0, ironhors_charlayout, 16*8*16, 16*8 ) /* to handle 8x8 sprites */ GFXDECODE_ENTRY( "gfx1", 0, ironhors_charlayout, 16*8*16, 16*8 ) // to handle 8x8 sprites
GFXDECODE_END GFXDECODE_END
static const gfx_layout farwest_charlayout = static const gfx_layout farwest_charlayout =
{ {
8,8, /* 8*8 characters */ 8,8, // 8*8 characters
2048, /* 2048 characters */ 2048, // 2048 characters
4, /* 4 bits per pixel */ 4, // 4 bits per pixel
{ 0, 2, 4, 6 }, /* the four bitplanes are packed in one byte */ { 0, 2, 4, 6 }, // the four bitplanes are packed in one byte
{ 3*8+1, 3*8+0, 0*8+1, 0*8+0, 1*8+1, 1*8+0, 2*8+1, 2*8+0 }, { 3*8+1, 3*8+0, 0*8+1, 0*8+0, 1*8+1, 1*8+0, 2*8+1, 2*8+0 },
{ 0*4*8, 1*4*8, 2*4*8, 3*4*8, 4*4*8, 5*4*8, 6*4*8, 7*4*8 }, { 0*4*8, 1*4*8, 2*4*8, 3*4*8, 4*4*8, 5*4*8, 6*4*8, 7*4*8 },
32*8 /* every char takes 32 consecutive bytes */ 32*8 // every char takes 32 consecutive bytes
}; };
static const gfx_layout farwest_spritelayout = static const gfx_layout farwest_spritelayout =
{ {
16,16, /* 16*16 sprites */ 16,16, // 16*16 sprites
512, /* 512 sprites */ 512, // 512 sprites
4, /* 4 bits per pixel */ 4, // 4 bits per pixel
{ 0, 512*32*8, 2*512*32*8, 3*512*32*8 }, /* the four bitplanes are separated */ { 0, 512*32*8, 2*512*32*8, 3*512*32*8 }, // the four bitplanes are separated
{ 0, 1, 2, 3, 4, 5, 6, 7, { 0, 1, 2, 3, 4, 5, 6, 7,
16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 }, 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
32*8 /* every sprite takes 32 consecutive bytes */ 32*8 // every sprite takes 32 consecutive bytes
}; };
static const gfx_layout farwest_spritelayout2 = static const gfx_layout farwest_spritelayout2 =
{ {
8,8, /* 8*8 characters */ 8,8, // 8*8 characters
2048, /* 2048 characters */ 2048, // 2048 characters
4, /* 4 bits per pixel */ 4, // 4 bits per pixel
{ 0, 2048*8*8, 2*2048*8*8, 3*2048*8*8 }, /* the four bitplanes are separated */ { 0, 2048*8*8, 2*2048*8*8, 3*2048*8*8 }, // the four bitplanes are separated
{ 0, 1, 2, 3, 4, 5, 6, 7 }, { 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*8 /* every char takes 8 consecutive bytes */ 8*8 // every char takes 8 consecutive bytes
}; };
static GFXDECODE_START( gfx_farwest ) static GFXDECODE_START( gfx_farwest )
GFXDECODE_ENTRY( "gfx1", 0, farwest_charlayout, 0, 16*8 ) GFXDECODE_ENTRY( "gfx1", 0, farwest_charlayout, 0, 16*8 )
GFXDECODE_ENTRY( "gfx2", 0, farwest_spritelayout, 16*8*16, 16*8 ) GFXDECODE_ENTRY( "gfx2", 0, farwest_spritelayout, 16*8*16, 16*8 )
GFXDECODE_ENTRY( "gfx2", 0, farwest_spritelayout2,16*8*16, 16*8 ) /* to handle 8x8 sprites */ GFXDECODE_ENTRY( "gfx2", 0, farwest_spritelayout2,16*8*16, 16*8 ) // to handle 8x8 sprites
GFXDECODE_END GFXDECODE_END
@ -300,9 +300,9 @@ GFXDECODE_END
static const discrete_mixer_desc ironhors_mixer_desc = static const discrete_mixer_desc ironhors_mixer_desc =
{DISC_MIXER_IS_RESISTOR, {DISC_MIXER_IS_RESISTOR,
{RES_K(2.2), RES_K(2.2), RES_K(2.2)}, {RES_K(2.2), RES_K(2.2), RES_K(2.2)},
{0,0,0,0,0,0}, /* no variable resistors */ {0,0,0,0,0,0}, // no variable resistors
{0,0,0,0,0,0}, /* no node capacitors */ {0,0,0,0,0,0}, // no node capacitors
0, RES_K(1), /* RF */ 0, RES_K(1), // RF
0, 0,
0, 0,
0, 1}; 0, 1};
@ -310,9 +310,9 @@ static const discrete_mixer_desc ironhors_mixer_desc =
static const discrete_mixer_desc ironhors_mixer_desc_final = static const discrete_mixer_desc ironhors_mixer_desc_final =
{DISC_MIXER_IS_RESISTOR, {DISC_MIXER_IS_RESISTOR,
{RES_K(0.5), RES_K(1)}, {RES_K(0.5), RES_K(1)},
{0,0,0,0,0,0}, /* no variable resistors */ {0,0,0,0,0,0}, // no variable resistors
{CAP_U(4.7), CAP_U(4.7)}, /* node capacitors */ {CAP_U(4.7), CAP_U(4.7)}, // node capacitors
0, RES_K(1), /* RF */ 0, RES_K(1), // RF
0, 0,
0, 0,
0, 1}; 0, 1};
@ -348,14 +348,14 @@ DISCRETE_SOUND_END
* *
*************************************/ *************************************/
void ironhors_state::machine_start() void ironhors_base_state::machine_start()
{ {
save_item(NAME(m_palettebank)); save_item(NAME(m_palettebank));
save_item(NAME(m_charbank)); save_item(NAME(m_charbank));
save_item(NAME(m_spriterambank)); save_item(NAME(m_spriterambank));
} }
void ironhors_state::machine_reset() void ironhors_base_state::machine_reset()
{ {
m_palettebank = 0; m_palettebank = 0;
m_charbank = 0; m_charbank = 0;
@ -377,32 +377,23 @@ Hsync is 15,56khz
These clocks make the emulation run too fast. These clocks make the emulation run too fast.
*/ */
void ironhors_state::ironhors(machine_config &config) void ironhors_base_state::base(machine_config &config)
{ {
/* basic machine hardware */ // basic machine hardware
MC6809E(config, m_maincpu, 18432000/6); /* 3.072 MHz??? mod by Shingo Suzuki 1999/10/15 */ MC6809E(config, m_maincpu, 18432000/6); // 3.072 MHz??? mod by Shingo Suzuki 1999/10/15
m_maincpu->set_addrmap(AS_PROGRAM, &ironhors_state::master_map);
TIMER(config, "scantimer").configure_scanline(FUNC(ironhors_state::ironhors_scanline_tick), "screen", 0, 1);
Z80(config, m_soundcpu, 18432000/6); /* 3.072 MHz */ // video hardware
m_soundcpu->set_addrmap(AS_PROGRAM, &ironhors_state::slave_map);
m_soundcpu->set_addrmap(AS_IO, &ironhors_state::slave_io_map);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER); SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
// m_screen->set_refresh_hz(61); // m_screen->set_refresh_hz(61);
// m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); // m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
// m_screen->set_size(32*8, 32*8); // m_screen->set_size(32*8, 32*8);
// m_screen->set_visarea(1*8, 31*8-1, 2*8, 30*8-1); // m_screen->set_visarea(1*8, 31*8-1, 2*8, 30*8-1);
m_screen->set_raw(18432000/4,296,8,256-8,255,16,240); // pixel clock is a guesswork m_screen->set_raw(18432000/4,296,8,256-8,255,16,240); // pixel clock is a guesswork
m_screen->set_screen_update(FUNC(ironhors_state::screen_update));
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ironhors); PALETTE(config, m_palette, FUNC(ironhors_state::palette), 16*8*16+16*8*16, 256);
PALETTE(config, m_palette, FUNC(ironhors_state::ironhors_palette), 16*8*16+16*8*16, 256);
/* sound hardware */ // sound hardware
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, m_soundlatch); GENERIC_LATCH_8(config, m_soundlatch);
@ -417,7 +408,23 @@ void ironhors_state::ironhors(machine_config &config)
DISCRETE(config, m_disc_ih, ironhors_discrete).add_route(ALL_OUTPUTS, "mono", 1.0); DISCRETE(config, m_disc_ih, ironhors_discrete).add_route(ALL_OUTPUTS, "mono", 1.0);
} }
TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::farwest_scanline_tick) void ironhors_state::ironhors(machine_config &config)
{
base(config);
m_maincpu->set_addrmap(AS_PROGRAM, &ironhors_state::master_map);
TIMER(config, "scantimer").configure_scanline(FUNC(ironhors_state::scanline_tick), "screen", 0, 1);
Z80(config, m_soundcpu, 18432000/6); // 3.072 MHz
m_soundcpu->set_addrmap(AS_PROGRAM, &ironhors_state::slave_map);
m_soundcpu->set_addrmap(AS_IO, &ironhors_state::slave_io_map);
m_screen->set_screen_update(FUNC(ironhors_state::screen_update));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ironhors);
}
TIMER_DEVICE_CALLBACK_MEMBER(farwest_state::scanline_tick)
{ {
int scanline = param; int scanline = param;
@ -433,20 +440,19 @@ TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::farwest_scanline_tick)
} }
} }
void ironhors_state::farwest(machine_config &config) void farwest_state::farwest(machine_config &config)
{ {
ironhors(config); base(config);
m_maincpu->set_addrmap(AS_PROGRAM, &ironhors_state::farwest_master_map); m_maincpu->set_addrmap(AS_PROGRAM, &farwest_state::master_map);
subdevice<timer_device>("scantimer")->set_callback(FUNC(ironhors_state::farwest_scanline_tick)); TIMER(config, "scantimer").configure_scanline(FUNC(farwest_state::scanline_tick), "screen", 0, 1);
Z80(config.replace(), m_soundcpu, 18432000/6); /* 3.072 MHz */ Z80(config, m_soundcpu, 18432000/6); // 3.072 MHz
m_soundcpu->set_addrmap(AS_PROGRAM, &ironhors_state::farwest_slave_map); m_soundcpu->set_addrmap(AS_PROGRAM, &farwest_state::slave_map);
m_gfxdecode->set_info(gfx_farwest); GFXDECODE(config, m_gfxdecode, m_palette, gfx_farwest);
MCFG_VIDEO_START_OVERRIDE(ironhors_state,farwest)
m_screen->set_screen_update(FUNC(ironhors_state::screen_update_farwest)); m_screen->set_screen_update(FUNC(farwest_state::screen_update));
subdevice<ym2203_device>("ym2203")->port_b_read_callback().set(m_soundlatch, FUNC(generic_latch_8_device::read)); subdevice<ym2203_device>("ym2203")->port_b_read_callback().set(m_soundlatch, FUNC(generic_latch_8_device::read));
} }
@ -474,11 +480,11 @@ ROM_START( ironhors )
ROM_LOAD16_BYTE( "560_h04.06f", 0x10001, 0x8000, CRC(c1486f61) SHA1(4b96aebe5d35fd1d73bde8576689addbb1ff66ed) ) ROM_LOAD16_BYTE( "560_h04.06f", 0x10001, 0x8000, CRC(c1486f61) SHA1(4b96aebe5d35fd1d73bde8576689addbb1ff66ed) )
ROM_REGION( 0x0500, "proms", 0 ) ROM_REGION( 0x0500, "proms", 0 )
ROM_LOAD( "03f_h08.bin", 0x0000, 0x0100, CRC(9f6ddf83) SHA1(08a37182a974c5448156637f10fe60bfe5f225ad) ) /* palette red */ ROM_LOAD( "03f_h08.bin", 0x0000, 0x0100, CRC(9f6ddf83) SHA1(08a37182a974c5448156637f10fe60bfe5f225ad) ) // palette red
ROM_LOAD( "04f_h09.bin", 0x0100, 0x0100, CRC(e6773825) SHA1(7523e7fa090d850fe79ff0069d3260c76645d65a) ) /* palette green */ ROM_LOAD( "04f_h09.bin", 0x0100, 0x0100, CRC(e6773825) SHA1(7523e7fa090d850fe79ff0069d3260c76645d65a) ) // palette green
ROM_LOAD( "05f_h10.bin", 0x0200, 0x0100, CRC(30a57860) SHA1(3ec7535286c8bc65e203320f47e4ed6f1d3d61c9) ) /* palette blue */ ROM_LOAD( "05f_h10.bin", 0x0200, 0x0100, CRC(30a57860) SHA1(3ec7535286c8bc65e203320f47e4ed6f1d3d61c9) ) // palette blue
ROM_LOAD( "10f_h12.bin", 0x0300, 0x0100, CRC(5eb33e73) SHA1(f34916dc4617b0c48e0a7ac6ace97b35dfcf1c40) ) /* character lookup table */ ROM_LOAD( "10f_h12.bin", 0x0300, 0x0100, CRC(5eb33e73) SHA1(f34916dc4617b0c48e0a7ac6ace97b35dfcf1c40) ) // character lookup table
ROM_LOAD( "10f_h11.bin", 0x0400, 0x0100, CRC(a63e37d8) SHA1(1a0a76ecd14310125bdf41a8431d562ed498eb27) ) /* sprite lookup table */ ROM_LOAD( "10f_h11.bin", 0x0400, 0x0100, CRC(a63e37d8) SHA1(1a0a76ecd14310125bdf41a8431d562ed498eb27) ) // sprite lookup table
ROM_END ROM_END
ROM_START( ironhorsh ) ROM_START( ironhorsh )
@ -496,11 +502,11 @@ ROM_START( ironhorsh )
ROM_LOAD16_BYTE( "06f_h04.bin", 0x10001, 0x8000, CRC(c1486f61) SHA1(4b96aebe5d35fd1d73bde8576689addbb1ff66ed) ) ROM_LOAD16_BYTE( "06f_h04.bin", 0x10001, 0x8000, CRC(c1486f61) SHA1(4b96aebe5d35fd1d73bde8576689addbb1ff66ed) )
ROM_REGION( 0x0500, "proms", 0 ) ROM_REGION( 0x0500, "proms", 0 )
ROM_LOAD( "03f_h08.bin", 0x0000, 0x0100, CRC(9f6ddf83) SHA1(08a37182a974c5448156637f10fe60bfe5f225ad) ) /* palette red */ ROM_LOAD( "03f_h08.bin", 0x0000, 0x0100, CRC(9f6ddf83) SHA1(08a37182a974c5448156637f10fe60bfe5f225ad) ) // palette red
ROM_LOAD( "04f_h09.bin", 0x0100, 0x0100, CRC(e6773825) SHA1(7523e7fa090d850fe79ff0069d3260c76645d65a) ) /* palette green */ ROM_LOAD( "04f_h09.bin", 0x0100, 0x0100, CRC(e6773825) SHA1(7523e7fa090d850fe79ff0069d3260c76645d65a) ) // palette green
ROM_LOAD( "05f_h10.bin", 0x0200, 0x0100, CRC(30a57860) SHA1(3ec7535286c8bc65e203320f47e4ed6f1d3d61c9) ) /* palette blue */ ROM_LOAD( "05f_h10.bin", 0x0200, 0x0100, CRC(30a57860) SHA1(3ec7535286c8bc65e203320f47e4ed6f1d3d61c9) ) // palette blue
ROM_LOAD( "10f_h12.bin", 0x0300, 0x0100, CRC(5eb33e73) SHA1(f34916dc4617b0c48e0a7ac6ace97b35dfcf1c40) ) /* character lookup table */ ROM_LOAD( "10f_h12.bin", 0x0300, 0x0100, CRC(5eb33e73) SHA1(f34916dc4617b0c48e0a7ac6ace97b35dfcf1c40) ) // character lookup table
ROM_LOAD( "10f_h11.bin", 0x0400, 0x0100, CRC(a63e37d8) SHA1(1a0a76ecd14310125bdf41a8431d562ed498eb27) ) /* sprite lookup table */ ROM_LOAD( "10f_h11.bin", 0x0400, 0x0100, CRC(a63e37d8) SHA1(1a0a76ecd14310125bdf41a8431d562ed498eb27) ) // sprite lookup table
ROM_END ROM_END
ROM_START( dairesya ) ROM_START( dairesya )
@ -518,18 +524,18 @@ ROM_START( dairesya )
ROM_LOAD16_BYTE( "560-k04.6f", 0x10001, 0x8000, CRC(c883d856) SHA1(4c4f91b72dab841ec15ca62121ed0c0878dfff23) ) ROM_LOAD16_BYTE( "560-k04.6f", 0x10001, 0x8000, CRC(c883d856) SHA1(4c4f91b72dab841ec15ca62121ed0c0878dfff23) )
ROM_REGION( 0x0500, "proms", 0 ) ROM_REGION( 0x0500, "proms", 0 )
ROM_LOAD( "03f_h08.bin", 0x0000, 0x0100, CRC(9f6ddf83) SHA1(08a37182a974c5448156637f10fe60bfe5f225ad) ) /* palette red */ ROM_LOAD( "03f_h08.bin", 0x0000, 0x0100, CRC(9f6ddf83) SHA1(08a37182a974c5448156637f10fe60bfe5f225ad) ) // palette red
ROM_LOAD( "04f_h09.bin", 0x0100, 0x0100, CRC(e6773825) SHA1(7523e7fa090d850fe79ff0069d3260c76645d65a) ) /* palette green */ ROM_LOAD( "04f_h09.bin", 0x0100, 0x0100, CRC(e6773825) SHA1(7523e7fa090d850fe79ff0069d3260c76645d65a) ) // palette green
ROM_LOAD( "05f_h10.bin", 0x0200, 0x0100, CRC(30a57860) SHA1(3ec7535286c8bc65e203320f47e4ed6f1d3d61c9) ) /* palette blue */ ROM_LOAD( "05f_h10.bin", 0x0200, 0x0100, CRC(30a57860) SHA1(3ec7535286c8bc65e203320f47e4ed6f1d3d61c9) ) // palette blue
ROM_LOAD( "10f_h12.bin", 0x0300, 0x0100, CRC(5eb33e73) SHA1(f34916dc4617b0c48e0a7ac6ace97b35dfcf1c40) ) /* character lookup table */ ROM_LOAD( "10f_h12.bin", 0x0300, 0x0100, CRC(5eb33e73) SHA1(f34916dc4617b0c48e0a7ac6ace97b35dfcf1c40) ) // character lookup table
ROM_LOAD( "10f_h11.bin", 0x0400, 0x0100, CRC(a63e37d8) SHA1(1a0a76ecd14310125bdf41a8431d562ed498eb27) ) /* sprite lookup table */ ROM_LOAD( "10f_h11.bin", 0x0400, 0x0100, CRC(a63e37d8) SHA1(1a0a76ecd14310125bdf41a8431d562ed498eb27) ) // sprite lookup table
ROM_END ROM_END
ROM_START( farwest ) ROM_START( farwest )
ROM_REGION( 0x12000, "maincpu", 0 ) /* 64k for code + 8k for extra ROM */ ROM_REGION( 0x12000, "maincpu", 0 ) // 64k for code + 8k for extra ROM
ROM_LOAD( "ironhors.008", 0x04000, 0x4000, CRC(b1c8246c) SHA1(4ceb098bb0b4efcbe50bb4b23bd27a60dabf2b3e) ) ROM_LOAD( "ironhors.008", 0x04000, 0x4000, CRC(b1c8246c) SHA1(4ceb098bb0b4efcbe50bb4b23bd27a60dabf2b3e) )
ROM_LOAD( "ironhors.009", 0x08000, 0x8000, CRC(ea34ecfc) SHA1(8c7f12e76d2b9eb592ebf1bfd3e16a6b130da8e5) ) ROM_LOAD( "ironhors.009", 0x08000, 0x8000, CRC(ea34ecfc) SHA1(8c7f12e76d2b9eb592ebf1bfd3e16a6b130da8e5) )
ROM_LOAD( "ironhors.007", 0x00000, 0x2000, CRC(471182b7) SHA1(48ff58cbbf971b257e8099ec331397cf73dc8325) ) /* don't know what this is for */ ROM_LOAD( "ironhors.007", 0x00000, 0x2000, CRC(471182b7) SHA1(48ff58cbbf971b257e8099ec331397cf73dc8325) ) // don't know what this is for
ROM_REGION( 0x10000, "soundcpu", 0 ) ROM_REGION( 0x10000, "soundcpu", 0 )
ROM_LOAD( "ironhors.010", 0x0000, 0x4000, CRC(a28231a6) SHA1(617e8fdf8129081c6a1bbbf140837a375a51da72) ) ROM_LOAD( "ironhors.010", 0x0000, 0x4000, CRC(a28231a6) SHA1(617e8fdf8129081c6a1bbbf140837a375a51da72) )
@ -545,11 +551,11 @@ ROM_START( farwest )
ROM_LOAD( "ironhors.004", 0x0c000, 0x4000, CRC(1fab18a3) SHA1(cc7ddf60b719e7c5a689f716ebee9bc04ade406a) ) ROM_LOAD( "ironhors.004", 0x0c000, 0x4000, CRC(1fab18a3) SHA1(cc7ddf60b719e7c5a689f716ebee9bc04ade406a) )
ROM_REGION( 0x0500, "proms", 0 ) ROM_REGION( 0x0500, "proms", 0 )
ROM_LOAD( "ironcol.003", 0x0000, 0x0100, CRC(3e3fca11) SHA1(c92737659f063889a2b210cfe5c294b8a4864489) ) /* palette red */ ROM_LOAD( "ironcol.003", 0x0000, 0x0100, CRC(3e3fca11) SHA1(c92737659f063889a2b210cfe5c294b8a4864489) ) // palette red
ROM_LOAD( "ironcol.001", 0x0100, 0x0100, CRC(dfb13014) SHA1(d9f9a5bed1300faf7c3864d5c5ae07087de25824) ) /* palette green */ ROM_LOAD( "ironcol.001", 0x0100, 0x0100, CRC(dfb13014) SHA1(d9f9a5bed1300faf7c3864d5c5ae07087de25824) ) // palette green
ROM_LOAD( "ironcol.002", 0x0200, 0x0100, CRC(77c88430) SHA1(e3041945b14955de109a505d9aa9f79046bed6a8) ) /* palette blue */ ROM_LOAD( "ironcol.002", 0x0200, 0x0100, CRC(77c88430) SHA1(e3041945b14955de109a505d9aa9f79046bed6a8) ) // palette blue
ROM_LOAD( "10f_h12.bin", 0x0300, 0x0100, CRC(5eb33e73) SHA1(f34916dc4617b0c48e0a7ac6ace97b35dfcf1c40) ) /* character lookup table */ ROM_LOAD( "10f_h12.bin", 0x0300, 0x0100, CRC(5eb33e73) SHA1(f34916dc4617b0c48e0a7ac6ace97b35dfcf1c40) ) // character lookup table
ROM_LOAD( "ironcol.005", 0x0400, 0x0100, CRC(15077b9c) SHA1(c7fe24e3d481150452ff774f3908510db9e28367) ) /* sprite lookup table */ ROM_LOAD( "ironcol.005", 0x0400, 0x0100, CRC(15077b9c) SHA1(c7fe24e3d481150452ff774f3908510db9e28367) ) // sprite lookup table
ROM_END ROM_END
@ -562,4 +568,4 @@ ROM_END
GAME( 1986, ironhors, 0, ironhors, ironhors, ironhors_state, empty_init, ROT0, "Konami", "Iron Horse (version K)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, ironhors, 0, ironhors, ironhors, ironhors_state, empty_init, ROT0, "Konami", "Iron Horse (version K)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, ironhorsh, ironhors, ironhors, ironhors, ironhors_state, empty_init, ROT0, "Konami", "Iron Horse (version H)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, ironhorsh, ironhors, ironhors, ironhors, ironhors_state, empty_init, ROT0, "Konami", "Iron Horse (version H)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, dairesya, ironhors, ironhors, dairesya, ironhors_state, empty_init, ROT0, "Konami (Kawakusu license)", "Dai Ressya Goutou (Japan, version K)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, dairesya, ironhors, ironhors, dairesya, ironhors_state, empty_init, ROT0, "Konami (Kawakusu license)", "Dai Ressya Goutou (Japan, version K)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, farwest, ironhors, farwest, ironhors, ironhors_state, empty_init, ROT0, "bootleg?", "Far West", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1986, farwest, ironhors, farwest, ironhors, farwest_state, empty_init, ROT0, "bootleg?", "Far West", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )

View File

@ -21,75 +21,66 @@ public:
ddribble_state(const machine_config &mconfig, device_type type, const char *tag) : ddribble_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag), driver_device(mconfig, type, tag),
m_fg_videoram(*this, "fg_videoram"), m_fg_videoram(*this, "fg_videoram"),
m_spriteram_1(*this, "spriteram_1"), m_spriteram(*this, "spriteram_%u", 1U),
m_sharedram(*this, "sharedram"),
m_bg_videoram(*this, "bg_videoram"), m_bg_videoram(*this, "bg_videoram"),
m_spriteram_2(*this, "spriteram_2"), m_mainbank(*this, "mainbank"),
m_snd_sharedram(*this, "snd_sharedram"), m_vlmbank(*this, "vlmbank"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_cpu1(*this, "cpu1"), m_subcpu(*this, "subcpu"),
m_vlm(*this, "vlm"), m_vlm(*this, "vlm"),
m_filter1(*this, "filter1"), m_filter(*this, "filter%u", 1U),
m_filter2(*this, "filter2"),
m_filter3(*this, "filter3"),
m_gfxdecode(*this, "gfxdecode") m_gfxdecode(*this, "gfxdecode")
{ } { }
void ddribble(machine_config &config); void ddribble(machine_config &config);
private: protected:
/* memory pointers */
required_shared_ptr<uint8_t> m_fg_videoram;
required_shared_ptr<uint8_t> m_spriteram_1;
required_shared_ptr<uint8_t> m_sharedram;
required_shared_ptr<uint8_t> m_bg_videoram;
required_shared_ptr<uint8_t> m_spriteram_2;
required_shared_ptr<uint8_t> m_snd_sharedram;
/* video-related */
tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap;
int m_vregs[2][5];
int m_charbank[2];
/* misc */
int m_int_enable_0;
int m_int_enable_1;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_cpu1;
required_device<vlm5030_device> m_vlm;
required_device<filter_rc_device> m_filter1;
required_device<filter_rc_device> m_filter2;
required_device<filter_rc_device> m_filter3;
required_device<gfxdecode_device> m_gfxdecode;
void ddribble_bankswitch_w(uint8_t data);
uint8_t ddribble_sharedram_r(offs_t offset);
void ddribble_sharedram_w(offs_t offset, uint8_t data);
uint8_t ddribble_snd_sharedram_r(offs_t offset);
void ddribble_snd_sharedram_w(offs_t offset, uint8_t data);
void ddribble_coin_counter_w(uint8_t data);
void K005885_0_w(offs_t offset, uint8_t data);
void K005885_1_w(offs_t offset, uint8_t data);
void ddribble_fg_videoram_w(offs_t offset, uint8_t data);
void ddribble_bg_videoram_w(offs_t offset, uint8_t data);
uint8_t ddribble_vlm5030_busy_r();
void ddribble_vlm5030_ctrl_w(uint8_t data);
TILEMAP_MAPPER_MEMBER(tilemap_scan);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void machine_start() override; virtual void machine_start() override;
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void video_start() override; virtual void video_start() override;
void ddribble_palette(palette_device &palette) const;
uint32_t screen_update_ddribble(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); private:
// memory pointers
required_shared_ptr<uint8_t> m_fg_videoram;
required_shared_ptr_array<uint8_t, 2> m_spriteram;
required_shared_ptr<uint8_t> m_bg_videoram;
required_memory_bank m_mainbank;
required_memory_bank m_vlmbank;
// video-related
tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap;
uint8_t m_vregs[2][5];
uint8_t m_charbank[2];
// misc
uint8_t m_int_enable[2];
// devices
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_subcpu;
required_device<vlm5030_device> m_vlm;
required_device_array<filter_rc_device, 3> m_filter;
required_device<gfxdecode_device> m_gfxdecode;
void bankswitch_w(uint8_t data);
void coin_counter_w(uint8_t data);
void K005885_0_w(offs_t offset, uint8_t data);
void K005885_1_w(offs_t offset, uint8_t data);
void fg_videoram_w(offs_t offset, uint8_t data);
void bg_videoram_w(offs_t offset, uint8_t data);
uint8_t vlm5030_busy_r();
void vlm5030_ctrl_w(uint8_t data);
TILEMAP_MAPPER_MEMBER(tilemap_scan);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
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); DECLARE_WRITE_LINE_MEMBER(vblank_irq);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t* source, int lenght, int gfxset, int flipscreen ); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t* source, int lenght, int gfxset, int flipscreen);
void cpu0_map(address_map &map); void maincpu_map(address_map &map);
void cpu1_map(address_map &map); void subcpu_map(address_map &map);
void cpu2_map(address_map &map); void audiocpu_map(address_map &map);
void vlm_map(address_map &map); void vlm_map(address_map &map);
}; };

View File

@ -25,59 +25,55 @@ public:
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_scroll(*this, "scroll"), m_scroll(*this, "scroll"),
m_colorram(*this, "colorram"), m_colorram(*this, "colorram%u", 1U),
m_videoram(*this, "videoram"), m_videoram(*this, "videoram%u", 1U),
m_colorram2(*this, "colorram2"), m_spriteram(*this, "spriteram%u", 1U)
m_videoram2(*this, "videoram2"),
m_spriteram(*this, "spriteram"),
m_spriteram_2(*this, "spriteram_2")
{ } { }
void finalizr(machine_config &config); void finalizr(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
private: private:
/* devices */ // devices
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<i8039_device> m_audiocpu; required_device<i8039_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
/* memory pointers */ // memory pointers
required_shared_ptr<uint8_t> m_scroll; required_shared_ptr<uint8_t> m_scroll;
required_shared_ptr<uint8_t> m_colorram; required_shared_ptr_array<uint8_t,2 > m_colorram;
required_shared_ptr<uint8_t> m_videoram; required_shared_ptr_array<uint8_t,2 > m_videoram;
required_shared_ptr<uint8_t> m_colorram2; required_shared_ptr_array<uint8_t,2 > m_spriteram;
required_shared_ptr<uint8_t> m_videoram2;
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_spriteram_2;
/* video-related */ // video-related
tilemap_t *m_fg_tilemap; tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
int m_spriterambank; uint8_t m_spriterambank;
int m_charbank; uint8_t m_charbank;
/* misc */ // misc
int m_T1_line; uint8_t m_t1_line;
uint8_t m_nmi_enable; uint8_t m_nmi_enable;
uint8_t m_irq_enable; uint8_t m_irq_enable;
void finalizr_coin_w(uint8_t data); void coin_w(uint8_t data);
void finalizr_flipscreen_w(uint8_t data); void flipscreen_w(uint8_t data);
void finalizr_i8039_irq_w(uint8_t data); void i8039_irq_w(uint8_t data);
void i8039_irqen_w(uint8_t data); void i8039_irqen_w(uint8_t data);
DECLARE_READ_LINE_MEMBER(i8039_t1_r); DECLARE_READ_LINE_MEMBER(i8039_t1_r);
void i8039_t0_w(uint8_t data); void i8039_t0_w(uint8_t data);
void finalizr_videoctrl_w(uint8_t data); void videoctrl_w(uint8_t data);
TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info);
virtual void machine_start() override; void palette(palette_device &palette) const;
virtual void machine_reset() override;
virtual void video_start() override;
void finalizr_palette(palette_device &palette) const;
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_finalizr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(finalizr_scanline); TIMER_DEVICE_CALLBACK_MEMBER(scanline);
void main_map(address_map &map); void main_map(address_map &map);
void sound_io_map(address_map &map); void sound_io_map(address_map &map);
void sound_map(address_map &map); void sound_map(address_map &map);

View File

@ -17,10 +17,10 @@
#include "screen.h" #include "screen.h"
#include "tilemap.h" #include "tilemap.h"
class ironhors_state : public driver_device class ironhors_base_state : public driver_device
{ {
public: public:
ironhors_state(const machine_config &mconfig, device_type type, const char *tag) : ironhors_base_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag), driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"), m_soundcpu(*this, "soundcpu"),
@ -33,14 +33,15 @@ public:
m_scroll(*this, "scroll"), m_scroll(*this, "scroll"),
m_colorram(*this, "colorram"), m_colorram(*this, "colorram"),
m_videoram(*this, "videoram"), m_videoram(*this, "videoram"),
m_spriteram2(*this, "spriteram2"), m_spriteram(*this, "spriteram%u", 1U)
m_spriteram(*this, "spriteram")
{ } { }
void farwest(machine_config &config); void base(machine_config &config);
void ironhors(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
void sh_irqtrigger_w(uint8_t data); void sh_irqtrigger_w(uint8_t data);
void videoram_w(offs_t offset, uint8_t data); void videoram_w(offs_t offset, uint8_t data);
void colorram_w(offs_t offset, uint8_t data); void colorram_w(offs_t offset, uint8_t data);
@ -49,26 +50,9 @@ private:
void flipscreen_w(uint8_t data); void flipscreen_w(uint8_t data);
void filter_w(uint8_t data); void filter_w(uint8_t data);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void palette(palette_device &palette) const;
uint32_t screen_update_farwest(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(ironhors_scanline_tick); // devices
TIMER_DEVICE_CALLBACK_MEMBER(farwest_scanline_tick);
void ironhors_palette(palette_device &palette) const;
DECLARE_VIDEO_START(farwest);
void farwest_master_map(address_map &map);
void farwest_slave_map(address_map &map);
void master_map(address_map &map);
void slave_io_map(address_map &map);
void slave_map(address_map &map);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
/* devices */
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu; required_device<cpu_device> m_soundcpu;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
@ -77,25 +61,69 @@ private:
required_device<generic_latch_8_device> m_soundlatch; required_device<generic_latch_8_device> m_soundlatch;
required_device<discrete_device> m_disc_ih; required_device<discrete_device> m_disc_ih;
/* memory pointers */ // memory pointers
required_shared_ptr<uint8_t> m_interrupt_enable; required_shared_ptr<uint8_t> m_interrupt_enable;
required_shared_ptr<uint8_t> m_scroll; required_shared_ptr<uint8_t> m_scroll;
required_shared_ptr<uint8_t> m_colorram; required_shared_ptr<uint8_t> m_colorram;
required_shared_ptr<uint8_t> m_videoram; required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_spriteram2; required_shared_ptr_array<uint8_t, 2> m_spriteram;
required_shared_ptr<uint8_t> m_spriteram;
/* video-related */ // video-related
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
int m_palettebank; uint8_t m_palettebank;
int m_charbank; uint8_t m_charbank;
int m_spriterambank; uint8_t m_spriterambank;
};
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); class ironhors_state : public ironhors_base_state
void farwest_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); {
public:
ironhors_state(const machine_config &mconfig, device_type type, const char *tag) :
ironhors_base_state(mconfig, type, tag)
{ }
void ironhors(machine_config &config);
protected:
virtual void video_start() override;
private:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(scanline_tick);
void master_map(address_map &map);
void slave_map(address_map &map);
void slave_io_map(address_map &map);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
};
class farwest_state : public ironhors_base_state
{
public:
farwest_state(const machine_config &mconfig, device_type type, const char *tag) :
ironhors_base_state(mconfig, type, tag)
{ }
void farwest(machine_config &config);
protected:
virtual void video_start() override;
private:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(scanline_tick);
void master_map(address_map &map);
void slave_map(address_map &map);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(farwest_get_bg_tile_info);
}; };
#endif // MAME_INCLUDES_IRONHORS_H #endif // MAME_INCLUDES_IRONHORS_H

View File

@ -2,7 +2,7 @@
// copyright-holders:Manuel Abadia // copyright-holders:Manuel Abadia
/*************************************************************************** /***************************************************************************
video.c ddribble.cpp
Functions to emulate the video hardware of the machine. Functions to emulate the video hardware of the machine.
@ -12,7 +12,7 @@
#include "includes/ddribble.h" #include "includes/ddribble.h"
void ddribble_state::ddribble_palette(palette_device &palette) const void ddribble_state::palette(palette_device &palette) const
{ {
uint8_t const *const color_prom = memregion("proms")->base(); uint8_t const *const color_prom = memregion("proms")->base();
@ -32,15 +32,15 @@ void ddribble_state::K005885_0_w(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {
case 0x03: /* char bank selection for set 1 */ case 0x03: // char bank selection for set 1
if ((data & 0x03) != m_charbank[0]) if ((data & 0x03) != m_charbank[0])
{ {
m_charbank[0] = data & 0x03; m_charbank[0] = data & 0x03;
m_fg_tilemap->mark_all_dirty(); m_fg_tilemap->mark_all_dirty();
} }
break; break;
case 0x04: /* IRQ control, flipscreen */ case 0x04: // IRQ control, flipscreen
m_int_enable_0 = data & 0x02; m_int_enable[0] = data & 0x02;
break; break;
} }
m_vregs[0][offset] = data; m_vregs[0][offset] = data;
@ -50,15 +50,15 @@ void ddribble_state::K005885_1_w(offs_t offset, uint8_t data)
{ {
switch (offset) switch (offset)
{ {
case 0x03: /* char bank selection for set 2 */ case 0x03: // char bank selection for set 2
if ((data & 0x03) != m_charbank[1]) if ((data & 0x03) != m_charbank[1])
{ {
m_charbank[1] = data & 0x03; m_charbank[1] = data & 0x03;
m_bg_tilemap->mark_all_dirty(); m_bg_tilemap->mark_all_dirty();
} }
break; break;
case 0x04: /* IRQ control, flipscreen */ case 0x04: // IRQ control, flipscreen
m_int_enable_1 = data & 0x02; m_int_enable[1] = data & 0x02;
break; break;
} }
m_vregs[1][offset] = data; m_vregs[1][offset] = data;
@ -72,8 +72,8 @@ void ddribble_state::K005885_1_w(offs_t offset, uint8_t data)
TILEMAP_MAPPER_MEMBER(ddribble_state::tilemap_scan) TILEMAP_MAPPER_MEMBER(ddribble_state::tilemap_scan)
{ {
/* logical (col,row) -> memory offset */ // logical (col,row) -> memory offset
return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x20) << 6); /* skip 0x400 */ return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x20) << 6); // skip 0x400
} }
TILE_GET_INFO_MEMBER(ddribble_state::get_fg_tile_info) TILE_GET_INFO_MEMBER(ddribble_state::get_fg_tile_info)
@ -116,13 +116,13 @@ void ddribble_state::video_start()
***************************************************************************/ ***************************************************************************/
void ddribble_state::ddribble_fg_videoram_w(offs_t offset, uint8_t data) void ddribble_state::fg_videoram_w(offs_t offset, uint8_t data)
{ {
m_fg_videoram[offset] = data; m_fg_videoram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset & 0xbff); m_fg_tilemap->mark_tile_dirty(offset & 0xbff);
} }
void ddribble_state::ddribble_bg_videoram_w(offs_t offset, uint8_t data) void ddribble_state::bg_videoram_w(offs_t offset, uint8_t data)
{ {
m_bg_videoram[offset] = data; m_bg_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset & 0xbff); m_bg_tilemap->mark_tile_dirty(offset & 0xbff);
@ -150,20 +150,20 @@ byte #4: attributes
***************************************************************************/ ***************************************************************************/
void ddribble_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t* source, int lenght, int gfxset, int flipscreen ) void ddribble_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t* source, int lenght, int gfxset, int flipscreen)
{ {
gfx_element *gfx = m_gfxdecode->gfx(gfxset); gfx_element *gfx = m_gfxdecode->gfx(gfxset);
const uint8_t *finish = source + lenght; const uint8_t *finish = source + lenght;
while (source < finish) while (source < finish)
{ {
int number = source[0] | ((source[1] & 0x07) << 8); /* sprite number */ int number = source[0] | ((source[1] & 0x07) << 8); // sprite number
int attr = source[4]; /* attributes */ int attr = source[4]; // attributes
int sx = source[3] | ((attr & 0x01) << 8); /* vertical position */ int sx = source[3] | ((attr & 0x01) << 8); // vertical position
int sy = source[2]; /* horizontal position */ int sy = source[2]; // horizontal position
int flipx = attr & 0x20; /* flip x */ int flipx = attr & 0x20; // flip x
int flipy = attr & 0x40; /* flip y */ int flipy = attr & 0x40; // flip y
int color = (source[1] & 0xf0) >> 4; /* color */ int color = (source[1] & 0xf0) >> 4; // color
int width, height; int width, height;
if (flipscreen) if (flipscreen)
@ -174,7 +174,7 @@ void ddribble_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipr
sy = 240 - sy; sy = 240 - sy;
if ((attr & 0x1c) == 0x10) if ((attr & 0x1c) == 0x10)
{ /* ???. needed for some sprites in flipped mode */ { // ???. needed for some sprites in flipped mode
sx -= 0x10; sx -= 0x10;
sy -= 0x10; sy -= 0x10;
} }
@ -182,35 +182,34 @@ void ddribble_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipr
switch (attr & 0x1c) switch (attr & 0x1c)
{ {
case 0x10: /* 32x32 */ case 0x10: // 32x32
width = height = 2; number &= (~3); break; width = height = 2; number &= (~3); break;
case 0x08: /* 16x32 */ case 0x08: // 16x32
width = 1; height = 2; number &= (~2); break; width = 1; height = 2; number &= (~2); break;
case 0x04: /* 32x16 */ case 0x04: // 32x16
width = 2; height = 1; number &= (~1); break; width = 2; height = 1; number &= (~1); break;
/* the hardware allow more sprite sizes, but ddribble doesn't use them */ // the hardware allows more sprite sizes, but ddribble doesn't use them
default: /* 16x16 */ default: // 16x16
width = height = 1; break; width = height = 1; break;
} }
{ {
static const int x_offset[2] = { 0x00, 0x01 }; static const int x_offset[2] = { 0x00, 0x01 };
static const int y_offset[2] = { 0x00, 0x02 }; static const int y_offset[2] = { 0x00, 0x02 };
int x, y, ex, ey;
for (y = 0; y < height; y++) for (int y = 0; y < height; y++)
{ {
for (x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
ex = flipx ? (width - 1 - x) : x; int ex = flipx ? (width - 1 - x) : x;
ey = flipy ? (height - 1 - y) : y; int ey = flipy ? (height - 1 - y) : y;
gfx->transpen(bitmap,cliprect, gfx->transpen(bitmap, cliprect,
(number)+x_offset[ex]+y_offset[ey], (number) + x_offset[ex] + y_offset[ey],
color, color,
flipx, flipy, flipx, flipy,
sx+x*16,sy+y*16, 0); sx + x * 16, sy + y * 16, 0);
} }
} }
} }
@ -224,20 +223,20 @@ void ddribble_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipr
***************************************************************************/ ***************************************************************************/
uint32_t ddribble_state::screen_update_ddribble(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) uint32_t ddribble_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
m_fg_tilemap->set_flip((m_vregs[0][4] & 0x08) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); m_fg_tilemap->set_flip((m_vregs[0][4] & 0x08) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
m_bg_tilemap->set_flip((m_vregs[1][4] & 0x08) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); m_bg_tilemap->set_flip((m_vregs[1][4] & 0x08) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
/* set scroll registers */ // set scroll registers
m_fg_tilemap->set_scrollx(0, m_vregs[0][1] | ((m_vregs[0][2] & 0x01) << 8)); m_fg_tilemap->set_scrollx(0, m_vregs[0][1] | ((m_vregs[0][2] & 0x01) << 8));
m_bg_tilemap->set_scrollx(0, m_vregs[1][1] | ((m_vregs[1][2] & 0x01) << 8)); m_bg_tilemap->set_scrollx(0, m_vregs[1][1] | ((m_vregs[1][2] & 0x01) << 8));
m_fg_tilemap->set_scrolly(0, m_vregs[0][0]); m_fg_tilemap->set_scrolly(0, m_vregs[0][0]);
m_bg_tilemap->set_scrolly(0, m_vregs[1][0]); m_bg_tilemap->set_scrolly(0, m_vregs[1][0]);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect, m_spriteram_1, 0x07d, 2, m_vregs[0][4] & 0x08); draw_sprites(bitmap, cliprect, m_spriteram[0], 0x07d, 2, m_vregs[0][4] & 0x08);
draw_sprites(bitmap, cliprect, m_spriteram_2, 0x140, 3, m_vregs[1][4] & 0x08); draw_sprites(bitmap, cliprect, m_spriteram[1], 0x140, 3, m_vregs[1][4] & 0x08);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0; return 0;
} }

View File

@ -35,7 +35,7 @@
***************************************************************************/ ***************************************************************************/
void finalizr_state::finalizr_palette(palette_device &palette) const void finalizr_state::palette(palette_device &palette) const
{ {
const uint8_t *color_prom = memregion("proms")->base(); const uint8_t *color_prom = memregion("proms")->base();
static constexpr int resistances[4] = { 2200, 1000, 470, 220 }; static constexpr int resistances[4] = { 2200, 1000, 470, 220 };
@ -94,8 +94,8 @@ void finalizr_state::finalizr_palette(palette_device &palette) const
TILE_GET_INFO_MEMBER(finalizr_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(finalizr_state::get_bg_tile_info)
{ {
int attr = m_colorram[tile_index]; int attr = m_colorram[0][tile_index];
int code = m_videoram[tile_index] + ((attr & 0xc0) << 2) + (m_charbank << 10); int code = m_videoram[0][tile_index] + ((attr & 0xc0) << 2) + (m_charbank << 10);
int color = attr & 0x0f; int color = attr & 0x0f;
int flags = TILE_FLIPYX((attr & 0x30) >> 4); int flags = TILE_FLIPYX((attr & 0x30) >> 4);
@ -104,8 +104,8 @@ TILE_GET_INFO_MEMBER(finalizr_state::get_bg_tile_info)
TILE_GET_INFO_MEMBER(finalizr_state::get_fg_tile_info) TILE_GET_INFO_MEMBER(finalizr_state::get_fg_tile_info)
{ {
int attr = m_colorram2[tile_index]; int attr = m_colorram[1][tile_index];
int code = m_videoram2[tile_index] + ((attr & 0xc0) << 2); int code = m_videoram[1][tile_index] + ((attr & 0xc0) << 2);
int color = attr & 0x0f; int color = attr & 0x0f;
int flags = TILE_FLIPYX((attr & 0x30) >> 4); int flags = TILE_FLIPYX((attr & 0x30) >> 4);
@ -127,22 +127,20 @@ void finalizr_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
gfx_element *gfx1 = m_gfxdecode->gfx(1); gfx_element *gfx1 = m_gfxdecode->gfx(1);
gfx_element *gfx2 = m_gfxdecode->gfx(2); gfx_element *gfx2 = m_gfxdecode->gfx(2);
uint8_t *sr = m_spriterambank ? m_spriteram_2 : m_spriteram; uint8_t *sr = m_spriterambank ? m_spriteram[1] : m_spriteram[0];
for (int offs = 0; offs <= m_spriteram.bytes() - 5; offs += 5) for (int offs = 0; offs <= m_spriteram[0].bytes() - 5; offs += 5)
{ {
int sx, sy, flipx, flipy, code, color, size; int sx = 32 + 1 + sr[offs + 3] - ((sr[offs + 4] & 0x01) << 8);
int sy = sr[offs + 2];
sx = 32 + 1 + sr[offs + 3] - ((sr[offs + 4] & 0x01) << 8); int flipx = sr[offs + 4] & 0x20;
sy = sr[offs + 2]; int flipy = sr[offs + 4] & 0x40;
flipx = sr[offs + 4] & 0x20; int code = sr[offs] + ((sr[offs + 1] & 0x0f) << 8);
flipy = sr[offs + 4] & 0x40; int color = ((sr[offs + 1] & 0xf0) >> 4);
code = sr[offs] + ((sr[offs + 1] & 0x0f) << 8);
color = ((sr[offs + 1] & 0xf0) >> 4);
// (sr[offs + 4] & 0x02) is used, meaning unknown // (sr[offs + 4] & 0x02) is used, meaning unknown
size = sr[offs + 4] & 0x1c; int size = sr[offs + 4] & 0x1c;
if (size >= 0x10) if (size >= 0x10)
{ {
@ -202,7 +200,7 @@ void finalizr_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
} }
uint32_t finalizr_state::screen_update_finalizr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) uint32_t finalizr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
m_bg_tilemap->mark_all_dirty(); m_bg_tilemap->mark_all_dirty();
m_fg_tilemap->mark_all_dirty(); m_fg_tilemap->mark_all_dirty();

View File

@ -2,7 +2,7 @@
// copyright-holders:Mirko Buffoni // copyright-holders:Mirko Buffoni
/*************************************************************************** /***************************************************************************
ironhors.c ironhors.cpp
Functions to emulate the video hardware of the machine. Functions to emulate the video hardware of the machine.
@ -18,7 +18,7 @@
***************************************************************************/ ***************************************************************************/
void ironhors_state::ironhors_palette(palette_device &palette) const void ironhors_base_state::palette(palette_device &palette) const
{ {
const uint8_t *color_prom = memregion("proms")->base(); const uint8_t *color_prom = memregion("proms")->base();
static constexpr int resistances[4] = { 2000, 1000, 470, 220 }; static constexpr int resistances[4] = { 2000, 1000, 470, 220 };
@ -73,19 +73,19 @@ void ironhors_state::ironhors_palette(palette_device &palette) const
} }
} }
void ironhors_state::videoram_w(offs_t offset, uint8_t data) void ironhors_base_state::videoram_w(offs_t offset, uint8_t data)
{ {
m_videoram[offset] = data; m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset); m_bg_tilemap->mark_tile_dirty(offset);
} }
void ironhors_state::colorram_w(offs_t offset, uint8_t data) void ironhors_base_state::colorram_w(offs_t offset, uint8_t data)
{ {
m_colorram[offset] = data; m_colorram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset); m_bg_tilemap->mark_tile_dirty(offset);
} }
void ironhors_state::charbank_w(uint8_t data) void ironhors_base_state::charbank_w(uint8_t data)
{ {
if (m_charbank != (data & 0x03)) if (m_charbank != (data & 0x03))
{ {
@ -95,10 +95,10 @@ void ironhors_state::charbank_w(uint8_t data)
m_spriterambank = data & 0x08; m_spriterambank = data & 0x08;
/* other bits unknown */ // other bits unknown
} }
void ironhors_state::palettebank_w(uint8_t data) void ironhors_base_state::palettebank_w(uint8_t data)
{ {
if (m_palettebank != (data & 0x07)) if (m_palettebank != (data & 0x07))
{ {
@ -109,13 +109,13 @@ void ironhors_state::palettebank_w(uint8_t data)
machine().bookkeeping().coin_counter_w(0, data & 0x10); machine().bookkeeping().coin_counter_w(0, data & 0x10);
machine().bookkeeping().coin_counter_w(1, data & 0x20); machine().bookkeeping().coin_counter_w(1, data & 0x20);
/* bit 6 unknown - set after game over */ // bit 6 unknown - set after game over
if (data & 0x88) if (data & 0x88)
popmessage("palettebank_w %02x",data); popmessage("palettebank_w %02x",data);
} }
void ironhors_state::flipscreen_w(uint8_t data) void ironhors_base_state::flipscreen_w(uint8_t data)
{ {
if (flip_screen() != (~data & 0x08)) if (flip_screen() != (~data & 0x08))
{ {
@ -123,7 +123,7 @@ void ironhors_state::flipscreen_w(uint8_t data)
machine().tilemap().mark_all_dirty(); machine().tilemap().mark_all_dirty();
} }
/* other bits are used too, but unknown */ // other bits are used too, but unknown
} }
TILE_GET_INFO_MEMBER(ironhors_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(ironhors_state::get_bg_tile_info)
@ -144,17 +144,16 @@ void ironhors_state::video_start()
m_bg_tilemap->set_scroll_rows(32); m_bg_tilemap->set_scroll_rows(32);
} }
void ironhors_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) void ironhors_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int offs;
uint8_t *sr; uint8_t *sr;
if (m_spriterambank != 0) if (m_spriterambank != 0)
sr = m_spriteram; sr = m_spriteram[0];
else else
sr = m_spriteram2; sr = m_spriteram[1];
for (offs = 0; offs < m_spriteram.bytes(); offs += 5) for (int offs = 0; offs < m_spriteram[0].bytes(); offs += 5)
{ {
int sx = sr[offs + 3]; int sx = sr[offs + 3];
int sy = sr[offs + 2]; int sy = sr[offs + 2];
@ -174,7 +173,7 @@ void ironhors_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
switch (sr[offs + 4] & 0x0c) switch (sr[offs + 4] & 0x0c)
{ {
case 0x00: /* 16x16 */ case 0x00: // 16x16
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
code/4, code/4,
color, color,
@ -182,7 +181,7 @@ void ironhors_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
sx,sy,0); sx,sy,0);
break; break;
case 0x04: /* 16x8 */ case 0x04: // 16x8
{ {
if (flip_screen()) sy += 8; // this fixes the train wheels' position if (flip_screen()) sy += 8; // this fixes the train wheels' position
@ -199,7 +198,7 @@ void ironhors_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
} }
break; break;
case 0x08: /* 8x16 */ case 0x08: // 8x16
{ {
m_gfxdecode->gfx(2)->transpen(bitmap,cliprect, m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
code & ~2, code & ~2,
@ -214,7 +213,7 @@ void ironhors_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
} }
break; break;
case 0x0c: /* 8x8 */ case 0x0c: // 8x8
{ {
m_gfxdecode->gfx(2)->transpen(bitmap,cliprect, m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
code, code,
@ -229,9 +228,7 @@ void ironhors_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
uint32_t ironhors_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) uint32_t ironhors_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int row; for (int row = 0; row < 32; row++)
for (row = 0; row < 32; row++)
m_bg_tilemap->set_scrollx(row, m_scroll[row]); m_bg_tilemap->set_scrollx(row, m_scroll[row]);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
@ -239,7 +236,7 @@ uint32_t ironhors_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
return 0; return 0;
} }
TILE_GET_INFO_MEMBER(ironhors_state::farwest_get_bg_tile_info) TILE_GET_INFO_MEMBER(farwest_state::get_bg_tile_info)
{ {
int code = m_videoram[tile_index] + ((m_colorram[tile_index] & 0x40) << 2) + int code = m_videoram[tile_index] + ((m_colorram[tile_index] & 0x40) << 2) +
((m_colorram[tile_index] & 0x20) << 4) + (m_charbank << 10); ((m_colorram[tile_index] & 0x20) << 4) + (m_charbank << 10);
@ -249,20 +246,19 @@ TILE_GET_INFO_MEMBER(ironhors_state::farwest_get_bg_tile_info)
tileinfo.set(0, code, color, flags); tileinfo.set(0, code, color, flags);
} }
VIDEO_START_MEMBER(ironhors_state,farwest) void farwest_state::video_start()
{ {
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ironhors_state::farwest_get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(farwest_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_bg_tilemap->set_scroll_rows(32); m_bg_tilemap->set_scroll_rows(32);
} }
void ironhors_state::farwest_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) void farwest_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int offs; uint8_t *sr = m_spriteram[1];
uint8_t *sr = m_spriteram2; uint8_t *sr2 = m_spriteram[0];
uint8_t *sr2 = m_spriteram;
for (offs = 0; offs < m_spriteram.bytes(); offs += 4) for (int offs = 0; offs < m_spriteram[0].bytes(); offs += 4)
{ {
int sx = sr[offs + 2]; int sx = sr[offs + 2];
int sy = sr[offs + 1]; int sy = sr[offs + 1];
@ -283,7 +279,7 @@ void ironhors_state::farwest_draw_sprites( bitmap_ind16 &bitmap, const rectangle
switch (sr[offs + 3] & 0x0c) switch (sr[offs + 3] & 0x0c)
{ {
case 0x00: /* 16x16 */ case 0x00: // 16x16
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
code/4, code/4,
color, color,
@ -291,7 +287,7 @@ void ironhors_state::farwest_draw_sprites( bitmap_ind16 &bitmap, const rectangle
sx,sy,0); sx,sy,0);
break; break;
case 0x04: /* 16x8 */ case 0x04: // 16x8
{ {
if (flip_screen()) sy += 8; // this fixes the train wheels' position if (flip_screen()) sy += 8; // this fixes the train wheels' position
@ -308,7 +304,7 @@ void ironhors_state::farwest_draw_sprites( bitmap_ind16 &bitmap, const rectangle
} }
break; break;
case 0x08: /* 8x16 */ case 0x08: // 8x16
{ {
m_gfxdecode->gfx(2)->transpen(bitmap,cliprect, m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
code & ~2, code & ~2,
@ -323,7 +319,7 @@ void ironhors_state::farwest_draw_sprites( bitmap_ind16 &bitmap, const rectangle
} }
break; break;
case 0x0c: /* 8x8 */ case 0x0c: // 8x8
{ {
m_gfxdecode->gfx(2)->transpen(bitmap,cliprect, m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
code, code,
@ -336,14 +332,12 @@ void ironhors_state::farwest_draw_sprites( bitmap_ind16 &bitmap, const rectangle
} }
} }
uint32_t ironhors_state::screen_update_farwest(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) uint32_t farwest_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int row; for (int row = 0; row < 32; row++)
for (row = 0; row < 32; row++)
m_bg_tilemap->set_scrollx(row, m_scroll[row]); m_bg_tilemap->set_scrollx(row, m_scroll[row]);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
farwest_draw_sprites(bitmap, cliprect); draw_sprites(bitmap, cliprect);
return 0; return 0;
} }