Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
4435 lines (3730 sloc) 210 KB
// license:BSD-3-Clause
// copyright-holders:Luca Elia
/***************************************************************************
-= Newer Seta Hardware =-
driver by Luca Elia (l.elia@tin.it)
CPU : TMP68301*
or ColdFire + H8/3007 + PIC12C508 (for EVA2 & EVA3 PCBs)
Video : DX-101
DX-102 x3
Sound : X1-010
or OKI M9810 (for EVA2 & EVA3 PCBs)
OSC : 50.00000MHz
32.53047MHz
* The Toshiba TMP68301 is a 68HC000 + serial I/O, parallel I/O,
3 timers, address decoder, wait generator, interrupt controller,
all integrated in a single chip.
-------------------------------------------------------------------------------------------
Ordered by Board Year Game By
-------------------------------------------------------------------------------------------
P-FG01-1 (also P0-113A) 1995 Guardians / Denjin Makai II Banpresto
P0-113A 1994 Mobile Suit Gundam EX Revue Banpresto
P0-121A ; 2MP1-E00 (Ss) 1996 TelePachi Fever Lion Sunsoft
P0-123A 1996 Wakakusamonogatari Mahjong Yonshimai Maboroshi Ware
P0-125A ; KE (Namco) 1996 Kosodate Quiz My Angel Namco
P0-130B ; M-133 (Namco) 1997 Star Audition Namco
P0-136A ; KL (Namco) 1997 Kosodate Quiz My Angel 2 Namco
P-FG-02 1997 Reel'N Quake <unknown>
P-FG-03 ???? Endless Riches E.N.Tiger
P0-140B 2000 Funcube Namco
P0-140B 2000 Namco Stars Namco
P0-142A 1999 Puzzle De Bowling MOSS / Nihon System
P0-142A + extra parts 2000 Penguin Brothers / A-Blast Subsino
B0-003A (or B0-003B) 2000 Deer Hunting USA Sammy
B0-003A (or B0-003B) 2001 Turkey Hunting USA Sammy
B0-006B 2001-2 Funcube 2 - 5 Namco
B0-010A 2001 Wing Shooting Championship Sammy
B0-010A 2002 Trophy Hunting - Bear & Moose Sammy
P0-145-1 2002 Trophy Hunting - Bear & Moose (test) Sammy
-------------------------------------------------------------------------------------------
TODO:
- Proper emulation of the TMP68301 CPU, in a core file.
- Proper emulation of the ColdFire CPU, in a core file.
- Flip screen / Zooming support.
- Fix some graphics imperfections (e.g. color depth selection, "tilemap" sprites) [all done? - NS]
- I added a kludge involving a -0x10 yoffset, this fixes the lifeline in myangel.
I didn't find a better way to do it without breaking pzlbowl's title screen.
mj4simai:
- test mode doesn't work correctly, the grid is ok but when you press a key to go to the
next screen (input test) it stays up a second and then drops back into the game
myangel:
- some gfx at the end of the game (rays just before fireworks, and the border during
the wedding) have wrong colors. You can see the rays red, green and yellow because
that's how the palette is preinitialized by MAME, but the game never sets up those
palette entries. The game selects color depth "1", whose meaning is uncertain, and
color code 0 so I see no way to point to a different section of palette RAM.
- there are glitches in the bg horizontal scroll in the wedding sequence at the end of
the game. It looks like "scrollx" should be delayed one frame wrt "xoffs".
- there's a 4 pixel gap at the top of the title screen since clipping was reimplemented.
myangel2:
- before each level, the background image is shown with completely wrong colors. It
corrects itself when the level starts.
grdians:
- the map screen after the character selection needs zooming. There is a global
zoom register that should affect the background map and the level picture but
not the frontmost frame. This latter should use color 7ff (the last one) and
ignore the individual color codes in the tiles data. Note: the frontmost frame
has the shadow bit set, and has become invisible after implementing it.
penbros/ablast:
- Zooming is used briefly (between scenes, stage exit, stage introduction)
deerhunt,wschamp:
- offset tilemap sprite during demo. In deerhunt intro, the hunter should zoom
in to the deer. In wschamp intro the GPS unit should zoom to the high scores.
wschampb:
- dumps of the program ROMs matched the hand written checksum for each chip, but
the boot screen reports NG for both ROMs. - Is this correct and a bug from the
original release? Is that why the next bug fix release is v1.01? IE: such a
a minor increase in the version number.
funcube series:
- Hacked to run, as they use a ColdFire CPU.
- Pay-out key causes "unknown error" after coin count reaches 0.
reelquak:
- Needs an x offset for tilemap sprites.
***************************************************************************/
#include "emu.h"
#include "includes/seta2.h"
#include "cpu/h8/h83006.h"
#include "cpu/m68000/m68000.h"
#include "machine/mcf5206e.h"
#include "machine/nvram.h"
#include "machine/ticket.h"
#include "machine/watchdog.h"
#include "diserial.h"
#include "speaker.h"
/***************************************************************************
Memory Maps - Main CPU
***************************************************************************/
void seta2_state::machine_start()
{
if (memregion( "x1snd" ) != nullptr)
{
uint32_t const max = memregion( "x1snd" )->bytes() / 0x20000;
for (int i = 0; i < 8; i++)
{
if (m_x1_bank[i] != nullptr)
{
uint32_t ind = 0;
while (ind < 256)
{
m_x1_bank[i]->configure_entries(ind, max, memregion( "x1snd" )->base(), 0x20000); // TODO : Mirrored?
ind += max;
}
}
}
}
m_leds.resolve();
m_lamps.resolve();
}
WRITE8_MEMBER(seta2_state::sound_bank_w)
{
m_x1_bank[offset & 7]->set_entry(data);
}
void seta2_state::x1_map(address_map &map)
{
map(0x00000, 0x1ffff).bankr("x1_bank_1");
map(0x20000, 0x3ffff).bankr("x1_bank_2");
map(0x40000, 0x5ffff).bankr("x1_bank_3");
map(0x60000, 0x7ffff).bankr("x1_bank_4");
map(0x80000, 0x9ffff).bankr("x1_bank_5");
map(0xa0000, 0xbffff).bankr("x1_bank_6");
map(0xc0000, 0xdffff).bankr("x1_bank_7");
map(0xe0000, 0xfffff).bankr("x1_bank_8");
}
/***************************************************************************
Guardians
***************************************************************************/
WRITE8_MEMBER(seta2_state::grdians_lockout_w)
{
// initially 0, then either $25 (coin 1) or $2a (coin 2)
machine().bookkeeping().coin_counter_w(0,data & 0x01); // or 0x04
machine().bookkeeping().coin_counter_w(1,data & 0x02); // or 0x08
// popmessage("%04X", data & 0xff);
}
void seta2_state::grdians_map(address_map &map)
{
map(0x000000, 0x1fffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // RAM
map(0x304000, 0x30ffff).ram(); // ? seems tile data
map(0x600000, 0x600001).portr("DSW1"); // DSW 1
map(0x600002, 0x600003).portr("DSW2"); // DSW 2
map(0x700000, 0x700001).portr("P1"); // P1
map(0x700002, 0x700003).portr("P2"); // P2
map(0x700004, 0x700005).portr("SYSTEM"); // Coins
map(0x70000c, 0x70000d).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0x800001, 0x800001).w(FUNC(seta2_state::grdians_lockout_w));
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xc00000, 0xc3ffff).ram().w(FUNC(seta2_state::spriteram_w)).share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc50000, 0xc5ffff).ram(); // cleared
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
}
/***************************************************************************
Mobile Suit Gundam EX Revue
***************************************************************************/
READ16_MEMBER(seta2_state::gundamex_eeprom_r)
{
return ((m_eeprom->do_read() & 1)) << 3;
}
WRITE16_MEMBER(seta2_state::gundamex_eeprom_w)
{
m_eeprom->clk_write((data & 0x2) ? ASSERT_LINE : CLEAR_LINE);
m_eeprom->di_write(data & 0x1);
m_eeprom->cs_write((data & 0x4) ? ASSERT_LINE : CLEAR_LINE);
}
void seta2_state::gundamex_map(address_map &map)
{
map(0x000000, 0x1fffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // RAM
map(0x500000, 0x57ffff).rom(); // ROM
map(0x600000, 0x600001).portr("DSW1"); // DSW 1
map(0x600002, 0x600003).portr("DSW2"); // DSW 2
map(0x700000, 0x700001).portr("P1"); // P1
map(0x700002, 0x700003).portr("P2"); // P2
map(0x700004, 0x700005).portr("SYSTEM"); // Coins
map(0x700008, 0x700009).portr("IN0"); // P1
map(0x70000a, 0x70000b).portr("IN1"); // P2
map(0x70000c, 0x70000d).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x800000, 0x800001).w(FUNC(seta2_state::grdians_lockout_w));
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc50000, 0xc5ffff).ram(); // cleared
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
}
/***************************************************************************
Wakakusamonogatari Mahjong Yonshimai
***************************************************************************/
void mj4simai_state::machine_start()
{
seta2_state::machine_start();
save_item(NAME(m_keyboard_row));
}
READ16_MEMBER(seta2_state::mj4simai_p1_r)
{
switch (m_keyboard_row)
{
case 0x01: return ioport("P1_KEY0")->read();
case 0x02: return ioport("P1_KEY1")->read();
case 0x04: return ioport("P1_KEY2")->read();
case 0x08: return ioport("P1_KEY3")->read();
case 0x10: return ioport("P1_KEY4")->read();
default: logerror("p1_r with keyboard_row = %02x\n", m_keyboard_row); return 0xffff;
}
}
READ16_MEMBER(seta2_state::mj4simai_p2_r)
{
switch (m_keyboard_row)
{
case 0x01: return ioport("P2_KEY0")->read();
case 0x02: return ioport("P2_KEY1")->read();
case 0x04: return ioport("P2_KEY2")->read();
case 0x08: return ioport("P2_KEY3")->read();
case 0x10: return ioport("P2_KEY4")->read();
default: logerror("p2_r with keyboard_row = %02x\n", m_keyboard_row); return 0xffff;
}
}
void seta2_state::mj4simai_map(address_map &map)
{
map(0x000000, 0x1fffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // RAM
map(0x600000, 0x600001).r(FUNC(seta2_state::mj4simai_p1_r)); // P1
map(0x600002, 0x600003).r(FUNC(seta2_state::mj4simai_p2_r)); // P2
map(0x600005, 0x600005).lw8("keyboard_row_w", [this](u8 data){ m_keyboard_row = data; } ); // select keyboard row to read
map(0x600006, 0x600007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0x600100, 0x600101).portr("SYSTEM"); //
map(0x600200, 0x600201).nopw(); // Leds? Coins?
map(0x600300, 0x600301).portr("DSW1"); // DSW 1
map(0x600302, 0x600303).portr("DSW2"); // DSW 2
map(0x600300, 0x60030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
}
/***************************************************************************
Kosodate Quiz My Angel
***************************************************************************/
void seta2_state::myangel_map(address_map &map)
{
map(0x000000, 0x1fffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // RAM
map(0x700000, 0x700001).portr("P1"); // P1
map(0x700002, 0x700003).portr("P2"); // P2
map(0x700004, 0x700005).portr("SYSTEM"); // Coins
map(0x700006, 0x700007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0x700200, 0x700201).nopw(); // Leds? Coins?
map(0x700300, 0x700301).portr("DSW1"); // DSW 1
map(0x700302, 0x700303).portr("DSW2"); // DSW 2
map(0x700310, 0x70031f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
}
/***************************************************************************
Kosodate Quiz My Angel 2
***************************************************************************/
void seta2_state::myangel2_map(address_map &map)
{
map(0x000000, 0x1fffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // RAM
map(0x600000, 0x600001).portr("P1"); // P1
map(0x600002, 0x600003).portr("P2"); // P2
map(0x600004, 0x600005).portr("SYSTEM"); // Coins
map(0x600006, 0x600007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0x600200, 0x600201).nopw(); // Leds? Coins?
map(0x600300, 0x600301).portr("DSW1"); // DSW 1
map(0x600302, 0x600303).portr("DSW2"); // DSW 2
map(0x600300, 0x60030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xd00000, 0xd3ffff).ram().share("spriteram"); // Sprites
map(0xd40000, 0xd4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xd60000, 0xd6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
}
/***************************************************************************
Puzzle De Bowling
***************************************************************************/
/* The game checks for a specific value read from the ROM region.
The offset to use is stored in RAM at address 0x20BA16 */
READ16_MEMBER(seta2_state::pzlbowl_protection_r)
{
uint32_t address = (space.read_word(0x20ba16) << 16) | space.read_word(0x20ba18);
return memregion("maincpu")->base()[address - 2];
}
READ8_MEMBER(seta2_state::pzlbowl_coins_r)
{
return ioport("SYSTEM")->read() | (machine().rand() & 0x80 );
}
WRITE8_MEMBER(seta2_state::pzlbowl_coin_counter_w)
{
machine().bookkeeping().coin_counter_w(0,data & 0x10);
machine().bookkeeping().coin_counter_w(1,data & 0x20);
}
void seta2_state::pzlbowl_map(address_map &map)
{
map(0x000000, 0x0fffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // RAM
map(0x400300, 0x400301).portr("DSW1"); // DSW 1
map(0x400302, 0x400303).portr("DSW2"); // DSW 2
map(0x400300, 0x40030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0x500000, 0x500001).portr("P1"); // P1
map(0x500002, 0x500003).portr("P2"); // P2
map(0x500005, 0x500005).rw(FUNC(seta2_state::pzlbowl_coins_r), FUNC(seta2_state::pzlbowl_coin_counter_w)); // Coins + Protection?
map(0x500006, 0x500007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0x700000, 0x700001).r(FUNC(seta2_state::pzlbowl_protection_r)); // Protection
map(0x800000, 0x83ffff).ram().share("spriteram"); // Sprites
map(0x840000, 0x84ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x860000, 0x86003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0x900000, 0x903fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
}
/***************************************************************************
Penguin Bros
***************************************************************************/
void seta2_state::penbros_base_map(address_map &map)
{
map(0x000000, 0x0fffff).rom();
map(0x200000, 0x20ffff).ram();
map(0x210000, 0x21ffff).ram(); // zeroed at startup, then never written again on originals, used on the bootleg
map(0x220000, 0x22ffff).ram(); // zeroed at startup, then never written again
map(0x230000, 0x23ffff).ram(); // zeroed at startup, then never written again on originals, used on the bootleg
map(0x600000, 0x600001).portr("P1");
map(0x600002, 0x600003).portr("P2");
map(0x600004, 0x600005).portr("SYSTEM");
map(0x600005, 0x600005).w(FUNC(seta2_state::pzlbowl_coin_counter_w));
map(0x600006, 0x600007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0xa00000, 0xa03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w));
map(0xb00000, 0xb3ffff).ram().share("spriteram");
map(0xb40000, 0xb4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
}
void seta2_state::penbros_map(address_map &map)
{
penbros_base_map(map);
map(0x300000, 0x30ffff).ram();
map(0x500300, 0x500301).portr("DSW1");
map(0x500302, 0x500303).portr("DSW2");
map(0x500300, 0x50030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff);
map(0xb60000, 0xb6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs");
}
void seta2_state::ablastb_map(address_map &map)
{
penbros_base_map(map);
map(0x508300, 0x508301).portr("DSW1");
map(0x508302, 0x508303).portr("DSW2");
// TODO: Is there samples banking like in the original?
}
/***************************************************************************
Reel'N Quake
***************************************************************************/
WRITE16_MEMBER(seta2_state::reelquak_leds_w)
{
if (ACCESSING_BITS_0_7)
{
// bit 0 - start
// bit 1 - small
// bit 2 - bet
// bit 3 - big
// bit 4 - double up
// bit 5 - collect
// bit 6 - bet cancel
for (int i = 0; i <= 6; i++)
m_leds[i] = BIT(data, i);
}
if (ACCESSING_BITS_8_15)
{
m_dispenser->motor_w(BIT(data, 8)); // ticket dispenser
}
// popmessage("LED %04X", data);
}
WRITE8_MEMBER(seta2_state::reelquak_coin_w)
{
machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin in
machine().bookkeeping().coin_counter_w(1, data & 0x02); // coin in
machine().bookkeeping().coin_counter_w(2, data & 0x04); // pay out
machine().bookkeeping().coin_counter_w(3, data & 0x08); // key in
// data & 0x10); // Sound IRQ Ack.? 1->0
// data & 0x20); // Vblank IRQ.? 1
// popmessage("COIN %04X", data & 0xff);
}
void seta2_state::reelquak_map(address_map &map)
{
map(0x000000, 0x0fffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // RAM
map(0x300000, 0x303fff).ram().share("nvram"); // NVRAM (Battery Backed)
map(0x400000, 0x400001).portr("P1"); // P1
map(0x400002, 0x400003).portr("TICKET"); // Tickets
map(0x400004, 0x400005).portr("SYSTEM"); // Coins
map(0x400006, 0x400007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
map(0x400201, 0x400201).w(FUNC(seta2_state::reelquak_coin_w)); // Coin Counters / IRQ Ack
map(0x400300, 0x400301).portr("DSW1"); // DSW 1
map(0x400302, 0x400303).portr("DSW2"); // DSW 2
map(0x400300, 0x40030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
}
/***************************************************************************
Namco Stars
***************************************************************************/
// To be done:
void seta2_state::namcostr_map(address_map &map)
{
map(0x000000, 0x07ffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // RAM
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc60000, 0xc6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
}
/***************************************************************************
Sammy Outdoor Shooting
***************************************************************************/
WRITE8_MEMBER(seta2_state::samshoot_coin_w)
{
machine().bookkeeping().coin_counter_w(0, data & 0x10);
machine().bookkeeping().coin_counter_w(1, data & 0x20);
// Are these connected? They are set in I/O test
machine().bookkeeping().coin_lockout_w(0,~data & 0x40);
machine().bookkeeping().coin_lockout_w(1,~data & 0x80);
// popmessage("%04x",data);
}
void seta2_state::samshoot_map(address_map &map)
{
map(0x000000, 0x1fffff).rom();
map(0x200000, 0x20ffff).ram();
map(0x300000, 0x30ffff).ram().share("nvram");
map(0x400000, 0x400001).portr("DSW1"); // DSW 1
map(0x400002, 0x400003).portr("BUTTONS"); // Buttons
map(0x400300, 0x40030f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
map(0x500000, 0x500001).portr("GUN1"); // P1
map(0x580000, 0x580001).portr("GUN2"); // P2
map(0x700000, 0x700001).portr("TRIGGER"); // Trigger
map(0x700002, 0x700003).portr("PUMP"); // Pump
map(0x700004, 0x700005).portr("COIN"); // Coins
map(0x700005, 0x700005).w(FUNC(seta2_state::samshoot_coin_w)); // Coins
map(0x700006, 0x700007).r("watchdog", FUNC(watchdog_timer_device::reset16_r)); // Watchdog?
map(0x800000, 0x83ffff).ram().share("spriteram"); // Sprites
map(0x840000, 0x84ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0x860000, 0x86003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0x900000, 0x903fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
}
/***************************************************************************
Star Audition
***************************************************************************/
// Outputs
void staraudi_state::staraudi_debug_outputs()
{
// popmessage("L1: %04X L2: %04X CAM: %04X", m_lamps1, m_lamps2, m_cam);
}
WRITE8_MEMBER(staraudi_state::lamps1_w)
{
COMBINE_DATA(&m_lamps1);
m_leds[0] = BIT(data, 0); // Lamp 1 |
m_leds[1] = BIT(data, 1); // Lamp 2 |- Camera Lamps
m_leds[2] = BIT(data, 2); // Lamp 3 |
// data & 0x08 ); // Degauss
staraudi_debug_outputs();
}
WRITE8_MEMBER(staraudi_state::lamps2_w)
{
COMBINE_DATA(&m_lamps2);
// data & 0x20 ); // ? Always On
m_leds[3] = BIT(data, 6); // 2P Switch Lamp
m_leds[4] = BIT(data, 7); // 1P Switch Lamp
staraudi_debug_outputs();
}
WRITE8_MEMBER(staraudi_state::camera_w)
{
COMBINE_DATA(&m_cam);
// data & 0x01 ); // ? Always On
// data & 0x02 ); // ? Print Test
// data & 0x08 ); // Camera On (Test Mode)
// data & 0x20 ); // ?
staraudi_debug_outputs();
}
// Tile RAM
#define TILE0 (0x7c000)
#define TILERAM(offset) ((uint16_t*)(memregion("sprites")->base() + TILE0 * 8*8 + (offset * 2 / 0x20000) * 2 + ((offset * 2) % 0x20000) / 2 * 8))
READ16_MEMBER(staraudi_state::tileram_r)
{
return *TILERAM(offset);
}
WRITE16_MEMBER(staraudi_state::tileram_w)
{
COMBINE_DATA(TILERAM(offset));
int tile = TILE0 + ((offset * 2) % 0x20000) / (8*2);
for (int i = 0; m_gfxdecode->gfx(i); ++i)
m_gfxdecode->gfx(i)->mark_dirty(tile);
}
void staraudi_state::staraudi_map(address_map &map)
{
map(0x000000, 0x1fffff).rom(); // ROM
map(0x200000, 0x23ffff).ram(); // RAM
map(0x400000, 0x45ffff).rw(FUNC(staraudi_state::tileram_r), FUNC(staraudi_state::tileram_w)).share("tileram"); // Tile RAM
// map(0x500000, 0x53ffff).ram(); // Camera RAM (r8g8)
// map(0x540000, 0x57ffff).ram(); // Camera RAM (00b8)
map(0x500000, 0x57ffff).ram().share("rgbram");
map(0x600001, 0x600001).w(FUNC(staraudi_state::camera_w)); // Camera Outputs
map(0x700000, 0x700001).portr("P1"); // P1
map(0x700002, 0x700003).portr("P2"); // P2
map(0x700004, 0x700005).portr("SYSTEM"); // Coins
map(0x700006, 0x700007).rw("watchdog", FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
map(0x700101, 0x700101).w(FUNC(staraudi_state::lamps1_w)); // Lamps 1
map(0x700180, 0x70018f).rw(m_rtc, FUNC(upd4992_device::read), FUNC(upd4992_device::write)).umask16(0x00ff);
map(0x700201, 0x700201).w(FUNC(staraudi_state::lamps2_w)); // Lamps 2
map(0x700300, 0x700301).portr("DSW1"); // DSW 1
map(0x700302, 0x700303).portr("DSW2"); // DSW 2
map(0x700300, 0x70030f).w(FUNC(staraudi_state::sound_bank_w)); // Samples Banks
map(0x800000, 0x9fffff).rw(m_flash, FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write));
map(0xb00000, 0xb03fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xc00000, 0xc3ffff).ram().share("spriteram"); // Sprites
map(0xc40000, 0xc4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xc50000, 0xc5ffff).ram(); // cleared
map(0xc60000, 0xc6003f).ram().w(FUNC(staraudi_state::vregs_w)).share("vregs"); // Video Registers
}
/***************************************************************************
TelePachi Fever Lion
***************************************************************************/
WRITE8_MEMBER(seta2_state::telpacfl_lamp1_w)
{
for (int i = 0; i <= 7; i++)
m_lamps[i] = BIT(data, i);
// popmessage("LAMP1 %04X", data);
}
WRITE8_MEMBER(seta2_state::telpacfl_lamp2_w)
{
m_lamps[8] = BIT(data, 0); // on/off lamp (throughout)
m_lamps[9] = BIT(data, 1); // bet lamp
m_lamps[10] = BIT(data, 2); // payout lamp
m_dispenser->motor_w( data & 0x08 ); // coin out motor
machine().bookkeeping().coin_counter_w(0, data & 0x10); // coin out counter
// data & 0x20 ); // on credit increase
// popmessage("LAMP2 %04X", data);
}
WRITE8_MEMBER(seta2_state::telpacfl_lockout_w)
{
machine().bookkeeping().coin_counter_w(1, data & 0x02); // 100yen in
machine().bookkeeping().coin_lockout_w(0, ~data & 0x04); // coin blocker
machine().bookkeeping().coin_lockout_w(1, ~data & 0x08); // 100yen blocker
// bits 0x30 ?
// popmessage("LOCK %04X", data);
}
void seta2_state::telpacfl_map(address_map &map)
{
map(0x000000, 0x0fffff).rom(); // ROM
map(0x200000, 0x20ffff).ram(); // RAM
map(0x300000, 0x303fff).ram().share("nvram"); // NVRAM (Battery Backed)
map(0x600000, 0x600001).portr("DSW1"); // DSW 1
map(0x600002, 0x600003).portr("DSW2"); // DSW 2
map(0x700000, 0x700001).portr("COIN"); // Coin
map(0x700002, 0x700003).portr("P1"); // P1 + Dispenser
map(0x700004, 0x700005).portr("SERVICE"); // Service
map(0x700006, 0x700007).portr("UNKNOWN"); // (unused?)
map(0x700009, 0x700009).w(FUNC(seta2_state::telpacfl_lamp1_w)); // Lamps
map(0x70000d, 0x70000d).w(FUNC(seta2_state::telpacfl_lamp2_w)); // ""
map(0x800001, 0x800001).w(FUNC(seta2_state::telpacfl_lockout_w)); // Coin Blockers
map(0x900000, 0x903fff).rw("x1snd", FUNC(x1_010_device::word_r), FUNC(x1_010_device::word_w)); // Sound
map(0xb00000, 0xb3ffff).ram().share("spriteram"); // Sprites
map(0xb40000, 0xb4ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
map(0xb60000, 0xb6003f).ram().w(FUNC(seta2_state::vregs_w)).share("vregs"); // Video Registers
map(0xd00006, 0xd00007).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
// map(0xe00000, 0xe00001).w(FUNC(seta2_state::));
map(0xe00010, 0xe0001f).w(FUNC(seta2_state::sound_bank_w)).umask16(0x00ff); // Samples Banks
}
/***************************************************************************
Funcube series
***************************************************************************/
// Touchscreen
class funcube_touchscreen_device : public device_t,
public device_serial_interface
{
public:
funcube_touchscreen_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ioport_constructor device_input_ports() const override;
auto tx_cb() { return m_tx_cb.bind(); }
protected:
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void tra_complete() override;
virtual void tra_callback() override;
private:
devcb_write_line m_tx_cb;
required_ioport m_x;
required_ioport m_y;
required_ioport m_btn;
uint8_t m_button_state;
int m_serial_pos;
uint8_t m_serial[4];
};
DEFINE_DEVICE_TYPE(FUNCUBE_TOUCHSCREEN, funcube_touchscreen_device, "funcube_touchscreen", "Funcube Touchscreen")
static INPUT_PORTS_START( funcube_touchscreen )
PORT_START("touch_btn")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME( "Touch Screen" )
PORT_START("touch_x")
PORT_BIT( 0xff, 0x00, IPT_LIGHTGUN_X ) PORT_MINMAX(0,0x5c+1) PORT_CROSSHAIR(X, -(1.0 * 0x05d/0x5c), -1.0/0x5c, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(5) PORT_REVERSE
PORT_START("touch_y")
PORT_BIT( 0xff, 0x00, IPT_LIGHTGUN_Y ) PORT_MINMAX(0,0x46+1) PORT_CROSSHAIR(Y, -(0xf0-8.0)/0xf0*0x047/0x46, -1.0/0x46, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(5) PORT_REVERSE
INPUT_PORTS_END
funcube_touchscreen_device::funcube_touchscreen_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, FUNCUBE_TOUCHSCREEN, tag, owner, clock),
device_serial_interface(mconfig, *this),
m_tx_cb(*this),
m_x(*this, "touch_x"),
m_y(*this, "touch_y"),
m_btn(*this, "touch_btn")
{
}
ioport_constructor funcube_touchscreen_device::device_input_ports() const
{
return INPUT_PORTS_NAME(funcube_touchscreen);
}
void funcube_touchscreen_device::device_start()
{
set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1);
set_tra_rate(9600);
m_button_state = 0x00;
emu_timer *tm = timer_alloc(0);
tm->adjust(attotime::from_ticks(1, clock()), 0, attotime::from_ticks(1, clock()));
m_tx_cb.resolve_safe();
save_item(NAME(m_button_state));
save_item(NAME(m_serial_pos));
save_item(NAME(m_serial));
}
void funcube_touchscreen_device::device_reset()
{
m_serial_pos = 0;
memset(m_serial, 0, sizeof(m_serial));
m_tx_cb(1);
}
void funcube_touchscreen_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
if(!id) {
uint8_t button_state = m_btn->read();
if(m_button_state != button_state) {
m_button_state = button_state;
m_serial[0] = button_state ? 0xfe : 0xfd;
m_serial[1] = m_x->read();
m_serial[2] = m_y->read();
m_serial[3] = 0xff;
m_serial_pos = 0;
transmit_register_setup(m_serial[m_serial_pos++]);
}
}
}
void funcube_touchscreen_device::tra_complete()
{
if(m_serial_pos != 4)
transmit_register_setup(m_serial[m_serial_pos++]);
}
void funcube_touchscreen_device::tra_callback()
{
m_tx_cb(transmit_register_get_data_bit());
}
// Bus conversion functions:
// RAM shared with the sub CPU
READ32_MEMBER(funcube_state::nvram_r)
{
uint16_t val = m_nvram[offset];
return ((val & 0xff00) << 8) | (val & 0x00ff);
}
WRITE32_MEMBER(funcube_state::nvram_w)
{
if (ACCESSING_BITS_0_7)
{
m_nvram[offset] = (m_nvram[offset] & 0xff00) | (data & 0x000000ff);
}
if (ACCESSING_BITS_16_23)
{
m_nvram[offset] = (m_nvram[offset] & 0x00ff) | ((data & 0x00ff0000) >> 8);
}
}
// Main CPU
READ32_MEMBER(funcube_state::debug_r)
{
uint32_t ret = ioport("DEBUG")->read();
// This bits let you move the crosshair in the inputs / touch panel test with a joystick
if (!(m_screen->frame_number() % 3))
ret |= 0x3f;
return ret;
}
void funcube_state::funcube_map(address_map &map)
{
map(0x00000000, 0x0007ffff).rom();
map(0x00200000, 0x0020ffff).ram();
map(0x00400000, 0x00400003).r(FUNC(funcube_state::debug_r));
map(0x00400004, 0x00400007).r("watchdog", FUNC(watchdog_timer_device::reset32_r)).nopw();
map(0x00500001, 0x00500001).rw(m_oki, FUNC(okim9810_device::read_status), FUNC(okim9810_device::write_command));
map(0x00500003, 0x00500003).w(m_oki, FUNC(okim9810_device::write_tmp_register));
map(0x00800000, 0x0083ffff).rw(FUNC(funcube_state::spriteram_r), FUNC(funcube_state::spriteram_w)).share("spriteram");
map(0x00840000, 0x0084ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); // Palette
map(0x00860000, 0x0086003f).ram().w(FUNC(funcube_state::vregs_w)).share("vregs");
map(0x00c00000, 0x00c002ff).rw(FUNC(funcube_state::nvram_r), FUNC(funcube_state::nvram_w));
map(0xf0000000, 0xf00001ff).rw("maincpu_onboard", FUNC(mcf5206e_peripheral_device::seta2_coldfire_regs_r), FUNC(mcf5206e_peripheral_device::seta2_coldfire_regs_w)); // technically this can be moved with MBAR
map(0xffffe000, 0xffffffff).ram(); // SRAM
}
void funcube_state::funcube2_map(address_map &map)
{
map(0x00000000, 0x0007ffff).rom();
map(0x00200000, 0x0020ffff).ram();
map(0x00500000, 0x00500003).r(FUNC(funcube_state::debug_r));
map(0x00500004, 0x00500007).r("watchdog", FUNC(watchdog_timer_device::reset32_r)).nopw();
map(0x00600001, 0x00600001).rw(m_oki, FUNC(okim9810_device::read_status), FUNC(okim9810_device::write_command));
map(0x00600003, 0x00600003).w(m_oki, FUNC(okim9810_device::write_tmp_register));
map(0x00800000, 0x0083ffff).rw(FUNC(funcube_state::spriteram_r), FUNC(funcube_state::spriteram_w)).share("spriteram");
map(0x00840000, 0x0084ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0x00860000, 0x0086003f).ram().w(FUNC(funcube_state::vregs_w)).share("vregs");
map(0x00c00000, 0x00c002ff).rw(FUNC(funcube_state::nvram_r), FUNC(funcube_state::nvram_w));
map(0xf0000000, 0xf00001ff).rw("maincpu_onboard", FUNC(mcf5206e_peripheral_device::seta2_coldfire_regs_r), FUNC(mcf5206e_peripheral_device::seta2_coldfire_regs_w)); // technically this can be moved with MBAR
map(0xffffe000, 0xffffffff).ram(); // SRAM
}
// Sub CPU
void funcube_state::funcube_sub_map(address_map &map)
{
map(0x000000, 0x01ffff).rom();
map(0x200000, 0x20017f).ram().share("nvram");
}
// Simulate coin drop through two sensors
#define FUNCUBE_SUB_CPU_CLOCK (XTAL(14'745'600))
READ16_MEMBER(funcube_state::coins_r)
{
uint8_t ret = ioport("SWITCH")->read();
uint8_t coin_bit0 = 1; // active low
uint8_t coin_bit1 = 1;
uint8_t hopper_bit = (m_hopper_motor && !(m_screen->frame_number()%20)) ? 1 : 0;
const uint64_t coin_total_cycles = FUNCUBE_SUB_CPU_CLOCK.value() / (1000/10);
if ( m_coin_start_cycles )
{
uint64_t elapsed = m_sub->total_cycles() - m_coin_start_cycles;
if ( elapsed < coin_total_cycles/2 )
coin_bit0 = 0;
else if ( elapsed < coin_total_cycles )
coin_bit1 = 0;
else
m_coin_start_cycles = 0;
}
else
{
if (!(ret & 1))
m_coin_start_cycles = m_sub->total_cycles();
}
return (ret & ~7) | (hopper_bit << 2) | (coin_bit1 << 1) | coin_bit0;
}
void funcube_state::funcube_debug_outputs()
{
#ifdef MAME_DEBUG
// popmessage("LED: %02x OUT: %02x", (int)*m_funcube_leds, (int)*m_outputs);
#endif
}
WRITE16_MEMBER(funcube_state::leds_w)
{
*m_funcube_leds = data;
m_leds[0] = BIT(~data, 0); // win lamp (red)
m_leds[1] = BIT(~data, 1); // win lamp (green)
// Set in a moving pattern: 0111 -> 1011 -> 1101 -> 1110
m_leds[2] = BIT(~data, 4);
m_leds[3] = BIT(~data, 5);
m_leds[4] = BIT(~data, 6);
m_leds[5] = BIT(~data, 7);
funcube_debug_outputs();
}
READ16_MEMBER(funcube_state::outputs_r)
{
// Bits 1,2,3 read
return *m_outputs;
}
WRITE16_MEMBER(funcube_state::outputs_w)
{
*m_outputs = data;
// Bits 0,1,3 written
// Bit 0: hopper motor
m_hopper_motor = (~data) & 0x01;
// Bit 1: high on pay out
// Bit 3: low after coining up, blinks on pay out
m_leds[6] = BIT(~data, 3);
funcube_debug_outputs();
}
READ16_MEMBER(funcube_state::battery_r)
{
return ioport("BATTERY")->read() ? 0x40 : 0x00;
}
// cabinet linking on sci0
void funcube_state::funcube_sub_io(address_map &map)
{
map(h8_device::PORT_7, h8_device::PORT_7).r(FUNC(funcube_state::coins_r));
map(h8_device::PORT_4, h8_device::PORT_4).r(FUNC(funcube_state::battery_r));
map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(funcube_state::outputs_r), FUNC(funcube_state::outputs_w)).share("outputs");
map(h8_device::PORT_B, h8_device::PORT_B).w(FUNC(funcube_state::leds_w)).share("funcube_leds");
}
void funcube_state::funcube2_sub_io(address_map &map)
{
map(h8_device::PORT_7, h8_device::PORT_7).r(FUNC(funcube_state::coins_r));
map(h8_device::PORT_4, h8_device::PORT_4).noprw(); // unused
map(h8_device::PORT_A, h8_device::PORT_A).rw(FUNC(funcube_state::outputs_r), FUNC(funcube_state::outputs_w)).share("outputs");
map(h8_device::PORT_B, h8_device::PORT_B).w(FUNC(funcube_state::leds_w)).share("funcube_leds");
}
/***************************************************************************
Input Ports
***************************************************************************/
/***************************************************************************
Mobile Suit Gundam EX Revue
***************************************************************************/
static INPUT_PORTS_START( gundamex )
PORT_START("DSW1") // $600000.w
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
PORT_DIPNAME( 0x0006, 0x0006, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:2,3")
PORT_DIPSETTING( 0x0004, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0006, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0002, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW1:4" ) /* Listed as "Unused" */
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, "Freeze" ) PORT_DIPLOCATION("SW1:6") /* Listed as "Unused" */
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, "Show Targets" ) PORT_DIPLOCATION("SW1:7") /* Listed as "Unused" */
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW2") // $600002.w
PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3")
PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0001, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0002, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0003, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 1C_5C ) )
PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:4,5,6")
PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0010, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x0000, "3 Coins/5 Credits" )
PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 2C_5C ) )
PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0018, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_5C ) )
PORT_DIPNAME( 0x0040, 0x0040, "Debug Mode" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1") // $700000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2") // $700002.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM") // $700004.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) //jumper pad
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Language ) ) //jumper pad
PORT_DIPSETTING( 0x0020, DEF_STR( English ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Japanese ) )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN0") // $700008.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN1") // $70000a.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Guardians
***************************************************************************/
static INPUT_PORTS_START( grdians )
PORT_START("DSW1") // $600000.w
PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) // 0
PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) // 1
PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) // 2
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) // 3
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, "Title" ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0008, "Guardians" )
PORT_DIPSETTING( 0x0000, "Denjin Makai II" )
PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:5,6")
PORT_DIPSETTING( 0x0020, "1" )
PORT_DIPSETTING( 0x0030, "2" )
PORT_DIPSETTING( 0x0010, "3" )
PORT_DIPSETTING( 0x0000, "4" )
PORT_SERVICE_DIPLOC( 0x0040, IP_ACTIVE_LOW, "SW1:7" ) /* NOTE: Test mode shows player 3 & 4 controls, but it's a two player game */
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW2") // $600002.w
PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x0002, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0005, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 3C_2C ) )
PORT_DIPSETTING( 0x0001, DEF_STR( 4C_3C ) )
PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0003, DEF_STR( 3C_4C ) )
PORT_DIPSETTING( 0x0007, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x000e, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0006, DEF_STR( 2C_5C ) )
PORT_DIPSETTING( 0x000d, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x000b, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x0009, DEF_STR( 1C_7C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:5,6,7,8")
PORT_DIPSETTING( 0x0020, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0050, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0080, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0040, DEF_STR( 3C_2C ) )
PORT_DIPSETTING( 0x0010, DEF_STR( 4C_3C ) )
PORT_DIPSETTING( 0x00f0, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0030, DEF_STR( 3C_4C ) )
PORT_DIPSETTING( 0x0070, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0060, DEF_STR( 2C_5C ) )
PORT_DIPSETTING( 0x00d0, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x00b0, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x0090, DEF_STR( 1C_7C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1") // $700000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2") // $700002.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM") // $700004.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Wakakusamonogatari Mahjong Yonshimai
***************************************************************************/
static INPUT_PORTS_START( mj4simai )
PORT_START("DSW1") // $600300.w
PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3")
PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0003, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, "Tumo Pin" ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW2") // $600302.w
PORT_DIPNAME( 0x0007, 0x0004, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2,3")
PORT_DIPSETTING( 0x0004, "0" )
PORT_DIPSETTING( 0x0003, "1" )
PORT_DIPSETTING( 0x0002, "2" )
PORT_DIPSETTING( 0x0001, "3" )
PORT_DIPSETTING( 0x0000, "4" )
PORT_DIPSETTING( 0x0007, "5" )
PORT_DIPSETTING( 0x0006, "6" )
PORT_DIPSETTING( 0x0005, "7" )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x0008, DEF_STR( Yes ) )
PORT_DIPNAME( 0x0010, 0x0000, "Select Girl" ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x0010, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_DIPNAME( 0x0020, 0x0000, "Com Put" ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM") // $600100.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1_KEY0") // $600000(0)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_A )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_E )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_I )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_M )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1_KEY1") // $600000(1)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_B )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_F )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_J )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_N )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_BET )
PORT_BIT( 0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("P1_KEY2") // $600000(2)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_C )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_G )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_K )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
PORT_BIT( 0xffe0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1_KEY3") // $600000(3)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_D )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_H )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_L )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1_KEY4") // $600000(4)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )
PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2_KEY0") // $600000(0)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2_KEY1") // $600000(1)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_PLAYER(2)
PORT_BIT( 0xffc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("P2_KEY2") // $600000(2)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
PORT_BIT( 0xffe0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2_KEY3") // $600000(3)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2_KEY4") // $600000(4)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_PLAYER(2)
PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Kosodate Quiz My Angel
***************************************************************************/
static INPUT_PORTS_START( myangel )
PORT_START("DSW1") // $700300.w
PORT_SERVICE_DIPLOC( 0x0001, IP_ACTIVE_LOW, "SW1:1" )
PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0002, "SW1:2" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW1:3" ) /* Listed as "Unused" */
PORT_DIPNAME( 0x0008, 0x0008, "Increase Lives While Playing" ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x0008, DEF_STR( Yes ) )
PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:5,6")
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0030, "3" )
PORT_DIPSETTING( 0x0010, "4" )
PORT_DIPSETTING( 0x0000, "5" )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW2") // $700302.w
PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x0002, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0005, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 3C_2C ) )
PORT_DIPSETTING( 0x0001, DEF_STR( 4C_3C ) )
PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0003, DEF_STR( 3C_4C ) )
PORT_DIPSETTING( 0x0007, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x000e, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0006, DEF_STR( 2C_5C ) )
PORT_DIPSETTING( 0x000d, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x000b, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x0009, DEF_STR( 1C_7C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW2:5" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW2:6" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPNAME( 0x0080, 0x0080, "Push Start To Freeze (Cheat)") PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1") //$700000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2") //$700002.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM") //$700004.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Kosodate Quiz My Angel 2
***************************************************************************/
static INPUT_PORTS_START( myangel2 )
PORT_START("DSW1") //$600300.w
PORT_SERVICE_DIPLOC( 0x0001, IP_ACTIVE_LOW, "SW1:1" )
PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0002, "SW1:2" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW1:3" ) /* Listed as "Unused" */
PORT_DIPNAME( 0x0008, 0x0008, "Increase Lives While Playing" ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x0008, DEF_STR( Yes ) )
PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:5,6")
PORT_DIPSETTING( 0x0020, "2" )
PORT_DIPSETTING( 0x0030, "3" )
PORT_DIPSETTING( 0x0010, "4" )
PORT_DIPSETTING( 0x0000, "5" )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW2") //$600302.w
PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x0002, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0005, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 3C_2C ) )
PORT_DIPSETTING( 0x0001, DEF_STR( 4C_3C ) )
PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0003, DEF_STR( 3C_4C ) )
PORT_DIPSETTING( 0x0007, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x000e, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0006, DEF_STR( 2C_5C ) )
PORT_DIPSETTING( 0x000d, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x000b, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x0009, DEF_STR( 1C_7C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW2:5" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW2:6" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW2:8" ) /* Listed as "Unused" */
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1") //$600000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2") //$600002.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM") //$600004.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Puzzle De Bowling
***************************************************************************/
static INPUT_PORTS_START( pzlbowl )
PORT_START("DSW1") //$400300.w
PORT_SERVICE_DIPLOC( 0x0001, IP_ACTIVE_LOW, "SW1:1" )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0002, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5,6")
PORT_DIPSETTING( 0x0030, DEF_STR( Easiest ) )
PORT_DIPSETTING( 0x0028, DEF_STR( Easier ) )
PORT_DIPSETTING( 0x0020, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0038, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0018, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0010, DEF_STR( Harder ) )
PORT_DIPSETTING( 0x0008, DEF_STR( Very_Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x00c0, 0x00c0, "Winning Rounds (Player VS Player)" ) PORT_DIPLOCATION("SW1:7,8")
PORT_DIPSETTING( 0x0040, "1" )
PORT_DIPSETTING( 0x00c0, "2" ) /* This setting is not defined in the manual */
PORT_DIPSETTING( 0x0080, "3" )
PORT_DIPSETTING( 0x0000, "5" )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW2") //$400302.w
PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x0005, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 3C_2C ) )
// PORT_DIPSETTING( 0x0002, DEF_STR( 1C_1C ) ) /* This setting is not defined in the manual */
PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0003, DEF_STR( 3C_4C ) )
PORT_DIPSETTING( 0x0007, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x000e, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0006, DEF_STR( 2C_5C ) )
PORT_DIPSETTING( 0x000d, DEF_STR( 1C_3C ) )
// PORT_DIPSETTING( 0x0001, DEF_STR( 1C_3C ) ) /* This setting is not defined in the manual */
PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x000b, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x0009, DEF_STR( 1C_7C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x0010, DEF_STR( Yes ) )
PORT_DIPNAME( 0x0020, 0x0020, "Join In" ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x0020, DEF_STR( Yes ) )
PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW2:7" )
PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0000, DEF_STR( English ) )
PORT_DIPSETTING( 0x0080, DEF_STR( Japanese ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1") //$500000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2") //$500002.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM") //$500004.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // unused, test mode shows it
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) // Protection?
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Penguin Bros
***************************************************************************/
static INPUT_PORTS_START( penbros )
PORT_START("DSW1") //$500300.w
PORT_SERVICE_DIPLOC( 0x0001, IP_ACTIVE_LOW, "SW1:1" )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW1:3" )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5,6")
PORT_DIPSETTING( 0x0020, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:7,8")
PORT_DIPSETTING( 0x0080, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0040, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_2C ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW2") //$500302.w
PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0000, "2" )
PORT_DIPSETTING( 0x000c, "3" )
PORT_DIPSETTING( 0x0004, "4" )
PORT_DIPSETTING( 0x0008, "5" )
PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0010, "150k and 500k" )
PORT_DIPSETTING( 0x0030, "200k and 700k" )
PORT_DIPSETTING( 0x0000, "Every 250k" ) // no extra life after the one at 1500k
PORT_DIPSETTING( 0x0020, DEF_STR( None ) )
PORT_DIPNAME( 0x00c0, 0x00c0, "Winning Rounds (Player VS Player)" ) PORT_DIPLOCATION("SW2:7,8")
PORT_DIPSETTING( 0x00c0, "2" )
PORT_DIPSETTING( 0x0040, "3" )
PORT_DIPSETTING( 0x0080, "4" )
PORT_DIPSETTING( 0x0000, "5" )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1") //$600000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Player 1 button 3 is unused */
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2") //$600002.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Player 2 button 3 is unused */
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM") //$600004.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // unused, test mode shows it
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_CODE(KEYCODE_F1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Reel'N Quake
***************************************************************************/
static INPUT_PORTS_START( reelquak )
PORT_START("DSW1") // $400300.w
PORT_DIPNAME( 0x0001, 0x0001, "Game Style" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Standard ) )
PORT_DIPSETTING( 0x0000, "Redemption" )
PORT_DIPNAME( 0x000e, 0x000e, "Key-In Credits" ) PORT_DIPLOCATION("SW1:2,3,4")
PORT_DIPSETTING( 0x000c, "1 Turn / 2 Credits" )
PORT_DIPSETTING( 0x000a, "1 Turn / 3 Credits" )
PORT_DIPSETTING( 0x0008, "1 Turn / 5 Credits" )
PORT_DIPSETTING( 0x000e, "1 Turn / 10 Credits" )
PORT_DIPSETTING( 0x0006, "1 Turn / 20 Credits" )
PORT_DIPSETTING( 0x0004, "1 Turn / 25 Credits" )
PORT_DIPSETTING( 0x0002, "1 Turn / 50 Credits" )
PORT_DIPSETTING( 0x0000, "1 Turn / 100 Credits" )
PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5,6")
PORT_DIPSETTING( 0x0030, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0010, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0000, "1 Coin/10 Credits" )
PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:7,8") // bit 7 tested according to game style
PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0080, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0040, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0000, "1 Coin/10 Credits" )
PORT_START("DSW2") // $400302.w
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1") // used
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START("P1") // $400001.b
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) // bet cancel
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) // collect
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) // double up
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Big") // big
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_BET ) // bet
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME("Small") // small
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) // start
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("TICKET") // $400003.b
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("dispenser", ticket_dispenser_device, line_r) // ticket sensor
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_NAME("Knock Down") // knock down
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Ticket Clear") // ticket clear
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Ticket Resume") // ticket resume
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key in
PORT_SERVICE_NO_TOGGLE(0x0080, IP_ACTIVE_LOW ) // test mode
PORT_START("SYSTEM") // $400005.b
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) // coin a
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // coin b
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // diagnostic
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Endless Riches
***************************************************************************/
static INPUT_PORTS_START( endrichs )
PORT_INCLUDE(reelquak)
PORT_MODIFY("DSW1") // $400300.w
PORT_DIPNAME( 0x0001, 0x0001, "Payout Style" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0001, "Normal Payout" )
PORT_DIPSETTING( 0x0000, "Ticket Payout" ) // Ticket Printer?
PORT_MODIFY("DSW2") // $400302.w
PORT_DIPUNUSED_DIPLOC( 0x0001, IP_ACTIVE_LOW, "SW2:1" ) // DSW2 unpopulated
PORT_DIPUNUSED_DIPLOC( 0x0002, IP_ACTIVE_LOW, "SW2:2" )
PORT_DIPUNUSED_DIPLOC( 0x0004, IP_ACTIVE_LOW, "SW2:3" )
PORT_DIPUNUSED_DIPLOC( 0x0008, IP_ACTIVE_LOW, "SW2:4" )
PORT_DIPUNUSED_DIPLOC( 0x0010, IP_ACTIVE_LOW, "SW2:5" )
PORT_DIPUNUSED_DIPLOC( 0x0020, IP_ACTIVE_LOW, "SW2:6" )
PORT_DIPUNUSED_DIPLOC( 0x0040, IP_ACTIVE_LOW, "SW2:7" )
PORT_DIPUNUSED_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW2:8" )
INPUT_PORTS_END
/***************************************************************************
Star Audition
***************************************************************************/
// To activate ROM HACK items, use the debugger memory viewer:
// patch offsets 1E60,1E62,1E64 of the ':maincpu' region with 4E71
static INPUT_PORTS_START( staraudi )
PORT_START("DSW1") // $700300.w
PORT_DIPUNKNOWN_DIPLOC(0x0001, IP_ACTIVE_LOW, "SW1:1" )
PORT_DIPNAME( 0x0002, 0x0002, "Monitor Sync (ROM HACK)" ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPUNKNOWN_DIPLOC(0x0004, IP_ACTIVE_LOW, "SW1:3" )
PORT_DIPUNKNOWN_DIPLOC(0x0008, IP_ACTIVE_LOW, "SW1:4" )
PORT_DIPNAME( 0x0010, 0x0010, "Show Camera Variables" ) PORT_DIPLOCATION("SW1:5") // camera test in service mode
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0000, "Parallel/Serial" ) PORT_DIPLOCATION("SW1:6") // activates parallel / serial reading (ERROR if not active)
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0020, DEF_STR( On ) )
PORT_DIPUNKNOWN_DIPLOC(0x0040, IP_ACTIVE_LOW, "SW1:7" )
PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" ) // service mode
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW2") // $700302.w
PORT_DIPUNKNOWN_DIPLOC(0x0001, IP_ACTIVE_LOW, "SW2:1" ) // ?
PORT_DIPUNKNOWN_DIPLOC(0x0002, IP_ACTIVE_LOW, "SW2:2" )
PORT_DIPUNKNOWN_DIPLOC(0x0004, IP_ACTIVE_LOW, "SW2:3" )
PORT_DIPUNKNOWN_DIPLOC(0x0008, IP_ACTIVE_LOW, "SW2:4" )
PORT_DIPUNKNOWN_DIPLOC(0x0010, IP_ACTIVE_LOW, "SW2:5" )
PORT_DIPUNKNOWN_DIPLOC(0x0020, IP_ACTIVE_LOW, "SW2:6" )
PORT_DIPNAME( 0x0040, 0x0040, "Show Game Variables (ROM HACK)" ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, "? (ROM HACK)" ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P1") // $700000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("Camera Variables? (Cheat)")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("Flip Screen / Monitor Sync (Cheat)") // keep pressed during boot / press together with up
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("Reset Monitor Sync (Cheat)")
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2") // $700002.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("Slow Motion (Cheat)")
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("Pause (Cheat)") // something in monitor sync menu too
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) // unused?
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM") // $700004.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Degauss")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service coin
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Reset")
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE4 ) // unused?
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START2 ) // something (flash activity)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_START3 ) // unused?
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_START4 ) // unused?
INPUT_PORTS_END
/***************************************************************************
Sammy Outdoor Shooting
***************************************************************************/
static INPUT_PORTS_START( deerhunt )
PORT_START("DSW1") // $400000.w
PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3")
PORT_DIPSETTING( 0x0005, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0006, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0003, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0002, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0001, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:4,5,6")
PORT_DIPSETTING( 0x0028, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0030, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0018, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0010, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x0040, 0x0040, "Discount To Continue" ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW2") // fffd0a.w
PORT_DIPNAME( 0x0001, 0x0001, "Vert. Flip Screen" ) PORT_DIPLOCATION("SW2:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, "Horiz. Flip Screen" ) PORT_DIPLOCATION("SW2:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0004, DEF_STR( On ) )
PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:4,5")
PORT_DIPSETTING( 0x0010, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0018, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0008, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x0020, 0x0020, "Blood Color" ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x0020, "Red" )
PORT_DIPSETTING( 0x0000, "Yellow" )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, "3" )
PORT_DIPSETTING( 0x0000, "4" )
PORT_DIPNAME( 0x0080, 0x0080, "Gun Type" ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, "Pump Action" )
PORT_DIPSETTING( 0x0000, "Hand Gun" )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("GUN1") // $500000
PORT_BIT( 0x00ff, 0x0080, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1, 0, 0) PORT_MINMAX(0x0025,0x00c5) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_BIT( 0xff00, 0x8000, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1, 0, 0) PORT_MINMAX(0x0800,0xf800) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_START("GUN2") // $580000.b
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) // P2 gun, read but not used
PORT_START("TRIGGER") // $700000
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_CUSTOM ) // trigger
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xff3f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("PUMP") // $700003.b
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_CUSTOM ) // pump
PORT_BIT( 0xffbf, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("COIN") // $700005.b
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("BUTTONS") // $400002
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) // trigger
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) // pump
PORT_BIT( 0xfffc, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( turkhunt )
PORT_INCLUDE(deerhunt)
PORT_MODIFY("DSW2") // fffd0a.w
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, "2" )
PORT_DIPSETTING( 0x0000, "3" )
INPUT_PORTS_END
static INPUT_PORTS_START( wschamp )
PORT_INCLUDE(deerhunt)
PORT_MODIFY("DSW1") // $400000.w
PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4")
PORT_DIPSETTING( 0x0009, "4 Coins Start, 4 Coins Continue" )
PORT_DIPSETTING( 0x0008, "4 Coins Start, 3 Coins Continue" )
PORT_DIPSETTING( 0x0007, "4 Coins Start, 2 Coins Continue" )
PORT_DIPSETTING( 0x0006, "4 Coins Start, 1 Coin Continue" )
PORT_DIPSETTING( 0x000c, "3 Coins Start, 3 Coins Continue" )
PORT_DIPSETTING( 0x000b, "3 Coins Start, 2 Coins Continue" )
PORT_DIPSETTING( 0x000a, "3 Coins Start, 1 Coin Continue" )
PORT_DIPSETTING( 0x000e, "2 Coins Start, 2 Coins Continue" )
PORT_DIPSETTING( 0x000d, "2 Coins Start, 1 Coin Continue" )
PORT_DIPSETTING( 0x000f, "1 Coin Start, 1 Coin Continue" )
PORT_DIPSETTING( 0x0005, "1 Coin 2 Credits, 1 Credit Start & Continue" )
PORT_DIPSETTING( 0x0004, "1 Coin 3 Credits, 1 Credit Start & Continue" )
PORT_DIPSETTING( 0x0003, "1 Coin 4 Credits, 1 Credit Start & Continue" )
PORT_DIPSETTING( 0x0002, "1 Coin 5 Credits, 1 Credit Start & Continue" )
PORT_DIPSETTING( 0x0001, "1 Coin 6 Credits, 1 Credit Start & Continue" )
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW1:5" )
PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW1:6" )
PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW1:7" )
PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("DSW2") // fffd0a.w
PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW2:6" )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, "2" )
PORT_DIPSETTING( 0x0000, "3" )
PORT_MODIFY("GUN2") // $580000
PORT_BIT( 0x00ff, 0x0080, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1, 0, 0) PORT_MINMAX(0x0025,0x00c5) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_BIT( 0xff00, 0x8000, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1, 0, 0) PORT_MINMAX(0x0800,0xf800) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_MODIFY("TRIGGER") // $700000
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_CUSTOM ) // trigger P2
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_CUSTOM ) // trigger P1
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xff1f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("PUMP") // $700003.b
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_CUSTOM ) // pump P2
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_CUSTOM ) // pump P1
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0xff1f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("COIN") // $700005.b
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("BUTTONS") // $400002
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) // trigger P1
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) // pump P1
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // trigger P2
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // pump P2
PORT_BIT( 0xffcc, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( trophyh )
PORT_INCLUDE(wschamp)
PORT_MODIFY("DSW2") // fffd0a.w
PORT_DIPNAME( 0x0020, 0x0020, "Blood Color" ) PORT_DIPLOCATION("SW2:6") /* WSChamp doesn't use Blood Color, so add it back in */
PORT_DIPSETTING( 0x0020, "Red" )
PORT_DIPSETTING( 0x0000, "Yellow" )
INPUT_PORTS_END
static INPUT_PORTS_START( trophyht )
PORT_INCLUDE(wschamp)
PORT_MODIFY("DSW2") // fffd0a.w
PORT_DIPNAME( 0x0020, 0x0020, "Blood Color" ) PORT_DIPLOCATION("SW2:6") /* WSChamp doesn't use Blood Color, so add it back in */
PORT_DIPSETTING( 0x0020, "Red" )
PORT_DIPSETTING( 0x0000, "Yellow" )
PORT_DIPNAME( 0x0080, 0x0000, "Gun Type (Leave on Hand Gun)" ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, "Pump Action" )
PORT_DIPSETTING( 0x0000, "Hand Gun" )
PORT_MODIFY("TRIGGER") // $700000
PORT_BIT( 0xff3f, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PCB only allows for two 4 pin gun connections - trigger p1
PORT_MODIFY("PUMP") // $700003.b
PORT_BIT( 0xff3f, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PCB only allows for two 4 pin gun connections - trigger p2
PORT_MODIFY("BUTTONS") // $400002
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) // trigger P1
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // trigger P2
PORT_BIT( 0xfffc, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
TelePachi Fever Lion
***************************************************************************/
static INPUT_PORTS_START( telpacfl )
PORT_START("DSW1") // $600001.b ($200020.b)
PORT_DIPNAME( 0x0001, 0x0001, "Clear NVRAM" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, "Use Medal Sensor" ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x0002, DEF_STR( Yes ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") // used
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0008, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5") // read but unsed?
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, "Force Hopper?" ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, "Freeze Screen" ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START("DSW2") // $600003.b ($200021.b)
PORT_DIPNAME( 0x000f, 0x000f, "Bonus Multiplier? (Low Hex Digit)" ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x000f, "0" )
PORT_DIPSETTING( 0x000e, "1" )
PORT_DIPSETTING( 0x000d, "2" )
PORT_DIPSETTING( 0x000c, "3" )
PORT_DIPSETTING( 0x000b, "4" )
PORT_DIPSETTING( 0x000a, "5" )
PORT_DIPSETTING( 0x0009, "6" )
PORT_DIPSETTING( 0x0008, "7" )
PORT_DIPSETTING( 0x0007, "8" )
PORT_DIPSETTING( 0x0006, "9" )
PORT_DIPSETTING( 0x0005, "A" )
PORT_DIPSETTING( 0x0004, "B" )
PORT_DIPSETTING( 0x0003, "C" )
PORT_DIPSETTING( 0x0002, "D" )
PORT_DIPSETTING( 0x0001, "E" )
PORT_DIPSETTING( 0x0000, "F" )
PORT_DIPNAME( 0x0070, 0x0070, "Bonus Multiplier? (High Hex Digit)" ) PORT_DIPLOCATION("SW2:5,6,7")
PORT_DIPSETTING( 0x0070, "0" )
PORT_DIPSETTING( 0x0060, "1" )
PORT_DIPSETTING( 0x0050, "2" )
PORT_DIPSETTING( 0x0040, "3" )
PORT_DIPSETTING( 0x0030, "4" )
PORT_DIPSETTING( 0x0020, "5" )
PORT_DIPSETTING( 0x0010, "6" )
PORT_DIPSETTING( 0x0000, "7" )
PORT_DIPNAME( 0x0080, 0x0080, "Use Bonus Multiplier?" ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( No ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
PORT_START("COIN") // $700000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_OTHER ) // coin1 connection
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Reset") // reset switch (clear errors, play sound in sound test)
PORT_BIT( 0x0008, IP_ACTIVE_HIGH,IPT_OTHER ) // empty switch (out of medals error when low i.e. メダル切れ)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_OTHER ) // coin2 connection
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_OTHER ) // coin3 connection
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_OTHER ) // coin4 connection
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay out switch
PORT_START("P1") // $700002.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet") // bet switch (converts credits into balls)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_DOOR ) // door switch
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("dispenser", ticket_dispenser_device, line_r) // coin out switch (medals jam error when stuck i.e. メダルづまり)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0080, IP_ACTIVE_HIGH,IPT_BUTTON2 ) PORT_NAME("Stop") // stop switch (active high)
PORT_START("SERVICE") // $700004.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) // coin in switch
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // 100yen in switch
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service switch (next item in service mode)
PORT_SERVICE_NO_TOGGLE(0x0008, IP_ACTIVE_LOW ) // test switch
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_OTHER ) // (freezes the game if high, eventually triggering the watchdog)
PORT_START("UNKNOWN") // $700006.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) // -
PORT_START("KNOB") // $fffd0a (parallel port read)
PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_MINMAX(0,0xff) PORT_SENSITIVITY(15) PORT_KEYDELTA(15) PORT_CENTERDELTA(0) PORT_CODE_DEC(KEYCODE_LEFT) PORT_CODE_INC(KEYCODE_RIGHT)
INPUT_PORTS_END
/***************************************************************************
Funcube series
***************************************************************************/
static INPUT_PORTS_START( funcube )
PORT_START("SWITCH") // c00030.l
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) // coin solenoid 1
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) // coin solenoid 2
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) // hopper sensor
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) // game select
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME( "Reset Key" )
PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
PORT_START("BATTERY")
PORT_DIPNAME( 0x10, 0x10, "Battery" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_START("DEBUG")
// 500002.w
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
// 500000.w
PORT_DIPNAME( 0x00010000, 0x00000000, "Debug 0" )
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00010000, DEF_STR( On ) )
PORT_DIPNAME( 0x00020000, 0x00000000, "Debug 1" )
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00020000, DEF_STR( On ) )
PORT_DIPNAME( 0x00040000, 0x00000000, "Debug 2" ) // Touch-Screen
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00040000, DEF_STR( On ) )
PORT_DIPNAME( 0x00080000, 0x00000000, "Debug 3" )
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00080000, DEF_STR( On ) )
PORT_DIPNAME( 0x00100000, 0x00000000, "Debug 4" )
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00100000, DEF_STR( On ) )
PORT_DIPNAME( 0x00200000, 0x00000000, "Debug 5" )
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00200000, DEF_STR( On ) )
PORT_DIPNAME( 0x00400000, 0x00000000, "Debug 6" )
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00400000, DEF_STR( On ) )
PORT_DIPNAME( 0x00800000, 0x00000000, "Debug 7" )
PORT_DIPSETTING( 0x00000000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00800000, DEF_STR( On ) )
INPUT_PORTS_END
/***************************************************************************
Graphics Layouts
***************************************************************************/
static const gfx_layout tile_layout =
{
8,8,
RGN_FRAC(1,1),
8,
{ STEP8(7*8, -8) },
{ STEP8(0, 1) },
{ STEP8(0, 8*8) },
8*8*8
};
/* Tiles are 8bpp, but the hardware is additionally able to discard
some bitplanes and use the low 4 bits only, or the high 4 bits only */
static GFXDECODE_START( gfx_seta2 )
GFXDECODE_ENTRY( "sprites", 0, tile_layout, 0, 0x8000/16 ) // 8bpp, but 4bpp color granularity
GFXDECODE_END
/***************************************************************************
Machine Drivers
***************************************************************************/
INTERRUPT_GEN_MEMBER(seta2_state::seta2_interrupt)
{
/* VBlank is connected to INT0 (external interrupts pin 0) */
downcast<tmp68301_device &>(*m_maincpu).external_interrupt_0();
}
INTERRUPT_GEN_MEMBER(seta2_state::samshoot_interrupt)
{
downcast<tmp68301_device &>(*m_maincpu).external_interrupt_2(); // to do: hook up x1-10 interrupts
}
void seta2_state::seta2(machine_config &config)
{
TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::mj4simai_map);
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt));
WATCHDOG_TIMER(config, "watchdog");
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500));
m_screen->set_size(0x200, 0x100);
m_screen->set_visarea(0x00, 0x180-1, 0x00, 0xf0-1);
m_screen->set_screen_update(FUNC(seta2_state::screen_update));
m_screen->screen_vblank().set(FUNC(seta2_state::screen_vblank));
m_screen->set_palette(m_palette);
//m_screen->set_video_attributes(VIDEO_UPDATE_SCANLINE);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_seta2);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x8000+0xf0); // extra 0xf0 because we might draw 256-color object with 16-color granularity
// sound hardware
SPEAKER(config, "mono").front_center();
x1_010_device &x1snd(X1_010(config, "x1snd", XTAL(50'000'000)/3)); // clock?
x1snd.add_route(ALL_OUTPUTS, "mono", 1.0);
x1snd.set_addrmap(0, &seta2_state::x1_map);
}
void seta2_state::gundamex(machine_config &config)
{
seta2(config);
m_maincpu->set_clock(XTAL(32'530'470)/2); // verified
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::gundamex_map);
downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_r));
downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::gundamex_eeprom_w));
EEPROM_93C46_16BIT(config, "eeprom");
// video hardware
m_screen->set_visarea(0x00, 0x180-1, 0x000, 0x0e0-1);
subdevice<x1_010_device>("x1snd")->set_clock(XTAL(32'530'470)/2); // verified; reference : https://youtu.be/6f-znVzcrmg
}
void seta2_state::grdians(machine_config &config)
{
seta2(config);
m_maincpu->set_clock(XTAL(32'530'470)/2); // verified
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::grdians_map);
// video hardware
m_screen->set_visarea(0x00, 0x130-1, 0x00, 0xe8 -1);
subdevice<x1_010_device>("x1snd")->set_clock(XTAL(32'530'470)/2); // verified; reference : https://youtu.be/Ung9XeLisV0
}
void seta2_state::myangel(machine_config &config)
{
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::myangel_map);
// video hardware
m_screen->set_visarea(0, 0x178-1, 0x00, 0xf0-1);
}
void seta2_state::myangel2(machine_config &config)
{
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::myangel2_map);
// video hardware
m_screen->set_visarea(0, 0x178-1, 0x00, 0xf0-1);
}
void seta2_state::pzlbowl(machine_config &config)
{
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::pzlbowl_map);
// video hardware
m_screen->set_visarea(0x00, 0x180-1, 0x00, 0xf0-1);
}
void seta2_state::penbros(machine_config &config)
{
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::penbros_map);
// video hardware
m_screen->set_visarea(0, 0x140-1, 0x00, 0xe0-1);
}
void seta2_state::ablastb(machine_config &config)
{
penbros(config);
M68000(config.replace(), m_maincpu, XTAL(16'000'000)); // TMP68HC000P-16
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::ablastb_map);
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::irq2_line_hold));
}
void seta2_state::reelquak(machine_config &config)
{
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::reelquak_map);
downcast<tmp68301_device &>(*m_maincpu).out_parallel_callback().set(FUNC(seta2_state::reelquak_leds_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
TICKET_DISPENSER(config, m_dispenser, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
m_screen->set_visarea(0x00, 0x140-1, 0x000, 0x0f0-1);
}
void seta2_state::samshoot(machine_config &config)
{
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::samshoot_map);
m_maincpu->set_periodic_int(FUNC(seta2_state::samshoot_interrupt), attotime::from_hz(60));
downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("DSW2");
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
m_screen->set_visarea(0x00, 0x140-1, 0x000, 0x0f0-1);
}
void staraudi_state::staraudi(machine_config &config)
{
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &staraudi_state::staraudi_map);
SHARP_LH28F016S_16BIT(config, "flash");
UPD4992(config, m_rtc);
// video hardware
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
m_screen->set_visarea(0x00, 0x140-1, 0x000, 0x0f0-1);
m_gfxdecode->set_info(gfx_seta2);
}
void seta2_state::telpacfl(machine_config &config)
{
seta2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::telpacfl_map);
downcast<tmp68301_device &>(*m_maincpu).in_parallel_callback().set_ioport("KNOB");
EEPROM_93C46_16BIT(config, "eeprom"); // not hooked up, seems unused
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
HOPPER(config, m_dispenser, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
// video hardware
m_screen->set_visarea(0x0, 0x180-1, 0x00, 0xf0-1); // still off by 1 because of different CRTC regs?
}
/***************************************************************************
Funcube series
***************************************************************************/
TIMER_DEVICE_CALLBACK_MEMBER(funcube_state::funcube_interrupt)
{
int scanline = param;
if(scanline == 368)
m_maincpu->set_input_line(1, HOLD_LINE);
if(scanline == 0)
m_maincpu->set_input_line(2, HOLD_LINE);
}
void funcube_state::machine_start()
{
seta2_state::machine_start();
save_item(NAME(m_coin_start_cycles));
save_item(NAME(m_hopper_motor));
}
void funcube_state::machine_reset()
{
m_coin_start_cycles = 0;
m_hopper_motor = 0;
}
void funcube_state::funcube(machine_config &config)
{
MCF5206E(config, m_maincpu, XTAL(25'447'000));
m_maincpu->set_addrmap(AS_PROGRAM, &funcube_state::funcube_map);
TIMER(config, "scantimer").configure_scanline(FUNC(funcube_state::funcube_interrupt), "screen", 0, 1);
H83007(config, m_sub, FUNCUBE_SUB_CPU_CLOCK);
m_sub->set_addrmap(AS_PROGRAM, &funcube_state::funcube_sub_map);
m_sub->set_addrmap(AS_IO, &funcube_state::funcube_sub_io);
MCF5206E_PERIPHERAL(config, "maincpu_onboard", 0);
FUNCUBE_TOUCHSCREEN(config, "touchscreen", 200).tx_cb().set(":sub:sci1", FUNC(h8_sci_device::rx_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
WATCHDOG_TIMER(config, "watchdog");
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
m_screen->set_size(0x200, 0x200);
m_screen->set_visarea(0x0+1, 0x140-1+1, 0x00, 0xf0-1);
m_screen->set_screen_update(FUNC(funcube_state::screen_update));
m_screen->screen_vblank().set(FUNC(funcube_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_seta2);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x8000+0xf0); // extra 0xf0 because we might draw 256-color object with 16-color granularity
// sound hardware
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
OKIM9810(config, m_oki, XTAL(4'096'000));
m_oki->add_route(0, "lspeaker", 0.80);
m_oki->add_route(1, "rspeaker", 0.80);
}
void funcube_state::funcube2(machine_config &config)
{
funcube(config);
m_maincpu->set_addrmap(AS_PROGRAM, &funcube_state::funcube2_map);
m_sub->set_addrmap(AS_IO, &funcube_state::funcube2_sub_io);
// video hardware
m_screen->set_visarea(0x0, 0x140-1, 0x00, 0xf0-1);
}
void funcube_state::funcube3(machine_config &config)
{
funcube2(config);
// video hardware
m_screen->set_visarea(0x0, 0x140-1, 0x00, 0xf0-1);
}
void seta2_state::namcostr(machine_config &config)
{
TMP68301(config, m_maincpu, XTAL(50'000'000)/3); // !! TMP68301 !!
m_maincpu->set_addrmap(AS_PROGRAM, &seta2_state::namcostr_map);
m_maincpu->set_vblank_int("screen", FUNC(seta2_state::seta2_interrupt));
// does this have a ticket dispenser?
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
m_screen->set_size(0x200, 0x200);
m_screen->set_visarea(0x40, 0x1c0-1, 0x00, 0xf0-1);
m_screen->set_screen_update(FUNC(seta2_state::screen_update));
m_screen->screen_vblank().set(FUNC(seta2_state::screen_vblank));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_seta2);
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x8000+0xf0); // extra 0xf0 because we might draw 256-color object with 16-color granularity
// sound hardware
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
OKIM9810(config, m_oki, XTAL(4'096'000));
m_oki->add_route(0, "lspeaker", 0.80);
m_oki->add_route(1, "rspeaker", 0.80);
}
/***************************************************************************
ROMs Loading
***************************************************************************/
/***************************************************************************
FUNCUBE
EVA2E PCB
It's the same PCB as Namco Stars (P0-140B). It's a lot more complicated to dump
than the others because there are several surface mounted flash ROMs spread across
multiple daughterboards instead of simple socketed 32M DIP42 mask roms all on one PCB.
***************************************************************************/
ROM_START( funcube )
ROM_REGION( 0x80000, "maincpu", 0 ) // XCF5206 Code
ROM_LOAD( "fcu1_prg0-f.u08", 0x00000, 0x80000, CRC(57f4f340) SHA1(436fc66409b254aba68ae33fc994bc270ce803a6) )
ROM_REGION( 0x20000, "sub", 0 ) // H8/3007 Code
ROM_LOAD( "fcu_0_iopr-0b.1b", 0x00000, 0x20000, CRC(87e3690f) SHA1(1b9dc573de31543884678df2dba2d6a74d6a2496) )
ROM_REGION( 0x800000, "sprites", 0 )
ROM_LOAD32_BYTE( "fcu1_obj-0a.u12", 0x000000, 0x200000, CRC(908b6baf) SHA1(cb5aa8c9b16abb17d8cc16d0d3b2f690a48ee503) )
ROM_LOAD32_BYTE( "fcu1_obj-0a.u13", 0x000001, 0x200000, CRC(8c31ca21) SHA1(e497ab1d7d30b41928a0c3db1ea7c3420376ad8c) )
ROM_LOAD32_BYTE( "fcu1_obj-0a.u14", 0x000002, 0x200000, CRC(4298d599) SHA1(d245206bc78de5f17da85ae6063b662cf9cf67aa) )
ROM_LOAD32_BYTE( "fcu1_obj-0a.u15", 0x000003, 0x200000, CRC(0669c78e) SHA1(0158fc4f90efa12d795b97873b8646c352864c69) )
ROM_REGION( 0x1000000, "oki", ROMREGION_ERASE00 )
ROM_LOAD( "fcu1_snd-0a.u40", 0x000000, 0x200000, CRC(448539bc) SHA1(9e53bd5e29d1a88bf634e58bfeebccd3a1c2d866) )
ROM_END
/***************************************************************************
FUNCUBE (BET) Series PCB for chapters 2 through 5
PCB Number: B0-006B (also known as EVA3_A system and is non-JAMMA)
+------------------------------------------------+
|+--+ S +---+ +---+ CN5 |
|| | W | | | | CN6?|
|| | 4 | U | | U | |
|| | | 4 | | 4 | +---+ CN2?|
|| | | 2 | | 3 | |DX | |
|| | | | | | |102| |
||C | | | | | +---+ |
||N | +---+ +---+ |
||4 | |
|| | +----------+ M1 |
|| | M3 | | C |
|| | | NEC | M1 N |
|| | M3 | DX-101 | 3 |
|| | | | |
|| | | | 50MHz |
|+--+ +----------+ |
| PIC 25.447MHz +-----------+ |
| CN7 | U47 | |
| +-----------+ |
| +-----------+ +---+ +---+ D |
| | U3 | |OKI| |DX | S |
| M2 +-----------+ | | |102| W |
| +---+ +---+ 1 |
| ispLSI2032 |
| M1 +---+ |
| +----------+ |IDT| +--+|
| | | C | | | ||
| C | ColdFire | N +---+ | ||
| N M2 | XCF5206E | 8 | ||
| 1 | | +---+ |C ||
| | | |H8 | |N ||
| M1 +----------+ +---+ D |9 ||
| 14.7456MHz S | ||
| +-----------+W | ||
| SW1 BAT1 | U49 |2 +--+|
| +-----------+ |
+------------------------------------------------+
CPU: ColdFire XCF5206EFT54 (160 Pin PQFP)
Hitachi H8/3007 (64130007F20) used for touch screen I/O
Video: NEC DX-101 (240 Pin PQFP)
NEC DX-102 (52 Pin PQFP x2)
Sound: OKI MSM9810B 8-Channel Mixing ADPCM Type Voice Synthesis LSI
OSC: 50MHz, 25.447MHz & 14.7456MHz
Other: Lattice ispLSI2032 - stamped "EVA3A"
BAT1 - CR2032 3Volt
ColdFire XCF5206EFT54:
68K/ColdFire V2 core family
8K internal SRAM
54MHz (max) Bus Frequency
32bit External Bus Width
2 UART Serial Interfaces
2 Timer Channels
PIC - PIC12C508 MCU used for security
Labeled FC21A for Funcube 2
Labeled FC41A for Funcube 4
Ram M1 are Toshiba TC55257DFL-70L
Ram M2 are NEC D43001GU-70L
Ram M3 are ISSI IS62C1024L-70Q
IDT - IDT 7130 64-pin TQFP High-speed 1K x 8 Dual-Port Static RAM
CN1 - Unused 64 pin double row connecter
CN2? 2x2 connecter
CN3 - Unused 50 pin double row connecter
CN4 - 96 pin triple row connecter
CN5 - 2x3 pin connecter
CN6? 3x3 connecter
CN7 - Unused 20 pin connecter
CN8 - 8 pin single row connecter
CN9 - 40 pin double row connecter
DSW1 - 8 position dipswitch
DSW2 - 2 position dipswitch
SW1 - Pushbutton
SW4 - Single position slider switch
U3 - Is a 27C4002 EPROM
U49 - Is a 27C1001 EPROM
U42, U43 & U47 are mask ROMs read as 27C322
The same H8/3007 code "FC21 IOPR-0" at U49 is used for FUNCUBE 2,3,4 & 5
***************************************************************************/
ROM_START( funcube2 )
ROM_REGION( 0x80000, "maincpu", 0 ) // XCF5206 Code
ROM_LOAD( "fc21_prg-0b.u3", 0x00000, 0x80000, CRC(add1c8a6) SHA1(bf91518da659098a4bad4e756533525fcc910570) )
ROM_REGION( 0x20000, "sub", 0 ) // H8/3007 Code
ROM_LOAD( "fc21_iopr-0.u49", 0x00000, 0x20000, CRC(314555ef) SHA1(b17e3926c8ef7f599856c198c330d2051aae13ad) )
ROM_REGION( 0x300, "pic", 0 ) // PIC12C508? Code
ROM_LOAD( "fc21a.u57", 0x000, 0x300, NO_DUMP )
ROM_REGION( 0x800000, "sprites", 0 )
ROM_LOAD32_WORD( "fc21_obj-0.u43", 0x000000, 0x400000, CRC(08cfe6d9) SHA1(d10f362dcde01f7a9855d8f76af3084b5dd1573a) )
ROM_LOAD32_WORD( "fc21_obj-1.u42", 0x000002, 0x400000, CRC(4c1fbc20) SHA1(ff83691c19ce3600b31c494eaec26d2ac79e0028) )
ROM_REGION( 0x1000000, "oki", ROMREGION_ERASE00 )
ROM_LOAD( "fc21_voi0.u47", 0x000000, 0x200000, CRC(4a49370a) SHA1(ac10e2c25626965b49475767ef5a0ec3ba9a2d01) )
ROM_END
ROM_START( funcube3 )
ROM_REGION( 0x80000, "maincpu", 0 ) // XCF5206 Code
ROM_LOAD( "fc31_prg-0a.u4", 0x00000, 0x80000, CRC(ed7d70dd) SHA1(4ebfca9e60ab5e8de22821f0475abf515c83ce53) )
ROM_REGION( 0x20000, "sub", 0 ) // H8/3007 Code
ROM_LOAD( "fc21_iopr-0.u49", 0x00000, 0x20000, CRC(314555ef) SHA1(b17e3926c8ef7f599856c198c330d2051aae13ad) )
ROM_REGION( 0x400, "pic", 0 ) // PIC12C508? Code
ROM_LOAD( "fc31a.u57", 0x000, 0x400, NO_DUMP )
ROM_REGION( 0x800000, "sprites", 0 )
ROM_LOAD32_WORD( "fc31_obj-0.u43", 0x000000, 0x400000, CRC(08c5eb6f) SHA1(016d8f3067db487ccd47188142743897c9722b1f) )
ROM_LOAD32_WORD( "fc31_obj-1.u42", 0x000002, 0x400000, CRC(4dadc76e) SHA1(cf82296b38dc22a618fd178816316af05f2459b3) )
ROM_REGION( 0x1000000, "oki", ROMREGION_ERASE00 )
ROM_LOAD( "fc31_snd-0.u47", 0x000000, 0x200000, CRC(36b03769) SHA1(20e583359421e0933c781a487fe5f7220052a6d4) )
ROM_END
ROM_START( funcube4 )
ROM_REGION( 0x80000, "maincpu", 0 ) // XCF5206 Code
ROM_LOAD( "fc41_prg-0.u3", 0x00000, 0x80000, CRC(ef870874) SHA1(dcb8dc3f780ca135df55e4b4f3c95620597ad28f) )
ROM_REGION( 0x20000, "sub", 0 ) // H8/3007 Code
ROM_LOAD( "fc21_iopr-0.u49", 0x00000, 0x20000, CRC(314555ef) SHA1(b17e3926c8ef7f599856c198c330d2051aae13ad) )
ROM_REGION( 0x300, "pic", 0 ) // PIC12C508? Code
ROM_LOAD( "fc41a", 0x000, 0x300, NO_DUMP )
ROM_REGION( 0x800000, "sprites", 0 )
ROM_LOAD32_WORD( "fc41_obj-0.u43", 0x000000, 0x400000, CRC(9ff029d5) SHA1(e057f4929aa745ecaf9d4ff7e39974c82e440146) )
ROM_LOAD32_WORD( "fc41_obj-1.u42", 0x000002, 0x400000, CRC(5ab7b087) SHA1(c600158b2358cdf947357170044dda2deacd4f37) )
ROM_REGION( 0x1000000, "oki", ROMREGION_ERASE00 )
ROM_LOAD( "fc41_snd0.u47", 0x000000, 0x200000, CRC(e6f7d2bc) SHA1(638c73d439eaaff8097cb0aa2684f9f7111bcade) )
ROM_END
ROM_START( funcube5 )
ROM_REGION( 0x80000, "maincpu", 0 ) // XCF5206 Code
ROM_LOAD( "fc51_prg-0.u4", 0x00000, 0x80000, CRC(4e34c2d8) SHA1(1ace4f6edab291e69e5c36b15193fba62f4a6773) )
ROM_REGION( 0x20000, "sub", 0 ) // H8/3007 Code
ROM_LOAD( "fc21_iopr-0.u49", 0x00000, 0x20000, CRC(314555ef) SHA1(b17e3926c8ef7f599856c198c330d2051aae13ad) )
ROM_REGION( 0x300, "pic", 0 ) // PIC12C508? Code
ROM_LOAD( "fc51a.u57", 0x000, 0x300, NO_DUMP )
ROM_REGION( 0x800000, "sprites", 0 )
ROM_LOAD32_WORD( "fc51_obj-0.u43", 0x000000, 0x400000, CRC(116624b3) SHA1(c0b3dbe0ea4a0808222616c3ef77b2d1194a970a) )
ROM_LOAD32_WORD( "fc51_obj-1.u42", 0x000002, 0x400000, CRC(35c6ec61) SHA1(424c9b66a2cdd5217d8a577d0179d1228112ee5b) )
ROM_REGION( 0x1000000, "oki", ROMREGION_ERASE00 )
ROM_LOAD( "fc51_snd-0.u47", 0x000000, 0x200000, CRC(2a504fe1) SHA1(911ad650bf48aa78d9cb3c64284aa526ceb519ba) )
ROM_END
void funcube_state::init_funcube()
{
uint32_t *main_cpu = (uint32_t *) memregion("maincpu")->base();
main_cpu[0x064/4] = 0x0000042a; // PIC protection?
}
void funcube_state::init_funcube2()
{
uint32_t *main_cpu = (uint32_t *) memregion("maincpu")->base();
main_cpu[0xa5c/4] = 0x4e713e3c; // PIC protection?
main_cpu[0xa74/4] = 0x4e713e3c;
main_cpu[0xa8c/4] = 0x4e7141f9;
}
void funcube_state::init_funcube3()
{
uint32_t *main_cpu = (uint32_t *) memregion("maincpu")->base();
main_cpu[0x008bc/4] = 0x4a804e71;
main_cpu[0x19f0c/4] = 0x4e714e71;
main_cpu[0x19fb8/4] = 0x4e714e71;
}
/***************************************************************************
Guardians
Banpresto, 1995
CPU: Toshiba TMP68301AF-16 (100 Pin PQFP)
Video: NEC DX-101 (240 Pin PQFP, @ U10)
NEC DX-102 (52 Pin PQFP x2, @ U28 & U45)
Sound: X1-010 (Mitsubishi M60016 Gate Array, 80 Pin PQFP @ U26)
OSC: 50MHz
Other: 8 Position Dipswitch x 2
GAL 16V8 at U38
Memory:
M1 are HM628128LFP-10L at U42 & U43
M2 is W2465K-70LL at U27
M3 are LH5168D-10L at U8 & U9
M4 are CXK58257AM-10L at U6, U7, U13 & U14
PCB Number: P-FG01-1
+-----------------------------------------------------------+
| +------+ U U CN4* |
| VOL |Seta | M 5 5 +--------------+|
| |X1-010| 2 8 7 +-+ M | U16 ||
| +------+ * * | | 1 +--------------+|
+-+ |U| +--------------+|
| +-++-++-++-+ |3| | U20 ||
+-+ | || || || | M |2| M +--------------+|
| |U||U||U||U| M M 4 | | 1 +--------------+|
|J |3||5||2||4| 3 3 +-+ | U15 ||
|A | || || || | M +--------------+|
|M +-++-++-++-+ 4 +--------------+|
|M | U19 ||
|A +--------------+|
| +--------------+|
|C | U18 ||
|o +----------+ +--------------+|
|n +-------+ | | +--------------+|
|n |Toshiba| | NEC | | U22 ||
|e | TMP | | DX-101 | +--------------+|
|c | 68301 | | | +--------------+|
|t U +-------+ | | | U17 ||
|e 5 +----------+ +--------------+|
|r 6 +--------------+|
| * | U21 ||
+-+ +---+ U +--------------+|
| |DX | 3 50MHz 32MHz* |
| |102| 8 |
+-+ +---+ M M +---+ |
| SW1* D D 4 4 |DX | |
| S S |102| |
| W W +---+ |
| 2 1 |
+-----------------------------------------------------------+
U56 is unpopulated 93C45 EEPROM
SW1 is unpopulated Reset push button
CN4 - 96 pin connector (3 rows by 32 pins)
* Denotes not populated.
Notes:
HSync: 15.23kHz
VSync: 58.5Hz
NOTE: There is known to exist an undumped version of Guardians on the
P-FG01-1 PCB half as many but larger ROMs.
The following sockets have double size ROMS:
U4 & U5 - program ROMs
U15, U16, U17 & U18 - graphics ROMS
The following sockets are unpopulated:
U2 & U3 - program ROMs
U19, U20, U21 & U22 - graphics ROMS
**********************************************************
P0-113A PCB with P1-106-1 & P1-107-1 duaghtercards
program ROMs verified to match the P-FG01-1 set
CPU: Toshiba TMP68301AF-16 (100 Pin PQFP)
Video: Allumer X1-020 (208 Pin PQFP)
Sound: X1-010 (Mitsubishi M60016 Gate Array, 80 Pin PQFP @ U26)
OSC: 50MHz, 32.530MHz
Other: 8 Position Dipswitch x 2
Reset Push Button at SW1
93C46 EEPROM
Memory:
M1 are TC551001BFL-70L at U56 & U57
M2 is CY7C185-25PC at U27
M3 are N341256P-20
PCB Number: P0-113A BP49KA
+---------------------------------------------------------------+
| +------+ +---+ |
| VOL |Seta | M | | +---------------+|
| |X1-010| 2 | U | M |KA2-001-014 U19||
| +------+ | 2 | 1 +---------------+|
+-+ | 8 | +---------------+|
| +-++-+ +-++-+ | | |KA2-001-013 U17||
+-+ | || | | || | +---+ M +---------------+|
| |U||U| M |U||U| M 1 +---------------+|
|J |3||5| 3 |2||4| 3 | U15 ||
|A | || | | || | +---------------+|
|M +-++-+ +-++-+ +---------------+|
|M |KA2-001-011 U20||
|A +----------+ +---------------+|
| | | +---------------+|
|C | ALLUMER | |KA2-001-010 U18||
|o +---+ | X1-020 | +---------------+|
|n | | +-------+ | | +---------------+|
|n | U | |Toshiba| | 9426HK003| | U16* ||
|e C | 7 | | TMP | +----------+ +---------------+|
|c N | 7 | | 68301 | +---------------+|
|t 2 | | +-------+ |KA2-001-008 U23||
|e +---+ +---------------+|
|r 93C46 +---------------+|
| |KA2-001-007 U22||
+-+ 50MHz 32.530MHz +---------------+|
| +---------------+|
| P P | U21* ||
+-+ C A A M M +---------------+|
| N DSW1 L L 3 3 |
| 1 DSW2 SW1 2 1 |
+---------------------------------------------------------------+
U2 is KA2 001 001 EPROM
U4 is KA2 001 002 EPROM
U5 is KA2 001 003 EPROM
U3 is KA2 001 004 EPROM
U28 is KA2-001-015 mask ROM (silkscreened SOUND ROM)
U15 is socketted to receive P1-106-1 daughtercard
U77 is socketted to receive P1-107-1 daughtercard
CN2 - 5 Pin header
CN1 - 10 Pin header
PAL1 at U51 is KA-201 GAL16V8B
PAL2 at U52 is KA-102 GAL16V8B
* Denotes not populated.
Notes:
HSync: 15.19kHz
VSync: 58.27Hz
The daughtercards below are NOT to scale with the above main board.
P1-107-1 (additional RAM)
+-------------------------------+
| 74LS32 JP5 JP6 JP7|
| CXK58257AM-10L CXK58257AM-10L |
| +-----------------------+ |
| |U7 42 pin header to U77| |
| +-----------------------+ |
+-------------------------------+
JP5 - JP7 single wire connections for power
P1-106-1
+-------------------------------+
| HD74HC373P HD74HC373P |
| +-----------------------+ |
| |U3 42 pin header to U15| |
| +-----------------------+ |
| +-----------------------+ |
| | KA2-001-017 U2 | |
| +-----------------------+ |
| +-----------------------+ |
| | KA2-001-016 U1 | |
| +-----------------------+ |
|JP1 JP2 JP3 JP4 74LS00 |
+-------------------------------+
JP1 - JP4 single wire connections for power
***************************************************************************/
ROM_START( grdians ) /* P-FG01-1 PCB */
ROM_REGION( 0x200000, "maincpu", 0 ) // TMP68301 Code
ROM_LOAD16_BYTE( "u2.bin", 0x000000, 0x080000, CRC(36adc6f2) SHA1(544e87f88179fe1342e7a06a8948ac1828e85108) )
ROM_LOAD16_BYTE( "u3.bin", 0x000001, 0x080000, CRC(2704f416) SHA1(9081a12cbb9927d36e1c50b52aa2c6003810ee42) )
ROM_LOAD16_BYTE( "u4.bin", 0x100000, 0x080000, CRC(bb52447b) SHA1(61433f683210ab2bc2cf1cc4b5b7a39cc5b6493d) )
ROM_LOAD16_BYTE( "u5.bin", 0x100001, 0x080000, CRC(9c164a3b) SHA1(6d688c7af9e7e8e8d54b2e4dfbf41f59c79242eb) )
ROM_REGION( 0x2000000, "sprites", ROMREGION_ERASE) // Sprites
ROM_LOAD64_WORD( "u16.bin", 0x0000000, 0x400000, CRC(6a65f265) SHA1(6cad11f718f8bbcff464d41eb4717460769237ed) )
ROM_LOAD64_WORD( "u15.bin", 0x0000002, 0x400000, CRC(01672dcd) SHA1(f61f60e3343cc5b6ccee391ee529966a141566db) )
ROM_LOAD64_WORD( "u18.bin", 0x0000004, 0x400000, CRC(967babf4) SHA1(42a6311576417c44aeaceb8ba6bb3cd7794e4882) )
ROM_LOAD64_WORD( "u17.bin", 0x0000006, 0x400000, CRC(0fad0629) SHA1(1bdc8e7c5e39e83d327f14a672ec81b049112da6) )
ROM_LOAD64_WORD( "u20.bin", 0x1800000, 0x200000, CRC(a7226ab7) SHA1(408580dd35c568ffef1ebbd87359e3ec1f867020) )
ROM_CONTINUE( 0x1000000, 0x200000 )
ROM_LOAD64_WORD( "u19.bin", 0x1800002, 0x200000, CRC(c0c998a0) SHA1(498fb1877527ed37412537f06a2c39ff0c60f146) )
ROM_CONTINUE( 0x1000002, 0x200000 )
ROM_LOAD64_WORD( "u22.bin", 0x1800004, 0x200000, CRC(6239997a) SHA1(87b6d6f30f152f625f82fd858c1290176c7e156e) )
ROM_CONTINUE( 0x1000004, 0x200000 )
ROM_LOAD64_WORD( "u21.bin", 0x1800006, 0x200000, CRC(6f95e466) SHA1(28482fad16a3ac9302f152d81552e6f84a44f3e4) )
ROM_CONTINUE( 0x1000006, 0x200000 )
ROM_REGION( 0x100000, "x1snd", 0 ) // Samples
ROM_LOAD( "u32.bin", 0x000000, 0x100000, CRC(cf0f3017) SHA1(8376d3a674f71aec72f52c72758fbc53d9feb1a1) )
ROM_END
ROM_START( grdiansa ) /* P0-113A PCB */
ROM_REGION( 0x200000, "maincpu", 0 ) // TMP68301 Code
ROM_LOAD16_BYTE( "ka2_001_001.u2", 0x000000, 0x080000, CRC(36adc6f2) SHA1(544e87f88179fe1342e7a06a8948ac1828e85108) ) // same program code as P-FG01-1 PCB above
ROM_LOAD16_BYTE( "ka2_001_004.u3", 0x000001, 0x080000, CRC(2704f416) SHA1(9081a12cbb9927d36e1c50b52aa2c6003810ee42) )
ROM_LOAD16_BYTE( "ka2_001_002.u4", 0x100000, 0x080000, CRC(bb52447b) SHA1(61433f683210ab2bc2cf1cc4b5b7a39cc5b6493d) )
ROM_LOAD16_BYTE( "ka2_001_003.u5", 0x100001, 0x080000, CRC(9c164a3b) SHA1(6d688c7af9e7e8e8d54b2e4dfbf41f59c79242eb) )
ROM_REGION( 0x2000000, "sprites", ROMREGION_ERASE) // Sprites
ROM_LOAD64_WORD( "ka2-001-010.u18", 0x0800000, 0x200000, CRC(b3e6e95f) SHA1(c61d3def136f4bb6c5857740b0fbea64a98dd1dc) )
ROM_LOAD64_WORD( "ka2-001-013.u17", 0x0800002, 0x200000, CRC(9f7feb13) SHA1(0b3010faf87fb5bfe55101e5eabecec6107bf42f) )
ROM_LOAD64_WORD( "ka2-001-007.u22", 0x0800004, 0x200000, CRC(d1035051) SHA1(0bc8871b91e777009002e340e1cef92487234271) )
ROM_LOAD64_WORD( "ka2-001-016.u1", 0x0800006, 0x200000, CRC(99fc8efa) SHA1(eeaabb3b8d6c99a16c922a2b6ff0973935fd74bd) ) // located on P1-106-1 daughtercard
ROM_LOAD64_WORD( "ka2-001-011.u20", 0x1000000, 0x200000, CRC(676edca6) SHA1(32bb507d000e19b004251d24c5fe61a09486cdd1) )
ROM_LOAD64_WORD( "ka2-001-014.u19", 0x1000002, 0x200000, CRC(5465ef1b) SHA1(d1f0ff1950672444ece2fd86285a4051ea66f7bb) )
ROM_LOAD64_WORD( "ka2-001-008.u23", 0x1000004, 0x200000, CRC(b2c94f31) SHA1(09891516806e2e79673b8b787d8e1caa51523a79) )
ROM_LOAD64_WORD( "ka2-001-017.u2", 0x1000006, 0x200000, CRC(60ad7a2b) SHA1(a23c916959f3cfc8b1eead7a72c8312967b3acd7) ) // located on P1-106-1 daughtercard
ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
ROM_LOAD( "ka2-001-015.u28", 0x000000, 0x200000, CRC(fa97cc54) SHA1(d9a869e9428e5f31aee917ea7733cca1247458f2) ) // Identical halves matching parent U32.BIN
ROM_END
/***************************************************************************
MS Gundam Ex Revue
Banpresto, 1994
This game runs on Seta/Allumer hardware
CPU: Toshiba TMP68301AF-16 (100 Pin PQFP)
Video: Allumer X1-020 (208 Pin PQFP)
Sound: X1-010 (Mitsubishi M60016 Gate Array, 80 Pin PQFP @ U26)
OSC: 50MHz, 32.530MHz
Other: 8 Position Dipswitch x 2
Reset Push Button at SW1
93C46 EEPROM
Memory:
M1 are TC551001BFL-70L at U56 & U57
M2 is CY7C185-25PC at U27
M3 are N341256P-20
PCB Number: P0-113A BP49KA
+--------------------------------------------------------------+
| +------+ +---+ |
| VOL |Seta | M | | +--------------+|
| |X1-010| 2 | U | M |KA-001-014 U19||
| +------+ | 2 | 1 +--------------+|
+-+ | 8 | +--------------+|
| +-++-+ +-++-+ | | |KA-001-013 U17||
+-+ | || | | || | +---+ M +--------------+|
| |U||U| M |U||U| M 1 +--------------+|
|J |3||5| 3 |2||4| 3 |KA-001-012 U15||
|A | || | | || | +--------------+|
|M +-++-+ +-++-+ +--------------+|
|M |KA-001-011 U20||
|A +----------+ +--------------+|
| | | +--------------+|
|C | ALLUMER | |KA-001-010 U18||
|o +---+ | X1-020 | +--------------+|
|n | | +-------+ | | +--------------+|
|n | U | |Toshiba| | 9426HK003| |KA-001-009 U16||
|e C | 7 | | TMP | +----------+ +--------------+|
|c N | 7 | | 68301 | +--------------+|
|t 2 | | +-------+ |KA-001-008 U23||
|e +---+ +--------------+|
|r 93C46 +--------------+|
| |KA-001-007 U22||
+-+ 50MHz 32.530MHz +--------------+|
| +--------------+|
| P P |KA-001-006 U21||
+-+ C A A M M +--------------+|
| N DSW1 L L 3 3 |
| 1 DSW2 SW1 |
+--------------------------------------------------------------+
U28 is KA-001-015 mask ROM (silkscreened SOUND ROM)
U77 is KA-001-005 mask ROM
CN2 - 5 Pin header
CN1 - 10 Pin header
VSync: 60Hz
***************************************************************************/
ROM_START( gundamex )
ROM_REGION( 0x600000, "maincpu", 0 ) // TMP68301 Code
ROM_LOAD16_BYTE( "ka_002_002.u2", 0x000000, 0x080000, CRC(e850f6d8) SHA1(026325e305676b1f8d3d9e7573920f8b70d7bccb) )
ROM_LOAD16_BYTE( "ka_002_004.u3", 0x000001, 0x080000, CRC(c0fb1208) SHA1(84b25e4c73cb8e023ee5dbf69f588be98700b43f) )
ROM_LOAD16_BYTE( "ka_002_001.u4", 0x100000, 0x080000, CRC(553ebe6b) SHA1(7fb8a159513d31a1d60520ff14e4c4d133fd3e19) )
ROM_LOAD16_BYTE( "ka_002_003.u5", 0x100001, 0x080000, CRC(946185aa) SHA1(524911c4c510d6c3e17a7ab42c7077c2fffbf06b) )
ROM_LOAD16_WORD_SWAP( "ka-001-005.u77", 0x500000, 0x080000, CRC(f01d3d00) SHA1(ff12834e99a76261d619f10d186f4b329fb9cb7a) )
ROM_REGION( 0x2000000, "sprites", ROMREGION_ERASE00) // Sprites
ROM_LOAD64_WORD( "ka-001-009.u16", 0x0000000, 0x200000, CRC(997d8d93) SHA1(4cb4cdb7e8208af4b14483610d9d6aa5e13acd89) )
ROM_LOAD64_WORD( "ka-001-012.u15", 0x0000002, 0x200000, CRC(b789e4a8) SHA1(400b773f24d677a9d47466fdbbe68cb6efc1ad37) )
ROM_LOAD64_WORD( "ka-001-006.u21", 0x0000004, 0x200000, CRC(6aac2f2f) SHA1(fac5478ca2941a93c57f670a058ff626e537bcde) )
ROM_LOAD64_WORD( "ka-001-010.u18", 0x0800000, 0x200000, CRC(811b67ca) SHA1(c8cfae6f54c76d63bd625ff011c872ffb75fd2e2) )
ROM_LOAD64_WORD( "ka-001-013.u17", 0x0800002, 0x200000, CRC(d8a0201f) SHA1(fe8a2407c872adde8aec8e9340b00be4f00a2872) )
ROM_LOAD64_WORD( "ka-001-007.u22", 0x0800004, 0x200000, CRC(588f9d63) SHA1(ed5148d09d02e3bc12c50c39c5c86e6356b2dd7a) )
ROM_LOAD64_WORD( "ka-001-011.u20", 0x1000000, 0x200000, CRC(08a72700) SHA1(fb8003aa02dd249c30a757cb43b516260b41c1bf) )
ROM_LOAD64_WORD( "ka-001-014.u19", 0x1000002, 0x200000, CRC(7635e026) SHA1(116a3daab14a17faca85c4a956b356aaf0fc2276) )
ROM_LOAD64_WORD( "ka-001-008.u23", 0x1000004, 0x200000, CRC(db55a60a) SHA1(03d118c7284ca86219891c473e2a89489710ea27) )
ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
ROM_LOAD( "ka-001-015.u28", 0x000000, 0x200000, CRC(ada2843b) SHA1(09d06026031bc7558da511c3c0e29187ea0a0099) )
ROM_REGION16_BE( 0x80, "eeprom", 0 )
ROM_LOAD( "eeprom.bin", 0x0000, 0x0080, CRC(80f8e248) SHA1(1a9787811e56d95f7acbedfb00225b6e7df265eb) )
ROM_END
/***************************************************************************
Wakakusamonogatari Mahjong Yonshimai (JPN Ver.)
(c)1996 Maboroshi Ware
Board: P0-123A
CPU: TMP68301 (68000 core)
OSC: 50.0000MHz
32.5304MHz
Sound: X1-010
***************************************************************************/
ROM_START( mj4simai )
ROM_REGION( 0x200000, "maincpu", 0 ) // TMP68301 Code
ROM_LOAD16_BYTE( "ll.u2", 0x000000, 0x080000, CRC(7be9c781) SHA1(d29e579706d98909933f6bed2ee292c88ed10d2c) )
ROM_LOAD16_BYTE( "lh1.u3", 0x000001, 0x080000, CRC(82aa3f72) SHA1(a93d5dc7cdf12f852a692759d91f6f2951b6b5b5) )
ROM_LOAD16_BYTE( "hl.u4", 0x100000, 0x080000, CRC(226063b7) SHA1(1737baffc16ff7261f887911187ece96925fa6ff) )
ROM_LOAD16_BYTE( "hh.u5", 0x100001, 0x080000, CRC(23aaf8df) SHA1(b3d678afce4ddef32e48d690c6d07b723dd0c28f) )
ROM_REGION( 0x2000000, "sprites", ROMREGION_ERASE00 ) // Sprites
ROM_LOAD64_WORD( "cha-03.u16", 0x0000000, 0x400000, CRC(d367429a) SHA1(b32c215ef85c3d0a4c5550cef4f5c4c0e7030b7c) )
ROM_LOAD64_WORD( "cha-05.u15", 0x0000002, 0x400000, CRC(e94ec40a) SHA1(2685dbc5680b5f76688c6b4fbe40ae682c525bfe) )
ROM_LOAD64_WORD( "cha-01.u21", 0x0000004, 0x400000, CRC(35f47b37) SHA1(4a8eb088890272f2a069e2c3f00fadf6421f7b0e) )
ROM_LOAD64_WORD( "cha-04.u18", 0x1000000, 0x400000, CRC(7f2008c3) SHA1(e45d863540eb2381f5d7660d64cdfef87c890768) )
ROM_LOAD64_WORD( "cha-06.u17", 0x1000002, 0x400000, CRC(5cb0b3a9) SHA1(92fb82d45b4c46326d5796981f812e20a8ddb4f2) )
ROM_LOAD64_WORD( "cha-02.u22", 0x1000004, 0x400000, CRC(f6346860) SHA1(4eebd3fa315b97964fa39b88224f9de7622ba881) )
ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
ROM_LOAD( "cha-07.u32", 0x000000, 0x400000, CRC(817519ee) SHA1(ed09740cdbf61a328f7b50eb569cf498fb749416) )
ROM_END
/***************************************************************************
Kosodate Quiz My Angel (JPN Ver.)
(c)1996 Namco
CPU: Toshiba TMP68301AF-16 (100 Pin PQFP)
Video: NEC DX-101 (240 Pin PQFP, @ U10)
NEC DX-102 (52 Pin PQFP x3, @ U28, U30 & U45)
Sound: X1-010 (Mitsubishi M60016 Gate Array, 80 Pin PQFP @ U26)
OSC: 50MHz
Other: 8 Position Dipswitch x 2
Reset Push Button at SW1
GAL 16V8 at U38
Memory:
M1 are HM628128LFP-10L at U42 & U43
M2 is W2465K-70LL at U27
M3 are LH5168D-10L at U8 & U9 (unpopulated)
M4 are CXK58257AM-10L at U6, U7, U13 & U14
PCB Number: namco KE / P0-125A
+-----------------------------------------------------------+
| +------+ U U CN4* |
| VOL |Seta | M 5 5 +--------------+|
| |X1-010| 2 8 7 +-+ M | KQ1 CG0 U16 ||
| +------+ * * | | 1 +--------------+|
+-+ |U| +--------------+|
| +-++-++-++-+ BT1* |3| | KQ1 CG2 U20 ||
+-+ | || || || | M |2| M +--------------+|
| |U||U||U||U| M M 4 | | 1 +--------------+|
|J |3||5||2||4| 3 3 +-+ | KQ1 CG1 U15 ||
|A | || || || | * * M +--------------+|
|M +-++-++-++-+ 4 +--------------+|
|M C | KQ1 CG3 U19 ||
|A N +--------------+|
| 1 +--------------+|
|C * | KQ1 CG4 U18 ||
|o +----------+ +--------------+|
|n C +-------+ | | +--------------+|
|n N |Toshiba| | NEC | | KQ1 CG6 U22 ||
|e 2 | TMP | | DX-101 | +--------------+|
|c * | 68301 | | | +--------------+|
|t U +-------+ | | | KQ1 CG5 U17 ||
|e C 5 +----------+ +--------------+|
|r N 6 +--------------+|
| 3 * | KQ1 CG7 U21 ||
+-+ * +---+ +---+ U +--------------+|
| |DX | S |DX | 3 50MHz 32MHz* |
| |102| W |102| 8 |
+-+ +---+ 1 +---+ M M +---+ |
| D D 4 4 |DX | |
| S S |102| |
| W W +---+ |
| 2 1 |
+-----------------------------------------------------------+
U2 is KQ1 PRG E EPROM
U3 is KQ1 PRG O EPROM
U4 is KQ1 TBL E EPROM
U5 is KQ1 TBL O EPROM
U32 is KG SND mask ROM (silkscreened SOUND ROM)
CN1 unpopulated 7 pin header
CN2 unpopulated 5 pin header
CN3 unpopulated 10 pin header
BT1 is unpopulated battery
U56 is unpopulated 93C45 EEPROM
CN4 - 96 pin connector (3 rows by 32 pins)
* Denotes not populated.
***************************************************************************/
ROM_START( myangel )
ROM_REGION( 0x200000, "maincpu", 0 ) // TMP68301 Code
ROM_LOAD16_BYTE( "kq1-prge.u2", 0x000000, 0x080000, CRC(6137d4c0) SHA1(762341e11b56e4a7787a0662833b702b78aee0a9) )
ROM_LOAD16_BYTE( "kq1-prgo.u3", 0x000001, 0x080000, CRC(4aad10d8) SHA1(a08e1c4f57c64be829e0807ae2791da947fd60aa) )
ROM_LOAD16_BYTE( "kq1-tble.u4", 0x100000, 0x080000, CRC(e332a514) SHA1(dfd255239c80c48c9865e70681b9ddd175b8bf55) )
ROM_LOAD16_BYTE( "kq1-tblo.u5", 0x100001, 0x080000, CRC(760cab15) SHA1(fa7ea85ec2ebfaab3111b8631ea6ea3d794d449c) )
ROM_REGION( 0x1000000, "sprites", 0 ) // Sprites
ROM_LOAD64_WORD( "kq1-cg2.u20", 0x000000, 0x200000, CRC(80b4e8de) SHA1(c8685c4f4e3c0415ce0ec88e0288835e504cab00) )
ROM_LOAD64_WORD( "kq1-cg3.u19", 0x000002, 0x200000, CRC(9bdc35c9) SHA1(fd0a1eb3dd10705bce5462263667353632558b58) )
ROM_LOAD64_WORD( "kq1-cg6.u22", 0x000004, 0x200000, CRC(b25acf12) SHA1(5cca35921f3b376c3cc36f5b009eb845db2e1897) )
ROM_LOAD64_WORD( "kq1-cg7.u21", 0x000006, 0x200000, CRC(9f48382c) SHA1(80dfc33a55123b5d3cdb3ed97b43a527f0254d61) )
ROM_LOAD64_WORD( "kq1-cg0.u16", 0x800000, 0x200000, CRC(f8ae9a05) SHA1(4f3b41386a48a1608aa96b911e6b74ca775260fb) )
ROM_LOAD64_WORD( "kq1-cg1.u15", 0x800002, 0x200000, CRC(23bd7ea4) SHA1(e925bbadc33fc2586bb18283cf989ab35f28c1e9) )
ROM_LOAD64_WORD( "kq1-cg4.u18", 0x800004, 0x200000, CRC(dca7f8f2) SHA1(20595c7940a28d01bdc6610b67aaaeac61ba92e2) )
ROM_LOAD64_WORD( "kq1-cg5.u17", 0x800006, 0x200000, CRC(a4bc4516) SHA1(0eb11fa54d16bba1b96f9dd943a68949a3bb9a2f) )
ROM_REGION( 0x200000, "x1snd", 0 ) // Samples
ROM_LOAD( "kq1-snd.u32", 0x000000, 0x200000, CRC(8ca1b449) SHA1(f54096fb5400843af4879135c96760485b6cb319) )
ROM_END
/***************************************************************************
Kosodate Quiz My Angel 2 (JPN Ver.)
(c)1997 Namco
Board: KL (Namco) ; P0-136A (Seta)
CPU: TMP68301 (68000 core)
OSC: 50.0000MHz
32.5304MHz
Sound: X1-010
***************************************************************************/
ROM_START( myangel2 )
ROM_REGION( 0x200000, "maincpu", 0 ) // TMP68301 Code
ROM_LOAD16_BYTE( "kqs1ezpr.u2", 0x000000, 0x080000, CRC(2469aac2) SHA1(7dade2de31252e305d24c659c4801dd4687ad1f6) )
ROM_LOAD16_BYTE( "kqs1ozpr.u3", 0x000001, 0x080000, CRC(6336375c) SHA1(72089f77e94832e74e0512944acadeccd0dec8b0) )
ROM_LOAD16_BYTE( "kqs1e-tb.u4", 0x100000, 0x080000, CRC(e759b4cc) SHA1(4f806a144a47935b2710f8af800ec0d771f12a18) )
ROM_LOAD16_BYTE( "kqs1o-tb.u5", 0x100001, 0x080000, CRC(b6168737) SHA1(4c3de877c0c1dca1c43ac737a0bf231335237d3a) )
ROM_REGION( 0x1800000, "sprites", 0 ) // Sprites
ROM_LOAD64_WORD( "kqs1-cg4.u20", 0x0000000, 0x200000, CRC(d1802241) SHA1(52c45a13d46f7ee8043e85b99d07b1765ca93dcc) )
ROM_LOAD64_WORD( "kqs1-cg5.u19", 0x0000002, 0x200000, CRC(d86cf19c) SHA1(da5a5b576ce107433605b24d8b9dcd0abd46bcde) )
ROM_LOAD64_WORD( "kqs1-cg6.u22", 0x0000004, 0x200000, CRC(3f08886b) SHA1(054546ae44ffa5d0973f4ead080fe720a340e144) )
ROM_LOAD64_WORD( "kqs1-cg7.u21", 0x0000006, 0x200000, CRC(2c977904) SHA1(2589447f2471cdc414266b34aff552044c680d93) )
ROM_LOAD64_WORD( "kqs1-cg0.u16", 0x0800000, 0x400000, CRC(c21a33a7) SHA1(bc6f479a8f4c716ba79a725f160ddeb95fdedbcb) )
ROM_LOAD64_WORD( "kqs1-cg1.u15", 0x0800002, 0x400000, CRC(dca799ba) SHA1(8379b11472c27b1945fe7fc274c7fedf756accba) )
ROM_LOAD64_WORD( "kqs1-cg2.u18", 0x0800004, 0x400000, CRC(f7f92c7e) SHA1(24a525a15fded0de6e382b346da6bd5e7b9eced5) )
ROM_LOAD64_WORD( "kqs1-cg3.u17", 0x0800006, 0x400000, CRC(de3b2191) SHA1(d7d6ea07b665cfd834747d3c0776b968ce03bc6a) )
ROM_REGION( 0x400000, "x1snd", 0 ) // Samples
ROM_LOAD( "kqs1-snd.u32", 0x000000, 0x400000, CRC(792a6b49) SHA1(341b4e8f248b5032217733bada32e353c67e3888) )
ROM_END
/***************************************************************************
Namco Stars
EVA2B PCB (8829970101 P0-140B Serial Z033):
TMP68301AF-16 CPU
DX101
DX102 x 2
OKI M9810
GAL 16V8d x 2
MAX232
DSW8
Coin Battery
Reset Button
OSC: 25.447 MHz @ XM1, 50.000 MHz @ XM2, 32.53005 MHz @ X2
Volume Trimmer
***************************************************************************/
ROM_START( namcostr )
ROM_REGION( 0x80000, "maincpu", 0 ) // TMP68301 Code
ROM_LOAD( "ns1mpr0.u08", 0x00000, 0x80000, BAD_DUMP CRC(008d23fe) SHA1(8c77a34dd0285c06809e99d20b9d8b31b81bfc68) ) // FIXED BITS (xxxxx1xxxxxxxxxx)
ROM_REGION( 0x800000, "sprites", 0 )
ROM_LOAD32_WORD( "ns1cha0.u39", 0x000000, 0x400000, BAD_DUMP CRC(372d1651) SHA1(355553992e5a474ae1e45bcdeb88804d5b75f802) ) // FIXED BITS (xxxxx1xxxxxxxxxx)
ROM_LOAD32_WORD( "ns1cha1.u38", 0x000002, 0x400000, BAD_DUMP CRC(82e67809) SHA1(6b25726cd3683e1691e4d4e1628c13998f20933d) ) // FIXED BITS (xxxxx1xxxxxxxxxx)
ROM_REGION( 0x1000000, "oki", 0 )
ROM_LOAD( "ns1voi0.u40", 0x000000, 0x400000, BAD_DUMP CRC(fe5c2b16) SHA1(21e4423cc91e8833297d4588343237b8b3155196) ) // FIXED BITS (xxxxx1xxxxxxxxxx)
ROM_END
void seta2_state::init_namcostr()
{
// attempt to patch a few of the stuck bits
uint16_t *cpurom = &memregion("maincpu")->as_u16(0);
for (offs_t addr = 0x00000; addr < 0x00100; addr += 2)
cpurom[addr / 2] &= 0xfbff;
for (offs_t addr = 0x00100; addr < 0x00180; addr += 2)
if (!BIT(cpurom[addr / 2], 9))
cpurom[addr / 2] &= 0xfbff;
cpurom[0x00184 / 2] &= 0xfbff;
for (offs_t addr = 0x00204; addr < 0x002ae; addr += 2)
cpurom[addr / 2] &= 0xfbff;
for (offs_t addr = 0x002b0; addr < 0x0032c; addr += 2)
cpurom[addr / 2] &= 0xfbff;
cpurom[0x00332 / 2] &= 0xfbff;
for (offs_t addr = 0x00336; addr < 0x00344; addr += 2)
cpurom[addr / 2] &= 0xfbff;
for (offs_t addr = 0x00348; addr < 0x00364; addr += 2)
cpurom[addr / 2] &= 0xfbff;
for (offs_t addr = 0x00368; addr < 0x00370; addr += 2)
cpurom[addr / 2] &= 0xfbff;
for (offs_t addr = 0x00374; addr < 0x003ae; addr += 2)
cpurom[addr / 2] &= 0xfbff;
for (offs_t addr = 0x003b0; addr < 0x00400; addr += 2)
cpurom[addr / 2] &= 0xfbff;
}
/***************************************************************************
Puzzle De Bowling (Japan)
(c)1999 MOSS / Nihon System
CPU: Toshiba TMP68301AF-16 (100 Pin PQFP)
Video: NEC DX-101 (240 Pin PQFP)
NEC DX-102 (52 Pin PQFP x3)
Sound: X1-010 (Mitsubishi M60016 Gate Array, 80 Pin PQFP)
OSC: 50MHz & 32.53047MHz
Other: 8 Position Dipswitch x 2
Reset Push Button at SW1
Lattice ispLSI2032 - stamped "KUDEC"
PCB Number: P0-142A
+-----------------------------------------------------------+
| VOL +------+ |