mirror of
https://github.com/holub/mame
synced 2025-07-03 00:56:03 +03:00
taito_l : Cleanups (#3224)
* taito_l.cpp : Convert vram banks to address_map_bank_device, Cleanup duplicates * taito_l : Cleanup duplicates * taito_l : Fix compiles
This commit is contained in:
parent
5548bfafa2
commit
5deafe11fb
@ -74,49 +74,10 @@ puzznici note
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
struct
|
||||
{
|
||||
void (taitol_state::*notifier)(int);
|
||||
u32 offset;
|
||||
} const rambank_modify_notifiers[12] =
|
||||
{
|
||||
{ &taitol_state::taitol_chardef14_m, 0x0000 }, // 14
|
||||
{ &taitol_state::taitol_chardef15_m, 0x1000 }, // 15
|
||||
{ &taitol_state::taitol_chardef16_m, 0x2000 }, // 16
|
||||
{ &taitol_state::taitol_chardef17_m, 0x3000 }, // 17
|
||||
|
||||
{ &taitol_state::taitol_bg18_m, 0x8000 }, // 18
|
||||
{ &taitol_state::taitol_bg19_m, 0x9000 }, // 19
|
||||
{ &taitol_state::taitol_char1a_m, 0xa000 }, // 1a
|
||||
{ &taitol_state::taitol_obj1b_m, 0xb000 }, // 1b
|
||||
|
||||
{ &taitol_state::taitol_chardef1c_m, 0x4000 }, // 1c
|
||||
{ &taitol_state::taitol_chardef1d_m, 0x5000 }, // 1d
|
||||
{ &taitol_state::taitol_chardef1e_m, 0x6000 }, // 1e
|
||||
{ &taitol_state::taitol_chardef1f_m, 0x7000 }, // 1f
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
void taitol_state::palette_notifier(int addr)
|
||||
{
|
||||
u8 const *const p = m_palette_ram + (addr & ~1);
|
||||
u8 const byte0 = p[0];
|
||||
u8 const byte1 = p[1];
|
||||
|
||||
// addr &= 0x1ff;
|
||||
|
||||
if (addr > 0x200)
|
||||
logerror("%s:Large palette ? %03x\n", machine().describe_context(), addr);
|
||||
else
|
||||
m_palette->set_pen_color(addr / 2, pal4bit(byte0), pal4bit(byte0 >> 4), pal4bit(byte1));
|
||||
}
|
||||
|
||||
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));
|
||||
@ -133,16 +94,19 @@ void taitol_state::state_register()
|
||||
|
||||
void taitol_2cpu_state::state_register()
|
||||
{
|
||||
if (m_audio_bnk.found())
|
||||
m_audio_bnk->configure_entries(0, m_audio_prg->bytes()/0x4000, m_audio_prg->base(), 0x4000);
|
||||
|
||||
taitol_state::state_register();
|
||||
}
|
||||
|
||||
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_cur_audio_bnk));
|
||||
}
|
||||
|
||||
void champwr_state::state_register()
|
||||
@ -161,10 +125,6 @@ void taitol_1cpu_state::state_register()
|
||||
|
||||
MACHINE_START_MEMBER(taitol_state, taito_l)
|
||||
{
|
||||
save_item(NAME(m_rambanks));
|
||||
save_item(NAME(m_palette_ram));
|
||||
save_item(NAME(m_empty_ram));
|
||||
|
||||
state_register();
|
||||
}
|
||||
|
||||
@ -178,15 +138,11 @@ void taitol_state::taito_machine_reset()
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_cur_rambank[i] = 0x80;
|
||||
m_current_notifier[i] = &taitol_state::palette_notifier;
|
||||
m_current_base[i] = m_palette_ram;
|
||||
m_ram_bnks[i]->set_base(m_current_base[i]);
|
||||
m_ram_bnks[i]->set_bank(m_cur_rambank[i]);
|
||||
}
|
||||
|
||||
m_cur_rombank = 0;
|
||||
m_main_bnk->set_base(&m_main_prg[0]);
|
||||
|
||||
m_gfxdecode->gfx(2)->set_source(m_rambanks);
|
||||
m_main_bnk->set_entry(0);
|
||||
|
||||
m_last_irq_level = 0;
|
||||
m_high = 0;
|
||||
@ -208,8 +164,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_high2 = 0;
|
||||
m_cur_audio_bnk = 1;
|
||||
m_audio_bnk->set_entry(1);
|
||||
}
|
||||
|
||||
void champwr_state::taito_machine_reset()
|
||||
@ -304,7 +262,7 @@ WRITE8_MEMBER(taitol_state::rombankswitch_w)
|
||||
|
||||
//logerror("robs %d, %02x (%04x)\n", offset, data, m_main_cpu->pc());
|
||||
m_cur_rombank = data;
|
||||
m_main_bnk->set_base(&m_main_prg[0x2000 * m_cur_rombank]);
|
||||
m_main_bnk->set_entry(m_cur_rombank);
|
||||
}
|
||||
}
|
||||
|
||||
@ -323,7 +281,7 @@ WRITE8_MEMBER(fhawk_state::rombank2switch_w)
|
||||
//logerror("robs2 %02x (%04x)\n", data, m_main_cpu->pc());
|
||||
|
||||
m_cur_rombank2 = data;
|
||||
m_slave_bnk->set_base(&m_slave_prg[0x4000 * m_cur_rombank2]);
|
||||
m_slave_bnk->set_entry(m_cur_rombank2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -342,25 +300,7 @@ WRITE8_MEMBER(taitol_state::rambankswitch_w)
|
||||
if (m_cur_rambank[offset] != data)
|
||||
{
|
||||
m_cur_rambank[offset] = data;
|
||||
//logerror("rabs %d, %02x (%04x)\n", offset, data, m_main_cpu->pc());
|
||||
if (data >= 0x14 && data <= 0x1f)
|
||||
{
|
||||
data -= 0x14;
|
||||
m_current_notifier[offset] = rambank_modify_notifiers[data].notifier;
|
||||
m_current_base[offset] = m_rambanks + rambank_modify_notifiers[data].offset;
|
||||
}
|
||||
else if (data == 0x80)
|
||||
{
|
||||
m_current_notifier[offset] = &taitol_state::palette_notifier;
|
||||
m_current_base[offset] = m_palette_ram;
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("unknown rambankswitch %d, %02x (%04x)\n", offset, data, m_main_cpu->pc());
|
||||
m_current_notifier[offset] = nullptr;
|
||||
m_current_base[offset] = m_empty_ram;
|
||||
}
|
||||
m_ram_bnks[offset]->set_base(m_current_base[offset]);
|
||||
m_ram_bnks[offset]->set_bank(m_cur_rambank[offset]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -369,36 +309,6 @@ READ8_MEMBER(taitol_state::rambankswitch_r)
|
||||
return m_cur_rambank[offset];
|
||||
}
|
||||
|
||||
void taitol_state::bank_w(address_space &space, offs_t offset, u8 data, int banknum )
|
||||
{
|
||||
if (m_current_base[banknum][offset] != data)
|
||||
{
|
||||
m_current_base[banknum][offset] = data;
|
||||
if (m_current_notifier[banknum])
|
||||
(this->*m_current_notifier[banknum])(offset);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::bank0_w)
|
||||
{
|
||||
bank_w(space, offset, data, 0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::bank1_w)
|
||||
{
|
||||
bank_w(space, offset, data, 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::bank2_w)
|
||||
{
|
||||
bank_w(space, offset, data, 2);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::bank3_w)
|
||||
{
|
||||
bank_w(space, offset, data, 3);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(taitol_state::coin_control_w)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
|
||||
@ -469,11 +379,11 @@ WRITE8_MEMBER(champwr_state::msm5205_volume_w)
|
||||
|
||||
ADDRESS_MAP_START(taitol_state::common_banks_map)
|
||||
AM_RANGE(0x0000, 0x5fff) AM_ROM
|
||||
AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1")
|
||||
AM_RANGE(0xc000, 0xcfff) AM_ROMBANK("bank2") AM_WRITE(bank0_w)
|
||||
AM_RANGE(0xd000, 0xdfff) AM_ROMBANK("bank3") AM_WRITE(bank1_w)
|
||||
AM_RANGE(0xe000, 0xefff) AM_ROMBANK("bank4") AM_WRITE(bank2_w)
|
||||
AM_RANGE(0xf000, 0xfdff) AM_ROMBANK("bank5") AM_WRITE(bank3_w)
|
||||
AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("mainbank")
|
||||
AM_RANGE(0xc000, 0xcfff) AM_DEVICE("rambank1", address_map_bank_device, amap8)
|
||||
AM_RANGE(0xd000, 0xdfff) AM_DEVICE("rambank2", address_map_bank_device, amap8)
|
||||
AM_RANGE(0xe000, 0xefff) AM_DEVICE("rambank3", address_map_bank_device, amap8)
|
||||
AM_RANGE(0xf000, 0xfdff) AM_DEVICE("rambank4", address_map_bank_device, amap8)
|
||||
AM_RANGE(0xfe00, 0xfe03) AM_READWRITE(taitol_bankc_r, taitol_bankc_w)
|
||||
AM_RANGE(0xfe04, 0xfe04) AM_READWRITE(taitol_control_r, taitol_control_w)
|
||||
AM_RANGE(0xff00, 0xff02) AM_READWRITE(irq_adr_r, irq_adr_w)
|
||||
@ -483,6 +393,12 @@ ADDRESS_MAP_START(taitol_state::common_banks_map)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
ADDRESS_MAP_START(taitol_state::tc0090lvc_map)
|
||||
AM_RANGE(0x10000, 0x1ffff) AM_RAM_WRITE(vram_w) AM_SHARE("vram")
|
||||
AM_RANGE(0x80000, 0x801ff) AM_MIRROR(0x00e00) AM_RAM_DEVWRITE("palette", palette_device, write8) AM_SHARE("palette")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
ADDRESS_MAP_START(fhawk_state::fhawk_map)
|
||||
AM_IMPORT_FROM(common_banks_map)
|
||||
AM_RANGE(0x8000, 0x9fff) AM_RAM AM_SHARE("share1")
|
||||
@ -491,7 +407,7 @@ ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(fhawk_state::fhawk_2_map)
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank6")
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("slavebank")
|
||||
AM_RANGE(0xc000, 0xc000) AM_WRITE(rombank2switch_w)
|
||||
AM_RANGE(0xc800, 0xc800) AM_READNOP AM_DEVWRITE("ciu", pc060ha_device, master_port_w)
|
||||
AM_RANGE(0xc801, 0xc801) AM_DEVREADWRITE("ciu", pc060ha_device, master_comm_r, master_comm_w)
|
||||
@ -501,7 +417,7 @@ ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(fhawk_state::fhawk_3_map)
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank7")
|
||||
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("audiobank")
|
||||
AM_RANGE(0x8000, 0x9fff) AM_RAM
|
||||
AM_RANGE(0xe000, 0xe000) AM_READNOP AM_DEVWRITE("ciu", pc060ha_device, slave_port_w)
|
||||
AM_RANGE(0xe001, 0xe001) AM_DEVREADWRITE("ciu", pc060ha_device, slave_comm_r, slave_comm_w)
|
||||
@ -527,12 +443,12 @@ ADDRESS_MAP_END
|
||||
|
||||
WRITE8_MEMBER(taitol_2cpu_state::sound_bankswitch_w)
|
||||
{
|
||||
m_audio_bnk->set_base(&m_audio_prg[(data & 0x03) * 0x4000]);
|
||||
m_audio_bnk->set_entry(data & 0x03);
|
||||
}
|
||||
|
||||
ADDRESS_MAP_START(taitol_2cpu_state::raimais_3_map)
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank7")
|
||||
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("audiobank")
|
||||
AM_RANGE(0xc000, 0xdfff) AM_RAM
|
||||
AM_RANGE(0xe000, 0xe003) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write)
|
||||
AM_RANGE(0xe200, 0xe200) AM_READNOP AM_DEVWRITE("tc0140syt", tc0140syt_device, slave_port_w)
|
||||
@ -553,7 +469,7 @@ ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(champwr_state::champwr_2_map)
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank6")
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("slavebank")
|
||||
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_SHARE("share1")
|
||||
AM_RANGE(0xe000, 0xe007) AM_DEVREADWRITE("tc0220ioc", tc0220ioc_device, read, write)
|
||||
AM_RANGE(0xe008, 0xe00f) AM_READNOP
|
||||
@ -564,7 +480,7 @@ ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(champwr_state::champwr_3_map)
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank7")
|
||||
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("audiobank")
|
||||
AM_RANGE(0x8000, 0x8fff) AM_RAM
|
||||
AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READNOP AM_DEVWRITE("ciu", pc060ha_device, slave_port_w)
|
||||
@ -669,7 +585,7 @@ ADDRESS_MAP_START(taitol_2cpu_state::evilston_2_map)
|
||||
AM_RANGE(0xc000, 0xdfff) AM_RAM
|
||||
AM_RANGE(0xe000, 0xe7ff) AM_DEVREADWRITE("dpram", mb8421_device, left_r, left_w)
|
||||
AM_RANGE(0xe800, 0xe801) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
|
||||
AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("bank7")
|
||||
AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("audiobank")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -1489,7 +1405,7 @@ static const gfx_layout sp2_layout =
|
||||
static const gfx_layout char_layout =
|
||||
{
|
||||
8, 8,
|
||||
1024,
|
||||
0x10000 / (8*4),
|
||||
4,
|
||||
{ 8, 12, 0, 4 },
|
||||
{ 3, 2, 1, 0, 19, 18, 17, 16},
|
||||
@ -1500,27 +1416,32 @@ static const gfx_layout char_layout =
|
||||
|
||||
|
||||
static GFXDECODE_START( taito_l )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, bg2_layout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, sp2_layout, 0, 16 )
|
||||
GFXDECODE_ENTRY( nullptr, 0, char_layout, 0, 16 ) // Ram-based
|
||||
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)
|
||||
{
|
||||
if (m_cur_audio_bnk != (data & 0x03))
|
||||
{
|
||||
int bankaddress;
|
||||
|
||||
m_cur_audio_bnk = data & 0x03;
|
||||
bankaddress = m_cur_audio_bnk * 0x4000;
|
||||
m_audio_bnk->set_base(&m_audio_prg[bankaddress]);
|
||||
//logerror ("YM2203 bank change val=%02x %s\n", m_cur_audio_bnk, machine().describe_context() );
|
||||
}
|
||||
m_audio_bnk->set_entry(data & 0x03);
|
||||
//logerror ("YM2203 bank change val=%02x %s\n", data & 0x03, machine().describe_context() );
|
||||
}
|
||||
|
||||
#define TC0090LVC_BANK_ADD(_tag) \
|
||||
MCFG_DEVICE_ADD(_tag, ADDRESS_MAP_BANK, 0) \
|
||||
MCFG_DEVICE_PROGRAM_MAP(tc0090lvc_map) \
|
||||
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) \
|
||||
MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) \
|
||||
MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(20) \
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000)
|
||||
|
||||
MACHINE_CONFIG_START(taitol_state::l_system_video)
|
||||
TC0090LVC_BANK_ADD("rambank1")
|
||||
TC0090LVC_BANK_ADD("rambank2")
|
||||
TC0090LVC_BANK_ADD("rambank3")
|
||||
TC0090LVC_BANK_ADD("rambank4")
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
@ -1532,6 +1453,7 @@ MACHINE_CONFIG_START(taitol_state::l_system_video)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", taito_l)
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(taitol_state, taito_l)
|
||||
|
||||
@ -2426,11 +2348,13 @@ ROM_END
|
||||
DRIVER_INIT_MEMBER(taitol_1cpu_state, plottinga)
|
||||
{
|
||||
u8 tab[256];
|
||||
u8 *RAM = m_main_prg->base();
|
||||
|
||||
for (unsigned i = 0; i < sizeof(tab); i++)
|
||||
tab[i] = bitswap<8>(i, 0, 1, 2, 3, 4, 5, 6, 7);
|
||||
|
||||
for (unsigned i = 0; i < m_main_prg.length(); i++)
|
||||
m_main_prg[i] = tab[m_main_prg[i]];
|
||||
for (unsigned i = 0; i < m_main_prg->bytes(); i++)
|
||||
RAM[i] = tab[RAM[i]];
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Olivier Galibert
|
||||
#include "machine/74157.h"
|
||||
#include "machine/bankdev.h"
|
||||
#include "machine/timer.h"
|
||||
#include "machine/upd4701.h"
|
||||
#include "sound/msm5205.h"
|
||||
@ -15,10 +16,11 @@ public:
|
||||
, m_main_cpu(*this, "maincpu")
|
||||
, m_upd4701(*this, "upd4701")
|
||||
, m_main_prg(*this, "maincpu")
|
||||
, m_main_bnk(*this, "bank1")
|
||||
, m_ram_bnks(*this, "bank%u", 2)
|
||||
, m_main_bnk(*this, "mainbank")
|
||||
, m_ram_bnks(*this, "rambank%u", 1)
|
||||
, m_gfxdecode(*this, "gfxdecode")
|
||||
, m_palette(*this, "palette")
|
||||
, m_vram(*this, "vram")
|
||||
{
|
||||
}
|
||||
|
||||
@ -28,30 +30,22 @@ public:
|
||||
u8 * m_shared_ram;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg18_tilemap;
|
||||
tilemap_t *m_bg19_tilemap;
|
||||
tilemap_t *m_ch1a_tilemap;
|
||||
u8 m_buff_spriteram[SPRITERAM_SIZE];
|
||||
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 */
|
||||
void (taitol_state::*m_current_notifier[4])(int);
|
||||
u8 *m_current_base[4];
|
||||
|
||||
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;
|
||||
|
||||
/* memory buffers */
|
||||
u8 m_rambanks[0x1000 * 12];
|
||||
u8 m_palette_ram[0x1000];
|
||||
u8 m_empty_ram[0x1000];
|
||||
|
||||
DECLARE_WRITE8_MEMBER(irq_adr_w);
|
||||
DECLARE_READ8_MEMBER(irq_adr_r);
|
||||
DECLARE_WRITE8_MEMBER(irq_enable_w);
|
||||
@ -60,10 +54,6 @@ public:
|
||||
DECLARE_READ8_MEMBER(rombankswitch_r);
|
||||
DECLARE_WRITE8_MEMBER(rambankswitch_w);
|
||||
DECLARE_READ8_MEMBER(rambankswitch_r);
|
||||
DECLARE_WRITE8_MEMBER(bank0_w);
|
||||
DECLARE_WRITE8_MEMBER(bank1_w);
|
||||
DECLARE_WRITE8_MEMBER(bank2_w);
|
||||
DECLARE_WRITE8_MEMBER(bank3_w);
|
||||
DECLARE_WRITE8_MEMBER(coin_control_w);
|
||||
DECLARE_WRITE8_MEMBER(mcu_control_w);
|
||||
DECLARE_READ8_MEMBER(mcu_control_r);
|
||||
@ -71,9 +61,9 @@ public:
|
||||
DECLARE_READ8_MEMBER(taitol_bankc_r);
|
||||
DECLARE_WRITE8_MEMBER(taitol_control_w);
|
||||
DECLARE_READ8_MEMBER(taitol_control_r);
|
||||
TILE_GET_INFO_MEMBER(get_bg18_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_bg19_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_ch1a_tile_info);
|
||||
DECLARE_WRITE8_MEMBER(vram_w);
|
||||
template<int Offset> TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tx_tile_info);
|
||||
DECLARE_MACHINE_START(taito_l);
|
||||
DECLARE_VIDEO_START(taito_l);
|
||||
DECLARE_MACHINE_RESET(taito_l);
|
||||
@ -81,35 +71,24 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(screen_vblank_taitol);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(vbl_interrupt);
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
void taitol_chardef14_m(int offset);
|
||||
void taitol_chardef15_m(int offset);
|
||||
void taitol_chardef16_m(int offset);
|
||||
void taitol_chardef17_m(int offset);
|
||||
void taitol_chardef1c_m(int offset);
|
||||
void taitol_chardef1d_m(int offset);
|
||||
void taitol_chardef1e_m(int offset);
|
||||
void taitol_chardef1f_m(int offset);
|
||||
void taitol_bg18_m(int offset);
|
||||
void taitol_bg19_m(int offset);
|
||||
void taitol_char1a_m(int offset);
|
||||
void taitol_obj1b_m(int offset);
|
||||
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void palette_notifier(int addr);
|
||||
void bank_w(address_space &space, offs_t offset, u8 data, int banknum);
|
||||
void l_system_video(machine_config &config);
|
||||
|
||||
void common_banks_map(address_map &map);
|
||||
void tc0090lvc_map(address_map &map);
|
||||
protected:
|
||||
virtual void state_register();
|
||||
virtual void taito_machine_reset();
|
||||
|
||||
required_device<cpu_device> m_main_cpu;
|
||||
optional_device<upd4701_device> m_upd4701;
|
||||
required_region_ptr<u8> m_main_prg;
|
||||
required_memory_bank m_main_bnk;
|
||||
required_memory_bank_array<4> m_ram_bnks;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<cpu_device> m_main_cpu;
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
@ -120,7 +99,7 @@ public:
|
||||
: taitol_state(mconfig, type, tag)
|
||||
, m_audio_cpu(*this, "audiocpu")
|
||||
, m_audio_prg(*this, "audiocpu")
|
||||
, m_audio_bnk(*this, "bank7")
|
||||
, m_audio_bnk(*this, "audiobank")
|
||||
{
|
||||
}
|
||||
|
||||
@ -141,7 +120,7 @@ protected:
|
||||
virtual void taito_machine_reset() override;
|
||||
|
||||
required_device<cpu_device> m_audio_cpu;
|
||||
required_region_ptr<u8> m_audio_prg;
|
||||
required_memory_region m_audio_prg;
|
||||
optional_memory_bank m_audio_bnk;
|
||||
};
|
||||
|
||||
@ -152,10 +131,9 @@ public:
|
||||
fhawk_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: taitol_2cpu_state(mconfig, type, tag)
|
||||
, m_slave_prg(*this, "slave")
|
||||
, m_slave_bnk(*this, "bank6")
|
||||
, m_slave_bnk(*this, "slavebank")
|
||||
, m_cur_rombank2(0)
|
||||
, m_high2(0)
|
||||
, m_cur_audio_bnk(0)
|
||||
{
|
||||
}
|
||||
|
||||
@ -171,12 +149,11 @@ protected:
|
||||
virtual void state_register() override;
|
||||
virtual void taito_machine_reset() override;
|
||||
|
||||
required_region_ptr<u8> m_slave_prg;
|
||||
required_memory_region m_slave_prg;
|
||||
required_memory_bank m_slave_bnk;
|
||||
|
||||
u8 m_cur_rombank2;
|
||||
u8 m_high2;
|
||||
u8 m_cur_audio_bnk;
|
||||
};
|
||||
|
||||
|
||||
|
@ -4,16 +4,19 @@
|
||||
#include "includes/taito_l.h"
|
||||
#include "screen.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Callbacks for the TileMap code
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
TILE_GET_INFO_MEMBER(taitol_state::get_bg18_tile_info)
|
||||
template<int Offset>
|
||||
TILE_GET_INFO_MEMBER(taitol_state::get_tile_info)
|
||||
{
|
||||
int attr = m_rambanks[2 * tile_index + 0x8000 + 1];
|
||||
int code = m_rambanks[2 * tile_index + 0x8000]
|
||||
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);
|
||||
@ -24,24 +27,10 @@ TILE_GET_INFO_MEMBER(taitol_state::get_bg18_tile_info)
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(taitol_state::get_bg19_tile_info)
|
||||
TILE_GET_INFO_MEMBER(taitol_state::get_tx_tile_info)
|
||||
{
|
||||
int attr = m_rambanks[2 * tile_index + 0x9000 + 1];
|
||||
int code = m_rambanks[2 * tile_index + 0x9000]
|
||||
| ((attr & 0x03) << 8)
|
||||
| ((m_bankc[(attr & 0xc) >> 2]) << 10)
|
||||
| (m_horshoes_gfxbank << 12);
|
||||
|
||||
SET_TILE_INFO_MEMBER(0,
|
||||
code,
|
||||
(attr & 0xf0) >> 4,
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(taitol_state::get_ch1a_tile_info)
|
||||
{
|
||||
int attr = m_rambanks[2 * tile_index + 0xa000 + 1];
|
||||
int code = m_rambanks[2 * tile_index + 0xa000] | ((attr & 0x01) << 8) | ((attr & 0x04) << 7);
|
||||
int attr = m_vram[2 * tile_index + 0xa000 + 1];
|
||||
int code = m_vram[2 * tile_index + 0xa000] | ((attr & 0x07) << 8);
|
||||
|
||||
SET_TILE_INFO_MEMBER(2,
|
||||
code,
|
||||
@ -59,21 +48,24 @@ TILE_GET_INFO_MEMBER(taitol_state::get_ch1a_tile_info)
|
||||
|
||||
VIDEO_START_MEMBER(taitol_state, taito_l)
|
||||
{
|
||||
m_buff_spriteram = make_unique_clear<u8[]>(SPRITERAM_SIZE);
|
||||
int i;
|
||||
|
||||
m_bg18_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(taitol_state::get_bg18_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
m_bg19_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(taitol_state::get_bg19_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
m_ch1a_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(taitol_state::get_ch1a_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
m_bg_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(taitol_state::get_tile_info<0x8000>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
m_bg_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(taitol_state::get_tile_info<0x9000>),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(taitol_state::get_tx_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
|
||||
m_bg18_tilemap->set_transparent_pen(0);
|
||||
m_ch1a_tilemap->set_transparent_pen(0);
|
||||
m_bg_tilemap[0]->set_transparent_pen(0);
|
||||
m_tx_tilemap->set_transparent_pen(0);
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
m_palette->set_pen_color(i, rgb_t(0, 0, 0));
|
||||
|
||||
m_ch1a_tilemap->set_scrolldx(-8, -8);
|
||||
m_bg18_tilemap->set_scrolldx(28, -11);
|
||||
m_bg19_tilemap->set_scrolldx(38, -21);
|
||||
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.get()), SPRITERAM_SIZE);
|
||||
}
|
||||
|
||||
|
||||
@ -90,8 +82,8 @@ WRITE8_MEMBER(horshoes_state::bankg_w)
|
||||
{
|
||||
m_horshoes_gfxbank = data;
|
||||
|
||||
m_bg18_tilemap->mark_all_dirty();
|
||||
m_bg19_tilemap->mark_all_dirty();
|
||||
for (int i = 0; i < 2; i++)
|
||||
m_bg_tilemap[i]->mark_all_dirty();
|
||||
}
|
||||
}
|
||||
|
||||
@ -102,8 +94,8 @@ WRITE8_MEMBER(taitol_state::taitol_bankc_w)
|
||||
m_bankc[offset] = data;
|
||||
// logerror("Bankc %d, %02x (%s)\n", offset, data, m_maincpu->pc());
|
||||
|
||||
m_bg18_tilemap->mark_all_dirty();
|
||||
m_bg19_tilemap->mark_all_dirty();
|
||||
for (int i = 0; i < 2; i++)
|
||||
m_bg_tilemap[i]->mark_all_dirty();
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,73 +131,30 @@ READ8_MEMBER(taitol_state::taitol_control_r)
|
||||
return m_cur_ctrl;
|
||||
}
|
||||
|
||||
void taitol_state::taitol_chardef14_m( int offset )
|
||||
WRITE8_MEMBER(taitol_state::vram_w)
|
||||
{
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32 + 0);
|
||||
}
|
||||
// TODO : 0x10000-0x13fff Unused?
|
||||
if ((offset & 0xc000) == 0)
|
||||
return;
|
||||
|
||||
void taitol_state::taitol_chardef15_m( int offset )
|
||||
{
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32 + 128);
|
||||
}
|
||||
if((m_vram[offset] & mem_mask) == (data & mem_mask))
|
||||
return;
|
||||
|
||||
void taitol_state::taitol_chardef16_m( int offset )
|
||||
{
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32 + 256);
|
||||
}
|
||||
|
||||
void taitol_state::taitol_chardef17_m( int offset )
|
||||
{
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32 + 384);
|
||||
}
|
||||
|
||||
void taitol_state::taitol_chardef1c_m( int offset )
|
||||
{
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32 + 512);
|
||||
}
|
||||
|
||||
void taitol_state::taitol_chardef1d_m( int offset )
|
||||
{
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32 + 640);
|
||||
}
|
||||
|
||||
void taitol_state::taitol_chardef1e_m( int offset )
|
||||
{
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32 + 768);
|
||||
}
|
||||
|
||||
void taitol_state::taitol_chardef1f_m( int offset )
|
||||
{
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32 + 896);
|
||||
}
|
||||
|
||||
void taitol_state::taitol_bg18_m( int offset )
|
||||
{
|
||||
m_bg18_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
void taitol_state::taitol_bg19_m( int offset )
|
||||
{
|
||||
m_bg19_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
void taitol_state::taitol_char1a_m( int offset )
|
||||
{
|
||||
m_ch1a_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
void taitol_state::taitol_obj1b_m( int offset )
|
||||
{
|
||||
#if 0
|
||||
if (offset >= 0x3f0 && offset <= 0x3ff)
|
||||
COMBINE_DATA(&m_vram[offset]);
|
||||
m_gfxdecode->gfx(2)->mark_dirty(offset / 32);
|
||||
switch (offset & 0xf000)
|
||||
{
|
||||
/* scroll, handled in vh-screenrefresh */
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Display refresh
|
||||
@ -271,36 +220,36 @@ uint32_t taitol_state::screen_update_taitol(screen_device &screen, bitmap_ind16
|
||||
{
|
||||
int dx, dy;
|
||||
|
||||
dx = m_rambanks[0xb3f4] | (m_rambanks[0xb3f5] << 8);
|
||||
dx = m_vram[0xb3f4] | (m_vram[0xb3f5] << 8);
|
||||
if (m_flipscreen)
|
||||
dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf;
|
||||
dy = m_rambanks[0xb3f6];
|
||||
dy = m_vram[0xb3f6];
|
||||
|
||||
m_bg18_tilemap->set_scrollx(0, -dx);
|
||||
m_bg18_tilemap->set_scrolly(0, -dy);
|
||||
m_bg_tilemap[0]->set_scrollx(0, -dx);
|
||||
m_bg_tilemap[0]->set_scrolly(0, -dy);
|
||||
|
||||
dx = m_rambanks[0xb3fc] | (m_rambanks[0xb3fd] << 8);
|
||||
dx = m_vram[0xb3fc] | (m_vram[0xb3fd] << 8);
|
||||
if (m_flipscreen)
|
||||
dx = ((dx & 0xfffc) | ((dx - 3) & 0x0003)) ^ 0xf;
|
||||
dy = m_rambanks[0xb3fe];
|
||||
dy = m_vram[0xb3fe];
|
||||
|
||||
m_bg19_tilemap->set_scrollx(0, -dx);
|
||||
m_bg19_tilemap->set_scrolly(0, -dy);
|
||||
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_bg19_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
m_bg_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
|
||||
|
||||
if (m_cur_ctrl & 0x08) /* sprites always over BG1 */
|
||||
m_bg18_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
|
||||
else /* split priority */
|
||||
m_bg18_tilemap->draw(screen, bitmap, cliprect, 0,1);
|
||||
m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,1);
|
||||
|
||||
draw_sprites(screen, bitmap, cliprect);
|
||||
|
||||
m_ch1a_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
}
|
||||
else
|
||||
bitmap.fill(m_palette->pen(0), cliprect);
|
||||
@ -314,8 +263,6 @@ WRITE_LINE_MEMBER(taitol_state::screen_vblank_taitol)
|
||||
// rising edge
|
||||
if (state)
|
||||
{
|
||||
uint8_t *spriteram = m_rambanks + 0xb000;
|
||||
|
||||
memcpy(m_buff_spriteram, spriteram, SPRITERAM_SIZE);
|
||||
std::copy(&m_vram[0xb000], &m_vram[0xb000+SPRITERAM_SIZE], &m_buff_spriteram[0]);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user