summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/includes/toaplipt.h
blob: 2d2ccd7b87b1e52f8aeec9ed9ee714dae4220d92 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                       
                                             







                                                                                
                                                                                
 
                   
                                               
                                                                                            
                                                    
                                                   



                                                                                            

                                               
                                                                                        




                                                         
                                                                      
                                             

 
                      



                                                            



                                                            









                                                         

 
                                                                                
 
                   
                                                   
                                                                                          




                                                      
                                                   
                                                                                          




                                                      
                                                   
                                                                                          




                                                      
                                                   
                                                                                          



                                                      
 


                                                   
 



                                                   
                                                             
                                                                                          



                                                                                                
                                                      

                                                                                                
                                                                                          







                                                                                                

                      
                                      




                                                       
 
                                      




                                                       
 





                                                       
 





                                                       
 


                                      
 



                                      

                                                       



                                                                                                
                                                      

                                                                                                
                                                       







                                                                                                





                                                                                
                                                                                              
                                                     
                                                       
                                                     
                                                        
 



                                                           
                                                       
                                                     
                                                        

 
                                                                                
 





                                                                          
 
 


                                                                                          
 
 



                                                                            
 


                                                                                   
 


                                                                                   
 



                                                                                   
 



                                                                                   
 



                                                                                   
 
 



                                           
 


                                           
 


                                           
 
 


                                             
 


                                              
 
 
                                                                                
 




                                                                      
 
                             
 






                                                                                             
                                                                                                
      
// license:BSD-3-Clause
// copyright-holders:Quench, Stephane Humbert
/*******************************************************************************

    Input port macros used by many games in multiple Toaplan drivers
    (similar to Taito but bits are ACTIVE_HIGH instead of ACTIVE_LOW)

*******************************************************************************/


/**************************** Machine Dip Switches ****************************/

/* with location */
#define TOAPLAN_DSWA_BITS_1_TO_3_LOC(DIPBANK) \
	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION(#DIPBANK":!2") \
	PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
	PORT_DIPSETTING(    0x02, DEF_STR( On ) ) \
	PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_HIGH, #DIPBANK":!3" ) \
	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION(#DIPBANK":!4") \
	PORT_DIPSETTING(    0x08, DEF_STR( Off ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( On ) )

#define TOAPLAN_MACHINE_COCKTAIL_LOC(DIPBANK) \
	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_DIPLOCATION(#DIPBANK":!1") \
	PORT_DIPSETTING(    0x01, DEF_STR( Upright ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) ) \
	TOAPLAN_DSWA_BITS_1_TO_3_LOC(DIPBANK)

#define TOAPLAN_MACHINE_NO_COCKTAIL_LOC(DIPBANK) \
	PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_HIGH, #DIPBANK":!1" ) \
	TOAPLAN_DSWA_BITS_1_TO_3_LOC(DIPBANK)


/* without location */
#define TOAPLAN_DSWA_BITS_1_TO_3 \
	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
	PORT_DIPSETTING(    0x02, DEF_STR( On ) ) \
	PORT_SERVICE( 0x04, IP_ACTIVE_HIGH ) \
	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) \
	PORT_DIPSETTING(    0x08, DEF_STR( Off ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( On ) )

#define TOAPLAN_MACHINE_COCKTAIL \
	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) \
	PORT_DIPSETTING(    0x01, DEF_STR( Upright ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) ) \
	TOAPLAN_DSWA_BITS_1_TO_3

#define TOAPLAN_MACHINE_NO_COCKTAIL \
	PORT_DIPUNUSED( 0x01, IP_ACTIVE_HIGH ) \
	TOAPLAN_DSWA_BITS_1_TO_3


/**************************** Coinage Dip Switches ****************************/

/* with location */
#define TOAPLAN_COINAGE_JAPAN_COIN_A_LOC(DIPBANK) \
	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":!5,!6") \
	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) ) \
	PORT_DIPSETTING(    0x30, DEF_STR( 2C_3C ) ) \
	PORT_DIPSETTING(    0x10, DEF_STR( 1C_2C ) )

#define TOAPLAN_COINAGE_JAPAN_COIN_B_LOC(DIPBANK) \
	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":!7,!8") \
	PORT_DIPSETTING(    0x80, DEF_STR( 2C_1C ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) ) \
	PORT_DIPSETTING(    0xc0, DEF_STR( 2C_3C ) ) \
	PORT_DIPSETTING(    0x40, DEF_STR( 1C_2C ) )

