diff options
Diffstat (limited to 'src/mame/konami/timeplt.cpp')
-rw-r--r-- | src/mame/konami/timeplt.cpp | 551 |
1 files changed, 434 insertions, 117 deletions
diff --git a/src/mame/konami/timeplt.cpp b/src/mame/konami/timeplt.cpp index 7d8ec72619a..7ca3462f2d2 100644 --- a/src/mame/konami/timeplt.cpp +++ b/src/mame/konami/timeplt.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:Nicola Salmoria +// copyright-holders: Nicola Salmoria + /*************************************************************************** Time Pilot @@ -48,15 +49,342 @@ ***************************************************************************/ #include "emu.h" -#include "timeplt.h" + #include "konamipt.h" #include "timeplt_a.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/watchdog.h" #include "sound/ay8910.h" +#include "sound/tc8830f.h" + +#include "emupal.h" +#include "screen.h" +#include "tilemap.h" + + +namespace { + +class timeplt_state : public driver_device +{ +public: + timeplt_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_mainlatch(*this, "mainlatch"), + m_gfxdecode(*this, "gfxdecode"), + m_screen(*this, "screen"), + m_palette(*this, "palette"), + m_colorram(*this, "colorram"), + m_videoram(*this, "videoram"), + m_spriteram(*this, "spriteram%u", 1U) + { } + + void timeplt(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + + required_device<cpu_device> m_maincpu; + required_device<ls259_device> m_mainlatch; + required_device<gfxdecode_device> m_gfxdecode; + required_device<screen_device> m_screen; + required_device<palette_device> m_palette; + + // memory pointers + required_shared_ptr<uint8_t> m_colorram; + required_shared_ptr<uint8_t> m_videoram; + required_shared_ptr_array<uint8_t, 2> m_spriteram; + + bool m_video_enable = false; + + // video-related + tilemap_t *m_bg_tilemap = nullptr; + + void main_map(address_map &map); + +private: + // misc + uint8_t m_nmi_enable = 0; + + void nmi_enable_w(int state); + void video_enable_w(int state); + template <uint8_t Which> void coin_counter_w(int state); + void videoram_w(offs_t offset, uint8_t data); + void colorram_w(offs_t offset, uint8_t data); + uint8_t scanline_r(); + TILE_GET_INFO_MEMBER(get_tile_info); + void palette(palette_device &palette) const; + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); + void vblank_irq(int state); +}; + +class psurge_state : public timeplt_state +{ +public: + using timeplt_state::timeplt_state; + + void psurge(machine_config &config); + +protected: + virtual void video_start() override; + +private: + uint8_t protection_r(); + + void main_map(address_map &map); +}; + +class bikkuric_state : public timeplt_state +{ +public: + using timeplt_state::timeplt_state; + + void bikkuric(machine_config &config); + + int hopper_status_r(); + +protected: + virtual void video_start() override; + +private: + TILE_GET_INFO_MEMBER(get_tile_info); + + void main_map(address_map &map); +}; + +class chkun_state : public bikkuric_state +{ +public: + chkun_state(const machine_config &mconfig, device_type type, const char *tag) : + bikkuric_state(mconfig, type, tag), + m_tc8830f(*this, "tc8830f") + { } + + void chkun(machine_config &config); + +private: + required_device<tc8830f_device> m_tc8830f; + + void sound_w(uint8_t data); +}; + + +/*************************************************************************** + + Convert the color PROMs into a more useable format. + + Time Pilot has two 32x8 palette PROMs and two 256x4 lookup table PROMs + (one for characters, one for sprites). + The palette PROMs are connected to the RGB output this way: + + bit 7 -- 390 ohm resistor -- BLUE + -- 470 ohm resistor -- BLUE + -- 560 ohm resistor -- BLUE + -- 820 ohm resistor -- BLUE + -- 1.2kohm resistor -- BLUE + -- 390 ohm resistor -- GREEN + -- 470 ohm resistor -- GREEN + bit 0 -- 560 ohm resistor -- GREEN + + bit 7 -- 820 ohm resistor -- GREEN + -- 1.2kohm resistor -- GREEN + -- 390 ohm resistor -- RED + -- 470 ohm resistor -- RED + -- 560 ohm resistor -- RED + -- 820 ohm resistor -- RED + -- 1.2kohm resistor -- RED + bit 0 -- not connected + +***************************************************************************/ + +void timeplt_state::palette(palette_device &palette) const +{ + const uint8_t *color_prom = memregion("proms")->base(); + + rgb_t palette_val[32]; + for (int i = 0; i < 32; i++) + { + int bit0, bit1, bit2, bit3, bit4; + + bit0 = BIT(color_prom[i + 1 * 32], 1); + bit1 = BIT(color_prom[i + 1 * 32], 2); + bit2 = BIT(color_prom[i + 1 * 32], 3); + bit3 = BIT(color_prom[i + 1 * 32], 4); + bit4 = BIT(color_prom[i + 1 * 32], 5); + int const r = 0x19 * bit0 + 0x24 * bit1 + 0x35 * bit2 + 0x40 * bit3 + 0x4d * bit4; + bit0 = BIT(color_prom[i + 1 * 32], 6); + bit1 = BIT(color_prom[i + 1 * 32], 7); + bit2 = BIT(color_prom[i + 0 * 32], 0); + bit3 = BIT(color_prom[i + 0 * 32], 1); + bit4 = BIT(color_prom[i + 0 * 32], 2); + int const g = 0x19 * bit0 + 0x24 * bit1 + 0x35 * bit2 + 0x40 * bit3 + 0x4d * bit4; + bit0 = BIT(color_prom[i + 0 * 32], 3); + bit1 = BIT(color_prom[i + 0 * 32], 4); + bit2 = BIT(color_prom[i + 0 * 32], 5); + bit3 = BIT(color_prom[i + 0 * 32], 6); + bit4 = BIT(color_prom[i + 0 * 32], 7); + int const b = 0x19 * bit0 + 0x24 * bit1 + 0x35 * bit2 + 0x40 * bit3 + 0x4d * bit4; + + palette_val[i] = rgb_t(r, g, b); + } + + color_prom += 2*32; + // color_prom now points to the beginning of the lookup table + + + // sprites + for (int i = 0; i < 64 * 4; i++) + palette.set_pen_color(32 * 4 + i, palette_val[*color_prom++ & 0x0f]); + + // characters + for (int i = 0; i < 32 * 4; i++) + palette.set_pen_color(i, palette_val[(*color_prom++ & 0x0f) + 0x10]); +} + + + +/************************************* + * + * Tilemap info callback + * + *************************************/ + +TILE_GET_INFO_MEMBER(timeplt_state::get_tile_info) +{ + int const attr = m_colorram[tile_index]; + int const code = m_videoram[tile_index] + 8 * (attr & 0x20); + int const color = attr & 0x1f; + int const flags = TILE_FLIPYX(attr >> 6); + + tileinfo.category = (attr & 0x10) >> 4; + tileinfo.set(0, code, color, flags); +} + +TILE_GET_INFO_MEMBER(bikkuric_state::get_tile_info) +{ + int const attr = m_colorram[tile_index]; + int const code = m_videoram[tile_index] + ((attr & 0x60) << 3); + int const color = attr & 0x1f; + int const flags = 0; //TILE_FLIPYX(attr >> 6); + + tileinfo.category = (attr & 0x80) >> 7; + tileinfo.set(0, code, color, flags); +} + + + +/************************************* + * + * Video startup + * + *************************************/ + +void timeplt_state::video_start() +{ + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(timeplt_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + m_video_enable = 0; + + save_item(NAME(m_video_enable)); +} + +void psurge_state::video_start() +{ + timeplt_state::video_start(); + + m_video_enable = 1; //psurge doesn't seem to have the video enable +} + +void bikkuric_state::video_start() +{ + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bikkuric_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + m_video_enable = 0; + + save_item(NAME(m_video_enable)); +} + + + +/************************************* + * + * Memory write handlers + * + *************************************/ + +void timeplt_state::videoram_w(offs_t offset, uint8_t data) +{ + m_videoram[offset] = data; + m_bg_tilemap->mark_tile_dirty(offset); +} + + +void timeplt_state::colorram_w(offs_t offset, uint8_t data) +{ + m_colorram[offset] = data; + m_bg_tilemap->mark_tile_dirty(offset); +} + + +void timeplt_state::video_enable_w(int state) +{ + m_video_enable = state; +} + +uint8_t timeplt_state::scanline_r() +{ + return m_screen->vpos(); +} + + + +/************************************* + * + * Sprite rendering + * + *************************************/ + +void timeplt_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + for (int offs = 0x3e; offs >= 0x10; offs -= 2) + { + int const sx = m_spriteram[0][offs]; + int const sy = 241 - m_spriteram[1][offs + 1]; + + int const code = m_spriteram[0][offs + 1]; + int const color = m_spriteram[1][offs] & 0x3f; + int const flipx = ~m_spriteram[1][offs] & 0x40; + int const flipy = m_spriteram[1][offs] & 0x80; + + m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, + code, + color, + flipx, flipy, + sx, sy, 0); + } +} + + + +/************************************* + * + * Video update + * + *************************************/ + +uint32_t timeplt_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + if (m_video_enable) + { + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + draw_sprites(bitmap, cliprect); + m_bg_tilemap->draw(screen, bitmap, cliprect, 1, 0); + } + return 0; +} -#define MASTER_CLOCK XTAL(18'432'000) /************************************* * @@ -64,14 +392,14 @@ * *************************************/ -WRITE_LINE_MEMBER(timeplt_state::vblank_irq) +void timeplt_state::vblank_irq(int state) { if (state && m_nmi_enable) m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } -WRITE_LINE_MEMBER(timeplt_state::nmi_enable_w) +void timeplt_state::nmi_enable_w(int state) { m_nmi_enable = state; if (!m_nmi_enable) @@ -86,23 +414,19 @@ WRITE_LINE_MEMBER(timeplt_state::nmi_enable_w) * *************************************/ -WRITE_LINE_MEMBER(timeplt_state::coin_counter_1_w) +template <uint8_t Which> +void timeplt_state::coin_counter_w(int state) { - machine().bookkeeping().coin_counter_w(0, state); + machine().bookkeeping().coin_counter_w(Which, state); } -WRITE_LINE_MEMBER(timeplt_state::coin_counter_2_w) -{ - machine().bookkeeping().coin_counter_w(1, state); -} - -uint8_t timeplt_state::psurge_protection_r() +uint8_t psurge_state::protection_r() { return 0x80; } -// chkun has access to an extra soundchip via ay2 port a -void timeplt_state::chkun_sound_w(uint8_t data) +// chkun has access to an extra sound chip via ay2 port a +void chkun_state::sound_w(uint8_t data) { // d0-d3: P0-P3 // d5: /R (unused?) @@ -115,7 +439,7 @@ void timeplt_state::chkun_sound_w(uint8_t data) m_tc8830f->reset(); } -READ_LINE_MEMBER(timeplt_state::chkun_hopper_status_r) +int bikkuric_state::hopper_status_r() { // temp workaround, needs hopper return machine().rand(); @@ -129,15 +453,15 @@ READ_LINE_MEMBER(timeplt_state::chkun_hopper_status_r) * *************************************/ -void timeplt_state::timeplt_main_map(address_map &map) +void timeplt_state::main_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x5fff).rom(); - map(0xa000, 0xa3ff).ram().w(FUNC(timeplt_state::colorram_w)).share("colorram"); - map(0xa400, 0xa7ff).ram().w(FUNC(timeplt_state::videoram_w)).share("videoram"); + map(0xa000, 0xa3ff).ram().w(FUNC(timeplt_state::colorram_w)).share(m_colorram); + map(0xa400, 0xa7ff).ram().w(FUNC(timeplt_state::videoram_w)).share(m_videoram); map(0xa800, 0xafff).ram(); - map(0xb000, 0xb0ff).mirror(0x0b00).ram().share("spriteram"); - map(0xb400, 0xb4ff).mirror(0x0b00).ram().share("spriteram2"); + map(0xb000, 0xb0ff).mirror(0x0b00).ram().share(m_spriteram[0]); + map(0xb400, 0xb4ff).mirror(0x0b00).ram().share(m_spriteram[1]); map(0xc000, 0xc000).mirror(0x0cff).r(FUNC(timeplt_state::scanline_r)).w("timeplt_audio", FUNC(timeplt_audio_device::sound_data_w)); map(0xc200, 0xc200).mirror(0x0cff).portr("DSW1").w("watchdog", FUNC(watchdog_timer_device::reset_w)); map(0xc300, 0xc300).mirror(0x0c9f).portr("IN0"); @@ -147,15 +471,15 @@ void timeplt_state::timeplt_main_map(address_map &map) map(0xc360, 0xc360).mirror(0x0c9f).portr("DSW0"); } -void timeplt_state::psurge_main_map(address_map &map) +void psurge_state::main_map(address_map &map) { - timeplt_main_map(map); - map(0x6004, 0x6004).r(FUNC(timeplt_state::psurge_protection_r)); + timeplt_state::main_map(map); + map(0x6004, 0x6004).r(FUNC(psurge_state::protection_r)); } -void timeplt_state::chkun_main_map(address_map &map) +void bikkuric_state::main_map(address_map &map) { - timeplt_main_map(map); + timeplt_state::main_map(map); map(0x6000, 0x67ff).ram(); } @@ -272,7 +596,7 @@ static INPUT_PORTS_START( chkun ) PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Bet 3B") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(timeplt_state, chkun_hopper_status_r) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(bikkuric_state, hopper_status_r) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet 1B") PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Bet 2B") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) @@ -321,7 +645,7 @@ static INPUT_PORTS_START( bikkuric ) PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(timeplt_state, chkun_hopper_status_r) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(bikkuric_state, hopper_status_r) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) @@ -387,8 +711,8 @@ static const gfx_layout spritelayout = static GFXDECODE_START( gfx_timeplt ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 ) - GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 32*4, 64 ) + GFXDECODE_ENTRY( "tiles", 0, charlayout, 0, 32 ) + GFXDECODE_ENTRY( "sprites", 0, spritelayout, 32*4, 64 ) GFXDECODE_END static const gfx_layout chkun_spritelayout = @@ -403,8 +727,8 @@ static const gfx_layout chkun_spritelayout = }; static GFXDECODE_START( gfx_chkun ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 ) - GFXDECODE_ENTRY( "gfx2", 0, chkun_spritelayout, 32*4, 64 ) + GFXDECODE_ENTRY( "tiles", 0, charlayout, 0, 32 ) + GFXDECODE_ENTRY( "sprites", 0, chkun_spritelayout, 32*4, 64 ) GFXDECODE_END /************************************* @@ -418,29 +742,27 @@ void timeplt_state::machine_start() save_item(NAME(m_nmi_enable)); } -void timeplt_state::machine_reset() -{ -} - void timeplt_state::timeplt(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, MASTER_CLOCK/3/2); /* not confirmed, but common for Konami games of the era */ - m_maincpu->set_addrmap(AS_PROGRAM, &timeplt_state::timeplt_main_map); + static constexpr XTAL MASTER_CLOCK = XTAL(18'432'000); + + // basic machine hardware + Z80(config, m_maincpu, MASTER_CLOCK / 3 / 2); // not confirmed, but common for Konami games of the era + m_maincpu->set_addrmap(AS_PROGRAM, &timeplt_state::main_map); LS259(config, m_mainlatch); // B3 m_mainlatch->q_out_cb<0>().set(FUNC(timeplt_state::nmi_enable_w)); - m_mainlatch->q_out_cb<1>().set(FUNC(timeplt_state::flipscreen_w)); + m_mainlatch->q_out_cb<1>().set(FUNC(timeplt_state::flip_screen_set)).invert(); m_mainlatch->q_out_cb<2>().set("timeplt_audio", FUNC(timeplt_audio_device::sh_irqtrigger_w)); m_mainlatch->q_out_cb<3>().set("timeplt_audio", FUNC(timeplt_audio_device::mute_w)); m_mainlatch->q_out_cb<4>().set(FUNC(timeplt_state::video_enable_w)); - m_mainlatch->q_out_cb<5>().set(FUNC(timeplt_state::coin_counter_1_w)); - m_mainlatch->q_out_cb<6>().set(FUNC(timeplt_state::coin_counter_2_w)); + m_mainlatch->q_out_cb<5>().set(FUNC(timeplt_state::coin_counter_w<0>)); + m_mainlatch->q_out_cb<6>().set(FUNC(timeplt_state::coin_counter_w<1>)); m_mainlatch->q_out_cb<7>().set_nop(); // PAY OUT - not used WATCHDOG_TIMER(config, "watchdog"); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE); m_screen->set_refresh_hz(60); @@ -451,18 +773,18 @@ void timeplt_state::timeplt(machine_config &config) m_screen->screen_vblank().set(FUNC(timeplt_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_timeplt); - PALETTE(config, m_palette, FUNC(timeplt_state::timeplt_palette), 32*4 + 64*4); + PALETTE(config, m_palette, FUNC(timeplt_state::palette), 32*4 + 64*4); - /* sound hardware */ + // sound hardware TIMEPLT_AUDIO(config, "timeplt_audio"); } -void timeplt_state::psurge(machine_config &config) +void psurge_state::psurge(machine_config &config) { timeplt(config); - /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &timeplt_state::psurge_main_map); + // basic machine hardware + m_maincpu->set_addrmap(AS_PROGRAM, &psurge_state::main_map); m_screen->screen_vblank().set_inputline("maincpu", INPUT_LINE_NMI); @@ -470,30 +792,24 @@ void timeplt_state::psurge(machine_config &config) m_mainlatch->q_out_cb<4>().set_nop(); m_mainlatch->q_out_cb<5>().set_nop(); m_mainlatch->q_out_cb<6>().set_nop(); - - MCFG_VIDEO_START_OVERRIDE(timeplt_state,psurge) } -void timeplt_state::bikkuric(machine_config &config) +void bikkuric_state::bikkuric(machine_config &config) { timeplt(config); m_gfxdecode->set_info(gfx_chkun); - /* basic machine hardware */ - m_maincpu->set_addrmap(AS_PROGRAM, &timeplt_state::chkun_main_map); - - MCFG_VIDEO_START_OVERRIDE(timeplt_state,chkun) + // basic machine hardware + m_maincpu->set_addrmap(AS_PROGRAM, &bikkuric_state::main_map); } -void timeplt_state::chkun(machine_config &config) +void chkun_state::chkun(machine_config &config) { bikkuric(config); - m_gfxdecode->set_info(gfx_chkun); - - /* sound hardware */ - subdevice<ay8910_device>("timeplt_audio:ay2")->port_a_write_callback().set(FUNC(timeplt_state::chkun_sound_w)); + // sound hardware + subdevice<ay8910_device>("timeplt_audio:ay2")->port_a_write_callback().set(FUNC(chkun_state::sound_w)); TC8830F(config, m_tc8830f, XTAL(512'000)); m_tc8830f->add_route(ALL_OUTPUTS, "timeplt_audio:mono", 0.10); @@ -516,18 +832,18 @@ ROM_START( timeplt ) ROM_REGION( 0x10000, "timeplt_audio:tpsound", 0 ) ROM_LOAD( "tm7", 0x0000, 0x1000, CRC(d66da813) SHA1(408fca4515e8af84211df3e204c8776b2f8adb23) ) - ROM_REGION( 0x2000, "gfx1", 0 ) + ROM_REGION( 0x2000, "tiles", 0 ) ROM_LOAD( "tm6", 0x0000, 0x2000, CRC(c2507f40) SHA1(07221875e3f81d9def67c57a7ccd82d52ce65e01) ) - ROM_REGION( 0x4000, "gfx2", 0 ) + ROM_REGION( 0x4000, "sprites", 0 ) ROM_LOAD( "tm4", 0x0000, 0x2000, CRC(7e437c3e) SHA1(cbe2ccd2cd503af62f009cd5aab73aa7366230b1) ) ROM_LOAD( "tm5", 0x2000, 0x2000, CRC(e8ca87b9) SHA1(5dd30d3fb9fd8cf9e6a8e37e7ea858c7fd038a7e) ) ROM_REGION( 0x0240, "proms", 0 ) - ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) /* palette */ - ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) /* palette */ - ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) /* sprite lookup table */ - ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) /* char lookup table */ + ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) // palette + ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) // palette + ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) // sprite lookup table + ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) // char lookup table ROM_END ROM_START( timeplta ) @@ -539,18 +855,18 @@ ROM_START( timeplta ) ROM_REGION( 0x10000, "timeplt_audio:tpsound", 0 ) ROM_LOAD( "tm7", 0x0000, 0x1000, CRC(d66da813) SHA1(408fca4515e8af84211df3e204c8776b2f8adb23) ) - ROM_REGION( 0x2000, "gfx1", 0 ) + ROM_REGION( 0x2000, "tiles", 0 ) ROM_LOAD( "tm6", 0x0000, 0x2000, CRC(c2507f40) SHA1(07221875e3f81d9def67c57a7ccd82d52ce65e01) ) - ROM_REGION( 0x4000, "gfx2", 0 ) + ROM_REGION( 0x4000, "sprites", 0 ) ROM_LOAD( "tm4", 0x0000, 0x2000, CRC(7e437c3e) SHA1(cbe2ccd2cd503af62f009cd5aab73aa7366230b1) ) ROM_LOAD( "tm5", 0x2000, 0x2000, CRC(e8ca87b9) SHA1(5dd30d3fb9fd8cf9e6a8e37e7ea858c7fd038a7e) ) ROM_REGION( 0x0240, "proms", 0 ) - ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) /* palette */ - ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) /* palette */ - ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) /* sprite lookup table */ - ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) /* char lookup table */ + ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) // palette + ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) // palette + ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) // sprite lookup table + ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) // char lookup table ROM_END ROM_START( timepltc ) @@ -562,18 +878,18 @@ ROM_START( timepltc ) ROM_REGION( 0x10000, "timeplt_audio:tpsound", 0 ) ROM_LOAD( "tm7", 0x0000, 0x1000, CRC(d66da813) SHA1(408fca4515e8af84211df3e204c8776b2f8adb23) ) - ROM_REGION( 0x2000, "gfx1", 0 ) + ROM_REGION( 0x2000, "tiles", 0 ) ROM_LOAD( "tm6", 0x0000, 0x2000, CRC(c2507f40) SHA1(07221875e3f81d9def67c57a7ccd82d52ce65e01) ) - ROM_REGION( 0x4000, "gfx2", 0 ) + ROM_REGION( 0x4000, "sprites", 0 ) ROM_LOAD( "tm4", 0x0000, 0x2000, CRC(7e437c3e) SHA1(cbe2ccd2cd503af62f009cd5aab73aa7366230b1) ) ROM_LOAD( "tm5", 0x2000, 0x2000, CRC(e8ca87b9) SHA1(5dd30d3fb9fd8cf9e6a8e37e7ea858c7fd038a7e) ) ROM_REGION( 0x0240, "proms", 0 ) - ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) /* palette */ - ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) /* palette */ - ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) /* sprite lookup table */ - ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) /* char lookup table */ + ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) // palette + ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) // palette + ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) // sprite lookup table + ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) // char lookup table ROM_END ROM_START( spaceplt ) @@ -585,18 +901,18 @@ ROM_START( spaceplt ) ROM_REGION( 0x10000, "timeplt_audio:tpsound", 0 ) ROM_LOAD( "tm7", 0x0000, 0x1000, CRC(d66da813) SHA1(408fca4515e8af84211df3e204c8776b2f8adb23) ) - ROM_REGION( 0x2000, "gfx1", 0 ) + ROM_REGION( 0x2000, "tiles", 0 ) ROM_LOAD( "sp6", 0x0000, 0x2000, CRC(76caa8af) SHA1(f81bb73877d415a6587a32bddaad6db8a8fd4941) ) - ROM_REGION( 0x4000, "gfx2", 0 ) + ROM_REGION( 0x4000, "sprites", 0 ) ROM_LOAD( "sp4", 0x0000, 0x2000, CRC(3781ce7a) SHA1(68bb73f67494c3b24f7fd0d79153c9793f4b3a5b) ) ROM_LOAD( "tm5", 0x2000, 0x2000, CRC(e8ca87b9) SHA1(5dd30d3fb9fd8cf9e6a8e37e7ea858c7fd038a7e) ) ROM_REGION( 0x0240, "proms", 0 ) - ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) /* palette */ - ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) /* palette */ - ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) /* sprite lookup table */ - ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) /* char lookup table */ + ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) // palette + ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) // palette + ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) // sprite lookup table + ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) // char lookup table ROM_END ROM_START( spaceplta ) @@ -608,18 +924,18 @@ ROM_START( spaceplta ) ROM_REGION( 0x10000, "timeplt_audio:tpsound", 0 ) ROM_LOAD( "4", 0x0000, 0x1000, CRC(d66da813) SHA1(408fca4515e8af84211df3e204c8776b2f8adb23) ) - ROM_REGION( 0x2000, "gfx1", 0 ) + ROM_REGION( 0x2000, "tiles", 0 ) ROM_LOAD( "5", 0x0000, 0x2000, CRC(76caa8af) SHA1(f81bb73877d415a6587a32bddaad6db8a8fd4941) ) // also seen with an original ROM from tileplt (so that it shows the original title) - ROM_REGION( 0x4000, "gfx2", 0 ) + ROM_REGION( 0x4000, "sprites", 0 ) ROM_LOAD( "6", 0x0000, 0x2000, CRC(86ab1ae7) SHA1(8e3f84aa6b2c21e7e1383ea1811fd99a4d940a23) ) // difference to spaceplt: erased Konami ROM_LOAD( "7", 0x2000, 0x2000, CRC(e8ca87b9) SHA1(5dd30d3fb9fd8cf9e6a8e37e7ea858c7fd038a7e) ) ROM_REGION( 0x0240, "proms", 0 ) - ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) /* palette */ - ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) /* palette */ - ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) /* sprite lookup table */ - ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) /* char lookup table */ + ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) // palette + ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) // palette + ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) // sprite lookup table + ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) // char lookup table ROM_END ROM_START( psurge ) @@ -632,18 +948,18 @@ ROM_START( psurge ) ROM_LOAD( "p6", 0x0000, 0x1000, CRC(b52d01fa) SHA1(9b6cf9ea51d3a87c174f34d42a4b1b5f38b48723) ) ROM_LOAD( "p7", 0x1000, 0x1000, CRC(9db5c0ce) SHA1(b5bc1d89a7f7d7a0baae64390c37ee11f69a0e76) ) - ROM_REGION( 0x2000, "gfx1", 0 ) + ROM_REGION( 0x2000, "tiles", 0 ) ROM_LOAD( "p4", 0x0000, 0x2000, CRC(26fd7f81) SHA1(eb282313a37d7d611bf90f9b0b527adee9ae283f) ) - ROM_REGION( 0x4000, "gfx2", 0 ) + ROM_REGION( 0x4000, "sprites", 0 ) ROM_LOAD( "p5", 0x0000, 0x2000, CRC(6066ec8e) SHA1(7f1155cf8a2d63c0740a4b56f1e09e7dfc749302) ) ROM_LOAD( "tm5", 0x2000, 0x2000, CRC(e8ca87b9) SHA1(5dd30d3fb9fd8cf9e6a8e37e7ea858c7fd038a7e) ) ROM_REGION( 0x0240, "proms", 0 ) - ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, BAD_DUMP CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) /* palette */ - ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, BAD_DUMP CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) /* palette */ - ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, BAD_DUMP CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) /* sprite lookup table */ - ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, BAD_DUMP CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) /* char lookup table */ + ROM_LOAD( "timeplt.b4", 0x0000, 0x0020, BAD_DUMP CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) // palette + ROM_LOAD( "timeplt.b5", 0x0020, 0x0020, BAD_DUMP CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) // palette + ROM_LOAD( "timeplt.e9", 0x0040, 0x0100, BAD_DUMP CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) // sprite lookup table + ROM_LOAD( "timeplt.e12", 0x0140, 0x0100, BAD_DUMP CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) // char lookup table ROM_END ROM_START( chkun ) @@ -654,10 +970,10 @@ ROM_START( chkun ) ROM_REGION( 0x12000, "timeplt_audio:tpsound", 0 ) ROM_LOAD( "15.3l", 0x0000, 0x2000, CRC(1f1463ca) SHA1(870abbca35236fcce6a2f640a238e20b9e57f10f)) - ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_REGION( 0x4000, "tiles", 0 ) ROM_LOAD( "13.4d", 0x0000, 0x4000, CRC(776427c0) SHA1(1e8387685f7e86aad31577f2186596b2a2dfc4de) ) - ROM_REGION( 0x4000, "gfx2", 0 ) + ROM_REGION( 0x4000, "sprites", 0 ) ROM_LOAD( "14.8h", 0x0000, 0x4000, CRC(0cb76a48) SHA1(0beebbc3d30eb978f6fe7b15c0a7b0c2152815b7) ) ROM_REGION( 0x20000, "tc8830f", 0 ) @@ -665,10 +981,10 @@ ROM_START( chkun ) ROM_LOAD( "v2.9k", 0x10000, 0x10000, CRC(70e902eb) SHA1(e1b2392446f2878f9e811a63bbbbdc56fd517a9c) ) ROM_REGION( 0x0240, "proms", 0 ) - ROM_LOAD( "3.2j", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) /* palette */ - ROM_LOAD( "2.1h", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) /* palette */ - ROM_LOAD( "4.10h", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) /* sprite lookup table */ - ROM_LOAD( "mb7114e.2b", 0x0140, 0x0100, CRC(adfa399a) SHA1(3b18971ddaae7734f0aaa0fcc82d4ddccc282959) ) /* char lookup table */ + ROM_LOAD( "3.2j", 0x0000, 0x0020, CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) // palette + ROM_LOAD( "2.1h", 0x0020, 0x0020, CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) // palette + ROM_LOAD( "4.10h", 0x0040, 0x0100, CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) // sprite lookup table + ROM_LOAD( "mb7114e.2b", 0x0140, 0x0100, CRC(adfa399a) SHA1(3b18971ddaae7734f0aaa0fcc82d4ddccc282959) ) // char lookup table ROM_REGION( 0x0200, "pld", 0 ) ROM_LOAD( "a.16c", 0x0000, 0x00eb, CRC(e0d54999) SHA1(9e1c749873572ade2b925ce1519d31a6e19f841f) ) @@ -683,23 +999,24 @@ ROM_START( bikkuric ) ROM_REGION( 0x10000, "timeplt_audio:tpsound", 0 ) ROM_LOAD( "5.l3", 0x00000, 0x02000, CRC(bc438531) SHA1(e19badc417b0538010cf535d3f733acc54b0cd96) ) - ROM_REGION( 0x8000, "gfx1", 0 ) + ROM_REGION( 0x8000, "tiles", 0 ) ROM_LOAD( "3.d4", 0x00000, 0x08000, CRC(74e8a64b) SHA1(b2542e1f6f4b54d8f7aec8f673cedcf5bff5e429) ) // 1st and 2nd identical, confirmed to be like this - ROM_REGION( 0x2000, "gfx2", 0 ) + ROM_REGION( 0x2000, "sprites", 0 ) ROM_LOAD( "4.h8", 0x00000, 0x02000, CRC(d303942d) SHA1(688d43e6dbe505d44fc41fdde74858a02910080d) ) - ROM_REGION( 0x0240, "proms", 0 ) // not dumped, roms taken from timeplt - ROM_LOAD( "3.2j", 0x0000, 0x0020, BAD_DUMP CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) /* palette */ - ROM_LOAD( "2.1h", 0x0020, 0x0020, BAD_DUMP CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) /* palette */ - ROM_LOAD( "4.10h", 0x0040, 0x0100, BAD_DUMP CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) /* sprite lookup table */ - ROM_LOAD( "1.2b", 0x0140, 0x0100, BAD_DUMP CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) /* char lookup table */ + ROM_REGION( 0x0240, "proms", 0 ) // not dumped, ROMs taken from timeplt + ROM_LOAD( "3.2j", 0x0000, 0x0020, BAD_DUMP CRC(34c91839) SHA1(f62e279e21fce171231d3139be7adabe1f4b8c2e) ) // palette + ROM_LOAD( "2.1h", 0x0020, 0x0020, BAD_DUMP CRC(463b2b07) SHA1(9ad275365eba4869f94749f39ff8705d92056a10) ) // palette + ROM_LOAD( "4.10h", 0x0040, 0x0100, BAD_DUMP CRC(4bbb2150) SHA1(678433b21aae1daa938e32d3293eeed529a42ef9) ) // sprite lookup table + ROM_LOAD( "1.2b", 0x0140, 0x0100, BAD_DUMP CRC(f7b7663e) SHA1(151bd2dff4e4ef76d6438c1ab2cae71f987b9dad) ) // char lookup table ROM_REGION( 0x0200, "pld", 0 ) ROM_LOAD( "a.16c", 0x0000, 0x00eb, NO_DUMP ) ROM_LOAD( "b.9f", 0x0100, 0x00eb, NO_DUMP ) ROM_END +} // anonymous namespace /************************************* @@ -708,13 +1025,13 @@ ROM_END * *************************************/ -GAME( 1982, timeplt, 0, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami", "Time Pilot", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, timepltc, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami (Centuri license)", "Time Pilot (Centuri)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, timeplta, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami (Atari license)", "Time Pilot (Atari)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, spaceplt, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "bootleg", "Space Pilot (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, spaceplta, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "bootleg", "Space Pilot (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, timeplt, 0, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami", "Time Pilot", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, timepltc, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami (Centuri license)", "Time Pilot (Centuri)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, timeplta, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "Konami (Atari license)", "Time Pilot (Atari)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, spaceplt, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "bootleg", "Space Pilot (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, spaceplta, timeplt, timeplt, timeplt, timeplt_state, empty_init, ROT90, "bootleg", "Space Pilot (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, psurge, 0, psurge, psurge, timeplt_state, empty_init, ROT270, "Vision Electronics", "Power Surge", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, psurge, 0, psurge, psurge, psurge_state, empty_init, ROT270, "Vision Electronics", "Power Surge", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, chkun, 0, chkun, chkun, timeplt_state, empty_init, ROT90, "Peni", "Chance Kun (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) -GAME( 1987, bikkuric, 0, bikkuric, bikkuric, timeplt_state, empty_init, ROT90, "Peni", "Bikkuri Card (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, chkun, 0, chkun, chkun, chkun_state, empty_init, ROT90, "Peni", "Chance Kun (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) +GAME( 1987, bikkuric, 0, bikkuric, bikkuric, bikkuric_state, empty_init, ROT90, "Peni", "Bikkuri Card (Japan)", MACHINE_SUPPORTS_SAVE ) |