// license:BSD-3-Clause // copyright-holders:Roberto Fresca // thanks-to:Tomasz Slanina, Rob Ragon /********************************************************************************** Major Poker / Major Joker 1994 PAL System. Driver by Roberto Fresca. Special thanks to Tomasz Slanina & Rob Ragon for their invaluable help. *********************************************************************************** Hardware Notes: -------------- 1x Z80 @ 6 MHz. (main CPU) 1x OKI M6295 @ 1.5 MHz. (4 channel mixing ADPCM voice synthesis). Pin7 high. 1x Hitachi HD6845 (CRT Controller) @ 750 kHz. Hs 15625 Hz. Vs 52.786 Hz. 1x Logic box (like CPU boxes) with 5 PLDs, maybe for protection. 2x MB8464 (Video?)8Kx8 1x MB8416 (NVRAM) 2Kx8 1x MB8464 (?) 8Kx8 2x 27C040 (Roms 1 & 2) (GFX ROMs). 2x 27C010 (Roms 3 & 4) (GFX ROMs). 1x 27C020 (Rom 5) (4-bit ADPCM samples) 1x 27C512 (Rom 6) (main program) 1x Xtal @ 12 MHz. 4x 8 DIP switches banks. 2x switches (SW1, SW2). 1x 2x6-pin male connector. (jumper1) 1x 2x10-pin edge connector. 1x 2x22-pin edge connector. *********************************************************************************** PORTS: ------ 00 W ---> ROM bank. 01 W ---> RAM bank. 02 W ---> RAM bank. 10 R ---> Regular inputs (holds) multiplexed with credits out. 10 W ---> Writes a kind of watchdog (bit4) and mech counters pulses (bits 0-1-2-3). 11 R ---> Read input port (remaining controls). 11 W ---> Writes mux selector. 12 R ---> Read coin/credits port. 12 W ---> Video registers: Normal or Up Down screen (bit6 off/on). Also writes 0xFC & 0x11 at CRTC offsets 0x0C & 0x0D (0's if normal). 13 R ---> Multiplexed port for DIP switches banks. 13 W ---> Lamps out (array a) 14 R ---> Freeze. Switch in bit0 that pause the game when active. Just once active, the code loops till the bit resets. 14 W ---> Lamps out (array b). 50 RW ---> OKI6295 (R/W) 60 W ---> PSG SN76489/96 initialization routines. (Maybe a leftover for different hardware) The offset is initialized with the following sequence: 0x9f, 0xbf, 0xdf, 0xff. Pulses - Port 10h. ------------------ - bits - 7654 3210 ---- ---x Credits Out mech counter. ---- --x- Credits 3 mech counter. ---- -x-- Credits 1 mech counter. ---- x--- Credits 2 mech counter. ---x ---- Watchdog? (constant writes). (*) xxx- ---- Unknown. (*) Tied to a ULN Opto Triac (pin3 solder side edge connector - Lock Out (100V)) Lamps - Array A - Port 13h. --------------------------- - bits - 7654 3210 ---- ---x Hold 1 lamp. ---- --x- Hold 2 lamp. ---- -x-- Hold 3 lamp. ---- x--- Hold 4 lamp. ---x ---- Hold 5 lamp. --x- ---- Big lamp. -x-- ---- Small lamp. x--- ---- Unknown. Lamps - Array B - Port 14h. --------------------------- - bits - 7654 3210 ---- ---x Bet lamp. ---- --x- Draw lamp. ---- -x-- Cancel lamp. ---- x--- Take lamp. ---x ---- Double-Up lamp. --x- ---- Fever lamp. xx-- ---- Unknown. *********************************************************************************** Instructions... (translated from a Japanese flyer) Bonus stage: - 10 fever awarded by three of a kind of 1, 3, or 7. - 15 fever awarded by four of a kind. Slot stage: - 10 bonus stage awarded by three consecutive 1, 3, or 7. - 5 bonus stage awarded by four consecutive numbers other than 1, 3, or 7. If bonus is awarded while you are in bonus stage, odds will be x4. Bonus stage & slot stage: You can get triple & fourth fever points, and you can challenge 3 or 4 times of double-up game by this point. .... Service Mode: F2 to enter the Book/Settings Mode. HOLD1 to move UP. HOLD2 to move DOWN. HOLD3 to move LEFT. HOLD4 to move RIGHT. HOLD5 to move next screen / exit. You can shortcut the DIP settings pressing "0" in Book Mode. HOLD5 to exit. *********************************************************************************** Major Poker: Things that you should know!!! (from "engrish" manual) ------------------------------------------------------------------- The game not stabilise until 10,000 games have been played. As a result, the actual payout % may exceed the set payout % during this period. After the 10,000 games the machine will follow the set payout %. Original game for your location. Analyzer screen #1: Provides you with data regarding games played so far such as numbers of games, number of fevers, etc... Analyzer screen #2: Allows you to adjust various aspects of the game to suit your location. For example you can increase the number of Fever (this does not affect the payout %). Also you can make the dealing speed quicker or slower. Even if you do not adjust the game it is ready to be played. DIP Switches.... .-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----. | DIP Switches #1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+ | OFF Fixed | OFF | | +-------------------------------+-----+-----+-----------------------------------+ | Screen Direction Normal | | OFF | | | Up Down | | ON | | +-------------------------------+-----+-----+-----+-----------------------------+ | Hopper No | | OFF | | | Yes | | ON | | +-------------------------------+-----------+-----+-----+-----------------------+ | Hopper SW Active High | | OFF | | | Low | | ON | | +-------------------------------+-----------------+-----+-----+-----------------+ | Coin Payout Payout SW | | OFF | | | Automatic | | ON | | +-------------------------------+-----------------------+-----+-----+-----------+ | Hold Cancel No | | OFF | | | Yes | | ON | | +-------------------------------+-----------------------------+-----+-----+-----+ | Auto Hold No | | OFF | | | Yes | | ON | | +-------------------------------+-----------------------------------+-----+-----+ | Fever Mode Yes | | OFF | | No | | ON | '-------------------------------+-----------------------------------------+-----' .-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----. | DIP Switches #2 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Payout % 95% | OFF | OFF | OFF | | | 90% | ON | OFF | OFF | | | 85% | OFF | ON | OFF | | | 80% | ON | ON | OFF | | | 75% | OFF | OFF | ON | | | 70% | ON | OFF | ON | | | 65% | OFF | ON | ON | | | 60% | ON | ON | ON | | +-------------------------------+-----+-----+-----+-----+-----+-----------------+ | Min Bet size 1 | | OFF | OFF | | | for Fever 3 | | ON | OFF | | | 5 | | OFF | ON | | | 10 | | ON | ON | | +-------------------------------+-----------------+-----+-----+-----+-----+-----+ | Double-Up Weak | | OFF | OFF | | | Game Difficulty ... | | ON | OFF | | | ... | | OFF | ON | | | Strong | | ON | ON | | +-------------------------------+-----------------------------+-----+-----+-----+ | OFF Fixed | | OFF | '-------------------------------+-----------------------------------------+-----' .-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----. | DIP Switches #3 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Key In 1 Coin - 50 Credits | OFF | OFF | OFF | | | 1 Coin - 5 Credits | ON | OFF | OFF | | | 1 Coin - 10 Credits | OFF | ON | OFF | | | 1 Coin - 20 Credits | ON | ON | OFF | | | 1 Coin - 25 Credits | OFF | OFF | ON | | | 1 Coin - 40 Credits | ON | OFF | ON | | | 1 Coin - 60 Credits | OFF | ON | ON | | | 1 Coin - 100 Credits | ON | ON | ON | | +-------------------------------+-----+-----+-----+-----+-----+-----+-----------+ | Coin-A 1 Coin - 5 Credits | | OFF | OFF | OFF | | | 1 Coin - 1 Credit | | ON | OFF | OFF | | | 1 Coin - 2 Credits | | OFF | ON | OFF | | | 1 Coin - 10 Credits | | ON | ON | OFF | | | 1 Coin - 20 Credits | | OFF | OFF | ON | | | 1 Coin - 25 Credits | | ON | OFF | ON | | | 1 Coin - 40 Credits | | OFF | ON | ON | | | 1 Coin - 50 Credits | | ON | ON | ON | | +-------------------------------+-----------------+-----+-----+-----+-----+-----+ | Credit Limit 5000 | | OFF | OFF | | 10000 | | ON | OFF | | 20000 | | OFF | ON | | 30000 | | ON | ON | '-------------------------------+-----------------------------------+-----+-----' .-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----. | DIP Switches #4 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | +-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +-------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Coin-B 1 Coin - 50 Credits | OFF | OFF | OFF | OFF | | | 1 Coin - 1 Credit | ON | OFF | OFF | OFF | | | 1 Coin - 2 Credits | OFF | ON | OFF | OFF | | | 1 Coin - 4 Credits | ON | ON | OFF | OFF | | | 1 Coin - 5 Credits | OFF | OFF | ON | OFF | | | 1 Coin - 10 Credits | ON | OFF | ON | OFF | | | 1 Coin - 20 Credits | OFF | ON | ON | OFF | | | 1 Coin - 25 Credits | ON | ON | ON | OFF | | | 1 Coin - 100 Credits | OFF | OFF | OFF | ON | | | 2 Coins - 1 Credit | ON | OFF | OFF | ON | | | 2 Coins - 5 Credits | OFF | ON | OFF | ON | | | 4 Coins - 1 Credit | ON | ON | OFF | ON | | | 5 Coins - 1 Credit | OFF | OFF | ON | ON | | | 5 Coins - 2 Credits | ON | OFF | ON | ON | | | 10 Coins - 1 Credit | OFF | ON | ON | ON | | | 20 Coins - 1 Credit | ON | ON | ON | ON | | +-------------------------------+-----+-----+-----+-----+-----+-----+-----------+ | Max Bet 20 | | OFF | OFF | | | 10 | | ON | OFF | | | 30 | | OFF | ON | | | 50 | | ON | ON | | +-------------------------------+-----------------------+-----+-----+-----+-----+ | Credit-In Limit No Limit | | OFF | OFF | | 1000 | | ON | OFF | | 2000 | | OFF | ON | | 5000 | | ON | ON | '-------------------------------+-----------------------------------+-----+-----' *********************************************************************************** Power Supply edge connector Layout... .-----------------------+-+--+---------------------------. | Components side |L|PN| Solder side | +-----------------------+-+--+---------------------------+ | GND |A|01| GND | | GND |B|02| GND | | +5V |C|03| +5V | | +5V |D|04| +5V | | Lamp BET |E|05| Lamp HOLD 1 | | +12V |F|06| +12V | | Lamp DEAL |H|07| Lamp HOLD 2 | | Lamp CANCEL |J|08| Lamp HOLD 3 | | Lamp TAKE SCORE |K|09| Lamp HOLD 4 | | Lamp DOUBLE UP |L|10| Lamp HOLD 5 | '-----------------------+-+--+---------------------------' Edge connector Layout... .-----------------------+-+--+---------------------------. | Components side |L|PN| Solder side | +-----------------------+-+--+---------------------------+ | Out Counter |A|01| AC 100V In | | Key In Counter |B|02| AC Out to Hopper | | Coin In Counter A |C|03| Lock Out (100V) | | Sound GND |D|04| Sound Out | | HOLD 5 / SMALL |E|05| Payout | | Key In |F|06| HOLD 2 | | HOLD 3 |H|07| Coin B In | | HOLD 4 |J|08| HOLD 1 / BIG | | |K|09| RED (TV) | | |L|10| GREEN (TV) | | TAKE SCORE |M|11| Sync (TV) | | DOUBLE UP |N|12| BLUE (TV) | | Coin A In |P|13| DEAL | | CANCEL |R|14| Analyzer (Books/Settings) | | * SW2 (Clear Meters) |S|15| BET | | Coin In Counter |T|16| Out of Fever Lamp | | ** GND |U|17| GND ** | | ** GND |V|18| GND ** | | |W|19| GND | | |X|20| | | Hopper Limited SW |Y|21| Hopper Payout | | |Z|22| | '-----------------------+-+--+---------------------------' * Soft SW2 Extension. Traced (undocumented). ** Edge connector pins U, V, 17 and 18 (GND), are tied to Power Supply edge connector pins A, B, 01 and 02. *********************************************************************************** Book / Settings Mode: --------------------- First Screen (Books & Meters): 5C 0 F5C 0 RF 0 FRF 0 SF 0 FSF 0 4C 0 F4C 0 FH 0 FFH 0 FL 0 FFL 0 ST 0 FST 0 3C 0 F3C 0 2P 0 F2P 0 MAIN GAMES 0 FEVER GAMES 0 FEVER OUT 0 S-FEVER GAMES 0 S-FEVER OUT 0 TOTAL BET 0 TOTAL SCORE 0 SCORE%BET 0% W-UP IN 0 W-UP OUT 0 W-UP OUT%IN 0% CREDIT IN 0 CREDIT OUT 0 CREDIT OUT%IN 0% DOWN COUNT 0 TOTAL-CREDIT IN 0 TOTAL-CREDIT OUT 0 TOTAL-CREDIT IN/OUT 0 DATA RESET: In this first screen, press the SW2 to clear all data, except for the Total Credits meters. Second Screen (Settings): MIN NTL MAX FEVER --------------------*-------------------- 5 CARD --------------------*-------------------- ROYAL --------------------*-------------------- STR-FLUSH --------------------*-------------------- 4 CARD --------------------*-------------------- FULL HOUSE --------------------*-------------------- FLUSH --------------------*-------------------- STRAIGHT --------------------*-------------------- 3 CARD --------------------*-------------------- 2 PAIR --------------------*-------------------- NORMAL JKR --------------------*-------------------- FEVER JKR --------------------*-------------------- DEAL SPEED --------------------*-------------------- difficult appear easy appear HOLD 1 (Up) HOLD 2 (Down) HOLD 3 (Left) HOLD 4 (Right) HOLD 5 (Next) Third Screen (Settings): Memory Switches... DEALER OFF ON <--- Girl Dealer. FVR-ANIMATION OFF ON <--- Fever Screen animation. DUP-NUDE OFF ON <--- Double-Up Nude. SLOW-ACTION OFF ON <--- Speed of Cards. KEY-LOCK OFF ON <--- Lock settings leaving only Books. Other revisions may have "JQKA-1PAIR" (Jacks or Better). FVR-SLOT OFF ON <--- Fever's number slot. AMUSEMENT-MODE OFF ON <--- Self explanatory.... 1ST BET 1 5 10 20 30 <--- First Bet. CNT BET 1 5 10 20 30 <--- Second Bet. BACK-RGB R 0 1 2 3 4 5 6 7 <--- Background R component (0 = light, 7 = strong) BACK-RGB G 0 1 2 3 4 5 6 7 <--- Background G component (0 = light, 7 = strong) BACK-RGB B 0 1 2 3 4 5 6 7 <--- Background B component (0 = light, 7 = strong) BACK-PATTERN 0 1 2 3 4 5 6 <--- Background Pattern (0 = None, 1-6 available when dealer is off) HOLD 1 (Up) HOLD 2 (Down) HOLD 3 (Off) HOLD 4 (On) HOLD 5 (Exit) Fourth Screen (DIP switches test): DIP Switch test... DIPSW-1 00000000 00000000 DIPSW-2 00000000 00000000 DIPSW-3 00000000 00000000 DIPSW-4 00000000 00000000 HOLD 5 (Exit) Created of DIP Switch (Green) <--- ????? Test Mode of DIP Switch (White) <--- Show on the fly each DIP switch state. *********************************************************************************** To Do: - Find the input that unlocks the "KEY-LOCK" mode in the settings. - Resistors Network. **********************************************************************************/ #include "emu.h" #include "cpu/z80/z80.h" #include "machine/bankdev.h" #include "machine/nvram.h" #include "sound/okim6295.h" #include "video/mc6845.h" #include "emupal.h" #include "screen.h" #include "speaker.h" #include "tilemap.h" #include "majorpkr.lh" #define MASTER_CLOCK XTAL(12'000'000) #define CPU_CLOCK (MASTER_CLOCK / 2) // 6 MHz, measured. #define OKI_CLOCK (MASTER_CLOCK / 8) // 1.5 MHz, measured. #define CRTC_CLOCK (MASTER_CLOCK / 16) // 750 kHz, measured. class majorpkr_state : public driver_device { public: majorpkr_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_gfxdecode(*this, "gfxdecode"), m_palette_bank(*this, "palette_bank"), m_vram_bank(*this, "vram_bank"), m_rom_bank(*this, "rom_bank"), m_fg_vram(*this, "fg_vram"), m_bg_vram(*this, "bg_vram"), m_lamps(*this, "lamp%u", 0U) { } void majorpkr(machine_config &config); void init_majorpkr(); protected: virtual void machine_start() override { m_lamps.resolve(); } virtual void video_start() override; private: DECLARE_WRITE8_MEMBER(rom_bank_w); DECLARE_WRITE8_MEMBER(palette_bank_w); DECLARE_WRITE8_MEMBER(vram_bank_w); DECLARE_WRITE8_MEMBER(fg_vram_w); DECLARE_WRITE8_MEMBER(bg_vram_w); DECLARE_WRITE8_MEMBER(vidreg_w); DECLARE_READ8_MEMBER(mux_port_r); DECLARE_READ8_MEMBER(mux_port2_r); DECLARE_WRITE8_MEMBER(mux_sel_w); DECLARE_WRITE8_MEMBER(lamps_a_w); DECLARE_WRITE8_MEMBER(lamps_b_w); DECLARE_WRITE8_MEMBER(pulses_w); TILE_GET_INFO_MEMBER(bg_get_tile_info); TILE_GET_INFO_MEMBER(fg_get_tile_info); uint32_t screen_update_majorpkr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void map(address_map &map); void palettebanks(address_map &map); void portmap(address_map &map); void vrambanks(address_map &map); required_device m_gfxdecode; required_device m_palette_bank; required_device m_vram_bank; required_memory_bank m_rom_bank; required_shared_ptr m_fg_vram; required_shared_ptr m_bg_vram; tilemap_t *m_bg_tilemap, *m_fg_tilemap; int m_mux_data; int m_flip_state; output_finder<13> m_lamps; }; /************************* * Video Hardware * *************************/ TILE_GET_INFO_MEMBER(majorpkr_state::bg_get_tile_info) { int code = m_bg_vram[2 * tile_index] + (m_bg_vram[2 * tile_index + 1] << 8); tileinfo.set(0, (code & 0x1fff), code >> 13, 0); } TILE_GET_INFO_MEMBER(majorpkr_state::fg_get_tile_info) { int code = m_fg_vram[2 * tile_index] + (m_fg_vram[2 * tile_index + 1] << 8); tileinfo.set(1, (code & 0x07ff), code >> 13, (code & (1 << 12)) ? (TILE_FLIPX|TILE_FLIPY) : 0); } void majorpkr_state::video_start() { m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(majorpkr_state::bg_get_tile_info)), TILEMAP_SCAN_ROWS, 16, 8, 36, 28); m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(majorpkr_state::fg_get_tile_info)), TILEMAP_SCAN_ROWS, 16, 8, 36, 28); m_fg_tilemap->set_transparent_pen(0); } uint32_t majorpkr_state::screen_update_majorpkr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { m_bg_tilemap->draw(screen, bitmap, cliprect, 0); m_fg_tilemap->draw(screen, bitmap, cliprect, 0); return 0; } /****************************** * R/W Handlers * ******************************/ WRITE8_MEMBER(majorpkr_state::rom_bank_w) { m_rom_bank->set_entry(data & 0x3); if (data & (0x3 ^ 0xff)) logerror("%s: accessing rom bank %02X\n", machine().describe_context(), data); } WRITE8_MEMBER(majorpkr_state::palette_bank_w) { m_palette_bank->set_bank(data & 0x3); if (data & (0x3 ^ 0xff)) logerror("%s: accessing palette bank %02X\n", machine().describe_context(), data); } WRITE8_MEMBER(majorpkr_state::vram_bank_w) { m_vram_bank->set_bank(data & 0x3); if (data & (0x3 ^ 0xff)) logerror("%s: accessing vram bank %02X\n", machine().describe_context(), data); } WRITE8_MEMBER(majorpkr_state::fg_vram_w) { m_fg_vram[offset] = data; m_fg_tilemap->mark_tile_dirty(offset >> 1); } WRITE8_MEMBER(majorpkr_state::bg_vram_w) { m_bg_vram[offset] = data; m_bg_tilemap->mark_tile_dirty(offset >> 1); } WRITE8_MEMBER(majorpkr_state::vidreg_w) { /* If bit6 is active, the screen is drawn upside down. (also 0xfc and 0x11 are written to the CRTC registers 0x0c and 0x0d) So, the CRTC display start address = 0xfc11 */ if (data & 0x40) { /* upside down screen */ m_flip_state = 1; m_bg_tilemap->set_flip(TILEMAP_FLIPX | TILEMAP_FLIPY); m_fg_tilemap->set_flip(TILEMAP_FLIPX | TILEMAP_FLIPY); } /* If bit6 is not active, the screen is drawn normally. (also 0x00 is written to the CRTC registers 0xc0 and 0xd0) So, the CRTC display start address = 0x0000 */ else { /* normal screen */ m_flip_state = 0; m_bg_tilemap->set_flip(0); m_fg_tilemap->set_flip(0); } } /***** Multiplexed Ports *****/ READ8_MEMBER(majorpkr_state::mux_port_r) { switch( (m_mux_data & 0xf0) ) // 00-10-20-30-0F-1F-2F-3F. { case 0x00: return ioport("DSW1")->read(); // confirmed. case 0x10: return ioport("DSW2")->read(); // confirmed. case 0x20: return ioport("DSW3")->read(); // confirmed. case 0x30: return ioport("DSW4")->read(); // confirmed. } return 0xff; } READ8_MEMBER(majorpkr_state::mux_port2_r) { if ((m_mux_data & 0x0f) == 4) { return ioport("IN0-1")->read(); } else { return ioport("IN0-0")->read(); } } WRITE8_MEMBER(majorpkr_state::mux_sel_w) { m_mux_data = data; // 00-10-20-30-0F-1F-2F-3F. } /************************* * Lamps and Pulses * *************************/ WRITE8_MEMBER(majorpkr_state::lamps_a_w) { /* Lamps - Array A. - bits - 7654 3210 ---- ---x Hold 1 lamp. ---- --x- Hold 2 lamp. ---- -x-- Hold 3 lamp. ---- x--- Hold 4 lamp. ---x ---- Hold 5 lamp. --x- ---- Big lamp. -x-- ---- Small lamp. x--- ---- Unknown. */ m_lamps[0] = BIT(data, 0); // Lamp 0: Hold 1. m_lamps[1] = BIT(data, 1); // Lamp 1: Hold 2. m_lamps[2] = BIT(data, 2); // Lamp 2: Hold 3. m_lamps[3] = BIT(data, 3); // Lamp 3: Hold 4. m_lamps[4] = BIT(data, 4); // Lamp 4: Hold 5. m_lamps[5] = BIT(data, 5); // Lamp 5: Big or Small (need identification). m_lamps[6] = BIT(data, 6); // Lamp 6: Big or Small (need identification). if (data & 0x80) logerror("Lamps A: Write to 13h: %02x\n", data); } WRITE8_MEMBER(majorpkr_state::lamps_b_w) { /* Lamps - Array B. - bits - 7654 3210 ---- ---x Bet lamp. ---- --x- Draw lamp. ---- -x-- Cancel lamp. ---- x--- Take lamp. ---x ---- Double-Up lamp. --x- ---- Fever lamp. xx-- ---- Unknown. */ m_lamps[7] = BIT(data, 0); // Lamp 7: Bet. m_lamps[8] = BIT(data, 1); // Lamp 8: Draw. m_lamps[9] = BIT(data, 2); // Lamp 9: Cancel. m_lamps[10] = BIT(data, 3); // Lamp 10: Take. m_lamps[11] = BIT(data, 4); // Lamp 11: D-UP. m_lamps[12] = BIT(data, 5); // Lamp 12: Fever. if (data & 0xc0) logerror("Lamps B: Write to 14h: %02x\n", data); } WRITE8_MEMBER(majorpkr_state::pulses_w) { /* Pulses... - bits - 7654 3210 ---- ---x Credits Out mech counter. ---- --x- Credits 3 mech counter. ---- -x-- Credits 1 mech counter. ---- x--- Credits 2 mech counter. ---x ---- Watchdog? (constant writes). xxx- ---- Unknown. */ machine().bookkeeping().coin_counter_w(3, data & 0x01); // Credits Out (all). machine().bookkeeping().coin_counter_w(2, data & 0x02); // Credits 3. machine().bookkeeping().coin_counter_w(0, data & 0x04); // Credits 1. machine().bookkeeping().coin_counter_w(1, data & 0x08); // Credits 2. if (data & 0xe0) logerror("Pulse: Write to 10h: %02x\n", data); } /************************* * Memory map information * *************************/ void majorpkr_state::map(address_map &map) { map(0x0000, 0xdfff).rom(); map(0xe000, 0xe7ff).bankr("rom_bank"); map(0xe800, 0xefff).ram().share("nvram"); map(0xf000, 0xf7ff).m(m_palette_bank, FUNC(address_map_bank_device::amap8)); map(0xf800, 0xffff).m(m_vram_bank, FUNC(address_map_bank_device::amap8)); } void majorpkr_state::palettebanks(address_map &map) { map(0x0000, 0x1fff).ram().w("palette", FUNC(palette_device::write8)).share("palette"); } void majorpkr_state::vrambanks(address_map &map) { map(0x0000, 0x07ff).ram().w(FUNC(majorpkr_state::fg_vram_w)).share("fg_vram"); map(0x0800, 0x0fff).ram().w(FUNC(majorpkr_state::bg_vram_w)).share("bg_vram"); map(0x1000, 0x1fff).ram(); // spare vram? cleared during boot along with fg and bg } /* 00 W ---> ROM bank. 01 W ---> RAM bank. 02 W ---> RAM bank. 10 R ---> Regular inputs (holds) multiplexed with credits out. 10 W ---> Writes a kind of watchdog (bit4) and mech counters pulses (bits 0-1-2-3). 11 R ---> Read input port (remaining controls). 11 W ---> Writes mux selector. 12 R ---> Read coin/credits port. 12 W ---> Video registers: Normal or Up Down screen (bit6 off/on). Also writes 0xFC & 0x11 at CRTC offsets 0x0C & 0x0D (0's if normal). 13 R ---> Multiplexed port for DIP switches banks. 13 W ---> Lamps out (array a) 14 R ---> Freeze. Switch in bit0 that pause the game when active. Just once active, the code loops till the bit resets. 14 W ---> Lamps out (array b). 50 RW ---> OKI6295 (RW) 60 W ---> PSG SN76489/96 initialization routines. (Maybe a leftover for different hardware). */ void majorpkr_state::portmap(address_map &map) { map.global_mask(0xff); map(0x00, 0x00).w(FUNC(majorpkr_state::rom_bank_w)); map(0x01, 0x01).w(FUNC(majorpkr_state::palette_bank_w)); map(0x02, 0x02).w(FUNC(majorpkr_state::vram_bank_w)); map(0x10, 0x10).r(FUNC(majorpkr_state::mux_port2_r)); // muxed set of controls. map(0x10, 0x10).w(FUNC(majorpkr_state::pulses_w)); // kind of watchdog on bit4... mech counters on bits 0-1-2-3. map(0x11, 0x11).portr("IN1"); map(0x11, 0x11).w(FUNC(majorpkr_state::mux_sel_w)); // multiplexer selector. map(0x12, 0x12).portr("IN2"); map(0x12, 0x12).w(FUNC(majorpkr_state::vidreg_w)); // video registers: normal or up down screen. map(0x13, 0x13).r(FUNC(majorpkr_state::mux_port_r)); // all 4 DIP switches banks multiplexed. map(0x13, 0x13).w(FUNC(majorpkr_state::lamps_a_w)); // lamps a out. map(0x14, 0x14).portr("TEST"); // "freeze" switch. map(0x14, 0x14).w(FUNC(majorpkr_state::lamps_b_w)); // lamps b out. map(0x30, 0x30).w("crtc", FUNC(mc6845_device::address_w)); map(0x31, 0x31).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); map(0x50, 0x50).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x60, 0x60).nopw(); // leftover from a PSG SN76489/96?... } /************************* * Input ports * *************************/ static INPUT_PORTS_START( majorpkr ) PORT_START("IN0-0") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POKER_HOLD1 ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_POKER_HOLD2 ) /* muxed with Key Out */ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_POKER_HOLD3 ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_POKER_HOLD4 ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_POKER_HOLD5 ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_POKER_CANCEL ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_GAMBLE_HIGH ) PORT_NAME("Big") PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_GAMBLE_LOW ) PORT_NAME("Small / DIP Test (In Book Mode)") PORT_START("IN0-1") PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_GAMBLE_KEYOUT ) /* muxed with HOLD 2 */ PORT_BIT( 0xfd, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POKER_BET ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_GAMBLE_DEAL ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_GAMBLE_D_UP ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_GAMBLE_TAKE ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Book/Settings Mode") PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_GAMBLE_PAYOUT ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("UNK 1-PAD") PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("UNK 2-PAD") PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_GAMBLE_KEYIN) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("SW2 (Clear Short-Term Meters)") PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("UNK 4-PAD") PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_CODE(KEYCODE_E) PORT_NAME("Manual Payout") PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("UNK 5-PAD") PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("UNK 6-PAD") PORT_START("DSW1") /* multiplexed x4 & inverted */ PORT_DIPNAME( 0x01, 0x00, "OFF Fixed" ) PORT_DIPLOCATION("DSW1:1") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x01, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x00, "Screen Direction" ) PORT_DIPLOCATION("DSW1:2") /* Activates bit6 at port 0x10 & change CRTC registers */ PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x02, "Up Down" ) PORT_DIPNAME( 0x04, 0x00, "Payout" ) PORT_DIPLOCATION("DSW1:3") /* Hopper: No / Yes (in the manual) */ PORT_DIPSETTING( 0x00, "Automatic" ) PORT_DIPSETTING( 0x04, "Manual" ) PORT_DIPNAME( 0x08, 0x00, "Hopper SW Active" ) PORT_DIPLOCATION("DSW1:4") PORT_DIPSETTING( 0x00, DEF_STR( High ) ) PORT_DIPSETTING( 0x08, DEF_STR( Low ) ) PORT_DIPNAME( 0x10, 0x00, "Auto Max Bet" ) PORT_DIPLOCATION("DSW1:5") /* Coin Payout: Payout SW / Automatic (in the manual) */ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x10, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x20, "Hold Cancel" ) PORT_DIPLOCATION("DSW1:6") /* Inverse from the manual */ PORT_DIPSETTING( 0x20, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPNAME( 0x40, 0x40, "Auto Hold" ) PORT_DIPLOCATION("DSW1:7") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x40, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x00, "Fever Mode" ) PORT_DIPLOCATION("DSW1:8") PORT_DIPSETTING( 0x80, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_START("DSW2") /* multiplexed x4 & inverted */ PORT_DIPNAME( 0x07, 0x00, "Payout %" ) PORT_DIPLOCATION("DSW2:1,2,3") PORT_DIPSETTING( 0x07, "60%" ) PORT_DIPSETTING( 0x06, "65%" ) PORT_DIPSETTING( 0x05, "70%" ) PORT_DIPSETTING( 0x04, "75%" ) PORT_DIPSETTING( 0x03, "80%" ) PORT_DIPSETTING( 0x02, "85%" ) PORT_DIPSETTING( 0x01, "90%" ) PORT_DIPSETTING( 0x00, "95%" ) PORT_DIPNAME( 0x18, 0x00, "Min Bet Size for Fever" ) PORT_DIPLOCATION("DSW2:4,5") PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x08, "3" ) PORT_DIPSETTING( 0x10, "5" ) PORT_DIPSETTING( 0x18, "10" ) PORT_DIPNAME( 0x60, 0x00, "D-UP Game Difficulty" ) PORT_DIPLOCATION("DSW2:6,7") PORT_DIPSETTING( 0x00, "0 (Weak)" ) PORT_DIPSETTING( 0x20, "1" ) PORT_DIPSETTING( 0x40, "2" ) PORT_DIPSETTING( 0x60, "3 (Strong)" ) PORT_DIPNAME( 0x80, 0x00, "OFF Fixed" ) PORT_DIPLOCATION("DSW2:8") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) PORT_START("DSW3") /* multiplexed x4 & inverted */ PORT_DIPNAME( 0x07, 0x00, "Key In" ) PORT_DIPLOCATION("DSW3:1,2,3") PORT_DIPSETTING( 0x01, "5 Credits / Pulse" ) PORT_DIPSETTING( 0x02, "10 Credits / Pulse" ) PORT_DIPSETTING( 0x03, "20 Credits / Pulse" ) PORT_DIPSETTING( 0x04, "25 Credits / Pulse" ) PORT_DIPSETTING( 0x05, "40 Credits / Pulse" ) PORT_DIPSETTING( 0x00, "50 Credits / Pulse" ) PORT_DIPSETTING( 0x06, "60 Credits / Pulse" ) PORT_DIPSETTING( 0x07, "100 Credits / Pulse" ) PORT_DIPNAME( 0x38, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("DSW3:4,5,6") PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x18, "1 Coin/10 Credits" ) PORT_DIPSETTING( 0x20, "1 Coin/20 Credits" ) PORT_DIPSETTING( 0x28, "1 Coin/25 Credits" ) PORT_DIPSETTING( 0x30, "1 Coin/40 Credits" ) PORT_DIPSETTING( 0x38, "1 Coin/50 Credits" ) PORT_DIPNAME( 0xc0, 0x00, "Credit Limit" ) PORT_DIPLOCATION("DSW3:7,8") PORT_DIPSETTING( 0x00, "5000" ) PORT_DIPSETTING( 0x40, "10000" ) PORT_DIPSETTING( 0x80, "20000" ) PORT_DIPSETTING( 0xc0, "30000" ) PORT_START("DSW4") /* multiplexed x4 & inverted */ PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("DSW4:1,2,3,4") PORT_DIPSETTING( 0x0f, "20 Coins/1 Credit" ) PORT_DIPSETTING( 0x0e, "10 Coins/1 Credit" ) PORT_DIPSETTING( 0x0c, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x0b, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0d, "5 Coins/2 Credits" ) PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x0a, DEF_STR( 2C_5C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x05, "1 Coin/10 Credits" ) PORT_DIPSETTING( 0x06, "1 Coin/20 Credits" ) PORT_DIPSETTING( 0x07, "1 Coin/25 Credits" ) PORT_DIPSETTING( 0x00, "1 Coin/50 Credits" ) PORT_DIPSETTING( 0x08, "1 Coin/100 Credits" ) PORT_DIPNAME( 0x30, 0x00, "Max Bet" ) PORT_DIPLOCATION("DSW4:5,6") PORT_DIPSETTING( 0x10, "10" ) PORT_DIPSETTING( 0x00, "20" ) PORT_DIPSETTING( 0x20, "30" ) PORT_DIPSETTING( 0x30, "50" ) PORT_DIPNAME( 0xc0, 0x00, "Credit-In Limit" ) PORT_DIPLOCATION("DSW4:7,8") PORT_DIPSETTING( 0x00, "No Limit" ) PORT_DIPSETTING( 0x40, "1000" ) PORT_DIPSETTING( 0x80, "2000" ) PORT_DIPSETTING( 0xc0, "5000" ) PORT_START("TEST") PORT_DIPNAME( 0x01, 0x00, "Freeze" ) /* Freeze the execution */ PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x01, DEF_STR( On ) ) PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNKNOWN ) INPUT_PORTS_END /************************* * Graphics Layouts * *************************/ static const gfx_layout tilelayout = { 16, 8, RGN_FRAC(1,2), 8, { 0, 1, 2, 3, 4, 5, 6, 7 }, { 0*8, 0*8+RGN_FRAC(1,2), 1*8, 1*8+RGN_FRAC(1,2), 2*8, 2*8+RGN_FRAC(1,2), 3*8, 3*8+RGN_FRAC(1,2), 4*8, 4*8+RGN_FRAC(1,2), 5*8, 5*8+RGN_FRAC(1,2), 6*8, 6*8+RGN_FRAC(1,2), 7*8, 7*8+RGN_FRAC(1,2) }, { 0*8*8, 1*8*8, 2*8*8, 3*8*8, 4*8*8, 5*8*8, 6*8*8, 7*8*8 }, 8*8*8 }; /****************************** * Graphics Decode Information * ******************************/ static GFXDECODE_START( gfx_majorpkr ) GFXDECODE_ENTRY( "bg_gfx", 0, tilelayout, 8*256, 8 ) GFXDECODE_ENTRY( "fg_gfx", 0, tilelayout, 0, 8 ) GFXDECODE_END /************************* * Machine Drivers * *************************/ void majorpkr_state::majorpkr(machine_config &config) { /* basic machine hardware */ z80_device &maincpu(Z80(config, "maincpu", CPU_CLOCK)); // 6 MHz. maincpu.set_addrmap(AS_PROGRAM, &majorpkr_state::map); maincpu.set_addrmap(AS_IO, &majorpkr_state::portmap); maincpu.set_vblank_int("screen", FUNC(majorpkr_state::irq0_line_hold)); ADDRESS_MAP_BANK(config, "palette_bank").set_map(&majorpkr_state::palettebanks).set_options(ENDIANNESS_LITTLE, 8, 13, 0x800); ADDRESS_MAP_BANK(config, "vram_bank").set_map(&majorpkr_state::vrambanks).set_options(ENDIANNESS_LITTLE, 8, 13, 0x800); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_raw(CRTC_CLOCK*16, (47+1)*16, 0, (36*16)-16, (36+1)*8, 0, (28*8)); // from CRTC registers. screen.set_screen_update(FUNC(majorpkr_state::screen_update_majorpkr)); GFXDECODE(config, m_gfxdecode, "palette", gfx_majorpkr); PALETTE(config, "palette").set_format(palette_device::xGRB_555, 0x100 * 16); mc6845_device &crtc(MC6845(config, "crtc", CRTC_CLOCK)); // verified. crtc.set_screen("screen"); crtc.set_show_border_area(false); crtc.set_visarea_adjust(0, -16, 0, 0); crtc.set_char_width(16); /* sound hardware */ SPEAKER(config, "mono").front_center(); OKIM6295(config, "oki", OKI_CLOCK, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 verified. } /************************* * Rom Load * *************************/ /* Major Poker. Original PAL System game. */ ROM_START( majorpkr ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "6_pp_27c512_823b.bin", 0x00000, 0x10000, CRC(a3d5475e) SHA1(cb41508b55da8b8c658a2f2ccc6ebda09db29040) ) ROM_REGION( 0x100000, "bg_gfx", 0 ) ROM_LOAD( "1_27c040_7d3b.bin", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) ROM_LOAD( "2_27c040_6039.bin", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) ROM_REGION( 0x40000, "fg_gfx", 0 ) ROM_LOAD( "3_27c010_af18.bin", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) ROM_LOAD( "4_27c010_92d6.bin", 0x20000, 0x20000, CRC(2e1e0972) SHA1(729dba2ef6ae8a7299c7ceb38835bebb0c42d28e) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "5_27c020_8630.bin", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) ROM_REGION( 0x1000, "plds1", 0 ) // from protection box. ROM_LOAD( "u1_box_palce16v8h.bin", 0x0000, 0x0117, NO_DUMP ) // need to be extracted from the box and cracked... ROM_LOAD( "u2_box_palce16v8h.bin", 0x0200, 0x0117, NO_DUMP ) // need to be extracted from the box and cracked... ROM_LOAD( "u3_box_palce16v8h.bin", 0x0400, 0x0117, NO_DUMP ) // need to be extracted from the box and cracked... ROM_LOAD( "u4_box_palce16v8h.bin", 0x0600, 0x0117, NO_DUMP ) // need to be extracted from the box and cracked... ROM_LOAD( "u5_box_palce20v8h.bin", 0x0800, 0x0157, NO_DUMP ) // need to be extracted from the box and cracked... ROM_REGION( 0x2000, "plds2", 0 ) // from PCB ROM_LOAD( "g1_gal16v8d.bin", 0x0000, 0x0117, CRC(5ec2527a) SHA1(af9832a75efc25578ca79a08fae4bb169d4eb5ec) ) ROM_LOAD( "g2_gal16v8d.bin", 0x0200, 0x0117, CRC(f6a04079) SHA1(fd9e7fac2867de9746138e5aa22fdac10c370d65) ) // protected, but cracked... ROM_LOAD( "g3_gal16v8d.bin", 0x0400, 0x0117, CRC(8b36df82) SHA1(b629557a8ebc88edd9e13372906f393f9fbc0669) ) ROM_LOAD( "g4_gal16v8d.bin", 0x0600, 0x0117, CRC(8b36df82) SHA1(b629557a8ebc88edd9e13372906f393f9fbc0669) ) ROM_LOAD( "g5_gal16v8d.bin", 0x0800, 0x0117, CRC(8b36df82) SHA1(b629557a8ebc88edd9e13372906f393f9fbc0669) ) ROM_LOAD( "g6_gal16v8d.bin", 0x0a00, 0x0117, CRC(5ec2527a) SHA1(af9832a75efc25578ca79a08fae4bb169d4eb5ec) ) ROM_LOAD( "g7_gal20v8b.bin", 0x0c00, 0x0157, CRC(9f45d431) SHA1(c3c9e6ed25a7cd7536974b906c993f5d7a58e65d) ) ROM_LOAD( "g8_gal20v8b.bin", 0x0e00, 0x0157, CRC(9f45d431) SHA1(c3c9e6ed25a7cd7536974b906c993f5d7a58e65d) ) ROM_LOAD( "g9_gal16v8d.bin", 0x1000, 0x0117, CRC(5ec2527a) SHA1(af9832a75efc25578ca79a08fae4bb169d4eb5ec) ) ROM_LOAD( "g10_gal16v8d.bin", 0x1200, 0x0117, CRC(5bdfd9f3) SHA1(5bca47c1fa4b1a6b7d1041a12f98153fc1b23065) ) ROM_END /* Major Poker. Micro Manufacturing intro. Program is totally different. Graphics ROMs are identical to the parent set. */ ROM_START( majorpkra ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "27c512__a.rom6", 0x00000, 0x10000, CRC(0213a933) SHA1(0c3238f037bcbe096c85b5c57ac735d707361f87) ) ROM_REGION( 0x100000, "bg_gfx", 0 ) ROM_LOAD( "27c040.rom1", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) ROM_LOAD( "27c040.rom2", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) ROM_REGION( 0x40000, "fg_gfx", 0 ) ROM_LOAD( "27c1001.rom3", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) ROM_LOAD( "27c1001.rom4", 0x20000, 0x20000, CRC(2e1e0972) SHA1(729dba2ef6ae8a7299c7ceb38835bebb0c42d28e) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "27c2001.rom5", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) ROM_END /* Major Poker. Micro Manufacturing intro. Graphics ROMs are identical to the parent set. Only one byte of difference against set C. Offset 0x38a7 = 0x08 (instead of 0x10). */ ROM_START( majorpkrb ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "27c512__b.rom6", 0x00000, 0x10000, CRC(3ab1e2c2) SHA1(11339fe32bb372f01b0983d2d571440530353b2a) ) ROM_REGION( 0x100000, "bg_gfx", 0 ) ROM_LOAD( "27c040.rom1", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) ROM_LOAD( "27c040.rom2", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) ROM_REGION( 0x40000, "fg_gfx", 0 ) ROM_LOAD( "27c1001.rom3", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) ROM_LOAD( "27c1001.rom4", 0x20000, 0x20000, CRC(2e1e0972) SHA1(729dba2ef6ae8a7299c7ceb38835bebb0c42d28e) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "27c2001.rom5", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) ROM_END /* Major Poker. Micro Manufacturing intro. Graphics ROMs are identical to the parent set. Only one byte of difference against set B. Offset 0x38a7 = 0x10 (instead of 0x08). */ ROM_START( majorpkrc ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "27c512__c.rom6", 0x00000, 0x10000, CRC(7379026b) SHA1(49e4f935ba3d27c70df351e3e61fb94e00f1536e) ) ROM_REGION( 0x100000, "bg_gfx", 0 ) ROM_LOAD( "27c040.rom1", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) ROM_LOAD( "27c040.rom2", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) ROM_REGION( 0x40000, "fg_gfx", 0 ) ROM_LOAD( "27c1001.rom3", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) ROM_LOAD( "27c1001.rom4", 0x20000, 0x20000, CRC(2e1e0972) SHA1(729dba2ef6ae8a7299c7ceb38835bebb0c42d28e) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "27c2001.rom5", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) ROM_END /* Lucky Poker. Looks like a bootleg/hack of Major Joker. Graphics ROMs are identical to the parent set. */ ROM_START( luckypkr ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "27c512__luckypkr.rom6", 0x00000, 0x10000, CRC(e5e6d79d) SHA1(2c4b54d8cc9083cfa1508a73269baff923504778) ) ROM_REGION( 0x100000, "bg_gfx", 0 ) ROM_LOAD( "27c040.rom1", 0x00000, 0x80000, CRC(67299eff) SHA1(34d3d8baf08dea495b699dd63272b445e2acb42d) ) ROM_LOAD( "27c040.rom2", 0x80000, 0x80000, CRC(2d68b177) SHA1(01c934e0383991f2208b915cc5015463a8b6a8fd) ) ROM_REGION( 0x40000, "fg_gfx", 0 ) ROM_LOAD( "27c1001.rom3", 0x00000, 0x20000, CRC(54452bb8) SHA1(9d13c17b85dd0185ba64fc6f90425e0c75363960) ) ROM_LOAD( "27c1001.rom4", 0x20000, 0x20000, CRC(2e1e0972) SHA1(729dba2ef6ae8a7299c7ceb38835bebb0c42d28e) ) ROM_REGION( 0x40000, "oki", 0 ) ROM_LOAD( "27c2001.rom5", 0x00000, 0x40000, CRC(4843858e) SHA1(27629829cf7753d7801a6eb42bb77ca2a467bebd) ) ROM_END /************************* * Driver Init * *************************/ void majorpkr_state::init_majorpkr() { uint8_t *ROM = (uint8_t *)memregion("maincpu")->base(); m_rom_bank->configure_entries(0, 4, &ROM[0xe000], 0x800); } /************************* * Game Drivers * *************************/ /* YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ GAMEL( 1994, majorpkr, 0, majorpkr, majorpkr, majorpkr_state, init_majorpkr, ROT0, "PAL System", "Major Poker (set 1, v2.0)", 0, layout_majorpkr ) GAMEL( 1994, majorpkra, majorpkr, majorpkr, majorpkr, majorpkr_state, init_majorpkr, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 2, Micro Manufacturing intro)", 0, layout_majorpkr ) GAMEL( 1994, majorpkrb, majorpkr, majorpkr, majorpkr, majorpkr_state, init_majorpkr, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 3, Micro Manufacturing intro)", 0, layout_majorpkr ) GAMEL( 1994, majorpkrc, majorpkr, majorpkr, majorpkr, majorpkr_state, init_majorpkr, ROT0, "PAL System / Micro Manufacturing", "Major Poker (set 4, Micro Manufacturing intro)", 0, layout_majorpkr ) GAMEL( 1994, luckypkr, majorpkr, majorpkr, majorpkr, majorpkr_state, init_majorpkr, ROT0, "bootleg", "Lucky Poker (bootleg/hack of Major Poker)", 0, layout_majorpkr )