summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/dooyong.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/dooyong.cpp')
-rw-r--r--src/mame/drivers/dooyong.cpp812
1 files changed, 728 insertions, 84 deletions
diff --git a/src/mame/drivers/dooyong.cpp b/src/mame/drivers/dooyong.cpp
index 50565655244..d856e9a3fe4 100644
--- a/src/mame/drivers/dooyong.cpp
+++ b/src/mame/drivers/dooyong.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Nicola Salmoria
+// copyright-holders:Nicola Salmoria,Vas Crabb
/***************************************************************************
Dooyong games
@@ -72,7 +72,7 @@ are almost identical, except for much darker BG layer colors).
***************************************************************************/
#include "emu.h"
-#include "includes/dooyong.h"
+#include "video/dooyong.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
@@ -81,39 +81,681 @@ are almost identical, except for much darker BG layer colors).
#include "sound/okim6295.h"
#include "sound/ym2151.h"
+#include "screen.h"
#include "speaker.h"
-WRITE8_MEMBER(dooyong_z80_state::bankswitch_w)
+namespace {
+
+class dooyong_state : public driver_device
+{
+protected:
+ dooyong_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_audiocpu(*this, "audiocpu")
+ , m_gfxdecode(*this, "gfxdecode")
+ , m_palette(*this, "palette")
+ , m_bg(*this, "bg")
+ , m_bg2(*this, "bg2")
+ , m_fg(*this, "fg")
+ , m_fg2(*this, "fg2")
+ {
+ }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
+ optional_device<dooyong_rom_tilemap_device> m_bg;
+ optional_device<dooyong_rom_tilemap_device> m_bg2;
+ optional_device<dooyong_rom_tilemap_device> m_fg;
+ optional_device<dooyong_rom_tilemap_device> m_fg2;
+};
+
+class dooyong_z80_state : public dooyong_state
+{
+public:
+ dooyong_z80_state(const machine_config &mconfig, device_type type, const char *tag)
+ : dooyong_state(mconfig, type, tag)
+ , m_tx(*this, "tx")
+ , m_spriteram(*this, "spriteram")
+ {
+ }
+
+ enum
+ {
+ SPRITE_12BIT = 0x01,
+ SPRITE_HEIGHT = 0x02,
+ SPRITE_YSHIFT_BLUEHAWK = 0x04,
+ SPRITE_YSHIFT_FLYTIGER = 0x08
+ };
+
+ DECLARE_WRITE8_MEMBER(flip_screen_w)
+ {
+ flip_screen_set(data);
+ }
+
+ DECLARE_WRITE8_MEMBER(bankswitch_w)
+ {
+ membank("bank1")->set_entry(data & 0x07);
+ if (data & 0xf8) popmessage("bankswitch %02x",data);
+ }
+
+ DECLARE_READ8_MEMBER(lastday_tx_r)
+ {
+ bool const lane(BIT(offset, 11));
+ return m_tx->tileram_r(space, offset & 0x07ffU) >> (lane ? 8 : 0);
+ }
+
+ DECLARE_WRITE8_MEMBER(lastday_tx_w)
+ {
+ bool const lane(BIT(offset, 11));
+ m_tx->tileram_w(space, offset & 0x07ffU, uint16_t(data) << (lane ? 8 : 0), lane ? 0xff00U : 0x00ffU);
+ }
+
+ DECLARE_READ8_MEMBER(bluehawk_tx_r)
+ {
+ bool const lane(BIT(offset, 0));
+ return m_tx->tileram_r(space, offset >> 1) >> (lane ? 8 : 0);
+ }
+
+ DECLARE_WRITE8_MEMBER(bluehawk_tx_w)
+ {
+ bool const lane(BIT(offset, 0));
+ m_tx->tileram_w(space, offset >> 1, uint16_t(data) << (lane ? 8 : 0), lane ? 0xff00U : 0x00ffU);
+ }
+
+ DECLARE_READ8_MEMBER(paletteram_flytiger_r)
+ {
+ if (m_palette_bank) offset |= 0x800;
+ return m_paletteram_flytiger[offset];
+ }
+
+ DECLARE_WRITE8_MEMBER(paletteram_flytiger_w)
+ {
+ if (m_palette_bank) offset |= 0x800;
+ m_paletteram_flytiger[offset] = data;
+ uint16_t const value = m_paletteram_flytiger[offset & ~1] | (m_paletteram_flytiger[offset | 1] << 8);
+ m_palette->set_pen_color(offset/2, pal5bit(value >> 10), pal5bit(value >> 5), pal5bit(value >> 0));
+ }
+
+ DECLARE_WRITE8_MEMBER(primella_ctrl_w);
+ DECLARE_WRITE8_MEMBER(flytiger_ctrl_w);
+
+ uint32_t screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ DECLARE_MACHINE_START(cpu_z80)
+ {
+ membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000);
+ }
+
+ DECLARE_VIDEO_START(bluehawk)
+ {
+ }
+
+ DECLARE_VIDEO_START(flytiger)
+ {
+ m_paletteram_flytiger = make_unique_clear<uint8_t[]>(0x1000);
+ save_pointer(NAME(m_paletteram_flytiger.get()), 0x1000);
+
+ m_palette_bank = 0;
+
+ /* Register for save/restore */
+ save_item(NAME(m_palette_bank));
+ save_item(NAME(m_flytiger_pri));
+ }
+
+ DECLARE_VIDEO_START(primella)
+ {
+ /* Register for save/restore */
+ save_item(NAME(m_tx_pri));
+ }
+
+protected:
+ void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, unsigned extensions = 0);
+
+ std::unique_ptr<uint8_t[]> m_paletteram_flytiger;
+ uint8_t m_sprites_disabled = 0;
+ uint8_t m_flytiger_pri = 0;
+ uint8_t m_tx_pri = 0;
+ uint8_t m_palette_bank = 0;
+
+ required_device<dooyong_ram_tilemap_device> m_tx;
+ optional_device<buffered_spriteram8_device> m_spriteram;
+};
+
+class dooyong_z80_ym2203_state : public dooyong_z80_state
+{
+public:
+ dooyong_z80_ym2203_state(const machine_config &mconfig, device_type type, const char *tag)
+ : dooyong_z80_state(mconfig, type, tag)
+ {
+ }
+
+ DECLARE_WRITE8_MEMBER(lastday_ctrl_w);
+ DECLARE_WRITE8_MEMBER(pollux_ctrl_w);
+ DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_1);
+ DECLARE_WRITE_LINE_MEMBER(irqhandler_2203_2);
+ DECLARE_READ8_MEMBER(unk_r);
+
+ DECLARE_MACHINE_RESET(sound_ym2203)
+ {
+ m_interrupt_line_1 = 0;
+ m_interrupt_line_2 = 0;
+ }
+
+ uint32_t screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ DECLARE_VIDEO_START(lastday)
+ {
+ /* Register for save/restore */
+ save_item(NAME(m_sprites_disabled));
+ save_item(NAME(m_interrupt_line_1));
+ save_item(NAME(m_interrupt_line_2));
+ }
+
+ DECLARE_VIDEO_START(gulfstrm)
+ {
+ m_palette_bank = 0;
+
+ /* Register for save/restore */
+ save_item(NAME(m_palette_bank));
+ save_item(NAME(m_interrupt_line_1));
+ save_item(NAME(m_interrupt_line_2));
+ }
+
+ DECLARE_VIDEO_START(pollux)
+ {
+ m_paletteram_flytiger = make_unique_clear<uint8_t[]>(0x1000);
+ save_pointer(NAME(m_paletteram_flytiger.get()), 0x1000);
+
+ m_palette_bank = 0;
+
+ /* Register for save/restore */
+ save_item(NAME(m_palette_bank));
+ save_item(NAME(m_interrupt_line_1));
+ save_item(NAME(m_interrupt_line_2));
+ }
+
+protected:
+ int m_interrupt_line_1 = 0;
+ int m_interrupt_line_2 = 0;
+};
+
+
+class dooyong_68k_state : public dooyong_state
+{
+public:
+ dooyong_68k_state(const machine_config &mconfig, device_type type, const char *tag)
+ : dooyong_state(mconfig, type, tag)
+ , m_spriteram(*this, "spriteram")
+ {
+ }
+
+ DECLARE_WRITE16_MEMBER(ctrl_w)
+ {
+ if (ACCESSING_BITS_0_7)
+ {
+ /* bit 0 flips screen */
+ flip_screen_set(data & 0x0001);
+
+ /* bit 4 changes tilemaps priority */
+ m_bg2_priority = data & 0x0010;
+
+ /* bit 5 used but unknown */
+ }
+ }
+
+ TIMER_DEVICE_CALLBACK_MEMBER(scanline);
+
+protected:
+ void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ uint16_t m_bg2_priority = 0;
+ required_device<buffered_spriteram16_device> m_spriteram;
+};
+
+
+class rshark_state : public dooyong_68k_state
+{
+public:
+ rshark_state(const machine_config &mconfig, device_type type, const char *tag)
+ : dooyong_68k_state(mconfig, type, tag)
+ {
+ }
+
+ uint32_t screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ DECLARE_VIDEO_START(rshark)
+ {
+ /* Register for save/restore */
+ save_item(NAME(m_bg2_priority));
+ }
+};
+
+
+class popbingo_state : public dooyong_68k_state
+{
+public:
+ popbingo_state(const machine_config &mconfig, device_type type, const char *tag)
+ : dooyong_68k_state(mconfig, type, tag)
+ , m_bg_bitmap()
+ , m_bg2_bitmap()
+ , m_screen(*this, "screen")
+ {
+ }
+
+ uint32_t screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ DECLARE_VIDEO_START(popbingo)
+ {
+ m_screen->register_screen_bitmap(m_bg_bitmap);
+ m_screen->register_screen_bitmap(m_bg2_bitmap);
+
+ /* Register for save/restore */
+ save_item(NAME(m_bg2_priority)); // Not used atm
+ }
+
+protected:
+ bitmap_ind16 m_bg_bitmap;
+ bitmap_ind16 m_bg2_bitmap;
+
+ required_device<screen_device> m_screen;
+};
+
+
+
+/* Control registers seem to be different on every game */
+
+WRITE8_MEMBER(dooyong_z80_ym2203_state::lastday_ctrl_w)
+{
+ /* bits 0 and 1 are coin counters */
+ machine().bookkeeping().coin_counter_w(0, data & 0x01);
+ machine().bookkeeping().coin_counter_w(1, data & 0x02);
+
+ /* bit 3 is used but unknown */
+
+ /* bit 4 disables sprites */
+ m_sprites_disabled = data & 0x10;
+
+ /* bit 6 is flip screen */
+ flip_screen_set(data & 0x40);
+}
+
+WRITE8_MEMBER(dooyong_z80_ym2203_state::pollux_ctrl_w)
+{
+// printf("pollux_ctrl_w %02x\n", data);
+
+ /* bit 0 is flip screen */
+ flip_screen_set(data & 0x01);
+
+ /* bits 6 and 7 are coin counters */
+ machine().bookkeeping().coin_counter_w(0, data & 0x80);
+ machine().bookkeeping().coin_counter_w(1, data & 0x40);
+
+ /* bit 1 is used but unknown - palette banking (both write and display based on pollux bombs) */
+ uint8_t const last_palbank = m_palette_bank;
+ if (m_paletteram_flytiger) m_palette_bank = BIT(data, 1);
+ if (last_palbank != m_palette_bank)
+ {
+ m_bg->set_palette_bank(m_palette_bank << 6);
+ m_fg->set_palette_bank(m_palette_bank << 6);
+ m_tx->set_palette_bank(m_palette_bank << 6);
+ }
+
+ /* bit 2 is continuously toggled (unknown) */
+
+ /* bit 4 is used but unknown - display disable? */
+}
+
+
+
+WRITE8_MEMBER(dooyong_z80_state::primella_ctrl_w)
{
+ /* bits 0-2 select ROM bank */
membank("bank1")->set_entry(data & 0x07);
- if (data & 0xf8) popmessage("bankswitch %02x",data);
+ /* bit 3 disables tx layer */
+ m_tx_pri = data & 0x08;
+
+ /* bit 4 flips screen */
+ flip_screen_set(data & 0x10);
+
+ /* bit 5 used but unknown */
+
+// logerror("%04x: bankswitch = %02x\n",space.device().safe_pc(),data&0xe0);
+}
+
+
+WRITE8_MEMBER(dooyong_z80_state::flytiger_ctrl_w)
+{
+ /* bit 0 is flip screen */
+ flip_screen_set(data & 0x01);
+
+ /* bits 1, 2 used but unknown */
+
+ /* bit 3 palette banking */
+ uint8_t const last_palbank = m_palette_bank;
+ m_palette_bank = BIT(data, 3);
+ if (last_palbank != m_palette_bank)
+ {
+ m_bg->set_palette_bank(m_palette_bank << 6);
+ m_fg->set_palette_bank(m_palette_bank << 6);
+ m_tx->set_palette_bank(m_palette_bank << 6);
+ }
+
+ /* bit 4 changes tilemaps priority */
+ m_flytiger_pri = data & 0x10;
+}
+
+
+void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, unsigned extensions)
+{
+ /* Sprites take 32 bytes each in memory:
+ MSB LSB
+ [offs + 0x00] cccc cccc (bits 7-0 of gfx code)
+ [offs + 0x01] cccx CCCC (bits 10-8 of gfx code, bit 8 of x position, bits 3-0 of color code)
+ [offs + 0x02] yyyy yyyy
+ [offs + 0x03] xxxx xxxx (bits 7-0 of x offset)
+ ...
+ [offs + 0x1c] ?hhh XY*c (bits 2-0 of height, x flip, y flip, * see note, bit 11 of gfx code)
+ ...
+ ? = unused/unknown
+ E = enable
+ c = gfx code
+ x = x position
+ y = y position
+ C = color code
+ w = width
+ X = x flip
+ Y = y flip
+ * = alters y position in bluehawk and flytiger - see code below
+ bit 11 of gfx code only used by gulfstrm, pollux, bluehawk and flytiger
+ height only used by pollux, bluehawk and flytiger
+ x flip and y flip only used by pollux and flytiger */
+
+ uint8_t const *const buffered_spriteram = m_spriteram->buffer();
+ for (int offs = 0; offs < m_spriteram->bytes(); offs += 32)
+ {
+ int sx = buffered_spriteram[offs+3] | ((buffered_spriteram[offs+1] & 0x10) << 4);
+ int sy = buffered_spriteram[offs+2];
+ int code = buffered_spriteram[offs] | ((buffered_spriteram[offs+1] & 0xe0) << 3);
+ int color = buffered_spriteram[offs+1] & 0x0f;
+
+ //TODO: This priority mechanism works for known games, but seems a bit strange.
+ //Are we missing something? (The obvious spare palette bit isn't it.)
+ int const pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0);
+
+ bool flipx = false, flipy = false;
+ int height = 0;
+ if (extensions)
+ {
+ uint8_t const ext = buffered_spriteram[offs+0x1c];
+
+ if (extensions & SPRITE_12BIT)
+ code |= ((ext & 0x01) << 11);
+
+ if (extensions & SPRITE_HEIGHT)
+ {
+ height = (ext & 0x70) >> 4;
+ code &= ~height;
+
+ flipx = ext & 0x08;
+ flipy = ext & 0x04;
+ }
+
+ if (extensions & SPRITE_YSHIFT_BLUEHAWK)
+ sy += 6 - ((~ext & 0x02) << 7);
+
+ if (extensions & SPRITE_YSHIFT_FLYTIGER)
+ sy -=(ext & 0x02) << 7;
+ }
+
+ if (flip_screen())
+ {
+ sx = 498 - sx;
+ sy = 240 - (16 * height) - sy;
+ flipx = !flipx;
+ flipy = !flipy;
+ }
+
+ color |= m_palette_bank << 6;
+
+ for (int y = 0; y <= height; y++)
+ {
+ m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect,
+ code + y,
+ color,
+ flipx, flipy,
+ sx, sy + (16 * (flipy ? (height - y) : y)),
+ screen.priority(),
+ pri, 15);
+ }
+ }
+}
+
+
+uint32_t dooyong_z80_ym2203_state::screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_palette->black_pen(), cliprect);
+ screen.priority().fill(0, cliprect);
+
+ /* Text layer is offset on this machine */
+ m_tx->set_scrolly(flip_screen() ? -8 : 8);
+
+ m_bg->draw(screen, bitmap, cliprect, 0, 1);
+ m_fg->draw(screen, bitmap, cliprect, 0, 2);
+ m_tx->draw(screen, bitmap, cliprect, 0, 4);
+
+ if (!m_sprites_disabled)
+ draw_sprites(screen, bitmap, cliprect);
+
+ return 0;
+}
+
+uint32_t dooyong_z80_ym2203_state::screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_palette->black_pen(), cliprect);
+ screen.priority().fill(0, cliprect);
+
+ /* Text layer is offset on this machine */
+ m_tx->set_scrolly(flip_screen() ? -8 : 8);
+
+ m_bg->draw(screen, bitmap, cliprect, 0, 1);
+ m_fg->draw(screen, bitmap, cliprect, 0, 2);
+ m_tx->draw(screen, bitmap, cliprect, 0, 4);
+
+ draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT);
+
+ return 0;
+}
+
+uint32_t dooyong_z80_ym2203_state::screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_palette->black_pen(), cliprect);
+ screen.priority().fill(0, cliprect);
+
+ m_bg->draw(screen, bitmap, cliprect, 0, 1);
+ m_fg->draw(screen, bitmap, cliprect, 0, 2);
+ m_tx->draw(screen, bitmap, cliprect, 0, 4);
+
+ draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT);
+
+ return 0;
+}
+
+uint32_t dooyong_z80_state::screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_palette->black_pen(), cliprect);
+ screen.priority().fill(0, cliprect);
+
+ if (m_flytiger_pri)
+ {
+ m_fg->draw(screen, bitmap, cliprect, 0, 1);
+ m_bg->draw(screen, bitmap, cliprect, 0, 2);
+ }
+ else
+ {
+ m_bg->draw(screen, bitmap, cliprect, 0, 1);
+ m_fg->draw(screen, bitmap, cliprect, 0, 2);
+ }
+ m_tx->draw(screen, bitmap, cliprect, 0, 4);
+
+ draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT | SPRITE_YSHIFT_FLYTIGER);
+
+ return 0;
+}
+
+
+uint32_t dooyong_z80_state::screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_palette->black_pen(), cliprect);
+ screen.priority().fill(0, cliprect);
+
+ m_bg->draw(screen, bitmap, cliprect, 0, 1);
+ m_fg->draw(screen, bitmap, cliprect, 0, 2);
+ m_fg2->draw(screen, bitmap, cliprect, 0, 4);
+ m_tx->draw(screen, bitmap, cliprect, 0, 4);
+
+ draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT | SPRITE_YSHIFT_BLUEHAWK);
+
+ return 0;
+}
+
+uint32_t dooyong_z80_state::screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_palette->black_pen(), cliprect);
+
+ m_bg->draw(screen, bitmap, cliprect, 0, 0);
+ if (m_tx_pri) m_tx->draw(screen, bitmap, cliprect, 0, 0);
+ m_fg->draw(screen, bitmap, cliprect, 0, 0);
+ if (!m_tx_pri) m_tx->draw(screen, bitmap, cliprect, 0, 0);
+
+ return 0;
}
-MACHINE_START_MEMBER(dooyong_z80_state, cpu_z80)
+
+
+void dooyong_68k_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000);
+ /* Sprites take 8 16-bit words each in memory:
+ MSB LSB
+ [offs + 0] ???? ???? ???? ???E
+ [offs + 1] ???? ???? hhhh wwww
+ [offs + 2] ???? ???? ???? ????
+ [offs + 3] cccc cccc cccc cccc
+ [offs + 4] ???? ???x xxxx xxxx
+ [offs + 5] ???? ???? ???? ????
+ [offs + 6] ???? ???y yyyy yyyy
+ [offs + 7] ???? ???? ???? CCCC
+ ? = unused/unknown
+ E = enable
+ c = gfx code
+ x = x offset
+ y = y offset (signed)
+ C = color code
+ w = width
+ h = height */
+
+ uint16_t const *const buffered_spriteram = m_spriteram->buffer();
+ for (int offs = (m_spriteram->bytes() / 2) - 8; offs >= 0; offs -= 8)
+ {
+ if (buffered_spriteram[offs] & 0x0001) /* enable */
+ {
+ int code = buffered_spriteram[offs+3];
+ int const color = buffered_spriteram[offs+7] & 0x000f;
+ //TODO: This priority mechanism works for known games, but seems a bit strange.
+ //Are we missing something? (The obvious spare palette bit isn't it.)
+ int const pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0);
+ int const width = buffered_spriteram[offs+1] & 0x000f;
+ int const height = (buffered_spriteram[offs+1] & 0x00f0) >> 4;
+
+ bool const flip = flip_screen();
+ int sx = buffered_spriteram[offs+4] & 0x01ff;
+ int sy = (int16_t)buffered_spriteram[offs+6] & 0x01ff;
+ if (sy & 0x0100) sy |= ~(int)0x01ff; // Correctly sign-extend 9-bit number
+ if (flip)
+ {
+ sx = 498 - (16 * width) - sx;
+ sy = 240 - (16 * height) - sy;
+ }
+
+ for (int y = 0; y <= height; y++)
+ {
+ int const _y = sy + (16 * (flip ? (height - y) : y));
+ for (int x = 0; x <= width; x++)
+ {
+ int const _x = sx + (16 * (flip ? (width - x) : x));
+ m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect,
+ code,
+ color,
+ flip, flip,
+ _x, _y,
+ screen.priority(),
+ pri, 15);
+ code++;
+ }
+ }
+ }
+ }
}
-WRITE8_MEMBER(dooyong_z80_state::flip_screen_w)
+
+uint32_t rshark_state::screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- flip_screen_set(data);
+ bitmap.fill(m_palette->black_pen(), cliprect);
+ screen.priority().fill(0, cliprect);
+
+ m_bg->draw(screen, bitmap, cliprect, 0, 1);
+ m_bg2->draw(screen, bitmap, cliprect, 0, (m_bg2_priority ? 2 : 1));
+ m_fg->draw(screen, bitmap, cliprect, 0, 2);
+ m_fg2->draw(screen, bitmap, cliprect, 0, 2);
+
+ draw_sprites(screen, bitmap, cliprect);
+
+ return 0;
}
-MACHINE_RESET_MEMBER(dooyong_z80_ym2203_state, sound_ym2203)
+
+uint32_t popbingo_state::screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- m_interrupt_line_1 = 0;
- m_interrupt_line_2 = 0;
+ bitmap.fill(m_palette->black_pen(), cliprect);
+ screen.priority().fill(0, cliprect);
+
+ m_bg_bitmap.fill(m_palette->black_pen(), cliprect);
+ m_bg->draw(screen, m_bg_bitmap, cliprect, 0, 1);
+
+ m_bg2_bitmap.fill(m_palette->black_pen(), cliprect);
+ m_bg2->draw(screen, m_bg2_bitmap, cliprect, 0, 1);
+
+ for (int y = cliprect.min_y; cliprect.max_y >= y; y++)
+ {
+ uint16_t const *const bg_src(&m_bg_bitmap.pix16(y, 0));
+ uint16_t const *const bg2_src(&m_bg2_bitmap.pix16(y, 0));
+ uint16_t *const dst(&bitmap.pix16(y, 0));
+ for (int x = cliprect.min_x; cliprect.max_x >= x; x++)
+ dst[x] = 0x100U | (bg_src[x] << 4) | bg2_src[x];
+ }
+
+ draw_sprites(screen, bitmap, cliprect);
+
+ return 0;
}
+
+
/***************************************************************************
Memory Structure(s)
***************************************************************************/
-static ADDRESS_MAP_START( lastday_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
+ADDRESS_MAP_START( lastday_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
AM_RANGE(0xc000, 0xc007) AM_DEVWRITE("bg", dooyong_rom_tilemap_device, ctrl_w)
@@ -132,7 +774,7 @@ static ADDRESS_MAP_START( lastday_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("spriteram")
ADDRESS_MAP_END
-static ADDRESS_MAP_START( pollux_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
+ADDRESS_MAP_START( pollux_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
AM_RANGE(0xc000, 0xcfff) AM_RAM
@@ -150,7 +792,7 @@ static ADDRESS_MAP_START( pollux_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
AM_RANGE(0xf800, 0xffff) AM_READWRITE(paletteram_flytiger_r, paletteram_flytiger_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( gulfstrm_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
+ADDRESS_MAP_START( gulfstrm_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
AM_RANGE(0xc000, 0xcfff) AM_RAM
@@ -169,7 +811,7 @@ static ADDRESS_MAP_START( gulfstrm_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state
AM_RANGE(0xf800, 0xffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
ADDRESS_MAP_END
-static ADDRESS_MAP_START( bluehawk_map, AS_PROGRAM, 8, dooyong_z80_state )
+ADDRESS_MAP_START( bluehawk_map, AS_PROGRAM, 8, dooyong_z80_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
AM_RANGE(0xc000, 0xc000) AM_READ_PORT("DSWA")
@@ -189,7 +831,7 @@ static ADDRESS_MAP_START( bluehawk_map, AS_PROGRAM, 8, dooyong_z80_state )
AM_RANGE(0xf000, 0xffff) AM_RAM
ADDRESS_MAP_END
-static ADDRESS_MAP_START( flytiger_map, AS_PROGRAM, 8, dooyong_z80_state )
+ADDRESS_MAP_START( flytiger_map, AS_PROGRAM, 8, dooyong_z80_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE("spriteram")
@@ -208,7 +850,7 @@ static ADDRESS_MAP_START( flytiger_map, AS_PROGRAM, 8, dooyong_z80_state )
AM_RANGE(0xf000, 0xffff) AM_READWRITE(lastday_tx_r, lastday_tx_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_z80_state )
+ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_z80_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
AM_RANGE(0xc000, 0xcfff) AM_RAM
@@ -226,7 +868,7 @@ static ADDRESS_MAP_START( primella_map, AS_PROGRAM, 8, dooyong_z80_state )
AM_RANGE(0xfc08, 0xfc0f) AM_DEVWRITE("fg", dooyong_rom_tilemap_device, ctrl_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( rshark_map, AS_PROGRAM, 16, dooyong_68k_state )
+ADDRESS_MAP_START( rshark_map, AS_PROGRAM, 16, dooyong_68k_state )
ADDRESS_MAP_GLOBAL_MASK(0xfffff) /* super-x needs this and is similar */
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x040000, 0x04cfff) AM_RAM
@@ -244,7 +886,7 @@ static ADDRESS_MAP_START( rshark_map, AS_PROGRAM, 16, dooyong_68k_state )
AM_RANGE(0x0cc010, 0x0cc01f) AM_DEVWRITE8("fg2", dooyong_rom_tilemap_device, ctrl_w, 0x00ff)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_68k_state )
+ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_68k_state )
ADDRESS_MAP_GLOBAL_MASK(0xfffff)
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x0d0000, 0x0dcfff) AM_RAM
@@ -262,7 +904,7 @@ static ADDRESS_MAP_START( superx_map, AS_PROGRAM, 16, dooyong_68k_state )
AM_RANGE(0x08c010, 0x08c01f) AM_DEVWRITE8("fg2", dooyong_rom_tilemap_device, ctrl_w, 0x00ff)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_68k_state )
+ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_68k_state )
ADDRESS_MAP_GLOBAL_MASK(0xfffff)
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x040000, 0x04cfff) AM_RAM
@@ -282,7 +924,7 @@ static ADDRESS_MAP_START( popbingo_map, AS_PROGRAM, 16, dooyong_68k_state )
AM_RANGE(0x0dc000, 0x0dc01f) AM_RAM // registers of some kind?
ADDRESS_MAP_END
-static ADDRESS_MAP_START( lastday_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
+ADDRESS_MAP_START( lastday_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xc000, 0xc7ff) AM_RAM
AM_RANGE(0xc800, 0xc800) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
@@ -290,7 +932,7 @@ static ADDRESS_MAP_START( lastday_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_s
AM_RANGE(0xf002, 0xf003) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( pollux_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
+ADDRESS_MAP_START( pollux_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_state )
AM_RANGE(0x0000, 0xefff) AM_ROM
AM_RANGE(0xf000, 0xf7ff) AM_RAM
AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
@@ -298,7 +940,7 @@ static ADDRESS_MAP_START( pollux_sound_map, AS_PROGRAM, 8, dooyong_z80_ym2203_st
AM_RANGE(0xf804, 0xf805) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( bluehawk_sound_map, AS_PROGRAM, 8, dooyong_state )
+ADDRESS_MAP_START( bluehawk_sound_map, AS_PROGRAM, 8, dooyong_state )
AM_RANGE(0x0000, 0xefff) AM_ROM
AM_RANGE(0xf000, 0xf7ff) AM_RAM
AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
@@ -312,7 +954,7 @@ ADDRESS_MAP_END
***************************************************************************/
-static INPUT_PORTS_START( dooyongz80_generic )
+INPUT_PORTS_START( dooyongz80_generic )
PORT_START("DSWA")
PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SWA:1" )
PORT_DIPNAME( 0x02, 0x02, "Coin Type" ) PORT_DIPLOCATION("SWA:2")
@@ -398,7 +1040,7 @@ INPUT_PORTS_END
***************************************************************************/
-static INPUT_PORTS_START( dooyongm68_generic )
+INPUT_PORTS_START( dooyongm68_generic )
PORT_START("DSW")
PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SWA:1" )
PORT_DIPNAME( 0x0002, 0x0002, "Coin Type" ) PORT_DIPLOCATION("SWA:2")
@@ -480,7 +1122,7 @@ INPUT_PORTS_END
***************************************************************************/
-static INPUT_PORTS_START( lastday )
+INPUT_PORTS_START( lastday )
PORT_INCLUDE( dooyongz80_generic )
PORT_MODIFY("DSWB")
@@ -504,7 +1146,7 @@ static INPUT_PORTS_START( lastday )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
INPUT_PORTS_END
-static INPUT_PORTS_START( gulfstrm )
+INPUT_PORTS_START( gulfstrm )
PORT_INCLUDE( dooyongz80_generic )
PORT_MODIFY("DSWB")
@@ -528,7 +1170,7 @@ static INPUT_PORTS_START( gulfstrm )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
-static INPUT_PORTS_START( pollux )
+INPUT_PORTS_START( pollux )
PORT_INCLUDE( dooyongz80_generic )
PORT_MODIFY("SYSTEM")
@@ -542,11 +1184,11 @@ static INPUT_PORTS_START( pollux )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
-static INPUT_PORTS_START( bluehawk )
+INPUT_PORTS_START( bluehawk )
PORT_INCLUDE( dooyongz80_generic )
INPUT_PORTS_END
-static INPUT_PORTS_START( flytiger )
+INPUT_PORTS_START( flytiger )
PORT_INCLUDE( dooyongz80_generic )
PORT_MODIFY("DSWB")
@@ -558,7 +1200,7 @@ static INPUT_PORTS_START( flytiger )
// PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") // allows title screen + ending screen colours to cycle (but I'm not sure they're meant to, reference shots suggest not, maybe a debug port?)
INPUT_PORTS_END
-static INPUT_PORTS_START( sadari )
+INPUT_PORTS_START( sadari )
PORT_INCLUDE( dooyongz80_generic )
PORT_MODIFY("DSWB")
@@ -575,7 +1217,7 @@ static INPUT_PORTS_START( sadari )
PORT_DIPSETTING( 0x00, DEF_STR( Asia ) )
INPUT_PORTS_END
-static INPUT_PORTS_START( primella )
+INPUT_PORTS_START( primella )
PORT_INCLUDE( dooyongz80_generic )
PORT_MODIFY("DSWB")
@@ -589,7 +1231,7 @@ static INPUT_PORTS_START( primella )
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
INPUT_PORTS_END
-static INPUT_PORTS_START( rshark )
+INPUT_PORTS_START( rshark )
PORT_INCLUDE( dooyongm68_generic )
PORT_MODIFY("DSW")
@@ -604,7 +1246,7 @@ static INPUT_PORTS_START( rshark )
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
INPUT_PORTS_END
-static INPUT_PORTS_START( superx )
+INPUT_PORTS_START( superx )
PORT_INCLUDE( dooyongm68_generic )
PORT_MODIFY("DSW") /* In documentation this switch enables "service mode" but it never had any effect in game */
@@ -613,7 +1255,7 @@ static INPUT_PORTS_START( superx )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
-static INPUT_PORTS_START( popbingo )
+INPUT_PORTS_START( popbingo )
PORT_INCLUDE( dooyongm68_generic )
PORT_MODIFY("DSW")
@@ -636,7 +1278,7 @@ INPUT_PORTS_END
***************************************************************************/
-static const gfx_layout lastday_charlayout =
+const gfx_layout lastday_charlayout =
{
8,8,
RGN_FRAC(1,2),
@@ -647,7 +1289,7 @@ static const gfx_layout lastday_charlayout =
16*8
};
-static const gfx_layout bluehawk_charlayout =
+const gfx_layout bluehawk_charlayout =
{
8,8,
RGN_FRAC(1,1),
@@ -658,7 +1300,7 @@ static const gfx_layout bluehawk_charlayout =
32*8
};
-static const gfx_layout tilelayout =
+const gfx_layout tilelayout =
{
32,32,
RGN_FRAC(1,1),
@@ -675,7 +1317,7 @@ static const gfx_layout tilelayout =
512*8
};
-static const gfx_layout spritelayout =
+const gfx_layout spritelayout =
{
16,16,
RGN_FRAC(1,1),
@@ -688,7 +1330,7 @@ static const gfx_layout spritelayout =
128*8
};
-static const gfx_layout rshark_spritelayout =
+const gfx_layout rshark_spritelayout =
{
16,16,
RGN_FRAC(1,1),
@@ -701,21 +1343,21 @@ static const gfx_layout rshark_spritelayout =
128*8
};
-static GFXDECODE_START( lastday )
+GFXDECODE_START( lastday )
GFXDECODE_ENTRY( "gfx1", 0, lastday_charlayout, 0, 16+64 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 256, 16+64 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 768, 16+64 )
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 512, 16+64 )
GFXDECODE_END
-static GFXDECODE_START( flytiger )
+GFXDECODE_START( flytiger )
GFXDECODE_ENTRY( "gfx1", 0, lastday_charlayout, 0, 16+64 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 256, 16+64 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 768, 16+64 )
GFXDECODE_ENTRY( "gfx4", 0, tilelayout, 512, 32+64 )
GFXDECODE_END
-static GFXDECODE_START( bluehawk )
+GFXDECODE_START( bluehawk )
GFXDECODE_ENTRY( "gfx1", 0, bluehawk_charlayout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 256, 16 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 768, 16 )
@@ -723,14 +1365,14 @@ static GFXDECODE_START( bluehawk )
GFXDECODE_ENTRY( "gfx5", 0, tilelayout, 0, 16 )
GFXDECODE_END
-static GFXDECODE_START( primella )
+GFXDECODE_START( primella )
GFXDECODE_ENTRY( "gfx1", 0, bluehawk_charlayout, 0, 16 )
/* no sprites */
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 768, 16 )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 512, 16 )
GFXDECODE_END
-static GFXDECODE_START( rshark )
+GFXDECODE_START( rshark )
/* no chars */
GFXDECODE_ENTRY( "gfx1", 0, rshark_spritelayout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 256, 16 )
@@ -739,7 +1381,7 @@ static GFXDECODE_START( rshark )
GFXDECODE_ENTRY( "gfx5", 0, spritelayout, 1024, 16 )
GFXDECODE_END
-static GFXDECODE_START( popbingo )
+GFXDECODE_START( popbingo )
/* no chars */
GFXDECODE_ENTRY( "gfx1", 0, rshark_spritelayout, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 1 )
@@ -771,7 +1413,7 @@ WRITE_LINE_MEMBER(dooyong_z80_ym2203_state::irqhandler_2203_2)
***************************************************************************/
-static MACHINE_CONFIG_FRAGMENT( sound_2203 )
+MACHINE_CONFIG_FRAGMENT( sound_2203 )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
@@ -787,7 +1429,7 @@ static MACHINE_CONFIG_FRAGMENT( sound_2203 )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_FRAGMENT( sound_2151 )
+MACHINE_CONFIG_FRAGMENT( sound_2151 )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
@@ -797,11 +1439,11 @@ static MACHINE_CONFIG_FRAGMENT( sound_2151 )
MCFG_SOUND_ROUTE(0, "mono", 0.50)
MCFG_SOUND_ROUTE(1, "mono", 0.50)
- MCFG_OKIM6295_ADD("oki", XTAL_1MHz, OKIM6295_PIN7_HIGH)
+ MCFG_OKIM6295_ADD("oki", XTAL_1MHz, PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_FRAGMENT( sound_2151_4mhz )
+MACHINE_CONFIG_FRAGMENT( sound_2151_4mhz )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
@@ -811,11 +1453,11 @@ static MACHINE_CONFIG_FRAGMENT( sound_2151_4mhz )
MCFG_SOUND_ROUTE(0, "mono", 0.50)
MCFG_SOUND_ROUTE(1, "mono", 0.50)
- MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH) /* 1MHz (16MHz/16 for most, 8Mhz/8 for Super-X) */
+ MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, PIN7_HIGH) /* 1MHz (16MHz/16 for most, 8Mhz/8 for Super-X) */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( lastday, dooyong_z80_ym2203_state )
+MACHINE_CONFIG_START( lastday )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz/2) /* 8MHz verified for Last Day / D-day */
@@ -868,7 +1510,7 @@ static MACHINE_CONFIG_START( lastday, dooyong_z80_ym2203_state )
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( gulfstrm, dooyong_z80_ym2203_state )
+MACHINE_CONFIG_START( gulfstrm )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 8000000) /* ??? */
@@ -907,7 +1549,7 @@ static MACHINE_CONFIG_START( gulfstrm, dooyong_z80_ym2203_state )
MCFG_FRAGMENT_ADD( sound_2203 ) /* 3.579545MHz */
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( pollux, dooyong_z80_ym2203_state )
+MACHINE_CONFIG_START( pollux )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz/2) /* 8Mhz */
@@ -946,7 +1588,7 @@ static MACHINE_CONFIG_START( pollux, dooyong_z80_ym2203_state )
MCFG_FRAGMENT_ADD( sound_2203 ) /* 3.579545MHz or 4Mhz ??? */
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( bluehawk, dooyong_z80_state )
+MACHINE_CONFIG_START( bluehawk )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 8000000) /* ??? */
@@ -986,7 +1628,7 @@ static MACHINE_CONFIG_START( bluehawk, dooyong_z80_state )
MCFG_FRAGMENT_ADD( sound_2151 ) /* 3.579545MHz or 4Mhz ??? */
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( flytiger, dooyong_z80_state )
+MACHINE_CONFIG_START( flytiger )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz/2) /* 8MHz */
@@ -1025,7 +1667,7 @@ static MACHINE_CONFIG_START( flytiger, dooyong_z80_state )
MCFG_FRAGMENT_ADD( sound_2151 )
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( primella, dooyong_z80_state )
+MACHINE_CONFIG_START( primella )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz/2) /* 8MHz */
@@ -1075,7 +1717,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline)
}
-static MACHINE_CONFIG_START( dooyong_68k, rshark_state )
+MACHINE_CONFIG_START( dooyong_68k )
// basic machine hardware
MCFG_CPU_ADD("maincpu", M68000, XTAL_8MHz) // 8MHz measured on Super-X
@@ -1114,17 +1756,17 @@ static MACHINE_CONFIG_START( dooyong_68k, rshark_state )
MCFG_FRAGMENT_ADD(sound_2151_4mhz)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( rshark, dooyong_68k )
+MACHINE_CONFIG_DERIVED( rshark, dooyong_68k )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(rshark_map)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( superx, dooyong_68k )
+MACHINE_CONFIG_DERIVED( superx, dooyong_68k )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(superx_map)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( popbingo, popbingo_state )
+MACHINE_CONFIG_START( popbingo )
// basic machine hardware
MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) // 10MHz measured
@@ -1161,6 +1803,8 @@ static MACHINE_CONFIG_START( popbingo, popbingo_state )
MCFG_FRAGMENT_ADD(sound_2151_4mhz)
MACHINE_CONFIG_END
+} // anonymous namespace
+
/***************************************************************************
@@ -2092,35 +2736,35 @@ ROM_END
/* The differences between the two lastday sets are only in the sound program and graphics. The main program is the same. */
-GAME( 1990, lastday, 0, lastday, lastday, driver_device, 0, ROT270, "Dooyong", "The Last Day (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, lastdaya, lastday, lastday, lastday, driver_device, 0, ROT270, "Dooyong", "The Last Day (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1990, ddaydoo, lastday, lastday, lastday, driver_device, 0, ROT270, "Dooyong", "Chulgyeok D-Day (Korea)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, lastday, 0, lastday, lastday, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "The Last Day (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, lastdaya, lastday, lastday, lastday, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "The Last Day (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1990, ddaydoo, lastday, lastday, lastday, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "Chulgyeok D-Day (Korea)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, gulfstrm, 0, gulfstrm, gulfstrm, driver_device, 0, ROT270, "Dooyong", "Gulf Storm (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, gulfstrma,gulfstrm, gulfstrm, gulfstrm, driver_device, 0, ROT270, "Dooyong", "Gulf Storm (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, gulfstrmb,gulfstrm, gulfstrm, gulfstrm, driver_device, 0, ROT270, "Dooyong", "Gulf Storm (set 3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, gulfstrmm,gulfstrm, gulfstrm, gulfstrm, driver_device, 0, ROT270, "Dooyong (Media Shoji license)", "Gulf Storm (Media Shoji)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, gulfstrmk,gulfstrm, gulfstrm, gulfstrm, driver_device, 0, ROT270, "Dooyong", "Gulf Storm (Korea)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, gulfstrm, 0, gulfstrm, gulfstrm, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "Gulf Storm (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, gulfstrma,gulfstrm, gulfstrm, gulfstrm, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "Gulf Storm (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, gulfstrmb,gulfstrm, gulfstrm, gulfstrm, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "Gulf Storm (set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, gulfstrmm,gulfstrm, gulfstrm, gulfstrm, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong (Media Shoji license)", "Gulf Storm (Media Shoji)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, gulfstrmk,gulfstrm, gulfstrm, gulfstrm, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "Gulf Storm (Korea)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, pollux, 0, pollux, pollux, driver_device, 0, ROT270, "Dooyong", "Pollux (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, polluxa, pollux, pollux, pollux, driver_device, 0, ROT270, "Dooyong", "Pollux (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1991, polluxa2, pollux, pollux, pollux, driver_device, 0, ROT270, "Dooyong", "Pollux (set 3)", MACHINE_SUPPORTS_SAVE ) // Original Dooyong Board distributed by TCH
-GAME( 1991, polluxn, pollux, pollux, pollux, driver_device, 0, ROT270, "Dooyong (NTC / Atlus license)", "Pollux (Japan, NTC license, distributed by Atlus)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, pollux, 0, pollux, pollux, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "Pollux (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, polluxa, pollux, pollux, pollux, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "Pollux (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, polluxa2, pollux, pollux, pollux, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong", "Pollux (set 3)", MACHINE_SUPPORTS_SAVE ) // Original Dooyong Board distributed by TCH
+GAME( 1991, polluxn, pollux, pollux, pollux, dooyong_z80_ym2203_state, 0, ROT270, "Dooyong (NTC / Atlus license)", "Pollux (Japan, NTC license, distributed by Atlus)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, flytiger, 0, flytiger, flytiger, driver_device, 0, ROT270, "Dooyong", "Flying Tiger (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, flytigera,flytiger, flytiger, flytiger, driver_device, 0, ROT270, "Dooyong", "Flying Tiger (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, flytiger, 0, flytiger, flytiger, dooyong_z80_state, 0, ROT270, "Dooyong", "Flying Tiger (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, flytigera,flytiger, flytiger, flytiger, dooyong_z80_state, 0, ROT270, "Dooyong", "Flying Tiger (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, bluehawk, 0, bluehawk, bluehawk, driver_device, 0, ROT270, "Dooyong", "Blue Hawk", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, bluehawkn,bluehawk, bluehawk, bluehawk, driver_device, 0, ROT270, "Dooyong (NTC license)", "Blue Hawk (NTC)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, bluehawk, 0, bluehawk, bluehawk, dooyong_z80_state, 0, ROT270, "Dooyong", "Blue Hawk", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, bluehawkn,bluehawk, bluehawk, bluehawk, dooyong_z80_state, 0, ROT270, "Dooyong (NTC license)", "Blue Hawk (NTC)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, sadari, 0, primella, sadari, driver_device, 0, ROT0, "Dooyong (NTC license)", "Sadari", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, sadari, 0, primella, sadari, dooyong_z80_state, 0, ROT0, "Dooyong (NTC license)", "Sadari", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, gundl94, 0, primella, primella, driver_device, 0, ROT0, "Dooyong", "Gun Dealer '94", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, primella, gundl94, primella, primella, driver_device, 0, ROT0, "Dooyong (NTC license)", "Primella", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, gundl94, 0, primella, primella, dooyong_z80_state, 0, ROT0, "Dooyong", "Gun Dealer '94", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, primella, gundl94, primella, primella, dooyong_z80_state, 0, ROT0, "Dooyong (NTC license)", "Primella", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, superx, 0, superx, superx, driver_device, 0, ROT270, "Dooyong (NTC license)", "Super-X (NTC)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, superxm, superx, superx, superx, driver_device, 0, ROT270, "Dooyong (Mitchell license)", "Super-X (Mitchell)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, superx, 0, superx, superx, rshark_state, 0, ROT270, "Dooyong (NTC license)", "Super-X (NTC)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, superxm, superx, superx, superx, rshark_state, 0, ROT270, "Dooyong (Mitchell license)", "Super-X (Mitchell)", MACHINE_SUPPORTS_SAVE )
-GAME( 1995, rshark, 0, rshark, rshark, driver_device, 0, ROT270, "Dooyong", "R-Shark", MACHINE_SUPPORTS_SAVE )
+GAME( 1995, rshark, 0, rshark, rshark, rshark_state, 0, ROT270, "Dooyong", "R-Shark", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, popbingo, 0, popbingo, popbingo, driver_device, 0, ROT0, "Dooyong", "Pop Bingo", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, popbingo, 0, popbingo, popbingo, popbingo_state, 0, ROT0, "Dooyong", "Pop Bingo", MACHINE_SUPPORTS_SAVE )