From 663c7890147192fb652e5db4593ee42b48e4fc77 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Sun, 26 Feb 2017 15:09:08 +0100 Subject: blockade: Rewrite driver * Remove fake interrupts and rewrite coin handling * Use correct CPU type * Use screen raw parameters * Use generic 8x8x1 gfx layout * Update ROM filenames --- scripts/target/mame/arcade.lua | 3 - src/mame/audio/blockade.cpp | 65 --- src/mame/drivers/blockade.cpp | 922 ++++++++++++++++++++--------------------- src/mame/includes/blockade.h | 47 --- src/mame/video/blockade.cpp | 34 -- 5 files changed, 455 insertions(+), 616 deletions(-) delete mode 100644 src/mame/audio/blockade.cpp delete mode 100644 src/mame/includes/blockade.h delete mode 100644 src/mame/video/blockade.cpp diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 2e88c4969f4..c706e5f94ff 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -3090,9 +3090,6 @@ files { MAME_DIR .. "src/mame/video/angelkds.cpp", MAME_DIR .. "src/mame/drivers/bingoc.cpp", MAME_DIR .. "src/mame/drivers/blockade.cpp", - MAME_DIR .. "src/mame/includes/blockade.h", - MAME_DIR .. "src/mame/audio/blockade.cpp", - MAME_DIR .. "src/mame/video/blockade.cpp", MAME_DIR .. "src/mame/drivers/calorie.cpp", MAME_DIR .. "src/mame/drivers/chihiro.cpp", MAME_DIR .. "src/mame/includes/xbox_nv2a.h", diff --git a/src/mame/audio/blockade.cpp b/src/mame/audio/blockade.cpp deleted file mode 100644 index 1741dc111a0..00000000000 --- a/src/mame/audio/blockade.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Frank Palazzolo - -#include "emu.h" -#include "includes/blockade.h" -#include "sound/discrete.h" -#include "sound/samples.h" - -#define BLOCKADE_LOG 0 - -/* - * This still needs the noise generator stuff, - * along with proper mixing and volume control - */ - -#define BLOCKADE_NOTE_DATA NODE_01 -#define BLOCKADE_NOTE NODE_02 - -DISCRETE_SOUND_START(blockade) - DISCRETE_INPUT_DATA (BLOCKADE_NOTE_DATA) - - /************************************************/ - /* Note sound is created by a divider circuit. */ - /* The master clock is the 93681.5 Hz, from the */ - /* 555 oscillator. This is then sent to a */ - /* preloadable 8 bit counter, which loads the */ - /* value from OUT02 when overflowing from 0xFF */ - /* to 0x00. Therefore it divides by 2 (OUT02 */ - /* = FE) to 256 (OUT02 = 00). */ - /* There is also a final /2 stage. */ - /* Note that there is no music disable line. */ - /* When there is no music, the game sets the */ - /* oscillator to 0Hz. (OUT02 = FF) */ - /************************************************/ - DISCRETE_NOTE(BLOCKADE_NOTE, 1, 93681.5, BLOCKADE_NOTE_DATA, 255, 1, DISC_CLK_IS_FREQ | DISC_OUT_IS_ENERGY) - DISCRETE_CRFILTER(NODE_10, BLOCKADE_NOTE, RES_K(35), CAP_U(.01)) - - DISCRETE_OUTPUT(NODE_10, 7500) -DISCRETE_SOUND_END - -WRITE8_MEMBER(blockade_state::blockade_sound_freq_w) -{ - m_discrete->write(space,BLOCKADE_NOTE_DATA, data); - return; -} - -WRITE8_MEMBER(blockade_state::blockade_env_on_w) -{ - if (BLOCKADE_LOG) osd_printf_debug("Boom Start\n"); - m_samples->start(0,0); - return; -} - -WRITE8_MEMBER(blockade_state::blockade_env_off_w) -{ - if (BLOCKADE_LOG) osd_printf_debug("Boom End\n"); - return; -} - -const char *const blockade_sample_names[] = -{ - "*blockade", - "boom", - nullptr -}; diff --git a/src/mame/drivers/blockade.cpp b/src/mame/drivers/blockade.cpp index 0770cfbf0a0..6cc2af4ae90 100644 --- a/src/mame/drivers/blockade.cpp +++ b/src/mame/drivers/blockade.cpp @@ -1,486 +1,479 @@ -// license:BSD-3-Clause -// copyright-holders:Frank Palazzolo -/**************************************************************************** +// license: BSD-3-Clause +// copyright-holders: Frank Palazzolo, Dirk Best +/*************************************************************************** - Blockade/Comotion/Blasto/Hustle Memory MAP - Frank Palazzolo (palazzol@comcast.net) + Blockade/CoMOTION/Blasto/Hustle/Minesweeper - CPU - Intel 8080A + TODO: + - Noise generator + - Timing for the coin input is a guess - Memory Address (Upper/Lower) - - 0xxx 00aa aaaa aaaa ROM U2/U3 R 1K for Blockade/Comotion/Blasto - 0xxx 01aa aaaa aaaa ROM U4/U5 R 1K for Comotion/Blasto/Hustle Only - 1xx0 xxaa aaaa aaaa VRAM W 1K playfield - xxx1 xxxx aaaa aaaa RAM R/W 256 bytes - - CHAR ROM U29/U43 256 bytes for Blockade/Comotion - 512 for Blasto/Hustle - - Ports In Out - 1 Controls bit 7 = Coin Latch Reset - bit 5 = Pin 19? - 2 Controls Square Wave Pitch Register - 4 Controls Noise On - 8 N/A Noise Off - - - Notes: Support is complete with the exception of the noise generator. - Hopefully I can add this based on some measurements from a real board - -****************************************************************************/ +***************************************************************************/ #include "emu.h" #include "cpu/i8085/i8085.h" -#include "includes/blockade.h" #include "sound/samples.h" #include "sound/discrete.h" #include "blockade.lh" -#define BLOCKADE_LOG 0 -#define MASTER_CLOCK XTAL_20_079MHz - -/* These are used to simulate coin latch circuitry */ - -/*************************************************************/ -/* */ -/* Inserting a coin should work like this: */ -/* 1) Reset the CPU */ -/* 2) CPU Sets the coin latch */ -/* 3) Finally the CPU coin latch is Cleared by the hardware */ -/* (by the falling coin..?) */ -/* */ -/* I am faking this by keeping the CPU from Setting */ -/* the coin latch if we have just been reset. */ -/* */ -/*************************************************************/ +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** -/* Need to check for a coin on the interrupt, */ -/* This will reset the cpu */ - -INTERRUPT_GEN_MEMBER(blockade_state::blockade_interrupt) +class blockade_state : public driver_device { - device.execute().resume(SUSPEND_ANY_REASON); - - if ((ioport("IN0")->read() & 0x80) == 0) - { - m_just_been_reset = 1; - device.execute().set_input_line(INPUT_LINE_RESET, PULSE_LINE); - } -} - -/************************************* - * - * Memory handlers - * - *************************************/ - -READ8_MEMBER(blockade_state::blockade_input_port_0_r) -{ - /* coin latch is bit 7 */ - uint8_t temp = (ioport("IN0")->read() & 0x7f); - - return (m_coin_latch << 7) | temp; -} - -WRITE8_MEMBER(blockade_state::blockade_coin_latch_w) -{ - if (data & 0x80) - { - if (BLOCKADE_LOG) osd_printf_debug("Reset Coin Latch\n"); - if (m_just_been_reset) - { - m_just_been_reset = 0; - m_coin_latch = 0; - } - else - m_coin_latch = 1; - } - - if (data & 0x20) - { - if (BLOCKADE_LOG) osd_printf_debug("Pin 19 High\n"); - } - else - { - if (BLOCKADE_LOG) osd_printf_debug("Pin 19 Low\n"); - } - - return; -} +public: + blockade_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_videoram(*this, "videoram"), + m_gfxdecode(*this, "gfxdecode"), + m_screen(*this, "screen"), + m_discrete(*this, "discrete"), + m_samples(*this, "samples"), + m_vblank_timer(nullptr), + m_tilemap(nullptr), + m_coin_latch(0), m_coin_inserted(0) + { } + + DECLARE_INPUT_CHANGED_MEMBER(coin_inserted); + DECLARE_CUSTOM_INPUT_MEMBER(coin_r); + DECLARE_WRITE8_MEMBER(coin_latch_w); + + DECLARE_WRITE8_MEMBER(videoram_w); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + TILE_GET_INFO_MEMBER(tile_info); + + DECLARE_WRITE8_MEMBER(sound_freq_w); + DECLARE_WRITE8_MEMBER(env_on_w); + DECLARE_WRITE8_MEMBER(env_off_w); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + +private: + required_device m_maincpu; + required_shared_ptr m_videoram; + required_device m_gfxdecode; + required_device m_screen; + required_device m_discrete; + required_device m_samples; + + emu_timer *m_vblank_timer; + tilemap_t *m_tilemap; + + uint8_t m_coin_latch; + uint8_t m_coin_inserted; +}; -/************************************* - * - * Address maps - * - *************************************/ +//************************************************************************** +// ADDRESS MAPS +//************************************************************************** static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, blockade_state ) - AM_RANGE(0x0000, 0x07ff) AM_ROM AM_MIRROR(0x6000) - AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(blockade_videoram_w) AM_SHARE("videoram") AM_MIRROR(0x6c00) - AM_RANGE(0x9000, 0x90ff) AM_RAM AM_MIRROR(0x6f00) + AM_RANGE(0x0000, 0x03ff) AM_MIRROR(0x6000) AM_ROM + AM_RANGE(0x0400, 0x07ff) AM_MIRROR(0x6000) AM_ROM // comotion, blasto, hustle + AM_RANGE(0x8000, 0x83ff) AM_MIRROR(0x6c00) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") + AM_RANGE(0x9000, 0x90ff) AM_MIRROR(0x6f00) AM_RAM ADDRESS_MAP_END static ADDRESS_MAP_START( main_io_map, AS_IO, 8, blockade_state ) - AM_RANGE(0x01, 0x01) AM_READWRITE(blockade_input_port_0_r, blockade_coin_latch_w) - AM_RANGE(0x02, 0x02) AM_READ_PORT("IN1") - AM_RANGE(0x02, 0x02) AM_WRITE(blockade_sound_freq_w) - AM_RANGE(0x04, 0x04) AM_READ_PORT("IN2") - AM_RANGE(0x04, 0x04) AM_WRITE(blockade_env_on_w) - AM_RANGE(0x08, 0x08) AM_WRITE(blockade_env_off_w) + AM_RANGE(0x01, 0x01) AM_READ_PORT("IN0") AM_WRITE(coin_latch_w) + AM_RANGE(0x02, 0x02) AM_READ_PORT("IN1") AM_WRITE(sound_freq_w) + AM_RANGE(0x04, 0x04) AM_READ_PORT("IN2") AM_WRITE(env_on_w) + AM_RANGE(0x08, 0x08) AM_WRITE(env_off_w) ADDRESS_MAP_END -/************************************* - * - * Input ports - * - *************************************/ - -/* These are not dip switches, they are mapped to */ -/* connectors on the board. Different games had */ -/* different harnesses which plugged in here, and */ -/* some pins were unused. */ +//************************************************************************** +// INPUT PORT DEFINITIONS +//************************************************************************** static INPUT_PORTS_START( blockade ) + PORT_START("coin") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_COIN1) PORT_IMPULSE(24) PORT_CHANGED_MEMBER(DEVICE_SELF, blockade_state, coin_inserted, nullptr) + + // These are not dip switches, they are mapped to connectors on the board. Different games + // had different harnesses which plugged in here, and some pins were unused. PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_CONFNAME( 0x04, 0x04, "Boom Switch" ) - PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x04, DEF_STR( On ) ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_CONFNAME( 0x70, 0x70, DEF_STR( Lives ) ) - PORT_CONFSETTING( 0x60, "3" ) - PORT_CONFSETTING( 0x50, "4" ) - PORT_CONFSETTING( 0x30, "5" ) - PORT_CONFSETTING( 0x70, "6" ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - /* this is really used for the coin latch, */ - /* see blockade_interrupt() */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_CONFNAME(0x04, 0x04, "Boom Switch") + PORT_CONFSETTING( 0x00, DEF_STR( Off )) + PORT_CONFSETTING( 0x04, DEF_STR( On )) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_CONFNAME(0x70, 0x70, DEF_STR( Lives )) + PORT_CONFSETTING( 0x60, "3" ) + PORT_CONFSETTING( 0x50, "4" ) + PORT_CONFSETTING( 0x30, "5" ) + PORT_CONFSETTING( 0x70, "6" ) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr) PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(1) PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("IN3") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") - PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) INPUT_PORTS_END static INPUT_PORTS_START( comotion ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_CONFNAME( 0x04, 0x04, "Boom Switch" ) - PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x04, DEF_STR( On ) ) - PORT_CONFNAME( 0x08, 0x00, DEF_STR( Lives ) ) - PORT_CONFSETTING( 0x00, "3" ) - PORT_CONFSETTING( 0x08, "4" ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - /* this is really used for the coin latch, */ - /* see blockade_interrupt() */ - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(3) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(3) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(3) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(4) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(4) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(4) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(4) - - PORT_START("IN3") - PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") + PORT_INCLUDE(blockade) + + PORT_MODIFY("IN0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_CONFNAME(0x04, 0x04, "Boom Switch") + PORT_CONFSETTING( 0x00, DEF_STR( Off )) + PORT_CONFSETTING( 0x04, DEF_STR( On )) + PORT_CONFNAME(0x08, 0x00, DEF_STR( Lives )) + PORT_CONFSETTING( 0x00, "3") + PORT_CONFSETTING( 0x08, "4") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_START1) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(3) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(3) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(3) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(3) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(4) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(4) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(4) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(4) INPUT_PORTS_END static INPUT_PORTS_START( blasto ) - PORT_START("IN0") - PORT_CONFNAME( 0x03, 0x03, DEF_STR( Coinage ) ) - PORT_CONFSETTING( 0x00, DEF_STR( 4C_1C ) ) - PORT_CONFSETTING( 0x01, DEF_STR( 3C_1C ) ) - PORT_CONFSETTING( 0x02, DEF_STR( 2C_1C ) ) - PORT_CONFSETTING( 0x03, DEF_STR( 1C_1C ) ) - PORT_CONFNAME( 0x04, 0x04, "Attract Sound" ) - PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x04, DEF_STR( On ) ) - PORT_CONFNAME( 0x08, 0x08, DEF_STR( Game_Time ) ) - PORT_CONFSETTING( 0x00, "70 Secs" ) // though service manual says 60 - PORT_CONFSETTING( 0x08, "90 Secs" ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - /* this is really used for the coin latch, */ - /* see blockade_interrupt() */ - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) - - PORT_START("IN3") - PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") + PORT_INCLUDE(blockade) + + PORT_MODIFY("IN0") + PORT_CONFNAME(0x03, 0x03, DEF_STR( Coinage )) + PORT_CONFSETTING( 0x00, DEF_STR( 4C_1C )) + PORT_CONFSETTING( 0x01, DEF_STR( 3C_1C )) + PORT_CONFSETTING( 0x02, DEF_STR( 2C_1C )) + PORT_CONFSETTING( 0x03, DEF_STR( 1C_1C )) + PORT_CONFNAME(0x04, 0x04, DEF_STR( Demo_Sounds )) + PORT_CONFSETTING( 0x00, DEF_STR( Off )) + PORT_CONFSETTING( 0x04, DEF_STR( On )) + PORT_CONFNAME(0x08, 0x08, DEF_STR( Game_Time )) + PORT_CONFSETTING( 0x00, "70 Secs") // though service manual says 60 + PORT_CONFSETTING( 0x08, "90 Secs") + PORT_BIT(0x70, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) + PORT_BIT(0x1e, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START2) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(1) INPUT_PORTS_END static INPUT_PORTS_START( hustle ) - PORT_START("IN0") - PORT_CONFNAME( 0x03, 0x03, DEF_STR( Coinage ) ) - PORT_CONFSETTING( 0x00, DEF_STR( 4C_1C ) ) - PORT_CONFSETTING( 0x01, DEF_STR( 3C_1C ) ) - PORT_CONFSETTING( 0x02, DEF_STR( 2C_1C ) ) - PORT_CONFSETTING( 0x03, DEF_STR( 1C_1C ) ) - PORT_CONFNAME( 0x04, 0x04, DEF_STR( Game_Time ) ) - PORT_CONFSETTING( 0x00, "1.5 mins" ) - PORT_CONFSETTING( 0x04, "2 mins" ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - /* this is really used for the coin latch, */ - /* see blockade_interrupt() */ + PORT_INCLUDE(blockade) + + PORT_MODIFY("IN0") + PORT_CONFNAME(0x03, 0x03, DEF_STR( Coinage )) + PORT_CONFSETTING( 0x00, DEF_STR( 4C_1C )) + PORT_CONFSETTING( 0x01, DEF_STR( 3C_1C )) + PORT_CONFSETTING( 0x02, DEF_STR( 2C_1C )) + PORT_CONFSETTING( 0x03, DEF_STR( 1C_1C )) + PORT_CONFNAME(0x04, 0x04, DEF_STR( Game_Time )) + PORT_CONFSETTING( 0x00, "1.5 mins" ) + PORT_CONFSETTING( 0x04, "2 mins" ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_START1) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_START2) + PORT_BIT(0x60, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(1) + + PORT_MODIFY("IN2") + PORT_CONFNAME(0xf1, 0xf0, "Free Game") + PORT_CONFSETTING( 0x71, "11000") + PORT_CONFSETTING( 0xb1, "13000") + PORT_CONFSETTING( 0xd1, "15000") + PORT_CONFSETTING( 0xe1, "17000") + PORT_CONFSETTING( 0xf0, "Disabled") + PORT_BIT(0x0e, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) +static INPUT_PORTS_START( mineswpr ) + PORT_INCLUDE(blockade) + + PORT_MODIFY("IN0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) // This wiring selects upright mode + PORT_CONFNAME(0x04, 0x04, "Boom Switch") + PORT_CONFSETTING( 0x00, DEF_STR( Off )) + PORT_CONFSETTING( 0x04, DEF_STR( On )) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_CONFNAME(0x70, 0x70, DEF_STR( Lives )) + PORT_CONFSETTING( 0x60, "3") + PORT_CONFSETTING( 0x50, "4") + PORT_CONFSETTING( 0x30, "5") + PORT_CONFSETTING( 0x70, "6") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(2) + + PORT_MODIFY("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END - PORT_START("IN2") - PORT_CONFNAME( 0xf1, 0xf0, "Free Game" ) - PORT_CONFSETTING( 0x71, "11000" ) - PORT_CONFSETTING( 0xb1, "13000" ) - PORT_CONFSETTING( 0xd1, "15000" ) - PORT_CONFSETTING( 0xe1, "17000" ) - PORT_CONFSETTING( 0xf0, "Disabled" ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("IN3") - PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") +static INPUT_PORTS_START( mineswpr4 ) + PORT_INCLUDE(blockade) + + PORT_MODIFY("IN0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) // This wiring selects cocktail mode + PORT_CONFNAME(0x04, 0x04, "Boom Switch") + PORT_CONFSETTING( 0x00, DEF_STR( Off )) + PORT_CONFSETTING( 0x04, DEF_STR( On )) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_CONFNAME(0x70, 0x70, DEF_STR( Lives )) + PORT_CONFSETTING( 0x60, "3") + PORT_CONFSETTING( 0x50, "4") + PORT_CONFSETTING( 0x30, "5") + PORT_CONFSETTING( 0x70, "6") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr) + + PORT_MODIFY("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(1) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(2) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(2) + + PORT_MODIFY("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(3) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(3) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(3) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(3) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(4) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(4) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(4) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(4) INPUT_PORTS_END -static INPUT_PORTS_START( mineswpr ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* This wiring selects upright mode */ - PORT_CONFNAME( 0x04, 0x04, "Boom Switch" ) - PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x04, DEF_STR( On ) ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_CONFNAME( 0x70, 0x70, DEF_STR( Lives ) ) - PORT_CONFSETTING( 0x60, "3" ) - PORT_CONFSETTING( 0x50, "4" ) - PORT_CONFSETTING( 0x30, "5" ) - PORT_CONFSETTING( 0x70, "6" ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - /* this is really used for the coin latch, */ - /* see blockade_interrupt() */ - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) +//************************************************************************** +// INPUT PORT HANDLING +//************************************************************************** - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("IN3") - PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") -INPUT_PORTS_END +INPUT_CHANGED_MEMBER( blockade_state::coin_inserted ) +{ + m_coin_inserted = newval; -static INPUT_PORTS_START( mineswpr4 ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* This wiring selects cocktail mode */ - PORT_CONFNAME( 0x04, 0x04, "Boom Switch" ) - PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x04, DEF_STR( On ) ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_CONFNAME( 0x70, 0x70, DEF_STR( Lives ) ) - PORT_CONFSETTING( 0x60, "3" ) - PORT_CONFSETTING( 0x50, "4" ) - PORT_CONFSETTING( 0x30, "5" ) - PORT_CONFSETTING( 0x70, "6" ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - /* this is really used for the coin latch, */ - /* see blockade_interrupt() */ + if (newval) + m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); +} - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2) +CUSTOM_INPUT_MEMBER( blockade_state::coin_r ) +{ + return m_coin_latch; +} - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(3) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(3) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(3) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(4) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(4) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(4) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(4) - - PORT_START("IN3") - PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") -INPUT_PORTS_END +WRITE8_MEMBER( blockade_state::coin_latch_w ) +{ + if (BIT(data, 7)) + { + m_coin_latch = m_coin_inserted; + m_coin_inserted = 0; + } +} -/************************************* - * - * Graphics definitions - * - *************************************/ +//************************************************************************** +// VIDEO +//************************************************************************** -static const gfx_layout blockade_layout = +WRITE8_MEMBER( blockade_state::videoram_w ) { - 8,8, /* 8*8 characters */ - 32, /* 32 characters */ - 1, /* 1 bit per pixel */ - { 0 }, /* no separation in 1 bpp */ - { 0,1,2,3,4,5,6,7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every char takes 8 consecutive bytes */ -}; + m_videoram[offset] = data; + m_tilemap->mark_tile_dirty(offset); -static const gfx_layout blasto_layout = + // halt the cpu if it writes to ram while not in vblank + if (!m_screen->vblank()) + { + m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); + m_vblank_timer->adjust(m_screen->time_until_vblank_start()); + } +} + +uint32_t blockade_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - 8,8, /* 8*8 characters */ - 64, /* 64 characters */ - 1, /* 1 bit per pixel */ - { 0 }, /* no separation in 1 bpp */ - { 0,1,2,3,4,5,6,7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 /* every char takes 8 consecutive bytes */ -}; + m_tilemap->draw(screen, bitmap, cliprect, 0, 0); + return 0; +} static GFXDECODE_START( blockade ) - GFXDECODE_ENTRY( "gfx1", 0x0000, blockade_layout, 0, 1 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x1, 0, 1 ) GFXDECODE_END -static GFXDECODE_START( blasto ) - GFXDECODE_ENTRY( "gfx1", 0x0000, blasto_layout, 0, 1 ) -GFXDECODE_END +TILE_GET_INFO_MEMBER( blockade_state::tile_info ) +{ + int code = m_videoram[tile_index]; + SET_TILE_INFO_MEMBER(0, code, 0, 0); +} + +//************************************************************************** +// AUDIO +//************************************************************************** -/************************************* - * - * Machine driver - * - *************************************/ +// This still needs the noise generator stuff along with proper mixing and volume control + +#define BLOCKADE_NOTE_DATA NODE_01 +#define BLOCKADE_NOTE NODE_02 + +DISCRETE_SOUND_START( blockade ) + DISCRETE_INPUT_DATA (BLOCKADE_NOTE_DATA) + + /************************************************/ + /* Note sound is created by a divider circuit. */ + /* The master clock is the 93681.5 Hz, from the */ + /* 555 oscillator. This is then sent to a */ + /* preloadable 8 bit counter, which loads the */ + /* value from OUT02 when overflowing from 0xFF */ + /* to 0x00. Therefore it divides by 2 (OUT02 */ + /* = FE) to 256 (OUT02 = 00). */ + /* There is also a final /2 stage. */ + /* Note that there is no music disable line. */ + /* When there is no music, the game sets the */ + /* oscillator to 0Hz. (OUT02 = FF) */ + /************************************************/ + DISCRETE_NOTE(BLOCKADE_NOTE, 1, 93681.5, BLOCKADE_NOTE_DATA, 255, 1, DISC_CLK_IS_FREQ | DISC_OUT_IS_ENERGY) + DISCRETE_CRFILTER(NODE_10, BLOCKADE_NOTE, RES_K(35), CAP_U(.01)) + + DISCRETE_OUTPUT(NODE_10, 7500) +DISCRETE_SOUND_END + +WRITE8_MEMBER( blockade_state::sound_freq_w ) +{ + m_discrete->write(space, BLOCKADE_NOTE_DATA, data); + return; +} + +WRITE8_MEMBER( blockade_state::env_on_w ) +{ + m_samples->start(0, 0); + return; +} + +WRITE8_MEMBER( blockade_state::env_off_w ) +{ + return; +} + +const char *const blockade_sample_names[] = +{ + "*blockade", + "boom", + nullptr +}; + + +//************************************************************************** +// MACHINE EMULATION +//************************************************************************** void blockade_state::machine_start() { + m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(blockade_state::tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + + m_vblank_timer = timer_alloc(0); + + // register for save states save_item(NAME(m_coin_latch)); - save_item(NAME(m_just_been_reset)); + save_item(NAME(m_coin_inserted)); } void blockade_state::machine_reset() { - m_coin_latch = 1; - m_just_been_reset = 0; + m_coin_latch = 0; + m_coin_inserted = 0; } -static MACHINE_CONFIG_START( blockade, blockade_state ) +void blockade_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + // resume cpu, on the real system, this is connected the READY input + m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); +} + + +//************************************************************************** +// MACHINE DEFINTIONS +//************************************************************************** - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", I8080, MASTER_CLOCK/10) +static MACHINE_CONFIG_START( blockade, blockade_state ) + MCFG_CPU_ADD("maincpu", I8080A, XTAL_20_079MHz / 10) MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_IO_MAP(main_io_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", blockade_state, blockade_interrupt) - - /* video hardware */ + // video hardware MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 28*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(blockade_state, screen_update_blockade) + MCFG_SCREEN_RAW_PARAMS(XTAL_20_079MHz / 4, 330, 0, 256, 262, 0, 224) + MCFG_SCREEN_UPDATE_DRIVER(blockade_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", blockade) - MCFG_PALETTE_ADD_MONOCHROME("palette") + MCFG_PALETTE_ADD_MONOCHROME("palette") - /* sound hardware */ + // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("samples", SAMPLES, 0) @@ -493,91 +486,86 @@ static MACHINE_CONFIG_START( blockade, blockade_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( blasto, blockade ) - MCFG_GFXDECODE_MODIFY("gfxdecode", blasto) -MACHINE_CONFIG_END -/************************************* - * - * ROM definition(s) - * - *************************************/ +//************************************************************************** +// ROM DEFINITIONS +//************************************************************************** ROM_START( blockade ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD_NIB_HIGH( "316-04.u2", 0x0000, 0x0400, CRC(a93833e9) SHA1(e29e7b29900f8305effa700a53806a12bf9d37bd) ) - ROM_LOAD_NIB_LOW( "316-03.u3", 0x0000, 0x0400, CRC(85960d3b) SHA1(aabfe8f9c26126299d6c07a31ef1aac5300deff5) ) + ROM_REGION(0x800, "maincpu", 0) + ROM_LOAD_NIB_HIGH("316-0004.u2", 0x000, 0x400, CRC(a93833e9) SHA1(e29e7b29900f8305effa700a53806a12bf9d37bd)) + ROM_LOAD_NIB_LOW( "316-0003.u3", 0x000, 0x400, CRC(85960d3b) SHA1(aabfe8f9c26126299d6c07a31ef1aac5300deff5)) - ROM_REGION( 0x100, "gfx1", 0 ) - ROM_LOAD_NIB_HIGH( "316-02.u29", 0x0000, 0x0100, CRC(409f610f) SHA1(0c2253f4b72d8aa395f87cc0abe07f0b46fa538b) ) - ROM_LOAD_NIB_LOW( "316-01.u43", 0x0000, 0x0100, CRC(41a00b28) SHA1(2d0a90aac9d10a1ded240e5202fdf9cd7f70c4a7) ) + ROM_REGION(0x100, "gfx1", 0) + ROM_LOAD_NIB_HIGH("316-0002.u29", 0x000, 0x100, CRC(409f610f) SHA1(0c2253f4b72d8aa395f87cc0abe07f0b46fa538b)) + ROM_LOAD_NIB_LOW( "316-0001.u43", 0x000, 0x100, CRC(41a00b28) SHA1(2d0a90aac9d10a1ded240e5202fdf9cd7f70c4a7)) ROM_END ROM_START( comotion ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD_NIB_HIGH( "316-07.u2", 0x0000, 0x0400, CRC(5b9bd054) SHA1(324b844788945e7bc82d096d6d375e79e3e1a634) ) - ROM_LOAD_NIB_LOW( "316-08.u3", 0x0000, 0x0400, CRC(1a856042) SHA1(91bdc260e8c88ce2b6ac05bfba043ed611bc30de) ) - ROM_LOAD_NIB_HIGH( "316-09.u4", 0x0400, 0x0400, CRC(2590f87c) SHA1(95a7af04b610d79fb3f6d74dda322e66164b9484) ) - ROM_LOAD_NIB_LOW( "316-10.u5", 0x0400, 0x0400, CRC(fb49a69b) SHA1(4009c3256a86508d981c1f77b65e6bff1face1e7) ) - - ROM_REGION( 0x100, "gfx1", 0 ) - ROM_LOAD_NIB_HIGH( "316-06.u43", 0x0000, 0x0100, CRC(8f071297) SHA1(811471c87b77b4b9ab056cf0c0743fc2616b754c) ) /* Note: these are reversed */ - ROM_LOAD_NIB_LOW( "316-05.u29", 0x0000, 0x0100, CRC(53fb8821) SHA1(0a499aa4cf15f7ebea155aacd914de8851544215) ) + ROM_REGION(0x800, "maincpu", 0) + ROM_LOAD_NIB_HIGH("316-0007.u2", 0x000, 0x400, CRC(5b9bd054) SHA1(324b844788945e7bc82d096d6d375e79e3e1a634)) + ROM_LOAD_NIB_LOW( "316-0008.u3", 0x000, 0x400, CRC(1a856042) SHA1(91bdc260e8c88ce2b6ac05bfba043ed611bc30de)) + ROM_LOAD_NIB_HIGH("316-0009.u4", 0x400, 0x400, CRC(2590f87c) SHA1(95a7af04b610d79fb3f6d74dda322e66164b9484)) + ROM_LOAD_NIB_LOW( "316-0010.u5", 0x400, 0x400, CRC(fb49a69b) SHA1(4009c3256a86508d981c1f77b65e6bff1face1e7)) + + ROM_REGION(0x100, "gfx1", 0) + ROM_LOAD_NIB_HIGH("316-0006.u43", 0x000, 0x100, CRC(8f071297) SHA1(811471c87b77b4b9ab056cf0c0743fc2616b754c)) // these are reversed + ROM_LOAD_NIB_LOW( "316-0005.u29", 0x000, 0x100, CRC(53fb8821) SHA1(0a499aa4cf15f7ebea155aacd914de8851544215)) ROM_END ROM_START( blasto ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD_NIB_HIGH( "blasto.u2", 0x0000, 0x0400, CRC(ec99d043) SHA1(10650e54bf55f3ace5c199215c2fce211916d3b7) ) - ROM_LOAD_NIB_LOW( "blasto.u3", 0x0000, 0x0400, CRC(be333415) SHA1(386cab720f0c2da16b9ec84f67ccebf23406c58d) ) - ROM_LOAD_NIB_HIGH( "blasto.u4", 0x0400, 0x0400, CRC(1c889993) SHA1(e23c72d075cf3d209081bca5a953c33c8ae042ea) ) - ROM_LOAD_NIB_LOW( "blasto.u5", 0x0400, 0x0400, CRC(efb640cb) SHA1(2dff5b249f876d7d13cc6dfad652ce7e5af10370) ) - - ROM_REGION( 0x200, "gfx1", 0 ) - ROM_LOAD_NIB_HIGH( "blasto.u29", 0x0000, 0x0200, CRC(4dd69499) SHA1(34f097477a297bf5f986804e5967c92f9292be29) ) - ROM_LOAD_NIB_LOW( "blasto.u43", 0x0000, 0x0200, CRC(104051a4) SHA1(cae6b9d48e3eda5ba12ff5d9835ce2733e90f774) ) + ROM_REGION(0x800, "maincpu", 0) + ROM_LOAD_NIB_HIGH("316-0089.u2", 0x000, 0x400, CRC(ec99d043) SHA1(10650e54bf55f3ace5c199215c2fce211916d3b7)) + ROM_LOAD_NIB_LOW( "316-0090.u3", 0x000, 0x400, CRC(be333415) SHA1(386cab720f0c2da16b9ec84f67ccebf23406c58d)) + ROM_LOAD_NIB_HIGH("316-0091.u4", 0x400, 0x400, CRC(1c889993) SHA1(e23c72d075cf3d209081bca5a953c33c8ae042ea)) + ROM_LOAD_NIB_LOW( "316-0092.u5", 0x400, 0x400, CRC(efb640cb) SHA1(2dff5b249f876d7d13cc6dfad652ce7e5af10370)) + + ROM_REGION(0x200, "gfx1", 0) + ROM_LOAD_NIB_HIGH("316-0093.u29", 0x000, 0x200, CRC(4dd69499) SHA1(34f097477a297bf5f986804e5967c92f9292be29)) + ROM_LOAD_NIB_LOW( "316-0094.u43", 0x000, 0x200, CRC(104051a4) SHA1(cae6b9d48e3eda5ba12ff5d9835ce2733e90f774)) ROM_END ROM_START( hustle ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD_NIB_HIGH( "3160016.u2", 0x0000, 0x0400, CRC(d983de7c) SHA1(af6e0ea78449bfba4fe8affd724d7b0eb3d38706) ) - ROM_LOAD_NIB_LOW( "3160017.u3", 0x0000, 0x0400, CRC(edec9cb9) SHA1(548cc7b0a15a1c977b7ef4a99ff88101893f661a) ) - ROM_LOAD_NIB_HIGH( "3160018.u4", 0x0400, 0x0400, CRC(f599b9c0) SHA1(c55ed33ac51b9cfbb2fe4321bbb1e0a16694f065) ) - ROM_LOAD_NIB_LOW( "3160019.u5", 0x0400, 0x0400, CRC(7794bc7e) SHA1(b3d577291dea0e096b2ee56b0ef612f41b2e859c) ) - - ROM_REGION( 0x200, "gfx1", 0 ) - ROM_LOAD_NIB_HIGH( "3160020.u29", 0x0000, 0x0200, CRC(541d2c67) SHA1(abdb918f302352693870b0a50eabaf95acf1cf63) ) - ROM_LOAD_NIB_LOW( "3160021.u43", 0x0000, 0x0200, CRC(b5083128) SHA1(d7e8242e9d12d09f3d69c08e373ede2bdd4deba9) ) + ROM_REGION(0x800, "maincpu", 0) + ROM_LOAD_NIB_HIGH("316-0016.u2", 0x000, 0x400, CRC(d983de7c) SHA1(af6e0ea78449bfba4fe8affd724d7b0eb3d38706)) + ROM_LOAD_NIB_LOW( "316-0017.u3", 0x000, 0x400, CRC(edec9cb9) SHA1(548cc7b0a15a1c977b7ef4a99ff88101893f661a)) + ROM_LOAD_NIB_HIGH("316-0018.u4", 0x400, 0x400, CRC(f599b9c0) SHA1(c55ed33ac51b9cfbb2fe4321bbb1e0a16694f065)) + ROM_LOAD_NIB_LOW( "316-0019.u5", 0x400, 0x400, CRC(7794bc7e) SHA1(b3d577291dea0e096b2ee56b0ef612f41b2e859c)) + + ROM_REGION(0x200, "gfx1", 0) + ROM_LOAD_NIB_HIGH("316-0020.u29", 0x000, 0x200, CRC(541d2c67) SHA1(abdb918f302352693870b0a50eabaf95acf1cf63)) + ROM_LOAD_NIB_LOW( "316-0021.u43", 0x000, 0x200, CRC(b5083128) SHA1(d7e8242e9d12d09f3d69c08e373ede2bdd4deba9)) ROM_END ROM_START( mineswpr ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD_NIB_HIGH( "mineswee.h0p", 0x0000, 0x0400, CRC(5850a4ba) SHA1(9f097d31428f4494573187049c53fbed2075ff32) ) - ROM_LOAD_NIB_LOW( "mineswee.l0p", 0x0000, 0x0400, CRC(05961379) SHA1(3d59341be8a663e8c54c1556442c992a6eb886ab) ) + ROM_REGION(0x800, "maincpu", 0) + ROM_LOAD_NIB_HIGH("mineswee.h0p", 0x000, 0x400, CRC(5850a4ba) SHA1(9f097d31428f4494573187049c53fbed2075ff32)) + ROM_LOAD_NIB_LOW( "mineswee.l0p", 0x000, 0x400, CRC(05961379) SHA1(3d59341be8a663e8c54c1556442c992a6eb886ab)) - ROM_REGION( 0x200, "gfx1", 0 ) - ROM_LOAD_NIB_HIGH( "mineswee.ums", 0x0000, 0x0200, CRC(0e1c5c37) SHA1(d4d56bd63307e387771c48304724dfc1ea1306d9) ) - ROM_LOAD_NIB_LOW( "mineswee.uls", 0x0000, 0x0200, CRC(3a4f66e1) SHA1(bd7f6c51d568a79fb06414b2a6ef245d0d983c3e) ) + ROM_REGION(0x200, "gfx1", 0) + ROM_LOAD_NIB_HIGH("mineswee.ums", 0x000, 0x200, CRC(0e1c5c37) SHA1(d4d56bd63307e387771c48304724dfc1ea1306d9)) + ROM_LOAD_NIB_LOW( "mineswee.uls", 0x000, 0x200, CRC(3a4f66e1) SHA1(bd7f6c51d568a79fb06414b2a6ef245d0d983c3e)) ROM_END ROM_START( mineswpr4 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD_NIB_HIGH( "mineswee.h0p", 0x0000, 0x0400, CRC(5850a4ba) SHA1(9f097d31428f4494573187049c53fbed2075ff32) ) - ROM_LOAD_NIB_LOW( "mineswee.l0p", 0x0000, 0x0400, CRC(05961379) SHA1(3d59341be8a663e8c54c1556442c992a6eb886ab) ) + ROM_REGION(0x800, "maincpu", 0) + ROM_LOAD_NIB_HIGH("mineswee.h0p", 0x000, 0x400, CRC(5850a4ba) SHA1(9f097d31428f4494573187049c53fbed2075ff32)) + ROM_LOAD_NIB_LOW( "mineswee.l0p", 0x000, 0x400, CRC(05961379) SHA1(3d59341be8a663e8c54c1556442c992a6eb886ab)) - ROM_REGION( 0x200, "gfx1", 0 ) - ROM_LOAD_NIB_HIGH( "mineswee.cms", 0x0000, 0x0200, CRC(aad3ce0c) SHA1(92257706ae0c9c1a258eed3311116063e647e1ae) ) - ROM_LOAD_NIB_LOW( "mineswee.cls", 0x0000, 0x0200, CRC(70959755) SHA1(f62d448742da3fae8bbd96eb3a2714db500cecce) ) + ROM_REGION(0x200, "gfx1", 0) + ROM_LOAD_NIB_HIGH("mineswee.cms", 0x000, 0x200, CRC(aad3ce0c) SHA1(92257706ae0c9c1a258eed3311116063e647e1ae)) + ROM_LOAD_NIB_LOW( "mineswee.cls", 0x000, 0x200, CRC(70959755) SHA1(f62d448742da3fae8bbd96eb3a2714db500cecce)) ROM_END -/************************************* - * - * Game driver - * - *************************************/ - -GAMEL(1976, blockade, 0, blockade, blockade, driver_device, 0, ROT0, "Gremlin", "Blockade", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_blockade ) -GAMEL(1976, comotion, 0, blockade, comotion, driver_device, 0, ROT0, "Gremlin", "Comotion", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_blockade ) -GAME( 1978, blasto, 0, blasto, blasto, driver_device, 0, ROT0, "Gremlin", "Blasto", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // b/w, no overlay -GAMEL(1977, hustle, 0, blasto, hustle, driver_device, 0, ROT0, "Gremlin", "Hustle", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_blockade ) -GAME( 1977, mineswpr, 0, blasto, mineswpr, driver_device, 0, ROT0, "Amutech", "Minesweeper", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1977, mineswpr4, mineswpr, blasto, mineswpr4, driver_device,0, ROT0, "Amutech", "Minesweeper (4-Player)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) + +//************************************************************************** +// SYSTEM DRIVERS +//************************************************************************** + +// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROTATION COMPANY FULLNAME FLAGS LAYOUT +GAMEL(1976, blockade, 0, blockade, blockade, driver_device, 0, ROT0, "Gremlin", "Blockade", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_blockade ) +GAMEL(1976, comotion, 0, blockade, comotion, driver_device, 0, ROT0, "Gremlin", "CoMOTION", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_blockade ) +GAME( 1978, blasto, 0, blockade, blasto, driver_device, 0, ROT0, "Gremlin", "Blasto", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // b/w, no overlay +GAMEL(1977, hustle, 0, blockade, hustle, driver_device, 0, ROT0, "Gremlin", "Hustle", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_blockade ) +GAME( 1977, mineswpr, 0, blockade, mineswpr, driver_device, 0, ROT0, "Amutech", "Minesweeper", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1977, mineswpr4, mineswpr, blockade, mineswpr4, driver_device, 0, ROT0, "Amutech", "Minesweeper (4-Player)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/blockade.h b/src/mame/includes/blockade.h deleted file mode 100644 index 356e9bbf098..00000000000 --- a/src/mame/includes/blockade.h +++ /dev/null @@ -1,47 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Frank Palazzolo -#include "sound/discrete.h" -#include "sound/samples.h" - -class blockade_state : public driver_device -{ -public: - blockade_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_videoram(*this, "videoram"), - m_discrete(*this, "discrete"), - m_maincpu(*this, "maincpu"), - m_samples(*this, "samples"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen") { } - - required_shared_ptr m_videoram; - required_device m_discrete; - /* video-related */ - tilemap_t *m_bg_tilemap; - - /* input-related */ - uint8_t m_coin_latch; /* Active Low */ - uint8_t m_just_been_reset; - DECLARE_READ8_MEMBER(blockade_input_port_0_r); - DECLARE_WRITE8_MEMBER(blockade_coin_latch_w); - DECLARE_WRITE8_MEMBER(blockade_videoram_w); - DECLARE_WRITE8_MEMBER(blockade_env_on_w); - DECLARE_WRITE8_MEMBER(blockade_env_off_w); - TILE_GET_INFO_MEMBER(get_bg_tile_info); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_blockade(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(blockade_interrupt); - DECLARE_WRITE8_MEMBER(blockade_sound_freq_w); - required_device m_maincpu; - required_device m_samples; - required_device m_gfxdecode; - required_device m_screen; -}; - -/*----------- defined in audio/blockade.c -----------*/ - -extern const char *const blockade_sample_names[]; -DISCRETE_SOUND_EXTERN( blockade ); diff --git a/src/mame/video/blockade.cpp b/src/mame/video/blockade.cpp deleted file mode 100644 index 102c44f465b..00000000000 --- a/src/mame/video/blockade.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Frank Palazzolo -#include "emu.h" -#include "includes/blockade.h" - -WRITE8_MEMBER(blockade_state::blockade_videoram_w) -{ - m_videoram[offset] = data; - m_bg_tilemap->mark_tile_dirty(offset); - - if (ioport("IN3")->read() & 0x80) - { - logerror("blockade_videoram_w: scanline %d\n", m_screen->vpos()); - space.device().execute().spin_until_interrupt(); - } -} - -TILE_GET_INFO_MEMBER(blockade_state::get_bg_tile_info) -{ - int code = m_videoram[tile_index]; - - SET_TILE_INFO_MEMBER(0, code, 0, 0); -} - -void blockade_state::video_start() -{ - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(blockade_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); -} - -uint32_t blockade_state::screen_update_blockade(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - return 0; -} -- cgit v1.2.3