/*********************************************************************************************** Sega System C/C2 Driver driver by David Haywood and Aaron Giles --------------------------------------- Last Update 15 Nov 2005 Sega's C2 was used between 1989 and 1994, the hardware being very similar to that used by the Sega MegaDrive/Genesis Home Console Sega produced around the same time. todo: fill in protection chip data Year Game Developer Protection Chip Board ==== ==================== ================ =============== ===== 1989 Bloxeed Sega / Elorg C 1990 Columns Sega C 1990 Columns II Sega C 1990 Borench Sega C2 1990 ThunderForce AC Sega / Technosoft C2 1991 Twin Squash Sega C2 1992 Ribbit! Sega C2 1992 Tant-R (Japan) Sega 317-0211 C2 1992 Tant-R (Korea) Sega C2 1992 Puyo Puyo Sega / Compile 317-0203 C2 1994 Ichidant-R (World) Sega C2 1994 Ichidant-R (Japan) Sega C2 1994 Ichidant-R (Korea) Sega C2 1994 PotoPoto (Japan) Sega C2 1994 Puyo Puyo 2 Compile C2 1994 Stack Columns (World) Sega 317-0223 C2 1994 Stack Columns (Japan) Sega C2 1994 Zunzunkyou No Yabou Sega C2 + Print Club Vols 1,2,4,5 (and 3?) Notes: Bloxeed doesn't Read from the Protection Chip at all; all of the other games do. Currently the protection chip is mostly understood, and needs a table of 256 4-bit values for each game. In all cases except for Poto Poto and Puyo Puyo 2, the table is embedded in the code. Workarounds for the other 2 cases are provided. I'm assuming System-C was the Board without the uPD7759 chip and System-C2 was the version of the board with it, this could be completely wrong but it doesn't really matter anyway. Bugs: Puyo Puyo ends up with a black screen after doing memory tests Battery-backed RAM needs to be figured out Thanks: (in no particular order) to any MameDev that helped me out .. (OG, Mish etc.) Charles MacDonald for his C2Emu .. without it working out what were bugs in my code and issues due to protection would have probably killed the driver long ago :p Razoola & Antiriad .. for helping teach me some 68k ASM needed to work out just why the games were crashing :) Sega for producing some Fantastic Games... and anyone else who knows they've contributed :) ************************************************************************************************ Hiscores: Bloxeed @ f400-???? [key = ???] Columns @ fc00-ffff [key = '(C) SEGA 1990.JAN BY.TAKOSUKEZOU' @ fc00,ffe0] Columns2 @ fc00-ffff [key = '(C) SEGA 1990.SEP.COLUMNS2 JAPAN' @ fc00,fd00,fe00,ffe0] Borench @ f400-f5ff [key = 'EIJI' in last word] TForceAC @ 8100-817f/8180-81ff [key = '(c)Tehcno soft90' @ 8070 and 80f0] TantR @ fc00-fcff/fd00-fdff [key = 0xd483 in last word] PuyoPuyo @ fc00-fdff/fe00-ffff [key = 0x28e1 in first word] Ichidant @ fc00-fcff/fd00-fdff [key = 0x85a9 in last word] StkClmns @ fc00-fc7f/fc80-fcff [key = ???] PuyoPuy2 PotoPoto ZunkYou ***********************************************************************************************/ #include "driver.h" #include "cpu/m68000/m68000.h" #include "genesis.h" #define XL1_CLOCK 640000 #define XL2_CLOCK 53693175 #define LOG_PROTECTION 1 #define LOG_PALETTE 0 #define LOG_IOCHIP 0 /****************************************************************************** Global variables ******************************************************************************/ /* internal states */ static UINT8 misc_io_data[0x10]; /* holds values written to the I/O chip */ /* protection-related tracking */ static const UINT32 *prot_table; /* table of protection values */ static UINT8 prot_write_buf; /* remembers what was written */ static UINT8 prot_read_buf; /* remembers what was returned */ /* palette-related variables */ static UINT8 alt_palette_mode; static UINT8 palbank; static UINT8 bg_palbase; static UINT8 sp_palbase; /* sound-related variables */ static UINT8 sound_banks; /* number of sound banks */ static UINT8 bloxeed_sound; /* use kludge for bloxeed sound? */ /****************************************************************************** Machine init ******************************************************************************* This is called at init time, when it's safe to create a timer. We use it to prime the scanline interrupt timer. ******************************************************************************/ static MACHINE_START( segac2 ) { state_save_register_global_array(misc_io_data); state_save_register_global(prot_write_buf); state_save_register_global(prot_read_buf); machine_start_genesis(machine); } static MACHINE_RESET( segac2 ) { /* set up interrupts and such */ machine_reset_genesis(machine); /* determine how many sound banks */ sound_banks = 0; if (memory_region(REGION_SOUND1)) sound_banks = memory_region_length(REGION_SOUND1) / 0x20000; /* reset the protection */ prot_write_buf = 0; prot_read_buf = 0; alt_palette_mode = 0; palbank = 0; bg_palbase = 0; sp_palbase = 0; } /****************************************************************************** Sound handlers ******************************************************************************* These handlers are responsible for communicating with the (genenerally) 8-bit sound chips. All accesses are via the low byte. The Sega C/C2 system uses a YM3438 (compatible with the YM2612) for FM- based music generation, and an SN76489 for PSG and noise effects. The C2 board also appears to have a UPD7759 for sample playback. ******************************************************************************/ /* handle reads from the YM3438 */ static READ16_HANDLER( ym3438_r ) { switch (offset) { case 0: return YM3438_status_port_0_A_r(0); case 1: return YM3438_read_port_0_r(0); case 2: return YM3438_status_port_0_B_r(0); } return 0xff; } /* handle writes to the YM3438 */ static WRITE16_HANDLER( ym3438_w ) { /* only works if we're accessing the low byte */ if (ACCESSING_LSB) { static UINT8 last_port; /* kludge for Bloxeed - it seems to accidentally trip timer 2 */ /* and has no recourse for clearing the interrupt; until we */ /* find more documentation on the 2612/3438, it's unknown what */ /* to do here */ if (bloxeed_sound && last_port == 0x27 && (offset & 1)) data &= ~0x08; switch (offset) { case 0: YM3438_control_port_0_A_w(0, data & 0xff); last_port = data; break; case 1: YM3438_data_port_0_A_w(0, data & 0xff); break; case 2: YM3438_control_port_0_B_w(0, data & 0xff); last_port = data; break; case 3: YM3438_data_port_0_B_w(0, data & 0xff); break; } } } /* handle writes to the UPD7759 */ static WRITE16_HANDLER( segac2_upd7759_w ) { /* make sure we have a UPD chip */ if (!sound_banks) return; /* only works if we're accessing the low byte */ if (ACCESSING_LSB) { upd7759_port_w(0, data & 0xff); upd7759_start_w(0, 0); upd7759_start_w(0, 1); } } /****************************************************************************** Palette RAM Read / Write Handlers ******************************************************************************* The following Read / Write Handlers are used when accessing Palette RAM. The C2 Hardware appears to use 4 Banks of Colours 1 of which can be Mapped to 0x8C0000 - 0x8C03FF at any given time by writes to 0x84000E (This same address also looks to be used for things like Sample Banking) Each Colour uses 15-bits (from a 16-bit word) in the Format xBGRBBBB GGGGRRRR (x = unused, B = Blue, G = Green, R = Red) As this works out the Palette RAM Stores 2048 from a Possible 4096 Colours at any given time. ******************************************************************************/ /* handle reads from the paletteram */ static READ16_HANDLER( palette_r ) { offset &= 0x1ff; if (alt_palette_mode) offset = ((offset << 1) & 0x100) | ((offset << 2) & 0x80) | ((~offset >> 2) & 0x40) | ((offset >> 1) & 0x20) | (offset & 0x1f); return paletteram16[offset + palbank * 0x200]; } /* handle writes to the paletteram */ static WRITE16_HANDLER( palette_w ) { int r,g,b,newword; /* adjust for the palette bank */ offset &= 0x1ff; if (alt_palette_mode) offset = ((offset << 1) & 0x100) | ((offset << 2) & 0x80) | ((~offset >> 2) & 0x40) | ((offset >> 1) & 0x20) | (offset & 0x1f); offset += palbank * 0x200; /* combine data */ COMBINE_DATA(&paletteram16[offset]); newword = paletteram16[offset]; /* up to 8 bits */ r = ((newword << 1) & 0x1e) | ((newword >> 12) & 0x01); g = ((newword >> 3) & 0x1e) | ((newword >> 13) & 0x01); b = ((newword >> 7) & 0x1e) | ((newword >> 14) & 0x01); /* set the color */ palette_set_color_rgb(Machine, offset, pal5bit(r), pal5bit(g), pal5bit(b)); } /****************************************************************************** Palette Tables ******************************************************************************* Both the background and sprites within the VDP have 4 possible palettes to select from. External hardware on the C2 boards, controlled by the EPM5032 chip and the I/O chip, allows for more complex palette selection. The actual palette entry comes from: Bits 10-9 = output from I/O port H Bits 8-5 = output from EPM5032 Bits 4-0 = direct from the VDP In order to compute bits 8-5, the EPM5032 gets the sprite/background output line along with the two bits of palette info. For most games, the two bits of palette info map straight through as follows: Bits 10-9 = output from I/O port H Bits 8 = sprite/background select Bits 7-6 = palette selected by writing to prot_w Bits 5-4 = direct from the VDP palette select Bits 3-0 = direct from the VDP However, because there are 4 bits completely controlled by the EPM5032, it doesn't have to always map this way. An alternate palette mode can be selected which alters the output palette by swizzling the color RAM address bits. ******************************************************************************/ static void recompute_palette_tables(void) { int i; for (i = 0; i < 4; i++) { int bgpal = 0x000 + bg_palbase * 0x40 + i * 0x10; int sppal = 0x100 + sp_palbase * 0x40 + i * 0x10; if (!alt_palette_mode) { genesis_bg_pal_lookup[i] = palbank * 0x200 + bgpal; genesis_sp_pal_lookup[i] = palbank * 0x200 + sppal; } else { genesis_bg_pal_lookup[i] = palbank * 0x200 + ((bgpal << 1) & 0x180) + ((~bgpal >> 2) & 0x40) + (bgpal & 0x30); genesis_sp_pal_lookup[i] = palbank * 0x200 + ((~sppal << 2) & 0x100) + ((sppal << 2) & 0x80) + ((~sppal >> 2) & 0x40) + ((sppal >> 2) & 0x20) + (sppal & 0x10); } } } /****************************************************************************** I/O Read & Write Handlers ******************************************************************************* Controls, and Poto Poto reads 'S' 'E' 'G' and 'A' (SEGA) from this area as a form of protection. Lots of unknown writes however offset 0E certainly seems to be banking, both colours and sound sample banks. ******************************************************************************/ static READ16_HANDLER( io_chip_r ) { offset &= 0x1f/2; switch (offset) { /* I/O ports */ case 0x00/2: case 0x02/2: case 0x04/2: case 0x06/2: case 0x08/2: case 0x0a/2: case 0x0c/2: case 0x0e/2: /* if the port is configured as an output, return the last thing written */ if (misc_io_data[0x1e/2] & (1 << offset)) return misc_io_data[offset]; /* otherwise, return an input port */ if (offset == 0x04/2 && sound_banks) return (readinputport(offset) & 0xbf) | (upd7759_0_busy_r(0) << 6); return readinputport(offset); /* 'SEGA' protection */ case 0x10/2: return 'S'; case 0x12/2: return 'E'; case 0x14/2: return 'G'; case 0x16/2: return 'A'; /* CNT register & mirror */ case 0x18/2: case 0x1c/2: return misc_io_data[0x1c/2]; /* port direction register & mirror */ case 0x1a/2: case 0x1e/2: return misc_io_data[0x1e/2]; } return 0xffff; } static WRITE16_HANDLER( io_chip_w ) { UINT8 newbank; UINT8 old; /* generic implementation */ offset &= 0x1f/2; old = misc_io_data[offset]; misc_io_data[offset] = data; switch (offset) { /* I/O ports */ case 0x00/2: case 0x02/2: case 0x04/2: case 0x08/2: case 0x0a/2: case 0x0c/2: break; /* miscellaneous output */ case 0x06/2: /* D7 : To pin 3 of JP15. (Watchdog clock control) D6 : To MUTE input pin on TDA1518BQ amplifier. D5 : To CN2 pin 10. (Unknown purpose) D4 : To CN2 pin 11. (Unknown purpose) D3 : To CN1 pin K. (Coin lockout 2) D2 : To CN1 pin 9. (Coin lockout 1) D1 : To CN1 pin J. (Coin meter 2) D0 : To CN1 pin 8. (Coin meter 1) */ /* coin_lockout_w(1, data & 0x08); coin_lockout_w(0, data & 0x04); */ coin_counter_w(1, data & 0x02); coin_counter_w(0, data & 0x01); break; /* banking */ case 0x0e/2: /* D7 : To pin A19 of CN4 D6 : To pin B19 of CN4 D5 : ? D4 : ? D3 : To pin 31 of uPD7759 sample ROM (A18 on a 27C040) D2 : To pin 30 of uPD7759 sample ROM (A17 on a 27C040) D1 : To A10 of color RAM D0 : To A9 of color RAM */ newbank = data & 3; if (newbank != palbank) { video_screen_update_partial(0, video_screen_get_vpos(0) + 1); palbank = newbank; recompute_palette_tables(); } if (sound_banks > 1) { newbank = (data >> 2) & (sound_banks - 1); upd7759_set_bank_base(0, newbank * 0x20000); } break; /* CNT register */ case 0x1c/2: if (sound_banks > 1) upd7759_reset_w(0, (data >> 1) & 1); break; } } /****************************************************************************** Control Write Handler ******************************************************************************* Seems to control some global states. The most important bit is the low one, which enables/disables the display. This is used while tiles are being modified in Bloxeed. ******************************************************************************/ static WRITE16_HANDLER( control_w ) { /* skip if not LSB */ if (!ACCESSING_LSB) return; data &= 0x0f; /* bit 0 controls display enable */ segac2_enable_display(~data & 1); /* bit 1 resets the protection */ if (!(data & 2)) prot_write_buf = prot_read_buf = 0; /* bit 2 controls palette shuffling; only ribbit and twinsqua use this feature */ alt_palette_mode = ((~data & 4) >> 2); recompute_palette_tables(); } /****************************************************************************** Protection Read / Write Handlers ******************************************************************************* The protection chip is fairly simple. Writes to it control the palette banking for the sprites and backgrounds. The low 4 bits are also remembered in a 2-stage FIFO buffer. A read from this chip should return a value from a 256x4-bit table. The index into this table is computed by taking the second-to-last value written in the upper 4 bits, and the previously-fetched table value in the lower 4 bits. ******************************************************************************/ /* protection chip reads */ static READ16_HANDLER( prot_r ) { if (LOG_PROTECTION) logerror("%06X:protection r=%02X\n", activecpu_get_previouspc(), prot_table ? prot_read_buf : 0xff); return prot_read_buf | 0xf0; } /* protection chip writes */ static WRITE16_HANDLER( prot_w ) { int new_sp_palbase = (data >> 2) & 3; int new_bg_palbase = data & 3; int table_index; /* only works for the LSB */ if (!ACCESSING_LSB) return; /* compute the table index */ table_index = (prot_write_buf << 4) | prot_read_buf; /* keep track of the last write for the next table lookup */ prot_write_buf = data & 0x0f; /* determine the value to return, should a read occur */ if (prot_table) prot_read_buf = (prot_table[table_index >> 3] << (4 * (table_index & 7))) >> 28; if (LOG_PROTECTION) logerror("%06X:protection w=%02X, new result=%02X\n", activecpu_get_previouspc(), data & 0x0f, prot_read_buf); /* if the palette changed, force an update */ if (new_sp_palbase != sp_palbase || new_bg_palbase != bg_palbase) { video_screen_update_partial(0, video_screen_get_vpos(0) + 1); sp_palbase = new_sp_palbase; bg_palbase = new_bg_palbase; recompute_palette_tables(); if (LOG_PALETTE) logerror("Set palbank: %d/%d (scan=%d)\n", bg_palbase, sp_palbase, video_screen_get_vpos(0)); } } /****************************************************************************** Counter/timer I/O ******************************************************************************* There appears to be a chip that is used to count coins and track time played, or at the very least the current status of the game. All games except Puyo Puyo 2 and Poto Poto access this in a mostly consistent manner. ******************************************************************************/ static WRITE16_HANDLER( counter_timer_w ) { /* only LSB matters */ if (ACCESSING_LSB) { /*int value = data & 1;*/ switch (data & 0x1e) { case 0x00: /* player 1 start/stop */ case 0x02: /* player 2 start/stop */ case 0x04: /* ??? */ case 0x06: /* ??? */ case 0x08: /* player 1 game timer? */ case 0x0a: /* player 2 game timer? */ case 0x0c: /* ??? */ case 0x0e: /* ??? */ break; case 0x10: /* coin counter */ // coin_counter_w(0,1); // coin_counter_w(0,0); break; case 0x12: /* set coinage info -- followed by two 4-bit values */ break; case 0x14: /* game timer? (see Tant-R) */ case 0x16: /* intro timer? (see Tant-R) */ case 0x18: /* ??? */ case 0x1a: /* ??? */ case 0x1c: /* ??? */ break; case 0x1e: /* reset */ break; } } } /****************************************************************************** Print Club camera handling ******************************************************************************* Just some fake stuff to get us to boot. ******************************************************************************/ static int cam_data; static READ16_HANDLER( printer_r ) { return cam_data; } static WRITE16_HANDLER( print_club_camera_w ) { cam_data = data; } /****************************************************************************** Memory Maps ******************************************************************************* The System C/C2 68k Memory map is fairly similar to the Genesis in terms of RAM, ROM, VDP access locations, although the differences between the arcade system and the Genesis means its not same. ******************************************************************************/ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_RANGE(0x800000, 0x800001) AM_MIRROR(0x13fdfe) AM_READWRITE(prot_r, prot_w) AM_RANGE(0x800200, 0x800201) AM_MIRROR(0x13fdfe) AM_WRITE(control_w) AM_RANGE(0x840000, 0x84001f) AM_MIRROR(0x13fee0) AM_READWRITE(io_chip_r, io_chip_w) AM_RANGE(0x840100, 0x840107) AM_MIRROR(0x13fef8) AM_READWRITE(ym3438_r, ym3438_w) AM_RANGE(0x880000, 0x880001) AM_MIRROR(0x13fefe) AM_WRITE(segac2_upd7759_w) AM_RANGE(0x880100, 0x880101) AM_MIRROR(0x13fefe) AM_WRITE(counter_timer_w) AM_RANGE(0x8c0000, 0x8c0fff) AM_MIRROR(0x13f000) AM_READWRITE(palette_r, palette_w) AM_BASE(&paletteram16) AM_RANGE(0xc00000, 0xc0001f) AM_MIRROR(0x18ff00) AM_READWRITE(genesis_vdp_r, genesis_vdp_w) AM_RANGE(0xe00000, 0xe0ffff) AM_MIRROR(0x1f0000) AM_RAM AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size) ADDRESS_MAP_END /****************************************************************************** Input Ports ******************************************************************************* The input ports on the C2 games always consist of 1 Coin Port, 2 Player Input ports and 2 Dipswitch Ports, 1 of those Dipswitch Ports being used for coinage, the other for Game Options. Most of the Games List the Dipswitchs and Inputs in the Test Menus, adding them is just a tedious task. I think Columnns & Bloxeed are Exceptions and will need their Dipswitches working out by observation. The Coin Part of the DSW's seems fairly common to all games. ******************************************************************************/ static INPUT_PORTS_START( systemc_generic ) PORT_START_TAG("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_START_TAG("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_START_TAG("PORTC") PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SPECIAL ) /* From uPD7759 pin 18. (/BUSY output) */ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) /* From MB3773P pin 1. (/RESET output) */ PORT_START_TAG("PORTD") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START_TAG("SERVICE") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START_TAG("COINAGE") PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x05, "2 Coins/1 Credit 5/3 6/4" ) PORT_DIPSETTING( 0x04, "2 Coins/1 Credit 4/3" ) PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x01, "1 Coin/1 Credit 2/3" ) PORT_DIPSETTING( 0x02, "1 Coin/1 Credit 4/5" ) PORT_DIPSETTING( 0x03, "1 Coin/1 Credit 5/6" ) PORT_DIPSETTING( 0x06, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) ) PORT_DIPSETTING( 0x00, "Free Play (if Coin B too) or 1/1" ) PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPSETTING( 0x70, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x90, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x50, "2 Coins/1 Credit 5/3 6/4" ) PORT_DIPSETTING( 0x40, "2 Coins/1 Credit 4/3" ) PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x10, "1 Coin/1 Credit 2/3" ) PORT_DIPSETTING( 0x20, "1 Coin/1 Credit 4/5" ) PORT_DIPSETTING( 0x30, "1 Coin/1 Credit 5/6" ) PORT_DIPSETTING( 0x60, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) ) PORT_DIPSETTING( 0x00, "Free Play (if Coin A too) or 1/1" ) PORT_START_TAG("DSW") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START_TAG("PORTH") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END static INPUT_PORTS_START( columns ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) /* The first level increase (from 0 to 1) is always after destroying 35 jewels. Then, the level gets 1 level more every : */ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) // 50 jewels PORT_DIPSETTING( 0x10, DEF_STR( Medium ) ) // 40 jewels PORT_DIPSETTING( 0x30, DEF_STR( Hard ) ) // 35 jewels PORT_DIPSETTING( 0x20, DEF_STR( Hardest ) ) // 25 jewels INPUT_PORTS_END static INPUT_PORTS_START( columnsu ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) /* The first level increase (from 0 to 1) is always after destroying 35 jewels. Then, the level gets 1 level more every : */ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) // 50 jewels PORT_DIPSETTING( 0x10, DEF_STR( Medium ) ) // 40 jewels PORT_DIPSETTING( 0x30, DEF_STR( Hard ) ) // 35 jewels PORT_DIPSETTING( 0x20, DEF_STR( Hardest ) ) // 25 jewels INPUT_PORTS_END static INPUT_PORTS_START( columns2 ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x0c, 0x0c, "VS. Mode Credits/Match" ) PORT_DIPSETTING( 0x0c, "1" ) PORT_DIPSETTING( 0x08, "2" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x30, 0x30, "Flash Mode Difficulty" ) PORT_DIPSETTING( 0x20, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x30, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) INPUT_PORTS_END static INPUT_PORTS_START( borench ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, "Credits to Start" ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x0c, 0x0c, "Lives 1P Mode" ) PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x0c, "2" ) PORT_DIPSETTING( 0x08, "3" ) PORT_DIPSETTING( 0x04, "4" ) PORT_DIPNAME( 0x30, 0x30, "Lives 2P Mode" ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPSETTING( 0x30, "3" ) PORT_DIPSETTING( 0x20, "4" ) PORT_DIPSETTING( 0x10, "5" ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x80, DEF_STR( Easy ) ) PORT_DIPSETTING( 0xc0, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) INPUT_PORTS_END static INPUT_PORTS_START( tfrceac ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, "Credits to Start" ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPSETTING( 0x0c, "3" ) PORT_DIPSETTING( 0x08, "4" ) PORT_DIPSETTING( 0x04, "5" ) PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPSETTING( 0x10, "10k, 70k, 150k" ) PORT_DIPSETTING( 0x30, "20k, 100k, 200k" ) PORT_DIPSETTING( 0x20, "40k, 150k, 300k" ) PORT_DIPSETTING( 0x00, DEF_STR( None ) ) PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x80, DEF_STR( Easy ) ) PORT_DIPSETTING( 0xc0, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) INPUT_PORTS_END static INPUT_PORTS_START( twinsqua ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_PLAYER(1) PORT_MODIFY("P2") PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(30) PORT_KEYDELTA(15) PORT_PLAYER(2) PORT_MODIFY("SERVICE") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, "Credits to Start" ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x04, 0x04, "Buy In" ) PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x10, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x18, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x20, 0x20, "Seat Type" ) PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x00, "Moving" ) INPUT_PORTS_END static INPUT_PORTS_START( ribbit ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 1 Unused */ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 1 Unused */ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, "Credits to Start" ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x08, "1" ) PORT_DIPSETTING( 0x0c, "2" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x20, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x30, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) INPUT_PORTS_END static INPUT_PORTS_START( puyo ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x04, 0x04, "VS. Mode Credits/Match" ) PORT_DIPSETTING( 0x04, "1" ) PORT_DIPSETTING( 0x00, "3" ) PORT_DIPNAME( 0x18, 0x18, "1P Mode Difficulty" ) PORT_DIPSETTING( 0x10, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x18, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x80, 0x80, "Moving Seat" ) PORT_DIPSETTING( 0x80, "No Use" ) PORT_DIPSETTING( 0x00, "In Use" ) INPUT_PORTS_END static INPUT_PORTS_START( stkclmns ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x02, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x03, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x08, 0x08, "Match Mode Price" ) PORT_DIPSETTING( 0x08, "1" ) PORT_DIPSETTING( 0x00, "2" ) INPUT_PORTS_END static INPUT_PORTS_START( potopoto ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, "Credits to Start" ) PORT_DIPSETTING( 0x01, "1" ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x04, 0x04, "Coin Chute Type" ) PORT_DIPSETTING( 0x04, "Common" ) PORT_DIPSETTING( 0x00, "Individual" ) PORT_DIPNAME( 0x08, 0x08, "Credits to Continue" ) PORT_DIPSETTING( 0x08, "1" ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPNAME( 0x10, 0x10, "Buy-In" ) PORT_DIPSETTING( 0x10, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPNAME( 0x60, 0x60, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x60, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x20, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x80, 0x80, "Moving Seat" ) PORT_DIPSETTING( 0x80, "No Use" ) PORT_DIPSETTING( 0x00, "In Use" ) INPUT_PORTS_END static INPUT_PORTS_START( zunkyou ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, "Game Difficulty 1" ) PORT_DIPSETTING( 0x01, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) PORT_DIPNAME( 0x02, 0x02, "Game Difficulty 2" ) PORT_DIPSETTING( 0x02, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPSETTING( 0x08, "1" ) PORT_DIPSETTING( 0x04, "2" ) PORT_DIPSETTING( 0x0c, "3" ) PORT_DIPSETTING( 0x00, "5" ) PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END static INPUT_PORTS_START( ichir ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x04, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x06, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) INPUT_PORTS_END static INPUT_PORTS_START( bloxeedc ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 2 Unused */ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, "VS Mode Price" ) PORT_DIPSETTING( 0x00, "Same as Ordinary" ) PORT_DIPSETTING( 0x01, "Double as Ordinary" ) PORT_DIPNAME( 0x02, 0x02, "Credits to Start" ) PORT_DIPSETTING( 0x02, "1" ) PORT_DIPSETTING( 0x00, "2" ) PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END static INPUT_PORTS_START( puyopuy2 ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("P2") PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Button 3 Unused */ PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, "Rannyu Off Button" ) PORT_DIPSETTING( 0x01, "Use" ) PORT_DIPSETTING( 0x00, "No Use" ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x04, 0x04, "Turn Direction" ) PORT_DIPSETTING( 0x04, "1:Right 2:Left" ) PORT_DIPSETTING( 0x00, "1:Left 2:Right") PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) ) PORT_DIPSETTING( 0x10, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x18, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x60, 0x60, "VS Mode Match/1 Play" ) PORT_DIPSETTING( 0x60, "1" ) PORT_DIPSETTING( 0x40, "2" ) PORT_DIPSETTING( 0x20, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x80, 0x80, "Battle Start credit" ) PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x80, "2" ) INPUT_PORTS_END static INPUT_PORTS_START( pclub ) PORT_INCLUDE( systemc_generic ) PORT_MODIFY("P1") PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Probably Unused */ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Ok") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Cancel") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_MODIFY("P2") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Probably Unused */ PORT_MODIFY("SERVICE") PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Probably Unused */ PORT_MODIFY("COINAGE") PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPSETTING( 0x00, DEF_STR( 7C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 6C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x07, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x06, DEF_STR( Free_Play ) ) PORT_DIPNAME( 0x08, 0x08, "Unknown 4-4" ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Unknown 4-5" ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x20, "Unknown 4-6" ) PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x40, 0x40, "Unknown 4-7" ) PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, "Unknown 4-8" ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_MODIFY("DSW") PORT_DIPNAME( 0x01, 0x01, "Unknown 5-1" ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x02, "Unknown 5-2" ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x04, 0x04, "Unknown 5-3" ) PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x08, 0x08, "Unknown 5-4" ) PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Unknown 5-5" ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds )) PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x20, DEF_STR( On ) ) PORT_DIPNAME( 0x40, 0x40, "Unknown 5-7" ) PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x80, "Unknown 5-8" ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END /****************************************************************************** Sound interfaces ******************************************************************************/ static struct upd7759_interface upd7759_intf = { REGION_SOUND1 /* Memory pointer (gen.h) */ }; static struct YM3438interface ym3438_intf = { genesis_irq2_interrupt /* IRQ handler */ }; /****************************************************************************** Machine Drivers ******************************************************************************* General Overview M68000 @ 10MHz (Main Processor) YM3438 (Fm Sound) SN76489 (PSG, Noise, Part of the VDP) UPD7759 (Sample Playback, C-2 Only) ******************************************************************************/ static MACHINE_DRIVER_START( segac ) /* basic machine hardware */ MDRV_CPU_ADD_TAG("main", M68000, XL2_CLOCK/6) MDRV_CPU_PROGRAM_MAP(main_map,0) MDRV_CPU_VBLANK_INT(genesis_vblank_interrupt,1) MDRV_SCREEN_REFRESH_RATE(60) MDRV_MACHINE_START(segac2) MDRV_MACHINE_RESET(segac2) MDRV_NVRAM_HANDLER(generic_randfill) /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_SIZE(342,262) MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 223) MDRV_PALETTE_LENGTH(2048) MDRV_VIDEO_START(segac2) MDRV_VIDEO_UPDATE(segac2) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD(YM3438, XL2_CLOCK/7) MDRV_SOUND_CONFIG(ym3438_intf) MDRV_SOUND_ROUTE(0, "mono", 0.50) /* right channel not connected */ MDRV_SOUND_ADD(SN76496, XL2_CLOCK/15) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_DRIVER_END static MACHINE_DRIVER_START( segac2 ) /* basic machine hardware */ MDRV_IMPORT_FROM( segac ) /* sound hardware */ MDRV_SOUND_ADD(UPD7759, XL1_CLOCK) MDRV_SOUND_CONFIG(upd7759_intf) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_DRIVER_END /****************************************************************************** Rom Definitions ******************************************************************************* All the known System C/C2 Dumps are listed here with the exception of the version of Puzzle & Action (I believe its actually Ichidant-R) which was credited to SpainDumps in the included text file. This appears to be a bad dump (half sized roms) however the roms do not match up exactly with the good dump of the game. English language sets are assumed to be the parent where they exist. Hopefully some more alternate version dumps will turn up sometime soon for example English Language version of Tant-R or Japanese Language versions of Borench (if of course these games were released in other locations. Games are in Order of Date (Year) with System-C titles coming first. ******************************************************************************/ /* ----- System C Games ----- */ ROM_START( bloxeedc ) /* Bloxeed (C System Version) (c)1989 Sega / Elorg */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr12908.32", 0x000000, 0x020000, CRC(fc77cb91) SHA1(248a462e3858ffdc171af7d806e57deecb5dae50) ) ROM_LOAD16_BYTE( "epr12907.31", 0x000001, 0x020000, CRC(e5fcbac6) SHA1(a1adec5ef5574bff96a3d66619a24a6715097bb9) ) ROM_LOAD16_BYTE( "epr12993.34", 0x040000, 0x020000, CRC(487bc8fc) SHA1(3fb205bf56f35443e993e08b39c1a08c13ca5e3b) ) ROM_LOAD16_BYTE( "epr12992.33", 0x040001, 0x020000, CRC(19b0084c) SHA1(b3ba0f3d8d39a19aa66edb24885ea21192e22704) ) ROM_END ROM_START( bloxeedu ) /* Bloxeed USA (C System Version) (c)1989 Sega / Elorg */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr12997a.32", 0x000000, 0x020000, CRC(23655bc9) SHA1(32fc1f75a43aa49dc656d40d34ec10f3f0a2bdb3) ) ROM_LOAD16_BYTE( "epr12996a.31", 0x000001, 0x020000, CRC(83c83f0c) SHA1(ca8e2ad7cceabd8de7a91b91cb92eafb6dd3171f) ) ROM_LOAD16_BYTE( "epr12993.34", 0x040000, 0x020000, CRC(487bc8fc) SHA1(3fb205bf56f35443e993e08b39c1a08c13ca5e3b) ) ROM_LOAD16_BYTE( "epr12992.33", 0x040001, 0x020000, CRC(19b0084c) SHA1(b3ba0f3d8d39a19aa66edb24885ea21192e22704) ) ROM_END ROM_START( columns ) /* Columns (World) (c)1990 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr13114.32", 0x000000, 0x020000, CRC(ff78f740) SHA1(0a034103a4b942f43e62f6e717f5dbf1bfb0b613) ) ROM_LOAD16_BYTE( "epr13113.31", 0x000001, 0x020000, CRC(9a426d9b) SHA1(3322e65ebf8d0a6047f7d408387c63ea401b8973) ) ROM_END ROM_START( columnsu ) /* Columns (US) (c)1990 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr13116a.32", 0x000000, 0x020000, CRC(a0284b16) SHA1(a72c8567ab2386ef6bc7bb83cc1612f4c6bf8461) ) ROM_LOAD16_BYTE( "epr13115a.31", 0x000001, 0x020000, CRC(e37496f3) SHA1(30ebeed76613ae8d6d3ce9fca282124685067b27) ) ROM_END ROM_START( columnsj ) /* Columns (Jpn) (c)1990 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr13112.32", 0x000000, 0x020000, CRC(bae6e53e) SHA1(2c2fd621eecd55591f22d076323972a7d0314615) ) ROM_LOAD16_BYTE( "epr13111.31", 0x000001, 0x020000, CRC(aa5ccd6d) SHA1(480e29e3112282d1790f1fb68075453325ba4336) ) ROM_END ROM_START( columns2 ) /* Columns II - The Voyage Through Time (c)1990 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr13363.bin", 0x000000, 0x020000, CRC(c99e4ffd) SHA1(67981aa08c8a625af35dd7689011364159cf9194) ) ROM_LOAD16_BYTE( "epr13362.bin", 0x000001, 0x020000, CRC(394e2419) SHA1(d4f726b32cf301d0d52611237b83177e69bfaf71) ) ROM_END ROM_START( column2j ) /* Columns II - The Voyage Through Time (Jpn) (c)1990 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr13361.rom", 0x000000, 0x020000, CRC(b54b5f12) SHA1(4d7fbae7d9bcadd433ebc25aef255dc43df611bc) ) ROM_LOAD16_BYTE( "epr13360.rom", 0x000001, 0x020000, CRC(a59b1d4f) SHA1(e9ee315677782e1c61ae8f11260101cc03176188) ) ROM_END ROM_START( tantrbl2 ) /* Tant-R (Puzzle & Action) (Alt Bootleg Running on C Board?, No Samples) */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "trb2_2.32", 0x000000, 0x080000, CRC(8fc99c48) SHA1(d90ed673fe1f6e1f878c0d8fc62f5439b56d0a47) ) ROM_LOAD16_BYTE( "trb2_1.31", 0x000001, 0x080000, CRC(c318d00d) SHA1(703760d4ddc45bc0921ae96a27d9a8fbf12a1e96) ) ROM_LOAD16_BYTE( "mpr15616.34", 0x100000, 0x080000, CRC(17b80202) SHA1(f47bf2aa0c5972647438619b8453c7dede5c422f) ) ROM_LOAD16_BYTE( "mpr15615.33", 0x100001, 0x080000, CRC(36a88bd4) SHA1(cc7f6a947d1b79bb86957c43035b53d6d2bcfa28) ) ROM_END ROM_START( tantrbl3 ) /* Tant-R (Puzzle & Action) (Alt Bootleg Running on C Board?, No Samples) */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "2.u29", 0x000000, 0x080000, CRC(faecb7b1) SHA1(ddca61996dbd0d66e9ecc04647e61a6d0af25807) ) ROM_LOAD16_BYTE( "1.u28", 0x000001, 0x080000, CRC(3304556d) SHA1(586265c846bf6404dcb33404e961bf0733e24bf5) ) ROM_LOAD16_BYTE( "4.u31", 0x100000, 0x080000, CRC(17b80202) SHA1(f47bf2aa0c5972647438619b8453c7dede5c422f) ) ROM_LOAD16_BYTE( "3.u30", 0x100001, 0x080000, CRC(36a88bd4) SHA1(cc7f6a947d1b79bb86957c43035b53d6d2bcfa28) ) ROM_END ROM_START( ichirjbl ) /* Ichident-R (Puzzle & Action 2) (Bootleg Running on C Board?, No Samples) */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "27c4000.2",0x000000, 0x080000, CRC(5a194f44) SHA1(67a4d21b91704f8c2210b5106e82e22ba3366f4c) ) ROM_LOAD16_BYTE( "27c4000.1",0x000001, 0x080000, CRC(de209f84) SHA1(0860d0ebfab2952e82fc1e292bf9410d673d9322) ) ROM_LOAD16_BYTE( "epr16888", 0x100000, 0x080000, CRC(85d73722) SHA1(7ebe81b4d6c89f87f60200a3a8cddb07d581adef) ) ROM_LOAD16_BYTE( "epr16887", 0x100001, 0x080000, CRC(bc3bbf25) SHA1(e760ad400bc183b38e9787d88c8ac084fbe2ae21) ) ROM_END /* ----- System C-2 Games ----- */ ROM_START( borench ) /* Borench (c)1990 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "ic32.bin", 0x000000, 0x040000, CRC(2c54457d) SHA1(adf3ea5393d2633ec6215e64f0cd89ad4567e765) ) ROM_LOAD16_BYTE( "ic31.bin", 0x000001, 0x040000, CRC(b46445fc) SHA1(24e85ef5abbc5376a854b13ed90f08f0c30d7f25) ) ROM_REGION( 0x020000, REGION_SOUND1, 0 ) ROM_LOAD( "ic4.bin", 0x000000, 0x020000, CRC(62b85e56) SHA1(822ab733c87938bb70a9e32cc5dd36bbf6f21d11) ) ROM_END ROM_START( tfrceac ) /* ThunderForce AC (c)1990 Technosoft / Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "ic32.bin", 0x000000, 0x040000, CRC(95ecf202) SHA1(92b0f351f2bee7d59873a4991615f14f1afe4da7) ) ROM_LOAD16_BYTE( "ic31.bin", 0x000001, 0x040000, CRC(e63d7f1a) SHA1(a40d0a5a96f379a467048dc8fddd8aaaeb94da1d) ) /* 0x080000 - 0x100000 Empty */ ROM_LOAD16_BYTE( "ic34.bin", 0x100000, 0x040000, CRC(29f23461) SHA1(032a7125fef5a660b85654d595aafc46812cdde6) ) ROM_LOAD16_BYTE( "ic33.bin", 0x100001, 0x040000, CRC(9e23734f) SHA1(64d27dc53f0ffc3513345a26ed077751b25d15f1) ) ROM_REGION( 0x040000, REGION_SOUND1, 0 ) ROM_LOAD( "ic4.bin", 0x000000, 0x040000, CRC(e09961f6) SHA1(e109b5f41502b765d191f22e3bbcff97d6defaa1) ) ROM_END ROM_START( tfrceacj ) /* ThunderForce AC (Jpn) (c)1990 Technosoft / Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr13657.32", 0x000000, 0x040000, CRC(a0f38ffd) SHA1(da548e7f61aed0e82a460553a119941da8857bc4) ) ROM_LOAD16_BYTE( "epr13656.31", 0x000001, 0x040000, CRC(b9438d1e) SHA1(598209c9fec3527fde720af09e5bebd7379f5b2b) ) /* 0x080000 - 0x100000 Empty */ ROM_LOAD16_BYTE( "ic34.bin", 0x100000, 0x040000, CRC(29f23461) SHA1(032a7125fef5a660b85654d595aafc46812cdde6) ) ROM_LOAD16_BYTE( "ic33.bin", 0x100001, 0x040000, CRC(9e23734f) SHA1(64d27dc53f0ffc3513345a26ed077751b25d15f1) ) ROM_REGION( 0x040000, REGION_SOUND1, 0 ) ROM_LOAD( "ic4.bin", 0x000000, 0x040000, CRC(e09961f6) SHA1(e109b5f41502b765d191f22e3bbcff97d6defaa1) ) ROM_END ROM_START( tfrceacb ) /* ThunderForce AC (Bootleg) (c)1990 Technosoft / Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "4.bin", 0x000000, 0x040000, CRC(eba059d3) SHA1(7bc04401f9a138fa151ac09a528b70acfb2021e3) ) ROM_LOAD16_BYTE( "3.bin", 0x000001, 0x040000, CRC(3e5dc542) SHA1(4a66dc842afaa145dab82b232738eea107bdf0f8) ) /* 0x080000 - 0x100000 Empty */ ROM_LOAD16_BYTE( "ic34.bin", 0x100000, 0x040000, CRC(29f23461) SHA1(032a7125fef5a660b85654d595aafc46812cdde6) ) ROM_LOAD16_BYTE( "ic33.bin", 0x100001, 0x040000, CRC(9e23734f) SHA1(64d27dc53f0ffc3513345a26ed077751b25d15f1) ) ROM_REGION( 0x040000, REGION_SOUND1, 0 ) ROM_LOAD( "ic4.bin", 0x000000, 0x040000, CRC(e09961f6) SHA1(e109b5f41502b765d191f22e3bbcff97d6defaa1) ) ROM_END ROM_START( twinsqua ) /* Twin Squash (c)1991 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "ep14657.32", 0x000000, 0x040000, CRC(becbb1a1) SHA1(787b1a4bf420186d05b5448582f6492e40d394fa) ) ROM_LOAD16_BYTE( "ep14656.31", 0x000001, 0x040000, CRC(411906e7) SHA1(68a4e66b9e18499d77cdb584470f35f67edec6fd) ) ROM_REGION( 0x020000, REGION_SOUND1, 0 ) ROM_LOAD( "ep14588.4", 0x000000, 0x020000, CRC(5a9b6881) SHA1(d86ec7f569fae5a1ce93a1cf40998cbb13726e0c) ) ROM_END ROM_START( ribbit ) /* Ribbit (c)1991 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "ep13833.32", 0x000000, 0x040000, CRC(5347f8ce) SHA1(b95b99536157edfbf0d74a42f64235f47dca7ee1) ) ROM_LOAD16_BYTE( "ep13832.31", 0x000001, 0x040000, CRC(889c42c2) SHA1(0839a50a68b64a66d995f1bfaff42fcb60bb4d45) ) ROM_COPY( REGION_CPU1, 0x000000, 0x080000, 0x080000 ) ROM_LOAD16_BYTE( "ep13838.34", 0x100000, 0x080000, CRC(a5d62ac3) SHA1(8d83a7bc4017e125ef4231278f766b2368d5fc1f) ) ROM_LOAD16_BYTE( "ep13837.33", 0x100001, 0x080000, CRC(434de159) SHA1(cf2973131cabf2bc0ebb2bfe9f804ad3d7d0a733) ) ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "ep13834.4", 0x000000, 0x020000, CRC(ab0c1833) SHA1(f864e12ecf6c0524da20fc66747a4fa4280e67e9) ) ROM_END ROM_START( tantr ) /* Tant-R (Puzzle & Action) (c)1992 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr15614.32", 0x000000, 0x080000, CRC(557782bc) SHA1(1546a999ab97c380dc87f6c95d5687722206740d) ) ROM_LOAD16_BYTE( "epr15613.31", 0x000001, 0x080000, CRC(14bbb235) SHA1(8dbfec5fb1d7a695acbb2fc0e78e4bdf76eb8d9d) ) ROM_LOAD16_BYTE( "mpr15616.34", 0x100000, 0x080000, CRC(17b80202) SHA1(f47bf2aa0c5972647438619b8453c7dede5c422f) ) ROM_LOAD16_BYTE( "mpr15615.33", 0x100001, 0x080000, CRC(36a88bd4) SHA1(cc7f6a947d1b79bb86957c43035b53d6d2bcfa28) ) ROM_REGION( 0x040000, REGION_SOUND1, 0 ) ROM_LOAD( "epr15617.4", 0x000000, 0x040000, CRC(338324a1) SHA1(79e2782d0d4764dd723886f846c852a6f6c1fb64) ) ROM_END ROM_START( tantrkor ) /* Tant-R (Puzzle & Action) (Korea) (c)1993 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* strange names, but this is what was printed on the (original) chips */ ROM_LOAD16_BYTE( "m15592b.32", 0x000000, 0x080000, CRC(7efe26b3) SHA1(958420b9b400eafe392745af90bff729463427c7) ) ROM_LOAD16_BYTE( "m15592b.31", 0x000001, 0x080000, CRC(af5a860f) SHA1(cb0011f420721d035e9f0e43bb72cf286982fd32) ) ROM_LOAD16_BYTE( "m15992b.34", 0x100000, 0x080000, CRC(6282a5d4) SHA1(9220e119e79d969d7d70e8a25c75dd3d9bc340ae) ) ROM_LOAD16_BYTE( "m15592b.33", 0x100001, 0x080000, CRC(82d78413) SHA1(9ff9c2b1632e280444965110bab90c0fc98cd6da) ) ROM_REGION( 0x040000, REGION_SOUND1, 0 ) ROM_LOAD( "epr15617.4", 0x000000, 0x040000, CRC(338324a1) SHA1(79e2782d0d4764dd723886f846c852a6f6c1fb64) ) ROM_END ROM_START( tantrbl ) /* Tant-R (Puzzle & Action) (Bootleg) (c)1992 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "pa_e10.bin", 0x000000, 0x080000, CRC(6c3f711f) SHA1(55aa2d50422134b95d9a7c5cbdc453b207b91b4c) ) ROM_LOAD16_BYTE( "pa_f10.bin", 0x000001, 0x080000, CRC(75526786) SHA1(8f5aa7f6918b71a79e6fca18194beec2aef15844) ) ROM_LOAD16_BYTE( "mpr15616.34", 0x100000, 0x080000, CRC(17b80202) SHA1(f47bf2aa0c5972647438619b8453c7dede5c422f) ) ROM_LOAD16_BYTE( "mpr15615.33", 0x100001, 0x080000, CRC(36a88bd4) SHA1(cc7f6a947d1b79bb86957c43035b53d6d2bcfa28) ) ROM_REGION( 0x040000, REGION_SOUND1, 0 ) ROM_LOAD( "pa_e03.bin", 0x000000, 0x020000, CRC(72918c58) SHA1(cb42363b163727a887a0b762519c72dcdf0a6460) ) ROM_LOAD( "pa_e02.bin", 0x020000, 0x020000, CRC(4e85b2a3) SHA1(3f92fb931d315c5a2d6c54b3204718574928cb7b) ) ROM_END ROM_START( puyo ) /* Puyo Puyo (c)1992 Sega / Compile */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr-15198.32", 0x000000, 0x020000, CRC(9610d80c) SHA1(1ffad09d3369c1942d4db611c41bae47d08c7564) ) ROM_LOAD16_BYTE( "epr-15197.31", 0x000001, 0x020000, CRC(7b1f3229) SHA1(13d0905291e748973d7d17eb404a286ffb94de03) ) /* 0x040000 - 0x100000 Empty */ ROM_LOAD16_BYTE( "epr-15200.34", 0x100000, 0x020000, CRC(0a0692e5) SHA1(d4ecc5b1791a91e3b33a5d4d0dd305f1623483d9) ) ROM_LOAD16_BYTE( "epr-15199.33", 0x100001, 0x020000, CRC(353109b8) SHA1(92440987add3124b758e7eaa77a3a6f54ca61bb8) ) ROM_REGION( 0x020000, REGION_SOUND1, 0 ) ROM_LOAD( "epr-15196.4", 0x000000, 0x020000, CRC(79112b3b) SHA1(fc3a202e1e2ff39950d4af689b7fcca86c301805) ) ROM_END ROM_START( puyoj ) /* Puyo Puyo (c)1992 Sega / Compile */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr15036", 0x000000, 0x020000, CRC(5310ca1b) SHA1(dcfe2bf7476b640dfb790e8716e75b483d535e48) ) ROM_LOAD16_BYTE( "epr15035", 0x000001, 0x020000, CRC(bc62e400) SHA1(12bb6031574838a28889f6edb31dbb689265287c) ) /* 0x040000 - 0x100000 Empty */ ROM_LOAD16_BYTE( "epr15038", 0x100000, 0x020000, CRC(3b9eea0c) SHA1(e3e6148c1769834cc0061932eb035daa79673144) ) ROM_LOAD16_BYTE( "epr15037", 0x100001, 0x020000, CRC(be2f7974) SHA1(77027ced7a62f94e9fc6e8a0a4ac0c62f7ea813b) ) ROM_REGION( 0x020000, REGION_SOUND1, 0 ) ROM_LOAD( "epr15034", 0x000000, 0x020000, CRC(5688213b) SHA1(f3f234e482871ca903a782e51008f3bfed04ee63) ) ROM_END ROM_START( puyoja ) /* Puyo Puyo (Rev A) (c)1992 Sega / Compile */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "ep15036a.32", 0x000000, 0x020000, CRC(61b35257) SHA1(e09a7e992999befc88fc7928a478d1e2d14d7b08) ) ROM_LOAD16_BYTE( "ep15035a.31", 0x000001, 0x020000, CRC(dfebb6d9) SHA1(6f685729ef4660c2eba409c5236c6d2f313eef5b) ) /* 0x040000 - 0x100000 Empty */ ROM_LOAD16_BYTE( "epr15038", 0x100000, 0x020000, CRC(3b9eea0c) SHA1(e3e6148c1769834cc0061932eb035daa79673144) ) ROM_LOAD16_BYTE( "epr15037", 0x100001, 0x020000, CRC(be2f7974) SHA1(77027ced7a62f94e9fc6e8a0a4ac0c62f7ea813b) ) ROM_REGION( 0x020000, REGION_SOUND1, 0 ) ROM_LOAD( "epr15034", 0x000000, 0x020000, CRC(5688213b) SHA1(f3f234e482871ca903a782e51008f3bfed04ee63) ) ROM_END ROM_START( puyobl ) /* Puyo Puyo (c)1992 Sega / Compile Bootleg */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "puyopuyb.4bo", 0x000000, 0x020000, CRC(89ea4d33) SHA1(bef9d011524e71c072d309f6da3c2ebc38878e0e) ) ROM_LOAD16_BYTE( "puyopuyb.3bo", 0x000001, 0x020000, CRC(c002e545) SHA1(7a59ac764d60e9955830d9617b0bd122b44e7b2f) ) /* 0x040000 - 0x100000 Empty */ ROM_LOAD16_BYTE( "puyopuyb.6bo", 0x100000, 0x020000, CRC(0a0692e5) SHA1(d4ecc5b1791a91e3b33a5d4d0dd305f1623483d9) ) ROM_LOAD16_BYTE( "puyopuyb.5bo", 0x100001, 0x020000, CRC(353109b8) SHA1(92440987add3124b758e7eaa77a3a6f54ca61bb8) ) ROM_REGION( 0x020000, REGION_SOUND1, 0 ) ROM_LOAD( "puyopuyb.abo", 0x000000, 0x020000, CRC(79112b3b) SHA1(fc3a202e1e2ff39950d4af689b7fcca86c301805) ) ROM_END ROM_START( ichir ) /* Ichident-R (Puzzle & Action 2) (c)1994 Sega (World) */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "pa2_32.bin", 0x000000, 0x080000, CRC(7ba0c025) SHA1(855e9bb2a20c6f51b26381233c57c26aa96ad1f6) ) ROM_LOAD16_BYTE( "pa2_31.bin", 0x000001, 0x080000, CRC(5f86e5cc) SHA1(44e201de00dfbf7c66d0e0d40d17b162c6f0625b) ) ROM_LOAD16_BYTE( "epr16888", 0x100000, 0x080000, CRC(85d73722) SHA1(7ebe81b4d6c89f87f60200a3a8cddb07d581adef) ) ROM_LOAD16_BYTE( "epr16887", 0x100001, 0x080000, CRC(bc3bbf25) SHA1(e760ad400bc183b38e9787d88c8ac084fbe2ae21) ) ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "pa2_02.bin", 0x000000, 0x080000, CRC(fc7b0da5) SHA1(46770aa7e19b4f8a183be3f433c48ad677b552b1) ) ROM_END ROM_START( ichirk ) /* Ichident-R (Puzzle & Action 2) (c)1994 Sega (Korea) */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) /* Again the part numbers are quite strange for the Korean verison */ ROM_LOAD16_BYTE( "epr_ichi.32", 0x000000, 0x080000, CRC(804dea11) SHA1(40bf8cbd40969a5880df10914252b7f64d5ce8e9) ) ROM_LOAD16_BYTE( "epr_ichi.31", 0x000001, 0x080000, CRC(92452353) SHA1(d2e1da5b139965611cd8d707d23396b5d4c07d12) ) ROM_LOAD16_BYTE( "epr16888", 0x100000, 0x080000, CRC(85d73722) SHA1(7ebe81b4d6c89f87f60200a3a8cddb07d581adef) ) // m17235a.34 ROM_LOAD16_BYTE( "epr16887", 0x100001, 0x080000, CRC(bc3bbf25) SHA1(e760ad400bc183b38e9787d88c8ac084fbe2ae21) ) // m17220a.33 ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "pa2_02.bin", 0x000000, 0x080000, CRC(fc7b0da5) SHA1(46770aa7e19b4f8a183be3f433c48ad677b552b1) ) // m17220a.4 ROM_END ROM_START( ichirj ) /* Ichident-R (Puzzle & Action 2) (c)1994 Sega (Japan) */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr16886", 0x000000, 0x080000, CRC(38208e28) SHA1(07fc634bdf2d3e25274c9c374b3506dec765114c) ) ROM_LOAD16_BYTE( "epr16885", 0x000001, 0x080000, CRC(1ce4e837) SHA1(16600600e12e3f35e3da89524f7f51f019b5ad17) ) ROM_LOAD16_BYTE( "epr16888", 0x100000, 0x080000, CRC(85d73722) SHA1(7ebe81b4d6c89f87f60200a3a8cddb07d581adef) ) ROM_LOAD16_BYTE( "epr16887", 0x100001, 0x080000, CRC(bc3bbf25) SHA1(e760ad400bc183b38e9787d88c8ac084fbe2ae21) ) ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "epr16884", 0x000000, 0x080000, CRC(fd9dcdd6) SHA1(b8053a2e68072e7664ffc3c53f983f3ba72a892b) ) ROM_END ROM_START( stkclmns ) /* Stack Columns (c)1994 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr16874.32", 0x000000, 0x080000, CRC(d78a871c) SHA1(7efcd5d07b089442be5170a3cf9e09579527252f) ) ROM_LOAD16_BYTE( "epr16873.31", 0x000001, 0x080000, CRC(1def1da4) SHA1(da534a971b40277b2d58ef22c07ca468250d23ca) ) ROM_LOAD16_BYTE( "mpr16797.34", 0x100000, 0x080000, CRC(b28e9bd5) SHA1(227eb591d10c9dbc52b35954ebd322e2a4451df2) ) ROM_LOAD16_BYTE( "mpr16796.33", 0x100001, 0x080000, CRC(ec7de52d) SHA1(85bc48cef15e615ad9059500808d17916c854a87) ) ROM_REGION( 0x020000, REGION_SOUND1, 0 ) ROM_LOAD( "epr16793.4", 0x000000, 0x020000, CRC(ebb2d057) SHA1(4a19ee5d71e4aabe7d9b9b968ab5ee4bc6262aad) ) ROM_END ROM_START( stkclmnj ) /* Stack Columns (c)1994 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr16795.32", 0x000000, 0x080000, CRC(b478fd02) SHA1(aaf9d9f9f4dc900b4e8ff6f258f26e782e5c3166) ) ROM_LOAD16_BYTE( "epr16794.31", 0x000001, 0x080000, CRC(6d0e8c56) SHA1(8f98d9fd98a1faa70b173cfd72f15102d11e79ae) ) ROM_LOAD16_BYTE( "mpr16797.34", 0x100000, 0x080000, CRC(b28e9bd5) SHA1(227eb591d10c9dbc52b35954ebd322e2a4451df2) ) ROM_LOAD16_BYTE( "mpr16796.33", 0x100001, 0x080000, CRC(ec7de52d) SHA1(85bc48cef15e615ad9059500808d17916c854a87) ) ROM_REGION( 0x020000, REGION_SOUND1, 0 ) ROM_LOAD( "epr16793.4", 0x000000, 0x020000, CRC(ebb2d057) SHA1(4a19ee5d71e4aabe7d9b9b968ab5ee4bc6262aad) ) ROM_END ROM_START( puyopuy2 ) /* Puyo Puyo 2 (c)1994 Compile */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr17241.32", 0x000000, 0x080000, CRC(1cad1149) SHA1(77fb0482fa35e615c0bed65f4d7f4dd89b241f23) ) ROM_LOAD16_BYTE( "epr17240.31", 0x000001, 0x080000, CRC(beecf96d) SHA1(c2bdad4b6184c11f81f2a5db409cb4ea186205a7) ) ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "epr17239.4", 0x000000, 0x080000, CRC(020ff6ef) SHA1(6095b8277b47a6fd7a9721f15a70ae5bf6be9b1a) ) ROM_END ROM_START( potopoto ) /* Poto Poto (c)1994 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr16662", 0x000000, 0x040000, CRC(bbd305d6) SHA1(1a4f4869fefac188c69bc67df0b625e43a0c3f1f) ) ROM_LOAD16_BYTE( "epr16661", 0x000001, 0x040000, CRC(5a7d14f4) SHA1(a615b5f481256366db7b1c6302a8dcb69708102b) ) ROM_REGION( 0x040000, REGION_SOUND1, 0 ) ROM_LOAD( "epr16660", 0x000000, 0x040000, CRC(8251c61c) SHA1(03eef3aa0bdde2c1d93128648f54fd69278d85dd) ) ROM_END ROM_START( zunkyou ) /* Zunzunkyou No Yabou (c)1994 Sega */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr16812.32", 0x000000, 0x080000, CRC(eb088fb0) SHA1(69089a3516ad50f35e81971ef3c33eb3f5d52374) ) ROM_LOAD16_BYTE( "epr16811.31", 0x000001, 0x080000, CRC(9ac7035b) SHA1(1803ffbadc1213e04646d483e27da1591e22cd06) ) ROM_LOAD16_BYTE( "epr16814.34", 0x100000, 0x080000, CRC(821b3b77) SHA1(c45c7393a792ce8306a52f83f8ed8f6b0d7c11e9) ) ROM_LOAD16_BYTE( "epr16813.33", 0x100001, 0x080000, CRC(3cba9e8f) SHA1(208819bc1a205eaab089542afc7a59f69ce5bb81) ) ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "epr16810.4", 0x000000, 0x080000, CRC(d542f0fe) SHA1(23ea50110dfe1cd9f286a535d15e0c3bcba73b00) ) ROM_END ROM_START( pclubj ) /* Print Club (c)1995 Atlus */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "epr18171.32", 0x000000, 0x080000, CRC(6c8eb8e2) SHA1(bbd885a83269524215c1d8470544086e3e82c05c) ) ROM_LOAD16_BYTE( "epr18170.31", 0x000001, 0x080000, CRC(72c631e6) SHA1(77c4ed793db6cb75346998f38a637db64fd258bd) ) ROM_LOAD16_BYTE( "epr18173.34", 0x100000, 0x080000, CRC(9809dc72) SHA1(6dbe6b7d4e525aa9b6174f8dc5aee12a5e00a009) ) ROM_LOAD16_BYTE( "epr18172.33", 0x100001, 0x080000, CRC(c61d819b) SHA1(4813ed3161e16099f482e0cf8df3cbe6c01c619c) ) ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "epr18169.4", 0x000000, 0x080000, CRC(5c00ccfb) SHA1(d043ffa6528bb9b76774c96df4edf8222a1878a4) ) ROM_END ROM_START( pclubjv2 ) /* Print Club vol.2 (c)1995 Atlus */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "p2jwn.u32", 0x000000, 0x080000, CRC(dfc0f7f1) SHA1(d2399f3ff05006590903f943cd77a9c709b9b5b1) ) ROM_LOAD16_BYTE( "p2jwn.u31", 0x000001, 0x080000, CRC(6ab4c694) SHA1(d8cfaa1a49e86842079c6e3800a95c5afaf76ab6) ) ROM_LOAD16_BYTE( "p2jwn.u34", 0x100000, 0x080000, CRC(854fd456) SHA1(eff7413a7acd8ee37cb73bc8dfd4f4ae53c04836) ) ROM_LOAD16_BYTE( "p2jwn.u33", 0x100001, 0x080000, CRC(64428a69) SHA1(e2c5ead4b35db76fda1db03adcd020bde5ca1dd2) ) ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "epr18169.4", 0x000000, 0x080000, CRC(5c00ccfb) SHA1(d043ffa6528bb9b76774c96df4edf8222a1878a4) ) ROM_END ROM_START( pclubjv4 ) /* Print Club vol.4 (c)1996 Atlus */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "p4jsm.u32", 0x000000, 0x080000, CRC(36ff5f80) SHA1(33872aa00c8ca3f54dd7503a44562fbdad92df7d) ) ROM_LOAD16_BYTE( "p4jsm.u31", 0x000001, 0x080000, CRC(f3c021ad) SHA1(34792d861265b609d5022955eb7d2f471c63dfb8) ) ROM_LOAD16_BYTE( "p4jsm.u34", 0x100000, 0x080000, CRC(d0fd4b33) SHA1(c272404f09bdb6596740ab150eb158cc22cc9aa6) ) ROM_LOAD16_BYTE( "p4jsm.u33", 0x100001, 0x080000, CRC(ec667875) SHA1(d235a1d8dfa90e1c638e1f079ce528f61450e1f0) ) ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "epr18169.4", 0x000000, 0x080000, CRC(5c00ccfb) SHA1(d043ffa6528bb9b76774c96df4edf8222a1878a4) ) ROM_END ROM_START( pclubjv5 ) /* Print Club vol.5 (c)1996 Atlus */ ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_BYTE( "p5jat.u32", 0x000000, 0x080000, CRC(72220e69) SHA1(615de759d73469841987fb028eaf5d5598c32553) ) ROM_LOAD16_BYTE( "p5jat.u31", 0x000001, 0x080000, CRC(06d83fde) SHA1(dc68375ccb16cde7900eb05f702bc15e7e702ea5) ) ROM_LOAD16_BYTE( "p5jat.u34", 0x100000, 0x080000, CRC(b172ab58) SHA1(47a70bd678f6c4dafe70b83bd3db678cf44de48b) ) ROM_LOAD16_BYTE( "p5jat.u33", 0x100001, 0x080000, CRC(ba38ec50) SHA1(666fdba56d8a4dab041015c5e8102305b491d293) ) ROM_REGION( 0x080000, REGION_SOUND1, 0 ) ROM_LOAD( "epr18169.4", 0x000000, 0x080000, CRC(5c00ccfb) SHA1(d043ffa6528bb9b76774c96df4edf8222a1878a4) ) ROM_END /****************************************************************************** Machine Init Functions ******************************************************************************* All of the Sega C/C2 games apart from Bloxeed used a protection chip. The games contain various checks which make sure this protection chip is present and returning the expected values. The chip uses a table of 256x4-bit values to produce its results. It appears that different tables are used for Japanese vs. English variants of some games (Puzzle & Action 2) but not others (Columns). ******************************************************************************/ static void segac2_common_init(const UINT32 *table) { prot_table = table; bloxeed_sound = 0; } static DRIVER_INIT( c2boot ) { segac2_common_init(NULL); } static DRIVER_INIT( bloxeedc ) { segac2_common_init(NULL); bloxeed_sound = 1; } static DRIVER_INIT( columns ) { static const UINT32 table[256/8] = { 0x20a41397, 0x64e057d3, 0x20a41397, 0x64e057d3, 0x20a41397, 0x64e057d3, 0xa8249b17, 0xec60df53, 0x20a41397, 0x64e057d3, 0x75f546c6, 0x31b10282, 0x20a41397, 0x64e057d3, 0xfd75ce46, 0xb9318a02, 0xb8348b07, 0xfc70cf43, 0xb8348b07, 0xfc70cf43, 0x9a168b07, 0xde52cf43, 0x9a168b07, 0xde52cf43, 0x30b40387, 0x74f047c3, 0x75f546c6, 0x31b10282, 0x30b40387, 0x74f047c3, 0xfd75ce46, 0xb9318a02 }; segac2_common_init(table); } static DRIVER_INIT( columns2 ) { static const UINT32 table[256/8] = { 0x0015110c, 0x0015110c, 0x889d9984, 0xcedb9b86, 0x4455554c, 0x4455554c, 0xddddccc4, 0x9b9bcec6, 0x2237332e, 0x2237332e, 0x6677776e, 0x2031756c, 0x6677776e, 0x6677776e, 0x7777666e, 0x3131646c, 0x0015110c, 0x0015110c, 0x889d9984, 0xcedb9b86, 0x6677776e, 0x6677776e, 0xffffeee6, 0xb9b9ece4, 0xaabfbba6, 0xaabfbba6, 0xeeffffe6, 0xa8b9fde4, 0xeeffffe6, 0xeeffffe6, 0xffffeee6, 0xb9b9ece4 }; segac2_common_init(table); } static DRIVER_INIT( borench ) { /* 317-0173 */ static const UINT32 table[256/8] = { 0x12fe56ba, 0x56ba56ba, 0x00aa44ee, 0xcceeccee, 0x13ff57bb, 0x759957bb, 0x11bb55ff, 0xffddddff, 0x12ba56fe, 0x56fe56fe, 0x00aa44ee, 0xcceeccee, 0x933bd77f, 0xf55dd77f, 0x913bd57f, 0x7f5d5d7f, 0x12fe56ba, 0x56ba56ab, 0x00aa44ee, 0xcceeccff, 0xd73bd73b, 0xf519d72a, 0xd57fd57f, 0x7f5d5d6e, 0x12ba56fe, 0x56fe56ef, 0x00aa44ee, 0xcceeccff, 0xd77fd77f, 0xf55dd76e, 0xd57fd57f, 0x7f5d5d6e }; segac2_common_init(table); } static DRIVER_INIT( tfrceac ) { static const UINT32 table[256/8] = { 0x3a3a6f6f, 0x38386d6d, 0x3a3a6f6f, 0x28287d7d, 0x3a3a6f6f, 0x38386d6d, 0x3a3a6f6f, 0x28287d7d, 0x7e3a2b6f, 0x7c38296d, 0x7eb22be7, 0x6ca039f5, 0x7e3a2b6f, 0x7c38296d, 0x7eb22be7, 0x6ca039f5, 0x3b3b6e6e, 0x39396c6c, 0x5dd50880, 0x4ec61b93, 0x3b3b6e6e, 0x39396c6c, 0x3bb36ee6, 0x28a07df5, 0x5d19084c, 0x5d19084c, 0x7ff72aa2, 0x6ee63bb3, 0x5d19084c, 0x5d19084c, 0x5d9108c4, 0x4c8019d5 }; segac2_common_init(table); } static DRIVER_INIT( tfrceacb ) { /* disable the palette bank switching from the protection chip */ segac2_common_init(NULL); memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x800000, 0x800001, 0, 0, MWA16_NOP); } static DRIVER_INIT( twinsqua ) { static const UINT32 table[256/8] = { 0xbb33aa22, 0xffffeeee, 0xa820bb33, 0xfd75ee66, 0xbb33bb33, 0xbbbbbbbb, 0xa820aa22, 0xb931bb33, 0x33bb22aa, 0xffffeeee, 0x22aa31b9, 0x77ff64ec, 0x33bb33bb, 0xbbbbbbbb, 0x22aa20a8, 0x33bb31b9, 0xbb33aa22, 0xffffeeee, 0xec64ff77, 0xb931aa22, 0xbb33bb33, 0xbbbbbbbb, 0xec64ee66, 0xfd75ff77, 0x33bb22aa, 0xffffeeee, 0x66ee75fd, 0x33bb20a8, 0x33bb33bb, 0xbbbbbbbb, 0x66ee64ec, 0x77ff75fd }; segac2_common_init(table); } static DRIVER_INIT( ribbit ) { static const UINT32 table[256/8] = { 0xffbb773b, 0xffbf773f, 0xfebafeba, 0xfebefebe, 0xee886619, 0xff9d771d, 0xef89ef98, 0xfe9cfe9c, 0xdf9b571b, 0x5717ffb7, 0xde9ade9a, 0x56167636, 0xcea84639, 0x5735ff95, 0xcfa9cfb8, 0x56347614, 0xffff333b, 0xffff333b, 0xfefebaba, 0xfefebaba, 0xeecc2219, 0xffdd3319, 0xefcdab98, 0xfedcba98, 0xdfdf131b, 0x5757bbb3, 0xdede9a9a, 0x56563232, 0xceec0239, 0x5775bb91, 0xcfed8bb8, 0x56743210 }; segac2_common_init(table); } static DRIVER_INIT( tantr ) { /* 317-0211 */ static const UINT32 table[256/8] = { 0x91ddd19d, 0x91ddd19d, 0xd4dc949c, 0xf6feb6be, 0x91bbd1fb, 0x91bbd1fb, 0xd4fe94be, 0xf6feb6be, 0x80cce2ae, 0x88cceaae, 0xc5cda7af, 0xefef8d8d, 0x91bbf3d9, 0x99bbfbd9, 0xd4feb69c, 0xfefe9c9c, 0x5d55959d, 0x5d55959d, 0x5c54949c, 0x7e76b6be, 0x5d7795bf, 0x5d7795bf, 0x5c7694be, 0x7e76b6be, 0x5d55b7bf, 0x4444aeae, 0x5c54b6be, 0x67678d8d, 0x5d77b79d, 0x5577bf9d, 0x5c76b69c, 0x76769c9c }; segac2_common_init(table); } static DRIVER_INIT( tantrkor ) { static const UINT32 table[256/8] = { 0x80931102, 0xc4d75546, 0xd5825502, 0x91c61146, 0x081b998a, 0x4c5fddce, 0x5d0add8a, 0x194e99ce, 0xc4d77764, 0xc4d77764, 0x91c63364, 0x91c63364, 0xc4d77764, 0xc4d77764, 0x91c63364, 0x91c63364, 0x91930002, 0xd5d74446, 0xc4824402, 0x80c60046, 0x191b888a, 0x5d5fccce, 0x4c0acc8a, 0x084e88ce, 0xd5d76664, 0xd5d76664, 0x80c62264, 0x80c62264, 0xd5d76664, 0xd5d76664, 0x80c62264, 0x80c62264 }; segac2_common_init(table); } static DRIVER_INIT( puyo ) { /* 317-0203 */ static const UINT32 table[256/8] = { 0x33aa55cc, 0x33aa55cc, 0xba22fe66, 0xba22fe66, 0x77ee55cc, 0x55cc77ee, 0xfe66fe66, 0xdc44dc44, 0x33aa77ee, 0x77aa33ee, 0xba22fe66, 0xfe22ba66, 0x77ee77ee, 0x11cc11cc, 0xfe66fe66, 0x98449844, 0x22bb44dd, 0x3ba25dc4, 0xab33ef77, 0xba22fe66, 0x66ff44dd, 0x5dc47fe6, 0xef77ef77, 0xdc44dc44, 0x22bb66ff, 0x7fa23be6, 0xab33ef77, 0xfe22ba66, 0x66ff66ff, 0x19c419c4, 0xef77ef77, 0x98449844 }; segac2_common_init(table); } static DRIVER_INIT( ichir ) { static const UINT32 table[256/8] = { 0x4c4c4c4c, 0x08080808, 0x5d5d4c4c, 0x19190808, 0x33332222, 0x33332222, 0x22222222, 0x22222222, 0x082a082a, 0x082a082a, 0x193b082a, 0x193b082a, 0x77556644, 0x33112200, 0x66446644, 0x22002200, 0x6e6e6e6e, 0x2a2a2a2a, 0x7f7f6e6e, 0x3b3b2a2a, 0xbbbbaaaa, 0xbbbbaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0x2a082a08, 0x2a082a08, 0x3b192a08, 0x3b192a08, 0xffddeecc, 0xbb99aa88, 0xeecceecc, 0xaa88aa88 }; segac2_common_init(table); } static DRIVER_INIT( ichirk ) { static const UINT32 table[256/8] = { 0x44004400, 0x00440044, 0x55114400, 0x11550044, 0x55885588, 0x55885588, 0x66bb77aa, 0x66bb77aa, 0x02020202, 0x46464646, 0x13130202, 0x57574646, 0x138a138a, 0x138a138a, 0x20b931a8, 0x20b931a8, 0x44004400, 0x00440044, 0x55114400, 0x11550044, 0x55885588, 0x55885588, 0x66bb77aa, 0x66bb77aa, 0x8a8a8a8a, 0xcececece, 0x9b9b8a8a, 0xdfdfcece, 0x9b029b02, 0x9b029b02, 0xa831b920, 0xa831b920 }; segac2_common_init(table); } static DRIVER_INIT( ichirj ) { /* 317-0224 */ static const UINT32 table[256/8] = { 0x55116622, 0x55116622, 0x55117733, 0x55117733, 0x8800aa22, 0x8800aa22, 0x8800bb33, 0x8800bb33, 0x11550044, 0x55114400, 0x11551155, 0x55115511, 0xcc44cc44, 0x88008800, 0xcc44dd55, 0x88009911, 0xdd99eeaa, 0xdd99eeaa, 0xdd99ffbb, 0xdd99ffbb, 0xaa228800, 0xaa228800, 0xaa229911, 0xaa229911, 0x99dd88cc, 0xdd99cc88, 0x99dd99dd, 0xdd99dd99, 0xee66ee66, 0xaa22aa22, 0xee66ff77, 0xaa22bb33 }; segac2_common_init(table); } static DRIVER_INIT( ichirjbl ) { /* when did this actually work? - the protection is patched but the new check fails? */ UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); rom[0x390/2] = 0x6600; } static DRIVER_INIT( stkclmns ) { static const UINT32 table[256/8] = { 0x1d591d59, 0x0c590c59, 0x1d590c48, 0x0c591d48, 0x1f5b1f5b, 0x0e5b0e5b, 0x1f5b0e4a, 0x0e5b1f4a, 0x915d915d, 0x805d805d, 0x915d804c, 0x805d914c, 0x935f935f, 0x825f825f, 0x935f824e, 0x825f934e, 0x15153737, 0x04152637, 0x15152626, 0x04153726, 0x17173535, 0x06172435, 0x17172424, 0x06173524, 0x9911bb33, 0x8811aa33, 0x9911aa22, 0x8811bb22, 0x9b13b931, 0x8a13a831, 0x9b13a820, 0x8a13b920 }; segac2_common_init(table); } static DRIVER_INIT( stkclmnj ) { static const UINT32 table[256/8] = { 0xcc88cc88, 0xcc88cc88, 0xcc99cc99, 0xcc99cc99, 0x00001111, 0x88889999, 0x00111100, 0x88999988, 0xaaee88cc, 0xeeaacc88, 0xaaff88dd, 0xeebbcc99, 0x66665555, 0xaaaa9999, 0x66775544, 0xaabb9988, 0xeeaaeeaa, 0xeeaaeeaa, 0xeebbeebb, 0xeebbeebb, 0x00001111, 0x88889999, 0x00111100, 0x88999988, 0x00442266, 0x44006622, 0x00552277, 0x44116633, 0xeeeedddd, 0x22221111, 0xeeffddcc, 0x22331100 }; segac2_common_init(table); } static DRIVER_INIT( puyopuy2 ) { /* 317-0228 */ static const UINT32 table[256/8] = { 0x03038b8b, 0x03030303, 0xcf4747cf, 0xcf47cf47, 0x03038b8b, 0x21212121, 0xcf4747cf, 0xed65ed65, 0x4141c9c9, 0x41414141, 0x9c05148d, 0x9c059c05, 0x4141c9c9, 0x63636363, 0x9c05148d, 0xbe27be27, 0x5757dfdf, 0x57575757, 0xdf5757df, 0xdf57df57, 0x5757dfdf, 0x75757575, 0xdf5757df, 0xfd75fd75, 0x15159d9d, 0x15151515, 0x8c15049d, 0x8c158c15, 0x15159d9d, 0x37373737, 0x8c15049d, 0xae37ae37 }; segac2_common_init(table); } static DRIVER_INIT( potopoto ) { /* 317-0218 */ static const UINT32 table[256/8] = { 0xb33ba22a, 0xa23bb32a, 0xa22aa22a, 0xb32ab32a, 0xb139a028, 0xa039b128, 0xa028a028, 0xb128b128, 0x3f3f2e2e, 0x2e3f3f2e, 0x2e2e2e2e, 0x3f2e3f2e, 0x3d3d2c2c, 0x2c3d3d2c, 0x2c2c2c2c, 0x3d2c3d2c, 0xdd11ee22, 0xcc11ff22, 0xcc00ee22, 0xdd00ff22, 0xdf13ec20, 0xce13fd20, 0xce02ec20, 0xdf02fd20, 0x51156226, 0x40157326, 0x40046226, 0x51047326, 0x53176024, 0x42177124, 0x42066024, 0x53067124 }; segac2_common_init(table); } static DRIVER_INIT( zunkyou ) { static const UINT32 table[256/8] = { 0xa0a06c6c, 0x82820a0a, 0xecec2020, 0xecec6464, 0xa2a26e6e, 0x80800808, 0xaaaa6666, 0xaaaa2222, 0x39287d6c, 0x1b0a1b0a, 0x75643120, 0x75647564, 0x3b2a7f6e, 0x19081908, 0x33227766, 0x33223322, 0xb1b17d7d, 0x93931b1b, 0xfdfd3131, 0xfdfd7575, 0xa2a26e6e, 0x80800808, 0xaaaa6666, 0xaaaa2222, 0x28396c7d, 0x0a1b0a1b, 0x64752031, 0x64756475, 0x3b2a7f6e, 0x19081908, 0x33227766, 0x33223322 }; segac2_common_init(table); } static DRIVER_INIT( pclub ) { static const UINT32 table[256/8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }; segac2_common_init(table); memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880120, 0x880121, 0, 0, printer_r );/*Print Club Vol.1*/ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880124, 0x880125, 0, 0, printer_r );/*Print Club Vol.2*/ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880124, 0x880125, 0, 0, print_club_camera_w); } static DRIVER_INIT( pclubjv2 ) { static const UINT32 table[256/8] = { 0x5544ffee, 0x4455eeff, 0x5d4cf7e6, 0x5d4cf7e6, 0x5702fda8, 0x4657ecfd, 0x5f0af5a0, 0x5f4ef5e4, 0x115599dd, 0x004488cc, 0x195d91d5, 0x195d91d5, 0x13139b9b, 0x02468ace, 0x1b1b9393, 0x1b5f93d7, 0xcccceeee, 0xddddffff, 0xc4c4e6e6, 0xc4c4e6e6, 0xce8aeca8, 0xdfdffdfd, 0xc682e4a0, 0xc6c6e4e4, 0x99dd99dd, 0x88cc88cc, 0x91d591d5, 0x91d591d5, 0x9b9b9b9b, 0x8ace8ace, 0x93939393, 0x93d793d7 }; segac2_common_init(table); memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880120, 0x880121, 0, 0, printer_r );/*Print Club Vol.1*/ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880124, 0x880125, 0, 0, printer_r );/*Print Club Vol.2*/ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880124, 0x880125, 0, 0, print_club_camera_w); } static DRIVER_INIT( pclubjv4 ) { static const UINT32 table[256/8] = { 0x62736273, 0x40404040, 0x51404051, 0x15150404, 0xe8f9e8f9, 0xcacacaca, 0xdbcacadb, 0x9f9f8e8e, 0x62626262, 0x40404040, 0x51514040, 0x15150404, 0xeaeaeaea, 0xc8c8c8c8, 0xd9d9c8c8, 0x9d9d8c8c, 0xea73ea73, 0xc840c840, 0xd940c851, 0x9d158c04, 0xe871e871, 0xca42ca42, 0xdb42ca53, 0x9f178e06, 0xea62ea62, 0xc840c840, 0xd951c840, 0x9d158c04, 0xea62ea62, 0xc840c840, 0xd951c840, 0x9d158c04 }; segac2_common_init(table); memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880120, 0x880121, 0, 0, printer_r );/*Print Club Vol.1*/ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880124, 0x880125, 0, 0, printer_r );/*Print Club Vol.2*/ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880124, 0x880125, 0, 0, print_club_camera_w); } static DRIVER_INIT( pclubjv5 ) { static const UINT32 table[256/8] = { 0xff77ee66, 0xdd55cc44, 0xdb53ca42, 0xf971e860, 0x66777766, 0x44555544, 0x42535342, 0x60717160, 0x66eeee66, 0x44cccc44, 0x42caca42, 0x60e8e860, 0xffee7766, 0xddcc5544, 0xdbca5342, 0xf9e87160, 0x99118800, 0xdd55cc44, 0xbd35ac24, 0xf971e860, 0x00111100, 0x44555544, 0x24353524, 0x60717160, 0x00888800, 0x44cccc44, 0x24acac24, 0x60e8e860, 0x99881100, 0xddcc5544, 0xbdac3524, 0xf9e87160 }; segac2_common_init(table); memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880120, 0x880121, 0, 0, printer_r );/*Print Club Vol.1*/ memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880124, 0x880125, 0, 0, printer_r );/*Print Club Vol.2*/ memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x880124, 0x880125, 0, 0, print_club_camera_w); } /****************************************************************************** Game Drivers ******************************************************************************* These cover all the above games. Dates are all verified correct from Ingame display, some of the Titles such as Ichidant-R, Tant-R might be slightly incorrect as I've seen the games refered to by other names such as Ichident-R, Tanto-R, Tanto Arle etc. bloxeedc is set as as clone of bloxeed as it is the same game but running on a different piece of hardware. The parent 'bloxeed' is a system18 game and does not currently work due to it being encrypted. ******************************************************************************/ /* System C Games */ GAME( 1989, bloxeedc, bloxeed, segac, bloxeedc, bloxeedc, ROT0, "Sega / Elorg", "Bloxeed (World, C System)", 0 ) GAME( 1989, bloxeedu, bloxeed, segac, bloxeedc, bloxeedc, ROT0, "Sega / Elorg", "Bloxeed (US, C System)", 0 ) GAME( 1990, columns, 0, segac, columns, columns, ROT0, "Sega", "Columns (World)", 0 ) GAME( 1990, columnsu, columns, segac, columnsu, columns, ROT0, "Sega", "Columns (US, cocktail)", 0 ) // has cocktail mode dsw GAME( 1990, columnsj, columns, segac, columns, columns, ROT0, "Sega", "Columns (Japan)", 0 ) GAME( 1990, columns2, 0, segac, columns2, columns2, ROT0, "Sega", "Columns II: The Voyage Through Time (World)", 0 ) GAME( 1990, column2j, columns2, segac, columns2, columns2, ROT0, "Sega", "Columns II: The Voyage Through Time (Japan)", 0 ) /* System C-2 Games */ GAME( 1990, borench, 0, segac2, borench, borench, ROT0, "Sega", "Borench", 0 ) GAME( 1990, tfrceac, 0, segac2, tfrceac, tfrceac, ROT0, "Sega / Technosoft", "ThunderForce AC", 0 ) GAME( 1990, tfrceacj, tfrceac, segac2, tfrceac, tfrceac, ROT0, "Sega / Technosoft", "ThunderForce AC (Japan)", 0 ) GAME( 1990, tfrceacb, tfrceac, segac2, tfrceac, tfrceacb, ROT0, "bootleg", "ThunderForce AC (bootleg)", 0 ) GAME( 1991, twinsqua, 0, segac2, twinsqua, twinsqua, ROT0, "Sega", "Twin Squash", 0 ) GAME( 1991, ribbit, 0, segac2, ribbit, ribbit, ROT0, "Sega", "Ribbit!", 0 ) GAME( 1992, tantr, 0, segac2, ichir, tantr, ROT0, "Sega", "Puzzle & Action: Tant-R (Japan)", 0 ) GAME( 1993, tantrkor, tantr, segac2, ichir, tantrkor, ROT0, "Sega", "Puzzle & Action: Tant-R (Korea)", 0 ) GAME( 1992, tantrbl, tantr, segac2, ichir, c2boot, ROT0, "bootleg", "Puzzle & Action: Tant-R (Japan) (bootleg set 1)", 0 ) GAME( 1994, tantrbl2, tantr, segac, ichir, tantr, ROT0, "bootleg", "Puzzle & Action: Tant-R (Japan) (bootleg set 2)", 0 ) // Common bootleg in Europe, C board, no samples GAME( 1994, tantrbl3, tantr, segac, ichir, tantr, ROT0, "bootleg", "Puzzle & Action: Tant-R (Japan) (bootleg set 3)", 0 ) // Common bootleg in Europe, C board, no samples GAME( 1992, puyo, 0, segac2, puyo, puyo, ROT0, "Sega / Compile", "Puyo Puyo (World)", 0 ) GAME( 1992, puyobl, puyo, segac2, puyo, puyo, ROT0, "bootleg", "Puyo Puyo (World, bootleg)", 0 ) GAME( 1992, puyoj, puyo, segac2, puyo, puyo, ROT0, "Sega / Compile", "Puyo Puyo (Japan)", 0 ) GAME( 1992, puyoja, puyo, segac2, puyo, puyo, ROT0, "Sega / Compile", "Puyo Puyo (Japan, Rev A)", 0 ) GAME( 1994, ichir, 0, segac2, ichir, ichir, ROT0, "Sega", "Puzzle & Action: Ichidant-R (World)", 0 ) GAME( 1994, ichirk, ichir, segac2, ichir, ichirk, ROT0, "Sega", "Puzzle & Action: Ichidant-R (Korea)", 0 ) GAME( 1994, ichirj, ichir, segac2, ichir, ichirj, ROT0, "Sega", "Puzzle & Action: Ichidant-R (Japan)", 0 ) GAME( 1994, ichirjbl, ichir, segac, ichir, ichirjbl, ROT0, "bootleg", "Puzzle & Action: Ichidant-R (Japan) (bootleg)", 0 ) // C board, no samples GAME( 1994, stkclmns, 0, segac2, stkclmns, stkclmns, ROT0, "Sega", "Stack Columns (World)", 0 ) GAME( 1994, stkclmnj, stkclmns, segac2, stkclmns, stkclmnj, ROT0, "Sega", "Stack Columns (Japan)", 0 ) GAME( 1994, puyopuy2, 0, segac2, puyopuy2, puyopuy2, ROT0, "Compile (Sega license)", "Puyo Puyo 2 (Japan)", 0 ) GAME( 1994, potopoto, 0, segac2, potopoto, potopoto, ROT0, "Sega", "Poto Poto (Japan)", 0 ) GAME( 1994, zunkyou, 0, segac2, zunkyou, zunkyou, ROT0, "Sega", "Zunzunkyou No Yabou (Japan)", 0 ) /* Atlus Print Club 'Games' (C-2 Hardware, might not be possible to support them because they use camera + printer, really just put here for reference) */ GAME( 1995, pclubj, 0, segac2, pclub, pclub, ROT0, "Atlus", "Print Club (Japan Vol.1)", GAME_NOT_WORKING ) GAME( 1995, pclubjv2, pclubj, segac2, pclub, pclubjv2, ROT0, "Atlus", "Print Club (Japan Vol.2)", GAME_NOT_WORKING ) GAME( 1996, pclubjv4, pclubj, segac2, pclub, pclubjv4, ROT0, "Atlus", "Print Club (Japan Vol.4)", GAME_NOT_WORKING ) GAME( 1996, pclubjv5, pclubj, segac2, pclub, pclubjv5, ROT0, "Atlus", "Print Club (Japan Vol.5)", GAME_NOT_WORKING )