mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
New working systems
------------------- UFO A La Carte [hap, David Viens]
This commit is contained in:
parent
3722aca699
commit
42d49577c3
@ -8,7 +8,7 @@ authors:hap
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
|
||||
<element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
|
||||
<element name="static_gray"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
|
||||
<element name="static_pink"><rect><color red="0.9" green="0.55" blue="0.75" /></rect></element>
|
||||
|
||||
<element name="text_ufored">
|
||||
@ -124,7 +124,7 @@ authors:hap
|
||||
<bounds left="0" right="200" top="0" bottom="90" />
|
||||
</element>
|
||||
|
||||
<element ref="static_grey">
|
||||
<element ref="static_gray">
|
||||
<bounds x="99" y="0" width="2" height="80" />
|
||||
</element>
|
||||
|
||||
|
@ -8,7 +8,7 @@ authors:hap
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
|
||||
<element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
|
||||
<element name="static_gray"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
|
||||
<element name="static_pink"><rect><color red="0.9" green="0.55" blue="0.75" /></rect></element>
|
||||
|
||||
<element name="text_ufored">
|
||||
@ -104,7 +104,7 @@ authors:hap
|
||||
<bounds left="0" right="200" top="0" bottom="90" />
|
||||
</element>
|
||||
|
||||
<element ref="static_grey">
|
||||
<element ref="static_gray">
|
||||
<bounds x="99" y="0" width="2" height="80" />
|
||||
</element>
|
||||
|
||||
|
@ -8,7 +8,6 @@ authors:hap
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
|
||||
<element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
|
||||
<element name="static_pink"><rect><color red="0.9" green="0.55" blue="0.75" /></rect></element>
|
||||
|
||||
<element name="text_ufored">
|
||||
|
162
src/mame/layout/ufoalac.lay
Normal file
162
src/mame/layout/ufoalac.lay
Normal file
@ -0,0 +1,162 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
authors:hap
|
||||
-->
|
||||
<mamelayout version="2">
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
|
||||
<element name="static_gray"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
|
||||
<element name="static_green"><rect><color red="0.2" green="0.8" blue="0.4" /></rect></element>
|
||||
|
||||
<element name="text_x">
|
||||
<text string="X:" align="1">
|
||||
<color red="0.85" green="0.85" blue="0.85" />
|
||||
</text>
|
||||
</element>
|
||||
<element name="text_y">
|
||||
<text string="Y:" align="1">
|
||||
<color red="0.85" green="0.85" blue="0.85" />
|
||||
</text>
|
||||
</element>
|
||||
<element name="text_a">
|
||||
<text string="A:" align="1">
|
||||
<color red="0.85" green="0.85" blue="0.85" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg>
|
||||
<color red="1.0" green="0.3" blue="0.2" />
|
||||
</led7seg>
|
||||
</element>
|
||||
|
||||
<element name="counter" defstate="0">
|
||||
<simplecounter maxstate="999" digits="3" align="1">
|
||||
<color red="0.95" green="0.95" blue="0.95" />
|
||||
</simplecounter>
|
||||
</element>
|
||||
|
||||
<element name="lamp_b1" defstate="0">
|
||||
<disk><color red="0.0" green="0.0" blue="0.0" /></disk>
|
||||
<disk state="1">
|
||||
<color red="1.0" green="1.0" blue="1.0" />
|
||||
<bounds x="0.05" y="0.05" width="0.9" height="0.9" />
|
||||
</disk>
|
||||
<disk state="0">
|
||||
<color red="0.7" green="0.7" blue="0.7" />
|
||||
<bounds x="0.05" y="0.05" width="0.9" height="0.9" />
|
||||
</disk>
|
||||
<text string="1">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0" y="0.2" width="1.0" height="0.6" />
|
||||
</text>
|
||||
</element>
|
||||
<element name="lamp_b2" defstate="0">
|
||||
<disk><color red="0.0" green="0.0" blue="0.0" /></disk>
|
||||
<disk state="1">
|
||||
<color red="1.0" green="1.0" blue="1.0" />
|
||||
<bounds x="0.05" y="0.05" width="0.9" height="0.9" />
|
||||
</disk>
|
||||
<disk state="0">
|
||||
<color red="0.7" green="0.7" blue="0.7" />
|
||||
<bounds x="0.05" y="0.05" width="0.9" height="0.9" />
|
||||
</disk>
|
||||
<text string="2">
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
<bounds x="0" y="0.2" width="1.0" height="0.6" />
|
||||
</text>
|
||||
</element>
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
<bounds left="0" right="200" top="0" bottom="90" />
|
||||
<element ref="static_black">
|
||||
<bounds left="0" right="200" top="0" bottom="90" />
|
||||
</element>
|
||||
|
||||
<element ref="static_gray">
|
||||
<bounds x="99" y="0" width="2" height="80" />
|
||||
</element>
|
||||
|
||||
<!-- control panel -->
|
||||
<element ref="static_green">
|
||||
<bounds x="0" y="60" width="200" height="30" />
|
||||
</element>
|
||||
|
||||
<element name="lamp0" ref="lamp_b1" inputtag="IN1" inputmask="0x01" >
|
||||
<bounds x="30" y="70" width="10" height="10"/>
|
||||
</element>
|
||||
<element name="lamp1" ref="lamp_b2" inputtag="IN1" inputmask="0x02" >
|
||||
<bounds x="43" y="70" width="10" height="10"/>
|
||||
</element>
|
||||
|
||||
<element name="lamp3" ref="lamp_b2" inputtag="IN2" inputmask="0x02" >
|
||||
<bounds x="147" y="70" width="10" height="10"/>
|
||||
</element>
|
||||
<element name="lamp2" ref="lamp_b1" inputtag="IN2" inputmask="0x01" >
|
||||
<bounds x="160" y="70" width="10" height="10"/>
|
||||
</element>
|
||||
|
||||
<element ref="static_black">
|
||||
<bounds x="60" y="70" width="12" height="17" />
|
||||
</element>
|
||||
<element name="digit0" ref="digit">
|
||||
<bounds x="61" y="71" width="10" height="15" />
|
||||
</element>
|
||||
|
||||
<element ref="static_black">
|
||||
<bounds x="128" y="70" width="12" height="17" />
|
||||
</element>
|
||||
<element name="digit1" ref="digit">
|
||||
<bounds x="129" y="71" width="10" height="15" />
|
||||
</element>
|
||||
|
||||
<!-- left ufo info (no lamps) -->
|
||||
<element ref="text_x">
|
||||
<bounds x="5" y="5" width="10" height="4" />
|
||||
</element>
|
||||
<element ref="text_y">
|
||||
<bounds x="5" y="10" width="10" height="4" />
|
||||
</element>
|
||||
<element ref="text_a">
|
||||
<bounds x="5" y="15" width="10" height="4" />
|
||||
</element>
|
||||
|
||||
<element name="counter0" ref="counter">
|
||||
<bounds x="12" y="5" width="20" height="4" />
|
||||
</element>
|
||||
<element name="counter1" ref="counter">
|
||||
<bounds x="12" y="10" width="20" height="4" />
|
||||
</element>
|
||||
<element name="counter2" ref="counter">
|
||||
<bounds x="12" y="15" width="20" height="4" />
|
||||
</element>
|
||||
|
||||
<!-- right ufo info (no lamps) -->
|
||||
<element ref="text_x">
|
||||
<bounds x="105" y="5" width="10" height="4" />
|
||||
</element>
|
||||
<element ref="text_y">
|
||||
<bounds x="105" y="10" width="10" height="4" />
|
||||
</element>
|
||||
<element ref="text_a">
|
||||
<bounds x="105" y="15" width="10" height="4" />
|
||||
</element>
|
||||
|
||||
<element name="counter4" ref="counter">
|
||||
<bounds x="112" y="5" width="20" height="4" />
|
||||
</element>
|
||||
<element name="counter5" ref="counter">
|
||||
<bounds x="112" y="10" width="20" height="4" />
|
||||
</element>
|
||||
<element name="counter6" ref="counter">
|
||||
<bounds x="112" y="15" width="20" height="4" />
|
||||
</element>
|
||||
|
||||
</view>
|
||||
</mamelayout>
|
@ -8,7 +8,6 @@ authors:hap
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
|
||||
<element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
|
||||
<element name="static_pink"><rect><color red="0.9" green="0.55" blue="0.75" /></rect></element>
|
||||
|
||||
<element name="text_ufored">
|
||||
|
@ -40371,6 +40371,7 @@ newufo_sonic //
|
||||
newufo_xmas //
|
||||
ufo21 //
|
||||
ufo800 //
|
||||
ufoalac //
|
||||
ufomini //
|
||||
|
||||
@source:sega/segaufoh8.cpp
|
||||
|
@ -3,6 +3,11 @@
|
||||
/*******************************************************************************
|
||||
|
||||
Sega UFO Catcher, Z80 type hardware
|
||||
|
||||
They are more or less playable within MAME's constraints. The UFO position is
|
||||
represented by coordinates, and the fact that the player can't win any physical
|
||||
prize takes away the fun. It does a long self-test at boot.
|
||||
|
||||
The list underneath is not complete. A # before the name means it's not dumped yet.
|
||||
|
||||
1st gen
|
||||
@ -23,22 +28,27 @@ The list underneath is not complete. A # before the name means it's not dumped y
|
||||
- # School Kids (1993)
|
||||
|
||||
4th gen - EX brd
|
||||
* Z80 Z0840008PSC, 8MHz XTAL, 32MHz XTAL, 2 Sega 315-5296(I/O), YM3438, NEC uPD71054C,
|
||||
optional 315-5338A, optional NEC uPD7759C
|
||||
* Z80 Z0840008PSC, 8MHz XTAL, 2 Sega 315-5296(I/O), YM3438, NEC uPD71054C, optional
|
||||
315-5338A with 32MHz XTAL, optional NEC uPD7759C
|
||||
- # Dream Palace (1992)
|
||||
- # Dream Kitchen (1994)
|
||||
- # UFO Catcher Excellent (1994)
|
||||
- # UFO A La Carte (1996) (2P)
|
||||
- UFO A La Carte (1996) (2P)
|
||||
- UFO Catcher 21 (1996) (2P)
|
||||
- UFO Catcher 800 (1998) (1P)
|
||||
- # Baby UFO (1998)
|
||||
- # Prize Sensor (1998)
|
||||
|
||||
More games were released after 2000, assumed to be on more modern hardware.
|
||||
The A La Carte games are vertical cabinets. The UFO doesn't have a crane or lamps.
|
||||
Instead, it has a tiny arm that extends and pulls down a rope from which the prize
|
||||
is hanging on.
|
||||
|
||||
More games were released after 2000, they are on more modern hardware, see
|
||||
segaufoh8.cpp for example.
|
||||
|
||||
TODO:
|
||||
- add dipswitches
|
||||
- prize sensor for ufo21/ufo800
|
||||
- prize sensor for ufo21/ufo800/ufoalac?
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
@ -59,9 +69,10 @@ TODO:
|
||||
|
||||
// the layouts are very similar to eachother
|
||||
#include "newufo.lh"
|
||||
#include "ufomini.lh"
|
||||
#include "ufo21.lh"
|
||||
#include "ufo800.lh"
|
||||
#include "ufoalac.lh"
|
||||
#include "ufomini.lh"
|
||||
|
||||
|
||||
namespace {
|
||||
@ -96,9 +107,10 @@ public:
|
||||
{ }
|
||||
|
||||
// machine configs
|
||||
void newufo(machine_config &config);
|
||||
void ufomini(machine_config &config);
|
||||
void ufo21(machine_config &config);
|
||||
void newufo(machine_config &config);
|
||||
void ufoalac(machine_config &config);
|
||||
void ufo800(machine_config &config);
|
||||
|
||||
protected:
|
||||
@ -154,10 +166,13 @@ private:
|
||||
void ufo_lamps_w(u8 data);
|
||||
|
||||
template<int P> u8 ex_crane_limits_r();
|
||||
template<int P> u8 ex_ufoalac_limits_r();
|
||||
u8 ex_crane_open_r();
|
||||
void ex_stepper_w(u8 data);
|
||||
void ex_cp_lamps_w(u8 data);
|
||||
template<int P> void ex_crane_xyz_w(u8 data);
|
||||
void ex_ufoalac_xz_w(u8 data);
|
||||
template<int P> void ex_ufoalac_y_w(u8 data);
|
||||
void ex_ufo21_lamps1_w(u8 data);
|
||||
void ex_ufo21_lamps2_w(u8 data);
|
||||
void ex_ufo800_lamps_w(u8 data);
|
||||
@ -191,7 +206,7 @@ void ufo_state::init_motors()
|
||||
m_motor_timer->adjust(attotime::from_hz(MOTOR_SPEED), 0, attotime::from_hz(MOTOR_SPEED));
|
||||
|
||||
static const float motor_speeds[4] =
|
||||
{ 1.0f/CABINET_WIDTH, 1.0f/CABINET_DEPTH, 1.0f/CABINET_HEIGHT, 1.0f/CRANE_SIZE };
|
||||
{ 1.0f / CABINET_WIDTH, 1.0f / CABINET_DEPTH, 1.0f / CABINET_HEIGHT, 1.0f / CRANE_SIZE };
|
||||
|
||||
for (int m = 0; m < 4; m++)
|
||||
{
|
||||
@ -283,7 +298,7 @@ void ufo_state::pit_out2(int state)
|
||||
template<int P>
|
||||
u8 ufo_state::crane_limits_r()
|
||||
{
|
||||
u8 ret = 0x7f;
|
||||
u8 data = 0;
|
||||
|
||||
// d0: left limit sw (right for p2)
|
||||
// d1: right limit sw (left for p2)
|
||||
@ -293,18 +308,18 @@ u8 ufo_state::crane_limits_r()
|
||||
// d5: up limit sw
|
||||
for (int m = 0; m < 3; m++)
|
||||
{
|
||||
ret ^= (m_player[P].motor[m].position >= 1) << (m*2 + 0);
|
||||
ret ^= (m_player[P].motor[m].position <= 0) << (m*2 + 1);
|
||||
data |= (m_player[P].motor[m].position >= 1) << (m * 2);
|
||||
data |= (m_player[P].motor[m].position <= 0) << (m * 2 + 1);
|
||||
}
|
||||
|
||||
// d6: crane open sensor (reflective sticker on the stepper motor rotation disc)
|
||||
if (m_player[P].motor[3].position >= 0.97f)
|
||||
ret ^= 0x40;
|
||||
data |= 0x40;
|
||||
|
||||
// d7: prize sensor (mirror?)
|
||||
ret |= m_inputs[P]->read() & 0x80;
|
||||
data |= m_inputs[P]->read() & 0x80;
|
||||
|
||||
return ret;
|
||||
return data ^ 0x7f;
|
||||
}
|
||||
|
||||
|
||||
@ -322,12 +337,12 @@ void ufo_state::stepper_w(u8 data)
|
||||
{ 0x5, 0x9, 0xa, 0x6 };
|
||||
|
||||
// d0-d3: p1, d4-d7: p2
|
||||
u8 cur = data >> (p*4) & 0xf;
|
||||
u8 prev = m_stepper >> (p*4) & 0xf;
|
||||
u8 cur = data >> (p * 4) & 0xf;
|
||||
u8 prev = m_stepper >> (p * 4) & 0xf;
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (sequence[i] == prev && sequence[(i+1) & 3] == cur)
|
||||
if (sequence[i] == prev && sequence[(i + 1) & 3] == cur)
|
||||
{
|
||||
m_player[p].motor[3].running = 1;
|
||||
motor_tick(p, 3);
|
||||
@ -374,8 +389,10 @@ void ufo_state::crane_xyz_w(u8 data)
|
||||
// other bits: ?
|
||||
m_player[P].motor[0].running = (data & 9) == 8;
|
||||
m_player[P].motor[0].direction = data & 2;
|
||||
|
||||
m_player[P].motor[1].running = (data & 0x11) == 0x10;
|
||||
m_player[P].motor[1].direction = data & 4;
|
||||
|
||||
m_player[P].motor[2].running = (data & 9) == 9;
|
||||
m_player[P].motor[2].direction = data & 2;
|
||||
}
|
||||
@ -405,7 +422,7 @@ void ufo_state::ufo_lamps_w(u8 data)
|
||||
template<int P>
|
||||
u8 ufo_state::ex_crane_limits_r()
|
||||
{
|
||||
u8 ret = 0xf0;
|
||||
u8 data = 0;
|
||||
|
||||
// d0: left limit sw (invert)
|
||||
// d1: right limit sw (invert)
|
||||
@ -417,30 +434,52 @@ u8 ufo_state::ex_crane_limits_r()
|
||||
// d7: ?
|
||||
for (int m = 0; m < 3; m++)
|
||||
{
|
||||
int shift = (m*2) + (m == 2);
|
||||
ret ^= (m_player[P].motor[m].position >= 1) << shift;
|
||||
ret ^= (m_player[P].motor[m].position <= 0) << (shift+1);
|
||||
data |= (m_player[P].motor[m].position >= 1) << (m * 2);
|
||||
data |= (m_player[P].motor[m].position <= 0) << (m * 2 + 1);
|
||||
}
|
||||
|
||||
return ret;
|
||||
data = (data & 0xf) | (data << 1 & 0x60);
|
||||
return data ^ 0xf0;
|
||||
}
|
||||
|
||||
u8 ufo_state::ex_crane_open_r()
|
||||
{
|
||||
// d0-d3: p1, d4-d7: p2
|
||||
u8 ret = 0xff;
|
||||
u8 data = 0;
|
||||
|
||||
for (int p = 0; p < 2; p++)
|
||||
{
|
||||
// d0: crane open sensor
|
||||
if (m_player[p].motor[3].position >= 0.97f)
|
||||
ret ^= (1 << (p*4));
|
||||
data |= (1 << (p * 4));
|
||||
|
||||
// d1: coincounter is plugged in (ufo800 gives error 14 otherwise)
|
||||
// d2,d3: ?
|
||||
}
|
||||
|
||||
return ret;
|
||||
return ~data;
|
||||
}
|
||||
|
||||
template<int P>
|
||||
u8 ufo_state::ex_ufoalac_limits_r()
|
||||
{
|
||||
u8 data = 0;
|
||||
|
||||
// d0: down limit sw
|
||||
// d1: arm out limit sw
|
||||
// d2: arm in limit sw
|
||||
// d3: left limit sw
|
||||
// d4: right limit sw
|
||||
// other: ?
|
||||
if (m_player[P].motor[1].position <= 0) data |= 0x01;
|
||||
|
||||
if (m_player[P].motor[2].position >= 1) data |= 0x02;
|
||||
if (m_player[P].motor[2].position <= 0) data |= 0x04;
|
||||
|
||||
if (m_player[P].motor[0].position <= 0) data |= 0x08;
|
||||
if (m_player[P].motor[0].position >= 1) data |= 0x10;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@ -457,11 +496,11 @@ void ufo_state::ex_cp_lamps_w(u8 data)
|
||||
{
|
||||
// d0,d1,d4,d5: p1/p2 button lamps
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_lamps[i] = BIT(~data, ((i&1) + (i&2) * 2));
|
||||
m_lamps[i] = BIT(~data, ((i & 1) + (i & 2) * 2));
|
||||
|
||||
// d2,d3,d6,d7: p1/p2 coincounters
|
||||
for (int i = 0; i < 4; i++)
|
||||
machine().bookkeeping().coin_counter_w(i, data >> (2 + (i&1) + (i&2) * 2) & 1);
|
||||
machine().bookkeeping().coin_counter_w(i, data >> (2 + (i & 1) + (i & 2) * 2) & 1);
|
||||
}
|
||||
|
||||
template<int P>
|
||||
@ -476,12 +515,46 @@ void ufo_state::ex_crane_xyz_w(u8 data)
|
||||
// d5: move up
|
||||
for (int m = 0; m < 3; m++)
|
||||
{
|
||||
int bits = data >> (m*2) & 3;
|
||||
m_player[P].motor[m].running = (bits == 1 || bits == 2) ? 1 : 0;
|
||||
int bits = data >> (m * 2) & 3;
|
||||
m_player[P].motor[m].running = population_count_32(bits) & 1;
|
||||
m_player[P].motor[m].direction = bits & 2;
|
||||
}
|
||||
}
|
||||
|
||||
void ufo_state::ex_ufoalac_xz_w(u8 data)
|
||||
{
|
||||
// d0: p1 move right
|
||||
// d1: p1 move left
|
||||
// d2: p2 move right
|
||||
// d3: p2 move left
|
||||
// d4: p1 move arm out
|
||||
// d5: p1 move arm in
|
||||
// d6: p2 move arm in
|
||||
// d7: p2 move arm out
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
int bits = data >> (i * 2) & 3;
|
||||
m_player[i & 1].motor[i & 2].running = population_count_32(bits) & 1;
|
||||
m_player[i & 1].motor[i & 2].direction = bits & 1;
|
||||
}
|
||||
|
||||
m_player[0].motor[2].direction = !m_player[0].motor[2].direction;
|
||||
}
|
||||
|
||||
template<int P>
|
||||
void ufo_state::ex_ufoalac_y_w(u8 data)
|
||||
{
|
||||
// d0: y normal speed
|
||||
// d1: y slow speed
|
||||
// d2: y direction
|
||||
m_player[P].motor[1].running = population_count_32(data & 3) & 1;
|
||||
m_player[P].motor[1].direction = data & 4;
|
||||
|
||||
m_player[P].motor[1].speed = 1.0f / CABINET_DEPTH;
|
||||
if (data & 2)
|
||||
m_player[P].motor[1].speed *= 0.05f;
|
||||
}
|
||||
|
||||
void ufo_state::ex_ufo800_lamps_w(u8 data)
|
||||
{
|
||||
// d0-d4: 5 red leds on ufo
|
||||
@ -699,8 +772,8 @@ static INPUT_PORTS_START( ufo21 )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("DSW1") // coinage
|
||||
PORT_DIPNAME( 0x01, 0x01, "UNK1-01" )
|
||||
@ -755,6 +828,80 @@ static INPUT_PORTS_START( ufo21 )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( ufoalac )
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("P1 Coin 1")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("P1 Test")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P1 Service Coin")
|
||||
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("IN2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("P2 Coin 1")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Test") PORT_CODE(KEYCODE_F1)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("P2 Service Coin")
|
||||
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("DSW1") // coinage
|
||||
PORT_DIPNAME( 0x01, 0x01, "UNK1-01" )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x02, "UNK1-02" )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, "UNK1-04" )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x08, "UNK1-08" )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x10, "UNK1-10" )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, "UNK1-20" )
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, "UNK1-40" )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, "UNK1-80" )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
PORT_START("DSW2")
|
||||
PORT_DIPNAME( 0x01, 0x01, "UNK2-01" )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x02, "UNK2-02" )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, "UNK2-04" )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x08, "UNK2-08" )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x10, "UNK2-10" )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, "UNK2-20" )
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, "UNK2-40" )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x80, 0x80, "UNK2-80" )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( ufo800 )
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Test Button")
|
||||
@ -910,6 +1057,29 @@ void ufo_state::ufo21(machine_config &config)
|
||||
m_upd->add_route(ALL_OUTPUTS, "mono", 0.75);
|
||||
}
|
||||
|
||||
void ufo_state::ufoalac(machine_config &config)
|
||||
{
|
||||
newufo(config);
|
||||
|
||||
// basic machine hardware
|
||||
m_io[0]->in_pa_callback().set_ioport("IN1");
|
||||
m_io[0]->in_pb_callback().set(FUNC(ufo_state::ex_ufoalac_limits_r<0>));
|
||||
m_io[0]->in_pc_callback().set_ioport("IN2");
|
||||
m_io[0]->in_pd_callback().set(FUNC(ufo_state::ex_ufoalac_limits_r<1>));
|
||||
m_io[0]->in_pe_callback().set_constant(0);
|
||||
m_io[0]->in_ph_callback().set_constant(0);
|
||||
|
||||
m_io[1]->out_pa_callback().set(FUNC(ufo_state::ex_ufoalac_xz_w));
|
||||
m_io[1]->out_pb_callback().set(FUNC(ufo_state::cp_lamps_w));
|
||||
m_io[1]->out_pc_callback().set(FUNC(ufo_state::ex_ufoalac_y_w<0>));
|
||||
m_io[1]->out_pd_callback().set(FUNC(ufo_state::ex_ufoalac_y_w<1>));
|
||||
m_io[1]->out_pe_callback().set([this](u8 data) { machine().bookkeeping().coin_counter_w(0, data & 1); });
|
||||
m_io[1]->out_pf_callback().set_nop();
|
||||
m_io[1]->out_pg_callback().set_nop();
|
||||
m_io[1]->out_ph_callback().set(FUNC(ufo_state::cp_digits_w<0>));
|
||||
m_io[1]->out_ph_callback().append(FUNC(ufo_state::cp_digits_w<1>)).rshift(4);
|
||||
}
|
||||
|
||||
void ufo_state::ufo800(machine_config &config)
|
||||
{
|
||||
newufo(config);
|
||||
@ -973,6 +1143,11 @@ ROM_START( ufo21 )
|
||||
ROM_LOAD( "315-5766.ic40.jed", 0, 0x359, CRC(cb7a531f) SHA1(ef80f2701781a180e9087ca52c887d96a23127cc) ) // GAL16V8D
|
||||
ROM_END
|
||||
|
||||
ROM_START( ufoalac )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "epr-19065a.ic33", 0x000000, 0x010000, CRC(43354cff) SHA1(32c1e03b8c70430a627fc5b9d45302c90bac2227) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( ufo800 )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "epr-20413a.ic33", 0x000000, 0x010000, CRC(36e9da6d) SHA1(8e1dbf8b24bc31be7de28f4d562838c291af7c7b) )
|
||||
@ -995,4 +1170,5 @@ GAMEL( 1991, newufo_xmas, newufo, newufo, newufo, ufo_state, empty_init, ROT0
|
||||
GAMEL( 1991, ufomini, 0, ufomini, ufomini, ufo_state, empty_init, ROT0, "Sega", "UFO Catcher Mini", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE, layout_ufomini )
|
||||
|
||||
GAMEL( 1996, ufo21, 0, ufo21, ufo21, ufo_state, empty_init, ROT0, "Sega", "UFO Catcher 21", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE, layout_ufo21 )
|
||||
GAMEL( 1996, ufoalac, 0, ufoalac, ufoalac, ufo_state, empty_init, ROT0, "Sega", "UFO A La Carte", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE, layout_ufoalac )
|
||||
GAMEL( 1998, ufo800, 0, ufo800, ufo800, ufo_state, empty_init, ROT0, "Sega", "UFO Catcher 800", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE, layout_ufo800 )
|
||||
|
@ -40,7 +40,7 @@ public:
|
||||
segaufoh8_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu")
|
||||
{}
|
||||
{ }
|
||||
|
||||
void segaufoh8(machine_config &config);
|
||||
|
||||
@ -56,7 +56,6 @@ void segaufoh8_state::program_map(address_map &map)
|
||||
map(0x000000, 0x07ffff).rom().region("maincpu", 0);
|
||||
//map(0x?00000, 0x?0007f).rw("315_5296", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0xff00);
|
||||
//map(0x400000, 0x40001f).rw("315_5338a", FUNC(sega_315_5338a_device::read), FUNC(sega_315_5338a_device::write)).umask16(0xff00);
|
||||
//map(0xfe0000, 0xffffff).ram();
|
||||
}
|
||||
|
||||
|
||||
@ -134,4 +133,4 @@ ROM_END
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
GAME( 2001, ufo7, 0, segaufoh8, ufo7, segaufoh8_state, empty_init, ROT0, "Sega", "UFO Catcher 7 (V20011112)", MACHINE_IS_SKELETON_MECHANICAL ) // UFO Catch 7 in string in ROM
|
||||
GAME( 2001, ufo7, 0, segaufoh8, ufo7, segaufoh8_state, empty_init, ROT0, "Sega", "UFO Catcher 7", MACHINE_IS_SKELETON_MECHANICAL ) // UFO Catch 7 V20011112 in string in ROM
|
||||
|
Loading…
Reference in New Issue
Block a user