summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/rockola.c725
1 files changed, 367 insertions, 358 deletions
diff --git a/src/mame/drivers/rockola.c b/src/mame/drivers/rockola.c
index dc7249ea458..b1b3e6cf692 100644
--- a/src/mame/drivers/rockola.c
+++ b/src/mame/drivers/rockola.c
@@ -7,15 +7,15 @@
Games supported:
* Sasuke vs. Commander
- * Satan of Saturn
- * Zarzon
- * Vanguard
- * Fantasy G-202
- * Pioneer Balloon G-204
- * Nibbler G-208
+ * Satan of Saturn [2 sets]
+ * Zarzon (clone of 'satansat')
+ * Vanguard [3 sets]
+ * Fantasy [3 sets] G-202
+ * Pioneer Balloon G-204
+ * Nibbler [4 sets] G-208
DIP locations verified from manual for:
- * Zarzon
+ * Zarzon (Satan of Saturn uses the same code, so I guess locations are the same)
* Vanguard
* Nibbler
@@ -33,7 +33,7 @@ Vanguard memory map (preliminary)
read:
3104 IN0
3105 IN1
-3106 DSW ??
+3106 DSW
3107 IN2
write
@@ -89,6 +89,7 @@ Pioneer Balloon memory map (preliminary)
7000-7fff ROM 4 IC10
8000-8fff ROM 5 IC14
9000-9fff ROM 6 IC15
+
read:
b104 IN0
b105 IN1
@@ -109,6 +110,123 @@ b300 x scroll register
Interrupts: VBlank causes an IRQ. Coin insertion causes a NMI.
+****************************************************************************
+
+Stephh's notes (based on the games M6502 code and some tests) :
+
+1) 'vanguard' and clones
+
+ - There are 5 different coinage settings according to the game code
+ which are based on DSW bits 1 to 3 :
+
+ bit 3 bit 2 bit 1 effect
+ OFF OFF OFF 1C_1C
+ OFF OFF ON 2C_1C (manual tells this is the default setting)
+ OFF ON OFF 1C_3C
+ ON OFF OFF 1C_2C
+ ON ON OFF 1C_6C
+
+ The 3 other combinaisons give 1C_1C
+
+ - From the manual, it says that DSW bit 6 determines the cost of a game :
+ * bit 6 = 0 : "25c / game"
+ * bit 6 = 1 : "50c / game"
+ When you look at the game code, it appears to be some of "Bonus Coinage" :
+ * bit 6 = 0 : you get an additional credit each time you insert 1 coin
+ * bit 6 = 1 : you get an additional credit each time you insert 2 coins
+
+ - So, instead of having something like this :
+ PORT_DIPNAME( 0x0e, 0x02, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!2,!3,!4")
+ PORT_DIPSETTING( 0x02, "25c= 1C/1C 2C/3C 50c= 2C/2C" )
+ PORT_DIPSETTING( 0x00, "25c= 1C/2C 50c= 1C/1C 2C/3C" )
+ PORT_DIPSETTING( 0x08, "25c= 1C/3C 50c= 1C/2C 2C/5C" )
+ PORT_DIPSETTING( 0x04, "25c= 1C/4C 50c= 1C/3C 2C/7C" )
+ PORT_DIPSETTING( 0x0c, "25c= 1C/7C 50c= 1C/6C 2C/13C" )
+ duplicate settings - untested in game code
+ PORT_DIPSETTING( 0x06, "25c= 1C/2C 50c= 1C/1C 2C/3C" )
+ PORT_DIPSETTING( 0x0a, "25c= 1C/2C 50c= 1C/1C 2C/3C" )
+ PORT_DIPSETTING( 0x0e, "25c= 1C/2C 50c= 1C/1C 2C/3C" )
+ ...
+ PORT_DIPNAME( 0x40, 0x00, "Game Cost" ) PORT_DIPLOCATION("SW1:!7")
+ PORT_DIPSETTING( 0x00, "25c / game" )
+ PORT_DIPSETTING( 0x40, "50c / game" )
+ or using conditional Dip Switches, I've coded this the way I did.
+
+2a) 'fantasy'
+
+ - Code for coinage is the same as for 'vanguard'.
+ - I can't tell if it's an ingame bug or not, but there's a mix
+ between "COIN" and "CREDIT" ("COCR" is displayed)
+ - You can always continue, provided you're on the 1st pattern.
+ Note that the continue text is in German !
+
+2b) 'fantasyu'
+
+ - Code for coinage is the same as for 'vanguard'.
+ - This version seems easier than 'fantasy', especially on level 2
+ where you have a sword and an easier maze.
+ - Code has been added to test DSW bit 7 to allow or not a continue play.
+ Note that the continue play is only available on the 1st pattern.
+ - "Fantasy" is written with different "font" and color
+ - "CREDIT" is displayed instead of "COIN"
+
+2b) 'fantasyj'
+
+ - Code for coinage is the same as for 'vanguard'.
+ - This version seems easier than 'fantasy', especially on level 2
+ where you have a sword and an easier maze.
+ - Code has been added to test DSW bit 7 to allow or not a continue play.
+ Note that the continue play is only available on the 1st pattern.
+ Also note that the continue text is still in English !
+ - "COIN" is correctly displayed.
+
+3) 'pballoon'
+
+ - Code for coinage is the same as for 'vanguard'.
+ - The "Language" Dip Switch only has an effect at the end of the pattern
+ when it displays "LAND HERE" or what I suppose to be same in Japanese.
+
+4a) 'nibbler'
+
+ - "Lives settings" : 3, 4, 5 or 6 (table at 0x4edf)
+ - Bonus life every 4 levels
+ - Simplified instructions
+ - DSW bit 2 determines what happens when the snake touches a corner (code at 0x3c91) :
+ * bit 2 = 0 : pause for 13 frames
+ * bit 2 = 1 : no pause
+
+4b) 'nibblera'
+
+ - "Lives settings" : 3, 4, 5 or 6 (table at 0x5bf0)
+ - Bonus life every 4 levels
+ - Detailed instructions
+ - DSW bit 2 is no more tested when the snake touches a corner (code at 0x3b3c);
+ this means that the snake ALWAYS pauses for 13 frames.
+ However, there is extra code where it is tested to determine difficulty
+ (code at 0x31b4 and 0x32f5 - tables at 0x3391 and 0x33b2)
+
+4c) 'nibblerb'
+
+ - code based on 'nibblera'
+ - "Lives settings" : 2, 3, 4 or 5 (table at 0x5be7)
+ - Bonus life every 4 levels
+ - Detailed instructions
+ - The snake ALWAYS pauses for 13 frames (code at 0x3b38) when it touches a corner
+ and DSW bit 2 determines difficulty as in 'nibblera'
+ (code at 0x31b0 and 0x32f1 - tables at 0x338d and 0x33ae)
+
+4d) 'nibblero'
+
+ - code is the same as 'nibblerb' (same routines, same code and tables addresses)
+ - "Lives settings" : 2, 3, 4 or 5 (table at 0x5be7)
+ - Bonus life every 8 levels
+ - Detailed instructions
+ - The snake ALWAYS pauses for 13 frames (code at 0x3b38) when it touches a corner
+ and DSW bit 2 determines difficulty as in 'nibblera'
+ (code at 0x31b0 and 0x32f1 - tables at 0x338d and 0x33ae)
+ - The game is harder than 'nibblerb' because the tables at 0x338d and 0x33ae
+ have higher values; so the snake goes faster and grows longer.
+
***************************************************************************/
/*
@@ -119,7 +237,6 @@ Interrupts: VBlank causes an IRQ. Coin insertion causes a NMI.
- vanguard/fantasy speech (hd38880/hd38882 emulation)
- music freq (Satan of Saturn and clone)
- correct music waveform/volume control
- - clean up dips/inputs for all games
- correct ROM names
- fantasy is German? (the continue text is in German)
@@ -133,6 +250,11 @@ Interrupts: VBlank causes an IRQ. Coin insertion causes a NMI.
#include "sound/custom.h"
#include "sound/samples.h"
+
+/* Change to 1 to allow fake debug buttons */
+#define NIBBLER_HACK 0
+
+
#ifndef M_LN2
#define M_LN2 0.69314718055994530942
#endif
@@ -199,26 +321,28 @@ static void sasuke_start_counter(void)
}
-/* IN1 + music0 playing */
-static READ8_HANDLER( sasuke_port_1_r )
-{
- return readinputport(1) | (rockola_music0_playing() ? 0x80 : 0x00);
-}
+/*************************************
+ *
+ * Custom input ports
+ *
+ *************************************/
-/* IN2 + binary counter */
-static READ8_HANDLER( sasuke_port_3_r )
+static CUSTOM_INPUT( rockola_music0_r )
{
- return readinputport(3) | sasuke_counter;
+ return (rockola_music0_playing() ? 0x01 : 0x00);
}
-/* IN2 + music0 playing */
-static READ8_HANDLER( vanguard_port_3_r )
+static CUSTOM_INPUT( sasuke_count_r )
{
- return readinputport(3) | (rockola_music0_playing() ? 0x10 : 0x00);
+ return (sasuke_counter >> 4);
}
-/* Memory Maps */
+/*************************************
+ *
+ * Memory maps
+ *
+ *************************************/
static ADDRESS_MAP_START( sasuke_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x03ff) AM_RAM
@@ -232,10 +356,10 @@ static ADDRESS_MAP_START( sasuke_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xb000, 0xb001) AM_WRITE(sasuke_sound_w)
AM_RANGE(0xb002, 0xb002) AM_WRITE(satansat_b002_w) /* flip screen & irq enable */
AM_RANGE(0xb003, 0xb003) AM_WRITE(satansat_backcolor_w)
- AM_RANGE(0xb004, 0xb004) AM_READ(input_port_0_r) // IN0
- AM_RANGE(0xb005, 0xb005) AM_READ(sasuke_port_1_r) // IN1 + music0 playing
- AM_RANGE(0xb006, 0xb006) AM_READ(input_port_2_r) /* DSW */
- AM_RANGE(0xb007, 0xb007) AM_READ(sasuke_port_3_r) // IN2 + binary counter
+ AM_RANGE(0xb004, 0xb004) AM_READ_PORT("IN0")
+ AM_RANGE(0xb005, 0xb005) AM_READ_PORT("IN1")
+ AM_RANGE(0xb006, 0xb006) AM_READ_PORT("DSW")
+ AM_RANGE(0xb007, 0xb007) AM_READ_PORT("IN2")
AM_RANGE(0xf800, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -251,10 +375,10 @@ static ADDRESS_MAP_START( satansat_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xb000, 0xb001) AM_WRITE(satansat_sound_w)
AM_RANGE(0xb002, 0xb002) AM_WRITE(satansat_b002_w) /* flip screen & irq enable */
AM_RANGE(0xb003, 0xb003) AM_WRITE(satansat_backcolor_w)
- AM_RANGE(0xb004, 0xb004) AM_READ(input_port_0_r) // IN0
- AM_RANGE(0xb005, 0xb005) AM_READ(sasuke_port_1_r) // IN1 + music0 playing
- AM_RANGE(0xb006, 0xb006) AM_READ(input_port_2_r) /* DSW */
- AM_RANGE(0xb007, 0xb007) AM_READ(sasuke_port_3_r) // IN2 + binary counter
+ AM_RANGE(0xb004, 0xb004) AM_READ_PORT("IN0")
+ AM_RANGE(0xb005, 0xb005) AM_READ_PORT("IN1")
+ AM_RANGE(0xb006, 0xb006) AM_READ_PORT("DSW")
+ AM_RANGE(0xb007, 0xb007) AM_READ_PORT("IN2")
AM_RANGE(0xf800, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -268,10 +392,10 @@ static ADDRESS_MAP_START( vanguard_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x3001, 0x3001) AM_WRITE(crtc6845_register_w)
AM_RANGE(0x3100, 0x3102) AM_WRITE(vanguard_sound_w)
AM_RANGE(0x3103, 0x3103) AM_WRITE(rockola_flipscreen_w)
- AM_RANGE(0x3104, 0x3104) AM_READ(input_port_0_r) // IN0
- AM_RANGE(0x3105, 0x3105) AM_READ(input_port_1_r) // IN1
- AM_RANGE(0x3106, 0x3106) AM_READ(input_port_2_r) /* DSW */
- AM_RANGE(0x3107, 0x3107) AM_READ(vanguard_port_3_r) // IN2 + music0 playing
+ AM_RANGE(0x3104, 0x3104) AM_READ_PORT("IN0")
+ AM_RANGE(0x3105, 0x3105) AM_READ_PORT("IN1")
+ AM_RANGE(0x3106, 0x3106) AM_READ_PORT("DSW")
+ AM_RANGE(0x3107, 0x3107) AM_READ_PORT("IN2")
AM_RANGE(0x3200, 0x3200) AM_WRITE(rockola_scrollx_w)
AM_RANGE(0x3300, 0x3300) AM_WRITE(rockola_scrolly_w)
AM_RANGE(0x3400, 0x3400) AM_WRITE(vanguard_speech_w) // speech
@@ -288,10 +412,10 @@ static ADDRESS_MAP_START( fantasy_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x2000, 0x2000) AM_WRITE(crtc6845_address_w)
AM_RANGE(0x2001, 0x2001) AM_WRITE(crtc6845_register_w)
AM_RANGE(0x2100, 0x2103) AM_WRITE(fantasy_sound_w)
- AM_RANGE(0x2104, 0x2104) AM_READ(input_port_0_r) // IN0
- AM_RANGE(0x2105, 0x2105) AM_READ(input_port_1_r) // IN1
- AM_RANGE(0x2106, 0x2106) AM_READ(input_port_2_r) /* DSW */
- AM_RANGE(0x2107, 0x2107) AM_READ(input_port_3_r) // IN2
+ AM_RANGE(0x2104, 0x2104) AM_READ_PORT("IN0")
+ AM_RANGE(0x2105, 0x2105) AM_READ_PORT("IN1")
+ AM_RANGE(0x2106, 0x2106) AM_READ_PORT("DSW")
+ AM_RANGE(0x2107, 0x2107) AM_READ_PORT("IN2")
AM_RANGE(0x2200, 0x2200) AM_WRITE(rockola_scrollx_w)
AM_RANGE(0x2300, 0x2300) AM_WRITE(rockola_scrolly_w)
AM_RANGE(0x2400, 0x2400) AM_WRITE(fantasy_speech_w) // speech
@@ -309,68 +433,79 @@ static ADDRESS_MAP_START( pballoon_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xb000, 0xb000) AM_WRITE(crtc6845_address_w)
AM_RANGE(0xb001, 0xb001) AM_WRITE(crtc6845_register_w)
AM_RANGE(0xb100, 0xb103) AM_WRITE(fantasy_sound_w)
- AM_RANGE(0xb104, 0xb104) AM_READ(input_port_0_r) // IN0
- AM_RANGE(0xb105, 0xb105) AM_READ(input_port_1_r) // IN1
- AM_RANGE(0xb106, 0xb106) AM_READ(input_port_2_r) /* DSW */
- AM_RANGE(0xb107, 0xb107) AM_READ(input_port_3_r) // IN2
+ AM_RANGE(0xb104, 0xb104) AM_READ_PORT("IN0")
+ AM_RANGE(0xb105, 0xb105) AM_READ_PORT("IN1")
+ AM_RANGE(0xb106, 0xb106) AM_READ_PORT("DSW")
+ AM_RANGE(0xb107, 0xb107) AM_READ_PORT("IN2")
AM_RANGE(0xb200, 0xb200) AM_WRITE(rockola_scrollx_w)
AM_RANGE(0xb300, 0xb300) AM_WRITE(rockola_scrolly_w)
AM_RANGE(0xf000, 0xffff) AM_ROM
ADDRESS_MAP_END
-/* Input Ports */
-/* Derived from Zarzon. Might not reflect the actual hardware. */
-static INPUT_PORTS_START( sasuke )
- PORT_START // IN0
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START2 )
+/*************************************
+ *
+ * Port definitions
+ *
+ *************************************/
+
+static INPUT_PORTS_START( rockola_generic_joy8way )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_8WAY
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
- PORT_START // IN1
+ PORT_START_TAG("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x7C, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* music0 playing */
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_START /* DSW */
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Upright ))
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!1")
+ PORT_DIPSETTING( 0x01, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Coinage ) )
+ PORT_DIPNAME( 0x0e, 0x02, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!2,!3,!4")
+ PORT_DIPSETTING ( 0x02, DEF_STR( 2C_1C ) )
PORT_DIPSETTING ( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING ( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING ( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING ( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING ( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING ( 0x08, DEF_STR( On ) )
- PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING ( 0x00, "3" )
- PORT_DIPSETTING ( 0x10, "4" )
- PORT_DIPSETTING ( 0x20, "5" )
- /* 0x30 gives 3 again */
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING ( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING ( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "RAM Test" )
- PORT_DIPSETTING ( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING ( 0x80, DEF_STR( On ) )
-
- PORT_START // IN2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
- PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* NC */
- PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* connected to a binary counter */
+ PORT_DIPSETTING ( 0x08, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING ( 0x04, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING ( 0x0c, DEF_STR( 1C_6C ) )
+/* PORT_DIPSETTING ( 0x06, DEF_STR( 1C_1C ) ) */
+/* PORT_DIPSETTING ( 0x0a, DEF_STR( 1C_1C ) ) */
+/* PORT_DIPSETTING ( 0x0e, DEF_STR( 1C_1C ) ) */
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!5,!6")
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPSETTING( 0x20, "5" )
+/* PORT_DIPSETTING( 0x30, "3" ) */
+ PORT_DIPNAME( 0x40, 0x00, "Coinage Bonus" ) PORT_DIPLOCATION("SW1:!7") /* see notes */
+ PORT_DIPSETTING ( 0x40, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING ( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_HIGH, "SW1:!8" )
INPUT_PORTS_END
-static INPUT_PORTS_START( zarzon )
- PORT_START // IN0
+static INPUT_PORTS_START( satansat )
+ PORT_START_TAG("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 )
@@ -380,21 +515,26 @@ static INPUT_PORTS_START( zarzon )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
- PORT_START // IN1
+ PORT_START_TAG("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x7C, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* music0 playing */
+ PORT_BIT( 0x7c, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(rockola_music0_r, NULL) /* music0 playing */
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
+ PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* NC */
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(sasuke_count_r, NULL) /* connected to a binary counter */
- PORT_START /* DSW */
+ PORT_START_TAG("DSW")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!1")
- PORT_DIPSETTING( 0x01, DEF_STR( Upright ))
+ PORT_DIPSETTING( 0x01, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x0a, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!2,!4")
PORT_DIPSETTING ( 0x08, DEF_STR( 2C_1C ) )
PORT_DIPSETTING ( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING ( 0x02, DEF_STR( 1C_2C ) )
- /* 0x0a gives 2/1 again */
+/* PORT_DIPSETTING ( 0x0a, DEF_STR( 2C_1C ) ) */
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:!3")
PORT_DIPSETTING ( 0x04, "5000" )
PORT_DIPSETTING ( 0x00, "10000" )
@@ -402,210 +542,99 @@ static INPUT_PORTS_START( zarzon )
PORT_DIPSETTING ( 0x00, "3" )
PORT_DIPSETTING ( 0x10, "4" )
PORT_DIPSETTING ( 0x20, "5" )
- /* 0x30 gives 3 again */
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:!7")
- PORT_DIPSETTING ( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING ( 0x40, DEF_STR( On ) )
+/* PORT_DIPSETTING( 0x30, "3" ) */
+ PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_HIGH, "SW1:!7" )
PORT_DIPNAME( 0x80, 0x00, "RAM Test" ) PORT_DIPLOCATION("SW1:!8") /* unused according to manual */
PORT_DIPSETTING ( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING ( 0x80, DEF_STR( On ) )
-
- PORT_START // IN2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
- PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* NC */
- PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* connected to a binary counter */
INPUT_PORTS_END
-static INPUT_PORTS_START( satansat )
- PORT_START // IN0
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
+/* Derived from 'satansat'. Might not reflect the actual hardware. Dip Swicthes verified from game code though. */
+static INPUT_PORTS_START( sasuke )
+ PORT_INCLUDE(satansat)
- PORT_START // IN1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x7C, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* music0 playing */
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_START /* DSW */
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Upright ))
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x0a, 0x00, DEF_STR( Coinage ) )
- PORT_DIPSETTING ( 0x08, DEF_STR( 2C_1C ) )
+ PORT_MODIFY("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!2")
PORT_DIPSETTING ( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING ( 0x02, DEF_STR( 1C_2C ) )
- /* 0x0a gives 2/1 again */
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Bonus_Life ) )
- PORT_DIPSETTING ( 0x00, "5000" )
- PORT_DIPSETTING ( 0x04, "10000" )
- PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING ( 0x00, "3" )
- PORT_DIPSETTING ( 0x10, "4" )
- PORT_DIPSETTING ( 0x20, "5" )
- /* 0x30 gives 3 again */
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING ( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING ( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "RAM Test" )
- PORT_DIPSETTING ( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING ( 0x80, DEF_STR( On ) )
-
- PORT_START // IN2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
- PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* NC */
- PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* connected to a binary counter */
+ PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_HIGH, "SW1:!4" )
INPUT_PORTS_END
static INPUT_PORTS_START( vanguard )
- PORT_START // IN0
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON4 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_INCLUDE(rockola_generic_joy8way)
+
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) /* fire down */
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON4 ) /* fire up */
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) /* fire right */
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) /* fire left */
+
+ PORT_MODIFY("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL /* fire down */
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_COCKTAIL /* fire up */
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL /* fire right */
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL /* fire left */
+
+ PORT_MODIFY("IN2")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(rockola_music0_r, NULL) /* music0 playing */
+INPUT_PORTS_END
- PORT_START // IN1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+static INPUT_PORTS_START( fantasy )
+ PORT_INCLUDE(rockola_generic_joy8way)
+INPUT_PORTS_END
- PORT_START // DSW0
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!1")
- PORT_DIPSETTING( 0x01, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x0e, 0x02, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!2,!3,!4") /* unused according to manual */
- PORT_DIPSETTING( 0x00, "25c= 1C/2C 50c= 1C/1C 2C/3C" )
- PORT_DIPSETTING( 0x02, "25c= 1C/1C 2C/3C 50c= 2C/2C" )
- PORT_DIPSETTING( 0x04, "25c= 1C/4C 50c= 1C/3C 2C/7C" )
- PORT_DIPSETTING( 0x06, "25c= 1C/2C 50c= 1C/1C 2C/3C" )
- PORT_DIPSETTING( 0x08, "25c= 1C/3C 50c= 1C/2C 2C/5C" )
- PORT_DIPSETTING( 0x0a, "25c= 1C/2C 50c= 1C/1C 2C/3C" )
- PORT_DIPSETTING( 0x0c, "25c= 1C/7C 50c= 1C/6C 2C/13C" )
- PORT_DIPSETTING( 0x0e, "25c= 1C/2C 50c= 1C/1C 2C/3C" )
- PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!5,!6")
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x10, "4" )
- PORT_DIPSETTING( 0x20, "5" )
-/* PORT_DIPSETTING( 0x30, "3" ) */
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!7")
- PORT_DIPSETTING( 0x00, "25c / game" )
- PORT_DIPSETTING( 0x40, "50c / game" )
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:!8")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+static INPUT_PORTS_START( fantasyu )
+ PORT_INCLUDE(fantasy)
- PORT_START // IN2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* music0 playing */
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW1:!8")
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) /* 1st pattern only */
INPUT_PORTS_END
-static INPUT_PORTS_START( fantasy )
- PORT_START // IN0
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_8WAY
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_8WAY
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
+static INPUT_PORTS_START( pballoon )
+ PORT_INCLUDE(rockola_generic_joy8way)
- PORT_START // IN1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_START // DSW0
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x4e, 0x02, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x42, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x02, "1 Coin/1 Credit 2/3" )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x48, "1 Coin/2 Credits 2/5" )
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x44, "1 Coin/3 Credits 2/7" )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x4c, "1 Coin/6 Credits 2/13" )
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_7C ) )
-/*
- PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0a, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x40, "1 Coin/1 Credit + Bonus" )
- PORT_DIPSETTING( 0x46, "1 Coin/1 Credit + Bonus" )
- PORT_DIPSETTING( 0x4a, "1 Coin/1 Credit + Bonus" )
- PORT_DIPSETTING( 0x4e, "1 Coin/1 Credit + Bonus" )
-*/
- PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x10, "4" )
- PORT_DIPSETTING( 0x20, "5" )
-/* PORT_DIPSETTING( 0x30, "3" ) */
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) )
- PORT_DIPSETTING( 0x80, DEF_STR( No ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+ PORT_MODIFY("IN1")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_START // IN2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Language ) ) PORT_DIPLOCATION("SW1:!8") /* code at 0x6c83 */
+ PORT_DIPSETTING( 0x80, DEF_STR( English ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Japanese ) )
INPUT_PORTS_END
static INPUT_PORTS_START( nibbler )
- PORT_START // IN0
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 0") PORT_CODE(KEYCODE_Z) // slow down
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 1") PORT_CODE(KEYCODE_X)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 2") PORT_CODE(KEYCODE_C)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 3") PORT_CODE(KEYCODE_V)
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN) PORT_8WAY
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP) PORT_8WAY
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
-
- PORT_START // IN1
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 4") PORT_CODE(KEYCODE_B) // pause
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 5") PORT_CODE(KEYCODE_N) // unpause
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 6") PORT_CODE(KEYCODE_M) // end game
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 7") PORT_CODE(KEYCODE_K)
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_INCLUDE(rockola_generic_joy8way)
+
+ /* There are no buttons on a real "Nibbler" cabinet, but I guess that the game was tested
+ with a "Vanguard" cabinet so they have been mapped with debug features. */
+#if NIBBLER_HACK
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 0") PORT_CODE(KEYCODE_Z) // slow down
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 1") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 2") PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 3") PORT_CODE(KEYCODE_V)
+
+ PORT_MODIFY("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 4") PORT_CODE(KEYCODE_B) // pause
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 5") PORT_CODE(KEYCODE_N) // unpause
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 6") PORT_CODE(KEYCODE_M) // end game
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Debug 7") PORT_CODE(KEYCODE_K)
+#endif
- PORT_START // DSW0
+ PORT_MODIFY("DSW")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!1,!2")
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x01, "4" )
@@ -625,86 +654,37 @@ static INPUT_PORTS_START( nibbler )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!7,!8")
PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0xc0, "2C/1C 4C/3C" )
+ PORT_DIPSETTING( 0xc0, "2 Coins/1 Credit 4/3" )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x80, "1C/1C 2C/3C" )
-
- PORT_START // IN2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_DIPSETTING( 0x80, "1 Coin/1 Credit 2/3" )
INPUT_PORTS_END
-static INPUT_PORTS_START( pballoon )
- PORT_START // IN0
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
+static INPUT_PORTS_START( nibblera )
+ PORT_INCLUDE(nibbler)
- PORT_START // IN1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
+INPUT_PORTS_END
- PORT_START // DSW0
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x4e, 0x02, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x42, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x02, "1 Coin/1 Credit 2/3" )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x48, "1 Coin/2 Credits 2/5" )
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x44, "1 Coin/3 Credits 2/7" )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x4c, "1 Coin/6 Credits 2/11" )
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_7C ) )
-/*
- PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0a, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x40, "1 Coin/1 Credit + Bonus" )
- PORT_DIPSETTING( 0x46, "1 Coin/1 Credit + Bonus" )
- PORT_DIPSETTING( 0x4a, "1 Coin/1 Credit + Bonus" )
- PORT_DIPSETTING( 0x4e, "1 Coin/1 Credit + Bonus" )
-*/
- PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x10, "4" )
- PORT_DIPSETTING( 0x20, "5" )
-/* PORT_DIPSETTING( 0x30, "3" ) */
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+static INPUT_PORTS_START( nibblerb )
+ PORT_INCLUDE(nibblera)
- PORT_START // IN2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!1,!2")
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x01, "3" )
+ PORT_DIPSETTING( 0x02, "4" )
+ PORT_DIPSETTING( 0x03, "5" )
INPUT_PORTS_END
-/* Graphics Layouts */
+
+/*************************************
+ *
+ * Graphics layouts
+ *
+ *************************************/
static const gfx_layout swapcharlayout =
{
@@ -739,7 +719,6 @@ static const gfx_layout charlayout_memory =
8*8 /* every char takes 8 consecutive bytes */
};
-/* Graphics Decode Information */
static GFXDECODE_START( sasuke )
GFXDECODE_ENTRY( 0, 0x1000, swapcharlayout, 0, 4 ) /* the game dynamically modifies this */
@@ -756,7 +735,12 @@ static GFXDECODE_START( vanguard )
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 8*4, 8 )
GFXDECODE_END
-/* Sound Interfaces */
+
+/*************************************
+ *
+ * Sound Interfaces
+ *
+ *************************************/
static const struct CustomSound_interface custom_interface =
{
@@ -985,13 +969,18 @@ static const struct SN76477interface fantasy_sn76477_intf =
// BOMB GND: 2,9,26,27 +5V: 15,25
};
-/* Interrupt Generators */
+
+/*************************************
+ *
+ * Interrupt Generators
+ *
+ *************************************/
static INTERRUPT_GEN( satansat_interrupt )
{
if (cpu_getiloops() != 0)
{
- UINT8 val = readinputport(3);
+ UINT8 val = readinputportbytag("IN2");
coin_counter_w(0, val & 1);
@@ -1007,7 +996,7 @@ static INTERRUPT_GEN( rockola_interrupt )
{
if (cpu_getiloops() != 0)
{
- UINT8 val = readinputport(3);
+ UINT8 val = readinputportbytag("IN2");
coin_counter_w(0, val & 1);
coin_counter_w(1, val & 2);
@@ -1020,7 +1009,12 @@ static INTERRUPT_GEN( rockola_interrupt )
cpunum_set_input_line(machine, 0, M6502_IRQ_LINE, HOLD_LINE); /* one IRQ per frame */
}
-/* Machine Initialization */
+
+/*************************************
+ *
+ * Machine initialisation
+ *
+ *************************************/
static MACHINE_RESET( sasuke )
{
@@ -1054,7 +1048,12 @@ static MACHINE_RESET( pballoon )
rockola_set_music_clock(1 / 40.3);
}
-/* Machine Drivers */
+
+/*************************************
+ *
+ * Machine drivers
+ *
+ *************************************/
static MACHINE_DRIVER_START( sasuke )
// basic machine hardware
@@ -1209,7 +1208,12 @@ static MACHINE_DRIVER_START( pballoon )
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MACHINE_DRIVER_END
-/* ROMs */
+
+/*************************************
+ *
+ * ROM definitions
+ *
+ *************************************/
ROM_START( sasuke )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
@@ -1642,20 +1646,25 @@ ROM_START( nibblero )
ROM_LOAD( "g-0959-45.ic53", 0x1000, 0x0800, CRC(33189917) SHA1(01a1b1693db0172609780daeb60430fa0c8bcec2) )
ROM_END
-/* Game Drivers */
+
+/*************************************
+ *
+ * Game drivers
+ *
+ *************************************/
GAME( 1980, sasuke, 0, sasuke, sasuke, 0, ROT90, "SNK", "Sasuke vs. Commander", 0 )
GAME( 1981, satansat, 0, satansat, satansat, 0, ROT90, "SNK", "Satan of Saturn (set 1)", GAME_IMPERFECT_SOUND )
GAME( 1981, satansaa, satansat, satansat, satansat, 0, ROT90, "SNK", "Satan of Saturn (set 2)", GAME_IMPERFECT_SOUND )
-GAME( 1981, zarzon, satansat, satansat, zarzon, 0, ROT90, "[SNK] (Taito America license)", "Zarzon", GAME_IMPERFECT_SOUND )
+GAME( 1981, zarzon, satansat, satansat, satansat, 0, ROT90, "[SNK] (Taito America license)", "Zarzon", GAME_IMPERFECT_SOUND )
GAME( 1981, vanguard, 0, vanguard, vanguard, 0, ROT90, "SNK", "Vanguard (SNK)", 0 )
GAME( 1981, vangrdce, vanguard, vanguard, vanguard, 0, ROT90, "SNK (Centuri license)", "Vanguard (Centuri)", 0 )
GAME( 1981, vanguarj, vanguard, vanguard, vanguard, 0, ROT90, "SNK", "Vanguard (Japan)", 0 )
GAME( 1981, fantasy, 0, fantasy, fantasy, 0, ROT90, "SNK", "Fantasy (World)", 0 )
-GAME( 1981, fantasyu, fantasy, fantasy, fantasy, 0, ROT90, "[SNK] (Rock-Ola license)", "Fantasy (US)", 0 )
-GAME( 1981, fantasyj, fantasy, fantasy, fantasy, 0, ROT90, "SNK", "Fantasy (Japan)", 0 )
+GAME( 1981, fantasyu, fantasy, fantasy, fantasyu, 0, ROT90, "[SNK] (Rock-Ola license)", "Fantasy (US)", 0 )
+GAME( 1981, fantasyj, fantasy, fantasy, fantasyu, 0, ROT90, "SNK", "Fantasy (Japan)", 0 )
GAME( 1982, pballoon, 0, pballoon, pballoon, 0, ROT90, "SNK", "Pioneer Balloon", 0 )
GAME( 1982, nibbler, 0, nibbler, nibbler, 0, ROT90, "Rock-Ola", "Nibbler (set 1)", 0 )
-GAME( 1982, nibblera, nibbler, nibbler, nibbler, 0, ROT90, "Rock-Ola", "Nibbler (set 2)", 0 )
-GAME( 1982, nibblerb, nibbler, nibbler, nibbler, 0, ROT90, "Rock-Ola", "Nibbler (set 3)", 0 )
-GAME( 1983, nibblero, nibbler, nibbler, nibbler, 0, ROT90, "Olympia", "Nibbler (Olympia)", 0 )
+GAME( 1982, nibblera, nibbler, nibbler, nibblera, 0, ROT90, "Rock-Ola", "Nibbler (set 2)", 0 )
+GAME( 1982, nibblerb, nibbler, nibbler, nibblerb, 0, ROT90, "Rock-Ola", "Nibbler (set 3)", 0 )
+GAME( 1983, nibblero, nibbler, nibbler, nibblerb, 0, ROT90, "Olympia", "Nibbler (Olympia)", 0 )