mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
Device-fied TC0090LVC for taito_l.cpp implementation (#6572)
* Device-fied TC0090LVC for taito_l.cpp implementation taito_l.cpp : Use device for TC0090LVC, Reduce duplicates, Fix notes, Implement bitmap layer for cachat tc009xlvc.cpp : Add TC0090LVC variation, Add notes, Use callback for tilemap offset and external bankswitching, Implement device_reset needs for taito_l.cpp driver, Restrict bitmap and sprite drawing behavior into cliprect dfruit.cpp, lastbank.cpp : Reduce unnecessary trampolines dfruit.cpp : Fix offset for gemcrush flipped screen * use const values for internal getters
This commit is contained in:
parent
da608ae1a6
commit
5f8108b3ec
@ -8,6 +8,7 @@
|
||||
|
||||
TODO:
|
||||
- non-video stuff needs to be ported there as well
|
||||
- Verify difference between TC0090LVC and TC0091LVC
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -18,11 +19,12 @@
|
||||
#include "screen.h"
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(TC0091LVC, tc0091lvc_device, "tc009xlvc", "Taito TC0091LVC")
|
||||
DEFINE_DEVICE_TYPE(TC0090LVC, tc0090lvc_device, "tc0090lvc", "Taito TC0090LVC")
|
||||
DEFINE_DEVICE_TYPE(TC0091LVC, tc0091lvc_device, "tc0091lvc", "Taito TC0091LVC")
|
||||
|
||||
void tc0091lvc_device::vram_w(offs_t offset, u8 data)
|
||||
void tc0090lvc_device::vram_w(offs_t offset, u8 data)
|
||||
{
|
||||
// TODO : offset 0x0000 - 0x3fff is not used?
|
||||
// TODO: offset 0x0000 - 0x3fff is not used?
|
||||
|
||||
m_vram[offset] = data;
|
||||
gfx(2)->mark_dirty(offset / 32);
|
||||
@ -41,9 +43,10 @@ void tc0091lvc_device::vram_w(offs_t offset, u8 data)
|
||||
offset -= 0xa000;
|
||||
tx_tilemap->mark_tile_dirty(offset/2);
|
||||
}
|
||||
// 0xb000-0xb3ff sprites
|
||||
}
|
||||
|
||||
void tc0091lvc_device::vregs_w(offs_t offset, u8 data)
|
||||
void tc0090lvc_device::vregs_w(offs_t offset, u8 data)
|
||||
{
|
||||
if ((offset & 0xfc) == 0)
|
||||
{
|
||||
@ -54,7 +57,7 @@ void tc0091lvc_device::vregs_w(offs_t offset, u8 data)
|
||||
m_vregs[offset] = data;
|
||||
}
|
||||
|
||||
void tc0091lvc_device::ram_bank_w(offs_t offset, u8 data)
|
||||
void tc0090lvc_device::ram_bank_w(offs_t offset, u8 data)
|
||||
{
|
||||
m_ram_bank[offset] = data;
|
||||
m_bankdev[offset]->set_bank(m_ram_bank[offset]);
|
||||
@ -82,16 +85,16 @@ static const gfx_layout layout_16x16 =
|
||||
8*8*4*4
|
||||
};
|
||||
|
||||
GFXDECODE_MEMBER(tc0091lvc_device::gfxinfo)
|
||||
GFXDECODE_MEMBER(tc0090lvc_device::gfxinfo)
|
||||
GFXDECODE_DEVICE("gfx", 0, layout_8x8, 0, 16)
|
||||
GFXDECODE_DEVICE("gfx", 0, layout_16x16, 0, 16)
|
||||
GFXDECODE_DEVICE_RAM("vram", 0, layout_8x8, 0, 16)
|
||||
GFXDECODE_END
|
||||
|
||||
void tc0091lvc_device::cpu_map(address_map &map)
|
||||
void tc0090lvc_device::cpu_map(address_map &map)
|
||||
{
|
||||
// 0x0000-0x7fff ROM (0x0000-0x5fff Fixed, 0x6000-0x7fff Bankswitched)
|
||||
map(0x0000, 0x5fff).r(FUNC(tc0091lvc_device::rom_r));
|
||||
map(0x0000, 0x5fff).r(FUNC(tc0090lvc_device::rom_r));
|
||||
map(0x6000, 0x7fff).lr8(NAME([this] (offs_t offset) { return rom_r((m_rom_bank << 13) | (offset & 0x1fff)); }));
|
||||
|
||||
// 0x8000-0xbfff External mappable area
|
||||
@ -105,35 +108,63 @@ void tc0091lvc_device::cpu_map(address_map &map)
|
||||
// 0xfe00-0xffff Internal functions
|
||||
}
|
||||
|
||||
void tc0091lvc_device::banked_map(address_map &map)
|
||||
void tc0090lvc_device::banked_map(address_map &map)
|
||||
{
|
||||
map(0x010000, 0x01ffff).readonly().share("vram");
|
||||
// note, the way tiles are addressed suggests that 0x0000-0x3fff of this might be usable,
|
||||
// but we don't map it anywhere, so the first tiles are always blank at the moment.
|
||||
map(0x014000, 0x01ffff).lw8(NAME([this] (offs_t offset, u8 data) { vram_w(offset + 0x4000, data); }));
|
||||
map(0x040000, 0x05ffff).ram().share("bitmap_ram");
|
||||
map(0x080000, 0x0801ff).ram().w("palette", FUNC(palette_device::write8)).share("palette");
|
||||
map(0x080000, 0x0801ff).ram().mirror(0x00e00).w("palette", FUNC(palette_device::write8)).share("palette");
|
||||
}
|
||||
|
||||
tc0091lvc_device::tc0091lvc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, TC0091LVC, tag, owner, clock)
|
||||
tc0090lvc_device::tc0090lvc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: tc0090lvc_device(mconfig, TC0090LVC, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
tc0090lvc_device::tc0090lvc_device(const machine_config &mconfig, device_type &type, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_gfx_interface(mconfig, *this, gfxinfo, "palette")
|
||||
, m_tilemap_xoffs(0)
|
||||
, m_tilemap_yoffs(0)
|
||||
, m_tilemap_flipped_xoffs(0)
|
||||
, m_tilemap_flipped_yoffs(0)
|
||||
, m_irq_enable(0)
|
||||
, m_bankdev(*this, "bankdev_%u", 0U)
|
||||
, m_vram(*this, "vram")
|
||||
, m_bitmap_ram(*this, "bitmap_ram")
|
||||
, m_rom(*this, DEVICE_SELF)
|
||||
, m_tile_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
tc0091lvc_device::tc0091lvc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: tc0090lvc_device(mconfig, TC0091LVC, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
Scroll Tilemap format (2 bytes per tiles, 64x32 tilemap)
|
||||
|
||||
Offset Bits Description
|
||||
76543210
|
||||
00 xxxxxxxx Code (bit 0-7)
|
||||
01 ------xx Code (bit 8-9)
|
||||
----xx-- Bank select (0x400 code boundary)
|
||||
xxxx---- Palette select (16 color boundary)
|
||||
*/
|
||||
|
||||
template<unsigned Offset>
|
||||
TILE_GET_INFO_MEMBER(tc0091lvc_device::get_tile_info)
|
||||
TILE_GET_INFO_MEMBER(tc0090lvc_device::get_tile_info)
|
||||
{
|
||||
const u16 attr = m_vram[Offset + (2 * tile_index) + 1];
|
||||
const u16 code = m_vram[Offset + (2 * tile_index)]
|
||||
u32 code = m_vram[Offset + (2 * tile_index)]
|
||||
| ((attr & 0x03) << 8)
|
||||
| ((m_vregs[(attr & 0xc) >> 2]) << 10);
|
||||
// | (state->m_horshoes_gfxbank << 12);
|
||||
| ((tilebank((attr & 0xc) >> 2)) << 10);
|
||||
|
||||
if (!m_tile_cb.isnull())
|
||||
m_tile_cb(code);
|
||||
|
||||
tileinfo.set(0,
|
||||
code,
|
||||
@ -141,7 +172,17 @@ TILE_GET_INFO_MEMBER(tc0091lvc_device::get_tile_info)
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(tc0091lvc_device::get_tx_tile_info)
|
||||
/*
|
||||
Fixed Tilemap format (2 bytes per tiles, 64x32 tilemap)
|
||||
|
||||
Offset Bits Description
|
||||
76543210
|
||||
00 xxxxxxxx Code (bit 0-7)
|
||||
01 -----xxx Code (bit 8-10)
|
||||
xxxx---- Palette select (16 color boundary)
|
||||
*/
|
||||
|
||||
TILE_GET_INFO_MEMBER(tc0090lvc_device::get_tx_tile_info)
|
||||
{
|
||||
const u16 attr = m_vram[0xa000 + (2 * tile_index) + 1];
|
||||
const u16 code = m_vram[0xa000 + (2 * tile_index)]
|
||||
@ -154,47 +195,51 @@ TILE_GET_INFO_MEMBER(tc0091lvc_device::get_tx_tile_info)
|
||||
}
|
||||
|
||||
|
||||
void tc0091lvc_device::device_add_mconfig(machine_config &config)
|
||||
void tc0090lvc_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
ADDRESS_MAP_BANK(config, m_bankdev[i]).set_map(&tc0091lvc_device::banked_map).set_options(ENDIANNESS_LITTLE, 8, 20, 0x1000);
|
||||
ADDRESS_MAP_BANK(config, m_bankdev[i]).set_map(&tc0090lvc_device::banked_map).set_options(ENDIANNESS_LITTLE, 8, 20, 0x1000);
|
||||
}
|
||||
PALETTE(config, "palette", palette_device::BLACK).set_format(palette_device::xBGRBBBBGGGGRRRR_bit0, 0x100);
|
||||
}
|
||||
|
||||
|
||||
void tc0091lvc_device::device_post_load()
|
||||
void tc0090lvc_device::device_post_load()
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_bankdev[i]->set_bank(m_ram_bank[i]);
|
||||
}
|
||||
|
||||
|
||||
void tc0091lvc_device::device_start()
|
||||
void tc0090lvc_device::device_start()
|
||||
{
|
||||
m_tile_cb.resolve();
|
||||
|
||||
std::fill_n(&m_vram[0], m_vram.bytes(), 0);
|
||||
std::fill_n(&m_bitmap_ram[0], m_bitmap_ram.bytes(), 0);
|
||||
std::fill(std::begin(m_ram_bank), std::end(m_ram_bank), 0);
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_bankdev[i]->set_bank(m_ram_bank[i]);
|
||||
|
||||
m_rom_bank = 0;
|
||||
|
||||
m_vregs = make_unique_clear<u8[]>(0x100);
|
||||
m_sprram_buffer = make_unique_clear<u8[]>(0x400);
|
||||
|
||||
tx_tilemap = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(tc0091lvc_device::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
bg_tilemap[0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(tc0091lvc_device::get_tile_info<0x8000>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
bg_tilemap[1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(tc0091lvc_device::get_tile_info<0x9000>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
tx_tilemap = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(tc0090lvc_device::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
bg_tilemap[0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(tc0090lvc_device::get_tile_info<0x8000>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
bg_tilemap[1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(tc0090lvc_device::get_tile_info<0x9000>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
|
||||
tx_tilemap->set_transparent_pen(0);
|
||||
bg_tilemap[0]->set_transparent_pen(0);
|
||||
bg_tilemap[1]->set_transparent_pen(0);
|
||||
|
||||
tx_tilemap->set_scrolldx(-8, -8);
|
||||
bg_tilemap[0]->set_scrolldx(28, -11);
|
||||
bg_tilemap[1]->set_scrolldx(38, -21);
|
||||
tx_tilemap->set_scrolldx((-8) + m_tilemap_xoffs, (-8) + m_tilemap_flipped_xoffs);
|
||||
bg_tilemap[0]->set_scrolldx(28 + m_tilemap_xoffs, (-11) + m_tilemap_flipped_xoffs);
|
||||
bg_tilemap[1]->set_scrolldx(38 + m_tilemap_xoffs, (-21) + m_tilemap_flipped_xoffs);
|
||||
|
||||
tx_tilemap->set_scrolldy(m_tilemap_yoffs, m_tilemap_flipped_yoffs);
|
||||
bg_tilemap[0]->set_scrolldy(m_tilemap_yoffs, m_tilemap_flipped_yoffs);
|
||||
bg_tilemap[1]->set_scrolldy(m_tilemap_yoffs, m_tilemap_flipped_yoffs);
|
||||
|
||||
save_item(NAME(m_irq_vector));
|
||||
save_item(NAME(m_irq_enable));
|
||||
@ -204,21 +249,74 @@ void tc0091lvc_device::device_start()
|
||||
save_pointer(NAME(m_sprram_buffer), 0x400);
|
||||
}
|
||||
|
||||
void tc0090lvc_device::device_reset()
|
||||
{
|
||||
// needs for taito_l.cpp
|
||||
for (int i = 0; i < 3; i++)
|
||||
m_irq_vector[i] = 0;
|
||||
|
||||
void tc0091lvc_device::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, u8 global_flip)
|
||||
m_irq_enable = 0;
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_ram_bank[i] = 0x80;
|
||||
m_bankdev[i]->set_bank(m_ram_bank[i]);
|
||||
}
|
||||
|
||||
m_rom_bank = 0;
|
||||
|
||||
/* video related */
|
||||
m_vregs[0] = m_vregs[1] = m_vregs[2] = m_vregs[3] = m_vregs[4] = 0;
|
||||
}
|
||||
|
||||
void tc0090lvc_device::mark_all_layer_dirty()
|
||||
{
|
||||
tx_tilemap->mark_all_dirty();
|
||||
bg_tilemap[0]->mark_all_dirty();
|
||||
bg_tilemap[1]->mark_all_dirty();
|
||||
}
|
||||
|
||||
/*
|
||||
Sprite format (8 bytes per sprites, max 125 entries (0x3e8 bytes))
|
||||
|
||||
Offset Bits Description
|
||||
76543210
|
||||
00 xxxxxxxx Code (bit 0-7)
|
||||
01 xxxxxxxx Code (bit 8-15)
|
||||
02 ----xxxx Palette select (16 color boundary)
|
||||
03 ------x- Flip Y
|
||||
-------x Flip X
|
||||
04 xxxxxxxx X position (bit 0-7)
|
||||
05 -------x X position (bit 8, unsigned)
|
||||
06 xxxxxxxx Y position (unsigned)
|
||||
07 xxxxxxxx unknown / ignored? Seems just garbage in many cases, e.g
|
||||
plgirs2 bullets and raimais big bosses.
|
||||
*/
|
||||
|
||||
void tc0090lvc_device::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
for (int count = 0; count < 0x3e7; count += 8)
|
||||
{
|
||||
const u32 code = m_sprram_buffer[count + 0] | (m_sprram_buffer[count + 1] << 8);
|
||||
int x = m_sprram_buffer[count + 4] | (m_sprram_buffer[count + 5] << 8);
|
||||
if (x >= 320)
|
||||
u32 code = m_sprram_buffer[count + 0] | (m_sprram_buffer[count + 1] << 8);
|
||||
int x = m_sprram_buffer[count + 4] | ((m_sprram_buffer[count + 5] & 1) << 8);
|
||||
if (x >= cliprect.max_x)
|
||||
x -= 512;
|
||||
int y = m_sprram_buffer[count + 6];
|
||||
const u32 col = (m_sprram_buffer[count + 2]) & 0x0f;
|
||||
if (y >= cliprect.max_y)
|
||||
y -= 256;
|
||||
const u32 col = m_sprram_buffer[count + 2] & 0x0f;
|
||||
int fx = m_sprram_buffer[count + 3] & 0x1;
|
||||
int fy = m_sprram_buffer[count + 3] & 0x2;
|
||||
|
||||
if (global_flip)
|
||||
if (!m_tile_cb.isnull())
|
||||
{
|
||||
// each sprite is 4 8x8 tile group, actually tile number for each tile is << 2 of real address
|
||||
code <<= 2;
|
||||
m_tile_cb(code);
|
||||
code >>= 2;
|
||||
}
|
||||
|
||||
if (global_flip())
|
||||
{
|
||||
x = 304 - x;
|
||||
y = 240 - y;
|
||||
@ -230,70 +328,125 @@ void tc0091lvc_device::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap,
|
||||
}
|
||||
}
|
||||
|
||||
u32 tc0091lvc_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 tc0090lvc_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bitmap.fill(palette().black_pen(), cliprect);
|
||||
|
||||
if ((m_vregs[4] & 0x20) == 0)
|
||||
return 0;
|
||||
|
||||
const u8 global_flip = m_vregs[4] & 0x10;
|
||||
|
||||
if ((m_vregs[4] & 0x7) == 7) // 8bpp bitmap enabled
|
||||
if (!screen_enable())
|
||||
{
|
||||
u32 count = 0;
|
||||
|
||||
for (int y = 0; y < 256; y++)
|
||||
bitmap.fill(palette().black_pen(), cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (bitmap_mode()) // 8bpp bitmap enabled
|
||||
{
|
||||
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
{
|
||||
for (int x = 0; x < 512; x++)
|
||||
const int res_y = (global_flip()) ? 256 - y : y;
|
||||
u32 count = (res_y & 0xff) * 512;
|
||||
|
||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
{
|
||||
const int res_x = (global_flip) ? 320 - x : x;
|
||||
const int res_y = (global_flip) ? 256 - y : y;
|
||||
const int res_x = (global_flip()) ? 320 - x : x;
|
||||
|
||||
if (cliprect.contains(res_x, res_y))
|
||||
bitmap.pix16(res_y, res_x) = palette().pen(m_bitmap_ram[count]);
|
||||
|
||||
count++;
|
||||
bitmap.pix16(y, x) = palette().pen(m_bitmap_ram[count + (res_x & 0x1ff)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
machine().tilemap().set_flip_all(global_flip ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
|
||||
update_scroll(&m_vram[0xb000]); // TODO: not buffered?
|
||||
|
||||
machine().tilemap().set_flip_all(global_flip() ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
|
||||
|
||||
int dx = m_bg_scroll[0][0] | (m_bg_scroll[0][1] << 8);
|
||||
if (global_flip) { dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf; dx += 192; }
|
||||
if (global_flip()) { dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf; }
|
||||
int dy = m_bg_scroll[0][2];
|
||||
|
||||
bg_tilemap[0]->set_scrollx(0, -dx);
|
||||
bg_tilemap[0]->set_scrolly(0, -dy);
|
||||
|
||||
dx = m_bg_scroll[1][0] | (m_bg_scroll[1][1] << 8);
|
||||
if (global_flip) { dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf; dx += 192; }
|
||||
if (global_flip()) { dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf; }
|
||||
dy = m_bg_scroll[1][2];
|
||||
|
||||
bg_tilemap[1]->set_scrollx(0, -dx);
|
||||
bg_tilemap[1]->set_scrolly(0, -dy);
|
||||
|
||||
tx_tilemap->set_scrollx(0, (global_flip) ? -192 : 0);
|
||||
|
||||
screen.priority().fill(0, cliprect);
|
||||
bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
|
||||
bg_tilemap[0]->draw(screen, bitmap, cliprect, 0, (m_vregs[4] & 0x8) ? 0 : 1);
|
||||
draw_sprites(screen, bitmap, cliprect, global_flip);
|
||||
bg_tilemap[1]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); // TODO: opaque?
|
||||
bg_tilemap[0]->draw(screen, bitmap, cliprect, 0, (bg0_pri()) ? 0 : 1);
|
||||
draw_sprites(screen, bitmap, cliprect);
|
||||
tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tc0091lvc_device::screen_eof(void)
|
||||
u32 tc0091lvc_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bitmap.fill(palette().black_pen(), cliprect);
|
||||
|
||||
if (!screen_enable())
|
||||
return 0;
|
||||
|
||||
if (bitmap_mode()) // 8bpp bitmap enabled
|
||||
{
|
||||
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
{
|
||||
const int res_y = (global_flip()) ? 256 - y : y;
|
||||
u32 count = (res_y & 0xff) * 512;
|
||||
|
||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
{
|
||||
const int res_x = (global_flip()) ? 320 - x : x;
|
||||
|
||||
bitmap.pix16(y, x) = palette().pen(m_bitmap_ram[count + (res_x & 0x1ff)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
machine().tilemap().set_flip_all(global_flip() ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
|
||||
|
||||
int dx = m_bg_scroll[0][0] | (m_bg_scroll[0][1] << 8);
|
||||
if (global_flip()) { dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf; }
|
||||
int dy = m_bg_scroll[0][2];
|
||||
|
||||
bg_tilemap[0]->set_scrollx(0, -dx);
|
||||
bg_tilemap[0]->set_scrolly(0, -dy);
|
||||
|
||||
dx = m_bg_scroll[1][0] | (m_bg_scroll[1][1] << 8);
|
||||
if (global_flip()) { dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf; }
|
||||
dy = m_bg_scroll[1][2];
|
||||
|
||||
bg_tilemap[1]->set_scrollx(0, -dx);
|
||||
bg_tilemap[1]->set_scrolly(0, -dy);
|
||||
|
||||
screen.priority().fill(0, cliprect);
|
||||
bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0); // not opaque?
|
||||
bg_tilemap[0]->draw(screen, bitmap, cliprect, 0, (bg0_pri()) ? 0 : 1);
|
||||
draw_sprites(screen, bitmap, cliprect);
|
||||
tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tc0090lvc_device::screen_eof()
|
||||
{
|
||||
std::copy_n(&m_vram[0xb000], 0x400, &m_sprram_buffer[0]);
|
||||
m_bg_scroll[0][0] = m_sprram_buffer[0x3f4];
|
||||
m_bg_scroll[0][1] = m_sprram_buffer[0x3f5];
|
||||
m_bg_scroll[0][2] = m_sprram_buffer[0x3f6];
|
||||
|
||||
m_bg_scroll[1][0] = m_sprram_buffer[0x3fc];
|
||||
m_bg_scroll[1][1] = m_sprram_buffer[0x3fd];
|
||||
m_bg_scroll[1][2] = m_sprram_buffer[0x3fe];
|
||||
}
|
||||
|
||||
void tc0091lvc_device::screen_eof()
|
||||
{
|
||||
tc0090lvc_device::screen_eof();
|
||||
update_scroll(m_sprram_buffer.get()); // buffered in TC0091LVC?
|
||||
}
|
||||
|
||||
void tc0090lvc_device::update_scroll(u8 *ram)
|
||||
{
|
||||
m_bg_scroll[0][0] = ram[0x3f4];
|
||||
m_bg_scroll[0][1] = ram[0x3f5];
|
||||
m_bg_scroll[0][2] = ram[0x3f6];
|
||||
|
||||
m_bg_scroll[1][0] = ram[0x3fc];
|
||||
m_bg_scroll[1][1] = ram[0x3fd];
|
||||
m_bg_scroll[1][2] = ram[0x3fe];
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Angelo Salese
|
||||
/***************************************************************************
|
||||
|
||||
TC0091LVC device
|
||||
TC009xLVC device
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -14,10 +14,17 @@
|
||||
#include "machine/bankdev.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
class tc0091lvc_device : public device_t, public device_gfx_interface
|
||||
class tc0090lvc_device : public device_t, public device_gfx_interface
|
||||
{
|
||||
public:
|
||||
tc0091lvc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
typedef device_delegate<void (u32 &code)> tc009xlvc_cb_delegate;
|
||||
|
||||
tc0090lvc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// configuration
|
||||
template <typename... T> void set_tile_callback(T &&... args) { m_tile_cb.set(std::forward<T>(args)...); }
|
||||
void set_tilemap_xoffs(int xoffs, int flipped_xoffs) { m_tilemap_xoffs = xoffs; m_tilemap_flipped_xoffs = flipped_xoffs; }
|
||||
void set_tilemap_yoffs(int yoffs, int flipped_yoffs) { m_tilemap_yoffs = yoffs; m_tilemap_flipped_yoffs = flipped_yoffs; }
|
||||
|
||||
// memory handlers
|
||||
u8 rom_r(offs_t offset) { return m_rom[offset & m_rom.mask()]; }
|
||||
@ -38,18 +45,24 @@ public:
|
||||
u8 irq_vector(offs_t offset) { return m_irq_vector[offset]; }
|
||||
u8 irq_enable() { return m_irq_enable; }
|
||||
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void screen_eof();
|
||||
// tilemap handlers
|
||||
void mark_all_layer_dirty();
|
||||
|
||||
virtual u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
virtual void screen_eof();
|
||||
|
||||
void cpu_map(address_map &map);
|
||||
|
||||
protected:
|
||||
tc0090lvc_device(const machine_config &mconfig, device_type &type, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual void device_post_load() override;
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
private:
|
||||
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, u8 global_flip);
|
||||
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void update_scroll(u8 *ram);
|
||||
|
||||
void vram_w(offs_t offset, u8 data);
|
||||
|
||||
@ -65,6 +78,17 @@ private:
|
||||
|
||||
DECLARE_GFXDECODE_MEMBER(gfxinfo);
|
||||
|
||||
int m_tilemap_xoffs, m_tilemap_yoffs;
|
||||
int m_tilemap_flipped_xoffs, m_tilemap_flipped_yoffs;
|
||||
|
||||
u32 tilebank(u8 slot) const { return m_vregs[slot & 3]; }
|
||||
|
||||
// other bits unknown
|
||||
bool screen_enable() const { return BIT(m_vregs[4], 5); }
|
||||
bool global_flip() const { return BIT(m_vregs[4], 4); }
|
||||
bool bg0_pri() const { return BIT(m_vregs[4], 3); }
|
||||
bool bitmap_mode() const { return (m_vregs[4] & 0x7) == 7; }
|
||||
|
||||
u8 m_irq_vector[3];
|
||||
u8 m_irq_enable;
|
||||
u8 m_ram_bank[4];
|
||||
@ -76,8 +100,20 @@ private:
|
||||
required_shared_ptr<u8> m_vram;
|
||||
required_shared_ptr<u8> m_bitmap_ram;
|
||||
required_region_ptr<u8> m_rom;
|
||||
|
||||
tc009xlvc_cb_delegate m_tile_cb;
|
||||
};
|
||||
|
||||
class tc0091lvc_device : public tc0090lvc_device
|
||||
{
|
||||
public:
|
||||
tc0091lvc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
virtual u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
|
||||
virtual void screen_eof() override;
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(TC0090LVC, tc0090lvc_device)
|
||||
DECLARE_DEVICE_TYPE(TC0091LVC, tc0091lvc_device)
|
||||
|
||||
#endif // MAME_MACHINE_TC009XLVC_H
|
||||
|
@ -43,8 +43,6 @@ private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<tc0091lvc_device> m_vdp;
|
||||
|
||||
virtual void video_start() override;
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(screen_vblank);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(output_w);
|
||||
@ -54,19 +52,6 @@ private:
|
||||
void tc0091lvc_map(address_map &map);
|
||||
};
|
||||
|
||||
void dfruit_state::video_start()
|
||||
{
|
||||
}
|
||||
|
||||
uint32_t dfruit_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bitmap.fill(0, cliprect);
|
||||
|
||||
m_vdp->screen_update(screen, bitmap, cliprect);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(dfruit_state::screen_vblank)
|
||||
{
|
||||
if (state)
|
||||
@ -314,7 +299,7 @@ void dfruit_state::dfruit(machine_config &config)
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
screen.set_size(64*8, 32*8);
|
||||
screen.set_visarea(0*8, 40*8-1, 2*8, 30*8-1);
|
||||
screen.set_screen_update(FUNC(dfruit_state::screen_update));
|
||||
screen.set_screen_update("tc0091lvc", FUNC(tc0091lvc_device::screen_update));
|
||||
screen.screen_vblank().set(FUNC(dfruit_state::screen_vblank));
|
||||
screen.set_palette("tc0091lvc:palette");
|
||||
|
||||
|
@ -54,7 +54,6 @@ private:
|
||||
required_device<es8712_device> m_essnd;
|
||||
|
||||
virtual void machine_start() override;
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(screen_vblank);
|
||||
|
||||
uint8_t m_mux_data;
|
||||
@ -79,15 +78,6 @@ void lastbank_state::machine_start()
|
||||
save_item(NAME(m_sound_flags));
|
||||
}
|
||||
|
||||
uint32_t lastbank_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bitmap.fill(0, cliprect);
|
||||
|
||||
m_vdp->screen_update(screen, bitmap, cliprect);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(lastbank_state::screen_vblank)
|
||||
{
|
||||
if (state)
|
||||
@ -424,11 +414,12 @@ void lastbank_state::lastbank(machine_config &config)
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
|
||||
screen.set_size(64*8, 32*8);
|
||||
screen.set_visarea(0*8, 40*8-1, 2*8, 30*8-1);
|
||||
screen.set_screen_update(FUNC(lastbank_state::screen_update));
|
||||
screen.set_screen_update("tc0091lvc", FUNC(tc0091lvc_device::screen_update));
|
||||
screen.screen_vblank().set(FUNC(lastbank_state::screen_vblank));
|
||||
screen.set_palette("tc0091lvc:palette");
|
||||
|
||||
TC0091LVC(config, m_vdp, 0);
|
||||
m_vdp->set_tilemap_xoffs(0,192); // TODO: correct?
|
||||
|
||||
// MCFG_VIDEO_START_OVERRIDE(lastbank_state,lastbank)
|
||||
|
||||
|
@ -76,20 +76,8 @@ puzznici note
|
||||
|
||||
void taitol_state::state_register()
|
||||
{
|
||||
m_main_bnk->configure_entries(0, m_main_prg->bytes()/0x2000, m_main_prg->base(), 0x2000);
|
||||
|
||||
save_item(NAME(m_irq_adr_table));
|
||||
save_item(NAME(m_irq_enable));
|
||||
save_item(NAME(m_cur_rambank));
|
||||
save_item(NAME(m_cur_rombank));
|
||||
|
||||
save_item(NAME(m_last_irq_level));
|
||||
save_item(NAME(m_high));
|
||||
|
||||
save_item(NAME(m_bankc));
|
||||
save_item(NAME(m_horshoes_gfxbank));
|
||||
save_item(NAME(m_cur_ctrl));
|
||||
save_item(NAME(m_flipscreen));
|
||||
save_item(NAME(m_main_high));
|
||||
}
|
||||
|
||||
void taitol_2cpu_state::state_register()
|
||||
@ -105,8 +93,8 @@ void fhawk_state::state_register()
|
||||
m_slave_bnk->configure_entries(0, m_slave_prg->bytes()/0x4000, m_slave_prg->base(), 0x4000);
|
||||
taitol_2cpu_state::state_register();
|
||||
|
||||
save_item(NAME(m_cur_rombank2));
|
||||
save_item(NAME(m_high2));
|
||||
save_item(NAME(m_slave_rombank));
|
||||
save_item(NAME(m_slave_high));
|
||||
}
|
||||
|
||||
void champwr_state::state_register()
|
||||
@ -130,28 +118,8 @@ MACHINE_START_MEMBER(taitol_state, taito_l)
|
||||
|
||||
void taitol_state::taito_machine_reset()
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
m_irq_adr_table[i] = 0;
|
||||
|
||||
m_irq_enable = 0;
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_cur_rambank[i] = 0x80;
|
||||
m_ram_bnks[i]->set_bank(m_cur_rambank[i]);
|
||||
}
|
||||
|
||||
m_cur_rombank = 0;
|
||||
m_main_bnk->set_entry(0);
|
||||
|
||||
m_last_irq_level = 0;
|
||||
m_high = 0;
|
||||
|
||||
/* video related */
|
||||
m_bankc[0] = m_bankc[1] = m_bankc[2] = m_bankc[3] = 0;
|
||||
m_horshoes_gfxbank = 0;
|
||||
m_cur_ctrl = 0;
|
||||
m_flipscreen = 0;
|
||||
m_main_high = 0;
|
||||
}
|
||||
|
||||
void taitol_2cpu_state::taito_machine_reset()
|
||||
@ -163,10 +131,10 @@ void fhawk_state::taito_machine_reset()
|
||||
{
|
||||
taitol_2cpu_state::taito_machine_reset();
|
||||
|
||||
m_cur_rombank2 = 0;
|
||||
m_slave_bnk->set_entry(m_cur_rombank2);
|
||||
m_slave_rombank = 0;
|
||||
m_slave_bnk->set_entry(m_slave_rombank);
|
||||
|
||||
m_high2 = 0;
|
||||
m_slave_high = 0;
|
||||
m_audio_bnk->set_entry(1);
|
||||
}
|
||||
|
||||
@ -193,7 +161,7 @@ MACHINE_RESET_MEMBER(taitol_state, taito_l)
|
||||
IRQ_CALLBACK_MEMBER(taitol_state::irq_callback)
|
||||
{
|
||||
m_main_cpu->set_input_line(0, CLEAR_LINE);
|
||||
return m_irq_adr_table[m_last_irq_level];
|
||||
return m_vdp->irq_vector(m_last_irq_level);
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(taitol_state::vbl_interrupt)
|
||||
@ -206,107 +174,71 @@ TIMER_DEVICE_CALLBACK_MEMBER(taitol_state::vbl_interrupt)
|
||||
|
||||
// What is really generating interrupts 0 and 1 is still to be found
|
||||
|
||||
if (scanline == 120 && (m_irq_enable & 1))
|
||||
if (scanline == 120 && (m_vdp->irq_enable() & 1))
|
||||
{
|
||||
m_last_irq_level = 0;
|
||||
m_main_cpu->set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
else if (scanline == 0 && (m_irq_enable & 2))
|
||||
else if (scanline == 0 && (m_vdp->irq_enable() & 2))
|
||||
{
|
||||
m_last_irq_level = 1;
|
||||
m_main_cpu->set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
else if (scanline == 240 && (m_irq_enable & 4))
|
||||
else if (scanline == 240 && (m_vdp->irq_enable() & 4))
|
||||
{
|
||||
m_last_irq_level = 2;
|
||||
m_main_cpu->set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::irq_adr_w)
|
||||
{
|
||||
//logerror("irq_adr_table[%d] = %02x\n", offset, data);
|
||||
m_irq_adr_table[offset] = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(taitol_state::irq_adr_r)
|
||||
{
|
||||
return m_irq_adr_table[offset];
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::irq_enable_w)
|
||||
{
|
||||
//logerror("irq_enable = %02x\n",data);
|
||||
m_irq_enable = data;
|
||||
m_vdp->irq_enable_w(data);
|
||||
|
||||
// fix Plotting test mode
|
||||
if ((m_irq_enable & (1 << m_last_irq_level)) == 0)
|
||||
if ((m_vdp->irq_enable() & (1 << m_last_irq_level)) == 0)
|
||||
m_main_cpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
READ8_MEMBER(taitol_state::irq_enable_r)
|
||||
{
|
||||
return m_irq_enable;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(taitol_state::rombankswitch_w)
|
||||
{
|
||||
if (m_cur_rombank != data)
|
||||
if (m_vdp->rom_bank_r() != data)
|
||||
{
|
||||
if (data > m_high)
|
||||
if (data > m_main_high)
|
||||
{
|
||||
m_high = data;
|
||||
logerror("New rom size : %x\n", (m_high + 1) * 0x2000);
|
||||
m_main_high = data;
|
||||
logerror("New rom size : %x\n", (m_main_high + 1) * 0x2000);
|
||||
}
|
||||
|
||||
//logerror("robs %d, %02x (%04x)\n", offset, data, m_main_cpu->pc());
|
||||
m_cur_rombank = data;
|
||||
m_main_bnk->set_entry(m_cur_rombank);
|
||||
m_vdp->rom_bank_w(data);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fhawk_state::rombank2switch_w)
|
||||
WRITE8_MEMBER(fhawk_state::slave_rombank_w)
|
||||
{
|
||||
data &= 0xf;
|
||||
|
||||
if (m_cur_rombank2 != data)
|
||||
if (m_slave_rombank != data)
|
||||
{
|
||||
if (data > m_high2)
|
||||
if (data > m_slave_high)
|
||||
{
|
||||
m_high2 = data;
|
||||
logerror("New rom2 size : %x\n", (m_high2 + 1) * 0x4000);
|
||||
m_slave_high = data;
|
||||
logerror("New rom2 size : %x\n", (m_slave_high + 1) * 0x4000);
|
||||
}
|
||||
|
||||
//logerror("robs2 %02x (%04x)\n", data, m_main_cpu->pc());
|
||||
|
||||
m_cur_rombank2 = data;
|
||||
m_slave_bnk->set_entry(m_cur_rombank2);
|
||||
m_slave_rombank = data;
|
||||
m_slave_bnk->set_entry(m_slave_rombank);
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(taitol_state::rombankswitch_r)
|
||||
READ8_MEMBER(fhawk_state::slave_rombank_r)
|
||||
{
|
||||
return m_cur_rombank;
|
||||
}
|
||||
|
||||
READ8_MEMBER(fhawk_state::rombank2switch_r)
|
||||
{
|
||||
return m_cur_rombank2;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::rambankswitch_w)
|
||||
{
|
||||
if (m_cur_rambank[offset] != data)
|
||||
{
|
||||
m_cur_rambank[offset] = data;
|
||||
m_ram_bnks[offset]->set_bank(m_cur_rambank[offset]);
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(taitol_state::rambankswitch_r)
|
||||
{
|
||||
return m_cur_rambank[offset];
|
||||
return m_slave_rombank;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::coin_control_w)
|
||||
@ -379,28 +311,14 @@ WRITE8_MEMBER(champwr_state::msm5205_volume_w)
|
||||
|
||||
void taitol_state::common_banks_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x5fff).rom();
|
||||
map(0x6000, 0x7fff).bankr("mainbank");
|
||||
map(0xc000, 0xcfff).m("rambank1", FUNC(address_map_bank_device::amap8));
|
||||
map(0xd000, 0xdfff).m("rambank2", FUNC(address_map_bank_device::amap8));
|
||||
map(0xe000, 0xefff).m("rambank3", FUNC(address_map_bank_device::amap8));
|
||||
map(0xf000, 0xfdff).m("rambank4", FUNC(address_map_bank_device::amap8));
|
||||
map(0xfe00, 0xfe03).rw(FUNC(taitol_state::taitol_bankc_r), FUNC(taitol_state::taitol_bankc_w));
|
||||
map(0xfe04, 0xfe04).rw(FUNC(taitol_state::taitol_control_r), FUNC(taitol_state::taitol_control_w));
|
||||
map(0xff00, 0xff02).rw(FUNC(taitol_state::irq_adr_r), FUNC(taitol_state::irq_adr_w));
|
||||
map(0xff03, 0xff03).rw(FUNC(taitol_state::irq_enable_r), FUNC(taitol_state::irq_enable_w));
|
||||
map(0xff04, 0xff07).rw(FUNC(taitol_state::rambankswitch_r), FUNC(taitol_state::rambankswitch_w));
|
||||
map(0xff08, 0xff08).rw(FUNC(taitol_state::rombankswitch_r), FUNC(taitol_state::rombankswitch_w));
|
||||
map(0x0000, 0xfdff).m(m_vdp, FUNC(tc0090lvc_device::cpu_map));
|
||||
map(0xfe00, 0xfeff).rw(m_vdp, FUNC(tc0090lvc_device::vregs_r), FUNC(tc0090lvc_device::vregs_w));
|
||||
map(0xff00, 0xff02).rw(m_vdp, FUNC(tc0090lvc_device::irq_vector_r), FUNC(tc0090lvc_device::irq_vector_w));
|
||||
map(0xff03, 0xff03).r(m_vdp, FUNC(tc0090lvc_device::irq_enable_r)).w(FUNC(taitol_state::irq_enable_w));
|
||||
map(0xff04, 0xff07).rw(m_vdp, FUNC(tc0090lvc_device::ram_bank_r), FUNC(tc0090lvc_device::ram_bank_w));
|
||||
map(0xff08, 0xff08).r(m_vdp, FUNC(tc0090lvc_device::rom_bank_r)).w(FUNC(taitol_state::rombankswitch_w));
|
||||
}
|
||||
|
||||
|
||||
void taitol_state::tc0090lvc_map(address_map &map)
|
||||
{
|
||||
map(0x10000, 0x1ffff).ram().w(FUNC(taitol_state::vram_w)).share("vram");
|
||||
map(0x80000, 0x801ff).mirror(0x00e00).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
|
||||
}
|
||||
|
||||
|
||||
void fhawk_state::fhawk_map(address_map &map)
|
||||
{
|
||||
common_banks_map(map);
|
||||
@ -412,7 +330,7 @@ void fhawk_state::fhawk_2_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x7fff).rom();
|
||||
map(0x8000, 0xbfff).bankr("slavebank");
|
||||
map(0xc000, 0xc000).w(FUNC(fhawk_state::rombank2switch_w));
|
||||
map(0xc000, 0xc000).w(FUNC(fhawk_state::slave_rombank_w));
|
||||
map(0xc800, 0xc800).nopr().w("ciu", FUNC(pc060ha_device::master_port_w));
|
||||
map(0xc801, 0xc801).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w));
|
||||
map(0xd000, 0xd007).rw("tc0220ioc", FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write));
|
||||
@ -485,7 +403,7 @@ void champwr_state::champwr_2_map(address_map &map)
|
||||
map(0xe008, 0xe00f).nopr();
|
||||
map(0xe800, 0xe800).nopr().w("ciu", FUNC(pc060ha_device::master_port_w));
|
||||
map(0xe801, 0xe801).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w));
|
||||
map(0xf000, 0xf000).rw(FUNC(champwr_state::rombank2switch_r), FUNC(champwr_state::rombank2switch_w));
|
||||
map(0xf000, 0xf000).rw(FUNC(champwr_state::slave_rombank_r), FUNC(champwr_state::slave_rombank_w));
|
||||
}
|
||||
|
||||
void champwr_state::champwr_3_map(address_map &map)
|
||||
@ -563,19 +481,14 @@ void taitol_1cpu_state::palamed_map(address_map &map)
|
||||
map(0xa000, 0xa003).rw(m_ymsnd, FUNC(ym2203_device::read), FUNC(ym2203_device::write));
|
||||
map(0xa800, 0xa803).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write));
|
||||
map(0xb000, 0xb000).nopw(); // Control register, function unknown (copy of 8822)
|
||||
map(0xb001, 0xb001).nopr(); // Watchdog or interrupt ack
|
||||
map(0xb001, 0xb001).nopr(); // Watchdog or interrupt ack (value ignored in cachat)
|
||||
}
|
||||
|
||||
|
||||
void taitol_1cpu_state::cachat_map(address_map &map)
|
||||
{
|
||||
common_banks_map(map);
|
||||
map(0x8000, 0x9fff).ram();
|
||||
map(0xa000, 0xa003).rw(m_ymsnd, FUNC(ym2203_device::read), FUNC(ym2203_device::write));
|
||||
map(0xa800, 0xa803).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write));
|
||||
map(0xb000, 0xb000).nopw(); // Control register, function unknown
|
||||
map(0xb001, 0xb001).nopr(); // Watchdog or interrupt ack (value ignored)
|
||||
map(0xfff8, 0xfff8).rw(FUNC(taitol_1cpu_state::rombankswitch_r), FUNC(taitol_1cpu_state::rombankswitch_w));
|
||||
palamed_map(map);
|
||||
map(0xfff8, 0xfff8).r(m_vdp, FUNC(tc0090lvc_device::rom_bank_r)).w(FUNC(taitol_1cpu_state::rombankswitch_w));
|
||||
}
|
||||
|
||||
|
||||
@ -1397,55 +1310,6 @@ static INPUT_PORTS_START( evilston )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
|
||||
static const gfx_layout bg2_layout =
|
||||
{
|
||||
8, 8,
|
||||
RGN_FRAC(1,1),
|
||||
4,
|
||||
{ 8, 12, 0, 4 },
|
||||
{ 3, 2, 1, 0, 19, 18, 17, 16 },
|
||||
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
|
||||
8*8*4
|
||||
};
|
||||
|
||||
|
||||
#define O 8*8*4
|
||||
#define O2 2*O
|
||||
static const gfx_layout sp2_layout =
|
||||
{
|
||||
16, 16,
|
||||
RGN_FRAC(1,1),
|
||||
4,
|
||||
{ 8, 12, 0, 4 },
|
||||
{ 3, 2, 1, 0, 19, 18, 17, 16, O+3, O+2, O+1, O+0, O+19, O+18, O+17, O+16 },
|
||||
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32, O2+0*32, O2+1*32, O2+2*32, O2+3*32, O2+4*32, O2+5*32, O2+6*32, O2+7*32 },
|
||||
8*8*4*4
|
||||
};
|
||||
#undef O
|
||||
#undef O2
|
||||
|
||||
static const gfx_layout char_layout =
|
||||
{
|
||||
8, 8,
|
||||
0x10000 / (8*4),
|
||||
4,
|
||||
{ 8, 12, 0, 4 },
|
||||
{ 3, 2, 1, 0, 19, 18, 17, 16},
|
||||
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
|
||||
8*8*4
|
||||
};
|
||||
|
||||
|
||||
|
||||
static GFXDECODE_START( taito_l )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, bg2_layout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, sp2_layout, 0, 16 )
|
||||
GFXDECODE_RAM( "vram", 0, char_layout, 0, 16 ) // Ram-based
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
WRITE8_MEMBER(fhawk_state::portA_w)
|
||||
{
|
||||
m_audio_bnk->set_entry(data & 0x03);
|
||||
@ -1454,22 +1318,16 @@ WRITE8_MEMBER(fhawk_state::portA_w)
|
||||
|
||||
void taitol_state::l_system_video(machine_config &config)
|
||||
{
|
||||
for (int bank = 0; bank < 4; bank++)
|
||||
{
|
||||
ADDRESS_MAP_BANK(config, m_ram_bnks[bank]).set_map(&taitol_state::tc0090lvc_map).set_options(ENDIANNESS_LITTLE, 8, 20, 0x1000);
|
||||
}
|
||||
TC0090LVC(config, m_vdp, 0);
|
||||
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_refresh_hz(60);
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
screen.set_size(40*8, 32*8);
|
||||
screen.set_visarea(0*8, 40*8-1, 2*8, 30*8-1);
|
||||
screen.set_screen_update(FUNC(taitol_state::screen_update_taitol));
|
||||
screen.set_screen_update(m_vdp, FUNC(tc0090lvc_device::screen_update));
|
||||
screen.screen_vblank().set(FUNC(taitol_state::screen_vblank_taitol));
|
||||
screen.set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, taito_l);
|
||||
PALETTE(config, m_palette, palette_device::BLACK).set_format(palette_device::xBGRBBBBGGGGRRRR_bit0, 256);
|
||||
screen.set_palette("tc0090lvc:palette");
|
||||
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(taitol_state::vbl_interrupt), "screen", 0, 1);
|
||||
}
|
||||
@ -1682,12 +1540,23 @@ void taitol_1cpu_state::puzznici(machine_config &config)
|
||||
m_main_cpu->set_addrmap(AS_PROGRAM, &taitol_1cpu_state::puzznici_map);
|
||||
}
|
||||
|
||||
void horshoes_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_horshoes_gfxbank));
|
||||
}
|
||||
|
||||
void horshoes_state::machine_reset()
|
||||
{
|
||||
m_horshoes_gfxbank = 0;
|
||||
}
|
||||
|
||||
void horshoes_state::horshoes(machine_config &config)
|
||||
{
|
||||
base(config);
|
||||
add_muxes(config);
|
||||
|
||||
m_main_cpu->set_addrmap(AS_PROGRAM, &horshoes_state::horshoes_map);
|
||||
m_vdp->set_tile_callback(FUNC(horshoes_state::horshoes_tile_cb));
|
||||
|
||||
UPD4701A(config, m_upd4701, 0);
|
||||
m_upd4701->set_portx_tag("AN0");
|
||||
@ -1714,18 +1583,12 @@ void taitol_1cpu_state::palamed(machine_config &config)
|
||||
|
||||
void taitol_1cpu_state::cachat(machine_config &config)
|
||||
{
|
||||
plotting(config);
|
||||
palamed(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
m_main_cpu->set_addrmap(AS_PROGRAM, &taitol_1cpu_state::cachat_map);
|
||||
|
||||
i8255_device &ppi(I8255(config, "ppi", 0)); // NEC D70155C
|
||||
ppi.in_pa_callback().set_ioport("IN0");
|
||||
ppi.in_pb_callback().set_ioport("IN1");
|
||||
ppi.in_pc_callback().set_ioport("IN2");
|
||||
|
||||
m_ymsnd->port_a_read_callback().set_ioport("DSWA");
|
||||
m_ymsnd->port_b_read_callback().set_ioport("DSWB");
|
||||
// NEC D70155C for inputs, instead TMP8255AP-5
|
||||
}
|
||||
|
||||
void taitol_2cpu_state::evilston(machine_config &config)
|
||||
@ -1770,7 +1633,7 @@ void taitol_2cpu_state::evilston(machine_config &config)
|
||||
|
||||
|
||||
ROM_START( raimais )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b36-11-1.bin", 0x00000, 0x20000, CRC(f19fb0d5) SHA1(ba7187dfa5b4a08cebf236913a80066dafbbc59f) )
|
||||
ROM_LOAD( "b36-09.bin", 0x20000, 0x20000, CRC(9c466e43) SHA1(2466a3f1f8124323008c9925f90e9a1d2edf1564) )
|
||||
|
||||
@ -1780,7 +1643,7 @@ ROM_START( raimais )
|
||||
ROM_REGION( 0x10000, "slave", 0 )
|
||||
ROM_LOAD( "b36-07.bin", 0x00000, 0x10000, CRC(4f3737e6) SHA1(ff5f5d4ca5485441d03c8cb01a6a096941ab02eb) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "b36-01.bin", 0x00000, 0x80000, CRC(89355cb2) SHA1(433e929fe8b488af84e88486d9679468a3d9677a) )
|
||||
ROM_LOAD( "b36-02.bin", 0x80000, 0x80000, CRC(e71da5db) SHA1(aa47ae02c359264c0a1f09ecc583eefd1ef1dfa4) )
|
||||
|
||||
@ -1789,7 +1652,7 @@ ROM_START( raimais )
|
||||
ROM_END
|
||||
|
||||
ROM_START( raimaisj )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b36-08-1.bin", 0x00000, 0x20000, CRC(6cc8f79f) SHA1(17b4903f87e6d5447c8557c2baca1728f86245dc) )
|
||||
ROM_LOAD( "b36-09.bin", 0x20000, 0x20000, CRC(9c466e43) SHA1(2466a3f1f8124323008c9925f90e9a1d2edf1564) )
|
||||
|
||||
@ -1799,7 +1662,7 @@ ROM_START( raimaisj )
|
||||
ROM_REGION( 0x10000, "slave", 0 )
|
||||
ROM_LOAD( "b36-07.bin", 0x00000, 0x10000, CRC(4f3737e6) SHA1(ff5f5d4ca5485441d03c8cb01a6a096941ab02eb) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "b36-01.bin", 0x00000, 0x80000, CRC(89355cb2) SHA1(433e929fe8b488af84e88486d9679468a3d9677a) )
|
||||
ROM_LOAD( "b36-02.bin", 0x80000, 0x80000, CRC(e71da5db) SHA1(aa47ae02c359264c0a1f09ecc583eefd1ef1dfa4) )
|
||||
|
||||
@ -1808,7 +1671,7 @@ ROM_START( raimaisj )
|
||||
ROM_END
|
||||
|
||||
ROM_START( raimaisjo )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b36-08.bin", 0x00000, 0x20000, CRC(f40b9178) SHA1(ccf5afcf08cac0d5b2d6ba74abd62d35412f0265) )
|
||||
ROM_LOAD( "b36-09.bin", 0x20000, 0x20000, CRC(9c466e43) SHA1(2466a3f1f8124323008c9925f90e9a1d2edf1564) )
|
||||
|
||||
@ -1818,7 +1681,7 @@ ROM_START( raimaisjo )
|
||||
ROM_REGION( 0x10000, "slave", 0 )
|
||||
ROM_LOAD( "b36-07.bin", 0x00000, 0x10000, CRC(4f3737e6) SHA1(ff5f5d4ca5485441d03c8cb01a6a096941ab02eb) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "b36-01.bin", 0x00000, 0x80000, CRC(89355cb2) SHA1(433e929fe8b488af84e88486d9679468a3d9677a) )
|
||||
ROM_LOAD( "b36-02.bin", 0x80000, 0x80000, CRC(e71da5db) SHA1(aa47ae02c359264c0a1f09ecc583eefd1ef1dfa4) )
|
||||
|
||||
@ -1827,7 +1690,7 @@ ROM_START( raimaisjo )
|
||||
ROM_END
|
||||
|
||||
ROM_START( fhawk )
|
||||
ROM_REGION( 0xa0000, "maincpu", 0 )
|
||||
ROM_REGION( 0xa0000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b70-11.ic3", 0x00000, 0x20000, CRC(7d9f7583) SHA1(d8fa7c66a81fb356fa9c72f377bfc31b1837eafb) )
|
||||
ROM_LOAD( "b70-03.ic2", 0x20000, 0x80000, CRC(42d5a9b8) SHA1(10714fe95c372cec12376e615a9abe213aff12bc) )
|
||||
|
||||
@ -1837,13 +1700,13 @@ ROM_START( fhawk )
|
||||
ROM_REGION( 0x20000, "slave", 0 )
|
||||
ROM_LOAD( "b70-08.ic12", 0x00000, 0x20000, CRC(4d795f48) SHA1(58040d8ccbd0572cf6aef6ea9dd646b9338a03a0) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "b70-01.ic1", 0x00000, 0x80000, CRC(fcdf67e2) SHA1(08a6a04a45c4adb4f5b4b0b83e90b2e5fe5cb0b1) )
|
||||
ROM_LOAD( "b70-02.ic2", 0x80000, 0x80000, CRC(35f7172e) SHA1(f257e9db470bb6dcca491b89cb666ef6d2546887) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( fhawkj )
|
||||
ROM_REGION( 0xa0000, "maincpu", 0 )
|
||||
ROM_REGION( 0xa0000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b70-07.ic3", 0x00000, 0x20000, CRC(939114af) SHA1(66218536dcb3b34ffa01d3c9c2fee365d91cfe00) )
|
||||
ROM_LOAD( "b70-03.ic2", 0x20000, 0x80000, CRC(42d5a9b8) SHA1(10714fe95c372cec12376e615a9abe213aff12bc) )
|
||||
|
||||
@ -1853,13 +1716,13 @@ ROM_START( fhawkj )
|
||||
ROM_REGION( 0x20000, "slave", 0 )
|
||||
ROM_LOAD( "b70-08.ic12", 0x00000, 0x20000, CRC(4d795f48) SHA1(58040d8ccbd0572cf6aef6ea9dd646b9338a03a0) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "b70-01.ic1", 0x00000, 0x80000, CRC(fcdf67e2) SHA1(08a6a04a45c4adb4f5b4b0b83e90b2e5fe5cb0b1) )
|
||||
ROM_LOAD( "b70-02.ic2", 0x80000, 0x80000, CRC(35f7172e) SHA1(f257e9db470bb6dcca491b89cb666ef6d2546887) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( champwr )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "c01-13.rom", 0x00000, 0x20000, CRC(7ef47525) SHA1(79789fa3bcaeb6666c108d2e4b69a1f9341b2f4a) )
|
||||
ROM_LOAD( "c01-04.rom", 0x20000, 0x20000, CRC(358bd076) SHA1(beb20a09370d05de719dde596eadca8fecb14ce5) )
|
||||
|
||||
@ -1869,7 +1732,7 @@ ROM_START( champwr )
|
||||
ROM_REGION( 0x20000, "slave", 0 )
|
||||
ROM_LOAD( "c01-07.rom", 0x00000, 0x20000, CRC(5117c98f) SHA1(16b3a443eb113d2591833884a1b0ff297d8c00a4) )
|
||||
|
||||
ROM_REGION( 0x180000, "gfx1", 0 )
|
||||
ROM_REGION( 0x180000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "c01-01.rom", 0x000000, 0x80000, CRC(f302e6e9) SHA1(456b046932c1ee29c890b8e87d417c4bb508c06a) )
|
||||
ROM_LOAD( "c01-02.rom", 0x080000, 0x80000, CRC(1e0476c4) SHA1(b7922e5196990ad4382f367ec80b5c72e75f9d35) )
|
||||
ROM_LOAD( "c01-03.rom", 0x100000, 0x80000, CRC(2a142dbc) SHA1(5d0e40ec266d3abcff4237c5c609355c65b4fa33) )
|
||||
@ -1879,7 +1742,7 @@ ROM_START( champwr )
|
||||
ROM_END
|
||||
|
||||
ROM_START( champwru )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "c01-12.rom", 0x00000, 0x20000, CRC(09f345b3) SHA1(f3f9a7dab0b3f87b6919a7b37cb52245e112cb08) )
|
||||
ROM_LOAD( "c01-04.rom", 0x20000, 0x20000, CRC(358bd076) SHA1(beb20a09370d05de719dde596eadca8fecb14ce5) )
|
||||
|
||||
@ -1889,7 +1752,7 @@ ROM_START( champwru )
|
||||
ROM_REGION( 0x20000, "slave", 0 )
|
||||
ROM_LOAD( "c01-07.rom", 0x00000, 0x20000, CRC(5117c98f) SHA1(16b3a443eb113d2591833884a1b0ff297d8c00a4) )
|
||||
|
||||
ROM_REGION( 0x180000, "gfx1", 0 )
|
||||
ROM_REGION( 0x180000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "c01-01.rom", 0x000000, 0x80000, CRC(f302e6e9) SHA1(456b046932c1ee29c890b8e87d417c4bb508c06a) )
|
||||
ROM_LOAD( "c01-02.rom", 0x080000, 0x80000, CRC(1e0476c4) SHA1(b7922e5196990ad4382f367ec80b5c72e75f9d35) )
|
||||
ROM_LOAD( "c01-03.rom", 0x100000, 0x80000, CRC(2a142dbc) SHA1(5d0e40ec266d3abcff4237c5c609355c65b4fa33) )
|
||||
@ -1899,7 +1762,7 @@ ROM_START( champwru )
|
||||
ROM_END
|
||||
|
||||
ROM_START( champwrj )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "c01-06.bin", 0x00000, 0x20000, CRC(90fa1409) SHA1(7904488d567ce5d8705b2d2c8a4b4aae310cc28b) )
|
||||
ROM_LOAD( "c01-04.rom", 0x20000, 0x20000, CRC(358bd076) SHA1(beb20a09370d05de719dde596eadca8fecb14ce5) )
|
||||
|
||||
@ -1909,7 +1772,7 @@ ROM_START( champwrj )
|
||||
ROM_REGION( 0x20000, "slave", 0 )
|
||||
ROM_LOAD( "c01-07.rom", 0x00000, 0x20000, CRC(5117c98f) SHA1(16b3a443eb113d2591833884a1b0ff297d8c00a4) )
|
||||
|
||||
ROM_REGION( 0x180000, "gfx1", 0 )
|
||||
ROM_REGION( 0x180000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "c01-01.rom", 0x000000, 0x80000, CRC(f302e6e9) SHA1(456b046932c1ee29c890b8e87d417c4bb508c06a) )
|
||||
ROM_LOAD( "c01-02.rom", 0x080000, 0x80000, CRC(1e0476c4) SHA1(b7922e5196990ad4382f367ec80b5c72e75f9d35) )
|
||||
ROM_LOAD( "c01-03.rom", 0x100000, 0x80000, CRC(2a142dbc) SHA1(5d0e40ec266d3abcff4237c5c609355c65b4fa33) )
|
||||
@ -1920,14 +1783,14 @@ ROM_END
|
||||
|
||||
|
||||
ROM_START( kurikint )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b42-09.ic2", 0x00000, 0x20000, CRC(e97c4394) SHA1(fdeb15315166f7615d4039d5dc9c28d53cee86f2) )
|
||||
ROM_LOAD( "b42-06.ic6", 0x20000, 0x20000, CRC(fa15fd65) SHA1(a810d7315878212e4e5344a24addf117ea6baeab) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||
ROM_LOAD( "b42-07.ic22", 0x00000, 0x10000, CRC(0f2719c0) SHA1(f870335a75f236f0059522f9a577dee7ca3acb2f) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "b42-01.ic1", 0x00000, 0x80000, CRC(7d1a1fec) SHA1(28311b07673686c18988400d0254533a454f07f4) )
|
||||
ROM_LOAD( "b42-02.ic5", 0x80000, 0x80000, CRC(1a52e65c) SHA1(20a1fc4d02b5928fb01444079692e23d178c6297) )
|
||||
|
||||
@ -1937,14 +1800,14 @@ ROM_START( kurikint )
|
||||
ROM_END
|
||||
|
||||
ROM_START( kurikintw )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b42-10.ic2", 0x00000, 0x20000, CRC(87460109) SHA1(78d0726f5d344673828191bf2e56e9741e977350) )
|
||||
ROM_LOAD( "b42-06.ic6", 0x20000, 0x20000, CRC(fa15fd65) SHA1(a810d7315878212e4e5344a24addf117ea6baeab) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||
ROM_LOAD( "b42-07.ic22", 0x00000, 0x10000, CRC(0f2719c0) SHA1(f870335a75f236f0059522f9a577dee7ca3acb2f) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "b42-01.ic1", 0x00000, 0x80000, CRC(7d1a1fec) SHA1(28311b07673686c18988400d0254533a454f07f4) )
|
||||
ROM_LOAD( "b42-02.ic5", 0x80000, 0x80000, CRC(1a52e65c) SHA1(20a1fc4d02b5928fb01444079692e23d178c6297) )
|
||||
|
||||
@ -1954,14 +1817,14 @@ ROM_START( kurikintw )
|
||||
ROM_END
|
||||
|
||||
ROM_START( kurikintu )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b42-08.ic2", 0x00000, 0x20000, CRC(7075122e) SHA1(55f5f0cf3b91b7b408f9c05c91f9839c43b49c5f) )
|
||||
ROM_LOAD( "b42-06.ic6", 0x20000, 0x20000, CRC(fa15fd65) SHA1(a810d7315878212e4e5344a24addf117ea6baeab) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||
ROM_LOAD( "b42-07.ic22", 0x00000, 0x10000, CRC(0f2719c0) SHA1(f870335a75f236f0059522f9a577dee7ca3acb2f) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "b42-01.ic1", 0x00000, 0x80000, CRC(7d1a1fec) SHA1(28311b07673686c18988400d0254533a454f07f4) )
|
||||
ROM_LOAD( "b42-02.ic5", 0x80000, 0x80000, CRC(1a52e65c) SHA1(20a1fc4d02b5928fb01444079692e23d178c6297) )
|
||||
|
||||
@ -1971,14 +1834,14 @@ ROM_START( kurikintu )
|
||||
ROM_END
|
||||
|
||||
ROM_START( kurikintj )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b42-05.ic2", 0x00000, 0x20000, CRC(077222b8) SHA1(953fb3444f6bb0dbe0323a0fd8fc3067b106a4f6) )
|
||||
ROM_LOAD( "b42-06.ic6", 0x20000, 0x20000, CRC(fa15fd65) SHA1(a810d7315878212e4e5344a24addf117ea6baeab) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||
ROM_LOAD( "b42-07.ic22", 0x00000, 0x10000, CRC(0f2719c0) SHA1(f870335a75f236f0059522f9a577dee7ca3acb2f) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "b42-01.ic1", 0x00000, 0x80000, CRC(7d1a1fec) SHA1(28311b07673686c18988400d0254533a454f07f4) )
|
||||
ROM_LOAD( "b42-02.ic5", 0x80000, 0x80000, CRC(1a52e65c) SHA1(20a1fc4d02b5928fb01444079692e23d178c6297) )
|
||||
|
||||
@ -1988,14 +1851,14 @@ ROM_START( kurikintj )
|
||||
ROM_END
|
||||
|
||||
ROM_START( kurikinta )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "kk_ic2.ic2", 0x00000, 0x20000, CRC(908603f2) SHA1(f810f2501458224e9264a984f22547cc8ccc2b0e) )
|
||||
ROM_LOAD( "kk_ic6.ic6", 0x20000, 0x20000, CRC(a4a957b1) SHA1(bbdb5b71ab613a8c89f7a0300abd85408951dc7e) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||
ROM_LOAD( "b42-07.ic22", 0x00000, 0x10000, CRC(0f2719c0) SHA1(f870335a75f236f0059522f9a577dee7ca3acb2f) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "kk_1-1l.rom", 0x00000, 0x20000, CRC(df1d4fcd) SHA1(300cad3636ea9648595c3f4bba3ca737f95f7354) )
|
||||
ROM_LOAD16_BYTE( "kk_2-2l.rom", 0x40000, 0x20000, CRC(fca7f647) SHA1(0571e8fc2eda9f139e81d6d191368fb99764f797) )
|
||||
ROM_LOAD16_BYTE( "kk_5-3l.rom", 0x80000, 0x20000, CRC(d080fde1) SHA1(e5011cdf35bf5d39f4786e6d60d2b35a79560dfa) )
|
||||
@ -2055,10 +1918,10 @@ CPU TC0090LVC (All in one Z80 & system controller??)
|
||||
************************************************************************/
|
||||
|
||||
ROM_START( plotting ) /* Likely B96-10 or higher by Taito's rom numbering system, demo mode is 1 player */
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_REGION( 0x10000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "ic10", 0x00000, 0x10000, CRC(be240921) SHA1(f29f3a49b563f24aa6e3187ac4da1a8100cb02b5) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "b96-07.ic9", 0x00000, 0x10000, CRC(0713a387) SHA1(0fc1242ce02a56279fa1d5270c905bba7cdcd072) )
|
||||
ROM_LOAD16_BYTE( "b96-08.ic8", 0x00001, 0x10000, CRC(55b8e294) SHA1(14405638f751adfadb022bf7a0123a3972d4a617) )
|
||||
|
||||
@ -2068,10 +1931,10 @@ ROM_END
|
||||
|
||||
|
||||
ROM_START( plottinga ) /* B96-09 or higher by Taito's rom numbering system, demo mode is 2 players */
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_REGION( 0x10000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "plot01.ic10", 0x00000, 0x10000, CRC(5b30bc25) SHA1(df8839a90da9e5122d75b6faaf97f59499dbd316) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "b96-02.ic9", 0x00000, 0x10000, CRC(6e0bad2a) SHA1(73996688cd058a2f56f61ea60144b9c673919a58) )
|
||||
ROM_LOAD16_BYTE( "b96-03.ic8", 0x00001, 0x10000, CRC(fb5f3ca4) SHA1(0c335acceea50133a6899f9e368cff5f61b55a96) )
|
||||
|
||||
@ -2080,10 +1943,10 @@ ROM_START( plottinga ) /* B96-09 or higher by Taito's rom numbering system, demo
|
||||
ROM_END
|
||||
|
||||
ROM_START( plottingb ) /* The first (earliest) "World" version by Taito's rom numbering system, demo mode is 2 players */
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_REGION( 0x10000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b96-06.ic10",0x00000, 0x10000, CRC(f89a54b1) SHA1(19757b5fb61acdd6f5ae8e32a38ae54bfda0c522) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "b96-02.ic9", 0x00000, 0x10000, CRC(6e0bad2a) SHA1(73996688cd058a2f56f61ea60144b9c673919a58) )
|
||||
ROM_LOAD16_BYTE( "b96-03.ic8", 0x00001, 0x10000, CRC(fb5f3ca4) SHA1(0c335acceea50133a6899f9e368cff5f61b55a96) )
|
||||
|
||||
@ -2092,10 +1955,10 @@ ROM_START( plottingb ) /* The first (earliest) "World" version by Taito's rom nu
|
||||
ROM_END
|
||||
|
||||
ROM_START( plottingu ) /* The demo mode is 2 players */
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_REGION( 0x10000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b96-05.ic10",0x00000, 0x10000, CRC(afb99d1f) SHA1(a5cabc182d4f1d5709e6835d8b0a481dd0f9a563) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "b96-02.ic9", 0x00000, 0x10000, CRC(6e0bad2a) SHA1(73996688cd058a2f56f61ea60144b9c673919a58) )
|
||||
ROM_LOAD16_BYTE( "b96-03.ic8", 0x00001, 0x10000, CRC(fb5f3ca4) SHA1(0c335acceea50133a6899f9e368cff5f61b55a96) )
|
||||
|
||||
@ -2104,10 +1967,10 @@ ROM_START( plottingu ) /* The demo mode is 2 players */
|
||||
ROM_END
|
||||
|
||||
ROM_START( flipull ) /* The demo mode is 1 player */
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_REGION( 0x10000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "b96-01.ic10",0x00000, 0x10000, CRC(65993978) SHA1(d14dc70f1b5e72b96ccc3fab61d7740f627bfea2) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "b96-07.ic9", 0x00000, 0x10000, CRC(0713a387) SHA1(0fc1242ce02a56279fa1d5270c905bba7cdcd072) )
|
||||
ROM_LOAD16_BYTE( "b96-08.ic8", 0x00001, 0x10000, CRC(55b8e294) SHA1(14405638f751adfadb022bf7a0123a3972d4a617) )
|
||||
|
||||
@ -2116,13 +1979,13 @@ ROM_START( flipull ) /* The demo mode is 1 player */
|
||||
ROM_END
|
||||
|
||||
ROM_START( puzznic )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "c20-09.ic11", 0x00000, 0x20000, CRC(156d6de1) SHA1(c247936b62ef354851c9bace76a7a0aa14194d5f) )
|
||||
|
||||
ROM_REGION( 0x0800, "mcu:mcu", 0 ) /* 2k for the microcontroller */
|
||||
ROM_LOAD( "c20-01.ic4", 0x0000, 0x0800, CRC(085f68b4) SHA1(2dbc7e2c015220dc59ee1f1208540744e5b9b7cc) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "c20-07.ic10", 0x00000, 0x10000, CRC(be12749a) SHA1(c67d1a434486843a6776d89e905362b7db595d8d) )
|
||||
ROM_LOAD16_BYTE( "c20-06.ic9", 0x00001, 0x10000, CRC(ac85a9c5) SHA1(2d72dae86a191ccdac9648980aca832fb9886544) )
|
||||
|
||||
@ -2131,13 +1994,13 @@ ROM_START( puzznic )
|
||||
ROM_END
|
||||
|
||||
ROM_START( puzznicu )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "c20-10.ic11", 0x00000, 0x20000, CRC(3522d2e5) SHA1(2428663d1d71f2920c69cd2cd907f0750c22af77) )
|
||||
|
||||
ROM_REGION( 0x0800, "mcu:mcu", 0 ) /* 2k for the microcontroller */
|
||||
ROM_LOAD( "c20-01.ic4", 0x0000, 0x0800, CRC(085f68b4) SHA1(2dbc7e2c015220dc59ee1f1208540744e5b9b7cc) )
|
||||
|
||||
ROM_REGION( 0x40000, "gfx1", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "c20-03.ic10", 0x00000, 0x20000, CRC(4264056c) SHA1(d2d8a170ae0f361093a5384935238605a59e5938) )
|
||||
ROM_LOAD16_BYTE( "c20-02.ic9", 0x00001, 0x20000, CRC(3c115f8b) SHA1(8d518be01b7c4d6d993d5d9b62aab719a5c8baca) )
|
||||
|
||||
@ -2146,13 +2009,13 @@ ROM_START( puzznicu )
|
||||
ROM_END
|
||||
|
||||
ROM_START( puzznicj )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "c20-04.ic11", 0x00000, 0x20000, CRC(a4150b6c) SHA1(27719b8993735532cd59f4ed5693ff3143ee2336) )
|
||||
|
||||
ROM_REGION( 0x0800, "mcu:mcu", 0 ) /* 2k for the microcontroller */
|
||||
ROM_LOAD( "c20-01.ic4", 0x0000, 0x0800, CRC(085f68b4) SHA1(2dbc7e2c015220dc59ee1f1208540744e5b9b7cc) )
|
||||
|
||||
ROM_REGION( 0x40000, "gfx1", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "c20-03.ic10", 0x00000, 0x20000, CRC(4264056c) SHA1(d2d8a170ae0f361093a5384935238605a59e5938) )
|
||||
ROM_LOAD16_BYTE( "c20-02.ic9", 0x00001, 0x20000, CRC(3c115f8b) SHA1(8d518be01b7c4d6d993d5d9b62aab719a5c8baca) )
|
||||
|
||||
@ -2161,28 +2024,28 @@ ROM_START( puzznicj )
|
||||
ROM_END
|
||||
|
||||
ROM_START( puzznici ) /* bootleg (original main board, bootleg sub-board without MCU) */
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "1.ic11", 0x00000, 0x20000, CRC(4612f5e0) SHA1(dc07a365414666568537d31ef01b58f2362cadaf) )
|
||||
|
||||
ROM_REGION( 0x40000, "gfx1", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "u10.ic10", 0x00000, 0x20000, CRC(4264056c) SHA1(d2d8a170ae0f361093a5384935238605a59e5938) )
|
||||
ROM_LOAD16_BYTE( "3.ic9", 0x00001, 0x20000, CRC(2bf5232a) SHA1(a8fc06bb8bae2ca6bd21e3a96c9ed38bb356d5d7) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( puzznicb ) /* bootleg (original main board, bootleg sub-board without MCU) */
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "ic11.bin", 0x00000, 0x20000, CRC(2510df4d) SHA1(534327e3d7f847b6c0effc5fd0fb9f5da9b0d3b1) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", 0 ) // this has the bad line in tile 1 fixed (unused I believe) are we sure the roms used in the original sets are a good dump?
|
||||
ROM_REGION( 0x20000, "tc0090lvc:gfx", 0 ) // this has the bad line in tile 1 fixed (unused I believe) are we sure the roms used in the original sets are a good dump?
|
||||
ROM_LOAD16_BYTE( "ic10.bin", 0x00000, 0x10000, CRC(be12749a) SHA1(c67d1a434486843a6776d89e905362b7db595d8d) )
|
||||
ROM_LOAD16_BYTE( "ic9.bin", 0x00001, 0x10000, CRC(0f183340) SHA1(9eef7de801eb9763313f55a38e567b92fca3bfa6) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( puzznicba ) /* bootleg (original main board, bootleg sub-board without MCU) - marked PUZZNIC-2 008900 42 */
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "18.ic10", 0x00000, 0x20000, CRC(8349eb3b) SHA1(589dc99a22b3d7623b1ea6c1053f3b3dfe520547) )
|
||||
|
||||
ROM_REGION( 0x40000, "gfx1", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "19.ic9", 0x00000, 0x20000, CRC(4264056c) SHA1(d2d8a170ae0f361093a5384935238605a59e5938) )
|
||||
ROM_LOAD16_BYTE( "20.ic8", 0x00001, 0x20000, CRC(3c115f8b) SHA1(8d518be01b7c4d6d993d5d9b62aab719a5c8baca) )
|
||||
ROM_END
|
||||
@ -2207,10 +2070,10 @@ SUB PCB (K9100282A / J9100220A)
|
||||
*/
|
||||
|
||||
ROM_START( horshoes )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "c47-03.ic6", 0x00000, 0x20000, CRC(37e15b20) SHA1(85baa0ee553e4c9fed38294ba8912f18f519e62f) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "c47-02.ic5", 0x00000, 0x10000, CRC(35f96526) SHA1(e7f9b33d82b050aff49f991aa12db436421caa5b) ) /* silkscreened CH0-L */
|
||||
ROM_CONTINUE ( 0x40000, 0x10000 )
|
||||
ROM_LOAD16_BYTE( "c47-01.ic11", 0x20000, 0x10000, CRC(031c73d8) SHA1(deef972fbf226701f9a6469ae3934129dc52ce9c) ) /* silkscreened CH1-L */
|
||||
@ -2226,28 +2089,28 @@ ROM_START( horshoes )
|
||||
ROM_END
|
||||
|
||||
ROM_START( palamed ) /* Prototype or location test?? - Line 5 of notice screen says "Territory" later sets say "Territories" */
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "palamedes_prg_ic6.ic6", 0x00000, 0x20000, CRC(ee957b0e) SHA1(cca9db673026f769776cb86734a6503692676fbe) ) /* hand labeled as PALAMEDEStm [PRG] IC6 */
|
||||
|
||||
ROM_REGION( 0x40000, "gfx1", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "chr-l_ic9.ic9", 0x00000, 0x20000, CRC(c7bbe460) SHA1(1c1f186d0b0b2e383f82c53ae93b975a75f50f9c) ) /* hand labeled as CHR-L IC9 */
|
||||
ROM_LOAD16_BYTE( "chr-h_ic7.ic7", 0x00001, 0x20000, CRC(fcd86e44) SHA1(bdd0750ed6e93cc49f09f4ccb05b0c4a44cb9c23) ) /* hand labeled as CHR-H IC7 */
|
||||
ROM_END
|
||||
|
||||
ROM_START( palamedj )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "c63-02.ic6", 0x00000, 0x20000, CRC(55a82bb2) SHA1(f157ad770351d4b8d8f8c061c4e330d6391fc624) )
|
||||
|
||||
ROM_REGION( 0x40000, "gfx1", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "c63-04.ic9", 0x00000, 0x20000, CRC(c7bbe460) SHA1(1c1f186d0b0b2e383f82c53ae93b975a75f50f9c) )
|
||||
ROM_LOAD16_BYTE( "c63-03.ic7", 0x00001, 0x20000, CRC(fcd86e44) SHA1(bdd0750ed6e93cc49f09f4ccb05b0c4a44cb9c23) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( cachat )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "cac6", 0x00000, 0x20000, CRC(8105cf5f) SHA1(e6dd22165436c247db887a04c3e69c9e2505bb33) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "cac9", 0x00000, 0x20000, CRC(bc462914) SHA1(3eede8940cabadf563acb63059bfc2d13253b29f) )
|
||||
ROM_LOAD16_BYTE( "cac10", 0x40000, 0x20000, CRC(ecc64b31) SHA1(04ce97cdcdbdbd38602011f5ed27fe9182fb500a) )
|
||||
ROM_LOAD16_BYTE( "cac7", 0x00001, 0x20000, CRC(7fb71578) SHA1(34cfa1383ea1f3cbf45eaf6b989a1248cdef1bb9) )
|
||||
@ -2258,10 +2121,10 @@ ROM_START( cachat )
|
||||
ROM_END
|
||||
|
||||
ROM_START( tubeit ) /* Title changed. Year, copyright and manufacture removed */
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_REGION( 0x20000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "t-i_02.6", 0x00000, 0x20000, CRC(54730669) SHA1(a44ebd31a8588a133a7552a39fa8d52ba1985e45) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "t-i_03.7", 0x00001, 0x40000, CRC(e1c3fed0) SHA1(cd68dbf61ed820f4aa50c630e7cb778aafb433c2) )
|
||||
ROM_LOAD16_BYTE( "t-i_04.9", 0x00000, 0x40000, CRC(b4a6e31d) SHA1(e9abab8f19c78207f25a62104bcae1e391cbd2c0) )
|
||||
|
||||
@ -2270,10 +2133,10 @@ ROM_START( tubeit ) /* Title changed. Year, copyright and manufacture removed */
|
||||
ROM_END
|
||||
|
||||
ROM_START( cubybop )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "cb06.6", 0x00000, 0x40000, CRC(66b89a85) SHA1(2ba26d71fd1aa8e64584a5908a1d797666718d49) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "cb09.9", 0x00000, 0x40000, CRC(5f831e59) SHA1(db319a6c1058200274d687163b4df2f78a2bf879) )
|
||||
ROM_LOAD16_BYTE( "cb10.10", 0x80000, 0x40000, CRC(430510fc) SHA1(95c0a0ebd0485a15090f302e5d2f4da8204baf7c) )
|
||||
ROM_LOAD16_BYTE( "cb07.7", 0x00001, 0x40000, CRC(3582de99) SHA1(51620cc9044aef8e5ed0335b7d5d6d67a7857005) )
|
||||
@ -2281,28 +2144,28 @@ ROM_START( cubybop )
|
||||
ROM_END
|
||||
|
||||
ROM_START( plgirls )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "pg03.ic6", 0x00000, 0x40000, CRC(6ca73092) SHA1(f5679f047a29b936046c0d3677489df553ad7b41) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "pg02.ic9", 0x00000, 0x40000, CRC(3cf05ca9) SHA1(502c45a5330dda1b2fbf7d3d0c9bc6e889ff07d8) )
|
||||
ROM_LOAD16_BYTE( "pg01.ic7", 0x00001, 0x40000, CRC(79e41e74) SHA1(aa8efbeeee47f84e19b639821a89a7bcd67fe7a9) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( plgirls2 )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "pg2_1j.ic6", 0x00000, 0x40000, CRC(f924197a) SHA1(ecaaefd1b3715ba60608e05d58be67e3c71f653a) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD16_BYTE( "cho-l.ic9", 0x00000, 0x80000, CRC(956384ec) SHA1(94a2b95f340e96bdccbeafd373f0dea90b8328dd) )
|
||||
ROM_LOAD16_BYTE( "cho-h.ic7", 0x00001, 0x80000, CRC(992f99b1) SHA1(c79f1014d73654740f7823812f92376d65d6b15d) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( plgirls2b )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "playgirls2b.d1", 0x00000, 0x40000, CRC(d58159fa) SHA1(541c6ca5f12c38b5a08f90048f52c31d27bb9233) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD32_BYTE( "playgirls2b.d8", 0x00003, 0x40000, CRC(22df48b5) SHA1(be51dbe55f84dd1b7c30da0e4d98c874b0803382) )
|
||||
ROM_LOAD32_BYTE( "playgirls2b.d4", 0x00001, 0x40000, CRC(bc9e2192) SHA1(7bc7f46295166a84c849e9ea82428e653375d9d6) )
|
||||
ROM_LOAD32_BYTE( "playgirls2b.b6", 0x00000, 0x40000, CRC(aac6c90b) SHA1(965cea2fb5f3aaabb4378fc24899af53de745ff3) )
|
||||
@ -2311,14 +2174,14 @@ ROM_END
|
||||
|
||||
|
||||
ROM_START( evilston )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "c67-03.ic2", 0x00000, 0x20000, CRC(53419982) SHA1(ecc338e2237d26c5ff25b756d371b26b23beed1e) )
|
||||
ROM_LOAD( "c67-04.ic6", 0x20000, 0x20000, CRC(55d57e19) SHA1(8815bcaafe7ee056314b4131e3fb7963854dd6ba) )
|
||||
|
||||
ROM_REGION( 0x80000, "audiocpu", 0 )
|
||||
ROM_LOAD( "c67-05.ic22", 0x00000, 0x20000, CRC(94d3a642) SHA1(af20aa5bb60a45c05eb1deba23ba30e6640ca235) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx1", 0 )
|
||||
ROM_REGION( 0x100000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD( "c67-01.ic1", 0x00000, 0x80000, CRC(2f351bf4) SHA1(0fb37abf3413cd11baece1c9bbca5a51b0f28938) )
|
||||
ROM_LOAD( "c67-02.ic5", 0x80000, 0x80000, CRC(eb4f895c) SHA1(2c902572fe5a5d4442e4dd29e8a85cb40c384140) )
|
||||
ROM_END
|
||||
@ -2361,10 +2224,10 @@ Notes:
|
||||
*/
|
||||
|
||||
ROM_START( lagirl )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "tc0090lvc", 0 )
|
||||
ROM_LOAD( "rom1", 0x00000, 0x40000, CRC(ba1acfdb) SHA1(ff1093c2d0887287ce451417bd373e00f2881ce7) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", 0 )
|
||||
ROM_REGION( 0x80000, "tc0090lvc:gfx", 0 )
|
||||
ROM_LOAD32_BYTE( "rom2", 0x00003, 0x20000, CRC(4c739a30) SHA1(4426f51aac9bb39f5d1a7616d183ff6c76749dc2) )
|
||||
ROM_LOAD32_BYTE( "rom3", 0x00001, 0x20000, CRC(4cf22a4b) SHA1(1c933ccbb6a5b8a6795385d7970db5f7138e572e) )
|
||||
ROM_LOAD32_BYTE( "rom4", 0x00002, 0x20000, CRC(7dcd6696) SHA1(8f3b1fe669520142668af6dc2d04f13767048989) )
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include "machine/74157.h"
|
||||
#include "machine/bankdev.h"
|
||||
#include "machine/tc009xlvc.h"
|
||||
#include "machine/timer.h"
|
||||
#include "machine/upd4701.h"
|
||||
#include "sound/msm5205.h"
|
||||
@ -21,13 +22,9 @@ public:
|
||||
taitol_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_main_cpu(*this, "maincpu")
|
||||
, m_vdp(*this, "tc0090lvc")
|
||||
, m_upd4701(*this, "upd4701")
|
||||
, m_main_prg(*this, "maincpu")
|
||||
, m_main_bnk(*this, "mainbank")
|
||||
, m_ram_bnks(*this, "rambank%u", 1)
|
||||
, m_gfxdecode(*this, "gfxdecode")
|
||||
, m_palette(*this, "palette")
|
||||
, m_vram(*this, "vram")
|
||||
, m_main_prg(*this, "tc0090lvc")
|
||||
{
|
||||
}
|
||||
|
||||
@ -38,69 +35,29 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(coin_control_w);
|
||||
|
||||
protected:
|
||||
static constexpr size_t SPRITERAM_SIZE = 0x400;
|
||||
|
||||
/* memory pointers */
|
||||
u8 * m_shared_ram;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg_tilemap[2];
|
||||
tilemap_t *m_tx_tilemap;
|
||||
std::unique_ptr<u8[]> m_buff_spriteram;
|
||||
int m_cur_ctrl;
|
||||
int m_horshoes_gfxbank;
|
||||
int m_bankc[4];
|
||||
int m_flipscreen;
|
||||
|
||||
/* misc */
|
||||
int m_cur_rombank;
|
||||
int m_cur_rambank[4];
|
||||
int m_irq_adr_table[3];
|
||||
int m_irq_enable;
|
||||
int m_last_irq_level;
|
||||
int m_high;
|
||||
int m_main_high;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(irq_adr_w);
|
||||
DECLARE_READ8_MEMBER(irq_adr_r);
|
||||
DECLARE_WRITE8_MEMBER(irq_enable_w);
|
||||
DECLARE_READ8_MEMBER(irq_enable_r);
|
||||
DECLARE_WRITE8_MEMBER(rombankswitch_w);
|
||||
DECLARE_READ8_MEMBER(rombankswitch_r);
|
||||
DECLARE_WRITE8_MEMBER(rambankswitch_w);
|
||||
DECLARE_READ8_MEMBER(rambankswitch_r);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(mcu_control_w);
|
||||
DECLARE_READ8_MEMBER(mcu_control_r);
|
||||
DECLARE_WRITE8_MEMBER(taitol_bankc_w);
|
||||
DECLARE_READ8_MEMBER(taitol_bankc_r);
|
||||
DECLARE_WRITE8_MEMBER(taitol_control_w);
|
||||
DECLARE_READ8_MEMBER(taitol_control_r);
|
||||
DECLARE_WRITE8_MEMBER(vram_w);
|
||||
template<int Offset> TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tx_tile_info);
|
||||
virtual void video_start() override;
|
||||
u32 screen_update_taitol(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(screen_vblank_taitol);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(vbl_interrupt);
|
||||
|
||||
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void l_system_video(machine_config &config);
|
||||
|
||||
void common_banks_map(address_map &map);
|
||||
void tc0090lvc_map(address_map &map);
|
||||
|
||||
virtual void state_register();
|
||||
virtual void taito_machine_reset();
|
||||
|
||||
required_device<cpu_device> m_main_cpu;
|
||||
required_device<tc0090lvc_device> m_vdp;
|
||||
optional_device<upd4701_device> m_upd4701;
|
||||
required_memory_region m_main_prg;
|
||||
required_memory_bank m_main_bnk;
|
||||
required_device_array<address_map_bank_device, 4> m_ram_bnks;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<u8> m_vram;
|
||||
};
|
||||
|
||||
|
||||
@ -146,13 +103,13 @@ public:
|
||||
: taitol_2cpu_state(mconfig, type, tag)
|
||||
, m_slave_prg(*this, "slave")
|
||||
, m_slave_bnk(*this, "slavebank")
|
||||
, m_cur_rombank2(0)
|
||||
, m_high2(0)
|
||||
, m_slave_rombank(0)
|
||||
, m_slave_high(0)
|
||||
{
|
||||
}
|
||||
|
||||
DECLARE_WRITE8_MEMBER(rombank2switch_w);
|
||||
DECLARE_READ8_MEMBER(rombank2switch_r);
|
||||
DECLARE_WRITE8_MEMBER(slave_rombank_w);
|
||||
DECLARE_READ8_MEMBER(slave_rombank_r);
|
||||
DECLARE_WRITE8_MEMBER(portA_w);
|
||||
|
||||
void fhawk(machine_config &config);
|
||||
@ -168,8 +125,8 @@ protected:
|
||||
required_memory_region m_slave_prg;
|
||||
required_memory_bank m_slave_bnk;
|
||||
|
||||
u8 m_cur_rombank2;
|
||||
u8 m_high2;
|
||||
u8 m_slave_rombank;
|
||||
u8 m_slave_high;
|
||||
};
|
||||
|
||||
|
||||
@ -261,10 +218,18 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
DECLARE_WRITE8_MEMBER(bankg_w);
|
||||
|
||||
DECLARE_MACHINE_RESET(horshoes);
|
||||
void horshoes(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
void horshoes_tile_cb(u32 &code);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(bankg_w);
|
||||
int m_horshoes_gfxbank;
|
||||
|
||||
void horshoes_map(address_map &map);
|
||||
};
|
||||
|
||||
|
@ -6,259 +6,38 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Callbacks for the TileMap code
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
template<int Offset>
|
||||
TILE_GET_INFO_MEMBER(taitol_state::get_tile_info)
|
||||
{
|
||||
int attr = m_vram[2 * tile_index + Offset + 1];
|
||||
int code = m_vram[2 * tile_index + Offset]
|
||||
| ((attr & 0x03) << 8)
|
||||
| ((m_bankc[(attr & 0xc) >> 2]) << 10)
|
||||
| (m_horshoes_gfxbank << 12);
|
||||
|
||||
tileinfo.set(0,
|
||||
code,
|
||||
(attr & 0xf0) >> 4,
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(taitol_state::get_tx_tile_info)
|
||||
{
|
||||
int attr = m_vram[2 * tile_index + 0xa000 + 1];
|
||||
int code = m_vram[2 * tile_index + 0xa000] | ((attr & 0x07) << 8);
|
||||
|
||||
tileinfo.set(2,
|
||||
code,
|
||||
(attr & 0xf0) >> 4,
|
||||
0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Start the video hardware emulation.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void taitol_state::video_start()
|
||||
{
|
||||
m_buff_spriteram = make_unique_clear<u8[]>(SPRITERAM_SIZE);
|
||||
|
||||
m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(taitol_state::get_tile_info<0x8000>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(taitol_state::get_tile_info<0x9000>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(taitol_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
|
||||
m_bg_tilemap[0]->set_transparent_pen(0);
|
||||
m_tx_tilemap->set_transparent_pen(0);
|
||||
|
||||
m_tx_tilemap->set_scrolldx(-8, -8);
|
||||
m_bg_tilemap[0]->set_scrolldx(28, -11);
|
||||
m_bg_tilemap[1]->set_scrolldx(38, -21);
|
||||
|
||||
save_pointer(NAME(m_buff_spriteram), SPRITERAM_SIZE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Memory handlers
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void horshoes_state::horshoes_tile_cb(u32 &code)
|
||||
{
|
||||
code |= m_horshoes_gfxbank << 12;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(horshoes_state::bankg_w)
|
||||
{
|
||||
if (m_horshoes_gfxbank != data)
|
||||
{
|
||||
m_horshoes_gfxbank = data;
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
m_bg_tilemap[i]->mark_all_dirty();
|
||||
m_vdp->mark_all_layer_dirty();
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::taitol_bankc_w)
|
||||
{
|
||||
if (m_bankc[offset] != data)
|
||||
{
|
||||
m_bankc[offset] = data;
|
||||
// logerror("Bankc %d, %02x (%s)\n", offset, data, m_maincpu->pc());
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
m_bg_tilemap[i]->mark_all_dirty();
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(taitol_state::taitol_bankc_r)
|
||||
{
|
||||
return m_bankc[offset];
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(taitol_state::taitol_control_w)
|
||||
{
|
||||
// logerror("Control Write %02x (%s)\n", data, m_maincpu->pc());
|
||||
|
||||
m_cur_ctrl = data;
|
||||
//popmessage("%02x",data);
|
||||
|
||||
/* bit 0 unknown */
|
||||
|
||||
/* bit 1 unknown */
|
||||
|
||||
/* bit 3 controls sprite/tile priority - handled in vh_screenrefresh() */
|
||||
|
||||
/* bit 4 flip screen */
|
||||
m_flipscreen = data & 0x10;
|
||||
machine().tilemap().set_flip_all(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
|
||||
|
||||
/* bit 5 display enable - handled in vh_screenrefresh() */
|
||||
}
|
||||
|
||||
READ8_MEMBER(taitol_state::taitol_control_r)
|
||||
{
|
||||
// logerror("Control Read %02x (%s)\n", cur_ctrl, m_maincpu->pc());
|
||||
return m_cur_ctrl;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::vram_w)
|
||||
{
|
||||
// TODO : 0x10000-0x13fff Unused?
|
||||
if ((offset & 0xc000) == 0)
|
||||
return;
|
||||
|
||||
if((m_vram[offset] & mem_mask) == (data & mem_mask))
|
||||
return;
|
||||
|
||||
COMBINE_DATA(&m_vram[offset]);
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32);
|
||||
switch (offset & 0xf000)
|
||||
{
|
||||
case 0x8000:
|
||||
case 0x9000:
|
||||
m_bg_tilemap[(offset >> 12) & 1]->mark_tile_dirty((offset & 0xfff) / 2);
|
||||
break;
|
||||
case 0xa000:
|
||||
m_tx_tilemap->mark_tile_dirty((offset & 0xfff) / 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Display refresh
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/*
|
||||
Sprite format:
|
||||
00: xxxxxxxx tile number (low)
|
||||
01: xxxxxxxx tile number (high)
|
||||
02: ----xxxx color
|
||||
----x--- priority
|
||||
03: -------x flip x
|
||||
------x- flip y
|
||||
04: xxxxxxxx x position (low)
|
||||
05: -------x x position (high)
|
||||
06: xxxxxxxx y position
|
||||
07: xxxxxxxx unknown / ignored? Seems just garbage in many cases, e.g
|
||||
plgirs2 bullets and raimais big bosses.
|
||||
*/
|
||||
|
||||
void taitol_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
{
|
||||
int offs;
|
||||
|
||||
/* at spriteram + 0x3f0 and 03f8 are the tilemap control registers; spriteram + 0x3e8 seems to be unused */
|
||||
for (offs = 0; offs < SPRITERAM_SIZE - 3 * 8; offs += 8)
|
||||
{
|
||||
int code, color, sx, sy, flipx, flipy;
|
||||
|
||||
color = m_buff_spriteram[offs + 2] & 0x0f;
|
||||
code = m_buff_spriteram[offs] | (m_buff_spriteram[offs + 1] << 8);
|
||||
|
||||
code |= (m_horshoes_gfxbank & 0x03) << 10;
|
||||
|
||||
sx = m_buff_spriteram[offs + 4] | ((m_buff_spriteram[offs + 5] & 1) << 8);
|
||||
sy = m_buff_spriteram[offs + 6];
|
||||
if (sx >= 320)
|
||||
sx -= 512;
|
||||
flipx = m_buff_spriteram[offs + 3] & 0x01;
|
||||
flipy = m_buff_spriteram[offs + 3] & 0x02;
|
||||
|
||||
if (m_flipscreen)
|
||||
{
|
||||
sx = 304 - sx;
|
||||
sy = 240 - sy;
|
||||
flipx = !flipx;
|
||||
flipy = !flipy;
|
||||
}
|
||||
|
||||
m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect,
|
||||
code,
|
||||
color,
|
||||
flipx,flipy,
|
||||
sx,sy,
|
||||
screen.priority(),
|
||||
(color & 0x08) ? 0xaa : 0x00,0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
uint32_t taitol_state::screen_update_taitol(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int dx, dy;
|
||||
|
||||
dx = m_vram[0xb3f4] | (m_vram[0xb3f5] << 8);
|
||||
if (m_flipscreen)
|
||||
dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf;
|
||||
dy = m_vram[0xb3f6];
|
||||
|
||||
m_bg_tilemap[0]->set_scrollx(0, -dx);
|
||||
m_bg_tilemap[0]->set_scrolly(0, -dy);
|
||||
|
||||
dx = m_vram[0xb3fc] | (m_vram[0xb3fd] << 8);
|
||||
if (m_flipscreen)
|
||||
dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf;
|
||||
dy = m_vram[0xb3fe];
|
||||
|
||||
m_bg_tilemap[1]->set_scrollx(0, -dx);
|
||||
m_bg_tilemap[1]->set_scrolly(0, -dy);
|
||||
|
||||
if (m_cur_ctrl & 0x20) /* display enable */
|
||||
{
|
||||
screen.priority().fill(0, cliprect);
|
||||
|
||||
m_bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
|
||||
|
||||
if (m_cur_ctrl & 0x08) /* sprites always over BG1 */
|
||||
m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
|
||||
else /* split priority */
|
||||
m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,1);
|
||||
|
||||
draw_sprites(screen, bitmap, cliprect);
|
||||
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
}
|
||||
else
|
||||
bitmap.fill(m_palette->pen(0), cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(taitol_state::screen_vblank_taitol)
|
||||
{
|
||||
// rising edge
|
||||
if (state)
|
||||
{
|
||||
std::copy(&m_vram[0xb000], &m_vram[0xb000+SPRITERAM_SIZE], &m_buff_spriteram[0]);
|
||||
m_vdp->screen_eof();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user