New working machines

--------------------
Super Ball (Version EC-3.50 N322) [Grull Osgo]
Super Ball (Version EC-3.50 N165) [Grull Osgo]
This commit is contained in:
Roberto Fresca 2018-12-05 23:06:03 +01:00
parent ccd87f82ec
commit db7e370bd8
5 changed files with 1310 additions and 0 deletions

View File

@ -4796,6 +4796,7 @@ files {
MAME_DIR .. "src/mame/drivers/re900.cpp",
MAME_DIR .. "src/mame/drivers/rgum.cpp",
MAME_DIR .. "src/mame/drivers/roul.cpp",
MAME_DIR .. "src/mame/drivers/rulechan.cpp",
MAME_DIR .. "src/mame/drivers/savquest.cpp",
MAME_DIR .. "src/mame/drivers/sanremo.cpp",
MAME_DIR .. "src/mame/drivers/sanremmg.cpp",

View File

@ -997,6 +997,7 @@ route16.cpp
rowamet.cpp
royalmah.cpp
rpunch.cpp
rulechan.cpp
runaway.cpp
rungun.cpp
s11.cpp

View File

@ -0,0 +1,845 @@
// license:BSD-3-Clause
// copyright-holders: Grull Osgo.
/********************************************************************
Electrochance.
6-player Electromechanical Roulette.
Copyright 199x by Electro Chance.
Industria Argentina.
Driver by Grull Osgo.
2 sets dumped:
*********************************************************************
PCB specs: Hardware not available
*********************************************************************
Edge Connector:
Solder side | | Components
-----------------|--|-----------------
+5Vcc |01| GND
+5Vcc |02| -5Vcc
Player 2 |03| Player 1
Player 4 |04| Player 3
Player 6 |06| Player 5
|07|
|08| Left
Right |09| Down
Credits IN |10| Credits OUT
Bet |11| Up
|12|
|13|
|14|
|15|
|16|
|17|
|18| +5VCC
Counter IN |19|
|20| Counter OUT
Operator Key |21|
|22| Programming
|23|
Green |24| Sync
Blue |25| Red
+12Vcc |26| Speaker
+5Vcc |27| GND
+5Vcc |28| GND
DIP Switches:
.---------------------------------------+-----+-----+-----+-----+-----+-----+-----+-----.
| DIP Switches | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
+---------------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+
+---------------------------------------+-----+-----------------------------------------+
| Reset total No | OFF | |
| (Full Reset) Si | ON | |
'---------------------------------------+-----+-----+-----------------------------------+
| Repite No | | OFF | |
| Si | | ON | |
+---------------------------------------+-----+-----+-----+-----------------------------+
| Demo No | | | OFF | |
| Si | | | ON | |
+---------------------------------------+-----+-----+-----+-----+-----------------------+
| Acceso a Pagina No | | OFF | |
| (settings access) Si | | ON | |
+---------------------------------------+-----------------+-----+-----+-----------------+
| Test plato No | | OFF | |
| Si | | ON | |
+---------------------------------------+-----------------------+-----+-----+-----------+
| Inmovilizar No | | OFF | |
| Si | | ON | |
+---------------------------------------+-----------------------------+-----+-----+-----+
| Doble cero No | | OFF | |
| (Jackpot program) Si | | ON | |
+---------------------------------------+-----------------------------------+-----+-----+
| Castellano No | | OFF |
| Si | | ON |
+---------------------------------------+-----------------------------------------+-----+
*********************************************************************
Game Initialization
-------------------
(You must enable "LAMPS" layout for this procedure)
When the game runs by the very first time (no nvram yet), it will
complain about "DATA ERROR" in a blue message window. After a few
seconds, it will bring up another red window with the "HARD ERROR 02"
message.
So, we must initialize the game following the next instructions:
1.- Toggle on "Operator Key" (turn to green).
2.- Press once "Page Key". It will show a green window titled
"CONTROL ADMINISTRATIVO" and a message with a security token.
3.- Press again "Page Key". It will bring up a new window where we
must type a password. At this time, in the layout, under the
roulette leds will appear the password we need (six numeric digits).
4.- Ingress the required paswword using the credits in (IN1....IN6)
and credits out (OUT1...OUT6) buttons following the key assignment
indications located under the password field.
Use the "E" button to finish once all numbers were typed.
Use the "B" button clear last digit typed, in case of mistake.
5.- Once finished that, and the the game will reboot and will be
ready to play. Also, password showed on layout will dissapear.
In case that, by unknown reason, the game asks for
"CONTROL ADMINISTRATIVO" again, follow the instructions starting
from step "1". After that we will can play again.
*********************************************************************/
/*********************************************************************
Dev notes:
Again, this driver was written based on a couple of ROM dumps and a
lot of reverse engineering, with no harware available, but guessing
that this firmware and hardware are similar to others well known
roulettes like Lucky Ball, Lucky Roulette, Corona, Re900, etc...
The most exciting part of this work was discover that this game runs
with an electromechanical roulette, not a tipical LED roulette. It
added an extra challenge to the work, wich implies a full develop
of an electromechanical part simulation, objective that finally
could be reached.
Surprisingly, this game firmware includes a full communications
module, accesible via RS232 serial interface, that let the users
some useful things like reconfigure hardware and game options or
get different kinds of reports, like accounting, statistics and
many other technical items. All this tasks are performed from a
PC running a D.O.S. program provided by the maker and fortunately
still available. Even more, there is another stand alone D.O.S.
software provided by the maker, and also still available, to get
the passwords needed when hardware fails or administrative tasks
are required.
Another interesting thing found on this game is that it can be
configured for a single or a double zero roulette, depending on
what kind of roulette has attached.
*********************************************************************/
#define CPU_CLOCK XTAL(8'000'000)
#define VID_CLOCK XTAL(10'730'000)
#define TMS_CLOCK XTAL(1'750'000)
#define VDP_MEM 0x20000 // 4x 4464 (64K x 4 DRAM)
#include <conio.h>
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/nvram.h"
#include "machine/eepromser.h"
#include "machine/timer.h"
#include "video/v9938.h"
#include "sound/ay8910.h"
#include "screen.h"
#include "speaker.h"
#include "rulechan.lh"
#define BIT2 BIT(m_p30,2)
#define BIT3 BIT(m_p30,3)
#define BIT4 BIT(m_p30,4)
#define BIT5 BIT(m_p30,5)
#define SND_FLG 0xf009
#define RAM_PSW 0xf078
#define BALLIN (m_ballin>=2)
#define MOTORON (m_p32!=0xf0)
#define LEDNOTNUM (m_led!=m_num)
class rulechan_state : public driver_device
{
public:
rulechan_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_v9938(*this, "v9938")
, m_maincpu(*this, "maincpu")
, m_eeprom(*this, "eeprom")
, m_aux(*this, "AUX")
, m_dsw(*this, "DSW")
, m_tty(*this, "TTY")
, m_keymx(*this, "IN%u", 0)
, m_lamps(*this, "lamp%u", 0U)
, m_digits(*this, "digit%u", 0U)
{ }
void rulechan(machine_config &config);
void rulechan_init();
private:
DECLARE_READ8_MEMBER(port0_r);
DECLARE_WRITE8_MEMBER(port0_w);
DECLARE_READ8_MEMBER(port2_r);
DECLARE_READ8_MEMBER(port3_r);
DECLARE_READ8_MEMBER(port30_r);
DECLARE_READ8_MEMBER(port31_r);
DECLARE_WRITE8_MEMBER(port31_w);
DECLARE_WRITE8_MEMBER(port32_w);
DECLARE_READ8_MEMBER(port40_r);
DECLARE_WRITE8_MEMBER(port40_w);
DECLARE_READ8_MEMBER(port41_r);
DECLARE_READ8_MEMBER(psg_portA_r);
DECLARE_READ8_MEMBER(psg_portB_r);
TIMER_DEVICE_CALLBACK_MEMBER( ball_speed );
TIMER_DEVICE_CALLBACK_MEMBER( wheel_speed );
uint8_t m_sline;
uint8_t m_stat;
uint8_t m_p30;
uint8_t m_p31;
uint8_t m_p32;
uint8_t m_step;
uint8_t m_updn2;
uint8_t m_updn3;
uint8_t m_updn4;
uint8_t m_num;
uint8_t m_spin;
uint8_t m_tspin;
uint8_t d_spin;
uint8_t m_ballin;
uint8_t m_led;
uint32_t m_lastk=0;
uint8_t m_pass[6];
uint8_t m_sndsrt[10]= { 0x0a, 0x0e, 0x06, 0x0a, 0x0b, 0x48, 0x0c, 0x00, 0x0d, 0x01 };
required_device<v9938_device> m_v9938;
required_device<cpu_device> m_maincpu;
required_device<eeprom_serial_93cxx_device> m_eeprom;
required_ioport m_aux;
required_ioport m_dsw;
required_ioport m_tty;
required_ioport_array<6> m_keymx;
void main_io(address_map &map);
void main_map(address_map &map);
void sound_sort();
void sound_off();
virtual void machine_start() override { m_lamps.resolve(); m_digits.resolve(); }
output_finder<63> m_lamps;
output_finder<6> m_digits;
};
/* BCD to Seven Segment Decoder */
static uint8_t dec_7seg(int data)
{
uint8_t segment;
switch (data)
{
case 0: segment = 0x3f; break;
case 1: segment = 0x06; break;
case 2: segment = 0x5b; break;
case 3: segment = 0x4f; break;
case 4: segment = 0x66; break;
case 5: segment = 0x6d; break;
case 6: segment = 0x7d; break;
case 7: segment = 0x07; break;
case 8: segment = 0x7f; break;
case 9: segment = 0x6f; break;
default: segment = 0x00;
}
return segment;
}
/**************************************
* Memory Map *
**************************************/
void rulechan_state::main_map(address_map &map)
{
map(0x0000, 0xdfff).rom();
map(0xe000, 0xffff).ram().share("nvram");
}
void rulechan_state::main_io(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).rw(FUNC(rulechan_state::port0_r),FUNC(rulechan_state::port0_w)); /* Matrix scan line selector - Must be 0xf0 at power up */
map(0x01, 0x01).portw("EEPROMOUT"); /* eeprom ok */
map(0x02, 0x02).r(FUNC(rulechan_state::port2_r)); /* Matriz button read */
map(0x03, 0x03).r(FUNC(rulechan_state::port3_r));
map(0x10, 0x11).w("ay8910", FUNC(ay8910_device::address_data_w)); /* sound ok */
map(0x12, 0x12).r("ay8910", FUNC(ay8910_device::data_r)); /* ports ok */
map(0x20, 0x23).rw(m_v9938, FUNC(v9938_device::read), FUNC(v9938_device::write)); /* video ok */
map(0x30, 0x30).r(FUNC(rulechan_state::port30_r)); /* wheel control */
map(0x31, 0x31).rw(FUNC(rulechan_state::port31_r),FUNC(rulechan_state::port31_w)); /* wheel control - read: Must be 0x00 at power up*/
map(0x32, 0x32).w(FUNC(rulechan_state::port32_w)); /* wheel control */
map(0x40, 0x40).rw(FUNC(rulechan_state::port40_r),FUNC(rulechan_state::port40_w)); /* RS232 - tty console - Data Unknown serial device */
map(0x41, 0x41).r(FUNC(rulechan_state::port41_r)); /* RS232 - tty console - Status Unknown serial device */
map(0x42, 0x43).nopr().nopw();
map(0x60, 0x60).nopw(); /* Watchdog */
}
/****************
* Read Handlers *
****************/
READ8_MEMBER(rulechan_state::port0_r)
{
return 0xf0;
}
READ8_MEMBER(rulechan_state::port2_r)
{
return m_keymx[m_sline]->read();
}
READ8_MEMBER(rulechan_state::port3_r)
{
return 0xff;
}
/******************************
Port 30 - Wheel control *
* bit 2 - ball detector *
* bit 3 - step detector *
* bit 4 - Zero detector *
* bit 5 - Ball in shotter *
******************************/
READ8_MEMBER(rulechan_state::port30_r)
{
return m_p30;
}
READ8_MEMBER(rulechan_state::port31_r)
{
return 0x00;
}
/**********************
* Port 40h *
* serial data port *
**********************/
READ8_MEMBER(rulechan_state::port40_r)
{
uint8_t retval;
uint32_t inp;
inp=m_tty->read();
switch (inp)
{
case 0x00000001:retval=0x31;break;
case 0x00000002:retval=0x32;break;
case 0x00000004:retval=0x33;break;
case 0x00000008:retval=0x34;break;
case 0x00000010:retval=0x35;break;
case 0x00000020:retval=0x36;break;
case 0x00000040:retval=0x37;break;
case 0x00000080:retval=0x38;break;
case 0x00000100:retval=0x39;break;
case 0x00000200:retval=0x30;break;
case 0x00000400:retval=0x0d;break;
case 0x00000800:retval=0x3a;break;
case 0x00001000:retval=0x08;break;
case 0x00002000:retval=0x20;break;
case 0x00004000:retval=0x52;break;
case 0x00008000:retval=0x53;break;
case 0x00010000:retval=0x54;break;
case 0x00020000:retval=0x56;break;
case 0x00040000:retval=0x4b;break;
case 0x00080000:retval=0x57;break;
case 0x00100000:retval=0x55;break;
case 0x00200000:retval=0x58;break;
case 0x00400000:retval=0x4e;break;
case 0x00800000:retval=0x59;break;
case 0x01000000:retval=0x5a;break;
case 0x02000000:retval=0x51;break;
case 0x04000000:retval=0x6c;break;
case 0x08000000:retval=0x48;break;
case 0x10000000:retval=0x49;break;
case 0x20000000:retval=0x4a;break;
case 0x40000000:retval=0x4f;break;
case 0x80000000:retval=0x70;break;
default: retval=0;
}
m_stat &= 0xf7; /* down rx enable */
m_stat|= 0x10; /* up tx enable */
if (inp) m_lastk = inp;
return retval;
}
/**********************
* Port 41h *
* serial port status *
* bit 3 = rx ready *
* bit 4 - tx ready *
***********************/
READ8_MEMBER(rulechan_state::port41_r) /* console port status- bit 3 = rx ready / bit 4 - tx ready */
{
uint32_t keys;
keys=m_tty->read();
if(!keys) { m_stat&=0xf7; m_lastk=0;}
else
if(keys == m_lastk) m_stat&=0xf7;
else m_stat|=0x08;
return m_stat;
}
READ8_MEMBER(rulechan_state::psg_portA_r)
{
m_lamps[60] = (BIT(m_aux->read(), 3))?0:1; /* Show Operator Key via layout lamp */
m_lamps[61] = (BIT(m_aux->read(), 7))?0:1; /* Show Page Key via layout lamp */
return m_aux->read(); /* Operator Key read */
}
READ8_MEMBER(rulechan_state::psg_portB_r)
{
return m_dsw->read(); /* DipSw read */
}
/***********************
* Write Handlers *
***********************/
WRITE8_MEMBER(rulechan_state::port0_w)
{
m_sline = data & 0x07; /* Matrix scan line selector */
if (m_sline>5) m_sline=0;
}
/****************************************
Port 31 - Wheel driver *
* bit 1 - Port 32 Data Latch impulse *
* bit 4 - ball drop control *
* bit 7 - ball shooter *
****************************************/
WRITE8_MEMBER(rulechan_state::port31_w)
{
m_p31=data;
if( BIT(m_p31,4)) { m_p30|=0x20; m_ballin=0;} /* Drop ball....ball in shooter */
if(BIT(m_p31,7)) /* Shoot ball */
{
m_p30&=0xdf; /* ball out.... */
m_num = machine().rand() % 37; /* sort winning number */
//logerror("shooting ball 2d\n", m_num);
}
}
/****************************************
Port 32h - Motor Control *
* *
* data latch for speed control ... *
* *
****************************************/
WRITE8_MEMBER(rulechan_state::port32_w)
{
m_p32=data;
}
/**********************
* Port 40h *
* serial data port *
**********************/
WRITE8_MEMBER(rulechan_state::port40_w)
{
printf("%c",data); /* Serial data out - Console */
}
/************************************************
* Extra Sound - Roulette spinning ball *
************************************************/
void rulechan_state::sound_off()
{
m_maincpu->space(AS_IO).write_byte(0x10, 0x07);
m_maincpu->space(AS_IO).write_byte(0x11, m_maincpu->space(AS_PROGRAM).read_byte(SND_FLG) | 0x20);
m_maincpu->space(AS_IO).write_byte(0x10, 0x0e);
}
void rulechan_state::sound_sort()
{
for (int i=0;i<5;i++)
{
m_maincpu->space(AS_IO).write_byte(0x10, m_sndsrt[(2*i)]);
m_maincpu->space(AS_IO).write_byte(0x11, m_sndsrt[(2*i)+1]);
}
m_maincpu->space(AS_IO).write_byte(0x10, 0x07);
m_maincpu->space(AS_IO).write_byte(0x11, m_maincpu->space(AS_PROGRAM).read_byte(SND_FLG) & 0xdf);
m_maincpu->space(AS_IO).write_byte(0x10, 0x0e);
}
/***********************
* Wheel Simulation *
***********************/
TIMER_DEVICE_CALLBACK_MEMBER(rulechan_state::wheel_speed)
{
if(m_step==0)
{
if((BIT4) & (m_updn4==0))
{
m_p30&=0xef;
m_updn4=1;
//logerror("1:port_p30:- Reset bit 4 pulse start -%2x cont_pasos:%2d\n",m_p30, m_step);
return;
}
if((!BIT4) & (m_updn4==1))
{
m_p30|=0x10;
//logerror("2:port_p30:- Set bit 4 -%2x cont_pasos:%2d\n",m_p30, m_step);
return;
}
if((BIT4) & (m_updn4==1))
{
m_updn4=0;
m_step++;
//logerror("3:port_p30:-end mark for reset bit 4 -%2x cont_pasos:%2d\n",m_p30, m_step);
return;
}
}
else
{
if(BIT3 & (m_updn3==0))
{
m_p30&=0xf7;
//logerror("4:port_p30:-reset bit 3 -%2x cont_pasos:%2d\n",m_p30, m_step);
return;
}
if(!BIT3 & (m_updn3==0))
{
if(!BIT2)
{
m_p30|= 0x04;
//logerror("5:port_p30:-set bit 2 -%2x cont_pasos:%2d\n",m_p30, m_step);
return;
}
else
{
if((m_step-1==m_num) & (m_updn2==0))
{
if(!BIT5) /* ball in pocket? */
{
m_p30&= 0xfb;
m_updn2=1;
m_ballin++;
logerror("Ball In Pocket m_num:%2x\n", m_num);
return;
}
}
}
m_updn2=0;
m_updn3=1;
}
if(!BIT3 & (m_updn3==1))
{
m_p30|=0x08;
m_updn3=0;
m_step++;
if (m_step==39){ m_step=0;m_p30|=0x1c;}
//logerror("6:port_p30:-set bit 3 -%2x cont_pasos:%2d \n",m_p30, m_step);
return;
}
}
}
/***********************
* Ball Simulation *
***********************/
TIMER_DEVICE_CALLBACK_MEMBER(rulechan_state::ball_speed)
{
if(MOTORON)
{
if(d_spin==0)
{
m_tspin++;
d_spin=m_spin;
if(BALLIN) m_tspin=37; /* braking ball once per number step */
if(m_tspin==37) { m_tspin=0; m_spin++; d_spin=m_spin;} /* braking ball once per round */
if( (!BALLIN) | (LEDNOTNUM & BALLIN ) )
{
m_led++;if(m_led==37) m_led=0;
for (int i=0;i<37;i++) m_lamps[i+20] = (m_led==i) ? 1:0; /* update roulette led lamps */
sound_sort();
}
}
else
{
d_spin--; /* burn cycles */
sound_off();
}
}
else
{
for (int i=0;i<37;i++) m_lamps[i+20] = (m_num==i) ? 1:0;
m_spin=d_spin=m_tspin=m_ballin=0;
}
/* Ball simulation finished */
/* if needed, get pass and shows it on layout*/
m_pass[0]= m_maincpu->space(AS_PROGRAM).read_byte(RAM_PSW);
if((m_pass[0]<=0x39)& (m_pass[0]>=0x30))
{
for(int i=0;i<6;i++)
{
m_pass[i]= m_maincpu->space(AS_PROGRAM).read_byte(RAM_PSW+i);
m_lamps[10+i] = dec_7seg(m_pass[i] - 0x30);
}
}
else
for(int i=0;i<6;i++) m_lamps[10+i] = dec_7seg(0xff);
}
/**************************************
* Input Ports *
**************************************/
static INPUT_PORTS_START( rulechan )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P1 Key-In") PORT_CODE(KEYCODE_1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P1 Key-Out") PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P2 Key-In") PORT_CODE(KEYCODE_2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P2 Key-Out") PORT_CODE(KEYCODE_X)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P3 Key-In") PORT_CODE(KEYCODE_3)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P3 Key-Out") PORT_CODE(KEYCODE_C)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P4 Key-In") PORT_CODE(KEYCODE_4)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P4 Key-Out") PORT_CODE(KEYCODE_V)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P5 Key-In") PORT_CODE(KEYCODE_5)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P5 Key-Out") PORT_CODE(KEYCODE_B)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet") PORT_CODE(KEYCODE_LCONTROL)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P6 Key-In") PORT_CODE(KEYCODE_6)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P6 Key-Out") PORT_CODE(KEYCODE_N)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("AUX")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Tilt 1") PORT_CODE(KEYCODE_7)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Tilt 2") PORT_CODE(KEYCODE_8)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_TOGGLE PORT_CODE(KEYCODE_0)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) /* bit 6 is EEPROM data */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_CODE(KEYCODE_9)
PORT_START("TTY")
PORT_BIT( 0x000000001, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("1") PORT_CODE(KEYCODE_1_PAD)
PORT_BIT( 0x000000002, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("2") PORT_CODE(KEYCODE_2_PAD)
PORT_BIT( 0x000000004, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("3") PORT_CODE(KEYCODE_3_PAD)
PORT_BIT( 0x000000008, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("4") PORT_CODE(KEYCODE_4_PAD)
PORT_BIT( 0x000000010, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("5") PORT_CODE(KEYCODE_5_PAD)
PORT_BIT( 0x000000020, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("6") PORT_CODE(KEYCODE_6_PAD)
PORT_BIT( 0x000000040, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("7") PORT_CODE(KEYCODE_7_PAD)
PORT_BIT( 0x000000080, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("8") PORT_CODE(KEYCODE_8_PAD)
PORT_BIT( 0x000000100, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("9") PORT_CODE(KEYCODE_9_PAD)
PORT_BIT( 0x000000200, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("0") PORT_CODE(KEYCODE_0_PAD)
PORT_BIT( 0x000000400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER)
PORT_BIT( 0x000000800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(":") PORT_CODE(KEYCODE_COLON)
PORT_BIT( 0x000001000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("BS") PORT_CODE(KEYCODE_BACKSPACE)
PORT_BIT( 0x000002000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SP") PORT_CODE(KEYCODE_SPACE)
PORT_BIT( 0x000004000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R)
PORT_BIT( 0x000008000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("S") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x000010000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("T") PORT_CODE(KEYCODE_T)
PORT_BIT( 0x000020000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_M)
PORT_BIT( 0x000040000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("K") PORT_CODE(KEYCODE_K)
PORT_BIT( 0x000080000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W)
PORT_BIT( 0x000100000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("U") PORT_CODE(KEYCODE_U)
PORT_BIT( 0x000200000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_D)
PORT_BIT( 0x000400000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_F)
PORT_BIT( 0x000800000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x001000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x002000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x004000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("l") PORT_CODE(KEYCODE_L)
PORT_BIT( 0x008000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("H") PORT_CODE(KEYCODE_H)
PORT_BIT( 0x010000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I)
PORT_BIT( 0x020000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("J") PORT_CODE(KEYCODE_J)
PORT_BIT( 0x040000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O)
PORT_BIT( 0x080000000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("p") PORT_CODE(KEYCODE_RCONTROL)
PORT_START("DSW")
PORT_DIPNAME( 0x01, 0x01, "Borrado Total" ) PORT_DIPLOCATION("DSW:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, "Repite" ) PORT_DIPLOCATION("DSW:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Demo" ) PORT_DIPLOCATION("DSW:3")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "Acceso" ) PORT_DIPLOCATION("DSW:4")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "Test de Plato" ) PORT_DIPLOCATION("DSW:5")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "Inmoviliza" ) PORT_DIPLOCATION("DSW:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "Doble Cero" ) PORT_DIPLOCATION("DSW:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Castellano" ) PORT_DIPLOCATION("DSW:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START( "EEPROMOUT" )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) /* bit 3 is data (active high) */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) /* bit 4 is clock (active high) */
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) /* bit 5 is cs */
INPUT_PORTS_END
/**************************************
* Machine Driver *
**************************************/
MACHINE_CONFIG_START(rulechan_state::rulechan)
/* basic machine hardware */
Z80(config, m_maincpu, CPU_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &rulechan_state::main_map);
m_maincpu->set_addrmap(AS_IO, &rulechan_state::main_io);
m_maincpu->set_periodic_int(FUNC(rulechan_state::irq0_line_hold), attotime::from_hz(120));
/* nvram */
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* eeprom */
EEPROM_93C46_8BIT(config, "eeprom");
MCFG_TIMER_DRIVER_ADD_PERIODIC("ball_speed", rulechan_state, ball_speed, attotime::from_hz(60))
MCFG_TIMER_DRIVER_ADD_PERIODIC("wheel_speed", rulechan_state, wheel_speed, attotime::from_hz(60))
/* video hardware */
v9938_device &v9938(V9938(config, "v9938", VID_CLOCK));
v9938.set_screen_ntsc("screen");
v9938.set_vram_size(VDP_MEM);
//v9938.int_cb().set_inputline("maincpu", 0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
/* sound hardware */
SPEAKER(config, "mono").front_center();
ay8910_device &ay_re900(AY8910(config, "ay8910", TMS_CLOCK)); /* From TMS9128NL - Pin 37 (GROMCLK) */
ay_re900.port_a_read_callback().set(FUNC(rulechan_state::psg_portA_r));
ay_re900.port_b_read_callback().set(FUNC(rulechan_state::psg_portB_r));
ay_re900.add_route(ALL_OUTPUTS, "mono", 0.5);
MACHINE_CONFIG_END
/**************************************
* ROM Load *
**************************************/
ROM_START( rulechan )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "eprom322", 0x00000, 0x10000, CRC(a78e106f) SHA1(23e25ca60296e8002df9b9cf16ad8fe8a1e6c93b) )
ROM_REGION(0x80, "eeprom", 0)
ROM_LOAD( "eeprom.322", 0x0000, 0x0080, CRC(ded905d2) SHA1(999e8e54a31a232092c4345434b93358226d1144) )
ROM_END
ROM_START( rulechab )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "eprom165", 0x00000, 0x10000, CRC(1669f266) SHA1(14e70b91e260e3bc338870936954e09c182fe591) )
ROM_REGION(0x80, "eeprom", 0)
ROM_LOAD( "eeprom.165", 0x0000, 0x0080, CRC(042ac516) SHA1(a32d82acb438cceda0f03b58be6977eeb589836c) )
ROM_END
/************************
* Driver Init *
************************/
void rulechan_state::rulechan_init()
{
m_p30=0x3c;
m_p32=0Xf0; /* Motor off at startup */
m_step=0;
m_stat=0;
m_updn2=0;
m_updn3=0;
m_updn4=0;
}
/**************************************
* Game Driver(s) *
**************************************/
// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT
GAMEL(1991, rulechan, 0, rulechan, rulechan, rulechan_state, rulechan_init, ROT0, "ElectroChance", "Super Ball (Version EC-3.50 N322)", MACHINE_SUPPORTS_SAVE, layout_rulechan)
GAMEL(1991, rulechab, 0, rulechan, rulechan, rulechan_state, rulechan_init, ROT0, "ElectroChance", "Super Ball (Version EC-3.50 N165)", MACHINE_SUPPORTS_SAVE, layout_rulechan)

View File

@ -0,0 +1,459 @@
<?xml version="1.0"?>
<mamelayout version="2">
<element name="DIGIT" defstate="0">
<led7seg><color red="0.0" green="0.45" blue="0.45" /></led7seg>
</element>
<element name="BALL0">
<disk state = "0">
<color red="0.0" green="0.3" blue="0" />
</disk>
<disk state = "1">
<color red="0" green="1" blue="0" />
</disk>
</element>
<element name="BALL">
<disk state = "0">
<color red="0.3" green="0" blue="0" />
</disk>
<disk state = "1">
<color red="1" green="0" blue="0" />
</disk>
</element>
<element name="BOT"><disk><color red="0" green="0.4" blue="0" /></disk></element>
<element name="BBET"><disk><color red="0" green="0.4" blue="0" /></disk><text string="Bet"><color red="0.0" green="0.2" blue="0.0" /></text></element>
<element name="B_UP"><disk><color red="0" green="0.4" blue="0" /></disk><text string="Up"><color red="0.0" green="0.2" blue="0.0" /></text></element>
<element name="BDWN"><disk><color red="0" green="0.4" blue="0" /></disk><text string="Down"><color red="0.0" green="0.2" blue="0.0" /></text></element>
<element name="BLEF"><disk><color red="0" green="0.4" blue="0" /></disk><text string="Left"><color red="0.0" green="0.2" blue="0.0" /></text></element>
<element name="BRIG"><disk><color red="0" green="0.4" blue="0" /></disk><text string="Right"><color red="0.0" green="0.2" blue="0.0" /></text></element>
<element name="L0" defstate="1">
<rect state="0">
<color red="0.7" green="0.0" blue="0.0" />
</rect>
<text state ="0" string="Operator Key">
<color red="0.0" green="0.0" blue="0.0" />
</text>
<rect state="1">
<color red="0.0" green="0.7" blue="0.0" />
</rect>
<text state ="1" string="Operator Key">
<color red="0.0" green="0.0" blue="0.0" />
</text>
</element>
<element name="L00" defstate="1">
<rect state="0">
<color red="0.7" green="0.0" blue="0.0" />
</rect>
<text state ="0" string="Page Key">
<color red="0.0" green="0.0" blue="0.0" />
</text>
<rect state="1">
<color red="0.0" green="0.7" blue="0.0" />
</rect>
<text state ="1" string="Page Key">
<color red="0.0" green="0.0" blue="0.0" />
</text>
</element>
<element name="LI1" defstate="0">
<rect state="1">
<color red="0.0" green="0.7" blue="0.0" />
</rect>
<rect state="0">
<color red="0.0" green="0.3" blue="0.0" />
</rect>
<text string="IN 1">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LI2" defstate="0">
<rect state="1">
<color red="0.0" green="0.7" blue="0.0" />
</rect>
<rect state="0">
<color red="0.0" green="0.3" blue="0.0" />
</rect>
<text string="IN 2">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LI3" defstate="0">
<rect state="1">
<color red="0.0" green="0.7" blue="0.0" />
</rect>
<rect state="0">
<color red="0.0" green="0.3" blue="0.0" />
</rect>
<text string="IN 3">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LI4" defstate="0">
<rect state="1">
<color red="0.0" green="0.7" blue="0.0" />
</rect>
<rect state="0">
<color red="0.0" green="0.3" blue="0.0" />
</rect>
<text string="IN 4">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LI5" defstate="0">
<rect state="1">
<color red="0.0" green="0.7" blue="0.0" />
</rect>
<rect state="0">
<color red="0.0" green="0.3" blue="0.0" />
</rect>
<text string="IN 5">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LI6" defstate="0">
<rect state="1">
<color red="0.0" green="0.7" blue="0.0" />
</rect>
<rect state="0">
<color red="0.0" green="0.3" blue="0.0" />
</rect>
<text string="IN 6">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LO1" defstate="0">
<rect state="1">
<color red="0.7" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="OUT 1">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LO2" defstate="0">
<rect state="1">
<color red="0.7" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="OUT 2">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LO3" defstate="0">
<rect state="1">
<color red="0.7" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="OUT 3">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LO4" defstate="0">
<rect state="1">
<color red="0.7" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="OUT 4">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LO5" defstate="0">
<rect state="1">
<color red="0.7" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="OUT 5">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="LO6" defstate="0">
<rect state="1">
<color red="0.7" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="OUT 6">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<view name="Lamps">
<screen index="0">
<bounds left="100" top="0" right="832" bottom="1072" />
</screen>
<bezel name="lamp10" element="DIGIT"><bounds x="1140" y="550" width="20" height="30" /><orientation rotate="0" /></bezel>
<bezel name="lamp11" element="DIGIT"><bounds x="1160" y="550" width="20" height="30" /><orientation rotate="0" /></bezel>
<bezel name="lamp12" element="DIGIT"><bounds x="1180" y="550" width="20" height="30" /><orientation rotate="0" /></bezel>
<bezel name="lamp13" element="DIGIT"><bounds x="1200" y="550" width="20" height="30" /><orientation rotate="0" /></bezel>
<bezel name="lamp14" element="DIGIT"><bounds x="1220" y="550" width="20" height="30" /><orientation rotate="0" /></bezel>
<bezel name="lamp15" element="DIGIT"><bounds x="1240" y="550" width="20" height="30" /><orientation rotate="0" /></bezel>
<bezel element="BBET" inputtag="IN0" inputmask="0x04" >
<bounds x="270" y="50" width="42" height="42" />
</bezel>
<bezel element="BDWN" inputtag="IN0" inputmask="0x08">
<bounds x="174" y="75" width="42" height="42" />
</bezel>
<bezel element="B_UP" inputtag="IN0" inputmask="0x10" >
<bounds x="174" y="25" width="42" height="42" />
</bezel>
<bezel element="BLEF" inputtag="IN0" inputmask="0x20">
<bounds x="126" y="50" width="42" height="42" />
</bezel>
<bezel element="BRIG" inputtag="IN0" inputmask="0x40" >
<bounds x="222" y="50" width="42" height="42" />
</bezel>
<bezel element="BBET" inputtag="IN1" inputmask="0x04" >
<bounds x="514" y="50" width="42" height="42" />
</bezel>
<bezel element="BDWN" inputtag="IN1" inputmask="0x08">
<bounds x="418" y="75" width="42" height="42" />
</bezel>
<bezel element="B_UP" inputtag="IN1" inputmask="0x10" >
<bounds x="418" y="25" width="42" height="42" />
</bezel>
<bezel element="BLEF" inputtag="IN1" inputmask="0x20">
<bounds x="370" y="50" width="42" height="42" />
</bezel>
<bezel element="BRIG" inputtag="IN1" inputmask="0x40" >
<bounds x="466" y="50" width="42" height="42" />
</bezel>
<bezel element="BBET" inputtag="IN2" inputmask="0x04" >
<bounds x="758" y="50" width="42" height="42" />
</bezel>
<bezel element="BDWN" inputtag="IN2" inputmask="0x08">
<bounds x="662" y="75" width="42" height="42" />
</bezel>
<bezel element="B_UP" inputtag="IN2" inputmask="0x10" >
<bounds x="662" y="25" width="42" height="42" />
</bezel>
<bezel element="BLEF" inputtag="IN2" inputmask="0x20">
<bounds x="614" y="50" width="42" height="42" />
</bezel>
<bezel element="BRIG" inputtag="IN2" inputmask="0x40" >
<bounds x="710" y="50" width="42" height="42" />
</bezel>
<bezel element="BBET" inputtag="IN3" inputmask="0x04" >
<bounds x="758" y="1000" width="42" height="42" />
</bezel>
<bezel element="BDWN" inputtag="IN3" inputmask="0x08">
<bounds x="662" y="1025" width="42" height="42" />
</bezel>
<bezel element="B_UP" inputtag="IN3" inputmask="0x10" >
<bounds x="662" y="975" width="42" height="42" />
</bezel>
<bezel element="BLEF" inputtag="IN3" inputmask="0x20">
<bounds x="614" y="1000" width="42" height="42" />
</bezel>
<bezel element="BRIG" inputtag="IN3" inputmask="0x40" >
<bounds x="710" y="1000" width="42" height="42" />
</bezel>
<bezel element="BBET" inputtag="IN4" inputmask="0x04" >
<bounds x="514" y="1000" width="42" height="42" />
</bezel>
<bezel element="BDWN" inputtag="IN4" inputmask="0x08">
<bounds x="418" y="1025" width="42" height="42" />
</bezel>
<bezel element="B_UP" inputtag="IN4" inputmask="0x10" >
<bounds x="418" y="975" width="42" height="42" />
</bezel>
<bezel element="BLEF" inputtag="IN4" inputmask="0x20">
<bounds x="370" y="1000" width="42" height="42" />
</bezel>
<bezel element="BRIG" inputtag="IN4" inputmask="0x40" >
<bounds x="466" y="1000" width="42" height="42" />
</bezel>
<bezel element="BBET" inputtag="IN5" inputmask="0x04" >
<bounds x="270" y="1000" width="42" height="42" />
</bezel>
<bezel element="BDWN" inputtag="IN5" inputmask="0x08">
<bounds x="174" y="1025" width="42" height="42" />
</bezel>
<bezel element="B_UP" inputtag="IN5" inputmask="0x10" >
<bounds x="174" y="975" width="42" height="42" />
</bezel>
<bezel element="BLEF" inputtag="IN5" inputmask="0x20">
<bounds x="126" y="1000" width="42" height="42" />
</bezel>
<bezel element="BRIG" inputtag="IN5" inputmask="0x40" >
<bounds x="222" y="1000" width="42" height="42" />
</bezel>
<bezel name="lamp60" element="L0" inputtag="AUX" inputmask="0x08" >
<bounds x="1000" y="870" width="200" height="45" />
</bezel>
<bezel name="lamp61" element="L00" inputtag="AUX" inputmask="0x80" >
<bounds x="1270" y="870" width="200" height="45" />
</bezel>
<bezel name="lamp60" element="LI1" inputtag="IN0" inputmask="0x01" >
<bounds x="1000" y="950" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LO1" inputtag="IN0" inputmask="0x02">
<bounds x="1000" y="1000" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LI2" inputtag="IN1" inputmask="0x01" >
<bounds x="1080" y="950" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LO2" inputtag="IN1" inputmask="0x02">
<bounds x="1080" y="1000" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LI3" inputtag="IN2" inputmask="0x01" >
<bounds x="1160" y="950" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LO3" inputtag="IN2" inputmask="0x02">
<bounds x="1160" y="1000" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LI4" inputtag="IN3" inputmask="0x01" >
<bounds x="1240" y="950" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LO4" inputtag="IN3" inputmask="0x02">
<bounds x="1240" y="1000" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LI5" inputtag="IN4" inputmask="0x01" >
<bounds x="1320" y="950" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LO5" inputtag="IN4" inputmask="0x02">
<bounds x="1320" y="1000" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LI6" inputtag="IN5" inputmask="0x01" >
<bounds x="1400" y="950" width="70" height="45" />
</bezel>
<bezel name="lamp60" element="LO6" inputtag="IN5" inputmask="0x02">
<bounds x="1400" y="1000" width="70" height="45" />
</bezel>
<bezel name="lamp20" element="BALL0">
<bounds x="1321.5755279531" y="319.178830824334" width="16" height="16" />
</bezel>
<bezel name="lamp56" element="BALL">
<bounds x="1332.56513467655" y="335.702636395822" width="16" height="16" />
</bezel>
<bezel name="lamp55" element="BALL">
<bounds x="1340.60412921523" y="353.84601461785" width="16" height="16" />
</bezel>
<bezel name="lamp54" element="BALL">
<bounds x="1345.46124433281" y="373.087013532536" width="16" height="16" />
</bezel>
<bezel name="lamp53" element="BALL">
<bounds x="1346.9967496707" y="392.872104633103" width="16" height="16" />
</bezel>
<bezel name="lamp52" element="BALL">
<bounds x="1345.16647153601" y="412.632106871213" width="16" height="16" />
</bezel>
<bezel name="lamp51" element="BALL">
<bounds x="1340.0230636983" y="431.798560959421" width="16" height="16" />
</bezel>
<bezel name="lamp50" element="BALL">
<bounds x="1331.71449263647" y="449.820082909883" width="16" height="16" />
</bezel>
<bezel name="lamp49" element="BALL">
<bounds x="1320.4797808126" y="466.178226347788" width="16" height="16" />
</bezel>
<bezel name="lamp48" element="BALL">
<bounds x="1306.64213043088" y="480.402397269624" width="16" height="16" />
</bezel>
<bezel name="lamp47" element="BALL">
<bounds x="1290.59962549863" y="492.083392175853" width="16" height="16" />
</bezel>
<bezel name="lamp46" element="BALL">
<bounds x="1272.81377967425" y="500.885170110556" width="16" height="16" />
</bezel>
<bezel name="lamp45" element="BALL">
<bounds x="1253.7962593595" y="506.554519947908" width="16" height="16" />
</bezel>
<bezel name="lamp44" element="BALL">
<bounds x="1234.09416398871" y="508.928344815248" width="16" height="16" />
</bezel>
<bezel name="lamp43" element="BALL">
<bounds x="1214.27428697419" y="507.938354093155" width="16" height="16" />
</bezel>
<bezel name="lamp42" element="BALL">
<bounds x="1194.90681009169" y="503.613028012232" width="16" height="16" />
</bezel>
<bezel name="lamp41" element="BALL">
<bounds x="1176.54890038884" y="496.076798328726" width="16" height="16" />
</bezel>
<bezel name="lamp40" element="BALL">
<bounds x="1159.72868150364" y="485.546468649452" width="16" height="16" />
</bezel>
<bezel name="lamp39" element="BALL">
<bounds x="1144.93004050891" y="472.32497738676" width="16" height="16" />
</bezel>
<bezel name="lamp38" element="BALL">
<bounds x="1132.57870736225" y="456.792682771969" width="16" height="16" />
</bezel>
<bezel name="lamp37" element="BALL">
<bounds x="1123.03000743027" y="439.396420641569" width="16" height="16" />
</bezel>
<bezel name="lamp36" element="BALL">
<bounds x="1116.55863942476" y="420.636649783757" width="16" height="16" />
</bezel>
<bezel name="lamp35" element="BALL">
<bounds x="1113.35077282082" y="401.053054650283" width="16" height="16" />
</bezel>
<bezel name="lamp34" element="BALL">
<bounds x="1113.49869210012" y="381.209019617376" width="16" height="16" />
</bezel>
<bezel name="lamp33" element="BALL">
<bounds x="1116.99814189431" y="361.675421442988" width="16" height="16" />
</bezel>
<bezel name="lamp32" element="BALL">
<bounds x="1123.74844940422" y="343.014206181865" width="16" height="16" />
</bezel>
<bezel name="lamp31" element="BALL">
<bounds x="1133.55542057307" y="325.762223020679" width="16" height="16" />
</bezel>
<bezel name="lamp30" element="BALL">
<bounds x="1146.13692669582" y="310.415780104371" width="16" height="16" />
</bezel>
<bezel name="lamp29" element="BALL">
<bounds x="1161.13102074843" y="297.416366654444" width="16" height="16" />
</bezel>
<bezel name="lamp28" element="BALL">
<bounds x="1178.10634994466" y="287.137952127882" width="16" height="16" />
</bezel>
<bezel name="lamp27" element="BALL">
<bounds x="1196.57456497046" y="279.876227796751" width="16" height="16" />
</bezel>
<bezel name="lamp26" element="BALL">
<bounds x="1216.00436890452" y="275.840100248669" width="16" height="16" />
</bezel>
<bezel name="lamp25" element="BALL">
<bounds x="1235.83680166342" y="275.145681524636" width="16" height="16" />
</bezel>
<bezel name="lamp24" element="BALL">
<bounds x="1255.5013202655" y="277.812948787016" width="16" height="16" />
</bezel>
<bezel name="lamp23" element="BALL">
<bounds x="1274.43221231367" y="283.765169612954" width="16" height="16" />
</bezel>
<bezel name="lamp22" element="BALL">
<bounds x="1292.08487051111" y="292.831109446467" width="16" height="16" />
</bezel>
<bezel name="lamp21" element="BALL">
<bounds x="1307.95146002158" y="304.749957704861" width="16" height="16" />
</bezel>
</view>
</mamelayout>

View File

@ -33375,6 +33375,10 @@ rt1715w //
qwak // (proto) (c) 1982
runaway // (proto) (c) 1982
@source:rulechan.cpp
rulechan // 1992 ElectroChance
rulechab // 1992 ElectroChance
@source:rungun.cpp
rungun // GX247 (c) 1993 (World)
runguna // GX247 (c) 1993 (World)