summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/re900.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/re900.cpp')
-rw-r--r--src/mame/drivers/re900.cpp470
1 files changed, 0 insertions, 470 deletions
diff --git a/src/mame/drivers/re900.cpp b/src/mame/drivers/re900.cpp
deleted file mode 100644
index 3dbac037d97..00000000000
--- a/src/mame/drivers/re900.cpp
+++ /dev/null
@@ -1,470 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Grull Osgo, Roberto Fresca
-/***********************************************************************************
-
- re900.cpp
-
- Ruleta RE-900 - Entretenimientos GEMINIS & GENATRON (C) 1993
-
- Driver by Grull Osgo.
- Additional work by Roberto Fresca.
-
- Games running on this hardware:
-
- * Ruleta RE-900, 1993, Entretenimientos GEMINIS.
- * Buena Suerte '94 1994, Entretenimientos GEMINIS.
-
-
-************************************************************************************
-
- Hardware Info
- =============
-
- * Main board:
-
- 1x AMD P80C31BH Main CPU.
- 1x AY-3-8910 Sound & I/O System.
- 1x TMS-9129-NL Video System.
-
- 1x 27C512 EPROM Program ROM.
- 1x MS6264L-10PC (8Kx8) SRAM Data Memory (Battery Backed RAM).
- 2x TMS4416-15NL (64Kx4) DRAM Video Memory.
-
- 1x 11.0592 MHz Crystal CPU clock.
- 1x 10.738635 MHz. Crystal Video System clock.
- 1x MAX691CPE Power supervisor system, Data RAM Protect and Watchdog.
-
- 1x 3.6 Ni-Cd Battery Data Memory.
- 1x LM380N-8 1 Channel Audio Amplifier.
-
-
-************************************************************************************
-
- Game Info
- =========
-
- * RE-900 Electronic Roulette.- 6 Players - W/ Random Bonus Multiplier (up to 10x)
-
- How to play...
-
- This Roulette allows up to 6 players. To start the machine, turn the Operator Key
- (the Operator Key light will turn green). Whilst this key is turned ON, you
- can insert credits, play, and payout. Once the key is turned OFF (red light), you
- can play, but credits can't be entered/taken.
-
- You can select the player number through key "L" (the respective player light will
- lite on). Key-In for all 6 players are keys 1-2-3-4-5-6 and Key-Out are Q-W-E-R-T-Y
- respectively. Up-Down-Left-Right to place cursor, and left CTRL to place a bet.
- After a short time without activity, the roulette start to play, simulating the ball
- with an array of leds...
-
- We made a full artwork that allow you to play this game with bells and whistles.
-
-
- * Buena Suerte ?94 Video Poker Game w/ Double Up feature - 1 Player.
-
- This game is a reprogrammed version of the Buena Suerte! poker game, to run on this
- GEMINIS RE900 hardware.
-
- Graphics are worse than original BS, but sounds are improved through the AY-8910.
-
-
-***********************************************************************************/
-
-#include "emu.h"
-
-#include "cpu/mcs51/mcs51.h"
-#include "machine/nvram.h"
-#include "sound/ay8910.h"
-#include "video/tms9928a.h"
-
-#include "speaker.h"
-
-#include "re900.lh"
-
-
-#define MAIN_CLOCK XTAL(11'059'200)
-#define VDP_CLOCK XTAL(10'730'000)
-#define TMS_CLOCK VDP_CLOCK / 24
-
-
-class re900_state : public driver_device
-{
-public:
- re900_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_rom(*this, "rom"),
- m_lamps(*this, "lamp%u", 0U)
- { }
-
- void re900(machine_config &config);
- void bs94(machine_config &config);
-
- void init_re900();
-
-private:
- // common
- uint8_t rom_r(offs_t offset);
- void cpu_port_0_w(uint8_t data);
- void watchdog_reset_w(uint8_t data);
-
- // re900 specific
- uint8_t re_psg_portA_r();
- uint8_t re_psg_portB_r();
- void re_mux_port_A_w(uint8_t data);
- void re_mux_port_B_w(uint8_t data);
-
- void mem_io(address_map &map);
- void mem_prg(address_map &map);
-
- virtual void machine_start() override { m_lamps.resolve(); }
-
- required_device<cpu_device> m_maincpu;
-
- required_shared_ptr<uint8_t> m_rom;
-
- // re900 specific
- uint8_t m_psg_pa;
- uint8_t m_psg_pb;
- uint8_t m_mux_data;
- uint8_t m_ledant;
- uint8_t m_player;
- uint8_t m_stat_a;
- output_finder<84> m_lamps;
-};
-
-
-/****************
-* Read Handlers *
-****************/
-
-uint8_t re900_state::re_psg_portA_r()
-{
- if ((ioport("IN0")->read() & 0x01) == 0)
- {
- m_lamps[0] = 1; // Operator Key ON
- }
-
- else
- {
- m_lamps[0] = 0; // Operator Key OFF
- }
-
- return ioport("IN0")->read();
-}
-
-uint8_t re900_state::re_psg_portB_r()
-{
- uint8_t retval = 0xff;
- logerror("llamada a re_psg_portB_r\n");
- /* This is a hack to select the active player due to Keyboard size restrictions */
-
- m_lamps[m_player] = 1;
-
- if (ioport("IN_S")->read())
- {
- if (!m_stat_a)
- {
- m_lamps[1] = 0;
- m_lamps[2] = 0;
- m_lamps[3] = 0;
- m_lamps[4] = 0;
- m_lamps[5] = 0;
- m_lamps[6] = 0;
- m_player++;
-
- if (m_player == 7)
- {
- m_player = 1;
- }
-
- m_lamps[m_player] = 1; /* It shows active player via layout buttons */
- m_stat_a = 1;
- }
- }
-
- else
- {
- m_stat_a = 0;
- }
- /* End of Select Player Hack */
-
- /* "INA": Unified port to share the player Keys among all players - Key In & Key Out have their own buttons on keyboard. */
- switch( m_mux_data )
- {
- case 0x01: retval = (ioport("IN6")->read() | 0x80 ) - (( m_player == 6 ) ? (ioport("INA")->read() | 0x80 ) ^ 0xff: 0x00 ); break; /* Player 6 */
- case 0x02: retval = (ioport("IN5")->read() | 0x80 ) - (( m_player == 5 ) ? (ioport("INA")->read() | 0x80 ) ^ 0xff: 0x00 ); break; /* Player 5 */
- case 0x04: retval = (ioport("IN4")->read() | 0x80 ) - (( m_player == 4 ) ? (ioport("INA")->read() | 0x80 ) ^ 0xff: 0x00 ); break; /* Player 4 */
- case 0x08: retval = (ioport("IN3")->read() | 0x80 ) - (( m_player == 3 ) ? (ioport("INA")->read() | 0x80 ) ^ 0xff: 0x00 ); break; /* Player 3 */
- case 0x10: retval = (ioport("IN2")->read() | 0x80 ) - (( m_player == 2 ) ? (ioport("INA")->read() | 0x80 ) ^ 0xff: 0x00 ); break; /* Player 2 */
- case 0x20: retval = (ioport("IN1")->read() | 0x80 ) - (( m_player == 1 ) ? (ioport("INA")->read() | 0x80 ) ^ 0xff: 0x00 ); break; /* Player 1 */
- }
-
- return retval;
-}
-
-uint8_t re900_state::rom_r(offs_t offset)
-{
- return m_rom[offset];
-}
-
-
-/***********************
-* Write Handlers *
-***********************/
-
-void re900_state::re_mux_port_A_w(uint8_t data)
-{
- m_psg_pa = data;
- m_mux_data = ((data >> 2) & 0x3f) ^ 0x3f;
-}
-
-void re900_state::re_mux_port_B_w(uint8_t data)
-{
- uint8_t led;
- m_psg_pb = data;
- led = (m_psg_pa >> 2) & 0x3f;
-
- if (data == 0x7f)
- {
- m_lamps[20 + led] = 1;
-
- if (led != m_ledant)
- {
- m_lamps[20 + m_ledant] = 0;
- m_ledant = led;
- }
- }
-}
-
-void re900_state::cpu_port_0_w(uint8_t data)
-{
-// m_lamps[7] = 1 ^ ( (data >> 4) & 1); /* Cont. Sal */
-// m_lamps[8] = 1 ^ ( (data >> 5) & 1); /* Cont. Ent */
-}
-
-void re900_state::watchdog_reset_w(uint8_t data)
-{
- //watchdog_reset_w(space,0,0); /* To do! */
-}
-
-
-/*******************************
-* Memory Map Information *
-*******************************/
-
-void re900_state::mem_prg(address_map &map)
-{
- map(0x0000, 0xffff).rom().share("rom");
-}
-
-void re900_state::mem_io(address_map &map)
-{
- map(0x0000, 0xbfff).r(FUNC(re900_state::rom_r));
- map(0xc000, 0xdfff).ram().share("nvram");
- map(0xe000, 0xefff).w(FUNC(re900_state::watchdog_reset_w));
- map(0xe000, 0xe001).w("tms9128", FUNC(tms9928a_device::write));
- map(0xe800, 0xe801).w("ay_re900", FUNC(ay8910_device::address_data_w));
- map(0xe802, 0xe802).r("ay_re900", FUNC(ay8910_device::data_r));
-}
-
-
-/************************
-* Input ports *
-************************/
-
-static INPUT_PORTS_START( re900 )
-
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Operator Key") PORT_TOGGLE PORT_CODE(KEYCODE_0)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Auditor Key") PORT_TOGGLE PORT_CODE(KEYCODE_9)
-
- PORT_START("INA")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
- 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("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
- 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_SERVICE1 ) PORT_NAME("P1 Key-In") PORT_CODE(KEYCODE_1)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P1 Key-Out") PORT_CODE(KEYCODE_Q)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
- 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_SERVICE1 ) PORT_NAME("P2 Key-In") PORT_CODE(KEYCODE_2)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P2 Key-Out") PORT_CODE(KEYCODE_W)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN3")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
- 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_SERVICE1 ) PORT_NAME("P3 Key-In") PORT_CODE(KEYCODE_3)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P3 Key-Out") PORT_CODE(KEYCODE_E)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN4")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
- 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_SERVICE1 ) PORT_NAME("P4 Key-In") PORT_CODE(KEYCODE_4)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P4 Key-Out") PORT_CODE(KEYCODE_R)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN5")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
- 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_SERVICE1 ) PORT_NAME("P5 Key-In") PORT_CODE(KEYCODE_5)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P5 Key-Out") PORT_CODE(KEYCODE_T)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN6")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
- 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_SERVICE1 ) PORT_NAME("P6 Key-In") PORT_CODE(KEYCODE_6)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P6 Key-Out") PORT_CODE(KEYCODE_Y)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN_S")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Player Select") PORT_CODE(KEYCODE_L)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( bs94 )
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME("Double")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Deal / Draw")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_CANCEL )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
-
- PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Operator") PORT_TOGGLE PORT_CODE(KEYCODE_0)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Card High")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME("Card Low")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Auditor") PORT_CODE(KEYCODE_9)
-INPUT_PORTS_END
-
-/***************************
-* Machine Driver *
-***************************/
-
-void re900_state::re900(machine_config &config)
-{
- /* basic machine hardware */
- i8051_device &maincpu(I8051(config, m_maincpu, MAIN_CLOCK));
- maincpu.set_addrmap(AS_PROGRAM, &re900_state::mem_prg);
- maincpu.set_addrmap(AS_IO, &re900_state::mem_io);
- maincpu.port_out_cb<0>().set(FUNC(re900_state::cpu_port_0_w));
-
- /* video hardware */
- tms9128_device &vdp(TMS9128(config, "tms9128", VDP_CLOCK)); /* TMS9128NL on the board */
- vdp.set_screen("screen");
- vdp.set_vram_size(0x4000);
- //vdp.int_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
- SCREEN(config, "screen", SCREEN_TYPE_RASTER);
-
- NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- ay8910_device &ay_re900(AY8910(config, "ay_re900", TMS_CLOCK)); /* From TMS9128NL - Pin 37 (GROMCLK) */
- ay_re900.port_a_read_callback().set(FUNC(re900_state::re_psg_portA_r));
- ay_re900.port_b_read_callback().set(FUNC(re900_state::re_psg_portB_r));
- ay_re900.port_a_write_callback().set(FUNC(re900_state::re_mux_port_A_w));
- ay_re900.port_b_write_callback().set(FUNC(re900_state::re_mux_port_B_w));
- ay_re900.add_route(ALL_OUTPUTS, "mono", 0.5);
-}
-
-void re900_state::bs94(machine_config &config)
-{
- re900(config);
-
- /* sound hardware */
- auto &ay_re900(*subdevice<ay8910_device>("ay_re900"));
- ay_re900.port_a_read_callback().set_ioport("IN0");
- ay_re900.port_b_read_callback().set_ioport("IN1");
- ay_re900.port_a_write_callback().set_nop();
- ay_re900.port_b_write_callback().set_nop();
-}
-
-
-/*************************
-* Rom Load *
-*************************/
-
-ROM_START( re900 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "re900.bin", 0x0000, 0x10000, CRC(967ae944) SHA1(104bab79fd50a8e38ae15058dbe47a59f1ec4b05) )
-ROM_END
-
-ROM_START( bs94 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "bs94.bin", 0x0000, 0x10000, CRC(bbd484ce) SHA1(4128e488ca806842c3639e05c4c9cf4c0da2990d) )
-ROM_END
-
-
-/************************
-* Driver Init *
-************************/
-
-void re900_state::init_re900()
-{
- m_player = 1;
- m_stat_a = 1;
- m_psg_pa = m_psg_pb = m_mux_data = m_ledant = 0;
-
- save_item(NAME(m_psg_pa));
- save_item(NAME(m_psg_pb));
- save_item(NAME(m_mux_data));
- save_item(NAME(m_ledant));
- save_item(NAME(m_player));
- save_item(NAME(m_stat_a));
-}
-
-
-/*************************
-* Game Drivers *
-*************************/
-
-// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT
-GAMEL( 1993, re900, 0, re900, re900, re900_state, init_re900, ROT90, "Entretenimientos GEMINIS", "Ruleta RE-900", MACHINE_SUPPORTS_SAVE, layout_re900 )
-GAME( 1994, bs94, 0, bs94, bs94, re900_state, empty_init, ROT0, "Entretenimientos GEMINIS", "Buena Suerte '94", MACHINE_SUPPORTS_SAVE )