summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/mame/drivers/namcos10.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mame/drivers/namcos10.c')
-rw-r--r--trunk/src/mame/drivers/namcos10.c648
1 files changed, 648 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/namcos10.c b/trunk/src/mame/drivers/namcos10.c
new file mode 100644
index 00000000000..b8ee79e0225
--- /dev/null
+++ b/trunk/src/mame/drivers/namcos10.c
@@ -0,0 +1,648 @@
+/***************************************************************************
+
+ Namco System 10 - Arcade PSX Hardware
+ =====================================
+ Driver by smf
+
+Namco System 10 Hardware Overview
+---------------------------------
+Note! This document is a Work-In-Progress and will be updated from time to time when more dumps are available.
+
+This document covers all the known Namco System 10 games, including....
+*Drum Master (C) Namco, 2001
+*Drum Master 2 (C) Namco, 2001
+*Drum Master 3 (C) Namco, 2002
+*Drum Master 4 (C) Namco, 2003
+*Drum Master 5 (C) Namco, 2003
+*Drum Master 6 (C) Namco, 2004
+*Drum Master 7 (C) Namco, 2005
+*GAHAHA Ippatsu-dou (C) Namco/Metro, 2000
+*GAHAHA Ippatsu-dou 2 (C) Namco/Metro, 2001
+Gamshara (10021 Ver.A) (C) Mitchell, 2003
+Gekitoride-Jong Space (10011 Ver.A) (C) Namco/Metro, 2001
+*Golgo-13 3 : Juusei no Chinkonka (C) Namco/8ing/Raizing, 2001
+*Hard Puncher Hajime no Ippo 2 Ouja e no Chousen (C) Namco/Taito, 2002
+*Honne Hakkenki (C) Namco, 2001
+Kotoba no Puzzle Mojipittan (KPM1 Ver.A) (C) Namco, 2001
+*Kurukuru Food (C) Namco, 2002
+Mr Driller 2 (DR21 Ver.A) (C) Namco, 2000
+Mr Driller 2 (DR22 Ver.A) (C) Namco, 2000
+Mr Driller G (DRG1 Ver.A) (C) Namco, 2001
+*NFL Classic Football (C) Namco, 2003
+Panicuru Panekuru (PPA1 Ver.A) (C) Namco, 2001
+*Photo Battole (C) Namco, 2001
+Point Blank 3 / Gunbalina (GNN2 Ver. A) (C) Namco, 2000
+*Ren-ai Quiz High School Angel (C) Namco, 2002
+*Seishun Quiz Colorful High School (C) Namco, 2002
+Star Trigon (STT1 Ver.A) (C) Namco, 2002
+*Taiko No Tatsujin (C) Namco, 2001
+*Taiko No Tatsujin 2 (C) Namco, 2001
+*Taiko No Tatsujin 3 (C) Namco, 2002
+*Taiko No Tatsujin 4 (C) Namco, 2003
+*Taiko No Tatsujin 5 (C) Namco, 2003
+*Taiko No Tatsujin 6 (C) Namco, 2004
+*Tsukkomi Yousei Gips Nice Tsukkomi (C) Namco/Metro, 2002
+Uchuu Daisakusen : Chocovader Contactee (CVC1 Ver.A) (C) Namco, 2002
+
+* - denotes not dumped yet. If you can help with the remaining undumped S10 games,
+ please contact me at http://guru.mameworld.info/
+
+The Namco System 10 system comprises 2 PCB's....
+MAIN PCB - This is the mother board PCB. It holds the main CPU/GPU & SPU and all sound circuitry, program & video RAM,
+ controller/input logic and video output circuitry. Basically everything except the ROMs.
+ There are three known revisions of this PCB so far. The differences seem very minor. The 2nd and 3rd revision
+ have an updated CPLD revision.
+ The 3rd revision has an updated model Sony chip. The only other _noticeable_ difference is some component
+ shuffling in the sound amplification section to accommodate two extra 1000uF capacitors and one 470uF capacitor
+ has been replaced by a 1000uF capacitor. Everything else, including all the PLDs appears to be identical.
+ Note there are no ROMs on the Main PCB and also no custom Namco chips on System10, which seem to have been
+ phased out. Instead, they have been replaced by (custom programmed) CPLDs, probably due to cost-cutting
+ measures within the company, or to reduce the cost of System10 to an entry-level no-frills development platform.
+MEM PCB - There are two known revisions of this PCB (so far). They're mostly identical except for the type/number of ROMs
+ used and the contents of the CPLD. The 2nd revision also has a RAM chip on it.
+ Each game has a multi-letter code assigned to it which is printed on a small sticker and placed on the top side
+ of the MEM PCB.
+ This code is then proceeded by a number (only '1' & '2' seen so far), then 'Ver.' then A/B/C/D/E (only 'A' seen so far)
+ which denotes the software revision, and in some cases a sub-revision such as 1 or 2 (usually only listed in the
+ test mode).
+ The first 1 denotes a Japanese version. Other numbers denote a World version.
+ For World versions, only the main program changes, the rest of the (graphics) ROMs use the Japanese version ROMs.
+ Any System 10 MEM PCB can be swapped to run on any System 10 Main PCB regardless of the main board revision.
+ The high scores are stored on the MEM PCB (probably inside the main program EEPROMs/FlashROMs or maybe the CPLD?).
+ Also, on all System 10 games, there is a sticker with a serial number on it and the program ROMs also contain
+ that same serial number. I'm not sure why, they're not exactly _easily_ tracable and no one cares either way ;-)
+ See the Main PCB and ROM Daughterboard PCB texts below for more details.
+
+
+Main PCB Layout
+---------------
+
+Revision 1
+SYSTEM10 MAIN PCB 8906960103 (8906970103)
+
+Revision 2
+SYSTEM10 MAIN PCB 8906960104 (8906970104)
+
+Revision 3
+SYSTEM10 MAIN PCB 8906962400 (8906972400)
+ |----------------------------------------------------------|
+ | LA4705 VR1 J201 |
+ | |----------------------| |
+ | NJM3414 |----------------------| |
+|-| |
+| BA3121 |
+| NJM3414 54V25632 54V25632 J1|
+| CXD1178Q |
+|J JP4 |---------| |-------| |
+|A | | | | |
+|M CXA2067AS |CXD8561CQ| |CY37128| |
+|M 53.693175MHz | | |VP160 | |
+|A | | | | |
+| |---------| |-------| |
+| |
+| 101.4912MHz |
+|-| MAX734 IS41LV16100 |
+ | |---------| |
+ | DSW1 IS41LV16100 | | |
+ | |CXD8606BQ| |
+ | GAL16V8D | | |
+ |J5 |-| * | | PST592 |
+ | | | |---------| |--------| |
+ | | | | | |
+ | | | * |CXD2938Q| |
+ |J4 | |J202 IS41LV16256 | | |
+ | | | | | |
+ | | | EPM3064 |--------| |
+ | | | |
+ | |-| PQ30RV21 |
+ | J103 |
+ |----------------------------------------------------------|
+Notes:
+------
+ CXD8606BQ : SONY CXD8606BQ Central Processing Unit / GTE (QFP208)
+ - replaced by CXD8606CQ on Revision 3 Main PCB
+ CXD8561CQ : SONY CXD8561CQ Graphics Processsor Unit (QFP208)
+ CXD2938Q : SONY CXD2938Q Sound Processor Unit (QFP208)
+ CXD1178Q : SONY CXD1178Q 8-bit RGB 3-channel D/A converter (QFP48)
+ CXA2067AS : SONY CXA2067AS TV/Video circuit RGB Pre-Driver (SDIP30)
+ CY37128VP160: CYPRESS CY37128VP160 Complex Programmable Logic Device (TQFP160, stamped 'S10MA1')
+ - replaced by an updated revision on Revision 2 & 3 Main PCB and stamped 'S10MA1B'
+ EPM3064 : Altera MAX EPM3064ATC100-10 Complex Programmable Logic Device (TQFP100, stamped 'S10MA2A')
+ GAL16V8D : GAL16V8D PAL (PLCC20, stamped 'S10MA3A')
+ IS41LV16100 : ISSI IS41LV16100S-50T 1M x16 EDO DRAM (x2, TSOP50(44) Type II)
+ IS41LV16256 : ISSI IS41LV16256-50T 256k x16 EDO DRAM (TSOP44(40) Type II)
+ 54V25632 : OKI 54V25632 256K x32 SGRAM (x2, QFP100)
+ PQ30RV31 : Sharp PQ30RV31 5 Volt to 3.3 Volt Voltage Regulator
+ LA4705 : LA4705 15W 2-channel Power Amplifier (SIP18)
+ MAX734 : MAX734 +12V 120mA Flash Memory Programming Supply Switching Regulator (SOIC8)
+ PST592 : PST592J System Reset IC with 2.7V detection circuit (SOIC4)
+ BA3121 : Ground Isolation Amplifier/ Noise Eliminator (SOIC8)
+ NJM3414 : 70mA Dual Op Amp (x2, SOIC8)
+ DSW1 : 8 position dip switch
+ JP4 : 2 position jumper, set to NC, alt. position labelled SYNC (Note: changing the jumper position has
+ no visual effect)
+ J1 : 40 Pin IDC connector for plugging of a flat 40-wire cable (not used, purpose unknown, possible
+ CDROM/DVD)
+ J4 : 10 pin header for extra controls etc / (note: custom Namco 48 pin edge connector is not on
+ System10 PCBs)
+ J5 : 4 pin header for stereo sound out \
+ J201 : 100 pin custom Namco connector for mounting of MEM PCB. This connector is surface-mounted, not a
+ thru-hole type.
+ J202 : 80 pin custom Namco connector for mounting of another board. This connector is surface-mounted,
+ not a thru-hole type.
+ (not used, purpose unknown)
+ J103 : 6-pin JAMMA2 power plug (Note none of the other JAMMA2 standard connectors are present)
+ VR1 : Volume potentiometer
+ * : Unpopulated position for IS41LV16100 1M x16 EDO DRAM
+
+Additional Notes:
+ 1. In test mode (Display Test) the screen can be set to interlace or non-interlace mode. The graphics in
+ interlace mode are visually much smoother with noticeable screen flickering. Non-interlace modes gives
+ a much blockier graphic display (i.e. lower resolution) but without screen flickering.
+ 2. There is no dedicated highscore/options EEPROM present on the PCB, the game stores it's settings on the
+ game board (probably in the program EEPROMs/FlashROMs or maybe the CPLD?).
+
+ROM Daughterboard PCB
+---------------------
+This PCB holds all the ROMs.
+There are two known types of ROM daughterboards used on S10 games (so far).
+All of the PCBs are the same size (approx 5" x 5") containing one custom connector surface-mounted to the underside of
+the PCB, some MASKROMs/FlashROMs, a CPLD (which seems to be the customary 'KEYCUS' chip, and on the 2nd type a RAM
+chip also.
+
+********
+*Type 1*
+********
+System10 MEM(M) PCB 8906961000 (8906970700)
+|-------------------------------------|
+| |
+| |-------| +-
+| | | +-
+| |CY37128| +-
+| |VP160 | +-
+| | | +-
+| 7E 7D |-------| +-
+| |
+| 6E 6D |
+| |
+| 5E 5D 5A |
+| |
+| 4E 4D 4A |
+| |
+| 3E 3D |
+| |
+| 2E 2D 2A |
+| |
+| 1E 1D 1A |
+| |
+|-------------------------------------|
+Notes:
+ CY37128VP160: CY37128VP160 Cypress Complex Programmable Logic Device (TQFP160)
+ 1A - 5A : Intel Flash DA28F640J5 64MBit Flash EEPROM (SSOP56)
+ 1D - 7E : Samsung Electronics K3N9V1000A-YC 128MBit MASK ROM (TSOP48) (see note 3)
+ 6 pin header: (purpose unknown, probably for programming the CPLD)
+
+This PCB is used on:
+
+ Software MEM PCB
+Game Revision Sticker KEYCUS ROMs Populated
+------------------------------------------------------------------------------------
+Mr Driller 2 DR21/VER.A3 DR21 Ver.A KC001A DR21VERA.1A, DR21MA1.1D, DR21MA2.2D
+Mr Driller 2 DR22/VER.A3 DR22 Ver.A KC001A DR22VERA.1A, DR21MA1.1D, DR21MA2.2D
+
+ Note
+ 1. The ROM PCB has locations for 4x 64MBit program ROMs, but only 1A is populated.
+ 2. The ROM PCB has locations for 14x 128MBit GFX ROMs (Total capacity = 2048MBits) but only 1D and 2D are populated.
+ 3. These ROMs are only 18mm long, dumping them requires a special custom adapter
+
+********
+*Type 2*
+********
+System10 MEM(N) PCB 8906961402 (8906971402)
+|-------------------------------------|
+| |
+| |---------| +-
+| | | +-
+| |CY37256 | +-
+| 8E 8D |VP208 | +-
+| | | +-
+| 7E 7D |---------| +-
+| |
+| 6E 6D |
+| |
+| 5E 5D CY7C1019 |
+| |
+| 4E 4D |
+| |
+| 3E 3D |
+| |
+| 2E 2D |
+| |
+| 1E 1D |
+| |
+|-------------------------------------|
+Notes:
+ CY37256VP208: Cypress CY37256VP208 Complex Programmable Logic Device (TQFP208)
+ CY7C1019 : Cypress CY7C1019BV33-15VC or Samsung Electronics K6R1008V1C-JC15 128k x8 bit 3.3V High Speed CMOS Static Ram (SOJ32)
+ 1D - 8E : Samsung Electronics K9F2808U0B-YCBO 128MBit NAND Flash EEPROM (TSOP48)
+ 6 pin header: (purpose unknown, probably for programming the CPLD)
+
+This PCB is used on:
+
+ MEM PCB
+Game Sticker KEYCUS ROMs Populated
+---------------------------------------------------------------------------
+Gamshara 10021 Ver.A KC020A 8E, 8D
+Gekitoride-Jong Space 10011 Ver.A KC003A 8E, 8D, 7E, 7D
+Mr.Driller G DRG1 Ver.A KC007A 8E, 8D, 7E
+Kotoba no Puzzle Mojipittan KPM1 Ver.A KC012A 8E, 8D, 7E
+Panicuru Panekuru PPA1 Ver.A KC017A 8E, 8D, 7E
+Star Trigon STT1 Ver.A KC019A 8E, 8D
+Utyuu Daisakusen Chocovader Contactee CVC1 Ver.A KC022A
+
+ Note
+ 1. The ROM PCB has locations for 16x 128MBit FlashROMs (Total capacity = 2048MBits) but usually only a few are populated.
+*/
+
+#include "emu.h"
+#include "cpu/psx/psx.h"
+#include "video/psx.h"
+#include "includes/psx.h"
+
+WRITE32_HANDLER( namcos10_bank_w )
+{
+ memory_set_bank( space->machine(), "bank1", data & 0xf );
+}
+
+class namcos10_state : public psx_state
+{
+public:
+ namcos10_state(const machine_config &mconfig, device_type type, const char *tag)
+ : psx_state(mconfig, type, tag) { }
+};
+
+static ADDRESS_MAP_START( namcos10_map, AS_PROGRAM, 32 )
+ AM_RANGE(0x00000000, 0x00ffffff) AM_RAM AM_SHARE("share1") /* ram */
+ AM_RANGE(0x1fc00000, 0x1fffffff) AM_ROM AM_SHARE("share2") AM_REGION("user1", 0) /* bios */
+ AM_RANGE(0x80000000, 0x80ffffff) AM_RAM AM_SHARE("share1") /* ram mirror */
+ AM_RANGE(0x9fc00000, 0x9fffffff) AM_ROM AM_SHARE("share2") /* bios mirror */
+ AM_RANGE(0xa0000000, 0xa0ffffff) AM_RAM AM_SHARE("share1") /* ram mirror */
+ AM_RANGE(0xbfc00000, 0xbfffffff) AM_ROM AM_SHARE("share2") /* bios mirror */
+ AM_RANGE(0xfffe0130, 0xfffe0133) AM_WRITENOP
+ADDRESS_MAP_END
+
+static void memm_driver_init( running_machine &machine )
+{
+ psx_driver_init(machine);
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler( 0x1f300000, 0x1f300003, FUNC(namcos10_bank_w) );
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_bank( 0x1f400000, 0x1f7fffff, "bank1" );
+ memory_configure_bank( machine, "bank1", 0, 16, machine.region( "user2" )->base(), 4 * 1024 * 1024 );
+}
+
+UINT8 *nand_base;
+UINT32 nand_address = 0;
+
+READ32_HANDLER( nand_status_r )
+{
+ return 0;
+}
+
+WRITE32_HANDLER( nand_address1_w )
+{
+ nand_address = ( nand_address & 0x00ffffff ) | ( ( data & 0xff ) << 24 );
+}
+
+WRITE32_HANDLER( nand_address2_w )
+{
+ nand_address = ( nand_address & 0xff00ffff ) | ( ( data & 0xff ) << 16 );
+}
+
+WRITE32_HANDLER( nand_address3_w )
+{
+ nand_address = ( nand_address & 0xffff00ff ) | ( ( data & 0xff ) << 8 );
+}
+
+WRITE32_HANDLER( nand_address4_w )
+{
+ nand_address = ( nand_address & 0xffffff00 ) | ( ( data & 0xff ) << 0 );
+}
+
+UINT16 nand_read( UINT32 address )
+{
+ int index = ( ( address / 512 ) * 528 ) + ( address % 512 );
+ return nand_base[ index ] | ( nand_base[ index + 1 ] << 8 );
+}
+
+UINT16 nand_read2( UINT32 address )
+{
+ int index = ( ( address / 512 ) * 528 ) + ( address % 512 );
+ return nand_base[ index + 1 ] | ( nand_base[ index ] << 8 );
+}
+
+READ32_HANDLER( nand_data_r )
+{
+ UINT32 data = nand_read2( nand_address * 2 );
+
+/* printf( "data<-%08x (%08x)\n", data, nand_address ); */
+ nand_address++;
+
+ return data;
+}
+
+static void nand_copy( UINT32 *dst, UINT32 address, int len )
+{
+ while( len > 0 )
+ {
+ *( dst++ ) = nand_read( address ) | ( nand_read( address + 2 ) << 16 );
+ address += 4;
+ len -= 4;
+ }
+}
+
+UINT32 block[ 0x1ff ];
+
+WRITE32_HANDLER( nand_block_w )
+{
+ COMBINE_DATA( &block[ offset ] );
+/* printf( "block %d %08x\n", offset, data ); */
+}
+
+READ32_HANDLER( nand_block_r )
+{
+ return block[ offset ];
+}
+
+WRITE32_HANDLER( watchdog_w )
+{
+}
+
+static void memn_driver_init( running_machine &machine )
+{
+ UINT8 *BIOS = (UINT8 *)machine.region( "user1" )->base();
+ nand_base = (UINT8 *)machine.region( "user2" )->base();
+
+ nand_copy( (UINT32 *)( BIOS + 0x0000000 ), 0x08000, 0x001c000 );
+ nand_copy( (UINT32 *)( BIOS + 0x0020000 ), 0x24000, 0x03e0000 );
+
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler( 0x1f400000, 0x1f400003, FUNC(nand_status_r) );
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler( 0x1f410000, 0x1f410003, FUNC(nand_address1_w) );
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler( 0x1f420000, 0x1f420003, FUNC(nand_address2_w) );
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler( 0x1f430000, 0x1f430003, FUNC(nand_address3_w) );
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler( 0x1f440000, 0x1f440003, FUNC(nand_address4_w) );
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler( 0x1f450000, 0x1f450003, FUNC(nand_data_r) );
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler( 0x1fb60000, 0x1fb60003, FUNC(watchdog_w) );
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler( 0xbf500000, 0xbf5007d7, FUNC(nand_block_w) );
+ machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler( 0xbf500000, 0xbf5007d7, FUNC(nand_block_r) );
+
+ psx_driver_init(machine);
+}
+
+static void decrypt_bios( running_machine &machine, int b15, int b14, int b13, int b12, int b11, int b10, int b9, int b8,
+ int b7, int b6, int b5, int b4, int b3, int b2, int b1, int b0 )
+{
+ UINT16 *BIOS = (UINT16 *)machine.region( "user1" )->base();
+ int len = machine.region( "user1" )->bytes() / 2;
+ int i;
+
+ for( i = 0; i < len; i++ )
+ {
+ BIOS[ i ] = BITSWAP16( BIOS[ i ] ^ 0xaaaa,
+ b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 );
+ }
+}
+
+static DRIVER_INIT( mrdrilr2 )
+{
+ memm_driver_init(machine);
+ decrypt_bios( machine, 0xc, 0xd, 0xf, 0xe, 0xb, 0xa, 0x9, 0x8, 0x7, 0x6, 0x4, 0x1, 0x2, 0x5, 0x0, 0x3 );
+}
+
+static DRIVER_INIT( gjspace )
+{
+ memn_driver_init(machine);
+ decrypt_bios( machine, 0x0, 0x2, 0xe, 0xd, 0xf, 0x6, 0xc, 0x7, 0x5, 0x1, 0x9, 0x8, 0xa, 0x3, 0x4, 0xb );
+}
+
+static DRIVER_INIT( mrdrilrg )
+{
+ memn_driver_init(machine);
+ decrypt_bios( machine, 0x6, 0x4, 0x7, 0x5, 0x2, 0x1, 0x0, 0x3, 0xc, 0xd, 0xe, 0xf, 0x8, 0x9, 0xb, 0xa );
+}
+
+static DRIVER_INIT( knpuzzle )
+{
+ memn_driver_init(machine);
+ decrypt_bios( machine, 0x6, 0x7, 0x4, 0x5, 0x2, 0x0, 0x3, 0x1, 0xc, 0xd, 0xe, 0xf, 0x9, 0xb, 0x8, 0xa );
+}
+
+static DRIVER_INIT( startrgn )
+{
+ memn_driver_init(machine);
+ decrypt_bios( machine, 0x6, 0x5, 0x4, 0x7, 0x1, 0x3, 0x0, 0x2, 0xc, 0xd, 0xe, 0xf, 0x8, 0xb, 0xa, 0x9 );
+}
+
+static DRIVER_INIT( gamshara )
+{
+ memn_driver_init(machine);
+ decrypt_bios( machine, 0x5, 0x4, 0x7, 0x6, 0x0, 0x1, 0x3, 0x2, 0xd, 0xf, 0xc, 0xe, 0x8, 0x9, 0xa, 0xb );
+}
+
+static DRIVER_INIT( gunbalna )
+{
+ memn_driver_init(machine);
+ decrypt_bios( machine, 0x5, 0x4, 0x7, 0x6, 0x0, 0x1, 0x3, 0x2, 0xd, 0xf, 0xc, 0xe, 0x9, 0x8, 0xa, 0xb );
+}
+
+static DRIVER_INIT( chocovdr )
+{
+ memn_driver_init(machine);
+ decrypt_bios( machine, 0x5, 0x4, 0x7, 0x6, 0x0, 0x1, 0x3, 0x2, 0xd, 0xf, 0xc, 0xe, 0x8, 0x9, 0xa, 0xb );
+}
+
+static DRIVER_INIT( panikuru )
+{
+ memn_driver_init(machine);
+ /* TODO */
+ //decrypt_bios( machine, 0x5, 0x4, 0x7, 0x6, 0x0, 0x1, 0x3, 0x2, 0xd, 0xf, 0xc, 0xe, 0x8, 0x9, 0xa, 0xb );
+}
+
+
+static MACHINE_RESET( namcos10 )
+{
+}
+
+static MACHINE_CONFIG_START( namcos10, namcos10_state )
+ /* basic machine hardware */
+ MCFG_CPU_ADD( "maincpu", CXD8606BQ, XTAL_101_4912MHz )
+ MCFG_CPU_PROGRAM_MAP( namcos10_map )
+
+ MCFG_MACHINE_RESET( namcos10 )
+
+ /* video hardware */
+ MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561CQ, 0x200000, XTAL_53_693175MHz )
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+MACHINE_CONFIG_END
+
+static INPUT_PORTS_START( namcos10 )
+ /* IN 0 */
+ PORT_START("SYSTEM")
+ PORT_SERVICE_NO_TOGGLE( 0x8000, IP_ACTIVE_HIGH )
+ PORT_BIT( 0x7fff, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ /* IN 1 */
+ PORT_START("P1")
+ PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
+ PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE1 )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
+ PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 )
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON4 )
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 )
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON6 )
+ PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ /* IN 2 */
+ PORT_START("P2")
+ PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
+ PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE2 )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
+ PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(2)
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(2)
+ PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ /* IN 3 */
+ PORT_START("COINS")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
+INPUT_PORTS_END
+
+ROM_START( mrdrilr2 )
+ ROM_REGION32_LE( 0x800000, "user1", 0 ) /* main prg */
+ ROM_LOAD( "dr21vera.1a", 0x000000, 0x800000, CRC(f93532a2) SHA1(8b72f2868978be1f0e0abd11425a3c8b2b0c4e99) )
+
+ ROM_REGION( 0x4000000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "dr21ma1.1d", 0x0000000, 0x1000000, CRC(26dc6f55) SHA1(a9cedf547fa7a4d5850b9b3b867d46e577a035e0) )
+ ROM_LOAD( "dr21ma2.2d", 0x1000000, 0x1000000, CRC(702556ff) SHA1(c95defd5fd6a9b406fc8d8f28ecfab732ef1ff42) )
+ROM_END
+
+ROM_START( mrdrlr2a )
+ ROM_REGION32_LE( 0x800000, "user1", 0 ) /* main prg */
+ ROM_LOAD( "dr22vera.1a", 0x000000, 0x800000, CRC(f2633388) SHA1(42e56c9758ee833390003d4b41956f75f5a22760) )
+
+ ROM_REGION( 0x4000000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "dr21ma1.1d", 0x0000000, 0x1000000, CRC(26dc6f55) SHA1(a9cedf547fa7a4d5850b9b3b867d46e577a035e0) )
+ ROM_LOAD( "dr21ma2.2d", 0x1000000, 0x1000000, CRC(702556ff) SHA1(c95defd5fd6a9b406fc8d8f28ecfab732ef1ff42) )
+ROM_END
+
+ROM_START( gjspace )
+ ROM_REGION32_LE( 0x400000, "user1", 0 ) /* bios */
+ ROM_FILL( 0x0000000, 0x400000, 0x55 )
+
+ ROM_REGION( 0x4200000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "10011a_0.bin", 0x0000000, 0x1080000, CRC(df862033) SHA1(4141357ed315adb4de636d7bf752354e953e8cbf) )
+ ROM_LOAD( "10011a_1.bin", 0x1080000, 0x1080000, CRC(734c7ac0) SHA1(2f325236a4e4f2dba886682e9a7e8e243b5fbb3d) )
+ ROM_LOAD( "10011a_2.bin", 0x2100000, 0x1080000, CRC(3bbbc0b7) SHA1(ad02ec2e5f401f0f5d40a413038649ebd25d5343) )
+ ROM_LOAD( "10011a_3.bin", 0x3180000, 0x1080000, CRC(fb0de5ca) SHA1(50a462a52ff4a0bc112b9d89f2b2d032c60cf59c) )
+ROM_END
+
+ROM_START( mrdrilrg )
+ ROM_REGION32_LE( 0x400000, "user1", 0 ) /* bios */
+ ROM_FILL( 0x0000000, 0x400000, 0x55 )
+
+ ROM_REGION( 0x3180000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "drg1a_0.bin", 0x0000000, 0x1080000, CRC(e0801878) SHA1(fbb771c1e76e0690f6dffed2287eb470b561ec20) )
+ ROM_LOAD( "drg1a_1.bin", 0x1080000, 0x1080000, CRC(4d8cde73) SHA1(62a5fab8be8fd0a6bfeb101020d4cf58866a757c) )
+ ROM_LOAD( "drg1a_2.bin", 0x2100000, 0x1080000, CRC(ccfabf7b) SHA1(0cbd91ce8abd6efca5d427b52279ce265f685aa9) )
+ROM_END
+
+ROM_START( knpuzzle )
+ ROM_REGION32_LE( 0x400000, "user1", 0 ) /* bios */
+ ROM_FILL( 0x0000000, 0x400000, 0x55 )
+
+ ROM_REGION( 0x3180000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "kpm1a_0.bin", 0x0000000, 0x1080000, CRC(b2947eb8) SHA1(fa941bf3598bb25d2c8f0a93154e32bf78a6507c) )
+ ROM_LOAD( "kpm1a_1.bin", 0x1080000, 0x1080000, CRC(f3aa855a) SHA1(87b94e22db4bc4169324bbff93c4ea19c1d99b40) )
+ ROM_LOAD( "kpm1a_2.bin", 0x2100000, 0x1080000, CRC(b297cc8d) SHA1(c3494e7a8a0b4e0c8c40b99121373effbfe848eb) )
+ROM_END
+
+ROM_START( startrgn )
+ ROM_REGION32_LE( 0x400000, "user1", 0 ) /* bios */
+ ROM_FILL( 0x0000000, 0x400000, 0x55 )
+
+ ROM_REGION( 0x2100000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "stt1a_0.bin", 0x0000000, 0x1080000, CRC(1e090644) SHA1(a7a293e2bd9eea2eb64a492a47272d9d9ee2c724) )
+ ROM_LOAD( "stt1a_1.bin", 0x1080000, 0x1080000, CRC(aa527694) SHA1(a25dcbeca58a1443070848b3487a24d51d41a34b) )
+ROM_END
+
+ROM_START( gamshara )
+ ROM_REGION32_LE( 0x400000, "user1", 0 ) /* bios */
+ ROM_FILL( 0x0000000, 0x400000, 0x55 )
+
+ ROM_REGION( 0x2100000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "10021a.8e", 0x0000000, 0x1080000, CRC(6c0361fc) SHA1(7debf1f2e6bed31d59fb224a78a17a94fc573785) )
+ ROM_LOAD( "10021a.8d", 0x1080000, 0x1080000, CRC(73669ff7) SHA1(eb8bbf931f1f8a049208d081d040512a3ffa9c00) )
+ROM_END
+
+ROM_START( ptblank3 )
+ ROM_REGION32_LE( 0x400000, "user1", 0 ) /* bios */
+ ROM_FILL( 0x0000000, 0x400000, 0x55 )
+
+ ROM_REGION( 0x2100000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "0.8e", 0x0000000, 0x1080000, CRC(31b39221) SHA1(7fcb14aaa26c531928a6cd704e746d0e3ae3e031) )
+ ROM_LOAD( "1.8d", 0x1080000, 0x1080000, CRC(82d2cfb5) SHA1(4b5e713a55e74a7b32b1b9b5811892df2df86256) )
+ROM_END
+
+ROM_START( chocovdr )
+ ROM_REGION32_LE( 0x400000, "user1", 0 ) /* bios */
+ ROM_FILL( 0x0000000, 0x400000, 0x55 )
+
+ ROM_REGION( 0x5280000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "0.8e", 0x0000000, 0x1080000, CRC(f265b1b6) SHA1(f327e7bac0bc1bd31aa3362e36233130a6b240ea) )
+ ROM_LOAD( "1.8d", 0x1080000, 0x1080000, CRC(05d01cd2) SHA1(e9947ebea24d618e8b9a69f582ef0b9d97bb4cad) )
+ ROM_LOAD( "2.7e", 0x2100000, 0x1080000, CRC(2e308d20) SHA1(4ff072f0d488b12f77ef7d119822f89b5b5a6712) )
+ ROM_LOAD( "3.7d", 0x3180000, 0x1080000, CRC(126c9e6f) SHA1(32de87f01fd1c8c26a68bf42a062f5f44bcc5a3b) )
+ ROM_LOAD( "4.6e", 0x4200000, 0x1080000, CRC(6c18678d) SHA1(410a282397e4a4b5763467811080172b462bfcef) )
+ROM_END
+
+ROM_START( panikuru )
+ ROM_REGION32_LE( 0x400000, "user1", 0 ) /* bios */
+ ROM_FILL( 0x0000000, 0x400000, 0x55 )
+
+ ROM_REGION( 0x3180000, "user2", 0 ) /* main prg */
+ ROM_LOAD( "0.8e", 0x0000000, 0x1080000, CRC(3aa66da4) SHA1(3f6ff164981e2c1825766c775442608fbf86d702) )
+ ROM_LOAD( "1.8d", 0x1080000, 0x1080000, CRC(18e5135d) SHA1(a7b1533a1df71be5498718e301d1c9c548551fb4) )
+ ROM_LOAD( "2.7e", 0x2100000, 0x1080000, CRC(cd3b25e0) SHA1(39dfebc59e71b8f1c28e718ee71032620f11440c) )
+ROM_END
+
+
+GAME( 2000, mrdrilr2, 0, namcos10, namcos10, mrdrilr2, ROT0, "Namco", "Mr. Driller 2 (Japan, DR21 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 2000, mrdrlr2a, mrdrilr2, namcos10, namcos10, mrdrilr2, ROT0, "Namco", "Mr. Driller 2 (Japan, DR22 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 2000, ptblank3, 0, namcos10, namcos10, gunbalna, ROT0, "Namco", "Point Blank 3 (GNN2 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 2001, gjspace, 0, namcos10, namcos10, gjspace, ROT0, "Namco / Metro", "Gekitoride-Jong Space (10011 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 2001, mrdrilrg, 0, namcos10, namcos10, mrdrilrg, ROT0, "Namco", "Mr. Driller G (Japan, DRG1 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 2001, knpuzzle, 0, namcos10, namcos10, knpuzzle, ROT0, "Namco", "Kotoba no Puzzle Mojipittan (Japan, KPM1 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 2002, chocovdr, 0, namcos10, namcos10, chocovdr, ROT0, "Namco", "Uchuu Daisakusen: Chocovader Contactee (Japan, CVC1 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 2002, startrgn, 0, namcos10, namcos10, startrgn, ROT0, "Namco", "Star Trigon (Japan, STT1 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 2002, panikuru, 0, namcos10, namcos10, panikuru, ROT0, "Namco", "Panicuru Panekuru (Japan, PPA1 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 2003, gamshara, 0, namcos10, namcos10, gamshara, ROT0, "Mitchell", "Gamshara (10021 Ver.A)", GAME_NOT_WORKING | GAME_NO_SOUND )