From 1a5f456b73ea6537f23e2edc98c9779074e76d8c Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 10 Jul 2023 22:47:19 +0200 Subject: - funworld/supercrd.cpp: some more XOR tables tweaks for supercrd and the gampo sets - nichibutsu/terracre.cpp, taito/topspeed.cpp: consolidated drivers in single files --- src/mame/funworld/supercrd.cpp | 24 +- src/mame/nichibutsu/terracre.cpp | 565 ++++++++++++++++++++++++++++--------- src/mame/nichibutsu/terracre.h | 105 ------- src/mame/nichibutsu/terracre_v.cpp | 194 ------------- src/mame/taito/pkspirit.cpp | 1 + src/mame/taito/topspeed.cpp | 416 ++++++++++++++++++++++++++- src/mame/taito/topspeed.h | 115 -------- src/mame/taito/topspeed_v.cpp | 284 ------------------- 8 files changed, 839 insertions(+), 865 deletions(-) delete mode 100644 src/mame/nichibutsu/terracre.h delete mode 100644 src/mame/nichibutsu/terracre_v.cpp delete mode 100644 src/mame/taito/topspeed.h delete mode 100644 src/mame/taito/topspeed_v.cpp diff --git a/src/mame/funworld/supercrd.cpp b/src/mame/funworld/supercrd.cpp index 3f6a40c0ff9..024e90f2947 100644 --- a/src/mame/funworld/supercrd.cpp +++ b/src/mame/funworld/supercrd.cpp @@ -1005,7 +1005,7 @@ void supercrd_state::init_supercrd() // TODO: check unknown opcodes { 0x52, 0x50, 0x13, 0x01, 0x52, 0x02, 0x03, 0x52 }, // 0x5x and 0x7x { 0x43, unkn, 0x50, 0x41, 0x12, 0x51, 0x11, unkn }, // 0x8x and 0xax { 0x43, 0x01, 0x01, 0x42, unkn, unkn, 0x40, unkn }, // 0x9x and 0xbx - { unkn, unkn, unkn, 0x52, unkn, 0x00, 0x53, 0x01 }, // 0xcx and 0xex + { unkn, unkn, unkn, 0x52, 0x00, 0x00, 0x53, 0x01 }, // 0xcx and 0xex { 0x51, 0x10, 0x12, 0x41, 0x50, 0x00, 0x50, 0x50 } // 0xdx and 0xfx }, { // quadrant 1 should be ok, missing decrypted 0x17, 0x44 0x80, 0x81, 0x82, 0x83, 0x85, 0xc7, 0xd0 @@ -1018,7 +1018,7 @@ void supercrd_state::init_supercrd() // TODO: check unknown opcodes { 0x01, 0x02, unkn, 0x50, 0x51, 0x00, 0x51, 0x10 }, // 0xcx and 0xex { 0x42, unkn, unkn, unkn, 0x00, 0x41, unkn, 0x01 } // 0xdx and 0xfx }, - { // quadrants 1,2 should be ok, missing decrypted 0x84, 0x94, 0x96, 0xc7, 0xd7 + { // quadrants 1,2,3 should be ok, missing decrypted 0x84, 0x94, 0x96, 0xc7, 0xd7 { 0x42, 0x00, 0x43, 0x53, 0x03, 0x53, 0x00, 0x11 }, // 0x0x and 0x2x { 0x13, 0x02, 0x12, 0x11, 0x41, 0x02, 0x50, 0x53 }, // 0x1x and 0x3x { 0x00, 0x12, 0x52, 0x12, 0x03, 0x00, 0x43, 0x43 }, // 0x4x and 0x6x @@ -1112,9 +1112,9 @@ void supercrd_state::init_gampo() // TODO: check unknown opcodes uint8_t xor_table[0x04][0x08][0x08] = { - { // quadrant 1 should be ok, missing decrypted 0x14, 0x17, 0x82, 0x84, 0xc7, 0xd0 - { 0x51, 0x12, 0x41, 0x02, 0x02, 0x13, unkn, 0x43 }, // 0x0x and 0x2x - { 0x43, 0x12, 0x53, 0x43, 0x53, 0x00, unkn, 0x51 }, // 0x1x and 0x3x + { // quadrants 1, 2 should be ok, missing decrypted 0x82, 0x84, 0xc7, 0xd0 + { 0x51, 0x12, 0x41, 0x02, 0x02, 0x13, 0x11, 0x43 }, // 0x0x and 0x2x + { 0x43, 0x12, 0x53, 0x43, 0x53, 0x00, 0x02, 0x51 }, // 0x1x and 0x3x { 0x51, 0x01, 0x52, 0x43, 0x43, 0x00, 0x42, 0x12 }, // 0x4x and 0x6x { 0x42, 0x53, 0x10, 0x01, 0x00, 0x03, 0x01, 0x52 }, // 0x5x and 0x7x { 0x42, 0x00, 0x50, unkn, 0x13, unkn, 0x01, 0x41 }, // 0x8x and 0xax @@ -1122,33 +1122,33 @@ void supercrd_state::init_gampo() // TODO: check unknown opcodes { 0x50, 0x41, 0x13, 0x40, unkn, 0x00, unkn, 0x52 }, // 0xcx and 0xex { 0x11, 0x42, 0x01, unkn, unkn, 0x41, 0x12, 0x01 } // 0xdx and 0xfx }, - { // quadrants 1, 2 should be ok, missing decrypted 0x80, 0x82, 0x83, 0x85, 0x94, 0xc7, 0xd0 + { // quadrants 1, 2 should be ok, missing decrypted 0x80, 0x82, 0x83, 0x94, 0xc7, 0xd0 { 0x10, 0x51, 0x50, 0x02, 0x11, 0x02, 0x41, 0x01 }, // 0x0x and 0x2x { 0x50, 0x13, 0x51, 0x01, 0x43, 0x02, 0x02, 0x42 }, // 0x1x and 0x3x { 0x02, 0x41, 0x11, 0x02, 0x40, 0x00, 0x12, 0x51 }, // 0x4x and 0x6x { 0x53, 0x40, 0x41, 0x02, 0x02, 0x13, 0x12, 0x52 }, // 0x5x and 0x7x { 0x12, 0x12, 0x40, 0x50, 0x53, 0x12, 0x40, 0x51 }, // 0x8x and 0xax - { unkn, 0x01, unkn, 0x02, 0x01, unkn, unkn, 0x10 }, // 0x9x and 0xbx + { unkn, 0x01, unkn, 0x02, 0x01, 0x10, unkn, 0x10 }, // 0x9x and 0xbx { unkn, 0x02, 0x02, 0x02, 0x42, 0x00, 0x50, 0x03 }, // 0xcx and 0xex { 0x01, 0x03, 0x53, unkn, 0x00, 0x51, unkn, 0x02 } // 0xdx and 0xfx }, - { // quadrant 1 should be ok, missing decrypted 0x17, 0x44, 0x80, 0x83, 0x96, 0xc7, 0xd0, 0xd7 + { // quadrant 1 should be ok, missing decrypted 0x17, 0x44, 0x80, 0x96, 0xc7, 0xd0, 0xd7 { 0x52, 0x02, 0x00, 0x13, 0x43, 0x01, 0x03, unkn }, // 0x0x and 0x2x { 0x02, 0x00, 0x12, 0x51, 0x01, 0x40, 0x42, 0x03 }, // 0x1x and 0x3x { 0x03, 0x10, 0x43, 0x13, 0x43, 0x00, 0x00, 0x41 }, // 0x4x and 0x6x { 0x03, 0x10, 0x41, 0x13, 0x02, 0x43, 0x01, unkn }, // 0x5x and 0x7x { 0x52, 0x50, unkn, 0x41, unkn, unkn, 0x02, 0x52 }, // 0x8x and 0xax - { 0x00, 0x00, unkn, unkn, 0x01, unkn, 0x01, 0x10 }, // 0x9x and 0xbx + { 0x00, 0x00, unkn, 0x10, 0x01, unkn, 0x01, 0x10 }, // 0x9x and 0xbx { 0x41, 0x12, unkn, 0x50, 0x10, 0x00, 0x02, 0x53 }, // 0xcx and 0xex { 0x10, 0x10, 0x40, 0x10, 0x12, unkn, 0x50, 0x01 } // 0xdx and 0xfx }, - { // quadrants 1, 2 should be ok, missing decrypted 0x94, 0xc7 + { // quadrants 1, 2, 3 should be ok, missing decrypted 0x94, 0xc7 { 0x02, 0x43, 0x52, 0x51, 0x42, 0x41, 0x50, 0x13 }, // 0x0x and 0x2x { 0x43, 0x11, 0x00, 0x03, 0x10, 0x10, 0x43, 0x40 }, // 0x1x and 0x3x { 0x51, 0x42, 0x13, 0x42, 0x43, 0x00, 0x51, 0x13 }, // 0x4x and 0x6x { 0x13, 0x11, 0x41, 0x12, 0x41, 0x53, 0x11, 0x41 }, // 0x5x and 0x7x - { unkn, 0x42, 0x51, 0x43, 0x03, 0x03, 0x51, 0x43 }, // 0x8x and 0xax - { 0x52, 0x02, unkn, 0x03, 0x11, 0x03, unkn, 0x00 }, // 0x9x and 0xbx + { 0x12, 0x42, 0x51, 0x43, 0x03, 0x03, 0x51, 0x43 }, // 0x8x and 0xax + { 0x52, 0x02, 0x12, 0x03, 0x11, 0x03, unkn, 0x00 }, // 0x9x and 0xbx { 0x41, 0x43, 0x10, 0x02, 0x51, 0x00, 0x13, 0x13 }, // 0xcx and 0xex { 0x00, 0x52, 0x03, 0x42, 0x02, 0x13, 0x52, unkn } // 0xdx and 0xfx } diff --git a/src/mame/nichibutsu/terracre.cpp b/src/mame/nichibutsu/terracre.cpp index 59cd88381d5..37938cd0d8c 100644 --- a/src/mame/nichibutsu/terracre.cpp +++ b/src/mame/nichibutsu/terracre.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:Carlos A. Lozano +// copyright-holders: Carlos A. Lozano + /****************************************************************** Terra Cresta (preliminary) Nichibutsu 1985 @@ -81,21 +82,304 @@ AT-2 */ #include "emu.h" -#include "terracre.h" + +#include "nb1412m2.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/rescap.h" #include "sound/dac.h" #include "sound/flt_biquad.h" #include "sound/mixer.h" #include "sound/ymopn.h" #include "sound/ymopl.h" +#include "video/bufsprite.h" + +#include "emupal.h" #include "screen.h" #include "speaker.h" +#include "tilemap.h" + + +namespace { + +class terracre_state : public driver_device +{ +public: + terracre_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_audiocpu(*this, "audiocpu") + , m_gfxdecode(*this, "gfxdecode") + , m_palette(*this, "palette") + , m_spriteram(*this, "spriteram") + , m_soundlatch(*this, "soundlatch") + , m_dacfilter1(*this, "dacfilter1") + , m_dacfilter2(*this, "dacfilter2") + , m_ymfilter(*this, "ymfilter") + , m_ssgmixer(*this, "ssgmixer") + , m_ssgfilter_abfilt(*this, "ssg_abfilt") + , m_ssgfilter_abgain(*this, "ssg_abgain") + , m_ssgfilter_cgain(*this, "ssg_cgain") + , m_bg_videoram(*this, "bg_videoram") + , m_fg_videoram(*this, "fg_videoram") + , m_coltable(*this, "palbank_prom") + { } + + void amazon_base(machine_config &config); + void horekidb2(machine_config &config); + void tc_base(machine_config &config); + void ym2203(machine_config &config); + void ym3526(machine_config &config); + +protected: + virtual void video_start() override; + + required_device m_maincpu; + required_device m_audiocpu; + + void amazon_base_map(address_map &map); + +private: + required_device m_gfxdecode; + required_device m_palette; + required_device m_spriteram; + required_device m_soundlatch; + required_device m_dacfilter1; + required_device m_dacfilter2; + required_device m_ymfilter; + optional_device m_ssgmixer; + optional_device m_ssgfilter_abfilt; + optional_device m_ssgfilter_abgain; + optional_device m_ssgfilter_cgain; + + required_shared_ptr m_bg_videoram; + required_shared_ptr m_fg_videoram; + required_region_ptr m_coltable; + + uint16_t m_xscroll = 0; + uint16_t m_yscroll = 0; + tilemap_t *m_background = nullptr; + tilemap_t *m_foreground = nullptr; + + void sound_w(uint16_t data); + uint8_t soundlatch_clear_r(); + void background_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void foreground_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void flipscreen_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void scrolly_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void scrollx_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_fg_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 horekidb2_map(address_map &map); + void sound_2203_io_map(address_map &map); + void sound_3526_io_map(address_map &map); + void sound_map(address_map &map); + void terracre_map(address_map &map); +}; + +class amazon_state : public terracre_state +{ +public: + amazon_state(const machine_config &mconfig, device_type type, const char *tag) : + terracre_state(mconfig, type, tag), + m_prot(*this, "prot_chip") + { } + + void amazon_1412m2(machine_config &config); + +private: + required_device m_prot; + + void amazon_1412m2_map(address_map &map); +}; + + +// video + +TILE_GET_INFO_MEMBER(terracre_state::get_bg_tile_info) +{ + /* xxxx.----.----.---- + * ----.xx--.----.---- + * ----.--xx.xxxx.xxxx */ + const unsigned data = m_bg_videoram[tile_index]; + const unsigned color = data >> 11; + tileinfo.set(1, data & 0x3ff, color, 0); +} + +TILE_GET_INFO_MEMBER(terracre_state::get_fg_tile_info) +{ + const unsigned data = m_fg_videoram[tile_index]; + tileinfo.set(0, data & 0xff, 0, 0); +} + +void terracre_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + gfx_element *pGfx = m_gfxdecode->gfx(2); + const uint16_t *pSource = m_spriteram->buffer(); + const int flip = flip_screen(); + int transparent_pen; + + if (pGfx->elements() > 0x200) + transparent_pen = 0xf; // HORE HORE Kid + else + transparent_pen = 0x0; + + for (int i = 0; i < 0x200; i += 8) + { + int tile = pSource[1] & 0xff; + const int attrs = pSource[2]; + int flipx = attrs & 0x04; + int flipy = attrs & 0x08; + int color = (attrs & 0xf0) >> 4; + int sx = (pSource[3] & 0xff) - 0x80 + 256 * (attrs & 1); + int sy = 240 - (pSource[0] & 0xff); + + if (transparent_pen) + { + if (attrs & 0x02) tile |= 0x200; + if (attrs & 0x10) tile |= 0x100; + + int bank = (tile & 0xfc) >> 1; + if (tile & 0x200) bank |= 0x80; + if (tile & 0x100) bank |= 0x01; + + color &= 0xe; + color += 16 * (m_coltable[bank] & 0xf); + } + else + { + if (attrs & 0x02) tile|= 0x100; + color += 16 * (m_coltable[(tile >> 1) & 0xff] & 0x0f); + } + + if (flip) + { + sx = 240 - sx; + sy = 240 - sy; + flipx = !flipx; + flipy = !flipy; + } + + pGfx->transpen(bitmap, cliprect, tile, color, flipx, flipy, sx, sy, transparent_pen); + + pSource += 4; + } +} + +void terracre_state::palette(palette_device &palette) const +{ + const uint8_t *color_prom = memregion("proms")->base(); + + // create a lookup table for the palette + for (int i = 0; i < 0x100; i++) + { + int const r = pal4bit(color_prom[i + 0x000]); + int const g = pal4bit(color_prom[i + 0x100]); + int const b = pal4bit(color_prom[i + 0x200]); + + palette.set_indirect_color(i, rgb_t(r, g, b)); + } + + // color_prom now points to the beginning of the lookup table + color_prom += 0x300; + + // characters use colors 0-0x0f + for (int i = 0; i < 0x10; i++) + palette.set_pen_indirect(i, i); + + // background tiles use colors 0xc0-0xff in four banks + // the bottom two bits of the color code select the palette bank for pens 0-7; + // the top two bits for pens 8-0x0f. + for (int i = 0; i < 0x100; i++) + { + uint8_t const ctabentry = 0xc0 | (i & 0x0f) | ((i >> ((i & 0x08) ? 2 : 0)) & 0x30); + + palette.set_pen_indirect(0x10 + i, ctabentry); + } + + // sprites use colors 128-191 in four banks + // The lookup table tells which colors to pick from the selected bank + // the bank is selected by another PROM and depends on the top 8 bits of the sprite code. + // The PROM selects the bank *separately* for pens 0-7 and 8-15 (like for tiles). + for (int i = 0; i < 0x1000; i++) + { + uint8_t const ctabentry = 0x80 | ((i << ((i & 0x80) ? 2 : 4)) & 0x30) | (color_prom[i >> 4] & 0x0f); + int i_swapped = ((i & 0x0f) << 8) | ((i & 0xff0) >> 4); + + palette.set_pen_indirect(0x110 + i_swapped, ctabentry); + } +} +void terracre_state::background_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_bg_videoram[offset]); + m_background->mark_tile_dirty(offset); +} + +void terracre_state::foreground_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_fg_videoram[offset]); + m_foreground->mark_tile_dirty(offset); +} + +void terracre_state::flipscreen_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + if (ACCESSING_BITS_0_7) + { + machine().bookkeeping().coin_counter_w(0, data & 0x01); + machine().bookkeeping().coin_counter_w(1, (data & 0x02) >> 1); + flip_screen_set(data & 0x04); + } +} + +void terracre_state::scrolly_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_yscroll); + m_background->set_scrolly(0, m_yscroll); +} + +void terracre_state::scrollx_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_xscroll); + m_background->set_scrollx(0, m_xscroll); +} + +void terracre_state::video_start() +{ + m_background = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(terracre_state::get_bg_tile_info)), TILEMAP_SCAN_COLS, 16,16, 64,32); + m_foreground = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(terracre_state::get_fg_tile_info)), TILEMAP_SCAN_COLS, 8, 8, 64,32); + m_foreground->set_transparent_pen(0xf); + + // register for saving + save_item(NAME(m_xscroll)); + save_item(NAME(m_yscroll)); +} + +uint32_t terracre_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + if (m_xscroll & 0x2000) + bitmap.fill(m_palette->black_pen(), cliprect); + else + m_background->draw(screen, bitmap, cliprect, 0, 0); -void terracre_state::amazon_sound_w(uint16_t data) + draw_sprites(bitmap, cliprect); + + if ((m_xscroll & 0x1000) == 0) + m_foreground->draw(screen, bitmap, cliprect, 0, 0); + + return 0; +} + + +// machine + +void terracre_state::sound_w(uint16_t data) { m_soundlatch->write(((data & 0x7f) << 1) | 1); } @@ -111,19 +395,19 @@ void terracre_state::terracre_map(address_map &map) map(0x000000, 0x01ffff).rom(); map(0x020000, 0x0201ff).ram().share("spriteram"); map(0x020200, 0x021fff).ram(); - map(0x022000, 0x022fff).w(FUNC(terracre_state::amazon_background_w)).share("bg_videoram"); + map(0x022000, 0x022fff).w(FUNC(terracre_state::background_w)).share(m_bg_videoram); map(0x023000, 0x023fff).ram(); map(0x024000, 0x024001).portr("P1"); map(0x024002, 0x024003).portr("P2"); map(0x024004, 0x024005).portr("SYSTEM"); map(0x024006, 0x024007).portr("DSW"); - map(0x026000, 0x026001).w(FUNC(terracre_state::amazon_flipscreen_w)); /* flip screen & coin counters */ - map(0x026002, 0x026003).w(FUNC(terracre_state::amazon_scrollx_w)); - map(0x026004, 0x026005).nopr().w(FUNC(terracre_state::amazon_scrolly_w)); + map(0x026000, 0x026001).w(FUNC(terracre_state::flipscreen_w)); // flip screen & coin counters + map(0x026002, 0x026003).w(FUNC(terracre_state::scrollx_w)); + map(0x026004, 0x026005).nopr().w(FUNC(terracre_state::scrolly_w)); map(0x02600a, 0x02600b).noprw(); // video related - map(0x02600c, 0x02600d).w(FUNC(terracre_state::amazon_sound_w)); + map(0x02600c, 0x02600d).w(FUNC(terracre_state::sound_w)); map(0x02600e, 0x02600f).noprw(); // video related - map(0x028000, 0x0287ff).ram().w(FUNC(terracre_state::amazon_foreground_w)).share("fg_videoram"); + map(0x028000, 0x0287ff).ram().w(FUNC(terracre_state::foreground_w)).share(m_fg_videoram); } void terracre_state::amazon_base_map(address_map &map) @@ -131,18 +415,18 @@ void terracre_state::amazon_base_map(address_map &map) map(0x000000, 0x01ffff).rom(); map(0x040000, 0x0401ff).ram().share("spriteram"); map(0x040200, 0x040fff).ram(); - map(0x042000, 0x042fff).w(FUNC(terracre_state::amazon_background_w)).share("bg_videoram"); + map(0x042000, 0x042fff).w(FUNC(terracre_state::background_w)).share(m_bg_videoram); map(0x044000, 0x044001).portr("IN0"); map(0x044002, 0x044003).portr("IN1"); map(0x044004, 0x044005).portr("IN2"); map(0x044006, 0x044007).portr("IN3"); - map(0x046000, 0x046001).w(FUNC(terracre_state::amazon_flipscreen_w)); /* flip screen & coin counters */ - map(0x046002, 0x046003).w(FUNC(terracre_state::amazon_scrollx_w)); - map(0x046004, 0x046005).nopr().w(FUNC(terracre_state::amazon_scrolly_w)); + map(0x046000, 0x046001).w(FUNC(terracre_state::flipscreen_w)); // flip screen & coin counters + map(0x046002, 0x046003).w(FUNC(terracre_state::scrollx_w)); + map(0x046004, 0x046005).nopr().w(FUNC(terracre_state::scrolly_w)); map(0x04600a, 0x04600b).noprw(); // video related - map(0x04600c, 0x04600d).w(FUNC(terracre_state::amazon_sound_w)); + map(0x04600c, 0x04600d).w(FUNC(terracre_state::sound_w)); map(0x04600e, 0x04600f).noprw(); // video related - map(0x050000, 0x050fff).ram().w(FUNC(terracre_state::amazon_foreground_w)).share("fg_videoram"); + map(0x050000, 0x050fff).ram().w(FUNC(terracre_state::foreground_w)).share(m_fg_videoram); map(0x070000, 0x070003).noprw(); // protection (nop for bootlegs) } @@ -444,35 +728,35 @@ static const gfx_layout sprite_layout = }; static GFXDECODE_START( gfx_terracre ) - GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 1 ) - GFXDECODE_ENTRY( "gfx2", 0, gfx_16x16x4_packed_lsb, 1*16, 16 ) - GFXDECODE_ENTRY( "gfx3", 0, sprite_layout, 1*16+16*16, 256 ) + GFXDECODE_ENTRY( "fgtiles", 0, gfx_8x8x4_packed_lsb, 0, 1 ) + GFXDECODE_ENTRY( "bgtiles", 0, gfx_16x16x4_packed_lsb, 1*16, 16 ) + GFXDECODE_ENTRY( "sprites", 0, sprite_layout, 1*16+16*16, 256 ) GFXDECODE_END void terracre_state::tc_base(machine_config &config) { - M68000(config, m_maincpu, XTAL(16'000'000)/2); // 8MHz verified on PCB + M68000(config, m_maincpu, XTAL(16'000'000) / 2); // 8MHz verified on PCB m_maincpu->set_addrmap(AS_PROGRAM, &terracre_state::terracre_map); m_maincpu->set_vblank_int("screen", FUNC(terracre_state::irq1_line_hold)); - Z80(config, m_audiocpu, XTAL(16'000'000)/4); // 4MHz verified on PCB + Z80(config, m_audiocpu, XTAL(16'000'000) / 4); // 4MHz verified on PCB m_audiocpu->set_addrmap(AS_PROGRAM, &terracre_state::sound_map); // z80 io map set in 2203 or 3526 configs below - m_audiocpu->set_periodic_int(FUNC(terracre_state::irq0_line_hold), attotime::from_hz(XTAL(16'000'000)/4/512)); // ? + m_audiocpu->set_periodic_int(FUNC(terracre_state::irq0_line_hold), attotime::from_hz(XTAL(16'000'000) / 4 / 512)); // ? BUFFERED_SPRITERAM16(config, m_spriteram); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); 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(32*8, 32*8); screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); - screen.set_screen_update(FUNC(terracre_state::screen_update_amazon)); + screen.set_screen_update(FUNC(terracre_state::screen_update)); screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_terracre); - PALETTE(config, m_palette, FUNC(terracre_state::terracre_palette), 1*16+16*16+16*256, 256); + PALETTE(config, m_palette, FUNC(terracre_state::palette), 1*16+16*16+16*256, 256); SPEAKER(config, "speaker").front_center(); @@ -512,7 +796,7 @@ void terracre_state::ym3526(machine_config &config) FILTER_BIQUAD(config, m_dacfilter2).opamp_sk_lowpass_setup(RES_K(22), RES_K(22), RES_M(999.99), RES_R(0.001), CAP_N(10), CAP_N(4.7)); // R16, R15, nothing(infinite resistance), wire(short), C18, C21 m_dacfilter2->add_route(ALL_OUTPUTS, "speaker", 1.0); - YM3526(config, "ymsnd", XTAL(16'000'000)/4).add_route(ALL_OUTPUTS, m_ymfilter, 0.2558); // 4MHz verified on PCB + YM3526(config, "ymsnd", XTAL(16'000'000) / 4).add_route(ALL_OUTPUTS, m_ymfilter, 0.2558); // 4MHz verified on PCB DAC_8BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, m_dacfilter1, 0.2326); // SIP R2R DAC @ RA-1 with 74HC374P latch DAC_8BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, m_dacfilter2, 0.5116); // SIP R2R DAC @ RA-2 with 74HC374P latch @@ -581,7 +865,7 @@ void terracre_state::ym2203(machine_config &config) MIXER(config, m_ssgmixer); m_ssgmixer->add_route(0, m_ssgfilter_abfilt, 0.06582); - ym2203_device &ym1(YM2203(config, "ym1", XTAL(16'000'000)/4)); // 4MHz verified on PCB + ym2203_device &ym1(YM2203(config, "ym1", XTAL(16'000'000) / 4)); // 4MHz verified on PCB ym1.add_route(0, m_ssgmixer, 1.0); ym1.add_route(1, m_ssgmixer, 1.0); ym1.add_route(2, m_ssgfilter_cgain, 0.010866); @@ -602,7 +886,7 @@ void amazon_state::amazon_1412m2(machine_config &config) amazon_base(config); m_maincpu->set_addrmap(AS_PROGRAM, &amazon_state::amazon_1412m2_map); - NB1412M2(config, m_prot, XTAL(16'000'000)/4); // divided by 4 maybe + NB1412M2(config, m_prot, XTAL(16'000'000) / 4); // divided by 4 maybe } void terracre_state::horekidb2(machine_config &config) @@ -623,25 +907,25 @@ void terracre_state::horekidb2(machine_config &config) bottom board: BK-2 (1502), 22MHz XTAL, Z80, YM3526 */ ROM_START( terracre ) - ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code (main CPU) on BK-1 PCB + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code on BK-1 PCB ROM_LOAD16_BYTE( "1.4b", 0x00001, 0x8000, CRC(60932770) SHA1(887be7a44cb7bf30d11274d34896217cc87ae158) ) ROM_LOAD16_BYTE( "3.4d", 0x00000, 0x8000, CRC(cb36240e) SHA1(24696503d9720ced869bb96ec64f336679726668) ) ROM_LOAD16_BYTE( "2.6b", 0x10001, 0x8000, CRC(539352f2) SHA1(b960f75d12ebdcd6781a073a66b8e503a8f55186) ) ROM_LOAD16_BYTE( "4.6d", 0x10000, 0x8000, CRC(19387586) SHA1(76473493d173efde83ded52ad721d2c532f590e2) ) - ROM_REGION( 0x10000, "audiocpu", 0 )// Z80 code (sound) on BK-2 PCB, with intro fill-in in the main theme + ROM_REGION( 0x10000, "audiocpu", 0 )// Z80 code on BK-2 PCB, with intro fill-in in the main theme ROM_LOAD( "11.15b", 0x0000, 0x4000, CRC(604c3b11) SHA1(c01d1ddae40fa8b65dfc72f959942cb9664a548b) ) ROM_LOAD( "12.17b", 0x4000, 0x4000, CRC(affc898d) SHA1(a78f06fa125de16fcdb8f4dc1629eb775aad913a) ) ROM_LOAD( "13.18b", 0x8000, 0x4000, CRC(302dc0ab) SHA1(4db8f12e70f9adf1eb993c6a8af68b5edbf79773) ) - ROM_REGION( 0x02000, "gfx1", 0 ) // tiles on BK-2 PCB + ROM_REGION( 0x02000, "fgtiles", 0 ) // on BK-2 PCB ROM_LOAD( "14.16g", 0x00000, 0x2000, CRC(591a3804) SHA1(e1b46f5652e7f9677d75f01c6132975ace4facdd) ) - ROM_REGION( 0x10000, "gfx2", 0 ) // background on BK-1 PCB + ROM_REGION( 0x10000, "bgtiles", 0 ) // on BK-1 PCB ROM_LOAD( "5.15f", 0x00000, 0x8000, CRC(984a597f) SHA1(1f33892f160691c44872b37f0f6cb1493c9f7fb1) ) ROM_LOAD( "6.17f", 0x08000, 0x8000, CRC(30e297ff) SHA1(9843826ae63039d6693c8a0b30af721d70f40056) ) - ROM_REGION( 0x10000, "gfx3", 0 ) // sprites on BK-2 PCB + ROM_REGION( 0x10000, "sprites", 0 ) // on BK-2 PCB ROM_LOAD( "7.6e", 0x00000, 0x4000, CRC(bcf7740b) SHA1(8701862c35eb8fb1ec239253136a3858ebea4d0c) ) ROM_LOAD( "8.7e", 0x04000, 0x4000, CRC(a70b565c) SHA1(153e5f5a9927c294660dd0d636a9f651d4984d6d) ) ROM_LOAD( "9.6g", 0x08000, 0x4000, CRC(4a9ec3e6) SHA1(0a35b82fb49ecf7edafd02744a48490e744c0a00) ) @@ -653,7 +937,7 @@ ROM_START( terracre ) ROM_LOAD( "1.12f", 0x0200, 0x0100, CRC(7ea63946) SHA1(d7b89694a80736c7605b5c83d25d8b706f4504ab) ) // blue component on BK-1 PCB ROM_LOAD( "4.2g", 0x0300, 0x0100, CRC(08609bad) SHA1(e5daee3c3fea6620e3c2b91becd93bc4d3cdf011) ) // (82s129 with white dot) sprite lookup table on BK-2 PCB - ROM_REGION( 0x0100, "user1", 0 ) // 82S129 + ROM_REGION( 0x0100, "palbank_prom", 0 ) // 82S129 ROM_LOAD( "5.4e", 0x0000, 0x0100, CRC(2c43991f) SHA1(312112832bee511b0545524295aa9bc2e756db0f) ) // (82s129 with pink dot) sprite palette bank on BK-2 PCB ROM_REGION( 0x030c, "plds", 0 ) @@ -662,8 +946,8 @@ ROM_START( terracre ) ROM_LOAD( "12f", 0x208, 0x104, NO_DUMP ) // PAL16R4 on BK-2 PCB ROM_END -ROM_START( terracreo ) // older pcb TC-1A & TC-2A and oldest ROM-set - ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code (main CPU) on TC-1A PCB +ROM_START( terracreo ) // older PCB TC-1A & TC-2A and oldest ROM-set + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code on TC-1A PCB ROM_LOAD16_BYTE( "1.4b", 0x00001, 0x4000, CRC(76f17479) SHA1(e6be7f78fe7dc9d66feb3ada6ad08d461c66640d) ) ROM_LOAD16_BYTE( "5.4d", 0x00000, 0x4000, CRC(8119f06e) SHA1(314e2d8e75f66862cf6567ac05f417a3a66f1254) ) ROM_LOAD16_BYTE( "2.6b", 0x08001, 0x4000, CRC(ba4b5822) SHA1(0de3ce04e14aa5757936babdec9cd1341d4a06d6) ) @@ -673,19 +957,19 @@ ROM_START( terracreo ) // older pcb TC-1A & TC-2A and oldest ROM-set ROM_LOAD16_BYTE( "4.9b", 0x18001, 0x4000, CRC(69227b56) SHA1(58c8aa4baa1f5ddfc151f5ed6284a06e87866dd7) ) ROM_LOAD16_BYTE( "8.9d", 0x18000, 0x4000, CRC(5a672942) SHA1(3890f87edb9047f3e4c6f4d4b47b7f9873962148) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code (sound) on TC-2A PCB, with intro fill-in in the main theme + ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code on TC-2A PCB, with intro fill-in in the main theme ROM_LOAD( "11.15b", 0x0000, 0x4000, CRC(604c3b11) SHA1(c01d1ddae40fa8b65dfc72f959942cb9664a548b) ) ROM_LOAD( "12.17b", 0x4000, 0x4000, CRC(affc898d) SHA1(a78f06fa125de16fcdb8f4dc1629eb775aad913a) ) ROM_LOAD( "13.18b", 0x8000, 0x4000, CRC(302dc0ab) SHA1(4db8f12e70f9adf1eb993c6a8af68b5edbf79773) ) - ROM_REGION( 0x02000, "gfx1", 0 ) // tiles on TC-2A PCB + ROM_REGION( 0x02000, "fgtiles", 0 ) // on TC-2A PCB ROM_LOAD( "18.16g", 0x00000, 0x2000, CRC(591a3804) SHA1(e1b46f5652e7f9677d75f01c6132975ace4facdd) ) - ROM_REGION( 0x10000, "gfx2", 0 ) // background on TC-1A PCB + ROM_REGION( 0x10000, "bgtiles", 0 ) // on TC-1A PCB ROM_LOAD( "9.15f", 0x00000, 0x8000, CRC(984a597f) SHA1(1f33892f160691c44872b37f0f6cb1493c9f7fb1) ) ROM_LOAD( "10.17f", 0x08000, 0x8000, CRC(30e297ff) SHA1(9843826ae63039d6693c8a0b30af721d70f40056) ) - ROM_REGION( 0x10000, "gfx3", 0 ) // sprites on TC-2A PCB + ROM_REGION( 0x10000, "sprites", 0 ) // on TC-2A PCB ROM_LOAD( "14.6e", 0x00000, 0x4000, CRC(bcf7740b) SHA1(8701862c35eb8fb1ec239253136a3858ebea4d0c) ) ROM_LOAD( "15.7e", 0x04000, 0x4000, CRC(a70b565c) SHA1(153e5f5a9927c294660dd0d636a9f651d4984d6d) ) ROM_LOAD( "16.6g", 0x08000, 0x4000, CRC(4a9ec3e6) SHA1(0a35b82fb49ecf7edafd02744a48490e744c0a00) ) @@ -697,7 +981,7 @@ ROM_START( terracreo ) // older pcb TC-1A & TC-2A and oldest ROM-set ROM_LOAD( "1.12f", 0x0200, 0x0100, CRC(7ea63946) SHA1(d7b89694a80736c7605b5c83d25d8b706f4504ab) ) // blue component on BK-1 PCB ROM_LOAD( "4.2g", 0x0300, 0x0100, CRC(08609bad) SHA1(e5daee3c3fea6620e3c2b91becd93bc4d3cdf011) ) // sprite lookup table on BK-2 PCB - ROM_REGION( 0x0100, "user1", 0 ) + ROM_REGION( 0x0100, "palbank_prom", 0 ) ROM_LOAD( "5.4e", 0x0000, 0x0100, CRC(2c43991f) SHA1(312112832bee511b0545524295aa9bc2e756db0f) ) // sprite palette bank on TC-2A PCB ROM_REGION( 0x030c, "plds", 0 ) @@ -708,8 +992,8 @@ ROM_END // probably newest TC-1A/2A board ROM-set for YM3526 version // for unknown reasons, intro fill-in in the main theme had been removed -ROM_START( terracrea ) // older pcb TC-1A & TC-2A, the only difference is one sound rom - ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code (main CPU) on TC-1A PCB +ROM_START( terracrea ) // older PCB TC-1A & TC-2A, the only difference is one sound ROM + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code on TC-1A PCB ROM_LOAD16_BYTE( "1.4b", 0x00001, 0x4000, CRC(76f17479) SHA1(e6be7f78fe7dc9d66feb3ada6ad08d461c66640d) ) ROM_LOAD16_BYTE( "5.4d", 0x00000, 0x4000, CRC(8119f06e) SHA1(314e2d8e75f66862cf6567ac05f417a3a66f1254) ) ROM_LOAD16_BYTE( "2.6b", 0x08001, 0x4000, CRC(ba4b5822) SHA1(0de3ce04e14aa5757936babdec9cd1341d4a06d6) ) @@ -719,19 +1003,19 @@ ROM_START( terracrea ) // older pcb TC-1A & TC-2A, the only difference is one so ROM_LOAD16_BYTE( "4.9b", 0x18001, 0x4000, CRC(69227b56) SHA1(58c8aa4baa1f5ddfc151f5ed6284a06e87866dd7) ) ROM_LOAD16_BYTE( "8.9d", 0x18000, 0x4000, CRC(5a672942) SHA1(3890f87edb9047f3e4c6f4d4b47b7f9873962148) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code (sound) on TC-2A PCB, without intro fill-in in the main theme + ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code on TC-2A PCB, without intro fill-in in the main theme ROM_LOAD( "11.15b", 0x0000, 0x4000, CRC(604c3b11) SHA1(c01d1ddae40fa8b65dfc72f959942cb9664a548b) ) ROM_LOAD( "12.17b", 0x4000, 0x4000, CRC(9e9b3808) SHA1(7b6f8d2b75f063aa81711a7c2bf1563cc38eee8b) ) ROM_LOAD( "13.18b", 0x8000, 0x4000, CRC(302dc0ab) SHA1(4db8f12e70f9adf1eb993c6a8af68b5edbf79773) ) - ROM_REGION( 0x02000, "gfx1", 0 ) // tiles on TC-2A PCB + ROM_REGION( 0x02000, "fgtiles", 0 ) // on TC-2A PCB ROM_LOAD( "18.16g", 0x00000, 0x2000, CRC(591a3804) SHA1(e1b46f5652e7f9677d75f01c6132975ace4facdd) ) - ROM_REGION( 0x10000, "gfx2", 0 ) // background on TC-1A PCB + ROM_REGION( 0x10000, "bgtiles", 0 ) // on TC-1A PCB ROM_LOAD( "9.15f", 0x00000, 0x8000, CRC(984a597f) SHA1(1f33892f160691c44872b37f0f6cb1493c9f7fb1) ) ROM_LOAD( "10.17f", 0x08000, 0x8000, CRC(30e297ff) SHA1(9843826ae63039d6693c8a0b30af721d70f40056) ) - ROM_REGION( 0x10000, "gfx3", 0 ) // sprites on TC-2A PCB + ROM_REGION( 0x10000, "sprites", 0 ) // on TC-2A PCB ROM_LOAD( "14.6e", 0x00000, 0x4000, CRC(bcf7740b) SHA1(8701862c35eb8fb1ec239253136a3858ebea4d0c) ) ROM_LOAD( "15.7e", 0x04000, 0x4000, CRC(a70b565c) SHA1(153e5f5a9927c294660dd0d636a9f651d4984d6d) ) ROM_LOAD( "16.6g", 0x08000, 0x4000, CRC(4a9ec3e6) SHA1(0a35b82fb49ecf7edafd02744a48490e744c0a00) ) @@ -743,7 +1027,7 @@ ROM_START( terracrea ) // older pcb TC-1A & TC-2A, the only difference is one so ROM_LOAD( "1.12f", 0x0200, 0x0100, CRC(7ea63946) SHA1(d7b89694a80736c7605b5c83d25d8b706f4504ab) ) // blue component on BK-1 PCB ROM_LOAD( "4.2g", 0x0300, 0x0100, CRC(08609bad) SHA1(e5daee3c3fea6620e3c2b91becd93bc4d3cdf011) ) // sprite lookup table on BK-2 PCB - ROM_REGION( 0x0100, "user1", 0 ) + ROM_REGION( 0x0100, "palbank_prom", 0 ) ROM_LOAD( "5.4e", 0x0000, 0x0100, CRC(2c43991f) SHA1(312112832bee511b0545524295aa9bc2e756db0f) ) // sprite palette bank on TC-2A PCB ROM_REGION( 0x030c, "plds", 0 ) @@ -753,7 +1037,7 @@ ROM_START( terracrea ) // older pcb TC-1A & TC-2A, the only difference is one so ROM_END ROM_START( terracren ) // 'n' for OPN(YM2203), newer than YM3526 sets because it uses a daughterboard to convert the existing YM3526 socket to a YM2203 - ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code (main CPU) on TC-1A PCB + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code on TC-1A PCB ROM_LOAD16_BYTE( "1.4b", 0x00001, 0x4000, CRC(76f17479) SHA1(e6be7f78fe7dc9d66feb3ada6ad08d461c66640d) ) ROM_LOAD16_BYTE( "5.4d", 0x00000, 0x4000, CRC(8119f06e) SHA1(314e2d8e75f66862cf6567ac05f417a3a66f1254) ) ROM_LOAD16_BYTE( "2.6b", 0x08001, 0x4000, CRC(ba4b5822) SHA1(0de3ce04e14aa5757936babdec9cd1341d4a06d6) ) @@ -763,18 +1047,18 @@ ROM_START( terracren ) // 'n' for OPN(YM2203), newer than YM3526 sets because it ROM_LOAD16_BYTE( "4.9b", 0x18001, 0x4000, CRC(69227b56) SHA1(58c8aa4baa1f5ddfc151f5ed6284a06e87866dd7) ) ROM_LOAD16_BYTE( "8.9d", 0x18000, 0x4000, CRC(5a672942) SHA1(3890f87edb9047f3e4c6f4d4b47b7f9873962148) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code (sound) + ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code ROM_LOAD( "11.15b", 0x0000, 0x4000, CRC(790ddfa9) SHA1(90aa25fbfc9b5f52145ab3cf126610cf21024c20) ) ROM_LOAD( "12.17b", 0x4000, 0x4000, CRC(d4531113) SHA1(efc37c33a0791cae4d4ab50bc884cd6c8a6f95f5) ) - ROM_REGION( 0x02000, "gfx1", 0 ) // tiles on TC-2A PCB + ROM_REGION( 0x02000, "fgtiles", 0 ) // on TC-2A PCB ROM_LOAD( "18.16g", 0x00000, 0x2000, CRC(591a3804) SHA1(e1b46f5652e7f9677d75f01c6132975ace4facdd) ) - ROM_REGION( 0x10000, "gfx2", 0 ) // background on TC-1A PCB + ROM_REGION( 0x10000, "bgtiles", 0 ) // on TC-1A PCB ROM_LOAD( "9.15f", 0x00000, 0x8000, CRC(984a597f) SHA1(1f33892f160691c44872b37f0f6cb1493c9f7fb1) ) ROM_LOAD( "10.17f", 0x08000, 0x8000, CRC(30e297ff) SHA1(9843826ae63039d6693c8a0b30af721d70f40056) ) - ROM_REGION( 0x10000, "gfx3", 0 ) // sprites on TC-2A PCB + ROM_REGION( 0x10000, "sprites", 0 ) // on TC-2A PCB ROM_LOAD( "14.6e", 0x00000, 0x4000, CRC(bcf7740b) SHA1(8701862c35eb8fb1ec239253136a3858ebea4d0c) ) ROM_LOAD( "15.7e", 0x04000, 0x4000, CRC(a70b565c) SHA1(153e5f5a9927c294660dd0d636a9f651d4984d6d) ) ROM_LOAD( "16.6g", 0x08000, 0x4000, CRC(4a9ec3e6) SHA1(0a35b82fb49ecf7edafd02744a48490e744c0a00) ) @@ -786,7 +1070,7 @@ ROM_START( terracren ) // 'n' for OPN(YM2203), newer than YM3526 sets because it ROM_LOAD( "1.12f", 0x0200, 0x0100, CRC(7ea63946) SHA1(d7b89694a80736c7605b5c83d25d8b706f4504ab) ) // blue component on BK-1 PCB ROM_LOAD( "4.2g", 0x0300, 0x0100, CRC(08609bad) SHA1(e5daee3c3fea6620e3c2b91becd93bc4d3cdf011) ) // sprite lookup table on BK-2 PCB - ROM_REGION( 0x0100, "user1", 0 ) + ROM_REGION( 0x0100, "palbank_prom", 0 ) ROM_LOAD( "5.4e", 0x0000, 0x0100, CRC(2c43991f) SHA1(312112832bee511b0545524295aa9bc2e756db0f) ) // sprite palette bank on TC-2A PCB ROM_REGION( 0x030c, "plds", 0 ) @@ -796,199 +1080,199 @@ ROM_START( terracren ) // 'n' for OPN(YM2203), newer than YM3526 sets because it ROM_END ROM_START( amazon ) - ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code (main CPU) */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "11.4d", 0x00000, 0x8000, CRC(6c7f85c5) SHA1(7f78cf16a93ea1f7b8616122127327a7d337e565) ) ROM_LOAD16_BYTE( "9.4b", 0x00001, 0x8000, CRC(e1b7a989) SHA1(ae49cbc6fc4bc151990caed1f57cc7e10aba7901) ) ROM_LOAD16_BYTE( "12.6d", 0x10000, 0x8000, CRC(4de8a3ee) SHA1(a650d5b6ebff257f08db01e76e5c11c1ecc8cd36) ) ROM_LOAD16_BYTE( "10.6b", 0x10001, 0x8000, CRC(d86bad81) SHA1(8f2e56422f9e604232c60f676dcd964392ec9d28) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */ + ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code ROM_LOAD( "1.15b", 0x00000, 0x4000, CRC(55a8b5e7) SHA1(d3f5609c1b97a54c505d12dd22f7454c88c90fb9) ) ROM_LOAD( "2.17b", 0x04000, 0x4000, CRC(427a7cca) SHA1(b30e3dd4f685c4095478972d38bb9616369a51bf) ) ROM_LOAD( "3.18b", 0x08000, 0x4000, CRC(b8cceaf7) SHA1(5682df3193ad1dfef366353921bfa7af08aec055) ) - ROM_REGION( 0x2000, "gfx1", 0 ) /* alphanumerics */ + ROM_REGION( 0x2000, "fgtiles", 0 ) ROM_LOAD( "8.16g", 0x0000, 0x2000, CRC(0cec8644) SHA1(a8f2a67b2243771e20ba51a539a83f0017dff6bc) ) - ROM_REGION( 0x20000, "gfx2", 0 ) /* tiles */ + ROM_REGION( 0x20000, "bgtiles", 0 ) ROM_LOAD( "13.15f", 0x00000, 0x8000, CRC(415ff4d9) SHA1(b5d17bfbf78e620c29f8933f06bd88cc89825b4b) ) ROM_LOAD( "14.17f", 0x08000, 0x8000, CRC(492b5c48) SHA1(822d9098427650d55cdd6e4a7e540147198d72fc) ) ROM_LOAD( "15.18f", 0x10000, 0x8000, CRC(b1ac0b9d) SHA1(1b413823669db24a5cfb93f66f54bd08c410a0d4) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* sprites */ + ROM_REGION( 0x10000, "sprites", 0 ) ROM_LOAD( "4.6e", 0x0000, 0x4000, CRC(f77ced7a) SHA1(55bf0a0799d85877a71d1529073b0ed847c80e54) ) ROM_LOAD( "5.7e", 0x4000, 0x4000, CRC(16ef1465) SHA1(7547f24fec79f774e1be441c3734bdcc03b5d313) ) ROM_LOAD( "6.6g", 0x8000, 0x4000, CRC(936ec941) SHA1(b4891e207d66f8b77c237fc23ffa48f87ab6993a) ) ROM_LOAD( "7.7g", 0xc000, 0x4000, CRC(66dd718e) SHA1(80990c6199f63b215e1dead3b09cf6160dd75333) ) ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "clr.10f", 0x000, 0x100, CRC(6440b341) SHA1(ccf89ac889f1653100f5b0a042dcd826c4ac628b) ) /* red */ - ROM_LOAD( "clr.11f", 0x100, 0x100, CRC(271e947f) SHA1(3d1f44fe92cc5fdff001ef80e07aa46a1ca68fe5) ) /* green */ - ROM_LOAD( "clr.12f", 0x200, 0x100, CRC(7d38621b) SHA1(7904c3c2c32006d4f4608b6ee84d44ecd601de73) ) /* blue */ - ROM_LOAD( "2g", 0x300, 0x100, CRC(44ca16b9) SHA1(1893f24d1c7f4d8e24b5484b19f9284f2ec9be08) ) /* clut */ + ROM_LOAD( "clr.10f", 0x000, 0x100, CRC(6440b341) SHA1(ccf89ac889f1653100f5b0a042dcd826c4ac628b) ) // red + ROM_LOAD( "clr.11f", 0x100, 0x100, CRC(271e947f) SHA1(3d1f44fe92cc5fdff001ef80e07aa46a1ca68fe5) ) // green + ROM_LOAD( "clr.12f", 0x200, 0x100, CRC(7d38621b) SHA1(7904c3c2c32006d4f4608b6ee84d44ecd601de73) ) // blue + ROM_LOAD( "2g", 0x300, 0x100, CRC(44ca16b9) SHA1(1893f24d1c7f4d8e24b5484b19f9284f2ec9be08) ) // clut - ROM_REGION( 0x0100, "user1", 0 ) - ROM_LOAD( "4e", 0x000, 0x100, CRC(035f2c7b) SHA1(36e32a50146631e763711b586936b2815600f52d) ) /* ctable */ + ROM_REGION( 0x0100, "palbank_prom", 0 ) + ROM_LOAD( "4e", 0x000, 0x100, CRC(035f2c7b) SHA1(36e32a50146631e763711b586936b2815600f52d) ) // ctable - ROM_REGION( 0x2000, "prot_chip", 0 ) /* unknown, mostly text */ + ROM_REGION( 0x2000, "prot_chip", 0 ) // unknown, mostly text ROM_LOAD( "16.18g", 0x0000, 0x2000, CRC(1d8d592b) SHA1(be8d6df8b5926069ae2cbc1dc26e1fa92d63f297) ) ROM_END -ROM_START( amazont ) /* Found a on Tecfri TC-1A and TC-2A boardset */ - ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code (main CPU) */ +ROM_START( amazont ) // Found a on Tecfri TC-1A and TC-2A boardset + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "5.4d", 0x00000, 0x8000, CRC(ae39432f) SHA1(438f957e8e8e3ac12a24b4852bac5530cfbf858a) ) ROM_LOAD16_BYTE( "7.4b", 0x00001, 0x8000, CRC(a74cdcea) SHA1(6c9f891942a66d179405fd6067688522c3796235) ) ROM_LOAD16_BYTE( "4.6d", 0x10000, 0x8000, CRC(0c6b0772) SHA1(0b103622dcb74bba0320a8d6393d51a0cc653a0e) ) ROM_LOAD16_BYTE( "6.6b", 0x10001, 0x8000, CRC(edbaad3f) SHA1(b2ab817d4403ed6f58bae9b464116ccf9e005176) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */ + ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code ROM_LOAD( "1.15b", 0x00000, 0x4000, CRC(55a8b5e7) SHA1(d3f5609c1b97a54c505d12dd22f7454c88c90fb9) ) ROM_LOAD( "2.17b", 0x04000, 0x4000, CRC(427a7cca) SHA1(b30e3dd4f685c4095478972d38bb9616369a51bf) ) ROM_LOAD( "3.18b", 0x08000, 0x4000, CRC(b8cceaf7) SHA1(5682df3193ad1dfef366353921bfa7af08aec055) ) - ROM_REGION( 0x2000, "gfx1", 0 ) /* alphanumerics */ + ROM_REGION( 0x2000, "fgtiles", 0 ) ROM_LOAD( "8.16g", 0x0000, 0x2000, CRC(0cec8644) SHA1(a8f2a67b2243771e20ba51a539a83f0017dff6bc) ) - ROM_REGION( 0x20000, "gfx2", 0 ) /* tiles */ + ROM_REGION( 0x20000, "bgtiles", 0 ) ROM_LOAD( "13.15f", 0x00000, 0x8000, CRC(415ff4d9) SHA1(b5d17bfbf78e620c29f8933f06bd88cc89825b4b) ) ROM_LOAD( "14.17f", 0x08000, 0x8000, CRC(492b5c48) SHA1(822d9098427650d55cdd6e4a7e540147198d72fc) ) ROM_LOAD( "15.18f", 0x10000, 0x8000, CRC(b1ac0b9d) SHA1(1b413823669db24a5cfb93f66f54bd08c410a0d4) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* sprites */ + ROM_REGION( 0x10000, "sprites", 0 ) ROM_LOAD( "4.6e", 0x0000, 0x4000, CRC(f77ced7a) SHA1(55bf0a0799d85877a71d1529073b0ed847c80e54) ) ROM_LOAD( "5.7e", 0x4000, 0x4000, CRC(16ef1465) SHA1(7547f24fec79f774e1be441c3734bdcc03b5d313) ) ROM_LOAD( "6.6g", 0x8000, 0x4000, CRC(936ec941) SHA1(b4891e207d66f8b77c237fc23ffa48f87ab6993a) ) ROM_LOAD( "7.7g", 0xc000, 0x4000, CRC(66dd718e) SHA1(80990c6199f63b215e1dead3b09cf6160dd75333) ) ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "clr.10f", 0x000, 0x100, CRC(6440b341) SHA1(ccf89ac889f1653100f5b0a042dcd826c4ac628b) ) /* red */ - ROM_LOAD( "clr.11f", 0x100, 0x100, CRC(271e947f) SHA1(3d1f44fe92cc5fdff001ef80e07aa46a1ca68fe5) ) /* green */ - ROM_LOAD( "clr.12f", 0x200, 0x100, CRC(7d38621b) SHA1(7904c3c2c32006d4f4608b6ee84d44ecd601de73) ) /* blue */ - ROM_LOAD( "2g", 0x300, 0x100, CRC(44ca16b9) SHA1(1893f24d1c7f4d8e24b5484b19f9284f2ec9be08) ) /* clut */ + ROM_LOAD( "clr.10f", 0x000, 0x100, CRC(6440b341) SHA1(ccf89ac889f1653100f5b0a042dcd826c4ac628b) ) // red + ROM_LOAD( "clr.11f", 0x100, 0x100, CRC(271e947f) SHA1(3d1f44fe92cc5fdff001ef80e07aa46a1ca68fe5) ) // green + ROM_LOAD( "clr.12f", 0x200, 0x100, CRC(7d38621b) SHA1(7904c3c2c32006d4f4608b6ee84d44ecd601de73) ) // blue + ROM_LOAD( "2g", 0x300, 0x100, CRC(44ca16b9) SHA1(1893f24d1c7f4d8e24b5484b19f9284f2ec9be08) ) // clut - ROM_REGION( 0x0100, "user1", 0 ) - ROM_LOAD( "4e", 0x000, 0x100, CRC(035f2c7b) SHA1(36e32a50146631e763711b586936b2815600f52d) ) /* ctable */ + ROM_REGION( 0x0100, "palbank_prom", 0 ) + ROM_LOAD( "4e", 0x000, 0x100, CRC(035f2c7b) SHA1(36e32a50146631e763711b586936b2815600f52d) ) // ctable - ROM_REGION( 0x2000, "prot_chip", 0 ) /* unknown, mostly text */ + ROM_REGION( 0x2000, "prot_chip", 0 ) // unknown, mostly text ROM_LOAD( "16.18g", 0x0000, 0x2000, CRC(1d8d592b) SHA1(be8d6df8b5926069ae2cbc1dc26e1fa92d63f297) ) ROM_END ROM_START( amatelas ) - ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code (main CPU) */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "a11.4d", 0x00000, 0x8000, CRC(3d226d0b) SHA1(b3f36973117dcca7ec6f891503ada1055694059d) ) ROM_LOAD16_BYTE( "a9.4b", 0x00001, 0x8000, CRC(e2a0d21d) SHA1(abb65ea5a10719d27f711216b7e387f2e01bdd5d) ) ROM_LOAD16_BYTE( "a12.6d", 0x10000, 0x8000, CRC(e6607c51) SHA1(7679f84ccdf75226bb46a5357a460aa2d5e5cd32) ) ROM_LOAD16_BYTE( "a10.6b", 0x10001, 0x8000, CRC(dbc1f1b4) SHA1(0fca999356e38d69ba5822c4ec489ea08f1d771f) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */ + ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code ROM_LOAD( "1.15b", 0x00000, 0x4000, CRC(55a8b5e7) SHA1(d3f5609c1b97a54c505d12dd22f7454c88c90fb9) ) ROM_LOAD( "2.17b", 0x04000, 0x4000, CRC(427a7cca) SHA1(b30e3dd4f685c4095478972d38bb9616369a51bf) ) ROM_LOAD( "3.18b", 0x08000, 0x4000, CRC(b8cceaf7) SHA1(5682df3193ad1dfef366353921bfa7af08aec055) ) - ROM_REGION( 0x2000, "gfx1", 0 ) /* alphanumerics */ + ROM_REGION( 0x2000, "fgtiles", 0 ) ROM_LOAD( "a8.16g", 0x0000, 0x2000, CRC(aeba2102) SHA1(fb4d047a78cd47f628fedfda8349dc46cf6a6f32) ) - ROM_REGION( 0x20000, "gfx2", 0 ) /* tiles */ + ROM_REGION( 0x20000, "bgtiles", 0 ) ROM_LOAD( "13.15f", 0x00000, 0x8000, CRC(415ff4d9) SHA1(b5d17bfbf78e620c29f8933f06bd88cc89825b4b) ) ROM_LOAD( "14.17f", 0x08000, 0x8000, CRC(492b5c48) SHA1(822d9098427650d55cdd6e4a7e540147198d72fc) ) ROM_LOAD( "15.18f", 0x10000, 0x8000, CRC(b1ac0b9d) SHA1(1b413823669db24a5cfb93f66f54bd08c410a0d4) ) - ROM_REGION( 0x10000, "gfx3", 0 ) /* sprites */ + ROM_REGION( 0x10000, "sprites", 0 ) ROM_LOAD( "4.6e", 0x0000, 0x4000, CRC(f77ced7a) SHA1(55bf0a0799d85877a71d1529073b0ed847c80e54) ) ROM_LOAD( "a5.7e", 0x4000, 0x4000, CRC(5fbf9a16) SHA1(d33a020626db8267fd1c1eacbff15c569d7fb72d) ) ROM_LOAD( "6.6g", 0x8000, 0x4000, CRC(936ec941) SHA1(b4891e207d66f8b77c237fc23ffa48f87ab6993a) ) ROM_LOAD( "7.7g", 0xc000, 0x4000, CRC(66dd718e) SHA1(80990c6199f63b215e1dead3b09cf6160dd75333) ) ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "clr.10f", 0x000, 0x100, CRC(6440b341) SHA1(ccf89ac889f1653100f5b0a042dcd826c4ac628b) ) /* red */ - ROM_LOAD( "clr.11f", 0x100, 0x100, CRC(271e947f) SHA1(3d1f44fe92cc5fdff001ef80e07aa46a1ca68fe5) ) /* green */ - ROM_LOAD( "clr.12f", 0x200, 0x100, CRC(7d38621b) SHA1(7904c3c2c32006d4f4608b6ee84d44ecd601de73) ) /* blue */ - ROM_LOAD( "2g", 0x300, 0x100, CRC(44ca16b9) SHA1(1893f24d1c7f4d8e24b5484b19f9284f2ec9be08) ) /* clut */ + ROM_LOAD( "clr.10f", 0x000, 0x100, CRC(6440b341) SHA1(ccf89ac889f1653100f5b0a042dcd826c4ac628b) ) // red + ROM_LOAD( "clr.11f", 0x100, 0x100, CRC(271e947f) SHA1(3d1f44fe92cc5fdff001ef80e07aa46a1ca68fe5) ) // green + ROM_LOAD( "clr.12f", 0x200, 0x100, CRC(7d38621b) SHA1(7904c3c2c32006d4f4608b6ee84d44ecd601de73) ) // blue + ROM_LOAD( "2g", 0x300, 0x100, CRC(44ca16b9) SHA1(1893f24d1c7f4d8e24b5484b19f9284f2ec9be08) ) // clut - ROM_REGION( 0x0100, "user1", 0 ) - ROM_LOAD( "4e", 0x000, 0x100, CRC(035f2c7b) SHA1(36e32a50146631e763711b586936b2815600f52d) ) /* ctable */ + ROM_REGION( 0x0100, "palbank_prom", 0 ) + ROM_LOAD( "4e", 0x000, 0x100, CRC(035f2c7b) SHA1(36e32a50146631e763711b586936b2815600f52d) ) // ctable - ROM_REGION( 0x2000, "prot_chip", 0 ) /* unknown, mostly text */ + ROM_REGION( 0x2000, "prot_chip", 0 ) // unknown, mostly text ROM_LOAD( "16.18g", 0x0000, 0x2000, CRC(1d8d592b) SHA1(be8d6df8b5926069ae2cbc1dc26e1fa92d63f297) ) ROM_END ROM_START( horekid ) - ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code (main CPU) */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "horekid.03", 0x00000, 0x8000, CRC(90ec840f) SHA1(7d04936c50c9ae02ea7dc24f8336997592def867) ) ROM_LOAD16_BYTE( "horekid.01", 0x00001, 0x8000, CRC(a282faf8) SHA1(4c1ff36cf324dff9ddfc1035db6c52838c7be975) ) ROM_LOAD16_BYTE( "horekid.04", 0x10000, 0x8000, CRC(375c0c50) SHA1(ee040dbdfe6673cf48f143518458609b21b4e15d) ) ROM_LOAD16_BYTE( "horekid.02", 0x10001, 0x8000, CRC(ee7d52bb) SHA1(b9083f672a6bc37ec2bbb9af081e6f27b712b663) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */ + ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code ROM_LOAD( "horekid.09", 0x0000, 0x4000,CRC(49cd3b81) SHA1(284d75f6f6121d0581bb62f13ee02c85c3d972d2) ) ROM_LOAD( "horekid.10", 0x4000, 0x4000,CRC(c1eaa938) SHA1(839f03e701f072a6441ee4980eb1961859c40d97) ) ROM_LOAD( "horekid.11", 0x8000, 0x4000,CRC(0a2bc702) SHA1(0cef9e9022a27d30d2f83a16a55d8ede0ab686f4) ) - ROM_REGION( 0x2000, "gfx1", 0 ) /* alphanumerics */ + ROM_REGION( 0x2000, "fgtiles", 0 ) ROM_LOAD( "horekid.16", 0x0000, 0x2000, CRC(104b77cc) SHA1(f875c7fe4f2b540bc44fa144a449a01268011431) ) - ROM_REGION( 0x20000, "gfx2", 0 ) /* tiles */ + ROM_REGION( 0x20000, "bgtiles", 0 ) ROM_LOAD( "horekid.05", 0x00000, 0x8000, CRC(da25ae10) SHA1(83d8b78cff85854b497b40525ec3c93a84ba6248) ) ROM_LOAD( "horekid.06", 0x08000, 0x8000, CRC(616e4321) SHA1(5bf0e0a7290b6bcb5dfbb1070eeb683830e6916b) ) ROM_LOAD( "horekid.07", 0x10000, 0x8000, CRC(8c7d2be2) SHA1(efd70997126fc7c2622546fabe69cb222dca87f9) ) ROM_LOAD( "horekid.08", 0x18000, 0x8000, CRC(a0066b02) SHA1(d6437932028e937dab5728f40d6d09b6afe9a903) ) - ROM_REGION( 0x20000, "gfx3", 0 ) /* sprites */ + ROM_REGION( 0x20000, "sprites", 0 ) ROM_LOAD( "horekid.12", 0x00000, 0x8000, CRC(a3caa07a) SHA1(4baa7d1867dbaa8bace43416040114129f5405d6) ) ROM_LOAD( "horekid.13", 0x08000, 0x8000, CRC(0e48ff8e) SHA1(5a3025991378ed3f9bdc2d420b1432332278178b) ) ROM_LOAD( "horekid.14", 0x10000, 0x8000, CRC(e300747a) SHA1(5875a46c215b12f1e9a889819215bca40e4459a6) ) ROM_LOAD( "horekid.15", 0x18000, 0x8000, CRC(51105741) SHA1(01c3bb2c03ce1ca959d62d64be3a019e74f677ba) ) ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "kid_prom.10f", 0x000, 0x100, CRC(ca13ce23) SHA1(46f0ed22f601721fa35bab12ce8816f30b102f59) ) /* red */ - ROM_LOAD( "kid_prom.11f", 0x100, 0x100, CRC(fb44285a) SHA1(f9605e82f63188daeff044fd48d81c1dfc4d4f2a) ) /* green */ - ROM_LOAD( "kid_prom.12f", 0x200, 0x100, CRC(40d41237) SHA1(b33082540d739a3bfe096f68f3359fbf1360b5be) ) /* blue */ - ROM_LOAD( "kid_prom.2g", 0x300, 0x100, CRC(4b9be0ed) SHA1(81aa7bb24fe6ea13f5dffdb67ea699adf0b3129a) ) /* clut */ + ROM_LOAD( "kid_prom.10f", 0x000, 0x100, CRC(ca13ce23) SHA1(46f0ed22f601721fa35bab12ce8816f30b102f59) ) // red + ROM_LOAD( "kid_prom.11f", 0x100, 0x100, CRC(fb44285a) SHA1(f9605e82f63188daeff044fd48d81c1dfc4d4f2a) ) // green + ROM_LOAD( "kid_prom.12f", 0x200, 0x100, CRC(40d41237) SHA1(b33082540d739a3bfe096f68f3359fbf1360b5be) ) // blue + ROM_LOAD( "kid_prom.2g", 0x300, 0x100, CRC(4b9be0ed) SHA1(81aa7bb24fe6ea13f5dffdb67ea699adf0b3129a) ) // clut - ROM_REGION( 0x0100, "user1", 0 ) - ROM_LOAD( "kid_prom.4e", 0x000, 0x100, CRC(e4fb54ee) SHA1(aba89d347b24dc6680e6f25b4a6c0d6657bb6a83) ) /* ctable */ + ROM_REGION( 0x0100, "palbank_prom", 0 ) + ROM_LOAD( "kid_prom.4e", 0x000, 0x100, CRC(e4fb54ee) SHA1(aba89d347b24dc6680e6f25b4a6c0d6657bb6a83) ) // ctable - ROM_REGION( 0x2000, "prot_chip", 0 ) /* unknown, mostly text */ + ROM_REGION( 0x2000, "prot_chip", 0 ) // unknown, mostly text ROM_LOAD( "horekid.17", 0x0000, 0x2000, CRC(1d8d592b) SHA1(be8d6df8b5926069ae2cbc1dc26e1fa92d63f297) ) ROM_END ROM_START( horekidb ) - ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code (main CPU) */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "knhhd5", 0x00000, 0x8000, CRC(786619c7) SHA1(6b4a659839a7c19370a81f9f9b26e4fe0d210d7b) ) ROM_LOAD16_BYTE( "knhhd7", 0x00001, 0x8000, CRC(3bbb475b) SHA1(575cdc4f902f15335579c0f860fa75e33a0ea539) ) ROM_LOAD16_BYTE( "horekid.04", 0x10000, 0x8000, CRC(375c0c50) SHA1(ee040dbdfe6673cf48f143518458609b21b4e15d) ) ROM_LOAD16_BYTE( "horekid.02", 0x10001, 0x8000, CRC(ee7d52bb) SHA1(b9083f672a6bc37ec2bbb9af081e6f27b712b663) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */ + ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code ROM_LOAD( "horekid.09", 0x0000, 0x4000,CRC(49cd3b81) SHA1(284d75f6f6121d0581bb62f13ee02c85c3d972d2) ) ROM_LOAD( "horekid.10", 0x4000, 0x4000,CRC(c1eaa938) SHA1(839f03e701f072a6441ee4980eb1961859c40d97) ) ROM_LOAD( "horekid.11", 0x8000, 0x4000,CRC(0a2bc702) SHA1(0cef9e9022a27d30d2f83a16a55d8ede0ab686f4) ) - ROM_REGION( 0x2000, "gfx1", 0 ) /* alphanumerics */ + ROM_REGION( 0x2000, "fgtiles", 0 ) ROM_LOAD( "horekid.16", 0x0000, 0x2000, CRC(104b77cc) SHA1(f875c7fe4f2b540bc44fa144a449a01268011431) ) - ROM_REGION( 0x20000, "gfx2", 0 ) /* tiles */ + ROM_REGION( 0x20000, "bgtiles", 0 ) ROM_LOAD( "horekid.05", 0x00000, 0x8000, CRC(da25ae10) SHA1(83d8b78cff85854b497b40525ec3c93a84ba6248) ) ROM_LOAD( "horekid.06", 0x08000, 0x8000, CRC(616e4321) SHA1(5bf0e0a7290b6bcb5dfbb1070eeb683830e6916b) ) ROM_LOAD( "horekid.07", 0x10000, 0x8000, CRC(8c7d2be2) SHA1(efd70997126fc7c2622546fabe69cb222dca87f9) ) ROM_LOAD( "horekid.08", 0x18000, 0x8000, CRC(a0066b02) SHA1(d6437932028e937dab5728f40d6d09b6afe9a903) ) - ROM_REGION( 0x20000, "gfx3", 0 ) /* sprites */ + ROM_REGION( 0x20000, "sprites", 0 ) ROM_LOAD( "horekid.12", 0x00000, 0x8000, CRC(a3caa07a) SHA1(4baa7d1867dbaa8bace43416040114129f5405d6) ) ROM_LOAD( "horekid.13", 0x08000, 0x8000, CRC(0e48ff8e) SHA1(5a3025991378ed3f9bdc2d420b1432332278178b) ) ROM_LOAD( "horekid.14", 0x10000, 0x8000, CRC(e300747a) SHA1(5875a46c215b12f1e9a889819215bca40e4459a6) ) ROM_LOAD( "horekid.15", 0x18000, 0x8000, CRC(51105741) SHA1(01c3bb2c03ce1ca959d62d64be3a019e74f677ba) ) ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "kid_prom.10f", 0x000, 0x100, CRC(ca13ce23) SHA1(46f0ed22f601721fa35bab12ce8816f30b102f59) ) /* red */ - ROM_LOAD( "kid_prom.11f", 0x100, 0x100, CRC(fb44285a) SHA1(f9605e82f63188daeff044fd48d81c1dfc4d4f2a) ) /* green */ - ROM_LOAD( "kid_prom.12f", 0x200, 0x100, CRC(40d41237) SHA1(b33082540d739a3bfe096f68f3359fbf1360b5be) ) /* blue */ - ROM_LOAD( "kid_prom.2g", 0x300, 0x100, CRC(4b9be0ed) SHA1(81aa7bb24fe6ea13f5dffdb67ea699adf0b3129a) ) /* clut */ + ROM_LOAD( "kid_prom.10f", 0x000, 0x100, CRC(ca13ce23) SHA1(46f0ed22f601721fa35bab12ce8816f30b102f59) ) // red + ROM_LOAD( "kid_prom.11f", 0x100, 0x100, CRC(fb44285a) SHA1(f9605e82f63188daeff044fd48d81c1dfc4d4f2a) ) // green + ROM_LOAD( "kid_prom.12f", 0x200, 0x100, CRC(40d41237) SHA1(b33082540d739a3bfe096f68f3359fbf1360b5be) ) // blue + ROM_LOAD( "kid_prom.2g", 0x300, 0x100, CRC(4b9be0ed) SHA1(81aa7bb24fe6ea13f5dffdb67ea699adf0b3129a) ) // clut - ROM_REGION( 0x0100, "user1", 0 ) - ROM_LOAD( "kid_prom.4e", 0x000, 0x100, CRC(e4fb54ee) SHA1(aba89d347b24dc6680e6f25b4a6c0d6657bb6a83) ) /* ctable */ + ROM_REGION( 0x0100, "palbank_prom", 0 ) + ROM_LOAD( "kid_prom.4e", 0x000, 0x100, CRC(e4fb54ee) SHA1(aba89d347b24dc6680e6f25b4a6c0d6657bb6a83) ) // ctable - ROM_REGION( 0x2000, "prot_chip", 0 ) /* unknown, mostly text */ + ROM_REGION( 0x2000, "prot_chip", 0 ) // unknown, mostly text ROM_LOAD( "horekid.17", 0x0000, 0x2000, CRC(1d8d592b) SHA1(be8d6df8b5926069ae2cbc1dc26e1fa92d63f297) ) ROM_END @@ -1007,17 +1291,17 @@ ROM_START( horekidb2 ) ROM_LOAD( "13b.bin", 0x8000, 0x4000, CRC(78631a6c) SHA1(24b43d8d86c53990d6d781830f49ce28d69eef02) ) // 0xxxxxxxxxxxxxx = 0xFF ROM_CONTINUE( 0x8000, 0x4000 ) - ROM_REGION( 0x2000, "gfx1", 0 ) // alphanumerics, believed , identical to the original + ROM_REGION( 0x2000, "fgtiles", 0 ) // believed identical to the original ROM_LOAD( "18.bin", 0x0000, 0x2000, BAD_DUMP CRC(23a1d180) SHA1(daf212e7b82f8ec65265f0ee6b05ba4c78cfa379) ) ROM_LOAD( "horekid.16", 0x0000, 0x2000, CRC(104b77cc) SHA1(f875c7fe4f2b540bc44fa144a449a01268011431) ) // Given the rest of the GFX ROMs match horekid we'll assume this does too, for now - ROM_REGION( 0x20000, "gfx2", 0 ) // tiles, identical to the original + ROM_REGION( 0x20000, "bgtiles", 0 ) // identical to the original ROM_LOAD( "9.bin", 0x00000, 0x8000, CRC(da25ae10) SHA1(83d8b78cff85854b497b40525ec3c93a84ba6248) ) ROM_LOAD( "10.bin", 0x08000, 0x8000, CRC(616e4321) SHA1(5bf0e0a7290b6bcb5dfbb1070eeb683830e6916b) ) ROM_LOAD( "11.bin", 0x10000, 0x8000, CRC(8c7d2be2) SHA1(efd70997126fc7c2622546fabe69cb222dca87f9) ) ROM_LOAD( "12.bin", 0x18000, 0x8000, CRC(a0066b02) SHA1(d6437932028e937dab5728f40d6d09b6afe9a903) ) - ROM_REGION( 0x20000, "gfx3", 0 ) // sprites, identical to the original + ROM_REGION( 0x20000, "sprites", 0 ) // identical to the original ROM_LOAD( "14b.bin", 0x00000, 0x8000, CRC(a3caa07a) SHA1(4baa7d1867dbaa8bace43416040114129f5405d6) ) ROM_LOAD( "15b.bin", 0x08000, 0x8000, CRC(0e48ff8e) SHA1(5a3025991378ed3f9bdc2d420b1432332278178b) ) ROM_LOAD( "16b.bin", 0x10000, 0x8000, CRC(e300747a) SHA1(5875a46c215b12f1e9a889819215bca40e4459a6) ) @@ -1029,7 +1313,7 @@ ROM_START( horekidb2 ) ROM_LOAD( "kid_prom.12f", 0x200, 0x100, CRC(40d41237) SHA1(b33082540d739a3bfe096f68f3359fbf1360b5be) ) // blue ROM_LOAD( "kid_prom.2g", 0x300, 0x100, CRC(4b9be0ed) SHA1(81aa7bb24fe6ea13f5dffdb67ea699adf0b3129a) ) // clut - ROM_REGION( 0x0100, "user1", 0 ) // not dumped for this set + ROM_REGION( 0x0100, "palbank_prom", 0 ) // not dumped for this set ROM_LOAD( "kid_prom.4e", 0x000, 0x100, CRC(e4fb54ee) SHA1(aba89d347b24dc6680e6f25b4a6c0d6657bb6a83) ) // ctable ROM_END @@ -1041,57 +1325,58 @@ ROM_END it is a common PCB, and we need to clarify that this is not the real thing. */ ROM_START( boobhack ) - ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code (main CPU) */ + ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "1-c.bin", 0x00000, 0x8000, CRC(786619c7) SHA1(6b4a659839a7c19370a81f9f9b26e4fe0d210d7b) ) ROM_LOAD16_BYTE( "1-b.bin", 0x00001, 0x8000, CRC(3bbb475b) SHA1(575cdc4f902f15335579c0f860fa75e33a0ea539) ) ROM_LOAD16_BYTE( "1-d.bin", 0x10000, 0x8000, CRC(375c0c50) SHA1(ee040dbdfe6673cf48f143518458609b21b4e15d) ) ROM_LOAD16_BYTE( "1-a.bin", 0x10001, 0x8000, CRC(ee7d52bb) SHA1(b9083f672a6bc37ec2bbb9af081e6f27b712b663) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */ + ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code ROM_LOAD( "1-i.bin", 0x0000, 0x4000,CRC(49cd3b81) SHA1(284d75f6f6121d0581bb62f13ee02c85c3d972d2) ) ROM_LOAD( "1-j.bin", 0x4000, 0x4000,CRC(c1eaa938) SHA1(839f03e701f072a6441ee4980eb1961859c40d97) ) ROM_LOAD( "1-k.bin", 0x8000, 0x4000,CRC(0a2bc702) SHA1(0cef9e9022a27d30d2f83a16a55d8ede0ab686f4) ) - ROM_REGION( 0x2000, "gfx1", 0 ) /* alphanumerics */ + ROM_REGION( 0x2000, "fgtiles", 0 ) ROM_LOAD( "1-p.bin", 0x0000, 0x2000, CRC(104b77cc) SHA1(f875c7fe4f2b540bc44fa144a449a01268011431) ) - ROM_REGION( 0x20000, "gfx2", 0 ) /* tiles */ + ROM_REGION( 0x20000, "bgtiles", 0 ) ROM_LOAD( "1-e.bin", 0x00000, 0x8000, CRC(da25ae10) SHA1(83d8b78cff85854b497b40525ec3c93a84ba6248) ) ROM_LOAD( "1-f.bin", 0x08000, 0x8000, CRC(616e4321) SHA1(5bf0e0a7290b6bcb5dfbb1070eeb683830e6916b) ) ROM_LOAD( "1-g.bin", 0x10000, 0x8000, CRC(8c7d2be2) SHA1(efd70997126fc7c2622546fabe69cb222dca87f9) ) ROM_LOAD( "1-h.bin", 0x18000, 0x8000, CRC(a0066b02) SHA1(d6437932028e937dab5728f40d6d09b6afe9a903) ) - ROM_REGION( 0x20000, "gfx3", 0 ) /* sprites */ + ROM_REGION( 0x20000, "sprites", 0 ) ROM_LOAD( "1-l.bin", 0x00000, 0x8000, CRC(a3caa07a) SHA1(4baa7d1867dbaa8bace43416040114129f5405d6) ) ROM_LOAD( "1-m.bin", 0x08000, 0x8000, CRC(15b6cbdf) SHA1(b7f2a527946bcbd51aeae98b8971f4fbabcb3d14) ) // Booby Kids gfx hack changes these 2 roms ONLY ROM_LOAD( "1-n.bin", 0x10000, 0x8000, CRC(e300747a) SHA1(5875a46c215b12f1e9a889819215bca40e4459a6) ) ROM_LOAD( "1-o.bin", 0x18000, 0x8000, CRC(cddc6a6c) SHA1(28d12342e0ada941f68845fa65793a3f5fa21246) ) // Booby Kids gfx hack changes these 2 roms ONLY ROM_REGION( 0x400, "proms", 0 ) - ROM_LOAD( "kid_prom.10f", 0x000, 0x100, CRC(ca13ce23) SHA1(46f0ed22f601721fa35bab12ce8816f30b102f59) ) /* red */ - ROM_LOAD( "kid_prom.11f", 0x100, 0x100, CRC(fb44285a) SHA1(f9605e82f63188daeff044fd48d81c1dfc4d4f2a) ) /* green */ - ROM_LOAD( "kid_prom.12f", 0x200, 0x100, CRC(40d41237) SHA1(b33082540d739a3bfe096f68f3359fbf1360b5be) ) /* blue */ - ROM_LOAD( "kid_prom.2g", 0x300, 0x100, CRC(4b9be0ed) SHA1(81aa7bb24fe6ea13f5dffdb67ea699adf0b3129a) ) /* clut */ + ROM_LOAD( "kid_prom.10f", 0x000, 0x100, CRC(ca13ce23) SHA1(46f0ed22f601721fa35bab12ce8816f30b102f59) ) // red + ROM_LOAD( "kid_prom.11f", 0x100, 0x100, CRC(fb44285a) SHA1(f9605e82f63188daeff044fd48d81c1dfc4d4f2a) ) // green + ROM_LOAD( "kid_prom.12f", 0x200, 0x100, CRC(40d41237) SHA1(b33082540d739a3bfe096f68f3359fbf1360b5be) ) // blue + ROM_LOAD( "kid_prom.2g", 0x300, 0x100, CRC(4b9be0ed) SHA1(81aa7bb24fe6ea13f5dffdb67ea699adf0b3129a) ) // clut - ROM_REGION( 0x0100, "user1", 0 ) - ROM_LOAD( "kid_prom.4e", 0x000, 0x100, BAD_DUMP CRC(e4fb54ee) SHA1(aba89d347b24dc6680e6f25b4a6c0d6657bb6a83) ) /* ctable */ + ROM_REGION( 0x0100, "palbank_prom", 0 ) + ROM_LOAD( "kid_prom.4e", 0x000, 0x100, BAD_DUMP CRC(e4fb54ee) SHA1(aba89d347b24dc6680e6f25b4a6c0d6657bb6a83) ) // ctable ROM_END +} // anonymous namespace -// YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR, COMPANY, FULLNAME, FLAGS -GAME( 1985, terracre, 0, ym3526, terracre, terracre_state, empty_init, ROT270, "Nichibutsu", "Terra Cresta (YM3526 set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, terracreo, terracre, ym3526, terracre, terracre_state, empty_init, ROT270, "Nichibutsu", "Terra Cresta (YM3526 set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, terracrea, terracre, ym3526, terracre, terracre_state, empty_init, ROT270, "Nichibutsu", "Terra Cresta (YM3526 set 3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, terracren, terracre, ym2203, terracre, terracre_state, empty_init, ROT270, "Nichibutsu", "Terra Cresta (YM2203)", MACHINE_SUPPORTS_SAVE ) +// YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR, COMPANY, FULLNAME, FLAGS +GAME( 1985, terracre, 0, ym3526, terracre, terracre_state, empty_init, ROT270, "Nichibutsu", "Terra Cresta (YM3526 set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, terracreo, terracre, ym3526, terracre, terracre_state, empty_init, ROT270, "Nichibutsu", "Terra Cresta (YM3526 set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, terracrea, terracre, ym3526, terracre, terracre_state, empty_init, ROT270, "Nichibutsu", "Terra Cresta (YM3526 set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, terracren, terracre, ym2203, terracre, terracre_state, empty_init, ROT270, "Nichibutsu", "Terra Cresta (YM2203)", MACHINE_SUPPORTS_SAVE ) // later HW: supports 1412M2 device, see also mightguy.cpp -GAME( 1986, amazon, 0, amazon_1412m2, amazon, amazon_state, empty_init, ROT270, "Nichibutsu", "Soldier Girl Amazon", MACHINE_SUPPORTS_SAVE ) //AT-1(1602) and AT-2(1602) pcbs +GAME( 1986, amazon, 0, amazon_1412m2, amazon, amazon_state, empty_init, ROT270, "Nichibutsu", "Soldier Girl Amazon", MACHINE_SUPPORTS_SAVE ) //AT-1(1602) and AT-2(1602) pcbs GAME( 1986, amazont, amazon, amazon_1412m2, amazon, amazon_state, empty_init, ROT270, "Nichibutsu (Tecfri license)", "Soldier Girl Amazon (Tecfri license)", MACHINE_SUPPORTS_SAVE ) //AT-1(1602) and AT-2(1602) pcbs -GAME( 1986, amatelas, amazon, amazon_1412m2, amazon, amazon_state, empty_init, ROT270, "Nichibutsu", "Sei Senshi Amatelass", MACHINE_SUPPORTS_SAVE ) //AT-1(1602) and AT-2(1602) pcbs -GAME( 1987, horekid, 0, amazon_1412m2, horekid, amazon_state, empty_init, ROT270, "Nichibutsu", "Kid no Hore Hore Daisakusen", MACHINE_SUPPORTS_SAVE ) //BK-I(1502) and BK-II(1502) pcbs +GAME( 1986, amatelas, amazon, amazon_1412m2, amazon, amazon_state, empty_init, ROT270, "Nichibutsu", "Sei Senshi Amatelass", MACHINE_SUPPORTS_SAVE ) //AT-1(1602) and AT-2(1602) pcbs +GAME( 1987, horekid, 0, amazon_1412m2, horekid, amazon_state, empty_init, ROT270, "Nichibutsu", "Kid no Hore Hore Daisakusen", MACHINE_SUPPORTS_SAVE ) //BK-I(1502) and BK-II(1502) pcbs // bootlegs -GAME( 1987, horekidb, horekid, amazon_base, horekid, terracre_state, empty_init, ROT270, "bootleg", "Kid no Hore Hore Daisakusen (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, horekidb2, horekid, horekidb2, horekidb2, terracre_state, empty_init, ROT270, "bootleg", "Kid no Hore Hore Daisakusen (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, boobhack, horekid, amazon_base, horekid, terracre_state, empty_init, ROT270, "bootleg", "Booby Kids (Italian manufactured graphic hack / bootleg of Kid no Hore Hore Daisakusen (bootleg))", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, horekidb, horekid, amazon_base, horekid, terracre_state, empty_init, ROT270, "bootleg", "Kid no Hore Hore Daisakusen (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, horekidb2, horekid, horekidb2, horekidb2, terracre_state, empty_init, ROT270, "bootleg", "Kid no Hore Hore Daisakusen (bootleg set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, boobhack, horekid, amazon_base, horekid, terracre_state, empty_init, ROT270, "bootleg", "Booby Kids (Italian manufactured graphic hack / bootleg of Kid no Hore Hore Daisakusen (bootleg))", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/nichibutsu/terracre.h b/src/mame/nichibutsu/terracre.h deleted file mode 100644 index a2a0a850649..00000000000 --- a/src/mame/nichibutsu/terracre.h +++ /dev/null @@ -1,105 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Carlos A. Lozano -#ifndef MAME_NICHIBUTSU_TERRACRE_H -#define MAME_NICHIBUTSU_TERRACRE_H - -#pragma once - -#include "nb1412m2.h" -#include "machine/gen_latch.h" -#include "sound/flt_biquad.h" -#include "sound/mixer.h" -#include "video/bufsprite.h" -#include "emupal.h" -#include "tilemap.h" - -class terracre_state : public driver_device -{ -public: - terracre_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_audiocpu(*this, "audiocpu") - , m_gfxdecode(*this, "gfxdecode") - , m_palette(*this, "palette") - , m_spriteram(*this, "spriteram") - , m_soundlatch(*this, "soundlatch") - , m_dacfilter1(*this, "dacfilter1") - , m_dacfilter2(*this, "dacfilter2") - , m_ymfilter(*this, "ymfilter") - , m_ssgmixer(*this, "ssgmixer") - , m_ssgfilter_abfilt(*this, "ssg_abfilt") - , m_ssgfilter_abgain(*this, "ssg_abgain") - , m_ssgfilter_cgain(*this, "ssg_cgain") - , m_bg_videoram(*this, "bg_videoram") - , m_fg_videoram(*this, "fg_videoram") - { } - - void amazon_base(machine_config &config); - void horekidb2(machine_config &config); - void tc_base(machine_config &config); - void ym2203(machine_config &config); - void ym3526(machine_config &config); - -protected: - void amazon_base_map(address_map &map); - - required_device m_maincpu; - required_device m_audiocpu; - -private: - required_device m_gfxdecode; - required_device m_palette; - required_device m_spriteram; - required_device m_soundlatch; - required_device m_dacfilter1; - required_device m_dacfilter2; - required_device m_ymfilter; - optional_device m_ssgmixer; - optional_device m_ssgfilter_abfilt; - optional_device m_ssgfilter_abgain; - optional_device m_ssgfilter_cgain; - - required_shared_ptr m_bg_videoram; - required_shared_ptr m_fg_videoram; - - uint16_t m_xscroll = 0; - uint16_t m_yscroll = 0; - tilemap_t *m_background = nullptr; - tilemap_t *m_foreground = nullptr; - void amazon_sound_w(uint16_t data); - uint8_t soundlatch_clear_r(); - void amazon_background_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void amazon_foreground_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void amazon_flipscreen_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void amazon_scrolly_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void amazon_scrollx_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - TILE_GET_INFO_MEMBER(get_bg_tile_info); - TILE_GET_INFO_MEMBER(get_fg_tile_info); - virtual void video_start() override; - void terracre_palette(palette_device &palette) const; - uint32_t screen_update_amazon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); - - void horekidb2_map(address_map &map); - void sound_2203_io_map(address_map &map); - void sound_3526_io_map(address_map &map); - void sound_map(address_map &map); - void terracre_map(address_map &map); -}; - -class amazon_state : public terracre_state -{ -public: - amazon_state(const machine_config &mconfig, device_type type, const char *tag) : - terracre_state(mconfig, type, tag), - m_prot(*this, "prot_chip") - { } - - void amazon_1412m2(machine_config &config); - void amazon_1412m2_map(address_map &map); -private: - required_device m_prot; -}; - -#endif // MAME_NICHIBUTSU_TERRACRE_H diff --git a/src/mame/nichibutsu/terracre_v.cpp b/src/mame/nichibutsu/terracre_v.cpp deleted file mode 100644 index 6a330561fe7..00000000000 --- a/src/mame/nichibutsu/terracre_v.cpp +++ /dev/null @@ -1,194 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Carlos A. Lozano -/*************************************************************************** - - video.c - - Functions to emulate the video hardware of the machine. - -***************************************************************************/ - -#include "emu.h" -#include "terracre.h" - - -TILE_GET_INFO_MEMBER(terracre_state::get_bg_tile_info) -{ - /* xxxx.----.----.---- - * ----.xx--.----.---- - * ----.--xx.xxxx.xxxx */ - unsigned data = m_bg_videoram[tile_index]; - unsigned color = data>>11; - tileinfo.set(1,data&0x3ff,color,0 ); -} - -TILE_GET_INFO_MEMBER(terracre_state::get_fg_tile_info) -{ - unsigned data = m_fg_videoram[tile_index]; - tileinfo.set(0,data&0xff,0,0 ); -} - -void terracre_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ) -{ - const uint8_t *spritepalettebank = memregion("user1")->base(); - gfx_element *pGfx = m_gfxdecode->gfx(2); - const uint16_t *pSource = m_spriteram->buffer(); - int flip = flip_screen(); - int transparent_pen; - - if( pGfx->elements() > 0x200 ) - { /* HORE HORE Kid */ - transparent_pen = 0xf; - } - else - { - transparent_pen = 0x0; - } - for( int i=0; i<0x200; i+=8 ) - { - int tile = pSource[1]&0xff; - int attrs = pSource[2]; - int flipx = attrs&0x04; - int flipy = attrs&0x08; - int color = (attrs&0xf0)>>4; - int sx = (pSource[3] & 0xff) - 0x80 + 256 * (attrs & 1); - int sy = 240 - (pSource[0] & 0xff); - - if( transparent_pen ) - { - int bank; - - if( attrs&0x02 ) tile |= 0x200; - if( attrs&0x10 ) tile |= 0x100; - - bank = (tile&0xfc)>>1; - if( tile&0x200 ) bank |= 0x80; - if( tile&0x100 ) bank |= 0x01; - - color &= 0xe; - color += 16*(spritepalettebank[bank]&0xf); - } - else - { - if( attrs&0x02 ) tile|= 0x100; - color += 16 * (spritepalettebank[(tile>>1)&0xff] & 0x0f); - } - - if (flip) - { - sx=240-sx; - sy=240-sy; - flipx = !flipx; - flipy = !flipy; - } - - pGfx->transpen( - bitmap,cliprect,tile, color,flipx,flipy,sx,sy,transparent_pen ); - - pSource += 4; - } -} - -void terracre_state::terracre_palette(palette_device &palette) const -{ - const uint8_t *color_prom = memregion("proms")->base(); - - // create a lookup table for the palette - for (int i = 0; i < 0x100; i++) - { - int const r = pal4bit(color_prom[i + 0x000]); - int const g = pal4bit(color_prom[i + 0x100]); - int const b = pal4bit(color_prom[i + 0x200]); - - palette.set_indirect_color(i, rgb_t(r, g, b)); - } - - // color_prom now points to the beginning of the lookup table - color_prom += 0x300; - - // characters use colors 0-0x0f - for (int i = 0; i < 0x10; i++) - palette.set_pen_indirect(i, i); - - // background tiles use colors 0xc0-0xff in four banks - // the bottom two bits of the color code select the palette bank for pens 0-7; - // the top two bits for pens 8-0x0f. - for (int i = 0; i < 0x100; i++) - { - uint8_t const ctabentry = 0xc0 | (i & 0x0f) | ((i >> ((i & 0x08) ? 2 : 0)) & 0x30); - - palette.set_pen_indirect(0x10 + i, ctabentry); - } - - // sprites use colors 128-191 in four banks - // The lookup table tells which colors to pick from the selected bank - // the bank is selected by another PROM and depends on the top 8 bits of the sprite code. - // The PROM selects the bank *separately* for pens 0-7 and 8-15 (like for tiles). - for (int i = 0; i < 0x1000; i++) - { - uint8_t const ctabentry = 0x80 | ((i << ((i & 0x80) ? 2 : 4)) & 0x30) | (color_prom[i >> 4] & 0x0f); - int i_swapped = ((i & 0x0f) << 8) | ((i & 0xff0) >> 4); - - palette.set_pen_indirect(0x110 + i_swapped, ctabentry); - } -} - -void terracre_state::amazon_background_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_bg_videoram[offset]); - m_background->mark_tile_dirty(offset); -} - -void terracre_state::amazon_foreground_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_fg_videoram[offset]); - m_foreground->mark_tile_dirty(offset); -} - -void terracre_state::amazon_flipscreen_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - if( ACCESSING_BITS_0_7 ) - { - machine().bookkeeping().coin_counter_w(0, data&0x01 ); - machine().bookkeeping().coin_counter_w(1, (data&0x02)>>1 ); - flip_screen_set(data&0x04); - } -} - -void terracre_state::amazon_scrolly_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_yscroll); - m_background->set_scrolly(0,m_yscroll); -} - -void terracre_state::amazon_scrollx_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_xscroll); - m_background->set_scrollx(0,m_xscroll); -} - -void terracre_state::video_start() -{ - m_background = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(terracre_state::get_bg_tile_info)), TILEMAP_SCAN_COLS, 16,16, 64,32); - m_foreground = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(terracre_state::get_fg_tile_info)), TILEMAP_SCAN_COLS, 8, 8, 64,32); - m_foreground->set_transparent_pen(0xf); - - /* register for saving */ - save_item(NAME(m_xscroll)); - save_item(NAME(m_yscroll)); -} - -uint32_t terracre_state::screen_update_amazon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - if( m_xscroll&0x2000 ) - bitmap.fill(m_palette->black_pen(), cliprect ); - else - m_background->draw(screen, bitmap, cliprect, 0, 0 ); - - draw_sprites(bitmap,cliprect ); - - if ((m_xscroll & 0x1000) == 0) - m_foreground->draw(screen, bitmap, cliprect, 0, 0); - - return 0; -} diff --git a/src/mame/taito/pkspirit.cpp b/src/mame/taito/pkspirit.cpp index ee567180b47..1bf79db769b 100644 --- a/src/mame/taito/pkspirit.cpp +++ b/src/mame/taito/pkspirit.cpp @@ -251,6 +251,7 @@ void pkspirit_state::pkspirit(machine_config &config) ym2203_device &opn(YM2203(config, "opn", 36_MHz_XTAL / 9)); // divider not verified opn.irq_handler().set_inputline("audiocpu", 0); + //ymsnd.port_a_write_callback() TODO: writes continuously here. opn.add_route(ALL_OUTPUTS, "mono", 0.30); OKIM6295(config, "oki", 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.5); // all verified diff --git a/src/mame/taito/topspeed.cpp b/src/mame/taito/topspeed.cpp index 6dd9a5430c1..9b8f79a1733 100644 --- a/src/mame/taito/topspeed.cpp +++ b/src/mame/taito/topspeed.cpp @@ -1,6 +1,7 @@ // license:BSD-3-Clause -// copyright-holders:David Graves -// thanks-to:Richard Bush +// copyright-holders: David Graves +// thanks-to: Richard Bush + /**************************************************************************** Top Speed / Full Throttle (c) Taito 1987 @@ -154,17 +155,19 @@ From JP manual ***************************************************************************/ #include "emu.h" -#include "topspeed.h" + +#include "pc080sn.h" +#include "taitoio.h" #include "taitoipt.h" #include "taitosnd.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" -#include "taitoio.h" #include "machine/z80ctc.h" #include "sound/flt_vol.h" #include "sound/msm5205.h" #include "sound/ymopm.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -172,6 +175,387 @@ From JP manual #include "topspeed.lh" +namespace { + +class topspeed_state : public driver_device +{ +public: + topspeed_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_spritemap(*this, "spritemap") + , m_raster_ctrl(*this, "raster_ctrl") + , m_spriteram(*this, "spriteram") + , m_sharedram(*this, "sharedram") + , m_sndbank(*this, "sndbank") + , m_maincpu(*this, "maincpu") + , m_audiocpu(*this, "audiocpu") + , m_subcpu(*this, "subcpu") + , m_msm(*this, "msm%u", 1U) + , m_pc080sn(*this, "pc080sn_%u", 1U) + , m_tc0040ioc(*this, "tc0040ioc") + , m_filter1l(*this, "filter1l") + , m_filter1r(*this, "filter1r") + , m_filter2(*this, "filter2") + , m_filter3(*this, "filter3") + , m_gfxdecode(*this, "gfxdecode") + , m_gas(*this, "GAS") + , m_brake(*this, "BRAKE") + , m_steer(*this, "STEER") + , m_msm_rom(*this, "adpcm_%u", 0U) + { } + + void topspeed(machine_config &config); + + DECLARE_CUSTOM_INPUT_MEMBER(gas_pedal_r); + DECLARE_CUSTOM_INPUT_MEMBER(brake_pedal_r); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + required_shared_ptr m_spritemap; + required_shared_ptr m_raster_ctrl; + required_shared_ptr m_spriteram; + required_shared_ptr m_sharedram; + required_memory_bank m_sndbank; + + required_device m_maincpu; + required_device m_audiocpu; + required_device m_subcpu; + required_device_array m_msm; + required_device_array m_pc080sn; + required_device m_tc0040ioc; + required_device m_filter1l; + required_device m_filter1r; + required_device m_filter2; + required_device m_filter3; + required_device m_gfxdecode; + required_ioport m_gas; + required_ioport m_brake; + required_ioport m_steer; + + // Misc + u16 m_cpua_ctrl = 0; + s32 m_ioc220_port = 0; + + // ADPCM + required_region_ptr_array m_msm_rom; + u16 m_msm_pos[2]{}; + u8 m_msm_reset[2]{}; + u8 m_msm_nibble[2]{}; + u8 m_msm2_vck = 0; + u8 m_msm2_vck2 = 0; + +#ifdef MAME_DEBUG + u8 m_dislayer[5] = { 0, 0, 0, 0, 0 }; +#endif + + void msm5205_update(int chip); + + void cpua_ctrl_w(u16 data); + u8 input_bypass_r(); + u16 motor_r(offs_t offset); + void motor_w(offs_t offset, u16 data); + void coins_w(u8 data); + + void msm5205_command_w(offs_t offset, u8 data); + void msm5205_1_vck(int state); + void z80ctc_to0(int state); + void volume_w(offs_t offset, u8 data); + + void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void cpua_map(address_map &map); + void cpub_map(address_map &map); + void z80_io(address_map &map); + void z80_prg(address_map &map); +}; + + +// video + +/**************************************************************************** + + NOTES + +Raster line color control +------------------------- + +Used to make the road move. Each word controls one pixel row. + +0x800000 - 0x1ff raster color control for one road tilemap +0x800200 - 0x3ff raster color control for the other + +Road tile colors are (all?) in the range 0x100-103. Top road section +(tilemap at 0xa08000) uses 0x100 and 0x101. Bottom section +(tilemap at 0xb00000) uses 0x102 and 0x103. This would allow colors +on left and right side of road to be different. In practice it seems +Taito didn't take advantage of this. + +Each tilemap is usually all one color value. Every now and then (10s +or so) the value alternates. This seems to be determined by whether +the current section of road has white lines in the middle. (0x101/3 +gives white lines.) + +The raster line color control area has groups of four values which +cascade down through it so the road colors cascade down the screen. + +There are three known groups (start is arbitrary; the cycles repeat ad +infinitum or until a different cycle starts; values given are from bottom +to top of screen): + +(i) White lines in center of road + +12 %10010 +1f %11111 +00 %00000 +0d %01101 + +(ii) No lines in center of road + +08 %01000 +0c %01100 +1a %11010 +1e %11110 + +(iii) Under bridge or in tunnel [note almost identical to (i)] + +ffe0 %00000 +ffed %01101 +fff2 %10010 +ffef %01111 + +(iv) Unknown 4th group for tunnels in later parts of the game that have +no white lines, analogous to (ii) ? + + +Correlating with screenshots suggests that these bits refer to: + +x.... road body ? +.x... lines in road center and inner edge +..x.. lines at road outer edge +...x. outside road ? +....x ??? + + +Actual gfx tiles used for the road only use colors 1-5. Palette offsets: + +(0 = transparency) +1 = lines in road center +2 = road edge (inner) +3 = road edge (outer) +4 = road body +5 = outside road + +Each palette block contains three possible sets of 5 colors. Entries 1-5 +(standard), 6-10 (alternate), 11-15 (tunnels). + +In tunnels only 11-15 are used. Outside tunnels there is a choice between +the standard colors and the alternate colors. The road body could in theory +take a standard color while 'outside the road' took on an alternate. But +in practice the game is using a very limited choice of raster control words, +so we don't know. + +Need to test whether sections of the road with unknown raster control words +(tunnels late in the game without central white lines) are correct against +a real machine. + +Also are the 'prelines' shortly before white road lines appear correct? + + + +CHECK screen inits at $1692 + +These suggest that rowscroll areas are all 0x1000 long and there are TWO +for each tilemap layer. + +256 rows => 256 words => 0x200 bytes. So probably the inits are far too long. + +Maybe the second area for each layer contains colscroll ? + +****************************************************************************/ + + +/**************************************************************************** + + SPRITES + + Layout 8 bytes per sprite + ------------------------- + + +0x00 xxxxxxx. ........ Zoom Y + .......x xxxxxxxx Y + + +0x02 x....... ........ Flip Y + ........ .xxxxxxx Zoom X + + +0x04 x....... ........ Priority + .x...... ........ Flip X + ..x..... ........ Unknown + .......x xxxxxxxx X + + +0x06 xxxxxxxx ........ Color + ........ xxxxxxxx Tile number + +********************************************************************************/ + +void topspeed_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + static const u32 primasks[2] = { 0xff00, 0xfffc }; // Sprites are over bottom layer or under top layer + + // Most of spriteram is not used by the 68000: rest is scratch space for the h/w perhaps ? + for (int offs = 0; offs < m_spriteram.bytes() / 2; offs += 4) + { + const u16 data = m_spriteram[offs + 2]; + + const int tilenum = m_spriteram[offs + 3] & 0xff; + const u32 color = (m_spriteram[offs + 3] & 0xff00) >> 8; + const int flipx = (data & 0x4000) >> 14; + const int flipy = (m_spriteram[offs + 1] & 0x8000) >> 15; + int x = data & 0x1ff; + int y = m_spriteram[offs] & 0x1ff; + int zoomx = (m_spriteram[offs + 1] & 0x7f); + int zoomy = (m_spriteram[offs] & 0xfe00) >> 9; + const int priority = (data & 0x8000) >> 15; +// unknown = (data & 0x2000) >> 13; + + // End of sprite list + if (y == 0x180) + break; + + const int map_offset = tilenum << 7; + + zoomx += 1; + zoomy += 1; + + y += 3 + (128-zoomy); + + // treat coords as signed + if (x > 0x140) x -= 0x200; + if (y > 0x140) y -= 0x200; + + int bad_chunks = 0; + + for (int sprite_chunk = 0; sprite_chunk < 128; sprite_chunk++) + { + const int k = sprite_chunk % 8; // 8 sprite chunks per row + const int j = sprite_chunk / 8; // 16 rows + + // pick tiles back to front for x and y flips + const int px = (flipx) ? (7 - k) : (k); + const int py = (flipy) ? (15 - j) : (j); + + const u16 code = m_spritemap[map_offset + (py << 3) + px]; + + if (code & 0x8000) + { + bad_chunks += 1; + continue; + } + + const int curx = x + ((k * zoomx) / 8); + const int cury = y + ((j * zoomy) / 16); + + const int zx = x + (((k + 1) * zoomx) / 8) - curx; + const int zy = y + (((j + 1) * zoomy) / 16) - cury; + + m_gfxdecode->gfx(0)->prio_zoom_transpen(bitmap, cliprect, + code, + color, + flipx, flipy, + curx, cury, + zx << 12, zy << 13, + screen.priority(), primasks[priority], 0); + } + + if (bad_chunks) + logerror("Sprite number %04x had %02x invalid chunks\n", tilenum, bad_chunks); + } +} + + +/***************************************************************************/ + +u32 topspeed_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + u8 layer[4]; + +#ifdef MAME_DEBUG + if (machine().input().code_pressed_once (KEYCODE_V)) + { + m_dislayer[0] ^= 1; + popmessage("bg: %01x", m_dislayer[0]); + } + + if (machine().input().code_pressed_once (KEYCODE_B)) + { + m_dislayer[1] ^= 1; + popmessage("fg: %01x", m_dislayer[1]); + } + + if (machine().input().code_pressed_once (KEYCODE_N)) + { + m_dislayer[2] ^= 1; + popmessage("bg2: %01x", m_dislayer[2]); + } + + if (machine().input().code_pressed_once (KEYCODE_M)) + { + m_dislayer[3] ^= 1; + popmessage("fg2: %01x", m_dislayer[3]); + } + + if (machine().input().code_pressed_once (KEYCODE_C)) + { + m_dislayer[4] ^= 1; + popmessage("sprites: %01x", m_dislayer[4]); + } +#endif + + m_pc080sn[0]->tilemap_update(); + m_pc080sn[1]->tilemap_update(); + + // Tilemap layer priority seems hardwired (the order is odd, too) + layer[0] = 1; + layer[1] = 0; + layer[2] = 1; + layer[3] = 0; + + screen.priority().fill(0, cliprect); + bitmap.fill(0, cliprect); + +#ifdef MAME_DEBUG + if (m_dislayer[3] == 0) +#endif + m_pc080sn[1]->tilemap_draw(screen, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); + +#ifdef MAME_DEBUG + if (m_dislayer[2] == 0) +#endif + m_pc080sn[1]->tilemap_draw_special(screen, bitmap, cliprect, layer[1], 0, 2, m_raster_ctrl); + +#ifdef MAME_DEBUG + if (m_dislayer[1] == 0) +#endif + m_pc080sn[0]->tilemap_draw_special(screen, bitmap, cliprect, layer[2], 0, 4, m_raster_ctrl + 0x100); + +#ifdef MAME_DEBUG + if (m_dislayer[0] == 0) +#endif + m_pc080sn[0]->tilemap_draw(screen, bitmap, cliprect, layer[3], 0, 8); + +#ifdef MAME_DEBUG + if (m_dislayer[4] == 0) +#endif + + draw_sprites(screen, bitmap, cliprect); + return 0; +} + + +// machine /********************************************************** CPU CONTROL @@ -209,13 +593,13 @@ u8 topspeed_state::input_bypass_r() CUSTOM_INPUT_MEMBER(topspeed_state::gas_pedal_r) { - static constexpr u8 retval[8] = { 0,1,3,2,6,7,5,4 }; + static constexpr u8 retval[8] = { 0, 1, 3, 2, 6, 7, 5, 4 }; return retval[m_gas->read() & 7]; } CUSTOM_INPUT_MEMBER(topspeed_state::brake_pedal_r) { - static constexpr u8 retval[8] = { 0,1,3,2,6,7,5,4 }; + static constexpr u8 retval[8] = { 0, 1, 3, 2, 6, 7, 5, 4 }; return retval[m_brake->read() & 7]; } @@ -290,7 +674,7 @@ void topspeed_state::msm5205_1_vck(int state) void topspeed_state::msm5205_command_w(offs_t offset, u8 data) { - int chip = (offset >> 12) & 1; + const int chip = (offset >> 12) & 1; switch (offset >> 8 & 0x2e) { @@ -350,7 +734,7 @@ void topspeed_state::z80ctc_to0(int state) else { // Update on falling edge of /VCK - u16 oldpos = m_msm_pos[1]; + const u16 oldpos = m_msm_pos[1]; msm5205_update(1); @@ -381,13 +765,13 @@ void topspeed_state::z80ctc_to0(int state) void topspeed_state::cpua_map(address_map &map) { map(0x000000, 0x0fffff).rom(); - map(0x400000, 0x40ffff).ram().share("sharedram"); + map(0x400000, 0x40ffff).ram().share(m_sharedram); map(0x500000, 0x503fff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); map(0x600002, 0x600003).w(FUNC(topspeed_state::cpua_ctrl_w)); map(0x7e0000, 0x7e0001).nopr(); map(0x7e0001, 0x7e0001).w("ciu", FUNC(pc060ha_device::master_port_w)); map(0x7e0003, 0x7e0003).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w)); - map(0x800000, 0x8003ff).ram().share("raster_ctrl"); + map(0x800000, 0x8003ff).ram().share(m_raster_ctrl); map(0x800400, 0x80ffff).ram(); map(0x880000, 0x880007).nopw(); // Lamps/outputs? map(0xa00000, 0xa0ffff).rw(m_pc080sn[0], FUNC(pc080sn_device::word_r), FUNC(pc080sn_device::word_w)); @@ -398,14 +782,14 @@ void topspeed_state::cpua_map(address_map &map) map(0xb20000, 0xb20003).w(m_pc080sn[1], FUNC(pc080sn_device::yscroll_word_w)); map(0xb40000, 0xb40003).w(m_pc080sn[1], FUNC(pc080sn_device::xscroll_word_w)); map(0xb50000, 0xb50003).w(m_pc080sn[1], FUNC(pc080sn_device::ctrl_word_w)); - map(0xd00000, 0xd00fff).ram().share("spriteram"); - map(0xe00000, 0xe0ffff).ram().share("spritemap"); + map(0xd00000, 0xd00fff).ram().share(m_spriteram); + map(0xe00000, 0xe0ffff).ram().share(m_spritemap); } void topspeed_state::cpub_map(address_map &map) { map(0x000000, 0x01ffff).rom(); - map(0x400000, 0x40ffff).ram().share("sharedram"); + map(0x400000, 0x40ffff).ram().share(m_sharedram); map(0x880001, 0x880001).r(FUNC(topspeed_state::input_bypass_r)).w(m_tc0040ioc, FUNC(tc0040ioc_device::portreg_w)).umask16(0x00ff); map(0x880003, 0x880003).rw(m_tc0040ioc, FUNC(tc0040ioc_device::port_r), FUNC(tc0040ioc_device::port_w)); map(0x900000, 0x9003ff).rw(FUNC(topspeed_state::motor_r), FUNC(topspeed_state::motor_w)); @@ -417,7 +801,7 @@ void topspeed_state::cpub_map(address_map &map) void topspeed_state::z80_prg(address_map &map) { map(0x0000, 0x3fff).rom(); - map(0x4000, 0x7fff).bankr("sndbank"); + map(0x4000, 0x7fff).bankr(m_sndbank); map(0x8000, 0x8fff).ram(); map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); map(0xa000, 0xa000).w("ciu", FUNC(pc060ha_device::slave_port_w)); @@ -443,7 +827,7 @@ static INPUT_PORTS_START( topspeed ) PORT_DIPNAME( 0x03, 0x03, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA:1,2") PORT_DIPSETTING( 0x03, "Deluxe" ) // analog pedals, racing wheel, motor (tilt disabled) PORT_DIPSETTING( 0x02, "Standard" ) // digital pedals, continuous wheel -// PORT_DIPSETTING( 0x01, "Standard" ) + PORT_DIPSETTING( 0x01, "Standard" ) PORT_DIPSETTING( 0x00, "Mini" ) // analog pedals, racing wheel TAITO_DSWA_BITS_2_TO_3_LOC(SWA) TAITO_COINAGE_WORLD_LOC(SWA) @@ -783,6 +1167,8 @@ ROM_START( fullthrl ) ROM_LOAD( "b14-29.109", 0x00000, 0x10000, CRC(7ad983e7) SHA1(a3515caf93d6dab86de06ee52d6a13a456507dbe) ) ROM_END +} // anonymous namespace + GAMEL( 1987, topspeed, 0, topspeed, topspeed, topspeed_state, empty_init, ROT0, "Taito Corporation Japan", "Top Speed (World)", MACHINE_SUPPORTS_SAVE, layout_topspeed ) GAMEL( 1987, topspeedu, topspeed, topspeed, fullthrl, topspeed_state, empty_init, ROT0, "Taito America Corporation (Romstar license)", "Top Speed (US)", MACHINE_SUPPORTS_SAVE, layout_topspeed ) diff --git a/src/mame/taito/topspeed.h b/src/mame/taito/topspeed.h deleted file mode 100644 index f22f66f463e..00000000000 --- a/src/mame/taito/topspeed.h +++ /dev/null @@ -1,115 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Graves -/************************************************************************* - - Top Speed / Full Throttle - -*************************************************************************/ -#ifndef MAME_TAITO_TOPSPEED_H -#define MAME_TAITO_TOPSPEED_H - -#pragma once - -#include "sound/msm5205.h" -#include "sound/flt_vol.h" -#include "taitoio.h" -#include "pc080sn.h" - -class topspeed_state : public driver_device -{ -public: - topspeed_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_spritemap(*this, "spritemap") - , m_raster_ctrl(*this, "raster_ctrl") - , m_spriteram(*this, "spriteram") - , m_sharedram(*this, "sharedram") - , m_sndbank(*this, "sndbank") - , m_maincpu(*this, "maincpu") - , m_audiocpu(*this, "audiocpu") - , m_subcpu(*this, "subcpu") - , m_msm(*this, "msm%u", 1U) - , m_pc080sn(*this, "pc080sn_%u", 1U) - , m_tc0040ioc(*this, "tc0040ioc") - , m_filter1l(*this, "filter1l") - , m_filter1r(*this, "filter1r") - , m_filter2(*this, "filter2") - , m_filter3(*this, "filter3") - , m_gfxdecode(*this, "gfxdecode") - , m_gas(*this, "GAS") - , m_brake(*this, "BRAKE") - , m_steer(*this, "STEER") - , m_msm_rom(*this, "adpcm_%u", 0U) - { } - - void topspeed(machine_config &config); - - DECLARE_CUSTOM_INPUT_MEMBER(gas_pedal_r); - DECLARE_CUSTOM_INPUT_MEMBER(brake_pedal_r); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - -private: - required_shared_ptr m_spritemap; - required_shared_ptr m_raster_ctrl; - required_shared_ptr m_spriteram; - required_shared_ptr m_sharedram; - required_memory_bank m_sndbank; - - required_device m_maincpu; - required_device m_audiocpu; - required_device m_subcpu; - required_device_array m_msm; - required_device_array m_pc080sn; - required_device m_tc0040ioc; - required_device m_filter1l; - required_device m_filter1r; - required_device m_filter2; - required_device m_filter3; - required_device m_gfxdecode; - required_ioport m_gas; - required_ioport m_brake; - required_ioport m_steer; - - // Misc - u16 m_cpua_ctrl = 0; - s32 m_ioc220_port = 0; - - // ADPCM - required_region_ptr_array m_msm_rom; - u16 m_msm_pos[2]{}; - u8 m_msm_reset[2]{}; - u8 m_msm_nibble[2]{}; - u8 m_msm2_vck = 0; - u8 m_msm2_vck2 = 0; - -#ifdef MAME_DEBUG - u8 m_dislayer[5] = { 0, 0, 0, 0, 0 }; -#endif - - void msm5205_update(int chip); - - void cpua_ctrl_w(u16 data); - u8 input_bypass_r(); - u16 motor_r(offs_t offset); - void motor_w(offs_t offset, u16 data); - void coins_w(u8 data); - - void msm5205_command_w(offs_t offset, u8 data); - void msm5205_1_vck(int state); - void z80ctc_to0(int state); - void volume_w(offs_t offset, u8 data); - - // video/topspeed.cpp - void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - - void cpua_map(address_map &map); - void cpub_map(address_map &map); - void z80_io(address_map &map); - void z80_prg(address_map &map); -}; - -#endif // MAME_TAITO_TOPSPEED_H diff --git a/src/mame/taito/topspeed_v.cpp b/src/mame/taito/topspeed_v.cpp deleted file mode 100644 index fd115b55ee8..00000000000 --- a/src/mame/taito/topspeed_v.cpp +++ /dev/null @@ -1,284 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Graves -#include "emu.h" -#include "topspeed.h" -#include "screen.h" - - -/**************************************************************************** - - NOTES - -Raster line color control -------------------------- - -Used to make the road move. Each word controls one pixel row. - -0x800000 - 0x1ff raster color control for one road tilemap -0x800200 - 0x3ff raster color control for the other - -Road tile colors are (all?) in the range 0x100-103. Top road section -(tilemap at 0xa08000) uses 0x100 and 0x101. Bottom section -(tilemap at 0xb00000) uses 0x102 and 0x103. This would allow colors -on left and right side of road to be different. In practice it seems -Taito didn't take advantage of this. - -Each tilemap is usually all one color value. Every now and then (10s -or so) the value alternates. This seems to be determined by whether -the current section of road has white lines in the middle. (0x101/3 -gives white lines.) - -The raster line color control area has groups of four values which -cascade down through it so the road colors cascade down the screen. - -There are three known groups (start is arbitrary; the cycles repeat ad -infinitum or until a different cycle starts; values given are from bottom -to top of screen): - -(i) White lines in center of road - -12 %10010 -1f %11111 -00 %00000 -0d %01101 - -(ii) No lines in center of road - -08 %01000 -0c %01100 -1a %11010 -1e %11110 - -(iii) Under bridge or in tunnel [note almost identical to (i)] - -ffe0 %00000 -ffed %01101 -fff2 %10010 -ffef %01111 - -(iv) Unknown 4th group for tunnels in later parts of the game that have -no white lines, analogous to (ii) ? - - -Correlating with screenshots suggests that these bits refer to: - -x.... road body ? -.x... lines in road center and inner edge -..x.. lines at road outer edge -...x. outside road ? -....x ??? - - -Actual gfx tiles used for the road only use colors 1-5. Palette offsets: - -(0 = transparency) -1 = lines in road center -2 = road edge (inner) -3 = road edge (outer) -4 = road body -5 = outside road - -Each palette block contains three possible sets of 5 colors. Entries 1-5 -(standard), 6-10 (alternate), 11-15 (tunnels). - -In tunnels only 11-15 are used. Outside tunnels there is a choice between -the standard colors and the alternate colors. The road body could in theory -take a standard color while 'outside the road' took on an alternate. But -in practice the game is using a very limited choice of raster control words, -so we don't know. - -Need to test whether sections of the road with unknown raster control words -(tunnels late in the game without central white lines) are correct against -a real machine. - -Also are the 'prelines' shortly before white road lines appear correct? - - - -CHECK screen inits at $1692 - -These suggest that rowscroll areas are all 0x1000 long and there are TWO -for each tilemap layer. - -256 rows => 256 words => 0x200 bytes. So probably the inits are far too long. - -Maybe the second area for each layer contains colscroll ? - -****************************************************************************/ - - -/**************************************************************************** - - SPRITES - - Layout 8 bytes per sprite - ------------------------- - - +0x00 xxxxxxx. ........ Zoom Y - .......x xxxxxxxx Y - - +0x02 x....... ........ Flip Y - ........ .xxxxxxx Zoom X - - +0x04 x....... ........ Priority - .x...... ........ Flip X - ..x..... ........ Unknown - .......x xxxxxxxx X - - +0x06 xxxxxxxx ........ Color - ........ xxxxxxxx Tile number - -********************************************************************************/ - -void topspeed_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - static const u32 primasks[2] = { 0xff00, 0xfffc }; /* Sprites are over bottom layer or under top layer */ - - /* Most of spriteram is not used by the 68000: rest is scratch space for the h/w perhaps ? */ - for (int offs = 0; offs < m_spriteram.bytes() / 2; offs += 4) - { - const u16 data = m_spriteram[offs + 2]; - - const int tilenum = m_spriteram[offs + 3] & 0xff; - const u32 color = (m_spriteram[offs + 3] & 0xff00) >> 8; - const int flipx = (data & 0x4000) >> 14; - const int flipy = (m_spriteram[offs + 1] & 0x8000) >> 15; - int x = data & 0x1ff; - int y = m_spriteram[offs] & 0x1ff; - int zoomx = (m_spriteram[offs + 1]& 0x7f); - int zoomy = (m_spriteram[offs] & 0xfe00) >> 9; - const int priority = (data & 0x8000) >> 15; -// unknown = (data & 0x2000) >> 13; - - /* End of sprite list */ - if (y == 0x180) - break; - - const int map_offset = tilenum << 7; - - zoomx += 1; - zoomy += 1; - - y += 3 + (128-zoomy); - - /* treat coords as signed */ - if (x > 0x140) x -= 0x200; - if (y > 0x140) y -= 0x200; - - int bad_chunks = 0; - - for (int sprite_chunk = 0; sprite_chunk < 128; sprite_chunk++) - { - const int k = sprite_chunk % 8; /* 8 sprite chunks per row */ - const int j = sprite_chunk / 8; /* 16 rows */ - - /* pick tiles back to front for x and y flips */ - const int px = (flipx) ? (7 - k) : (k); - const int py = (flipy) ? (15 - j) : (j); - - const u16 code = m_spritemap[map_offset + (py << 3) + px]; - - if (code & 0x8000) - { - bad_chunks += 1; - continue; - } - - const int curx = x + ((k * zoomx) / 8); - const int cury = y + ((j * zoomy) / 16); - - const int zx = x + (((k + 1) * zoomx) / 8) - curx; - const int zy = y + (((j + 1) * zoomy) / 16) - cury; - - m_gfxdecode->gfx(0)->prio_zoom_transpen(bitmap,cliprect, - code, - color, - flipx,flipy, - curx,cury, - zx << 12,zy << 13, - screen.priority(),primasks[priority],0); - } - - if (bad_chunks) - logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks); - } -} - - -/***************************************************************************/ - -u32 topspeed_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - u8 layer[4]; - -#ifdef MAME_DEBUG - if (machine().input().code_pressed_once (KEYCODE_V)) - { - m_dislayer[0] ^= 1; - popmessage("bg: %01x", m_dislayer[0]); - } - - if (machine().input().code_pressed_once (KEYCODE_B)) - { - m_dislayer[1] ^= 1; - popmessage("fg: %01x", m_dislayer[1]); - } - - if (machine().input().code_pressed_once (KEYCODE_N)) - { - m_dislayer[2] ^= 1; - popmessage("bg2: %01x", m_dislayer[2]); - } - - if (machine().input().code_pressed_once (KEYCODE_M)) - { - m_dislayer[3] ^= 1; - popmessage("fg2: %01x", m_dislayer[3]); - } - - if (machine().input().code_pressed_once (KEYCODE_C)) - { - m_dislayer[4] ^= 1; - popmessage("sprites: %01x", m_dislayer[4]); - } -#endif - - m_pc080sn[0]->tilemap_update(); - m_pc080sn[1]->tilemap_update(); - - /* Tilemap layer priority seems hardwired (the order is odd, too) */ - layer[0] = 1; - layer[1] = 0; - layer[2] = 1; - layer[3] = 0; - - screen.priority().fill(0, cliprect); - bitmap.fill(0, cliprect); - -#ifdef MAME_DEBUG - if (m_dislayer[3] == 0) -#endif - m_pc080sn[1]->tilemap_draw(screen, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); - -#ifdef MAME_DEBUG - if (m_dislayer[2] == 0) -#endif - m_pc080sn[1]->tilemap_draw_special(screen, bitmap, cliprect, layer[1], 0, 2, m_raster_ctrl); - -#ifdef MAME_DEBUG - if (m_dislayer[1] == 0) -#endif - m_pc080sn[0]->tilemap_draw_special(screen, bitmap, cliprect, layer[2], 0, 4, m_raster_ctrl + 0x100); - -#ifdef MAME_DEBUG - if (m_dislayer[0] == 0) -#endif - m_pc080sn[0]->tilemap_draw(screen, bitmap, cliprect, layer[3], 0, 8); - -#ifdef MAME_DEBUG - if (m_dislayer[4] == 0) -#endif - - draw_sprites(screen,bitmap,cliprect); - return 0; -} -- cgit v1.2.3