summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/nss.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/nss.c')
-rw-r--r--src/mame/drivers/nss.c666
1 files changed, 666 insertions, 0 deletions
diff --git a/src/mame/drivers/nss.c b/src/mame/drivers/nss.c
new file mode 100644
index 00000000000..6451e8398f6
--- /dev/null
+++ b/src/mame/drivers/nss.c
@@ -0,0 +1,666 @@
+/***************************************************************************
+
+ nss.c
+
+ Driver file to handle emulation of the Nintendo Super System.
+
+ R. Belmont
+ Anthony Kruize
+ Based on the original MESS driver by Lee Hammerton (aka Savoury Snax)
+
+ Driver is preliminary right now.
+
+ The memory map included below is setup in a way to make it easier to handle
+ Mode 20 and Mode 21 ROMs.
+
+ Todo (in no particular order):
+ - Fix additional sound bugs
+ - Emulate extra chips - superfx, dsp2, sa-1 etc.
+ - Add horizontal mosaic, hi-res. interlaced etc to video emulation.
+ - Fix support for Mode 7. (In Progress)
+ - Handle interleaved roms (maybe even multi-part roms, but how?)
+ - Add support for running at 3.58Mhz at the appropriate time.
+ - I'm sure there's lots more ...
+
+ Nintendo Super System
+
+ There is a second processor and Menu system for selecting the games
+ controlling timer etc.? which still needs emulating there are dipswitches too
+
+***************************************************************************
+
+Nintendo Super System Hardware Overview
+Nintendo, 1992
+
+This system is basically a Super Nintendo with a timer.
+The main board has 3 slots on it and can accept up to 3 plug-in carts. The player
+can choose to play any of the available games, although I'm not sure why anyone
+would have wanted to pay money to play these games when the home SNES was selling as well ;-)
+The control panel was also just some SNES pads mounted into the arcade machine control panel....
+not very usable as-is and very cheaply presented.
+
+
+PCB Layouts
+-----------
+NSS-01-CPU MADE IN JAPAN
+(C) 1991 Nintendo
+|----------------------------------------------------|
+| HA13001 AN5836 |
+| SL4 SL2 CL2 SL3 |
+|-| CL1 SL1 |
+ | |--------------| |
+|-| 14.31818MHz | SL5 |
+| | | |
+| IR3P32A | M50458 |-| |-| |-| |
+|J | VC1 21.47724MHz | | | | | | |
+|A | | | | | | | | |
+|M | CN6 | | | | | | | |
+|M |--------------| | | | | | | |
+|A |-------| |-------| | | | | | | |
+| 84256 |S-PPU1 | |S-CPU | | | | | | | |
+| |5C77-01| |5A22-02| | | | | | | |
+|-| |-------| |-------| | | | | | | |
+ | | | | | | | |
+|-| |-------| |-------| | | | | | | |
+| 84256 |S-PPU2 | |S-WRAM | | | | | | | |
+|CN4 |5C78-01| |LH68120| | | | | | | |
+| |-------| |-------| | | | | | | |
+| | | | | | | |
+| | | | | | | |
+|CN3 | | | | | | |
+| 4MHz | | | | | | |
+| |-| |-| |-| |
+| CN11 CN12 CN13 |
+| Z84C0006 |
+|CN5 LH5168 |
+| |
+| M6M80011 |
+| |
+| S-3520 |
+|CN2 32.678kHz *MM1026 |
+| 5.5V NSS-C_IC14_02|
+|----------------------------------------------------|
+Notes:
+ (The main board has many surface mounted logic chips and transistors on the lower side of the PCB
+ which are not documented here. There's also a lot of custom Nintendo parts)
+ IR3P32A - Sharp IR3P32A Special Function TV Interface Circuit, Conversion of color diff sig. & lumin. to RGB (NDIP30)
+ M50458 - Mitsubishi M50458-001SP On-Screen Display (OSD) Chip (NDIP32)
+ HA13001 - Hitachi Dual 5.5W Power Amplifier IC
+ AN5836 - Matsushita AN5836 DC Volume and Tone Control IC (SIL12)
+ 84256 - Fujitsu MB84256-10L 32k x8 SRAM (SOP28)
+ LH5168 - Sharp LH5168N-10L 8k x8 SRAM (SOP28)
+ Z84C0006- Zilog Z84C0006FEC Z80 CPU, clock input 4.000MHz (QFP44)
+ M6M80011- Mitsubishi M6M80011 64 x16 Serial EEPROM (DIP8). Pinout..... 1 CS, 2 CLK, 3 DATA IN, 4 DATA OUT, 5 VSS, 6 RESET, 7 RDY, 8 VCC
+ S-3520 - Seiko Epson S-3520 Real Time Clock (SOIC14)
+ 5.5V - 5.5 volt supercap
+ MM1026 - Mitsumi Monolithic IC MM1026BF System Reset with Battery Backup (SOIC8)
+ VSync - 60Hz
+ HSync - 15.57kHz
+ * - This IC located underneath PCB
+ NSS-C_IC14_02 - 27C256 EPROM (DIP28)
+ CN11/12/13 - 50 pin connectors for game carts
+ CN2 - 10 pin connector
+ CN3 - 13 pin connector
+ CN4 - 8 pin connector
+ CN5 - 7 pin connector
+ CN6 - 24 pin connector for plug in custom sound module
+ Custom IC's -
+ S-CPU (QFP100)
+ S-PPU1 (QFP100)
+ S-PPU2 (QFP100)
+ S-WRAM (SOP64)
+
+
+Custom Sound Module (plugs in CN6)
+----------------------------------
+
+Note - This board is encased in a metal shield which is soldered together.
+
+MITSUMI ELEC CO. LTD.
+(C) 1990 Nintendo Co. Ltd.
+|-----------------------|
+| CN1 |
+| JRC2904 |---|
+| |-------| |
+| |S-SMP | |
+| | | D6376 |
+| |-------| 51832 |
+| |
+| |-------| |
+| |S-DSP | |
+| | | 51832 |
+| |-------| |
+|---| |
+ | |
+ |-----------------------|
+Notes:
+ JRC2904 - Japan Radio Co. JRC2904 Dual Low Power Op Amp (SOIC8)
+ D6376 - NEC D6376 Audio 2-Channel 16-Bit D/A Converter (SOIC16)
+ 51832 - Toshiba TC51832FL-12 32k x8 SRAM (SOP28)
+ CN1 - 24 pin connector to plug in custom sound module to main board
+ S-SMP - Stamped 'Nintendo S-SMP (M) SONY (C) Nintendo '89' custom sound chip (QFP80)
+ S-DSP - Stamped 'Nintendo S-DSP (M) (C) SONY '89' custom sound DSP (QFP80)
+
+ Note - Without this PCB, the board will boot up and work, displaying the game
+ selection menu, but once the game tries to load attract mode, the PCB resets.
+
+
+Game Carts
+----------
+There are 3 types of carts. The carts have only a few components on them, including some
+ROMs/sockets, a few logic chips/resistors/caps, a DIPSW8 block, one unknown DIP8 chip
+(with it's surface scratched) and some solder-jumper pads to config the ROM types.
+The unknown DIP8 chip is different per game also. There is a sticker on top with a 2-digit game code (I.E. MW/AT/L3 etc)
+
+NSS-01-ROM-A
+|-------------------------------------------------------|
+| SL3 CL1 |
+| CL3 SL1 IC1_PRG_ROM IC3_INST_ROM IC4 |
+|CL4 SL2 SL5 |
+|SL4 CL2 CL5 |
+|--| |--|
+ |-------------------------------------------------|
+Notes:
+ IC1 - Program ROM
+ IC2 - Instruction ROM
+ IC4 - Unknown DIP8 chip
+
+Game Name IC1 IC1 Type IC3 IC3 Type Jumpers
+-------------------------------------------------------------------------------------------------------
+Super Mario World NSS-MW-0_PRG LH534J NSS-R_IC3_MW 27C256 CL1 CL2 CL3 CL4 CL5 - Short
+ SL1 SL2 SL3 SL4 SL5 - Open
+Super Tennis NSS-ST-0 LH534J NSS-R_IC3_ST 27C256 CL1 CL2 CL3 CL4 CL5 - Short
+ SL1 SL2 SL3 SL4 SL5 - Open
+Super Soccer NSS-R_IC1_FS TC574000 NSS-R_IC3_FS 27C256 CL1 CL2 CL3 CL4 CL5 - Open
+ SL1 SL2 SL3 SL4 SL5 - Short
+-------------------------------------------------------------------------------------------------------
+Note - By setting the jumpers to 'Super Soccer', the other 2 games can use standard EPROMs if required.
+
+LH534J is a 4MBit x8 MaskROM with non-standard pinout. An adapter can be made easily to read them.
+
+ Sharp LH534J Common 27C040
+ +--\/--+ +--\/--+
+A17 |1 32| +5V VPP |1 32| +5V
+A18 |2 31| /OE A16 |2 31| A18
+A15 |3 30| NC A15 |3 30| A17
+A12 |4 29| A14 A12 |4 29| A14
+ A7 |5 28| A13 A7 |5 28| A13
+ A6 |6 27| A8 A6 |6 27| A8
+ A5 |7 26| A9 A5 |7 26| A9
+ A4 |8 25| A11 A4 |8 25| A11
+ A3 |9 24| A16 A3 |9 24| OE/
+ A2 |10 23| A10 A2 |10 23| A10
+ A1 |11 22| /CE A1 |11 22| CE/,PGM/
+ A0 |12 21| D7 A0 |12 21| D7
+ D0 |13 20| D6 D0 |13 20| D6
+ D1 |14 19| D5 D1 |14 19| D5
+ D2 |15 18| D4 D2 |15 18| D4
+GND |16 17| D3 GND |16 17| D3
+ +------+ +------+
+
+
+NSS-01-ROM-B
+|-------------------------------------------------------|
+| BAT1 SL3 CL1 CL2 SL5 CL6 CL7 |
+| CL3 SL1 SL2 CL5 SL6 SL7 |
+| CL4 SL4 |
+| IC1 |
+| |
+| |
+| IC2_PRG_ROM IC7_INST_ROM IC9 |
+| |
+| |
+|--| |--|
+ |-------------------------------------------------|
+Notes:
+ Battery is populated on this board, type CR2032 3V coin battery
+ IC1 - LH5168 8k x8 SRAM (DIP28)
+ IC2 - Program ROM
+ IC7 - Instruction ROM
+ IC9 - Unknown DIP8 chip
+
+Game Name IC2 IC2 Type IC7 IC7 Type Jumpers
+---------------------------------------------------------------------------------------------------------------
+F-Zero NSS-FZ-0 LH534J NSS-R_IC3_FZ 27C256 CL1 CL2 CL3 CL4 CL5 CL6 CL7 - Short
+ SL1 SL2 SL3 SL4 SL5 SL6 SL7 - Open
+---------------------------------------------------------------------------------------------------------------
+
+
+NSS-01-ROM-C
+|-------------------------------------------------------|
+| BAT1 CL19 SL22 IC1_SRAM DIPSW8 |
+| CL18 SL21 |
+| CL17 SL20 |
+| CL15 SL16 IC2_PRG_ROM-1 |
+| SL12 |
+| CL13 SL14 |
+| CL5 SL11 |
+| CL6 SL10 IC3_PRG_ROM-0 IC8_INST_ROM IC10 |
+| CL3 SL9 |
+| CL4 SL8 |
+| SL1 CL2 SL7 |
+|--| |--|
+ |-------------------------------------------------|
+Notes:
+ Battery is not populated on this board for any games
+ IC1 - 6116 2k x8 SRAM, not populated (DIP24)
+ IC2/3 - Program ROM
+ IC8 - Instruction ROM
+ IC10 - Unknown DIP8 chip
+
+Game Name IC2 IC2 Type IC3 IC3 Type IC8 IC8 Type Jumpers
+---------------------------------------------------------------------------------------------------------------------------------------------------------
+Actraiser NSS-R_IC2_AR TC574000 NSS-R_IC3_AR TC574000 NSS-R_IC8_AR 27C256 CL2 CL3 CL4 CL5 CL6 CL12 CL13 CL15 CL17 CL18 CL19 - Short
+ SL1 SL7 SL8 SL9 SL10 SL11 SL12 SL14 SL16 SL20 SL21 SL22 - Open
+Addams Family NSS-R_IC2_AF TC574000 NSS-R_IC3_AF TC574000 NSS-R_IC8_AF 27C256 All games use the above jumper configuration.
+Amazing Tennis NSS-R_IC2_AT TC574000 NSS-R_IC3_AT TC574000 NSS-R_IC8_AT 27C256
+Irem Skins Game NSS-R_IC2_MT TC574000 NSS-R_IC3_MT TC574000 NSS-R_IC8_MT 27C256
+Lethal Weapon NSS-R_IC2_L3 TC574000 NSS-R_IC3_L3 TC574000 NSS-R_IC8_L3 27C256
+NCAA Basketball NSS-R_IC2_DU TC574000 NSS-R_IC3_DU TC574000 NSS-R_IC8_DU 27C256
+Robocop 3 NSS-R_IC2_R3 TC574000 NSS-R_IC3_R3 TC574000 NSS-R_IC8_R3 27C256
+---------------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+NSS-01-ROM-C
+Sticker - NSS-X1-ROM-C (this is just a ROM-C board with a sticker over the top)
+ (the differences being the SRAM and battery are populated)
+|-------------------------------------------------------|
+| BAT1 CL19 SL22 IC1_SRAM DIPSW8 |
+| CL18 SL21 |
+| CL17 SL20 |
+| CL15 SL16 IC2_PRG_ROM-1 |
+| SL12 |
+| CL13 SL14 |
+| CL5 SL11 |
+| CL6 SL10 IC3_PRG_ROM-0 IC8_INST_ROM IC10 |
+| CL3 SL9 |
+| CL4 SL8 |
+| SL1 CL2 SL7 |
+|--| |--|
+ |-------------------------------------------------|
+Notes:
+ Battery is populated on this board, type CR2032 3V coin battery
+ IC1 - 6116 2k x8 SRAM, populated (DIP24)
+ IC2/3 - Program ROM
+ IC8 - Instruction ROM
+ IC10 - Unknown DIP8 chip
+
+Game Name IC2 IC2 Type IC3 IC3 Type IC8 IC8 Type Jumpers
+-----------------------------------------------------------------------------------------------------------------------------------------------------
+Contra III CONTRA_III_1 TC574000 CONTRA_III_0 TC574000 GAME1_NSSU 27C256 CL2 CL3 CL4 CL5 CL6 CL12 CL13 CL15 CL17 CL18 CL19 - Short
+ SL1 SL7 SL8 SL9 SL10 SL11 SL12 SL14 SL16 SL20 SL21 SL22 - Open
+-----------------------------------------------------------------------------------------------------------------------------------------------------
+
+***************************************************************************/
+#include "driver.h"
+#include "includes/snes.h"
+
+extern DRIVER_INIT( snes );
+
+static ADDRESS_MAP_START( snes_map, ADDRESS_SPACE_PROGRAM, 8)
+ AM_RANGE(0x000000, 0x2fffff) AM_READWRITE(snes_r_bank1, snes_w_bank1) /* I/O and ROM (repeats for each bank) */
+ AM_RANGE(0x300000, 0x3fffff) AM_READWRITE(snes_r_bank2, snes_w_bank2) /* I/O and ROM (repeats for each bank) */
+ AM_RANGE(0x400000, 0x5fffff) AM_READWRITE(snes_r_bank3, MWA8_ROM) /* ROM (and reserved in Mode 20) */
+ AM_RANGE(0x600000, 0x6fffff) AM_READWRITE(snes_r_bank6, snes_w_bank6) /* used by Mode 20 DSP-1 */
+ AM_RANGE(0x700000, 0x77ffff) AM_READWRITE(snes_r_sram, snes_w_sram) /* 256KB Mode 20 save ram + reserved from 0x8000 - 0xffff */
+ AM_RANGE(0x780000, 0x7dffff) AM_NOP /* Reserved */
+ AM_RANGE(0x7e0000, 0x7fffff) AM_RAM /* 8KB Low RAM, 24KB High RAM, 96KB Expanded RAM */
+ AM_RANGE(0x800000, 0xffffff) AM_READWRITE(snes_r_bank4, snes_w_bank4) /* Mirror and ROM */
+ADDRESS_MAP_END
+
+static READ8_HANDLER( spc_ram_100_r )
+{
+ return spc_ram_r(offset + 0x100);
+}
+
+static WRITE8_HANDLER( spc_ram_100_w )
+{
+ spc_ram_w(offset + 0x100, data);
+}
+
+static ADDRESS_MAP_START( spc_mem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x00ef) AM_READWRITE(spc_ram_r, spc_ram_w) AM_BASE(&spc_ram) /* lower 32k ram */
+ AM_RANGE(0x00f0, 0x00ff) AM_READWRITE(spc_io_r, spc_io_w) /* spc io */
+ AM_RANGE(0x0100, 0xffff) AM_WRITE(spc_ram_100_w)
+ AM_RANGE(0x0100, 0xffbf) AM_READ(spc_ram_100_r)
+ AM_RANGE(0xffc0, 0xffff) AM_READ(spc_ipl_r)
+ADDRESS_MAP_END
+
+static INPUT_PORTS_START( snes )
+ PORT_START /* IN 0 : Joypad 1 - L */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Button A") PORT_PLAYER(1)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Button X") PORT_PLAYER(1)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P1 Button L") PORT_PLAYER(1)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P1 Button R") PORT_PLAYER(1)
+ PORT_START /* IN 1 : Joypad 1 - H */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Button B") PORT_PLAYER(1)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Button Y") PORT_PLAYER(1)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("P1 Select")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("P1 Start")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+
+ PORT_START /* IN 2 : Joypad 2 - L */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P2 Button A") PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P2 Button X") PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P2 Button L") PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P2 Button R") PORT_PLAYER(2)
+ PORT_START /* IN 3 : Joypad 2 - H */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 Button B") PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 Button Y") PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_NAME("P2 Select")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("P2 Start")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+
+ PORT_START /* IN 4 : Joypad 3 - L */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P3 Button A") PORT_PLAYER(3)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P3 Button X") PORT_PLAYER(3)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P3 Button L") PORT_PLAYER(3)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P3 Button R") PORT_PLAYER(3)
+ PORT_START /* IN 5 : Joypad 3 - H */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P3 Button B") PORT_PLAYER(3)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P3 Button Y") PORT_PLAYER(3)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE3 ) PORT_NAME("P3 Select")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START3 ) PORT_NAME("P3 Start")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
+
+ PORT_START /* IN 6 : Joypad 4 - L */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P4 Button A") PORT_PLAYER(4)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P4 Button X") PORT_PLAYER(4)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P4 Button L") PORT_PLAYER(4)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P4 Button R") PORT_PLAYER(4)
+ PORT_START /* IN 7 : Joypad 4 - H */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P4 Button B") PORT_PLAYER(4)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P4 Button Y") PORT_PLAYER(4)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE4 ) PORT_NAME("P4 Select")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START4 ) PORT_NAME("P4 Start")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
+
+ PORT_START /* IN 8 : Internal switches */
+ PORT_DIPNAME( 0x1, 0x1, "Enforce 32 sprites/line" )
+ PORT_DIPSETTING( 0x0, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x1, DEF_STR( Yes ) )
+
+#ifdef MAME_DEBUG
+ PORT_START /* IN 9 : debug switches */
+ PORT_DIPNAME( 0x3, 0x0, "Browse tiles" )
+ PORT_DIPSETTING( 0x0, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x1, "2bpl" )
+ PORT_DIPSETTING( 0x2, "4bpl" )
+ PORT_DIPSETTING( 0x3, "8bpl" )
+ PORT_DIPNAME( 0xc, 0x0, "Browse maps" )
+ PORT_DIPSETTING( 0x0, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4, "2bpl" )
+ PORT_DIPSETTING( 0x8, "4bpl" )
+ PORT_DIPSETTING( 0xc, "8bpl" )
+
+ PORT_START /* IN 10 : debug switches */
+ PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Toggle BG 1") PORT_PLAYER(2)
+ PORT_BIT( 0x2, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Toggle BG 2") PORT_PLAYER(2)
+ PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_NAME("Toggle BG 3") PORT_PLAYER(2)
+ PORT_BIT( 0x8, IP_ACTIVE_HIGH, IPT_BUTTON10 ) PORT_NAME("Toggle BG 4") PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Toggle Objects") PORT_PLAYER(3)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Toggle Main/Sub") PORT_PLAYER(3)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_NAME("Toggle Back col") PORT_PLAYER(3)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON10 ) PORT_NAME("Toggle Windows") PORT_PLAYER(3)
+
+ PORT_START /* IN 11 : debug input */
+ PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_NAME("Pal prev")
+ PORT_BIT( 0x2, IP_ACTIVE_HIGH, IPT_BUTTON10 ) PORT_NAME("Pal next")
+ PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Toggle Transparency") PORT_PLAYER(4)
+#endif
+
+ PORT_START /* IN 12 : dip-switches */
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x0c, "2" )
+ PORT_DIPSETTING( 0x08, "3" )
+ PORT_DIPSETTING( 0x04, "4" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x30, 0x00, "Time limit per level?" ) // taken from the scan of nss_adam
+ PORT_DIPSETTING( 0x10, "104 sec." )
+ PORT_DIPSETTING( 0x20, "112 sec." )
+ PORT_DIPSETTING( 0x00, "120 sec." )
+ PORT_DIPSETTING( 0x30, "? sec." )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+INPUT_PORTS_END
+
+static struct CustomSound_interface snes_sound_interface =
+{ snes_sh_start };
+
+static GFXDECODE_START( nss )
+GFXDECODE_END
+
+static PALETTE_INIT( snes )
+{
+ int i;
+
+ for( i = 0; i < 32768; i++ )
+ palette_set_color_rgb( machine, i, pal5bit(i >> 0), pal5bit(i >> 5), pal5bit(i >> 10) );
+
+ /* The colortable can be black */
+ for( i = 0; i < 256; i++ )
+ colortable[i] = 0;
+}
+
+static MACHINE_DRIVER_START( snes )
+ /* basic machine hardware */
+ MDRV_CPU_ADD_TAG("main", G65816, 3580000) /* 2.68Mhz, also 3.58Mhz */
+ MDRV_CPU_PROGRAM_MAP(snes_map, 0)
+
+ MDRV_CPU_ADD_TAG("sound", SPC700, 2048000/2) /* 2.048 Mhz, but internal divider */
+ /* audio CPU */
+ MDRV_CPU_PROGRAM_MAP(spc_mem, 0)
+ MDRV_CPU_VBLANK_INT(NULL, 0)
+
+ MDRV_INTERLEAVE(400)
+
+ MDRV_MACHINE_START( snes )
+ MDRV_MACHINE_RESET( snes )
+
+ /* video hardware */
+ MDRV_VIDEO_START( generic_bitmapped )
+ MDRV_VIDEO_UPDATE( snes )
+
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_GFXDECODE(nss)
+ MDRV_PALETTE_LENGTH(32768)
+ MDRV_COLORTABLE_LENGTH(257)
+ MDRV_PALETTE_INIT( snes )
+
+ MDRV_SCREEN_ADD("main", 0)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_RAW_PARAMS(DOTCLK_NTSC, SNES_HTOTAL, 0, SNES_SCR_WIDTH, SNES_VTOTAL_NTSC, 0, SNES_SCR_HEIGHT_NTSC)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(CUSTOM, 0)
+ MDRV_SOUND_CONFIG(snes_sound_interface)
+ MDRV_SOUND_ROUTE(0, "left", 1.00)
+ MDRV_SOUND_ROUTE(1, "right", 1.00)
+MACHINE_DRIVER_END
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
+#define NSS_BIOS \
+ ROM_REGION(0x100, REGION_USER5, 0) /* IPL ROM */ \
+ ROM_LOAD("spc700.rom", 0, 0x40, CRC(44bb3a40) SHA1(97e352553e94242ae823547cd853eecda55c20f0) ) \
+ ROM_REGION(0x800, REGION_USER6, 0) /* add-on chip ROMs (DSP, SFX, etc) */\
+ ROM_LOAD("dsp1data.bin", 0x000000, 0x000800, CRC(4b02d66d) SHA1(1534f4403d2a0f68ba6e35186fe7595d33de34b1))\
+ ROM_REGION(0x10000, REGION_CPU3, 0) /* Bios CPU (what is it?) */ \
+ ROM_LOAD("nss-c.dat" , 0, 0x8000, CRC(a8e202b3) SHA1(b7afcfe4f5cf15df53452dc04be81929ced1efb2) ) /* bios */ \
+ ROM_LOAD("nss-ic14.02", 0, 0x8000, CRC(e06cb58f) SHA1(62f507e91a2797919a78d627af53f029c7d81477) ) /* bios */ \
+
+ROM_START( nss )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE | ROMREGION_ERASEFF )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, ROMREGION_ERASEFF )
+ROM_END
+
+
+ROM_START( nss_actr )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "act-rais.ic3", 0x00000, 0x80000, CRC(c9f788c2) SHA1(fba2331fd5bcbe51d74115528fd3a9becf072e8d) )
+ ROM_LOAD( "act-rais.ic2", 0x80000, 0x80000, CRC(4df9cc63) SHA1(3e98d9693d60d125a1257ba79701f27bda688261) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "act-rais.ic8", 0x0000, 0x8000, CRC(08b38ce6) SHA1(4cbb7fd28d98ffef0f17747201625883af954e3a) )
+ROM_END
+
+ROM_START( nss_con3 )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "contra3.ic3", 0x00000, 0x80000, CRC(33b03501) SHA1(c7f4835d5ec4983e487b00f0b4c49fede2f03b9c) )
+ ROM_LOAD( "contra3.ic2", 0x80000, 0x80000, CRC(2f3e3b5b) SHA1(0186b92f022701f6ae29984252e6d346acf6550b) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "contra3.ic8", 0x0000, 0x8000, CRC(0fbfa23b) SHA1(e7a1a78a58c64297e7b9623350ec57aed8035a4f) )
+ROM_END
+
+ROM_START( nss_adam )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "addams.ic3", 0x00000, 0x80000, CRC(44643930) SHA1(a45204b2eb13c6befca30d130061b5b8ba054270) )
+ ROM_LOAD( "addams.ic2", 0x80000, 0x80000, CRC(6196adcf) SHA1(a450f278a37d5822f607aa3631831a461e8b147e) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "addams.ic8", 0x0000, 0x8000, CRC(57c7f72c) SHA1(2e3642b4b5438f6c535d6d1eb668e1663062cf78) )
+ROM_END
+
+ROM_START( nss_aten )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "amtennis.ic3", 0x00000, 0x80000, CRC(aeabaf2a) SHA1(b355e0a322b57454e767785a49c14d4c7f492488) )
+ ROM_LOAD( "amtennis.ic2", 0x80000, 0x80000, CRC(7738c5f2) SHA1(eb0089e9724c7b3834d9f6c47b92f5a1bb26fc77) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "amtennis.ic8", 0x0000, 0x8000, CRC(d2cd3926) SHA1(49fc253b1b9497ef1374c7db0bd72c163ffb07e7) )
+ROM_END
+
+ROM_START( nss_rob3 )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "robocop3.ic3", 0x00000, 0x80000, CRC(60916c42) SHA1(462d9645210a58bfd5204bd209eae2cdadb4493e) )
+ ROM_LOAD( "robocop3.ic2", 0x80000, 0x80000, CRC(a94e1b56) SHA1(7403d70504310ad5949a3b45b4a1e71e7d2bce77) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "robocop3.ic8", 0x0000, 0x8000, CRC(90d13c51) SHA1(6751dab14b7d178350ac333f07dd2c3852e4ae23) )
+ROM_END
+
+ROM_START( nss_ncaa )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "ncaa.ic3", 0x00000, 0x80000, CRC(ef49ad8c) SHA1(4c40f3746b995b53f006434b9ccec06d8fe16e1f) )
+ ROM_LOAD( "ncaa.ic2", 0x80000, 0x80000, CRC(83ef6936) SHA1(8e0f38c763861e33684c6ddb742385b0522af78a) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "ncaa.ic8", 0x0000, 0x8000, CRC(b9fa28d5) SHA1(bc538bcff5c19eae4becc6582b5c111d287b76fa) )
+ROM_END
+
+ROM_START( nss_skin )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "skins.ic3", 0x00000, 0x80000, CRC(ee1bb84d) SHA1(549ad9319e94a5d75cd4af017e63ea93ab407c87) )
+ ROM_LOAD( "skins.ic2", 0x80000, 0x80000, CRC(365fd19e) SHA1(f60d7ac39fe83fb98730e73fbef410c90a4ff35b) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "skins.ic8", 0x0000, 0x8000, CRC(9f33d5ce) SHA1(4d279ad3665bd94c7ca9cb2778572bed42c5b298) )
+ROM_END
+
+ROM_START( nss_lwep )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "nss-lw.ic3", 0x00000, 0x80000, CRC(32564666) SHA1(bf371218fa303ce95eab09fb6017a522071dcd7e) )
+ ROM_LOAD( "nss-lw.ic2", 0x80000, 0x80000, CRC(86365042) SHA1(f818024c6f858fd2780396b6c83d3a37a97fa08a) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "nss-lw.ic8", 0x0000, 0x8000, CRC(1acc1d5d) SHA1(4c8b100ac5847915aaf3b5bfbcb4f632606c97de) )
+ROM_END
+
+ROM_START( nss_ssoc )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "s-soccer.ic1", 0x00000, 0x80000, CRC(70b7f50e) SHA1(92856118528995e3a0b7d22340d440bef5fd61ac) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "s-soccer.ic3", 0x0000, 0x8000, CRC(c09211c3) SHA1(b274a57f93ae0a8774664df3d3615fb7dbecfa2e) )
+ROM_END
+
+ROM_START( nss_smw )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "nss-mw-0_prg.ic1", 0x000000, 0x100000, CRC(971ff812) SHA1(4e8f5f0d160ca3e14db3d88c00f2e7e2dce4dca6) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "mw.ic3", 0x0000, 0x8000, CRC(f2c5466e) SHA1(e116f01342fcf359498ed8750741c139093b1fb2) )
+ROM_END
+
+ROM_START( nss_fzer )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "nss-fz-0.ic2", 0x000000, 0x100000, CRC(e9b3cdf1) SHA1(ab616eecd292b94ca74c55446bddd23e9dc3e3bb) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "fz.ic7", 0x0000, 0x8000, CRC(48ae570d) SHA1(934f9fec47dcf9e49936388968d2db50c69950da) )
+ROM_END
+
+ROM_START( nss_sten )
+ NSS_BIOS
+ ROM_REGION( 0x100000, REGION_USER3, ROMREGION_DISPOSE )
+ ROM_LOAD( "nss-st-0.ic1", 0x000000, 0x100000, CRC(f131611f) SHA1(0797936e1fc9e705cd7e029097fc013a58e69002) )
+
+ /* instruction / data rom for bios */
+ ROM_REGION( 0x8000, REGION_USER4, 0 )
+ ROM_LOAD( "st.ic3", 0x0000, 0x8000, CRC(8880596e) SHA1(ec6d68fc2f51f7d94f496cd72cf898db65324542) )
+ROM_END
+
+GAME( 199?, nss, 0, snes, snes, snes, ROT0, "Nintendo", "Nintendo Super System BIOS", GAME_IS_BIOS_ROOT )
+GAME( 1992, nss_actr, nss, snes, snes, snes, ROT0, "Enix", "Act Raiser (Nintendo Super System)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) // time broken (?)
+GAME( 1992, nss_adam, nss, snes, snes, snes, ROT0, "Ocean", "The Addams Family (Nintendo Super System)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
+GAME( 1992, nss_aten, nss, snes, snes, snes, ROT0, "Absolute Entertainment Inc.","David Crane's Amazing Tennis (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) // gfx problems with net
+GAME( 1992, nss_con3, nss, snes, snes, snes, ROT0, "Konami", "Contra 3: The Alien Wars (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
+GAME( 1992, nss_lwep, nss, snes, snes, snes, ROT0, "Ocean", "Lethal Weapon (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
+GAME( 1992, nss_ncaa, nss, snes, snes, snes, ROT0, "Sculptured Software Inc.", "NCAA Basketball (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
+GAME( 1992, nss_rob3, nss, snes, snes, snes, ROT0, "Ocean", "Robocop 3 (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) // invisible enemy? gameplay prob?
+GAME( 1992, nss_skin, nss, snes, snes, snes, ROT0, "Irem", "Skins Game (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) // no controls
+GAME( 1992, nss_ssoc, nss, snes, snes, snes, ROT0, "Human Inc.", "Super Soccer (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) // some gfx issues
+GAME( 1991, nss_smw, nss, snes, snes, snes, ROT0, "Nintendo", "Super Mario World (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
+GAME( 1991, nss_fzer, nss, snes, snes, snes, ROT0, "Nintendo", "F-Zero (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
+GAME( 199?, nss_sten, nss, snes, snes, snes, ROT0, "Nintendo", "Super Tennis (Nintendo Super System)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )