diff options
Diffstat (limited to 'src/mame/drivers/jclub2.cpp')
-rw-r--r-- | src/mame/drivers/jclub2.cpp | 1557 |
1 files changed, 0 insertions, 1557 deletions
diff --git a/src/mame/drivers/jclub2.cpp b/src/mame/drivers/jclub2.cpp deleted file mode 100644 index 94468ef42fc..00000000000 --- a/src/mame/drivers/jclub2.cpp +++ /dev/null @@ -1,1557 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Luca Elia -/************************************************************************************************************ - - Seta's Jockey Club II (ジョッキークラブ II) - - Various hardware revisions, all use a MC68EC020FG16 CPU. - - --------------------------------------------------------------------------------------------- - Year + Game PCB Video Sound Other - --------------------------------------------------------------------------------------------- - 1994 Jockey Club II (older hw) E06-00409/E06-00407* ST-0020 ST-0016 ST-0013 ST-0017 - 1996 Jockey Club II (newer hw) E79-001 rev 01a ST-0032 <-- ST-0013 ST-0017 - 2001 Dark Horse (bootleg hw) - 3 x FPGA M6295 - - --------------------------------------------------------------------------------------------- - * Spotted also on E48-0027 Terminal P.C.B. - - ST-0013: unknown function. Doesn't seem to be used anywhere else? - ST-0016: Z80 with integrated video + sound capabilities. Video functionality is probably not used here. - ST-0017: unknown function (maybe I/O or RLE). Also used in srmp6 (see srmp6.cpp). - ST-0020: zooming sprites + blitter + tilemaps chip. Also used by gdfs in ssv.cpp (see st0020.cpp) - ST-0032: similar to ST-0020 but the ram / list formats aren't the same. Maybe it handles sound as - there doesn't seem to be any other dedicated sound chip. Doesn't seem to be used anywhere else? - - Notes: - - Reset, Meter, Last Game and Config (in later games) are revolving keys, so once you turn them they stay "active". - - Boot with Test switch on (F2) for service mode. Note that Config (if present) has to be off for this to work. - - The EEPROM holds an ID at $14 e.g. SETA1997JC26203W: - - 6 = config version, 203 = program version, W = fixed wide monitor (N = fixed normal, ' ' = configurable, E = Extended config) - - The ID can be reprogrammed by booting with a key combination (see below) that enables Write ID mode. - Later games require to enter a valid Vender Code (up to 8 hex digits) which is saved (encoded as 8 bytes) - at address $2a in the EEPROM (shown in service mode after the version) with a matching configuration id at $28 (2 bytes). - The code affects the game settings (accounting for e.g. laws of the target market) and appearence (e.g. hiding the game title) - Vender Codes and configuration ids for e.g. jclub2v203 are at 209B6C. Enter the digits using these inputs -> outputs: - - P1 start + 1..8 -> 1..8 | 7-8 -> A | P1 start + 7-8 -> F | P1 start + other keys -> 9 | any key -> F | payout -> end - - - Administrator Setup allows the setting of 3 rows of 8 characters (0-9 A-Z !). The meaning is unknown. Edit them with: - - 6-7 -> left | 7-8 -> right | start -> down | 1 -> increment | 1-2 -> decrement | payout -> end - - - The program can be upgraded by placing a ROM in the socket next to the main program ROM. - - An undumped v4.00 exists, with copyright 1994-97 Seta Corporation on the E84-0001 Rev.B hardware. - - jclub2v100/jclub2v101 (these can generate a valid EEPROM without a vender code): - - Boot with Reset + P1 Start : Configuration Setup (operator options) - - Boot with Reset + P1 Cancel : Backup Data Clear (needed to clear hardware/emergency/ID errors) - - Boot with Test + P1 Start : Write To ID Code (writes ID to EEPROM, configurable monitor) - - Boot with Test + P1 Payout + P1 Cancel : Write To ID Code(Wide) (writes ID to EEPROM, fixed wide monitor) - - jclub2v110 (from this version onwards a vender code is needed to generate a valid EEPROM): - - All of the above plus... - - Boot with Test + P1 Start + P1 Cancel : Write To ID Code(A) (writes ID to EEPROM, configurable monitor, no game title) - - Boot with invalid ID in the EEPROM i.e. : Now Update ID Enter Vender Code (update ID in EEPROM from a previous version) - EEPROM does not contain SETA at $14 and JC2X at $1c, where X is from the current version: - - ' '(v100) | A(v101) | 2/3(v110) | 4/5(v112) | 6(v203) | Z(v200-220) - - Bug: this will be triggered if the EEPROM is blank or from a newer version, but the update will fail even with a correct vender code! - Simply use the key combination for Write ID (thus writing the ID from scratch). - - jclub2v112: - - Vender codes are associated with a set of features encoded by up to 3 letters (e.g. AEW) shown after writing the ID: - 1) A / empty = no game title (Anonymous?) / game title - 2) E / empty = more configuration options (Extended?) if the monitor is not fixed (the last letter of the ID becomes E) - 3) W / N / empty = Fixed Wide / Fixed Normal / Configurable monitor (goes in the last letter of the ID, unless it's E) - - Boot with Reset + P1 Start : Configuration Setup (operator options) - - Boot with Reset + P1 Cancel : Backup Data Clear (needed to clear hardware/emergency/ID errors) - - Boot with Test + P1 Start + P1 Cancel : Write ID Enter Write Code (writes ID to EEPROM, features depend on vender code) - - They fixed the Update ID bug: it will only show if the EEPROM can be updated. Otherwise Broken ID will be shown (equivalent to Write ID). - - jclub2v200 and above: - - Vender codes are associated with an hex number instead of the 3 letters above: - $00 (on some sets produces Failed Write Sequence) .. $10, $20x (special with some settings shown but not changeable) - - Boot with Test + P1 Payout + P1 Cancel : Administrator Setup (release payout quickly! Or it will end with a failure) - - jclub2v203 and above: - - Boot with Reset + P1 Start : Configuration Setup (press Test for operator options) - - Boot with Reset + Test + P1 Cancel : Backup All Clear (needed to clear hardware/emergency/ID errors) - - darkhors (allegedly based on v400): - - Sprite ram is parsed and converted from the original format (ST-0032 zooming sprites + tilemaps) - to this hardware's plain sprites + 2 tilemaps. - - Boot with Config : System Setup (has printer and rtc setup) - - Boot with Reset + Test + P1 Cancel : Backup All Clear - - Boot with Config + P1 Payout + P1 Cancel : Administrator Setup (release payout quickly, or it will end with a failure) - - Boot with Config + P1 Start + P1 Cancel : Write ID Enter Write Code - - To do: - - Emulate coin double sensor. At the moment you will need to enter the config menu and change to single sensor - - Visible area under non-wide setting is $160 pixels wide instead of $150 - - Extend palette to 0x20000 entries (palette_device::allocate_palette() prevents more than 0x10000) - - Correct clocks - - darkhors: fix the disalignment between sprites and tilemap (gap in the fence) during play. Other screens are fine - -************************************************************************************************************/ - -#include "emu.h" -#include "cpu/m68000/m68000.h" -#include "machine/eepromser.h" -#include "machine/nvram.h" -#include "machine/st0016.h" -#include "machine/ticket.h" -#include "machine/timer.h" -#include "machine/watchdog.h" -#include "sound/okim6295.h" -#include "video/st0020.h" -#include "emupal.h" -#include "speaker.h" -#include "tilemap.h" - -#include "jclub2o.lh" -#include "jclub2.lh" - -namespace { - -// Common between all hardware (jclub2o, jclub2 and darkhors) -class common_state : public driver_device -{ -public: - common_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_eeprom(*this, "eeprom"), - m_hopper1(*this, "hopper1"), m_hopper2(*this, "hopper2"), - m_palette(*this, "palette"), - m_key1(*this, "KEY1.%u", 0), m_key2(*this, "KEY2.%u", 0), - m_input_sel1(0), m_input_sel2(0), - m_out1(0), m_out2(0), m_out3(0) - { } - - uint8_t read_key(required_ioport_array<8> & key, uint8_t mask); - - DECLARE_READ8_MEMBER(console_r); - DECLARE_WRITE8_MEMBER(console_w); - DECLARE_READ8_MEMBER(console_status_r); - - DECLARE_WRITE32_MEMBER(eeprom_93c46_w); - - TIMER_DEVICE_CALLBACK_MEMBER(scanline_irq); - -protected: - required_device<cpu_device> m_maincpu; - required_device<eeprom_serial_93cxx_device> m_eeprom; - required_device<ticket_dispenser_device> m_hopper1, m_hopper2; - required_device<palette_device> m_palette; - required_ioport_array<8> m_key1, m_key2; - - uint8_t m_input_sel1, m_input_sel2; - - uint32_t m_out1, m_out2, m_out3; - - void debug_out(); -}; - - -// Newer jclub2 hardware (without ST-0016) -class jclub2_state : public common_state -{ -public: - jclub2_state(const machine_config &mconfig, device_type type, const char *tag) : - common_state(mconfig, type, tag), - m_st0020(*this, "st0020") - { } - - DECLARE_WRITE32_MEMBER(input_sel1_out3_w); - DECLARE_WRITE32_MEMBER(input_sel2_w); - DECLARE_READ32_MEMBER(p1_r); - DECLARE_READ32_MEMBER(p2_r); - DECLARE_WRITE32_MEMBER(out1_w); - DECLARE_WRITE32_MEMBER(out2_w); - - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - - void jclub2(machine_config &config); - void jclub2_map(address_map &map); -protected: - required_device<st0020_device> m_st0020; -}; - -// Older jclub2 hardware (with ST-0016) -class jclub2o_state : public jclub2_state -{ -public: - jclub2o_state(const machine_config &mconfig, device_type type, const char *tag) : - jclub2_state(mconfig, type, tag), - m_soundcpu(*this, "soundcpu"), - m_soundbank(*this, "soundbank") - { } - - required_device<cpu_device> m_soundcpu; - required_memory_bank m_soundbank; - - DECLARE_WRITE32_MEMBER(eeprom_s29290_w); - - // ST-0016 <-> 68EC020 - DECLARE_READ8_MEMBER(cmd1_r); - DECLARE_READ8_MEMBER(cmd2_r); - DECLARE_WRITE8_MEMBER(cmd1_w); - DECLARE_WRITE8_MEMBER(cmd2_w); - DECLARE_READ8_MEMBER(cmd_stat_r); - WRITE8_MEMBER(st0016_rom_bank_w); // temp? - - // 68EC020 <-> ST-0016 - DECLARE_READ32_MEMBER(cmd1_word_r); - DECLARE_READ32_MEMBER(cmd2_word_r); - DECLARE_WRITE32_MEMBER(cmd1_word_w); - DECLARE_WRITE32_MEMBER(cmd2_word_w); - DECLARE_READ32_MEMBER(cmd_stat_word_r); - - void init_jclub2o(); - - void jclub2o(machine_config &config); - void jclub2o_map(address_map &map); - void st0016_io(address_map &map); - void st0016_mem(address_map &map); -private: - uint8_t m_cmd1; - uint8_t m_cmd2; - uint8_t m_cmd_stat; -}; - - -// bootleg darkhors hardware -class darkhors_state : public common_state -{ -public: - darkhors_state(const machine_config &mconfig, device_type type, const char *tag) : - common_state(mconfig, type, tag), - m_tmapram(*this, "tmapram"), - m_tmapscroll(*this, "tmapscroll"), - m_tmapram2(*this, "tmapram2"), - m_tmapscroll2(*this, "tmapscroll2"), - m_spriteram(*this, "spriteram"), - m_gfxdecode(*this, "gfxdecode") - { } - - void init_darkhors(); - - void darkhors(machine_config &config); - -protected: - virtual void video_start() override; - -private: - DECLARE_WRITE32_MEMBER(input_sel_w); - DECLARE_READ32_MEMBER(input_r); - DECLARE_WRITE32_MEMBER(out1_w); - - DECLARE_WRITE32_MEMBER(tmapram_w); - DECLARE_WRITE32_MEMBER(tmapram2_w); - - TILE_GET_INFO_MEMBER(get_tile_info_0); - TILE_GET_INFO_MEMBER(get_tile_info_1); - - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); - - void darkhors_map(address_map &map); - - required_shared_ptr<uint32_t> m_tmapram; - required_shared_ptr<uint32_t> m_tmapscroll; - required_shared_ptr<uint32_t> m_tmapram2; - required_shared_ptr<uint32_t> m_tmapscroll2; - required_shared_ptr<uint32_t> m_spriteram; - - required_device<gfxdecode_device> m_gfxdecode; - - tilemap_t *m_tmap; - tilemap_t *m_tmap2; -}; - - -/*************************************************************************** - - Common Functions - -***************************************************************************/ - -READ8_MEMBER(common_state::console_r) -{ - return 0; -} - -WRITE8_MEMBER(common_state::console_w) -{ -} - -READ8_MEMBER(common_state::console_status_r) -{ - // bit 0: 1 = can send to debug console - // bi1 1: 1 = can read from debug console - return 0x3; -} - -uint8_t common_state::read_key(required_ioport_array<8> & key, uint8_t mask) -{ - switch(mask) - { - case 0x01: return key[0]->read(); - case 0x02: return key[1]->read(); - case 0x04: return key[2]->read(); - case 0x08: return key[3]->read(); - case 0x10: return key[4]->read(); - case 0x20: return key[5]->read(); - case 0x40: return key[6]->read(); - case 0x80: return key[7]->read(); - } - return 0xff; -} - -void common_state::debug_out() -{ -// popmessage("OUT: %04X | %04X | %02X--", m_out1 >> 16, m_out2 >> 16, m_out3 >> 24); -} - -/*************************************************************************** - - Video Hardware - (jclub2) - -***************************************************************************/ - -uint32_t jclub2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(m_palette->black_pen(), cliprect); - - m_st0020->update_screen(screen, bitmap, cliprect, true); - - return 0; -} - -/*************************************************************************** - - Video Hardware - (darkhors) - -***************************************************************************/ - -TILE_GET_INFO_MEMBER(darkhors_state::get_tile_info_0) -{ - uint16_t tile = m_tmapram[tile_index] >> 16; - uint16_t color = m_tmapram[tile_index] & 0xffff; - SET_TILE_INFO_MEMBER(0, tile/2, (color & 0x200) ? (color & 0x1ff) : ((color & 0x0ff) * 4) , 0); -} - -TILE_GET_INFO_MEMBER(darkhors_state::get_tile_info_1) -{ - uint16_t tile = m_tmapram2[tile_index] >> 16; - uint16_t color = m_tmapram2[tile_index] & 0xffff; - SET_TILE_INFO_MEMBER(0, tile/2, (color & 0x200) ? (color & 0x1ff) : ((color & 0x0ff) * 4) , 0); -} - -WRITE32_MEMBER(darkhors_state::tmapram_w) -{ - COMBINE_DATA(&m_tmapram[offset]); - m_tmap->mark_tile_dirty(offset); -} -WRITE32_MEMBER(darkhors_state::tmapram2_w) -{ - COMBINE_DATA(&m_tmapram2[offset]); - m_tmap2->mark_tile_dirty(offset); -} - -void darkhors_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - uint32_t *s = m_spriteram; - uint32_t *end = m_spriteram + 0x02000/4; - - for ( ; s < end; s += 8/4 ) - { - int sx = (s[ 0 ] >> 16); - int sy = (s[ 0 ] & 0xffff); - int attr = (s[ 1 ] >> 16); - int code = (s[ 1 ] & 0xffff); - - // List end - if (sx & 0x8000) - break; - - int flipx = 0; - int flipy = 0; - int color = (attr & 0x0200) ? (attr & 0x1ff) : (attr & 0x1ff) * 4; - - // Sign extend the position - sx = (sx & 0x1ff) - (sx & 0x200); - sy = (sy & 0x1ff) - (sy & 0x200); - - sy = -sy; - sy += 0xf8; - - m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, - code/2, color, - flipx, flipy, sx, sy, 0); - } -} - -void darkhors_state::video_start() -{ - common_state::video_start(); - - m_tmap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(darkhors_state::get_tile_info_0)), TILEMAP_SCAN_ROWS, 16,16, 0x40,0x40); - m_tmap2= &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(darkhors_state::get_tile_info_1)), TILEMAP_SCAN_ROWS, 16,16, 0x40,0x40); - m_tmap->set_transparent_pen(0); - m_tmap2->set_transparent_pen(0); - - m_gfxdecode->gfx(0)->set_granularity(64); // 256 colour sprites with palette selectable on 64 colour boundaries -} - -uint32_t darkhors_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - int layers_ctrl = -1; - -#ifdef MAME_DEBUG - if (machine().input().code_pressed(KEYCODE_Z)) - { - int mask = 0; - if (machine().input().code_pressed(KEYCODE_Q)) mask |= 1; - if (machine().input().code_pressed(KEYCODE_W)) mask |= 2; - if (machine().input().code_pressed(KEYCODE_A)) mask |= 4; - if (mask != 0) layers_ctrl &= mask; - } -#endif - - bitmap.fill(m_palette->black_pen(), cliprect); - - m_tmap->set_scrollx(0, (m_tmapscroll[0] >> 16) - 5); - m_tmap->set_scrolly(0, (m_tmapscroll[0] & 0xffff) - 0xff ); - if (layers_ctrl & 1) m_tmap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); - - m_tmap2->set_scrollx(0, (m_tmapscroll2[0] >> 16) - 5); - m_tmap2->set_scrolly(0, (m_tmapscroll2[0] & 0xffff) - 0xff ); - if (layers_ctrl & 2) m_tmap2->draw(screen, bitmap, cliprect, 0, 0); - - if (layers_ctrl & 4) draw_sprites(bitmap,cliprect); - -#ifdef MAME_DEBUG -#if 0 - popmessage("%04X-%04X %04X-%04X %04X-%04X %04X-%04X %04X-%04X %04X-%04X", - m_tmapscroll[0] >> 16, m_tmapscroll[0] & 0xffff, - m_tmapscroll[1] >> 16, m_tmapscroll[1] & 0xffff, - m_tmapscroll[2] >> 16, m_tmapscroll[2] & 0xffff, - m_tmapscroll[3] >> 16, m_tmapscroll[3] & 0xffff, - m_tmapscroll[4] >> 16, m_tmapscroll[4] & 0xffff, - m_tmapscroll[5] >> 16, m_tmapscroll[5] & 0xffff - ); -#endif -#endif - - return 0; -} - -/*************************************************************************** - - Memory Map - -***************************************************************************/ - -// I/O (both older and newer jclub2 hardware) - -WRITE32_MEMBER(jclub2_state::input_sel2_w) -{ - // sometimes 0x80000000 bit is set - // (it is cleared before reading from 4d0000.b / 4d0004.b / 4d0008.b / 4d000c.b) - if (ACCESSING_BITS_16_23) - m_input_sel2 = data >> 16; -} - -WRITE32_MEMBER(jclub2_state::input_sel1_out3_w) -{ - COMBINE_DATA(&m_out3); - - if (ACCESSING_BITS_16_23) - m_input_sel1 = data >> 16; - if (ACCESSING_BITS_24_31) - { - // 0x0800 P2 divider coil - // - - debug_out(); - } -} - -READ32_MEMBER(jclub2_state::p1_r) -{ - uint32_t ret = ioport("P1LOW")->read() & 0x00ffffff; - return ret | (read_key(m_key1, m_input_sel1) << 24); -} - -READ32_MEMBER(jclub2_state::p2_r) -{ - uint32_t ret = ioport("P2LOW")->read() & 0x00ffffff; - return ret | (read_key(m_key2, m_input_sel2) << 24); -} - -WRITE32_MEMBER(jclub2_state::out1_w) -{ - COMBINE_DATA(&m_out1); - if (ACCESSING_BITS_16_31) - { - // 0x1000 P2 hopper rotate - // - - // 0x0200 P1 divider coil - // 0x0100 P2 lockout coil - // 0x0080 P1 lockout coil - // - - // 0x0020 counter meter 6 - // 0x0010 counter meter 1 - // 0x0008 counter meter 4 - // 0x0004 counter meter 3 - // 0x0002 counter meter 5 - // 0x0001 counter meter 2 - - m_hopper2->motor_w( data & 0x10000000); - machine().bookkeeping().coin_lockout_w(1, (~data) & 0x01000000); - machine().bookkeeping().coin_lockout_w(0, (~data) & 0x00800000); - - debug_out(); - } -} - -WRITE32_MEMBER(jclub2_state::out2_w) -{ - COMBINE_DATA(&m_out2); - if (ACCESSING_BITS_16_31) - { - // 0x8000 P1 hopper rotate - - m_hopper1->motor_w(data & 0x80000000); - - debug_out(); - } -} - -// Older hardware (ST-0020 + ST-0016) only - -WRITE32_MEMBER(jclub2o_state::eeprom_s29290_w) -{ - if (data & ~0xff000000) - logerror("%s: Unknown EEPROM bit written %08X\n", machine().describe_context(), data); - - if (ACCESSING_BITS_24_31) - { - // latch the bit - m_eeprom->di_write((data & 0x01000000) >> 24); - - // reset line asserted: reset. - m_eeprom->cs_write((data & 0x08000000) ? ASSERT_LINE : CLEAR_LINE ); - - // clock line asserted: write latch or select next bit to read - m_eeprom->clk_write((data & 0x04000000) ? ASSERT_LINE : CLEAR_LINE ); - } -} - -// 68EC020 <-> ST-0016 - -READ32_MEMBER(jclub2o_state::cmd1_word_r) -{ - m_cmd_stat &= ~0x02; - return m_cmd1 << 24; -} -READ32_MEMBER(jclub2o_state::cmd2_word_r) -{ - m_cmd_stat &= ~0x08; - return m_cmd2 << 24; -} - -READ32_MEMBER(jclub2o_state::cmd_stat_word_r) -{ - return m_cmd_stat << 24; -} - -WRITE32_MEMBER(jclub2o_state::cmd1_word_w) -{ - if (ACCESSING_BITS_24_31) - { - m_cmd_stat |= 0x01; - m_cmd1 = data >> 24; - logerror("%s: cmd1_w %02x\n", machine().describe_context(), m_cmd1); - } -} -WRITE32_MEMBER(jclub2o_state::cmd2_word_w) -{ - if (ACCESSING_BITS_24_31) - { - m_cmd_stat |= 0x04; - m_cmd2 = data >> 24; - logerror("%s: cmd2_w %02x\n", machine().describe_context(), m_cmd2); - } -} - -void jclub2o_state::jclub2o_map(address_map &map) -{ - map(0x000000, 0x27ffff).rom(); - map(0x400000, 0x41ffff).ram().share("nvram"); // battery - - map(0x490000, 0x490003).w(FUNC(jclub2o_state::eeprom_s29290_w)); - - map(0x4a0000, 0x4a0003).w(FUNC(jclub2o_state::out2_w)); -// map(0x4a0010, 0x4a0013).w(FUNC(jclub2o_map::)); -// map(0x4a0020, 0x4a0023).w(FUNC(jclub2o_map::)); -// map(0x4a0030, 0x4a0033).w(FUNC(jclub2o_map::)); - - // ST-0016 - map(0x4b0000, 0x4b0003).rw(FUNC(jclub2o_state::cmd1_word_r), FUNC(jclub2o_state::cmd1_word_w)); - map(0x4b0004, 0x4b0007).rw(FUNC(jclub2o_state::cmd2_word_r), FUNC(jclub2o_state::cmd2_word_w)); - map(0x4b0008, 0x4b000b).r(FUNC(jclub2o_state::cmd_stat_word_r)); - - map(0x4d0000, 0x4d0003).nopr().nopw(); // reads seem unused? this write would go to two 7-segs (but the code is never called) - map(0x4d0004, 0x4d0007).nopr(); - map(0x4d0008, 0x4d000b).nopr(); - map(0x4d000c, 0x4d000f).nopr(); - - map(0x4e0000, 0x4e0003).r(FUNC(jclub2o_state::p2_r)).w(FUNC(jclub2o_state::input_sel2_w)); - - map(0x580000, 0x580003).portr("EEPROM"); - map(0x580004, 0x580007).r(FUNC(jclub2o_state::p1_r)); - map(0x580008, 0x58000b).portr("COIN"); - map(0x58000c, 0x58000f).w(FUNC(jclub2o_state::input_sel1_out3_w)); - map(0x580010, 0x580013).w(FUNC(jclub2o_state::out1_w)); -// map(0x580018, 0x58001b).w(FUNC(jclub2o_map::)); -// map(0x58001c, 0x58001f).w(FUNC(jclub2o_map::)); - - map(0x580200, 0x580201).r("watchdog", FUNC(watchdog_timer_device::reset16_r)); - - map(0x580401, 0x580401).rw(FUNC(jclub2o_state::console_r), FUNC(jclub2o_state::console_w)); - map(0x580421, 0x580421).r(FUNC(jclub2o_state::console_status_r)); //.w(FUNC(jclub2o_map::)); -// map(0x580440, 0x580443).w(FUNC(jclub2o_map::)); - - // ST-0020 - map(0x600000, 0x67ffff).rw(m_st0020, FUNC(st0020_device::sprram_r), FUNC(st0020_device::sprram_w)); - map(0x680000, 0x69ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); - map(0x6a0000, 0x6bffff).ram(); - map(0x6c0000, 0x6c00ff).rw(m_st0020, FUNC(st0020_device::regs_r), FUNC(st0020_device::regs_w)); - map(0x700000, 0x7fffff).rw(m_st0020, FUNC(st0020_device::gfxram_r), FUNC(st0020_device::gfxram_w)); -} - - -// ST-0016 map - -// common rombank? should go in machine/st0016 with larger address space exposed? -WRITE8_MEMBER(jclub2o_state::st0016_rom_bank_w) -{ - m_soundbank->set_entry(data & 0x1f); -} - -READ8_MEMBER(jclub2o_state::cmd1_r) -{ - m_cmd_stat &= ~0x01; - return m_cmd1; -} -READ8_MEMBER(jclub2o_state::cmd2_r) -{ - m_cmd_stat &= ~0x04; - return m_cmd2; -} -READ8_MEMBER(jclub2o_state::cmd_stat_r) -{ - return m_cmd_stat; -} - -WRITE8_MEMBER(jclub2o_state::cmd1_w) -{ - m_cmd1 = data; - m_cmd_stat |= 0x02; - logerror("%s: cmd1_w %02x\n", machine().describe_context(), m_cmd1); -} -WRITE8_MEMBER(jclub2o_state::cmd2_w) -{ - m_cmd2 = data; - m_cmd_stat |= 0x08; - logerror("%s: cmd2_w %02x\n", machine().describe_context(), m_cmd2); -} - -void jclub2o_state::st0016_mem(address_map &map) -{ - map(0x0000, 0x7fff).rom(); - map(0x8000, 0xbfff).bankr("soundbank"); - map(0xe800, 0xe8ff).ram(); - //map(0xe900, 0xe9ff) // sound - internal - //map(0xec00, 0xec1f).rw(FUNC(jclub2o_state::st0016_character_ram_r), FUNC(jclub2o_state::st0016_character_ram_w)); - map(0xf000, 0xffff).ram(); -} - -void jclub2o_state::st0016_io(address_map &map) -{ - map.global_mask(0xff); - //map(0x00, 0xbf).rw(FUNC(jclub2o_state::st0016_vregs_r), FUNC(jclub2o_state::st0016_vregs_w)); - map(0xc0, 0xc0).rw(FUNC(jclub2o_state::cmd1_r), FUNC(jclub2o_state::cmd1_w)); - map(0xc1, 0xc1).rw(FUNC(jclub2o_state::cmd2_r), FUNC(jclub2o_state::cmd2_w)); - map(0xc2, 0xc2).r(FUNC(jclub2o_state::cmd_stat_r)); - map(0xe1, 0xe1).w(FUNC(jclub2o_state::st0016_rom_bank_w)); - map(0xe7, 0xe7).nopw(); // watchdog? - //map(0xf0, 0xf0).r(FUNC(jclub2o_state::st0016_dma_r)); -} - - -// Newer hardware (ST-0032) only - -WRITE32_MEMBER(common_state::eeprom_93c46_w) -{ - if (data & ~0xff000000) - logerror("%s: Unknown EEPROM bit written %08X\n", machine().describe_context(), data); - - if (ACCESSING_BITS_24_31) - { - // latch the bit - m_eeprom->di_write((data & 0x04000000) >> 26); - - // reset line asserted: reset. - m_eeprom->cs_write((data & 0x01000000) ? ASSERT_LINE : CLEAR_LINE ); - - // clock line asserted: write latch or select next bit to read - m_eeprom->clk_write((data & 0x02000000) ? ASSERT_LINE : CLEAR_LINE ); - } -} - -void jclub2_state::jclub2_map(address_map &map) -{ - map(0x000000, 0x27ffff).rom(); - map(0x400000, 0x41ffff).ram().share("nvram"); // battery - - map(0x490000, 0x490003).w(FUNC(jclub2_state::eeprom_93c46_w)); - - map(0x4a0000, 0x4a0003).w(FUNC(jclub2_state::out2_w)); - - map(0x4d0000, 0x4d0003).nopr().nopw(); // reads seem unused? this write would go to two 7-segs (but the code is never called) - map(0x4d0004, 0x4d0007).nopr(); - map(0x4d0008, 0x4d000b).nopr(); - map(0x4d000c, 0x4d000f).nopr(); - - map(0x4e0000, 0x4e0003).r(FUNC(jclub2_state::p2_r)).w(FUNC(jclub2_state::input_sel2_w)); - - map(0x580000, 0x580003).portr("EEPROM"); - map(0x580004, 0x580007).r(FUNC(jclub2_state::p1_r)); - map(0x580008, 0x58000b).portr("COIN"); - map(0x58000c, 0x58000f).w(FUNC(jclub2_state::input_sel1_out3_w)); - map(0x580010, 0x580013).w(FUNC(jclub2_state::out1_w)); -// map(0x580018, 0x58001b).w(FUNC(jclub2_map::)); -// map(0x58001c, 0x58001f).w(FUNC(jclub2_map::)); - - map(0x580200, 0x580201).r("watchdog", FUNC(watchdog_timer_device::reset16_r)); - - map(0x580401, 0x580401).rw(FUNC(jclub2_state::console_r), FUNC(jclub2_state::console_w)); - map(0x580421, 0x580421).r(FUNC(jclub2_state::console_status_r)); //.w(FUNC(jclub2_map::)); -// map(0x580440, 0x580443).w(FUNC(jclub2_map::)); - - // ST-0032 - map(0x800000, 0x87ffff).rw(m_st0020, FUNC(st0020_device::sprram_r), FUNC(st0020_device::sprram_w)); - map(0x880000, 0x89ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); - map(0x8a0000, 0x8bffff).ram(); // this should still be palette ram! - map(0x8c0000, 0x8c00ff).rw(m_st0020, FUNC(st0020_device::regs_r), FUNC(st0020_device::regs_w)); - map(0x8e0000, 0x8e01ff).ram(); // sound? - map(0x8e0200, 0x8e0203).ram(); - map(0x8e0210, 0x8e0213).ram(); - map(0x900000, 0x9fffff).rw(m_st0020, FUNC(st0020_device::gfxram_r), FUNC(st0020_device::gfxram_w)); -} - - -// bootleg darkhors hardware - -WRITE32_MEMBER(darkhors_state::input_sel_w) -{ - if (ACCESSING_BITS_16_23) - m_input_sel1 = data >> 16; - if (ACCESSING_BITS_24_31) - m_input_sel2 = data >> 24; -} - -READ32_MEMBER(darkhors_state::input_r) -{ - return (read_key(m_key1, m_input_sel1) << 16) | - (read_key(m_key2, m_input_sel2) << 24) ; -} - -WRITE32_MEMBER(darkhors_state::out1_w) -{ - COMBINE_DATA(&m_out1); - if (ACCESSING_BITS_16_31) - { - // note: the output test is buggy and crashes - // when pressing start (rts @ 328b8) - - // 0x8000 P2 lockout coil - // 0x4000 P2 divider coil - // 0x2000 P2 hopper rotate - // 0x1000 P1 lockout coil - // 0x0800 P1 divider coil - // 0x0400 P1 hopper rotate - // - - // 0x0100 tower lamp 3 - // 0x0080 tower lamp 2 - // 0x0040 tower lamp 1 - // 0x0020 counter meter 6 - // 0x0010 counter meter 5 - // 0x0008 counter meter 4 - // 0x0004 counter meter 3 - // 0x0002 counter meter 2 - // 0x0001 counter meter 1 - - machine().bookkeeping().coin_lockout_w(1, (~data) & 0x80000000); - machine().bookkeeping().coin_lockout_w(0, (~data) & 0x10000000); - - debug_out(); - } -} - -void darkhors_state::darkhors_map(address_map &map) -{ - map(0x000000, 0x0fffff).rom(); - map(0x400000, 0x41ffff).ram().share("nvram"); // battery - - map(0x490040, 0x490043).w(FUNC(darkhors_state::eeprom_93c46_w)); - map(0x4e0080, 0x4e0083).portr("SERVICE").w(FUNC(darkhors_state::out1_w)); - - map(0x580000, 0x580003).portr("UNKNOWN"); - map(0x580004, 0x580007).portr("COIN"); - map(0x580008, 0x58000b).r(FUNC(darkhors_state::input_r)); - map(0x58000c, 0x58000f).w(FUNC(darkhors_state::input_sel_w)); -// map(0x580010, 0x580013).w(FUNC(darkhors_state::)); -// map(0x580018, 0x58001b).w(FUNC(darkhors_state::)); -// map(0x58001c, 0x58001f).w(FUNC(darkhors_state::)); - map(0x580084, 0x580084).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); -// map(0x58008c, 0x58008f).w(FUNC(darkhors_state::)); - map(0x580200, 0x580201).r("watchdog", FUNC(watchdog_timer_device::reset16_r)); - - map(0x580401, 0x580401).rw(FUNC(darkhors_state::console_r), FUNC(darkhors_state::console_w)); - map(0x580421, 0x580421).r(FUNC(darkhors_state::console_status_r)); - - map(0x800000, 0x86bfff).ram(); - map(0x86c000, 0x86ffff).ram().w(FUNC(darkhors_state::tmapram_w)).share("tmapram"); - map(0x870000, 0x873fff).ram().w(FUNC(darkhors_state::tmapram2_w)).share("tmapram2"); - map(0x874000, 0x87dfff).ram(); - map(0x87e000, 0x87ffff).ram().share("spriteram"); - map(0x880000, 0x89ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); - map(0x8a0000, 0x8bffff).ram(); // this should still be palette ram! - map(0x8c0120, 0x8c012f).writeonly().share("tmapscroll"); - map(0x8c0130, 0x8c013f).writeonly().share("tmapscroll2"); -} - - -/*************************************************************************** - - Input Ports - -***************************************************************************/ - -/*************************************************************************** - Keyboards (39 pressure sensitive keys) - - white---------------------- cyan------------------- - 1-2 1-3 1-4 1-5 1-6 1-7 1-8 2-3 2-4 2-5 2-6 2-7 2-8 - - orange------------- green---------- grey------- yel - 3-4 3-5 3-6 3-7 3-8 4-5 4-6 4-7 4-8 5-6 5-7 5-8 CAN - - cyan--- whi red---------------------------- yellow- - 6-7 6-8 7-8 1 2 3 4 5 6 7 8 PAY STA - -***************************************************************************/ - -static INPUT_PORTS_START( keyboards ) - PORT_START("KEY1.0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 1") PORT_CODE(KEYCODE_1_PAD) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 2") PORT_CODE(KEYCODE_2_PAD) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 3") PORT_CODE(KEYCODE_3_PAD) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 4") PORT_CODE(KEYCODE_4_PAD) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 5") PORT_CODE(KEYCODE_5_PAD) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 6") PORT_CODE(KEYCODE_6_PAD) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 7") PORT_CODE(KEYCODE_7_PAD) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 8") PORT_CODE(KEYCODE_8_PAD) - PORT_START("KEY2.0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 1") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 2") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 3") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 4") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 5") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 6") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 7") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 8") - - PORT_START("KEY1.1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 1-2") PORT_CODE(KEYCODE_Z) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 1-3") PORT_CODE(KEYCODE_A) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 1-4") PORT_CODE(KEYCODE_Q) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 1-5") PORT_CODE(KEYCODE_Y) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 1-6") PORT_CODE(KEYCODE_J) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 1-7") PORT_CODE(KEYCODE_0_PAD) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 1-8") PORT_CODE(KEYCODE_ENTER_PAD) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY2.1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 1-2") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 1-3") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 1-4") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 1-5") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 1-6") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 1-7") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 1-8") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("KEY1.2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 2-3") PORT_CODE(KEYCODE_X) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 2-4") PORT_CODE(KEYCODE_S) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 2-5") PORT_CODE(KEYCODE_W) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 2-6") PORT_CODE(KEYCODE_U) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 2-7") PORT_CODE(KEYCODE_K) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 2-8") PORT_CODE(KEYCODE_DEL_PAD) - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY2.2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 2-3") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 2-4") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 2-5") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 2-6") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 2-7") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 2-8") - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("KEY1.3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 3-4") PORT_CODE(KEYCODE_C) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 3-5") PORT_CODE(KEYCODE_D) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 3-6") PORT_CODE(KEYCODE_E) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 3-7") PORT_CODE(KEYCODE_I) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 3-8") PORT_CODE(KEYCODE_L) - PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY2.3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 3-4") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 3-5") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 3-6") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 3-7") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 3-8") - PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("KEY1.4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 4-5") PORT_CODE(KEYCODE_V) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 4-6") PORT_CODE(KEYCODE_F) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 4-7") PORT_CODE(KEYCODE_R) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 4-8") PORT_CODE(KEYCODE_O) - PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY2.4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 4-5") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 4-6") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 4-7") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 4-8") - PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("KEY1.5") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 5-6") PORT_CODE(KEYCODE_B) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 5-7") PORT_CODE(KEYCODE_G) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 5-8") PORT_CODE(KEYCODE_T) - PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY2.5") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 5-6") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 5-7") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 5-8") - PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("KEY1.6") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 6-7") PORT_CODE(KEYCODE_N) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 6-8") PORT_CODE(KEYCODE_H) - PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY2.6") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 6-7") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 6-8") - PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("KEY1.7") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Bet 7-8") PORT_CODE(KEYCODE_M) - PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("KEY2.7") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Bet 7-8") - PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( jclub2v100 ) - // P2 at 4e0000.b, P1 at 580004.b - PORT_INCLUDE( keyboards ) - - PORT_START("EEPROM") // 580000.w - PORT_BIT( 0x74ff0000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_CONFNAME(0x01000000, 0x01000000, "Coin Chutes Polarity" ) - PORT_CONFSETTING( 0x01000000, DEF_STR( Normal) ) - PORT_CONFSETTING( 0x00000000, "Reverse" ) // warning message - PORT_CONFNAME(0x02000000, 0x02000000, "Main Loop Down" ) - PORT_CONFSETTING( 0x02000000, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x00000000, DEF_STR( On ) ) // Emergency Error 0001 - PORT_CONFNAME(0x08000000, 0x08000000, "System Int Down") - PORT_CONFSETTING( 0x08000000, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x00000000, DEF_STR( On ) ) // Emergency Error 0002 - PORT_BIT( 0x80000000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) - - PORT_START("COIN") // 580008.w - PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Payout") PORT_CODE(KEYCODE_LCONTROL) - PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00400000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper2", ticket_dispenser_device, line_r) // P2 coin out - PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper1", ticket_dispenser_device, line_r) // P1 coin out - PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(15) // P1 coin drop - PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(15) // P2 coin drop - PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE( 5) // P1 coin in s1 - PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(10) // P1 coin in s2 - PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE( 5) // P2 coin in s1 - PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(10) // P2 coin in s2 - - PORT_START("P1LOW") // 580004.w (low byte) - PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Reset Key") PORT_TOGGLE // reset error condition, e.g. coin time-out error - PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Meter Key") PORT_TOGGLE - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Last Game Key") PORT_TOGGLE - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Cancel") PORT_CODE(KEYCODE_LALT) - PORT_SERVICE_NO_TOGGLE( 0x00100000, IP_ACTIVE_LOW ) // test switch (on during boot: service mode, but make sure Config Key is off!) - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_CUSTOM ) // P2 hopper full - PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_CUSTOM ) // P1 hopper full - - PORT_START("P2LOW") // 4e0000.w (low byte) - PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Payout") PORT_CODE(KEYCODE_RCONTROL) - PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Cancel") PORT_CODE(KEYCODE_RALT) - PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNKNOWN ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( jclub2v112 ) - PORT_INCLUDE(jclub2v100) - - PORT_MODIFY("EEPROM") // 580000.w - PORT_BIT( 0x74ff0000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_CONFNAME(0x03000000, 0x03000000, "Backup Battery" ) - PORT_CONFSETTING( 0x00000000, "Off (0)" ) // Hardware Error 0001 - PORT_CONFSETTING( 0x01000000, "Off (1)" ) // "" - PORT_CONFSETTING( 0x02000000, "Low" ) // warning message (checked at boot) - PORT_CONFSETTING( 0x03000000, DEF_STR( On ) ) - PORT_CONFNAME(0x08000000, 0x08000000, "Disable Coins?") // causes lockout and coins to not register (same as an hardware error) - PORT_CONFSETTING( 0x08000000, DEF_STR( Off )) - PORT_CONFSETTING( 0x00000000, DEF_STR( On )) - PORT_BIT( 0x80000000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) -INPUT_PORTS_END - - -static INPUT_PORTS_START( darkhors ) - // P2 at 580008.b, P1 at 580009.b - PORT_INCLUDE( keyboards ) - - // Battery status register reads have been replaced with a constant value (fbff) in the code - - PORT_START("UNKNOWN") // 580000.w - PORT_BIT( 0xff7f0000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("?") PORT_CODE(KEYCODE_RSHIFT) - - PORT_START("COIN") // 580004.w - PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bill 1") PORT_CODE(KEYCODE_BACKSPACE) // P1 bill-in - PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE( 5) // P1 coin in s1 - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(10) // P1 coin in s2 - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(15) // P1 coin drop - PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_CUSTOM ) // P1 hopper full - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_OTHER ) // P1 coin out sensor - PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bill 2") PORT_CODE(KEYCODE_ENTER) // P2 bill-in - PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE( 5) // P2 coin in s1 - PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(10) // P2 coin in s2 - PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(15) // P2 coin drop - PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_CUSTOM ) // P2 hopper full - PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_OTHER ) // P2 coin out sensor - PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("SERVICE") // 4e0080.w - PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("Config Key") PORT_TOGGLE // on during boot: clear backup data (prevents service mode) - PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Reset Key") PORT_TOGGLE // reset error condition, e.g. coin time-out error - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Meter Key") PORT_TOGGLE - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Last Game Key") PORT_TOGGLE - PORT_SERVICE_NO_TOGGLE( 0x00100000, IP_ACTIVE_LOW ) // test switch (on during boot: service mode, but make sure Config Key is off!) - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Door 1") PORT_CODE(KEYCODE_OPENBRACE) PORT_TOGGLE - PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Door 2") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_TOGGLE - PORT_BIT( 0x00800000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) // door 3 in service mode! - PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Payout") PORT_CODE(KEYCODE_LCONTROL) - PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Cancel") PORT_CODE(KEYCODE_LALT) - PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Payout") PORT_CODE(KEYCODE_RCONTROL) - PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Cancel") PORT_CODE(KEYCODE_RALT) - PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80000000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // tested during lev 3 (vblank) interrupt -INPUT_PORTS_END - - -/*************************************************************************** - - Gfx Layouts - (darkhors) - -***************************************************************************/ - -static const gfx_layout layout_16x16x8 = -{ - 16,16, - RGN_FRAC(1,4), - 8, - { RGN_FRAC(3,4)+8,RGN_FRAC(3,4)+0, - RGN_FRAC(2,4)+8,RGN_FRAC(2,4)+0, - RGN_FRAC(1,4)+8,RGN_FRAC(1,4)+0, - RGN_FRAC(0,4)+8,RGN_FRAC(0,4)+0 }, - { STEP8(0,1), STEP8(16,1) }, - { STEP16(0,16*2)}, - 16*16*2 -}; - -static GFXDECODE_START( gfx_darkhors ) - GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x8, 0, 0x10000/64 ) // color codes should be doubled -GFXDECODE_END - -/*************************************************************************** - - Machine Drivers - -***************************************************************************/ - -TIMER_DEVICE_CALLBACK_MEMBER(common_state::scanline_irq) -{ - int scanline = param; - - if (scanline == 248) - m_maincpu->set_input_line(5, HOLD_LINE); - - if (scanline == 0) - m_maincpu->set_input_line(3, HOLD_LINE); - - if (scanline == 128) - m_maincpu->set_input_line(4, HOLD_LINE); -} - -// Older hardware (ST-0020 + ST-0016) -void jclub2o_state::jclub2o(machine_config &config) -{ - M68EC020(config, m_maincpu, 12000000); - m_maincpu->set_addrmap(AS_PROGRAM, &jclub2o_state::jclub2o_map); - TIMER(config, "scantimer").configure_scanline(FUNC(common_state::scanline_irq), "screen", 0, 1); - - ST0016_CPU(config, m_soundcpu, 8000000); - m_soundcpu->set_addrmap(AS_PROGRAM, &jclub2o_state::st0016_mem); - m_soundcpu->set_addrmap(AS_IO, &jclub2o_state::st0016_io); - m_soundcpu->set_vblank_int("screen", FUNC(jclub2o_state::irq0_line_hold)); - - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - EEPROM_S29290_16BIT(config, "eeprom"); - WATCHDOG_TIMER(config, "watchdog"); - - TICKET_DISPENSER(config, m_hopper1, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); - TICKET_DISPENSER(config, m_hopper2, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); - - // video hardware - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(0x190, 0x100+16); - screen.set_visarea(0, 0x190-1, 0x10, 0x100-1); - screen.set_screen_update(FUNC(jclub2_state::screen_update)); - screen.set_palette(m_palette); - - PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x10000); - - ST0020_SPRITES(config, m_st0020, 0); - m_st0020->set_is_jclub2(1); - m_st0020->set_palette(m_palette); - - // layout - config.set_default_layout(layout_jclub2o); -} - - -// Newer hardware (ST-0032) -void jclub2_state::jclub2(machine_config &config) -{ - M68EC020(config, m_maincpu, 12000000); - m_maincpu->set_addrmap(AS_PROGRAM, &jclub2_state::jclub2_map); - TIMER(config, "scantimer").configure_scanline(FUNC(common_state::scanline_irq), "screen", 0, 1); - - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - EEPROM_93C46_8BIT(config, "eeprom"); - WATCHDOG_TIMER(config, "watchdog"); - - TICKET_DISPENSER(config, m_hopper1, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); - TICKET_DISPENSER(config, m_hopper2, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); - - // video hardware - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(0x190, 0x100+16); - screen.set_visarea(0, 0x190-1, 8, 0x100-8-1); - screen.set_screen_update(FUNC(jclub2_state::screen_update)); - screen.set_palette(m_palette); - - PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x10000); - - // NOT an ST0020 but instead ST0032, ram format isn't compatible at least - ST0020_SPRITES(config, m_st0020, 0); - m_st0020->set_is_st0032(1); - m_st0020->set_is_jclub2(1); // offsets - m_st0020->set_palette(m_palette); - - // layout - config.set_default_layout(layout_jclub2o); -} - - -void darkhors_state::darkhors(machine_config &config) -{ - M68EC020(config, m_maincpu, 12000000); // 36MHz/3 ?? - m_maincpu->set_addrmap(AS_PROGRAM, &darkhors_state::darkhors_map); - TIMER(config, "scantimer").configure_scanline(FUNC(common_state::scanline_irq), "screen", 0, 1); - - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - EEPROM_93C46_8BIT(config, "eeprom"); - WATCHDOG_TIMER(config, "watchdog"); - - TICKET_DISPENSER(config, m_hopper1, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); - TICKET_DISPENSER(config, m_hopper2, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); - - // video hardware - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(0x190, 0x100+16); - screen.set_visarea(0, 0x190-1, 8, 0x100-8-1); - screen.set_screen_update(FUNC(darkhors_state::screen_update)); - screen.set_palette(m_palette); - - PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x10000); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_darkhors); - - // layout - config.set_default_layout(layout_jclub2); - - // sound hardware - SPEAKER(config, "mono").front_center(); - - OKIM6295(config, "oki", 528000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 not verified -} - - -/*************************************************************************** - - ROMs Loading - -***************************************************************************/ - -/*************************************************************************** - -Jockey Club II by SETA 1994-1995 - -Other hardware version (older): - -Main PCB : E06-00409 -Sub PCB : E06-00407 (I/O, nothing else) - -Main CPU : MC68EC020FG16 - -Many XTALs : 48.0000 MHz, 33.3333 MHz, 4.91520 MHz, 42.9545 MHz(x2), 105.0000 MHz - (the 105.0000 Xtal is sometimes replaced by a tiny pcb silkscreened 108.0000 MHz(!), with ICS ICS1494N, MB3771 and 14.3181 MHz Xtal) - -Graphics : SETA ST-0020 - -Others : SETA ST-0013 - SETA ST-0016 <-- z80 core + simple gfx + sound, see st0016.cpp - SETA ST-0017 - -Rams : Toshiba TC514800AJ-70 - Toshiba TC514000ASJ-70 (x8) - Sharp LH5168D - -Eproms : SX006A-01.u26, JC2-110x.u27, SX006-04.u87 (sound) - SX006B-01.u26, JC2-110x.u27, SX006-04.u87 (sound) - SX006A-01.u26, JC2-112x.u27, SX006-04.u87 (sound) - SX006B-01.u26, JC2-112x.u27, SX006-04.u87 (sound) - (u26 read as 5716200) - -Provided to you by Belgium Dump Team Gerald (COY) on 18/01/2007. - -***************************************************************************/ - -#define JCLUB2O_SOUND_ROMS \ - ROM_REGION( 0x80000, "soundcpu", 0 ) /* z80 core (used for sound) */ \ - ROM_LOAD( "sx006-04.u87", 0x00000, 0x80000, CRC(a87adedd) SHA1(1cd5af2d03738fff2230b46241659179467c828c) ) /* SoundDriverV1.26 */ - -ROM_START( jclub2v100 ) - JCLUB2O_SOUND_ROMS - ROM_REGION( 0x280000, "maincpu", 0 ) - ROM_LOAD16_WORD_SWAP( "sx006a-01.u26", 0x000000, 0x200000, CRC(55e249bc) SHA1(ed0f066ed17f047760b712cbbfba1a62d4b452ba) ) // v1.00 (1994 ' ' 100, 5 OCT. 1994) - ROM_FILL( 0x200000, 0x080000, 0xff) // no upgrade rom - - ROM_REGION16_BE( 0x100, "eeprom", 0 ) - // 1.00 - ROM_LOAD16_WORD_SWAP( "eeprom_jc2v100", 0x000, 0x100, CRC(1ced2e6c) SHA1(7bc7d40a9fde3256c52db5db2ad28a036557b99a) ) // from MAME (SETA1994JC2 100 ) -ROM_END - -ROM_START( jclub2v101 ) - JCLUB2O_SOUND_ROMS - ROM_REGION( 0x280000, "maincpu", 0 ) - ROM_LOAD16_WORD_SWAP( "sx006b-01.u26", 0x000000, 0x200000, CRC(f730dded) SHA1(efb966dcb98440a072d4825ef2788c85acdfd103) ) // v1.01 (1995 A 101, 20 FEB. 1995) - ROM_FILL( 0x200000, 0x080000, 0xff) // no upgrade rom - - ROM_REGION16_BE( 0x100, "eeprom", 0 ) - // 1.01 (JC2A) - ROM_LOAD16_WORD_SWAP( "eeprom_jc2v101", 0x000, 0x100, CRC(2960b967) SHA1(8089ffea7d3fe5a558cccad9e285978c8099ba26) ) // from MAME (SETA1995JC2A101 ) -ROM_END - -ROM_START( jclub2v110 ) - JCLUB2O_SOUND_ROMS - ROM_REGION( 0x280000, "maincpu", 0 ) - ROM_LOAD16_WORD_SWAP( "sx006b-01.u26", 0x000000, 0x200000, CRC(f730dded) SHA1(efb966dcb98440a072d4825ef2788c85acdfd103) ) // v1.01 (1995 A 101, 20 FEB. 1995) - ROM_LOAD16_WORD_SWAP( "jc2-110x.u27", 0x200000, 0x080000, CRC(03aa6882) SHA1(e0343bc77a19994ddafa614891663b40e1476332) ) // v1.10X (1996 2/3 110, 5 MAY. 1996) - - ROM_REGION16_BE( 0x100, "eeprom", 0 ) - // 1.10X (JC22110 ) - ROM_LOAD16_WORD_SWAP( "eeprom_jc2v110", 0x000, 0x100, CRC(ea23dfb2) SHA1(de3d771024c55f907e32bb313eaa9d28b3a9d533) ) // from MAME (SETA1996JC22110 ) -ROM_END - -ROM_START( jclub2v112 ) - JCLUB2O_SOUND_ROMS - ROM_REGION( 0x280000, "maincpu", 0 ) - ROM_LOAD16_WORD_SWAP( "sx006b-01.u26", 0x000000, 0x200000, CRC(f730dded) SHA1(efb966dcb98440a072d4825ef2788c85acdfd103) ) // v1.01 (1995 A 101, 20 FEB. 1995) - ROM_LOAD16_WORD_SWAP( "jc2-112x.u27", 0x200000, 0x080000, CRC(e1ab93bd) SHA1(78b618b3f7819bd5351ebf949f328fec7795cec9) ) // v1.12X (1996 4/5 112, 3 JUN. 1996) - - ROM_REGION16_BE( 0x100, "eeprom", 0 ) - // 1.12X (JC24112E) - ROM_LOAD16_WORD_SWAP( "eeprom_jc2v112", 0x000, 0x100, CRC(be1d26f9) SHA1(1b6c6fd1c3298439206d73cb934dd1c30aee8a6c) ) // from MAME (SETA1996JC24112E) -ROM_END - -ROM_START( jclub2v203 ) - JCLUB2O_SOUND_ROMS - ROM_REGION( 0x280000, "maincpu", 0 ) - ROM_LOAD16_WORD_SWAP( "sx006b-01.u26", 0x000000, 0x200000, CRC(f730dded) SHA1(efb966dcb98440a072d4825ef2788c85acdfd103) ) // v1.01 (1995 A 101, 20 FEB. 1995) - ROM_LOAD16_WORD_SWAP( "203x-rom1.u27", 0x200000, 0x080000, CRC(7446ed3e) SHA1(b0936e42549280e2965159270429c4fdacba114a) ) // v2.03X (1997 6 203, 26 MAR. 1997) Release Candidate - - ROM_REGION16_BE( 0x100, "eeprom", 0 ) - // 2.03X (JC26203 :00020400C5IK) -// ROM_LOAD16_WORD_SWAP( "eeprom-jclub2o.bin", 0x000, 0x100, CRC(dd1c88ec) SHA1(acb67e41e832f203361e0f93afcd4eaf963fd13e) ) // dump (SETA1997JC26203 ) - ROM_LOAD16_WORD_SWAP( "eeprom_jc2v203", 0x000, 0x100, CRC(c1bc58e7) SHA1(4670c94fd655d223f21254167e4334b81affdf8d) ) // from MAME (SETA1997JC26203 ) -ROM_END - -/*************************************************************************** - -Jockey Club II by SETA 1996 - -PCB : E79-001 rev 01a (Newer) - -Main CPU : MC68EC020FG16 - -Graphics : SETA ST-0032 70C600JF505 - -Others : SETA ST-0013 - SETA ST-0017 - -XTALs : 42.9545 MHz, 60.0000 MHz, 33.3333 MHz - -Rams : Toshiba : TC5118160CJ-60 (x3) - NKK N341256SJ-15 (x2) - NEC D43001GU-70LL (x4) - -Gals : gal16V8B(x2) ref : M88-03 M88-04 - -Eeprom : 93c46 - -Eproms : M88-01.u38, M88-02.u6 (1st set) - M88-01A.u38, M88-02.u6 (2nd set) - M88-01B.u38, M88-02.u6 (3rd set) - M88-01.u38, M88-02.u6, Z201x.u39 (4th set) - M88-01A.u38, M88-02.u6, M88-03D.u39 (5th set) - M88-01B.u38, M88-02.u6, M88-03D.u39 (6th set) - (u6 read as 578200) - -Provided to you by Belgium Dump Team Gerald (COY) on 18/01/2007. - -***************************************************************************/ - -#define JCLUB2_OTHER_ROMS \ - ROM_REGION( 0x100000, "samples", 0 ) \ - ROM_LOAD( "m88-02.u6", 0x00000, 0x100000, CRC(0dd3436a) SHA1(809d3b7a26d36f71da04036fd8ab5d0c5089392a) ) \ - \ - ROM_REGION( 0x117, "pld", 0 ) \ - ROM_LOAD( "gal16v8b-m88-03.bin", 0x000, 0x117, CRC(6d9c882e) SHA1(84cb95ab540290c2f8b740668360e9c643a67dcf) ) \ - ROM_LOAD( "gal16v8b-m88-04.bin", 0x000, 0x117, CRC(5e79f292) SHA1(5e44c234e2b15d486a1af71fee986892aa245b4d) ) - -ROM_START( jclub2v200 ) - JCLUB2_OTHER_ROMS - ROM_REGION( 0x280000, "maincpu", 0 ) - ROM_LOAD16_WORD_SWAP( "m88-01.u38", 0x000000, 0x200000, CRC(84476b68) SHA1(1014d23d3cebbfa9aa3bfb90505529989a8eedfa) ) // v2.00 (1996 Z 200 , 27 SEP. 1996) - ROM_FILL( 0x200000, 0x080000, 0xff) // no upgrade rom - - ROM_REGION( 0x80, "eeprom", 0 ) - // 2.00 (JC2Z200 :0000000004HQ) - ROM_LOAD( "eeprom_jc2v200", 0x00, 0x80, CRC(90cc44da) SHA1(5c43d88009537884112950544fc74874cd0e745c) ) // from MAME (SETA1996JC2Z200 ) -ROM_END - -ROM_START( jclub2v201 ) - JCLUB2_OTHER_ROMS - ROM_REGION( 0x280000, "maincpu", 0 ) - ROM_LOAD16_WORD_SWAP( "m88-01.u38", 0x000000, 0x200000, CRC(84476b68) SHA1(1014d23d3cebbfa9aa3bfb90505529989a8eedfa) ) // v2.00 (1996 Z 200 , 27 SEP. 1996) - ROM_LOAD16_WORD_SWAP( "z201x.u39", 0x200000, 0x080000, CRC(1fb79c16) SHA1(c8914f7dfc17c412f6ca756f8eb6d6a35e3b6214) ) // v2.01X (1996 Z 201 , 20 NOV. 1996) - - ROM_REGION( 0x80, "eeprom", 0 ) - // 2.01X (JC2Z201 :00000400248Q) - ROM_LOAD( "eeprom_jc2v201", 0x00, 0x80, CRC(e81deb16) SHA1(f96c7953e7c5221f6c1cfccc7aa331e7453eca00) ) // from MAME (SETA1996JC2Z201 ) -ROM_END - -ROM_START( jclub2v204 ) - JCLUB2_OTHER_ROMS - ROM_REGION( 0x280000, "maincpu", 0 ) - ROM_LOAD16_WORD_SWAP( "m88-01a.u38", 0x000000, 0x200000, CRC(c1243e1c) SHA1(2a5857738b8950daf77ddaa8304b765f809f8241) ) // v2.04 (1997 Z 2040, 30 APR. 1997) - ROM_FILL( 0x200000, 0x080000, 0xff) // no upgrade rom - - ROM_REGION( 0x80, "eeprom", 0 ) - // 2.04 (JC2Z2040:00000400248Q) - ROM_LOAD( "eeprom_jc2v204", 0x00, 0x80, CRC(fb25ba0f) SHA1(14c8951648e77cf9abe61ad4399d9be8abc93b2a) ) // from MAME (SETA1997JC2Z2040) -ROM_END - -ROM_START( jclub2v205 ) - JCLUB2_OTHER_ROMS - ROM_REGION( 0x280000, "maincpu", 0 ) - ROM_LOAD16_WORD_SWAP( "m88-01b.u38", 0x000000, 0x200000, CRC(f1054c69) SHA1(be6d92653f0d3cc0a36a2ff0798043f4a95439bc) ) // v2.05 (1997 Z 2050, 21 JUL. 1997) - ROM_FILL( 0x200000, 0x080000, 0xff) // no upgrade rom - - ROM_REGION( 0x80, "eeprom", 0 ) - // 2.05 (JC2Z2050:00000400248Q) - ROM_LOAD( "eeprom_jc2v205", 0x00, 0x80, CRC(9f1fdcd5) SHA1(8e492c6450c56859f582ed89b384caa979a912f0) ) // from MAME (SETA1997JC2Z2050) -ROM_END - -ROM_START( jclub2v220 ) - JCLUB2_OTHER_ROMS - ROM_REGION( 0x280000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD16_WORD_SWAP( "m88-01b.u38", 0x000000, 0x200000, CRC(f1054c69) SHA1(be6d92653f0d3cc0a36a2ff0798043f4a95439bc) ) // v2.05 (1997 Z 2050, 21 JUL. 1997) - ROM_LOAD16_WORD_SWAP( "m88-03d.u39", 0x200000, 0x080000, CRC(723dd22b) SHA1(0ca622e0dd315f29e72dd9b82fb419d306ec5df8) ) // v2.20X (1997 Z 2201, 14 APR. 1998) - - ROM_REGION( 0x80, "eeprom", 0 ) - // 2.20X (JC2Z2201:00000400248Q) - ROM_LOAD( "eeprom_jc2v220", 0x00, 0x80, CRC(bde1f064) SHA1(a9b6cfabcc63b1429c4e0c9b162ce7be60c3c515) ) // from MAME (SETA1997JC2Z2201) -ROM_END - -/*************************************************************************** - -Dark Horse (2001) - -A bootleg of Jockey Club II on inferior hardware - -|-----------------------------------------------------------| -| M6295 SND GM76C512 GM76C512 |-------| | -| GM76C512 GM76C512 |ACTEL | | -| EEPROM PRG1 GM76C512 GM76C512 |A40MX04| | -| GM76C512 GM76C512 | | | -| PRG2 |-------| | -| |-------| 62256 GM71C4260 | -| |ACTEL | 3.6V_BATT 62256 GM71C4260 | -| |A40MX04| 68EC020 GAL | -| | | GAL GAL | -|J |-------| | -|A GFX1 GFX2 | -|M | -|M GFX3 | -|A | -| GFX4 | -| 62256 | -| GFX5 | -| 62256 |-------| | -| 62256 |ACTEL | GFX6 | -| |A42MX09| | -| 62256 | | GFX7 | -| |-------| | -| GAL GFX8 | -| GAL | -| 36MHz | -|-----------------------------------------------------------| - -***************************************************************************/ - -ROM_START( darkhors ) - ROM_REGION( 0x100000, "maincpu", 0 ) // 68EC020 code - ROM_LOAD32_WORD_SWAP( "prg2", 0x00000, 0x80000, CRC(f2ec5818) SHA1(326937a331496880f517f41b0b8ab54e55fd7af7) ) // 27 JUN. 1997 - ROM_LOAD32_WORD_SWAP( "prg1", 0x00002, 0x80000, CRC(b80f8f59) SHA1(abc26dd8b36da0d510978364febe385f69fb317f) ) - - ROM_REGION( 0x400000, "gfx1", 0 ) - ROM_LOAD( "gfx1", 0x000000, 0x80000, CRC(e9fe9967) SHA1(a79d75c09f0eac6372de8d6e98c5eecf38ef750c) ) - ROM_LOAD( "gfx2", 0x080000, 0x80000, CRC(0853c5c5) SHA1(2b49ffe607278817f1f8219a79f5906be53ee6f4) ) - ROM_LOAD( "gfx3", 0x100000, 0x80000, CRC(6e89278f) SHA1(044c15e00ea95fd3f108fa916000a1000789c8e8) ) - ROM_LOAD( "gfx4", 0x180000, 0x80000, CRC(f28407ab) SHA1(47933719cff8099fc079fd736b4b08176f3aff66) ) - ROM_LOAD( "gfx5", 0x200000, 0x80000, CRC(281402cd) SHA1(77f8e5e02c6e7161299c06e65a078c1cdda1ba66) ) - ROM_LOAD( "gfx6", 0x280000, 0x80000, CRC(8ea0149b) SHA1(7792fd7e07a7baa4e15f50b6528c78fb15b40b40) ) - ROM_LOAD( "gfx7", 0x300000, 0x80000, BAD_DUMP CRC(504bf849) SHA1(13a184ec9e176371808938015111f8918cb4df7d) ) // FIXED BITS (11111111) - ROM_FILL( 0x300000, 0x80000, 0x00 ) // a zero-fill seems fine - ROM_LOAD( "gfx8", 0x380000, 0x80000, CRC(590bec2a) SHA1(7fdbb21f1a3eccde65e91eb2443a0e01487c59c3) ) // 000xxxxxxxxxxxxxxxx = 0x00 - - ROM_REGION( 0x80000, "oki", 0 ) // Samples - ROM_LOAD( "snd", 0x00000, 0x80000, CRC(7aeb12d3) SHA1(3e81725fc206baa7559da87552a0cd73b7616155) ) - - ROM_REGION( 0x80, "eeprom", 0 ) // EEPROM - ROM_LOAD( "eeprom", 0x000, 0x080, CRC(1f434f66) SHA1(e1bee11d83fb72aed9c312bdc794d8b9a6645534) ) // (SETA1997JC2W400 ) -ROM_END - - -/*************************************************************************** - - Game Drivers - -***************************************************************************/ - -void jclub2o_state::init_jclub2o() -{ - m_soundbank->configure_entries(0, 32, memregion("soundcpu")->base(), 0x4000); -} - -void darkhors_state::init_darkhors() -{ - // the dumped eeprom bytes are in a different order to how MAME expects them to be!? - // (offset 0x00, 0x40, 0x01, 0x41, 0x02, 0x42 ..... ) - // The eeprom contains the game ID, which must be valid for it to boot - uint8_t *eeprom = (uint8_t *)memregion("eeprom")->base(); - if (eeprom) - { - size_t len = memregion("eeprom")->bytes(); - std::vector<uint8_t> temp(len); - - for (int i = 0; i < len; i++) - temp[i] = eeprom[bitswap<8>(i,7,5,4,3,2,1,0,6)]; - - memcpy(eeprom, &temp[0], len); - } -} - -} // anonymous namespace - - -// Older hardware (ST-0020 + ST-0016) -GAME( 1994, jclub2v100, jclub2v112, jclub2o, jclub2v100, jclub2o_state, init_jclub2o, ROT0, "Seta", "Jockey Club II (v1.00, older hardware)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1995, jclub2v101, jclub2v112, jclub2o, jclub2v100, jclub2o_state, init_jclub2o, ROT0, "Seta", "Jockey Club II (v1.01, older hardware)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1996, jclub2v110, jclub2v112, jclub2o, jclub2v100, jclub2o_state, init_jclub2o, ROT0, "Seta", "Jockey Club II (v1.10X, older hardware)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1996, jclub2v112, 0, jclub2o, jclub2v112, jclub2o_state, init_jclub2o, ROT0, "Seta", "Jockey Club II (v1.12X, older hardware)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1997, jclub2v203, jclub2v112, jclub2o, jclub2v112, jclub2o_state, init_jclub2o, ROT0, "Seta", "Jockey Club II (v2.03X RC, older hardware, prototype)", MACHINE_IMPERFECT_GRAPHICS ) -// Newer hardware (ST-0032) -GAME( 1996, jclub2v200, jclub2v112, jclub2, jclub2v112, jclub2_state, empty_init, ROT0, "Seta", "Jockey Club II (v2.00, newer hardware)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) -GAME( 1996, jclub2v201, jclub2v112, jclub2, jclub2v112, jclub2_state, empty_init, ROT0, "Seta", "Jockey Club II (v2.01X, newer hardware)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) -GAME( 1997, jclub2v204, jclub2v112, jclub2, jclub2v112, jclub2_state, empty_init, ROT0, "Seta", "Jockey Club II (v2.04, newer hardware)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) -GAME( 1997, jclub2v205, jclub2v112, jclub2, jclub2v112, jclub2_state, empty_init, ROT0, "Seta", "Jockey Club II (v2.05, newer hardware)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) -GAME( 1998, jclub2v220, jclub2v112, jclub2, jclub2v112, jclub2_state, empty_init, ROT0, "Seta", "Jockey Club II (v2.20X, newer hardware)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) -// Bootleg hardware -GAME( 2001, darkhors, jclub2v112, darkhors, darkhors, darkhors_state, init_darkhors, ROT0, "bootleg", "Dark Horse (USA v4.00, bootleg of Jockey Club II)", MACHINE_IMPERFECT_GRAPHICS ) |