mirror of
https://github.com/holub/mame
synced 2025-06-16 17:29:27 +03:00
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
This commit is contained in:
parent
239dcd4449
commit
663c789014
@ -3090,9 +3090,6 @@ files {
|
|||||||
MAME_DIR .. "src/mame/video/angelkds.cpp",
|
MAME_DIR .. "src/mame/video/angelkds.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/bingoc.cpp",
|
MAME_DIR .. "src/mame/drivers/bingoc.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/blockade.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/calorie.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/chihiro.cpp",
|
MAME_DIR .. "src/mame/drivers/chihiro.cpp",
|
||||||
MAME_DIR .. "src/mame/includes/xbox_nv2a.h",
|
MAME_DIR .. "src/mame/includes/xbox_nv2a.h",
|
||||||
|
@ -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
|
|
||||||
};
|
|
@ -1,166 +1,118 @@
|
|||||||
// license: BSD-3-Clause
|
// license: BSD-3-Clause
|
||||||
// copyright-holders:Frank Palazzolo
|
// copyright-holders: Frank Palazzolo, Dirk Best
|
||||||
/****************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Blockade/Comotion/Blasto/Hustle Memory MAP
|
Blockade/CoMOTION/Blasto/Hustle/Minesweeper
|
||||||
Frank Palazzolo (palazzol@comcast.net)
|
|
||||||
|
|
||||||
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 "emu.h"
|
||||||
#include "cpu/i8085/i8085.h"
|
#include "cpu/i8085/i8085.h"
|
||||||
#include "includes/blockade.h"
|
|
||||||
#include "sound/samples.h"
|
#include "sound/samples.h"
|
||||||
#include "sound/discrete.h"
|
#include "sound/discrete.h"
|
||||||
|
|
||||||
#include "blockade.lh"
|
#include "blockade.lh"
|
||||||
|
|
||||||
#define BLOCKADE_LOG 0
|
|
||||||
#define MASTER_CLOCK XTAL_20_079MHz
|
|
||||||
|
|
||||||
/* These are used to simulate coin latch circuitry */
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
/*************************************************************/
|
class blockade_state : public driver_device
|
||||||
/* */
|
|
||||||
/* 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. */
|
|
||||||
/* */
|
|
||||||
/*************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
/* Need to check for a coin on the interrupt, */
|
|
||||||
/* This will reset the cpu */
|
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(blockade_state::blockade_interrupt)
|
|
||||||
{
|
{
|
||||||
device.execute().resume(SUSPEND_ANY_REASON);
|
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)
|
||||||
|
{ }
|
||||||
|
|
||||||
if ((ioport("IN0")->read() & 0x80) == 0)
|
DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
|
||||||
{
|
DECLARE_CUSTOM_INPUT_MEMBER(coin_r);
|
||||||
m_just_been_reset = 1;
|
DECLARE_WRITE8_MEMBER(coin_latch_w);
|
||||||
device.execute().set_input_line(INPUT_LINE_RESET, PULSE_LINE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************
|
DECLARE_WRITE8_MEMBER(videoram_w);
|
||||||
*
|
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
* Memory handlers
|
TILE_GET_INFO_MEMBER(tile_info);
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
READ8_MEMBER(blockade_state::blockade_input_port_0_r)
|
DECLARE_WRITE8_MEMBER(sound_freq_w);
|
||||||
{
|
DECLARE_WRITE8_MEMBER(env_on_w);
|
||||||
/* coin latch is bit 7 */
|
DECLARE_WRITE8_MEMBER(env_off_w);
|
||||||
uint8_t temp = (ioport("IN0")->read() & 0x7f);
|
|
||||||
|
|
||||||
return (m_coin_latch << 7) | temp;
|
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;
|
||||||
|
|
||||||
WRITE8_MEMBER(blockade_state::blockade_coin_latch_w)
|
private:
|
||||||
{
|
required_device<cpu_device> m_maincpu;
|
||||||
if (data & 0x80)
|
required_shared_ptr<uint8_t> m_videoram;
|
||||||
{
|
required_device<gfxdecode_device> m_gfxdecode;
|
||||||
if (BLOCKADE_LOG) osd_printf_debug("Reset Coin Latch\n");
|
required_device<screen_device> m_screen;
|
||||||
if (m_just_been_reset)
|
required_device<discrete_device> m_discrete;
|
||||||
{
|
required_device<samples_device> m_samples;
|
||||||
m_just_been_reset = 0;
|
|
||||||
m_coin_latch = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m_coin_latch = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data & 0x20)
|
emu_timer *m_vblank_timer;
|
||||||
{
|
tilemap_t *m_tilemap;
|
||||||
if (BLOCKADE_LOG) osd_printf_debug("Pin 19 High\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (BLOCKADE_LOG) osd_printf_debug("Pin 19 Low\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
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 )
|
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, blockade_state )
|
||||||
AM_RANGE(0x0000, 0x07ff) AM_ROM AM_MIRROR(0x6000)
|
AM_RANGE(0x0000, 0x03ff) AM_MIRROR(0x6000) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(blockade_videoram_w) AM_SHARE("videoram") AM_MIRROR(0x6c00)
|
AM_RANGE(0x0400, 0x07ff) AM_MIRROR(0x6000) AM_ROM // comotion, blasto, hustle
|
||||||
AM_RANGE(0x9000, 0x90ff) AM_RAM AM_MIRROR(0x6f00)
|
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
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( main_io_map, AS_IO, 8, blockade_state )
|
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(0x01, 0x01) AM_READ_PORT("IN0") AM_WRITE(coin_latch_w)
|
||||||
AM_RANGE(0x02, 0x02) AM_READ_PORT("IN1")
|
AM_RANGE(0x02, 0x02) AM_READ_PORT("IN1") AM_WRITE(sound_freq_w)
|
||||||
AM_RANGE(0x02, 0x02) AM_WRITE(blockade_sound_freq_w)
|
AM_RANGE(0x04, 0x04) AM_READ_PORT("IN2") AM_WRITE(env_on_w)
|
||||||
AM_RANGE(0x04, 0x04) AM_READ_PORT("IN2")
|
AM_RANGE(0x08, 0x08) AM_WRITE(env_off_w)
|
||||||
AM_RANGE(0x04, 0x04) AM_WRITE(blockade_env_on_w)
|
|
||||||
AM_RANGE(0x08, 0x08) AM_WRITE(blockade_env_off_w)
|
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
//**************************************************************************
|
||||||
*
|
// INPUT PORT DEFINITIONS
|
||||||
* 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. */
|
|
||||||
|
|
||||||
static INPUT_PORTS_START( blockade )
|
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_START("IN0")
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
PORT_CONFNAME(0x04, 0x04, "Boom Switch")
|
PORT_CONFNAME(0x04, 0x04, "Boom Switch")
|
||||||
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
||||||
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
PORT_CONFNAME(0x70, 0x70, DEF_STR( Lives ))
|
PORT_CONFNAME(0x70, 0x70, DEF_STR( Lives ))
|
||||||
PORT_CONFSETTING( 0x60, "3" )
|
PORT_CONFSETTING( 0x60, "3" )
|
||||||
PORT_CONFSETTING( 0x50, "4" )
|
PORT_CONFSETTING( 0x50, "4" )
|
||||||
PORT_CONFSETTING( 0x30, "5" )
|
PORT_CONFSETTING( 0x30, "5" )
|
||||||
PORT_CONFSETTING( 0x70, "6" )
|
PORT_CONFSETTING( 0x70, "6" )
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr)
|
||||||
/* this is really used for the coin latch, */
|
|
||||||
/* see blockade_interrupt() */
|
|
||||||
|
|
||||||
PORT_START("IN1")
|
PORT_START("IN1")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2)
|
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2)
|
||||||
@ -173,24 +125,15 @@ static INPUT_PORTS_START( blockade )
|
|||||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(1)
|
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(1)
|
||||||
|
|
||||||
PORT_START("IN2")
|
PORT_START("IN2")
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
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 )
|
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
static INPUT_PORTS_START( comotion )
|
static INPUT_PORTS_START( comotion )
|
||||||
PORT_START("IN0")
|
PORT_INCLUDE(blockade)
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
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_CONFNAME(0x04, 0x04, "Boom Switch")
|
||||||
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
||||||
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
||||||
@ -198,13 +141,11 @@ static INPUT_PORTS_START( comotion )
|
|||||||
PORT_CONFSETTING( 0x00, "3")
|
PORT_CONFSETTING( 0x00, "3")
|
||||||
PORT_CONFSETTING( 0x08, "4")
|
PORT_CONFSETTING( 0x08, "4")
|
||||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_START1)
|
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_START1)
|
||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr)
|
||||||
/* this is really used for the coin latch, */
|
|
||||||
/* see blockade_interrupt() */
|
|
||||||
|
|
||||||
PORT_START("IN1")
|
PORT_MODIFY("IN1")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(1)
|
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(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(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(1)
|
||||||
@ -214,7 +155,7 @@ static INPUT_PORTS_START( comotion )
|
|||||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) 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_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(3)
|
||||||
|
|
||||||
PORT_START("IN2")
|
PORT_MODIFY("IN2")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2)
|
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(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(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(2)
|
||||||
@ -223,43 +164,34 @@ static INPUT_PORTS_START( comotion )
|
|||||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) 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(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_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
|
INPUT_PORTS_END
|
||||||
|
|
||||||
static INPUT_PORTS_START( blasto )
|
static INPUT_PORTS_START( blasto )
|
||||||
PORT_START("IN0")
|
PORT_INCLUDE(blockade)
|
||||||
|
|
||||||
|
PORT_MODIFY("IN0")
|
||||||
PORT_CONFNAME(0x03, 0x03, DEF_STR( Coinage ))
|
PORT_CONFNAME(0x03, 0x03, DEF_STR( Coinage ))
|
||||||
PORT_CONFSETTING( 0x00, DEF_STR( 4C_1C ))
|
PORT_CONFSETTING( 0x00, DEF_STR( 4C_1C ))
|
||||||
PORT_CONFSETTING( 0x01, DEF_STR( 3C_1C ))
|
PORT_CONFSETTING( 0x01, DEF_STR( 3C_1C ))
|
||||||
PORT_CONFSETTING( 0x02, DEF_STR( 2C_1C ))
|
PORT_CONFSETTING( 0x02, DEF_STR( 2C_1C ))
|
||||||
PORT_CONFSETTING( 0x03, DEF_STR( 1C_1C ))
|
PORT_CONFSETTING( 0x03, DEF_STR( 1C_1C ))
|
||||||
PORT_CONFNAME( 0x04, 0x04, "Attract Sound" )
|
PORT_CONFNAME(0x04, 0x04, DEF_STR( Demo_Sounds ))
|
||||||
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
||||||
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
||||||
PORT_CONFNAME(0x08, 0x08, DEF_STR( Game_Time ))
|
PORT_CONFNAME(0x08, 0x08, DEF_STR( Game_Time ))
|
||||||
PORT_CONFSETTING( 0x00, "70 Secs") // though service manual says 60
|
PORT_CONFSETTING( 0x00, "70 Secs") // though service manual says 60
|
||||||
PORT_CONFSETTING( 0x08, "90 Secs")
|
PORT_CONFSETTING( 0x08, "90 Secs")
|
||||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x70, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr)
|
||||||
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_MODIFY("IN1")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2)
|
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2)
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x1e, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
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(0x20, IP_ACTIVE_LOW, IPT_START1)
|
||||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START2)
|
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_START2)
|
||||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1)
|
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(1)
|
||||||
|
|
||||||
PORT_START("IN2")
|
PORT_MODIFY("IN2")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_4WAY PORT_PLAYER(2)
|
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(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(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(2)
|
||||||
@ -268,14 +200,12 @@ static INPUT_PORTS_START( blasto )
|
|||||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) 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(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_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")
|
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
static INPUT_PORTS_START( hustle )
|
static INPUT_PORTS_START( hustle )
|
||||||
PORT_START("IN0")
|
PORT_INCLUDE(blockade)
|
||||||
|
|
||||||
|
PORT_MODIFY("IN0")
|
||||||
PORT_CONFNAME(0x03, 0x03, DEF_STR( Coinage ))
|
PORT_CONFNAME(0x03, 0x03, DEF_STR( Coinage ))
|
||||||
PORT_CONFSETTING( 0x00, DEF_STR( 4C_1C ))
|
PORT_CONFSETTING( 0x00, DEF_STR( 4C_1C ))
|
||||||
PORT_CONFSETTING( 0x01, DEF_STR( 3C_1C ))
|
PORT_CONFSETTING( 0x01, DEF_STR( 3C_1C ))
|
||||||
@ -286,13 +216,10 @@ static INPUT_PORTS_START( hustle )
|
|||||||
PORT_CONFSETTING( 0x04, "2 mins" )
|
PORT_CONFSETTING( 0x04, "2 mins" )
|
||||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_START1)
|
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_START1)
|
||||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_START2)
|
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_START2)
|
||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x60, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr)
|
||||||
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_MODIFY("IN1")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(2)
|
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(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(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(2)
|
||||||
@ -302,40 +229,34 @@ static INPUT_PORTS_START( hustle )
|
|||||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) 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(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(1)
|
||||||
|
|
||||||
PORT_START("IN2")
|
PORT_MODIFY("IN2")
|
||||||
PORT_CONFNAME(0xf1, 0xf0, "Free Game")
|
PORT_CONFNAME(0xf1, 0xf0, "Free Game")
|
||||||
PORT_CONFSETTING( 0x71, "11000")
|
PORT_CONFSETTING( 0x71, "11000")
|
||||||
PORT_CONFSETTING( 0xb1, "13000")
|
PORT_CONFSETTING( 0xb1, "13000")
|
||||||
PORT_CONFSETTING( 0xd1, "15000")
|
PORT_CONFSETTING( 0xd1, "15000")
|
||||||
PORT_CONFSETTING( 0xe1, "17000")
|
PORT_CONFSETTING( 0xe1, "17000")
|
||||||
PORT_CONFSETTING( 0xf0, "Disabled")
|
PORT_CONFSETTING( 0xf0, "Disabled")
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x0e, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
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")
|
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
static INPUT_PORTS_START( mineswpr )
|
static INPUT_PORTS_START( mineswpr )
|
||||||
PORT_START("IN0")
|
PORT_INCLUDE(blockade)
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* This wiring selects upright mode */
|
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_CONFNAME(0x04, 0x04, "Boom Switch")
|
||||||
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
||||||
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
PORT_CONFNAME(0x70, 0x70, DEF_STR( Lives ))
|
PORT_CONFNAME(0x70, 0x70, DEF_STR( Lives ))
|
||||||
PORT_CONFSETTING( 0x60, "3")
|
PORT_CONFSETTING( 0x60, "3")
|
||||||
PORT_CONFSETTING( 0x50, "4")
|
PORT_CONFSETTING( 0x50, "4")
|
||||||
PORT_CONFSETTING( 0x30, "5")
|
PORT_CONFSETTING( 0x30, "5")
|
||||||
PORT_CONFSETTING( 0x70, "6")
|
PORT_CONFSETTING( 0x70, "6")
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr)
|
||||||
/* this is really used for the coin latch, */
|
|
||||||
/* see blockade_interrupt() */
|
|
||||||
|
|
||||||
PORT_START("IN1")
|
PORT_MODIFY("IN1")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(1)
|
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(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(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(1)
|
||||||
@ -345,39 +266,28 @@ static INPUT_PORTS_START( mineswpr )
|
|||||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) 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_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(2)
|
||||||
|
|
||||||
PORT_START("IN2")
|
PORT_MODIFY("IN2")
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
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_PORTS_END
|
||||||
|
|
||||||
static INPUT_PORTS_START( mineswpr4 )
|
static INPUT_PORTS_START( mineswpr4 )
|
||||||
PORT_START("IN0")
|
PORT_INCLUDE(blockade)
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* This wiring selects cocktail mode */
|
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_CONFNAME(0x04, 0x04, "Boom Switch")
|
||||||
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
PORT_CONFSETTING( 0x00, DEF_STR( Off ))
|
||||||
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
PORT_CONFSETTING( 0x04, DEF_STR( On ))
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||||
PORT_CONFNAME(0x70, 0x70, DEF_STR( Lives ))
|
PORT_CONFNAME(0x70, 0x70, DEF_STR( Lives ))
|
||||||
PORT_CONFSETTING( 0x60, "3")
|
PORT_CONFSETTING( 0x60, "3")
|
||||||
PORT_CONFSETTING( 0x50, "4")
|
PORT_CONFSETTING( 0x50, "4")
|
||||||
PORT_CONFSETTING( 0x30, "5")
|
PORT_CONFSETTING( 0x30, "5")
|
||||||
PORT_CONFSETTING( 0x70, "6")
|
PORT_CONFSETTING( 0x70, "6")
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
|
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, blockade_state, coin_r, nullptr)
|
||||||
/* this is really used for the coin latch, */
|
|
||||||
/* see blockade_interrupt() */
|
|
||||||
|
|
||||||
PORT_START("IN1")
|
PORT_MODIFY("IN1")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(1)
|
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(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(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(1)
|
||||||
@ -387,7 +297,7 @@ static INPUT_PORTS_START( mineswpr4 )
|
|||||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) 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_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_4WAY PORT_PLAYER(2)
|
||||||
|
|
||||||
PORT_START("IN2")
|
PORT_MODIFY("IN2")
|
||||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_4WAY PORT_PLAYER(3)
|
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(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(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_4WAY PORT_PLAYER(3)
|
||||||
@ -396,91 +306,174 @@ static INPUT_PORTS_START( mineswpr4 )
|
|||||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) 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(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_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
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
//**************************************************************************
|
||||||
*
|
// INPUT PORT HANDLING
|
||||||
* Graphics definitions
|
//**************************************************************************
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
static const gfx_layout blockade_layout =
|
INPUT_CHANGED_MEMBER( blockade_state::coin_inserted )
|
||||||
{
|
{
|
||||||
8,8, /* 8*8 characters */
|
m_coin_inserted = newval;
|
||||||
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 */
|
|
||||||
};
|
|
||||||
|
|
||||||
static const gfx_layout blasto_layout =
|
if (newval)
|
||||||
|
m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
CUSTOM_INPUT_MEMBER( blockade_state::coin_r )
|
||||||
{
|
{
|
||||||
8,8, /* 8*8 characters */
|
return m_coin_latch;
|
||||||
64, /* 64 characters */
|
}
|
||||||
1, /* 1 bit per pixel */
|
|
||||||
{ 0 }, /* no separation in 1 bpp */
|
WRITE8_MEMBER( blockade_state::coin_latch_w )
|
||||||
{ 0,1,2,3,4,5,6,7 },
|
{
|
||||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
if (BIT(data, 7))
|
||||||
8*8 /* every char takes 8 consecutive bytes */
|
{
|
||||||
};
|
m_coin_latch = m_coin_inserted;
|
||||||
|
m_coin_inserted = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// VIDEO
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
WRITE8_MEMBER( blockade_state::videoram_w )
|
||||||
|
{
|
||||||
|
m_videoram[offset] = data;
|
||||||
|
m_tilemap->mark_tile_dirty(offset);
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
{
|
||||||
|
m_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static GFXDECODE_START( blockade )
|
static GFXDECODE_START( blockade )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0x0000, blockade_layout, 0, 1 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x1, 0, 1 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
static GFXDECODE_START( blasto )
|
TILE_GET_INFO_MEMBER( blockade_state::tile_info )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0x0000, blasto_layout, 0, 1 )
|
{
|
||||||
GFXDECODE_END
|
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()
|
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_coin_latch));
|
||||||
save_item(NAME(m_just_been_reset));
|
save_item(NAME(m_coin_inserted));
|
||||||
}
|
}
|
||||||
|
|
||||||
void blockade_state::machine_reset()
|
void blockade_state::machine_reset()
|
||||||
{
|
{
|
||||||
m_coin_latch = 1;
|
m_coin_latch = 0;
|
||||||
m_just_been_reset = 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);
|
||||||
|
}
|
||||||
|
|
||||||
/* basic machine hardware */
|
|
||||||
MCFG_CPU_ADD("maincpu", I8080, MASTER_CLOCK/10)
|
//**************************************************************************
|
||||||
|
// MACHINE DEFINTIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
static MACHINE_CONFIG_START( blockade, blockade_state )
|
||||||
|
MCFG_CPU_ADD("maincpu", I8080A, XTAL_20_079MHz / 10)
|
||||||
MCFG_CPU_PROGRAM_MAP(main_map)
|
MCFG_CPU_PROGRAM_MAP(main_map)
|
||||||
MCFG_CPU_IO_MAP(main_io_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_ADD("screen", RASTER)
|
||||||
MCFG_SCREEN_REFRESH_RATE(60)
|
MCFG_SCREEN_RAW_PARAMS(XTAL_20_079MHz / 4, 330, 0, 256, 262, 0, 224)
|
||||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
|
MCFG_SCREEN_UPDATE_DRIVER(blockade_state, screen_update)
|
||||||
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_PALETTE("palette")
|
MCFG_SCREEN_PALETTE("palette")
|
||||||
|
|
||||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", blockade)
|
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_SPEAKER_STANDARD_MONO("mono")
|
||||||
|
|
||||||
MCFG_SOUND_ADD("samples", SAMPLES, 0)
|
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)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED( blasto, blockade )
|
|
||||||
MCFG_GFXDECODE_MODIFY("gfxdecode", blasto)
|
|
||||||
MACHINE_CONFIG_END
|
|
||||||
|
|
||||||
/*************************************
|
//**************************************************************************
|
||||||
*
|
// ROM DEFINITIONS
|
||||||
* ROM definition(s)
|
//**************************************************************************
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
ROM_START( blockade )
|
ROM_START( blockade )
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION(0x800, "maincpu", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "316-04.u2", 0x0000, 0x0400, CRC(a93833e9) SHA1(e29e7b29900f8305effa700a53806a12bf9d37bd) )
|
ROM_LOAD_NIB_HIGH("316-0004.u2", 0x000, 0x400, CRC(a93833e9) SHA1(e29e7b29900f8305effa700a53806a12bf9d37bd))
|
||||||
ROM_LOAD_NIB_LOW( "316-03.u3", 0x0000, 0x0400, CRC(85960d3b) SHA1(aabfe8f9c26126299d6c07a31ef1aac5300deff5) )
|
ROM_LOAD_NIB_LOW( "316-0003.u3", 0x000, 0x400, CRC(85960d3b) SHA1(aabfe8f9c26126299d6c07a31ef1aac5300deff5))
|
||||||
|
|
||||||
ROM_REGION(0x100, "gfx1", 0)
|
ROM_REGION(0x100, "gfx1", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "316-02.u29", 0x0000, 0x0100, CRC(409f610f) SHA1(0c2253f4b72d8aa395f87cc0abe07f0b46fa538b) )
|
ROM_LOAD_NIB_HIGH("316-0002.u29", 0x000, 0x100, CRC(409f610f) SHA1(0c2253f4b72d8aa395f87cc0abe07f0b46fa538b))
|
||||||
ROM_LOAD_NIB_LOW( "316-01.u43", 0x0000, 0x0100, CRC(41a00b28) SHA1(2d0a90aac9d10a1ded240e5202fdf9cd7f70c4a7) )
|
ROM_LOAD_NIB_LOW( "316-0001.u43", 0x000, 0x100, CRC(41a00b28) SHA1(2d0a90aac9d10a1ded240e5202fdf9cd7f70c4a7))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( comotion )
|
ROM_START( comotion )
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION(0x800, "maincpu", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "316-07.u2", 0x0000, 0x0400, CRC(5b9bd054) SHA1(324b844788945e7bc82d096d6d375e79e3e1a634) )
|
ROM_LOAD_NIB_HIGH("316-0007.u2", 0x000, 0x400, CRC(5b9bd054) SHA1(324b844788945e7bc82d096d6d375e79e3e1a634))
|
||||||
ROM_LOAD_NIB_LOW( "316-08.u3", 0x0000, 0x0400, CRC(1a856042) SHA1(91bdc260e8c88ce2b6ac05bfba043ed611bc30de) )
|
ROM_LOAD_NIB_LOW( "316-0008.u3", 0x000, 0x400, CRC(1a856042) SHA1(91bdc260e8c88ce2b6ac05bfba043ed611bc30de))
|
||||||
ROM_LOAD_NIB_HIGH( "316-09.u4", 0x0400, 0x0400, CRC(2590f87c) SHA1(95a7af04b610d79fb3f6d74dda322e66164b9484) )
|
ROM_LOAD_NIB_HIGH("316-0009.u4", 0x400, 0x400, CRC(2590f87c) SHA1(95a7af04b610d79fb3f6d74dda322e66164b9484))
|
||||||
ROM_LOAD_NIB_LOW( "316-10.u5", 0x0400, 0x0400, CRC(fb49a69b) SHA1(4009c3256a86508d981c1f77b65e6bff1face1e7) )
|
ROM_LOAD_NIB_LOW( "316-0010.u5", 0x400, 0x400, CRC(fb49a69b) SHA1(4009c3256a86508d981c1f77b65e6bff1face1e7))
|
||||||
|
|
||||||
ROM_REGION(0x100, "gfx1", 0)
|
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_HIGH("316-0006.u43", 0x000, 0x100, CRC(8f071297) SHA1(811471c87b77b4b9ab056cf0c0743fc2616b754c)) // these are reversed
|
||||||
ROM_LOAD_NIB_LOW( "316-05.u29", 0x0000, 0x0100, CRC(53fb8821) SHA1(0a499aa4cf15f7ebea155aacd914de8851544215) )
|
ROM_LOAD_NIB_LOW( "316-0005.u29", 0x000, 0x100, CRC(53fb8821) SHA1(0a499aa4cf15f7ebea155aacd914de8851544215))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( blasto )
|
ROM_START( blasto )
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION(0x800, "maincpu", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "blasto.u2", 0x0000, 0x0400, CRC(ec99d043) SHA1(10650e54bf55f3ace5c199215c2fce211916d3b7) )
|
ROM_LOAD_NIB_HIGH("316-0089.u2", 0x000, 0x400, CRC(ec99d043) SHA1(10650e54bf55f3ace5c199215c2fce211916d3b7))
|
||||||
ROM_LOAD_NIB_LOW( "blasto.u3", 0x0000, 0x0400, CRC(be333415) SHA1(386cab720f0c2da16b9ec84f67ccebf23406c58d) )
|
ROM_LOAD_NIB_LOW( "316-0090.u3", 0x000, 0x400, CRC(be333415) SHA1(386cab720f0c2da16b9ec84f67ccebf23406c58d))
|
||||||
ROM_LOAD_NIB_HIGH( "blasto.u4", 0x0400, 0x0400, CRC(1c889993) SHA1(e23c72d075cf3d209081bca5a953c33c8ae042ea) )
|
ROM_LOAD_NIB_HIGH("316-0091.u4", 0x400, 0x400, CRC(1c889993) SHA1(e23c72d075cf3d209081bca5a953c33c8ae042ea))
|
||||||
ROM_LOAD_NIB_LOW( "blasto.u5", 0x0400, 0x0400, CRC(efb640cb) SHA1(2dff5b249f876d7d13cc6dfad652ce7e5af10370) )
|
ROM_LOAD_NIB_LOW( "316-0092.u5", 0x400, 0x400, CRC(efb640cb) SHA1(2dff5b249f876d7d13cc6dfad652ce7e5af10370))
|
||||||
|
|
||||||
ROM_REGION(0x200, "gfx1", 0)
|
ROM_REGION(0x200, "gfx1", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "blasto.u29", 0x0000, 0x0200, CRC(4dd69499) SHA1(34f097477a297bf5f986804e5967c92f9292be29) )
|
ROM_LOAD_NIB_HIGH("316-0093.u29", 0x000, 0x200, CRC(4dd69499) SHA1(34f097477a297bf5f986804e5967c92f9292be29))
|
||||||
ROM_LOAD_NIB_LOW( "blasto.u43", 0x0000, 0x0200, CRC(104051a4) SHA1(cae6b9d48e3eda5ba12ff5d9835ce2733e90f774) )
|
ROM_LOAD_NIB_LOW( "316-0094.u43", 0x000, 0x200, CRC(104051a4) SHA1(cae6b9d48e3eda5ba12ff5d9835ce2733e90f774))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( hustle )
|
ROM_START( hustle )
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION(0x800, "maincpu", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "3160016.u2", 0x0000, 0x0400, CRC(d983de7c) SHA1(af6e0ea78449bfba4fe8affd724d7b0eb3d38706) )
|
ROM_LOAD_NIB_HIGH("316-0016.u2", 0x000, 0x400, CRC(d983de7c) SHA1(af6e0ea78449bfba4fe8affd724d7b0eb3d38706))
|
||||||
ROM_LOAD_NIB_LOW( "3160017.u3", 0x0000, 0x0400, CRC(edec9cb9) SHA1(548cc7b0a15a1c977b7ef4a99ff88101893f661a) )
|
ROM_LOAD_NIB_LOW( "316-0017.u3", 0x000, 0x400, CRC(edec9cb9) SHA1(548cc7b0a15a1c977b7ef4a99ff88101893f661a))
|
||||||
ROM_LOAD_NIB_HIGH( "3160018.u4", 0x0400, 0x0400, CRC(f599b9c0) SHA1(c55ed33ac51b9cfbb2fe4321bbb1e0a16694f065) )
|
ROM_LOAD_NIB_HIGH("316-0018.u4", 0x400, 0x400, CRC(f599b9c0) SHA1(c55ed33ac51b9cfbb2fe4321bbb1e0a16694f065))
|
||||||
ROM_LOAD_NIB_LOW( "3160019.u5", 0x0400, 0x0400, CRC(7794bc7e) SHA1(b3d577291dea0e096b2ee56b0ef612f41b2e859c) )
|
ROM_LOAD_NIB_LOW( "316-0019.u5", 0x400, 0x400, CRC(7794bc7e) SHA1(b3d577291dea0e096b2ee56b0ef612f41b2e859c))
|
||||||
|
|
||||||
ROM_REGION(0x200, "gfx1", 0)
|
ROM_REGION(0x200, "gfx1", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "3160020.u29", 0x0000, 0x0200, CRC(541d2c67) SHA1(abdb918f302352693870b0a50eabaf95acf1cf63) )
|
ROM_LOAD_NIB_HIGH("316-0020.u29", 0x000, 0x200, CRC(541d2c67) SHA1(abdb918f302352693870b0a50eabaf95acf1cf63))
|
||||||
ROM_LOAD_NIB_LOW( "3160021.u43", 0x0000, 0x0200, CRC(b5083128) SHA1(d7e8242e9d12d09f3d69c08e373ede2bdd4deba9) )
|
ROM_LOAD_NIB_LOW( "316-0021.u43", 0x000, 0x200, CRC(b5083128) SHA1(d7e8242e9d12d09f3d69c08e373ede2bdd4deba9))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( mineswpr )
|
ROM_START( mineswpr )
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION(0x800, "maincpu", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "mineswee.h0p", 0x0000, 0x0400, CRC(5850a4ba) SHA1(9f097d31428f4494573187049c53fbed2075ff32) )
|
ROM_LOAD_NIB_HIGH("mineswee.h0p", 0x000, 0x400, CRC(5850a4ba) SHA1(9f097d31428f4494573187049c53fbed2075ff32))
|
||||||
ROM_LOAD_NIB_LOW( "mineswee.l0p", 0x0000, 0x0400, CRC(05961379) SHA1(3d59341be8a663e8c54c1556442c992a6eb886ab) )
|
ROM_LOAD_NIB_LOW( "mineswee.l0p", 0x000, 0x400, CRC(05961379) SHA1(3d59341be8a663e8c54c1556442c992a6eb886ab))
|
||||||
|
|
||||||
ROM_REGION(0x200, "gfx1", 0)
|
ROM_REGION(0x200, "gfx1", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "mineswee.ums", 0x0000, 0x0200, CRC(0e1c5c37) SHA1(d4d56bd63307e387771c48304724dfc1ea1306d9) )
|
ROM_LOAD_NIB_HIGH("mineswee.ums", 0x000, 0x200, CRC(0e1c5c37) SHA1(d4d56bd63307e387771c48304724dfc1ea1306d9))
|
||||||
ROM_LOAD_NIB_LOW( "mineswee.uls", 0x0000, 0x0200, CRC(3a4f66e1) SHA1(bd7f6c51d568a79fb06414b2a6ef245d0d983c3e) )
|
ROM_LOAD_NIB_LOW( "mineswee.uls", 0x000, 0x200, CRC(3a4f66e1) SHA1(bd7f6c51d568a79fb06414b2a6ef245d0d983c3e))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( mineswpr4 )
|
ROM_START( mineswpr4 )
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION(0x800, "maincpu", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "mineswee.h0p", 0x0000, 0x0400, CRC(5850a4ba) SHA1(9f097d31428f4494573187049c53fbed2075ff32) )
|
ROM_LOAD_NIB_HIGH("mineswee.h0p", 0x000, 0x400, CRC(5850a4ba) SHA1(9f097d31428f4494573187049c53fbed2075ff32))
|
||||||
ROM_LOAD_NIB_LOW( "mineswee.l0p", 0x0000, 0x0400, CRC(05961379) SHA1(3d59341be8a663e8c54c1556442c992a6eb886ab) )
|
ROM_LOAD_NIB_LOW( "mineswee.l0p", 0x000, 0x400, CRC(05961379) SHA1(3d59341be8a663e8c54c1556442c992a6eb886ab))
|
||||||
|
|
||||||
ROM_REGION(0x200, "gfx1", 0)
|
ROM_REGION(0x200, "gfx1", 0)
|
||||||
ROM_LOAD_NIB_HIGH( "mineswee.cms", 0x0000, 0x0200, CRC(aad3ce0c) SHA1(92257706ae0c9c1a258eed3311116063e647e1ae) )
|
ROM_LOAD_NIB_HIGH("mineswee.cms", 0x000, 0x200, CRC(aad3ce0c) SHA1(92257706ae0c9c1a258eed3311116063e647e1ae))
|
||||||
ROM_LOAD_NIB_LOW( "mineswee.cls", 0x0000, 0x0200, CRC(70959755) SHA1(f62d448742da3fae8bbd96eb3a2714db500cecce) )
|
ROM_LOAD_NIB_LOW( "mineswee.cls", 0x000, 0x200, CRC(70959755) SHA1(f62d448742da3fae8bbd96eb3a2714db500cecce))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Game driver
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// 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, 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 )
|
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
|
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, blasto, hustle, driver_device, 0, ROT0, "Gremlin", "Hustle", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_blockade )
|
GAMEL(1977, hustle, 0, blockade, 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, mineswpr, 0, blockade, 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 )
|
GAME( 1977, mineswpr4, mineswpr, blockade, mineswpr4, driver_device, 0, ROT0, "Amutech", "Minesweeper (4-Player)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||||
|
@ -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<uint8_t> m_videoram;
|
|
||||||
required_device<discrete_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<cpu_device> m_maincpu;
|
|
||||||
required_device<samples_device> m_samples;
|
|
||||||
required_device<gfxdecode_device> m_gfxdecode;
|
|
||||||
required_device<screen_device> m_screen;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*----------- defined in audio/blockade.c -----------*/
|
|
||||||
|
|
||||||
extern const char *const blockade_sample_names[];
|
|
||||||
DISCRETE_SOUND_EXTERN( blockade );
|
|
@ -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;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user