mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
- 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
This commit is contained in:
parent
793afee14b
commit
1a5f456b73
@ -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
|
||||
}
|
||||
|
@ -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"
|
||||
|
||||
|
||||
void terracre_state::amazon_sound_w(uint16_t data)
|
||||
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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
|
||||
void amazon_base_map(address_map &map);
|
||||
|
||||
private:
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<buffered_spriteram16_device> m_spriteram;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<filter_biquad_device> m_dacfilter1;
|
||||
required_device<filter_biquad_device> m_dacfilter2;
|
||||
required_device<filter_biquad_device> m_ymfilter;
|
||||
optional_device<mixer_device> m_ssgmixer;
|
||||
optional_device<filter_biquad_device> m_ssgfilter_abfilt;
|
||||
optional_device<filter_biquad_device> m_ssgfilter_abgain;
|
||||
optional_device<filter_biquad_device> m_ssgfilter_cgain;
|
||||
|
||||
required_shared_ptr<uint16_t> m_bg_videoram;
|
||||
required_shared_ptr<uint16_t> m_fg_videoram;
|
||||
required_region_ptr<uint8_t> 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<nb1412m2_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);
|
||||
|
||||
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 )
|
||||
|
@ -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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
|
||||
private:
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<buffered_spriteram16_device> m_spriteram;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<filter_biquad_device> m_dacfilter1;
|
||||
required_device<filter_biquad_device> m_dacfilter2;
|
||||
required_device<filter_biquad_device> m_ymfilter;
|
||||
optional_device<mixer_device> m_ssgmixer;
|
||||
optional_device<filter_biquad_device> m_ssgfilter_abfilt;
|
||||
optional_device<filter_biquad_device> m_ssgfilter_abgain;
|
||||
optional_device<filter_biquad_device> m_ssgfilter_cgain;
|
||||
|
||||
required_shared_ptr<uint16_t> m_bg_videoram;
|
||||
required_shared_ptr<uint16_t> 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<nb1412m2_device> m_prot;
|
||||
};
|
||||
|
||||
#endif // MAME_NICHIBUTSU_TERRACRE_H
|
@ -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;
|
||||
}
|
@ -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
|
||||
|
@ -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<u16> m_spritemap;
|
||||
required_shared_ptr<u16> m_raster_ctrl;
|
||||
required_shared_ptr<u16> m_spriteram;
|
||||
required_shared_ptr<u16> m_sharedram;
|
||||
required_memory_bank m_sndbank;
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<cpu_device> m_subcpu;
|
||||
required_device_array<msm5205_device, 2> m_msm;
|
||||
required_device_array<pc080sn_device, 2> m_pc080sn;
|
||||
required_device<tc0040ioc_device> m_tc0040ioc;
|
||||
required_device<filter_volume_device> m_filter1l;
|
||||
required_device<filter_volume_device> m_filter1r;
|
||||
required_device<filter_volume_device> m_filter2;
|
||||
required_device<filter_volume_device> m_filter3;
|
||||
required_device<gfxdecode_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<u8, 2> 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 )
|
||||
|
@ -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<u16> m_spritemap;
|
||||
required_shared_ptr<u16> m_raster_ctrl;
|
||||
required_shared_ptr<u16> m_spriteram;
|
||||
required_shared_ptr<u16> m_sharedram;
|
||||
required_memory_bank m_sndbank;
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<cpu_device> m_subcpu;
|
||||
required_device_array<msm5205_device, 2> m_msm;
|
||||
required_device_array<pc080sn_device, 2> m_pc080sn;
|
||||
required_device<tc0040ioc_device> m_tc0040ioc;
|
||||
required_device<filter_volume_device> m_filter1l;
|
||||
required_device<filter_volume_device> m_filter1r;
|
||||
required_device<filter_volume_device> m_filter2;
|
||||
required_device<filter_volume_device> m_filter3;
|
||||
required_device<gfxdecode_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<u8, 2> 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
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user