From 10e73ffbdb703926a2671d856f1a451e1b7d05ff Mon Sep 17 00:00:00 2001 From: Robbbert Date: Mon, 10 Dec 2012 10:51:20 +0000 Subject: [PATCH] spacecom , darthvdr : fixed cocktail mode (nw) --- src/mame/audio/8080bw.c | 2 +- src/mame/drivers/8080bw.c | 10 +++++++- src/mame/includes/8080bw.h | 1 + src/mame/video/8080bw.c | 47 ++++++++++++++++++++++++++++++++++---- 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/mame/audio/8080bw.c b/src/mame/audio/8080bw.c index 6462cc1d370..a37c56ca163 100644 --- a/src/mame/audio/8080bw.c +++ b/src/mame/audio/8080bw.c @@ -1252,7 +1252,7 @@ WRITE8_MEMBER(_8080bw_state::shuttlei_sh_port_2_w) WRITE8_MEMBER( _8080bw_state::darthvdr_00_w ) { - m_c8080bw_flip_screen = BIT(data, 0) & BIT(ioport(CABINET_PORT_TAG)->read(), 0); + m_invaders_flip_screen = BIT(data, 0) & BIT(ioport(CABINET_PORT_TAG)->read(), 0); } WRITE8_MEMBER( _8080bw_state::darthvdr_08_w ) diff --git a/src/mame/drivers/8080bw.c b/src/mame/drivers/8080bw.c index 9b6313a942c..cbd83a6a49a 100644 --- a/src/mame/drivers/8080bw.c +++ b/src/mame/drivers/8080bw.c @@ -688,7 +688,7 @@ static INPUT_PORTS_START( spacecom ) PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unused? PORT_START(CABINET_PORT_TAG) /* Dummy port for cocktail mode */ - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END @@ -707,6 +707,10 @@ MACHINE_CONFIG_DERIVED_CLASS( spacecom, invaders, _8080bw_state ) // assume there is no watchdog MCFG_WATCHDOG_VBLANK_INIT(0) MCFG_WATCHDOG_TIME_INIT(attotime::from_usec(0)) + + // video + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_UPDATE_DRIVER(_8080bw_state, screen_update_spacecom) MACHINE_CONFIG_END DRIVER_INIT_MEMBER(_8080bw_state, spacecom) @@ -2271,6 +2275,10 @@ static MACHINE_CONFIG_DERIVED_CLASS( darthvdr, mw8080bw_root, _8080bw_state ) /* sound hardware */ MCFG_FRAGMENT_ADD(invaders_samples_audio) + + /* video hardware */ + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_UPDATE_DRIVER(_8080bw_state, screen_update_invaders) MACHINE_CONFIG_END diff --git a/src/mame/includes/8080bw.h b/src/mame/includes/8080bw.h index 663d237b4e0..640dd465694 100644 --- a/src/mame/includes/8080bw.h +++ b/src/mame/includes/8080bw.h @@ -113,6 +113,7 @@ public: UINT32 screen_update_polaris(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); UINT32 screen_update_ballbomb(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); UINT32 screen_update_shuttlei(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + UINT32 screen_update_spacecom(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(polaris_interrupt); TIMER_DEVICE_CALLBACK_MEMBER(claybust_gun_callback); diff --git a/src/mame/video/8080bw.c b/src/mame/video/8080bw.c index 55d807f292f..918000fba0e 100644 --- a/src/mame/video/8080bw.c +++ b/src/mame/video/8080bw.c @@ -430,11 +430,8 @@ UINT32 _8080bw_state::screen_update_shuttlei(screen_device &screen, bitmap_rgb32 for (i = 0; i < 8; i++) { - pen_t pen = (data & 0x80) ? RGB_WHITE : RGB_BLACK; - bitmap.pix32(y, x) = pen; - - x = x + 1; - data = data << 1; + bitmap.pix32(y, x|i) = pens[BIT(data, 7)]; + data <<= 1; } } @@ -466,3 +463,43 @@ UINT32 _8080bw_state::screen_update_sflush(screen_device &screen, bitmap_rgb32 & return 0; } + +UINT32 _8080bw_state::screen_update_spacecom(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + pen_t pens[2] = { RGB_BLACK, RGB_WHITE }; + offs_t offs; + UINT8 x,y,data; + + for (offs = 0; offs < 0x1c00; offs++) + { + y = offs >> 5; + x = (offs << 3)+4; //((m_invaders_flip_screen) ? 8 : 4); + + data = m_main_ram[offs+0x400]; + + if (m_invaders_flip_screen) + { + bitmap.pix32(y, x++) = pens[BIT(data, 7)]; + bitmap.pix32(y, x++) = pens[BIT(data, 6)]; + bitmap.pix32(y, x++) = pens[BIT(data, 5)]; + bitmap.pix32(y, x++) = pens[BIT(data, 4)]; + bitmap.pix32(y, x++) = pens[BIT(data, 3)]; + bitmap.pix32(y, x++) = pens[BIT(data, 2)]; + bitmap.pix32(y, x++) = pens[BIT(data, 1)]; + bitmap.pix32(y, x++) = pens[BIT(data, 0)]; + } + else + { + bitmap.pix32(y, x++) = pens[BIT(data, 0)]; + bitmap.pix32(y, x++) = pens[BIT(data, 1)]; + bitmap.pix32(y, x++) = pens[BIT(data, 2)]; + bitmap.pix32(y, x++) = pens[BIT(data, 3)]; + bitmap.pix32(y, x++) = pens[BIT(data, 4)]; + bitmap.pix32(y, x++) = pens[BIT(data, 5)]; + bitmap.pix32(y, x++) = pens[BIT(data, 6)]; + bitmap.pix32(y, x++) = pens[BIT(data, 7)]; + } + } + return 0; +} +