#define TOAPLAN_COINAGE_WORLD_COIN_A_LOC(DIPBANK) \
	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":!5,!6") \
	PORT_DIPSETTING(    0x30, DEF_STR( 4C_1C ) ) \
	PORT_DIPSETTING(    0x20, DEF_STR( 3C_1C ) ) \
	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )

#define TOAPLAN_COINAGE_WORLD_COIN_B_LOC(DIPBANK) \
	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":!7,!8") \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_2C ) ) \
	PORT_DIPSETTING(    0x40, DEF_STR( 1C_3C ) ) \
	PORT_DIPSETTING(    0x80, DEF_STR( 1C_4C ) ) \
	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_6C ) )

#define TOAPLAN_COINAGE_JAPAN_LOC(DIPBANK) \
	TOAPLAN_COINAGE_JAPAN_COIN_A_LOC(DIPBANK) \
	TOAPLAN_COINAGE_JAPAN_COIN_B_LOC(DIPBANK)

#define TOAPLAN_COINAGE_WORLD_LOC(DIPBANK) \
	TOAPLAN_COINAGE_WORLD_COIN_A_LOC(DIPBANK) \
	TOAPLAN_COINAGE_WORLD_COIN_B_LOC(DIPBANK)

#define TOAPLAN_COINAGE_DUAL_LOC(DIP, MASK, WORLD, DIPBANK) \
	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":!5,!6") \
	PORT_DIPSETTING(    0x30, DEF_STR( 4C_1C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x20, DEF_STR( 3C_1C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) ) \
	PORT_DIPSETTING(    0x30, DEF_STR( 2C_3C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x10, DEF_STR( 1C_2C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":!7,!8") \
	PORT_DIPSETTING(    0x80, DEF_STR( 2C_1C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0xc0, DEF_STR( 2C_3C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x40, DEF_STR( 1C_2C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_2C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x40, DEF_STR( 1C_3C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x80, DEF_STR( 1C_4C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_6C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD)

/* without location */
#define TOAPLAN_COINAGE_JAPAN_COIN_A \
	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) \
	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) ) \
	PORT_DIPSETTING(    0x30, DEF_STR( 2C_3C ) ) \
	PORT_DIPSETTING(    0x10, DEF_STR( 1C_2C ) )

#define TOAPLAN_COINAGE_JAPAN_COIN_B \
	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) \
	PORT_DIPSETTING(    0x80, DEF_STR( 2C_1C ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) ) \
	PORT_DIPSETTING(    0xc0, DEF_STR( 2C_3C ) ) \
	PORT_DIPSETTING(    0x40, DEF_STR( 1C_2C ) )

#define TOAPLAN_COINAGE_WORLD_COIN_A \
	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) \
	PORT_DIPSETTING(    0x30, DEF_STR( 4C_1C ) ) \
	PORT_DIPSETTING(    0x20, DEF_STR( 3C_1C ) ) \
	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )

#define TOAPLAN_COINAGE_WORLD_COIN_B \
	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_2C ) ) \
	PORT_DIPSETTING(    0x40, DEF_STR( 1C_3C ) ) \
	PORT_DIPSETTING(    0x80, DEF_STR( 1C_4C ) ) \
	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_6C ) )

#define TOAPLAN_COINAGE_JAPAN \
	TOAPLAN_COINAGE_JAPAN_COIN_A \
	TOAPLAN_COINAGE_JAPAN_COIN_B

#define TOAPLAN_COINAGE_WORLD \
	TOAPLAN_COINAGE_WORLD_COIN_A \
	TOAPLAN_COINAGE_WORLD_COIN_B

