mirror of
https://github.com/holub/mame
synced 2025-06-05 20:33:45 +03:00
taito/flstory.cpp: Use single-pass sprite drawing, and moved games with MCU to a derived class. (#11858)
This commit is contained in:
parent
27aa4f6409
commit
273cb34436
@ -43,7 +43,6 @@ public:
|
||||
m_workram(*this, "workram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_bmcu(*this, "bmcu"),
|
||||
m_msm(*this, "msm"),
|
||||
m_ay(*this, "aysnd"),
|
||||
m_ta7630(*this, "ta7630"),
|
||||
@ -55,17 +54,12 @@ public:
|
||||
m_extraio1(*this, "EXTRA_P1")
|
||||
{ }
|
||||
|
||||
void flstory(machine_config &config) ATTR_COLD;
|
||||
void rumba(machine_config &config) ATTR_COLD;
|
||||
void onna34ro(machine_config &config) ATTR_COLD;
|
||||
void victnine(machine_config &config) ATTR_COLD;
|
||||
void onna34ro_mcu(machine_config &config) ATTR_COLD;
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override ATTR_COLD;
|
||||
virtual void machine_reset() override ATTR_COLD;
|
||||
|
||||
private:
|
||||
// memory pointers
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
required_shared_ptr<uint8_t> m_spriteram;
|
||||
@ -75,7 +69,6 @@ private:
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
optional_device<taito68705_mcu_device> m_bmcu;
|
||||
required_device<msm5232_device> m_msm;
|
||||
required_device<ay8910_device> m_ay;
|
||||
required_device<ta7630_device> m_ta7630;
|
||||
@ -103,39 +96,62 @@ private:
|
||||
|
||||
uint8_t snd_flag_r();
|
||||
void snd_reset_w(uint8_t data);
|
||||
uint8_t flstory_mcu_status_r();
|
||||
uint8_t victnine_mcu_status_r();
|
||||
void flstory_videoram_w(offs_t offset, uint8_t data);
|
||||
void flstory_palette_w(offs_t offset, uint8_t data);
|
||||
uint8_t flstory_palette_r(offs_t offset);
|
||||
void flstory_gfxctrl_w(uint8_t data);
|
||||
uint8_t victnine_gfxctrl_r();
|
||||
void victnine_gfxctrl_w(uint8_t data);
|
||||
void flstory_scrlram_w(offs_t offset, uint8_t data);
|
||||
void sound_control_0_w(uint8_t data);
|
||||
void sound_control_1_w(uint8_t data);
|
||||
void sound_control_2_w(uint8_t data);
|
||||
void sound_control_3_w(uint8_t data);
|
||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
TILE_GET_INFO_MEMBER(victnine_get_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_rumba_tile_info);
|
||||
DECLARE_VIDEO_START(flstory);
|
||||
DECLARE_VIDEO_START(victnine);
|
||||
DECLARE_VIDEO_START(rumba);
|
||||
uint32_t screen_update_flstory(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_victnine(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_rumba(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void flstory_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri);
|
||||
void victnine_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void flstory_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void common(machine_config &config) ATTR_COLD;
|
||||
|
||||
void base_map(address_map &map) ATTR_COLD;
|
||||
void flstory_map(address_map &map) ATTR_COLD;
|
||||
void onna34ro_map(address_map &map) ATTR_COLD;
|
||||
void sound_map(address_map &map) ATTR_COLD;
|
||||
};
|
||||
|
||||
|
||||
class flstory_mcu_state : public flstory_state
|
||||
{
|
||||
public:
|
||||
flstory_mcu_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
flstory_state(mconfig, type, tag),
|
||||
m_bmcu(*this, "bmcu")
|
||||
{ }
|
||||
|
||||
void flstory(machine_config &config) ATTR_COLD;
|
||||
void rumba(machine_config &config) ATTR_COLD;
|
||||
void victnine(machine_config &config) ATTR_COLD;
|
||||
void onna34ro_mcu(machine_config &config) ATTR_COLD;
|
||||
|
||||
private:
|
||||
// memory pointers
|
||||
|
||||
// devices
|
||||
required_device<taito68705_mcu_device> m_bmcu;
|
||||
|
||||
uint8_t flstory_mcu_status_r();
|
||||
uint8_t victnine_mcu_status_r();
|
||||
uint8_t victnine_gfxctrl_r();
|
||||
void victnine_gfxctrl_w(uint8_t data);
|
||||
TILE_GET_INFO_MEMBER(victnine_get_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_rumba_tile_info);
|
||||
DECLARE_VIDEO_START(victnine);
|
||||
DECLARE_VIDEO_START(rumba);
|
||||
uint32_t screen_update_victnine(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_rumba(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void victnine_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void flstory_map(address_map &map) ATTR_COLD;
|
||||
void onna34ro_mcu_map(address_map &map) ATTR_COLD;
|
||||
void rumba_map(address_map &map) ATTR_COLD;
|
||||
void sound_map(address_map &map) ATTR_COLD;
|
||||
void victnine_map(address_map &map) ATTR_COLD;
|
||||
};
|
||||
|
||||
@ -146,32 +162,32 @@ private:
|
||||
|
||||
TILE_GET_INFO_MEMBER(flstory_state::get_tile_info)
|
||||
{
|
||||
int const code = m_videoram[tile_index * 2];
|
||||
int const attr = m_videoram[tile_index * 2 + 1];
|
||||
int const tile_number = code + ((attr & 0xc0) << 2) + 0x400 + 0x800 * m_char_bank;
|
||||
int const flags = TILE_FLIPYX((attr & 0x18) >> 3);
|
||||
uint8_t const code = m_videoram[tile_index * 2];
|
||||
uint8_t const attr = m_videoram[tile_index * 2 + 1];
|
||||
uint32_t const tile_number = code + ((attr & 0xc0) << 2) + 0x400 + 0x800 * m_char_bank;
|
||||
uint8_t const flags = TILE_FLIPYX((attr & 0x18) >> 3);
|
||||
|
||||
tileinfo.category = BIT(attr, 5);
|
||||
tileinfo.group = BIT(attr, 5);
|
||||
tileinfo.set(0, tile_number, attr & 0x0f, flags);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(flstory_state::victnine_get_tile_info)
|
||||
TILE_GET_INFO_MEMBER(flstory_mcu_state::victnine_get_tile_info)
|
||||
{
|
||||
int const code = m_videoram[tile_index * 2];
|
||||
int const attr = m_videoram[tile_index * 2 + 1];
|
||||
int const tile_number = ((attr & 0x38) << 5) + code;
|
||||
int const flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0);
|
||||
uint8_t const code = m_videoram[tile_index * 2];
|
||||
uint8_t const attr = m_videoram[tile_index * 2 + 1];
|
||||
uint32_t const tile_number = ((attr & 0x38) << 5) + code;
|
||||
uint8_t const flags = (BIT(attr, 6) ? TILE_FLIPX : 0) | (BIT(attr, 7) ? TILE_FLIPY : 0);
|
||||
|
||||
tileinfo.set(0, tile_number, attr & 0x07, flags);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(flstory_state::get_rumba_tile_info)
|
||||
TILE_GET_INFO_MEMBER(flstory_mcu_state::get_rumba_tile_info)
|
||||
{
|
||||
int const code = m_videoram[tile_index * 2];
|
||||
int const attr = m_videoram[tile_index * 2 + 1];
|
||||
int const tile_number = code + ((attr & 0xc0) << 2) + 0x400 + 0x800 * m_char_bank;
|
||||
int const col = (attr & 0x0f);
|
||||
uint8_t const code = m_videoram[tile_index * 2];
|
||||
uint8_t const attr = m_videoram[tile_index * 2 + 1];
|
||||
uint32_t const tile_number = code + ((attr & 0xc0) << 2) + 0x400 + 0x800 * m_char_bank;
|
||||
uint32_t const col = (attr & 0x0f);
|
||||
|
||||
tileinfo.category = BIT(attr, 5);
|
||||
tileinfo.group = BIT(attr, 5);
|
||||
@ -195,9 +211,9 @@ VIDEO_START_MEMBER(flstory_state,flstory)
|
||||
save_pointer(NAME(m_paletteram_ext), m_palette->entries());
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(flstory_state,rumba)
|
||||
VIDEO_START_MEMBER(flstory_mcu_state,rumba)
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(flstory_state::get_rumba_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(flstory_mcu_state::get_rumba_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
// m_bg_tilemap->set_transparent_pen(15);
|
||||
m_bg_tilemap->set_transmask(0, 0x3fff, 0xc000); /* split type 0 has pens 0-13 transparent in front half */
|
||||
m_bg_tilemap->set_transmask(1, 0x8000, 0x7fff); /* split type 1 has pen 15 transparent in front half */
|
||||
@ -212,9 +228,9 @@ VIDEO_START_MEMBER(flstory_state,rumba)
|
||||
save_pointer(NAME(m_paletteram_ext), m_palette->entries());
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(flstory_state,victnine)
|
||||
VIDEO_START_MEMBER(flstory_mcu_state,victnine)
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(flstory_state::victnine_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(flstory_mcu_state::victnine_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
m_bg_tilemap->set_scroll_cols(32);
|
||||
|
||||
m_paletteram = make_unique_clear<uint8_t []>(m_palette->entries());
|
||||
@ -252,7 +268,7 @@ void flstory_state::flstory_gfxctrl_w(uint8_t data)
|
||||
{
|
||||
m_gfxctrl = data;
|
||||
|
||||
flip_screen_set(~data & 0x01);
|
||||
flip_screen_set(BIT(~data, 0));
|
||||
if (m_char_bank != ((data & 0x10) >> 4))
|
||||
{
|
||||
m_char_bank = (data & 0x10) >> 4;
|
||||
@ -261,19 +277,19 @@ void flstory_state::flstory_gfxctrl_w(uint8_t data)
|
||||
m_palette_bank = (data & 0x20) >> 5;
|
||||
}
|
||||
|
||||
uint8_t flstory_state::victnine_gfxctrl_r()
|
||||
uint8_t flstory_mcu_state::victnine_gfxctrl_r()
|
||||
{
|
||||
return m_gfxctrl;
|
||||
}
|
||||
|
||||
void flstory_state::victnine_gfxctrl_w(uint8_t data)
|
||||
void flstory_mcu_state::victnine_gfxctrl_w(uint8_t data)
|
||||
{
|
||||
m_gfxctrl = data;
|
||||
|
||||
m_palette_bank = (data & 0x20) >> 5;
|
||||
|
||||
if (data & 0x04)
|
||||
flip_screen_set(data & 0x01);
|
||||
if (BIT(data, 2))
|
||||
flip_screen_set(BIT(data, 0));
|
||||
}
|
||||
|
||||
void flstory_state::flstory_scrlram_w(offs_t offset, uint8_t data)
|
||||
@ -283,117 +299,116 @@ void flstory_state::flstory_scrlram_w(offs_t offset, uint8_t data)
|
||||
}
|
||||
|
||||
|
||||
void flstory_state::flstory_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri )
|
||||
void flstory_state::flstory_draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int flip = flip_screen();
|
||||
bool const flip = flip_screen();
|
||||
|
||||
for (int i = 0; i < 0x20; i++)
|
||||
for (int i = 0x1f; i >= 0; i--)
|
||||
{
|
||||
int pr = m_spriteram[m_spriteram.bytes() - 1 - i];
|
||||
int offs = (pr & 0x1f) * 4;
|
||||
uint8_t const pr = m_spriteram[m_spriteram.bytes() - 1 - i];
|
||||
uint32_t const offs = (pr & 0x1f) * 4;
|
||||
|
||||
if ((pr & 0x80) == pri)
|
||||
uint32_t const pri_mask = BIT(pr, 7) ? GFX_PMASK_8 : (GFX_PMASK_8 | GFX_PMASK_4);
|
||||
|
||||
uint32_t const code = m_spriteram[offs + 2] + ((m_spriteram[offs + 1] & 0x30) << 4);
|
||||
int sx = m_spriteram[offs + 3];
|
||||
int sy = m_spriteram[offs + 0];
|
||||
|
||||
bool flipx = BIT(m_spriteram[offs + 1], 6);
|
||||
bool flipy = BIT(m_spriteram[offs + 1], 7);
|
||||
|
||||
if (flip)
|
||||
{
|
||||
int code, sx, sy, flipx, flipy;
|
||||
sx = (240 - sx) & 0xff;
|
||||
sy = sy - 1;
|
||||
flipx = !flipx;
|
||||
flipy = !flipy;
|
||||
}
|
||||
else
|
||||
sy = 240 - sy - 1;
|
||||
|
||||
code = m_spriteram[offs + 2] + ((m_spriteram[offs + 1] & 0x30) << 4);
|
||||
sx = m_spriteram[offs + 3];
|
||||
sy = m_spriteram[offs + 0];
|
||||
|
||||
flipx = ((m_spriteram[offs + 1] & 0x40) >> 6);
|
||||
flipy = ((m_spriteram[offs + 1] & 0x80) >> 7);
|
||||
|
||||
if (flip)
|
||||
{
|
||||
sx = (240 - sx) & 0xff ;
|
||||
sy = sy - 1 ;
|
||||
flipx = !flipx;
|
||||
flipy = !flipy;
|
||||
}
|
||||
else
|
||||
sy = 240 - sy - 1 ;
|
||||
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
|
||||
m_gfxdecode->gfx(1)->prio_transpen(bitmap, cliprect,
|
||||
code,
|
||||
m_spriteram[offs + 1] & 0x0f,
|
||||
flipx, flipy,
|
||||
sx, sy,
|
||||
screen.priority(), pri_mask, 15);
|
||||
/* wrap around */
|
||||
if (sx > 240)
|
||||
m_gfxdecode->gfx(1)->prio_transpen(bitmap, cliprect,
|
||||
code,
|
||||
m_spriteram[offs + 1] & 0x0f,
|
||||
flipx,flipy,
|
||||
sx,sy,15);
|
||||
/* wrap around */
|
||||
if (sx > 240)
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
|
||||
code,
|
||||
m_spriteram[offs + 1] & 0x0f,
|
||||
flipx,flipy,
|
||||
sx-256,sy,15);
|
||||
}
|
||||
flipx, flipy,
|
||||
sx-256, sy,
|
||||
screen.priority(), pri_mask, 15);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t flstory_state::screen_update_flstory(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER1, 0);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 1 | TILEMAP_DRAW_LAYER1, 0);
|
||||
flstory_draw_sprites(bitmap, cliprect, 0x00);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER0, 0);
|
||||
flstory_draw_sprites(bitmap, cliprect, 0x80);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 1 | TILEMAP_DRAW_LAYER0, 0);
|
||||
screen.priority().fill(0, cliprect);
|
||||
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER1, 1);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 1 | TILEMAP_DRAW_LAYER1, 2);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER0, 4);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 1 | TILEMAP_DRAW_LAYER0, 8);
|
||||
flstory_draw_sprites(screen, bitmap, cliprect);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void flstory_state::victnine_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
void flstory_mcu_state::victnine_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int flip = flip_screen();
|
||||
bool const flip = flip_screen();
|
||||
|
||||
for (int i = 0; i < 0x20; i++)
|
||||
{
|
||||
int pr = m_spriteram[m_spriteram.bytes() - 1 - i];
|
||||
int offs = (pr & 0x1f) * 4;
|
||||
uint8_t const pr = m_spriteram[m_spriteram.bytes() - 1 - i];
|
||||
uint32_t const offs = (pr & 0x1f) * 4;
|
||||
|
||||
//if ((pr & 0x80) == pri)
|
||||
{
|
||||
int code, sx, sy, flipx, flipy;
|
||||
uint32_t const code = m_spriteram[offs + 2] + ((m_spriteram[offs + 1] & 0x20) << 3);
|
||||
int sx = m_spriteram[offs + 3];
|
||||
int sy = m_spriteram[offs + 0];
|
||||
|
||||
code = m_spriteram[offs + 2] + ((m_spriteram[offs + 1] & 0x20) << 3);
|
||||
sx = m_spriteram[offs + 3];
|
||||
sy = m_spriteram[offs + 0];
|
||||
|
||||
flipx = ((m_spriteram[offs + 1] & 0x40) >> 6);
|
||||
flipy = ((m_spriteram[offs + 1] & 0x80) >> 7);
|
||||
bool flipx = BIT(m_spriteram[offs + 1], 6);
|
||||
bool flipy = BIT(m_spriteram[offs + 1], 7);
|
||||
|
||||
if (flip)
|
||||
{
|
||||
sx = (240 - sx + 1) & 0xff ;
|
||||
sy = sy + 1 ;
|
||||
sx = (240 - sx + 1) & 0xff;
|
||||
sy = sy + 1;
|
||||
flipx = !flipx;
|
||||
flipy = !flipy;
|
||||
}
|
||||
else
|
||||
sy = 240 - sy + 1 ;
|
||||
sy = 240 - sy + 1;
|
||||
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
|
||||
code,
|
||||
m_spriteram[offs + 1] & 0x0f,
|
||||
flipx,flipy,
|
||||
sx,sy,15);
|
||||
flipx, flipy,
|
||||
sx, sy, 15);
|
||||
/* wrap around */
|
||||
if (sx > 240)
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
|
||||
code,
|
||||
m_spriteram[offs + 1] & 0x0f,
|
||||
flipx,flipy,
|
||||
sx-256,sy,15);
|
||||
flipx, flipy,
|
||||
sx - 256, sy, 15);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t flstory_state::screen_update_victnine(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t flstory_mcu_state::screen_update_victnine(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
victnine_draw_sprites(bitmap, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t flstory_state::screen_update_rumba(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t flstory_mcu_state::screen_update_rumba(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER1, 0);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 1 | TILEMAP_DRAW_LAYER1, 0);
|
||||
@ -415,7 +430,7 @@ void flstory_state::snd_reset_w(uint8_t data)
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1 ) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
uint8_t flstory_state::flstory_mcu_status_r()
|
||||
uint8_t flstory_mcu_state::flstory_mcu_status_r()
|
||||
{
|
||||
// bit 0 = when 1, MCU is ready to receive data from main CPU
|
||||
// bit 1 = when 1, MCU has sent data to the main CPU
|
||||
@ -425,7 +440,7 @@ uint8_t flstory_state::flstory_mcu_status_r()
|
||||
}
|
||||
|
||||
|
||||
uint8_t flstory_state::victnine_mcu_status_r()
|
||||
uint8_t flstory_mcu_state::victnine_mcu_status_r()
|
||||
{
|
||||
uint8_t ret = flstory_mcu_status_r() & 0x03;
|
||||
ret |= m_extraio1->read() & 0xfc;
|
||||
@ -464,15 +479,15 @@ void flstory_state::base_map(address_map &map)
|
||||
map(0xe000, 0xe7ff).mirror(0x1800).ram().share(m_workram);
|
||||
}
|
||||
|
||||
void flstory_state::flstory_map(address_map &map)
|
||||
void flstory_mcu_state::flstory_map(address_map &map)
|
||||
{
|
||||
base_map(map);
|
||||
map(0xd000, 0xd000).rw(m_bmcu, FUNC(taito68705_mcu_device::data_r), FUNC(taito68705_mcu_device::data_w));
|
||||
|
||||
map(0xd805, 0xd805).r(FUNC(flstory_state::flstory_mcu_status_r));
|
||||
map(0xd805, 0xd805).r(FUNC(flstory_mcu_state::flstory_mcu_status_r));
|
||||
// map(0xda00, 0xda00).writeonly();
|
||||
map(0xdcc0, 0xdcff).ram(); // unknown
|
||||
map(0xdf03, 0xdf03).w(FUNC(flstory_state::flstory_gfxctrl_w));
|
||||
map(0xdf03, 0xdf03).w(FUNC(flstory_mcu_state::flstory_gfxctrl_w));
|
||||
}
|
||||
|
||||
void flstory_state::onna34ro_map(address_map &map)
|
||||
@ -485,34 +500,34 @@ void flstory_state::onna34ro_map(address_map &map)
|
||||
map(0xdf03, 0xdf03).w(FUNC(flstory_state::flstory_gfxctrl_w));
|
||||
}
|
||||
|
||||
void flstory_state::onna34ro_mcu_map(address_map &map)
|
||||
void flstory_mcu_state::onna34ro_mcu_map(address_map &map)
|
||||
{
|
||||
onna34ro_map(map);
|
||||
map(0xd000, 0xd000).rw(m_bmcu, FUNC(taito68705_mcu_device::data_r), FUNC(taito68705_mcu_device::data_w));
|
||||
map(0xd805, 0xd805).r(FUNC(flstory_state::flstory_mcu_status_r));
|
||||
map(0xd805, 0xd805).r(FUNC(flstory_mcu_state::flstory_mcu_status_r));
|
||||
}
|
||||
|
||||
void flstory_state::victnine_map(address_map &map)
|
||||
void flstory_mcu_state::victnine_map(address_map &map)
|
||||
{
|
||||
base_map(map);
|
||||
map(0xd000, 0xd000).rw(m_bmcu, FUNC(taito68705_mcu_device::data_r), FUNC(taito68705_mcu_device::data_w));
|
||||
|
||||
map(0xd805, 0xd805).r(FUNC(flstory_state::victnine_mcu_status_r));
|
||||
map(0xd805, 0xd805).r(FUNC(flstory_mcu_state::victnine_mcu_status_r));
|
||||
map(0xd807, 0xd807).portr("EXTRA_P2");
|
||||
// map(0xda00, 0xda00).writeonly();
|
||||
map(0xdce0, 0xdce0).rw(FUNC(flstory_state::victnine_gfxctrl_r), FUNC(flstory_state::victnine_gfxctrl_w));
|
||||
map(0xdce0, 0xdce0).rw(FUNC(flstory_mcu_state::victnine_gfxctrl_r), FUNC(flstory_mcu_state::victnine_gfxctrl_w));
|
||||
map(0xdce1, 0xdce1).nopw(); // unknown
|
||||
}
|
||||
|
||||
void flstory_state::rumba_map(address_map &map)
|
||||
void flstory_mcu_state::rumba_map(address_map &map)
|
||||
{
|
||||
base_map(map);
|
||||
map(0xd000, 0xd000).rw(m_bmcu, FUNC(taito68705_mcu_device::data_r), FUNC(taito68705_mcu_device::data_w));
|
||||
|
||||
map(0xd805, 0xd805).r(FUNC(flstory_state::flstory_mcu_status_r));
|
||||
map(0xd805, 0xd805).r(FUNC(flstory_mcu_state::flstory_mcu_status_r));
|
||||
map(0xd807, 0xd807).portr("EXTRA_P2");
|
||||
// map(0xda00, 0xda00).writeonly();
|
||||
map(0xdce0, 0xdce0).rw(FUNC(flstory_state::victnine_gfxctrl_r), FUNC(flstory_state::victnine_gfxctrl_w));
|
||||
map(0xdce0, 0xdce0).rw(FUNC(flstory_mcu_state::victnine_gfxctrl_r), FUNC(flstory_mcu_state::victnine_gfxctrl_w));
|
||||
// map(0xdce1, 0xdce1).nopw(); // unknown
|
||||
}
|
||||
|
||||
@ -1083,8 +1098,8 @@ static const gfx_layout spritelayout =
|
||||
};
|
||||
|
||||
static GFXDECODE_START( gfx_flstory )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 256, 16 )
|
||||
GFXDECODE_ENTRY( "tiles", 0, charlayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "tiles", 0, spritelayout, 256, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
@ -1147,9 +1162,9 @@ void flstory_state::common(machine_config &config)
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
|
||||
GENERIC_LATCH_8(config, m_soundlatch);
|
||||
m_soundlatch->data_pending_callback().set("soundnmi", FUNC(input_merger_device::in_w<0>));
|
||||
m_soundlatch->data_pending_callback().set(m_soundnmi, FUNC(input_merger_device::in_w<0>));
|
||||
|
||||
INPUT_MERGER_ALL_HIGH(config, "soundnmi").output_handler().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
||||
INPUT_MERGER_ALL_HIGH(config, m_soundnmi).output_handler().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
||||
|
||||
GENERIC_LATCH_8(config, m_soundlatch2);
|
||||
TA7630(config, m_ta7630);
|
||||
@ -1176,15 +1191,15 @@ void flstory_state::common(machine_config &config)
|
||||
DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.1); // unknown DAC
|
||||
}
|
||||
|
||||
void flstory_state::flstory(machine_config &config)
|
||||
void flstory_mcu_state::flstory(machine_config &config)
|
||||
{
|
||||
common(config);
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &flstory_state::flstory_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &flstory_mcu_state::flstory_map);
|
||||
|
||||
TAITO68705_MCU(config, m_bmcu, XTAL(18'432'000)/6); // verified on PCB
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(flstory_state,flstory)
|
||||
MCFG_VIDEO_START_OVERRIDE(flstory_mcu_state,flstory)
|
||||
}
|
||||
|
||||
void flstory_state::onna34ro(machine_config &config)
|
||||
@ -1196,46 +1211,46 @@ void flstory_state::onna34ro(machine_config &config)
|
||||
MCFG_VIDEO_START_OVERRIDE(flstory_state,flstory)
|
||||
}
|
||||
|
||||
void flstory_state::onna34ro_mcu(machine_config &config)
|
||||
void flstory_mcu_state::onna34ro_mcu(machine_config &config)
|
||||
{
|
||||
onna34ro(config);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &flstory_state::onna34ro_mcu_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &flstory_mcu_state::onna34ro_mcu_map);
|
||||
|
||||
TAITO68705_MCU(config, m_bmcu, XTAL(18'432'000)/6); // ?
|
||||
}
|
||||
|
||||
void flstory_state::victnine(machine_config &config)
|
||||
void flstory_mcu_state::victnine(machine_config &config)
|
||||
{
|
||||
common(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->set_clock(XTAL(8'000'000)/2); // 4 MHz
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &flstory_state::victnine_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &flstory_mcu_state::victnine_map);
|
||||
|
||||
TAITO68705_MCU(config, m_bmcu, XTAL(18'432'000)/6);
|
||||
|
||||
// video hardware
|
||||
subdevice<screen_device>("screen")->set_screen_update(FUNC(flstory_state::screen_update_victnine));
|
||||
MCFG_VIDEO_START_OVERRIDE(flstory_state,victnine)
|
||||
subdevice<screen_device>("screen")->set_screen_update(FUNC(flstory_mcu_state::screen_update_victnine));
|
||||
MCFG_VIDEO_START_OVERRIDE(flstory_mcu_state,victnine)
|
||||
|
||||
// sound hardware
|
||||
m_ay->reset_routes();
|
||||
m_ay->add_route(ALL_OUTPUTS, "speaker", 0.5);
|
||||
}
|
||||
|
||||
void flstory_state::rumba(machine_config &config)
|
||||
void flstory_mcu_state::rumba(machine_config &config)
|
||||
{
|
||||
common(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &flstory_state::rumba_map);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &flstory_mcu_state::rumba_map);
|
||||
m_maincpu->set_clock(XTAL(8'000'000) / 2); // verified on PCB
|
||||
|
||||
TAITO68705_MCU(config, m_bmcu, XTAL(18'432'000)/6); // ?
|
||||
|
||||
// video hardware
|
||||
subdevice<screen_device>("screen")->set_screen_update(FUNC(flstory_state::screen_update_rumba));
|
||||
MCFG_VIDEO_START_OVERRIDE(flstory_state,rumba)
|
||||
subdevice<screen_device>("screen")->set_screen_update(FUNC(flstory_mcu_state::screen_update_rumba));
|
||||
MCFG_VIDEO_START_OVERRIDE(flstory_mcu_state,rumba)
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
@ -1257,7 +1272,7 @@ ROM_START( flstory )
|
||||
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
|
||||
ROM_LOAD( "a45-20.mcu", 0x0000, 0x0800, CRC(7d2cdd9b) SHA1(b9a7b4c7d9d58b4b7cab1304beaa9d17f9559419) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
|
||||
ROM_REGION( 0x20000, "tiles", ROMREGION_INVERT )
|
||||
ROM_LOAD( "vid-a45.18", 0x00000, 0x4000, CRC(6f08f69e) SHA1(8f1b7e63a38f855cf26d57aed678da7cf1378fdf) )
|
||||
ROM_LOAD( "vid-a45.06", 0x04000, 0x4000, CRC(dc856a75) SHA1(6eedbf6b027c884502b6e7329f13829787138165) )
|
||||
ROM_LOAD( "vid-a45.08", 0x08000, 0x4000, CRC(d0b028ca) SHA1(c8bd9136ad3180002961ecfe600fc91a3c891539) )
|
||||
@ -1281,7 +1296,7 @@ ROM_START( flstoryo )
|
||||
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
|
||||
ROM_LOAD( "a45-20.mcu", 0x0000, 0x0800, CRC(7d2cdd9b) SHA1(b9a7b4c7d9d58b4b7cab1304beaa9d17f9559419) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
|
||||
ROM_REGION( 0x20000, "tiles", ROMREGION_INVERT )
|
||||
ROM_LOAD( "vid-a45.18", 0x00000, 0x4000, CRC(6f08f69e) SHA1(8f1b7e63a38f855cf26d57aed678da7cf1378fdf) )
|
||||
ROM_LOAD( "vid-a45.06", 0x04000, 0x4000, CRC(dc856a75) SHA1(6eedbf6b027c884502b6e7329f13829787138165) )
|
||||
ROM_LOAD( "vid-a45.08", 0x08000, 0x4000, CRC(d0b028ca) SHA1(c8bd9136ad3180002961ecfe600fc91a3c891539) )
|
||||
@ -1313,7 +1328,7 @@ ROM_START( onna34ro )
|
||||
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
|
||||
ROM_LOAD( "a52_17.54c", 0x0000, 0x0800, CRC(0ab2612e) SHA1(2bc74e9ef5b9dd51d733dc62902d92c269f7d6a7) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
|
||||
ROM_REGION( 0x20000, "tiles", ROMREGION_INVERT )
|
||||
ROM_LOAD( "a52-04.11v", 0x00000, 0x4000, CRC(5b126294) SHA1(fc31e062e665f7313f923e84d6497716f0658ac0) )
|
||||
ROM_LOAD( "a52-06.10v", 0x04000, 0x4000, CRC(78114721) SHA1(d0e52544e05ab4fd1b131ed49beb252048bcbe31) )
|
||||
ROM_LOAD( "a52-08.09v", 0x08000, 0x4000, CRC(4a293745) SHA1(a54c1cfced63306db0ba7ee635dce41134c91dc8) )
|
||||
@ -1337,7 +1352,7 @@ ROM_START( onna34roa )
|
||||
ROM_LOAD( "a52-15.37s", 0x6000, 0x2000, CRC(5afc21d0) SHA1(317d5fb3a48ce5e13e02c5c6431fa08ada115d27) )
|
||||
ROM_LOAD( "a52-16.38s", 0x8000, 0x2000, CRC(ccf42aee) SHA1(a6eb01c5384724999631b55700dade430b71ca95) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
|
||||
ROM_REGION( 0x20000, "tiles", ROMREGION_INVERT )
|
||||
ROM_LOAD( "a52-04.11v", 0x00000, 0x4000, CRC(5b126294) SHA1(fc31e062e665f7313f923e84d6497716f0658ac0) )
|
||||
ROM_LOAD( "a52-06.10v", 0x04000, 0x4000, CRC(78114721) SHA1(d0e52544e05ab4fd1b131ed49beb252048bcbe31) )
|
||||
ROM_LOAD( "a52-08.09v", 0x08000, 0x4000, CRC(4a293745) SHA1(a54c1cfced63306db0ba7ee635dce41134c91dc8) )
|
||||
@ -1452,7 +1467,7 @@ ROM_START( victnine )
|
||||
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
|
||||
ROM_LOAD( "a16-18.54", 0x0000, 0x0800, BAD_DUMP CRC(5198ef59) SHA1(05bde731ff580984dcf5a66e8465377c6dc03ec0) ) // dumped via m68705 dumper and hand-verified. Might still be imperfect but confirmed working on real PCB.
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", ROMREGION_INVERT )
|
||||
ROM_REGION( 0x10000, "tiles", ROMREGION_INVERT )
|
||||
ROM_LOAD( "a16-06-1.7", 0x00000, 0x2000, CRC(b708134d) SHA1(9732be463cfbbe81ea0ad06da5a48b660ca429d0) )
|
||||
ROM_LOAD( "a16-07-2.8", 0x02000, 0x2000, CRC(cdaf7f83) SHA1(cf83af1655cb3ffce26c1b015b1e2249f7b12e3f) )
|
||||
ROM_LOAD( "a16-10.90", 0x04000, 0x2000, CRC(e8e42454) SHA1(c4923d4adfc0a48cf5a7d0145de5c9389495cac2) )
|
||||
@ -1522,7 +1537,7 @@ ROM_START( rumba )
|
||||
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
|
||||
ROM_LOAD( "a23_11.bin", 0x0000, 0x0800, CRC(fddc99ce) SHA1(a9c7f76752ce74a780ca74004106c969d78ba931) )
|
||||
|
||||
ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT )
|
||||
ROM_REGION( 0x8000, "tiles", ROMREGION_INVERT )
|
||||
ROM_LOAD( "a23_07.bin", 0x02000, 0x2000, CRC(c98fbea6) SHA1(edd1e0b2551f726018ca6e0b2cf629046a482711) )
|
||||
ROM_LOAD( "a23_06.bin", 0x00000, 0x2000, CRC(bf1e3a7f) SHA1(1258be10739cee6e6a8b2ce4d39f89bff1ea7f16) ) // should be a good read
|
||||
ROM_LOAD( "a23_05.bin", 0x06000, 0x2000, CRC(b40db231) SHA1(85204efc05e95334576807e4dab866f4f40081e6) )
|
||||
@ -1532,9 +1547,9 @@ ROM_END
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
GAME( 1985, flstory, 0, flstory, flstory, flstory_state, empty_init, ROT180, "Taito", "The FairyLand Story", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, flstoryo, flstory, flstory, flstory, flstory_state, empty_init, ROT180, "Taito", "The FairyLand Story (earlier)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, onna34ro, 0, onna34ro_mcu, onna34ro, flstory_state, empty_init, ROT0, "Taito", "Onna Sanshirou - Typhoon Gal", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, onna34roa, onna34ro, onna34ro, onna34ro, flstory_state, empty_init, ROT0, "Taito", "Onna Sanshirou - Typhoon Gal (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, victnine, 0, victnine, victnine, flstory_state, empty_init, ROT0, "Taito", "Victorious Nine", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, rumba, 0, rumba, rumba, flstory_state, empty_init, ROT270, "Taito", "Rumba Lumber", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, flstory, 0, flstory, flstory, flstory_mcu_state, empty_init, ROT180, "Taito", "The FairyLand Story", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, flstoryo, flstory, flstory, flstory, flstory_mcu_state, empty_init, ROT180, "Taito", "The FairyLand Story (earlier)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, onna34ro, 0, onna34ro_mcu, onna34ro, flstory_mcu_state, empty_init, ROT0, "Taito", "Onna Sanshirou - Typhoon Gal", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, onna34roa, onna34ro, onna34ro, onna34ro, flstory_state, empty_init, ROT0, "Taito", "Onna Sanshirou - Typhoon Gal (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, victnine, 0, victnine, victnine, flstory_mcu_state, empty_init, ROT0, "Taito", "Victorious Nine", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, rumba, 0, rumba, rumba, flstory_mcu_state, empty_init, ROT270, "Taito", "Rumba Lumber", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
Loading…
Reference in New Issue
Block a user