#define TOAPLAN_COINAGE_DUAL(DIP, MASK, WORLD) \
	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) \
	PORT_DIPSETTING(    0x30, DEF_STR( 4C_1C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x20, DEF_STR( 3C_1C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) ) \
	PORT_DIPSETTING(    0x30, DEF_STR( 2C_3C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x10, DEF_STR( 1C_2C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) \
	PORT_DIPSETTING(    0x80, DEF_STR( 2C_1C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0xc0, DEF_STR( 2C_3C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x40, DEF_STR( 1C_2C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \
	PORT_DIPSETTING(    0x00, DEF_STR( 1C_2C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x40, DEF_STR( 1C_3C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0x80, DEF_STR( 1C_4C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \
	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_6C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD)


/************************** Difficulty Dip Switches ***************************/

/* with location */
#define TOAPLAN_DIFFICULTY_LOC(DIPBANK) \
	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION(#DIPBANK":!1,!2") \
	PORT_DIPSETTING(    0x01, DEF_STR( Easy ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( Normal ) ) \
	PORT_DIPSETTING(    0x02, DEF_STR( Hard ) ) \
	PORT_DIPSETTING(    0x03, DEF_STR( Very_Hard ) )

/* without location */
#define TOAPLAN_DIFFICULTY \
	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) \
	PORT_DIPSETTING(    0x01, DEF_STR( Easy ) ) \
	PORT_DIPSETTING(    0x00, DEF_STR( Normal ) ) \
	PORT_DIPSETTING(    0x02, DEF_STR( Hard ) ) \
	PORT_DIPSETTING(    0x03, DEF_STR( Very_Hard ) )


/************************** Joysticks and buttons *****************************/

/* generic (might be moved elsewhere) */
#define INPUT_GENERIC_JOY_LOW_NIBBLE(PL, STATE, WAY, B01, B02, B04, B08) \
	PORT_BIT( 0x01, STATE, IPT_JOYSTICK_##B01 ) WAY PORT_PLAYER(PL) \
	PORT_BIT( 0x02, STATE, IPT_JOYSTICK_##B02 ) WAY PORT_PLAYER(PL) \
	PORT_BIT( 0x04, STATE, IPT_JOYSTICK_##B04 ) WAY PORT_PLAYER(PL) \
	PORT_BIT( 0x08, STATE, IPT_JOYSTICK_##B08 ) WAY PORT_PLAYER(PL)


/* Toaplan generic (more might be needed) */
#define TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \
	INPUT_GENERIC_JOY_LOW_NIBBLE(PL, IP_ACTIVE_HIGH, PORT_8WAY, UP, DOWN, LEFT, RIGHT)


#define TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, STATE, BUTTON_A, BUTTON_B) \
	PORT_BIT( 0x10, STATE, IPT_##BUTTON_A ) PORT_PLAYER(PL) \
	PORT_BIT( 0x20, STATE, IPT_##BUTTON_B ) PORT_PLAYER(PL) \
	/* DO NOT fill bit 6 as it may be defined as START button ! */

#define TOAPLAN_GENERIC_1_BUTTON(PL) \
	TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, UNKNOWN) \
	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )

#define TOAPLAN_GENERIC_2_BUTTONS(PL) \
	TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, BUTTON2) \
	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )

#define TOAPLAN_GENERIC_3_BUTTONS(PL) \
	TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, BUTTON2) \
	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(PL) \
	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )

#define TOAPLAN_GENERIC_1_BUTTON_START(PL) \
	TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, UNKNOWN) \
	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START##PL ) \
	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )

#define TOAPLAN_GENERIC_2_BUTTONS_START(PL) \
	TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, BUTTON2) \
	PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START##PL ) \
	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )


/* Toaplan games (more might be needed) */
#define TOAPLAN_JOY_UDLR_1_BUTTON(PL) \
	TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \
	TOAPLAN_GENERIC_1_BUTTON(PL)

#define TOAPLAN_JOY_UDLR_2_BUTTONS(PL) \
	TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \
	TOAPLAN_GENERIC_2_BUTTONS(PL)

#define TOAPLAN_JOY_UDLR_3_BUTTONS(PL) \
	TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \
	TOAPLAN_GENERIC_3_BUTTONS(PL)


#define TOAPLAN_JOY_UDLR_1_BUTTON_START(PL) \
	TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \
	TOAPLAN_GENERIC_1_BUTTON_START(PL)

#define TOAPLAN_JOY_UDLR_2_BUTTONS_START(PL) \
	TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \
	TOAPLAN_GENERIC_2_BUTTONS_START(PL)


/******************************* Test switch **********************************/

/* Some Toaplan games enable built-in "cheats" like invulnerability,
   pause, slow motion, etc. when the Test switch (JAMMA pin 15)
   is pressed during play.
   Set to 0 if you want to see the Test switch as a standard input.
   Set to 1 if you want to see the Test switch as a fake Dip Switch */

#define SHOW_TEST_AS_DIP    1

#if SHOW_TEST_AS_DIP
#define TOAPLAN_TEST_SWITCH(MASK, STATE) \
	PORT_DIPNAME( MASK, MASK & STATE, "Test Switch" ) PORT_CODE(KEYCODE_F1) PORT_TOGGLE \
	PORT_DIPSETTING(    MASK & STATE, DEF_STR( Off ) ) \
	PORT_DIPSETTING(    MASK & ~STATE, DEF_STR( On ) )
#else
#define TOAPLAN_TEST_SWITCH(MASK, STATE) \
	PORT_BIT( MASK, MASK & STATE, IPT_OTHER ) PORT_NAME("Test Switch") PORT_CODE(KEYCODE_F1)
#endif