summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/drivers/ltcasino.cpp
blob: d9496cc7b9999e4394221891e4dc19cb233acf84 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                                                            
 
                 
                    
                   
 
                                     
 
         
                                
                                                               



                                            






                                                                       
                                                                  
 
 
































                                                                        
                                                                        
                                    



                            

                                                                            
 
                
                            
                            
                                 
                          
                         
                          
                   

                    

                    
                      

                      
 


                                                                            
 


                                           

                                                                                          
                                            
                                          
                                    

                                          


                                                        

                                      

                                                
           
 
                           
 
                                              
                                              
                                            

        
                                              
                                                       
                                              

                                                

                                                     
                                                      

                                  
                                 


                             
                                        
 
                                                             

                                                                                                       
                                                 
 
                                      



                                        
 


                                          
 
 


                                                                            
 
                                               
 
                               
                                                 
                                  

                                                         




                                                                                                  

                                  

 



                                                                            
                                    









                                                                                                             






                                                          
                                               


                                                
                                               


                                                
                                               




                                                                                
                                               

                                                
                                                        
                                               

                                                

                       
                                                  
                                     


                                     
                                 





                                                    



                                                                     
                                                                                     
                                                          
                                               

                                            
                               

                       
                                                                                          


                                                




                                                          


                                                
                               
                                            
                                               
                                                
                               

               
                                    



                                                 
 

                                            
                                               


                                                          
                                                
                                               

                                                
                                                
                                               

                                                

                        







                                                                                                                       

                               
                        
                                                          

               
                                     



                                                 
 

                                            
                                               

                                                
                                                
                                               

                                                

                        



                                                                                                  





                                                                     
               

                                  

                              

                                            
                                               
                                                

                                             
                                               






                                                  
                                               

                                                


               



                                                                            
                                                                    




























                                                                                                        
                                    

 
                                                        






                                                                                    
                                                                    









                                                                                                              






                                         
                       


           
                                      
                                                         

             
                                      
















                                                                            
                                                                                                                                                                           


                          
                                             
 
                                                                                                                                                                           


                          























                                                          


























                                                                            
 

                                                     
                                                                  
                                                                      
 


                                                                                  

                               
                                  
                                                                        
                                                                          

                                                                                    
 
                                  
                                                                        

                                                                          


                                                             
                                                                                  


                                            
                                                                                                                
 



                                                                         
 
                                                                
 
                                                               
 
                         
                                               
 



                                                              
 
 
                                                     


                         
                                                             

                                        
                                                                                   
 
                                            

 

                                                   
                         







                                                                        



                                                                            
 

                                              
                     
                                           

                                                                                                     



                                                                                                     
 
                                       
                                                                                                     

       

                                        
                   
                                           

                                                                                                          



                                                                                                          
 
                                       
                                                                                                          

       



                                                     
                                           

                                                                                                                 








                                                                                                                 

                                                     

                                           

                                                                                                                 








                                                                                                                 
 


                                                                            
 

                                                                                                                                                                                                                               


                                                                                                                                                                                                                               
// license: BSD-3-Clause
// copyright-holders: Pierpaolo Prazzoli, David Haywood, Dirk Best
/***************************************************************************

    Little Casino
    Little Casino II
    Mini Vegas 4in1

    Non-Payout 'Gambling' style games

    TODO:
    - Clocks need to be verified
    - Timing is probably wrong, IRQ sources need to be verified
    - Figure out the rest of the dipswitches
    - Keyboard

    Notes:
    - To enter service mode, press buttons 2 and 4 then reset. Let go
      of the buttons once the video test finishes. Some games also
      enter service mode if you disable all games via the dipswitches.
      Once in service mode, press both buttons 2 and 4 to advance to
      next screen.
    - The name "Little Casino II" is just reflected by a sticker on the
      cabinet - the title screen is still "Little Casino"
    - Color version of "Little Casino" is undumped (flyer exists)?


Mini Vegas
CC-089  (c) Entertainment Enterprises Ltd. 1983
 +---------------------------------------------------------------------+
 |        +-+                  M2114          A.IC19         18.432MHz |
 |        |H|                                                      D1  |
 |        |D|                  M2114  M2114                            |
++  2003C |6|                                 B.IC18               +-+ |
|         |8|                  M2114  M2114                        | | |
|         |2|                                                      |9| |
|         |1|                  M2114  M2114   C.IC17               |9| |
|         +-+                                                      |3| |
|         +-+                         M2114                        |7| |
|   DSW3  |H|                         TC5514  D.IC16               | | |
|         |D|       +-+                                            +-+ |
|         |6|       | |                                            +-+ |
|         |8|       |8|               TC5514  E.IC15               |R| |
|         |2|       |9|                                            |6| |
|         |1|       |1|                                            |5| |
++        +-+       |0|               TC5514  F.IC14               |0| |
 |                  | |                                            |2| |
 |    VR1     DSW2  +-+                                            +-+ |
 |  MB3712    DSW1  BAT               TC5514  G.IC13                   |
 +---------------------------------------------------------------------+

  CPU: Rockwell R6502AP 2MHz
Video: TMS9937 NL CRT5037 NMOS Single chip Video Timer/Controller (VTC)
Sound: AY-3-8910
       MB3712 5.7W Amp
  OSC: 18.432MHz
  RAM: M2114-3 1KBx4 SRAM x 8
       TC5514P-1 1KBx4 SRAM x 4
  DSW: 3 8-switch dipswitches
  VR1: Volume pot
Other: Hitachi HD46821P 1MHz NMOS Peripheral Interface Adapter (PIA) x 2
       NEC uPA2003C Darlington Array
       3.6v Battery
       D1 - Power On Diode
       44 pin edge connector


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

#include "emu.h"
#include "cpu/m6502/m6502.h"
#include "machine/6821pia.h"
#include "machine/input_merger.h"
#include "machine/nvram.h"
#include "sound/ay8910.h"
#include "video/tms9927.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
#include "tilemap.h"

#include "ltcasino.lh"
#include "ltcasinn.lh"


//**************************************************************************
//  TYPE DEFINITIONS
//**************************************************************************

class ltcasino_state : public driver_device
{
public:
	ltcasino_state(const machine_config &mconfig, device_type type, const char *tag) :
		driver_device(mconfig, type, tag),
		m_maincpu(*this, "maincpu"),
		m_pia(*this, "pia%u", 0U),
		m_vtc(*this, "vtc"),
		m_screen(*this, "screen"),
		m_ay(*this, "ay"),
		m_video_ram(*this, "video_ram"),
		m_attribute_ram(*this, "attribute_ram"),
		m_gfxdecode(*this, "gfxdecode"),
		m_input_q(*this, "Q"),
		m_input_s(*this, "S"),
		m_lamps(*this, "button_%u", 0U),
		m_tilemap(nullptr)
	{ }

	void init_mv4in1();

	void ltcasino(machine_config &config);
	void ltcasin2(machine_config &config);
	void mv4in1(machine_config &config);

private:
	required_device<cpu_device> m_maincpu;
	required_device_array<pia6821_device, 2> m_pia;
	required_device<crt5037_device> m_vtc;
	required_device<screen_device> m_screen;
	required_device<ay8910_device> m_ay;
	required_shared_ptr<uint8_t> m_video_ram;
	required_shared_ptr<uint8_t> m_attribute_ram;
	required_device<gfxdecode_device> m_gfxdecode;
	required_ioport m_input_q;
	required_ioport m_input_s;
	output_finder<5> m_lamps;

	tilemap_t *m_tilemap;

	void main_map(address_map &map);

	void ltcasin2_palette(palette_device &palette) const;
	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	TILE_GET_INFO_MEMBER(ltcasino_tile_info);
	TILE_GET_INFO_MEMBER(ltcasin2_tile_info);

	void machine_start_ltcasino();
	void machine_start_ltcasin2();

	DECLARE_READ8_MEMBER(input_q_r);
	DECLARE_READ8_MEMBER(input_s_r);

	DECLARE_WRITE8_MEMBER(output_r_w);
	DECLARE_WRITE8_MEMBER(output_t_w);
};


//**************************************************************************
//  ADDRESS MAPS
//**************************************************************************

void ltcasino_state::main_map(address_map &map)
{
	map.unmap_value_high();
	map(0x0000, 0x07ff).ram().share("nvram");
	map(0x8000, 0xcfff).rom();
	map(0xd000, 0xd7ff).ram().share(m_video_ram);
	map(0xe000, 0xe7ff).ram().share(m_attribute_ram);
	map(0xec00, 0xec03).rw(m_pia[0], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
	map(0xec10, 0xec13).rw(m_pia[1], FUNC(pia6821_device::read), FUNC(pia6821_device::write));
	map(0xec20, 0xec21).r(m_ay, FUNC(ay8910_device::data_r));
	map(0xec20, 0xec21).w(m_ay, FUNC(ay8910_device::data_address_w));
	map(0xec30, 0xec3f).rw(m_vtc, FUNC(crt5037_device::read), FUNC(crt5037_device::write));
	map(0xf000, 0xffff).rom();
}


//**************************************************************************
//  INPUT PORT DEFINITIONS
//**************************************************************************

static INPUT_PORTS_START( ltcasino )
	PORT_START("COIN")
	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1) PORT_WRITE_LINE_DEVICE_MEMBER("pia0", pia6821_device, ca1_w)
	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_COIN2) PORT_WRITE_LINE_DEVICE_MEMBER("pia0", pia6821_device, cb1_w)

	PORT_START("Q")
	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1) PORT_NAME("Button 1")
	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2) PORT_NAME("Button 2")
	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3) PORT_NAME("Button 3")
	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4) PORT_NAME("Button 4")
	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5) PORT_NAME("Button 5")
	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_CUSTOM)
	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_CUSTOM)
	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM)

	PORT_START("S")
	PORT_DIPUNKNOWN_DIPLOC(0x01, IP_ACTIVE_LOW, "C:1")
	PORT_DIPNAME(0x02, 0x00, "Enable Black Jack")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x02, DEF_STR( Off ))
	PORT_DIPLOCATION("C:2")
	PORT_DIPNAME(0x04, 0x00, "Enable Craps")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x04, DEF_STR( Off ))
	PORT_DIPLOCATION("C:3")
	PORT_DIPNAME(0x08, 0x00, "Enable Poker")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x08, DEF_STR( Off ))
	PORT_DIPLOCATION("C:4")
	PORT_DIPUNKNOWN_DIPLOC(0x10, IP_ACTIVE_LOW, "C:5")
	PORT_DIPUNUSED_DIPLOC(0x20, IP_ACTIVE_LOW, "C:6") // would enable game 5
	PORT_DIPNAME(0x40, 0x00, "Enable Hi-Lo")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x40, DEF_STR( Off ))
	PORT_DIPLOCATION("C:7")
	PORT_DIPNAME(0x80, 0x00, DEF_STR( Demo_Sounds ))
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x80, DEF_STR( Off ))
	PORT_DIPLOCATION("C:8")

	PORT_START("A")
	PORT_DIPNAME(0x03, 0x03, "Hands per Game")
	PORT_DIPSETTING(   0x00, "6")
	PORT_DIPSETTING(   0x01, "5")
	PORT_DIPSETTING(   0x02, "4")
	PORT_DIPSETTING(   0x03, "3")
	PORT_DIPLOCATION("A:1,2")
	PORT_DIPNAME(0x0c, 0x0c, DEF_STR( Coinage ))
	PORT_DIPSETTING(   0x00, DEF_STR( 2C_2C ))
	PORT_DIPSETTING(   0x04, DEF_STR( 1C_2C ))
	PORT_DIPSETTING(   0x08, DEF_STR( 2C_1C ))
	PORT_DIPSETTING(   0x0c, DEF_STR( 1C_1C ))
	PORT_DIPLOCATION("A:3,4")
	PORT_DIPNAME(0x10, 0x10, "Coin Limit")
	PORT_DIPSETTING(   0x00, DEF_STR( Off ))
	PORT_DIPSETTING(   0x10, DEF_STR( On )) // limits to 15 coins
	PORT_DIPLOCATION("A:5")
	PORT_DIPUNKNOWN_DIPLOC(0x20, IP_ACTIVE_LOW, "A:6") // coin window on ltcasin2
	PORT_DIPUNKNOWN_DIPLOC(0x40, IP_ACTIVE_LOW, "A:7")
	PORT_DIPNAME(0x80, 0x80, "Screen Mode")
	PORT_DIPSETTING(   0x00, "50 Cycle")
	PORT_DIPSETTING(   0x80, "60 Cycle")
	PORT_DIPLOCATION("A:8")

	PORT_START("B")
	PORT_DIPNAME(0x01, 0x01, "Topten") // toggles availability of the high score table
	PORT_DIPSETTING(   0x00, DEF_STR( Off ))
	PORT_DIPSETTING(   0x01, DEF_STR( On ))
	PORT_DIPLOCATION("B:1")
	PORT_DIPUNKNOWN_DIPLOC(0x02, IP_ACTIVE_LOW, "B:2")
	PORT_DIPUNKNOWN_DIPLOC(0x04, IP_ACTIVE_LOW, "B:3")
	PORT_DIPUNKNOWN_DIPLOC(0x08, IP_ACTIVE_LOW, "B:4")
	PORT_DIPUNKNOWN_DIPLOC(0x10, IP_ACTIVE_LOW, "B:5")
	PORT_DIPUNKNOWN_DIPLOC(0x20, IP_ACTIVE_LOW, "B:6")
	PORT_DIPNAME(0x40, 0x40, "Free Hand")
	PORT_DIPSETTING(   0x00, DEF_STR( Off ))
	PORT_DIPSETTING(   0x40, DEF_STR( On ))
	PORT_DIPLOCATION("B:7")
	PORT_DIPNAME(0x80, 0x80, "Autoplay")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x80, DEF_STR( Off ))
	PORT_DIPLOCATION("B:8")
INPUT_PORTS_END

static INPUT_PORTS_START( ltcasin2 )
	PORT_INCLUDE(ltcasino)

	PORT_MODIFY("COIN")
	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)

	PORT_MODIFY("S")
	PORT_DIPNAME(0x01, 0x01, "Keyboard")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x01, DEF_STR( Off ))
	PORT_DIPLOCATION("C:1")
	PORT_DIPUNKNOWN_DIPLOC(0x10, IP_ACTIVE_LOW, "C:5")
	PORT_DIPNAME(0x20, 0x00, "Enable Horse")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x20, DEF_STR( Off ))
	PORT_DIPLOCATION("C:6")
	PORT_DIPNAME(0x40, 0x00, "Enable Slots")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x40, DEF_STR( Off ))
	PORT_DIPLOCATION("C:7")

	PORT_MODIFY("A")
	PORT_DIPUNUSED_DIPLOC(0x10, IP_ACTIVE_LOW, "A:5") // Coin Limit for other sets, v18.1 always locked to 15 coins
	PORT_DIPNAME(0x20, 0x00, "Coin Window") // needs to be disabled or it can reset on coin-up
	PORT_DIPSETTING(   0x00, DEF_STR( Off ))
	PORT_DIPSETTING(   0x20, DEF_STR( On ))
	PORT_DIPLOCATION("A:6")
	PORT_DIPNAME(0x40, 0x40, "Topten") // toggles availability of the high score table
	PORT_DIPSETTING(   0x00, DEF_STR( Off ))
	PORT_DIPSETTING(   0x40, DEF_STR( On ))
	PORT_DIPLOCATION("A:7")

	PORT_MODIFY("B")
	PORT_DIPUNKNOWN_DIPLOC(0x01, IP_ACTIVE_LOW, "B:1")
INPUT_PORTS_END

static INPUT_PORTS_START( ltcasin2a )
	PORT_INCLUDE(ltcasino)

	PORT_MODIFY("COIN")
	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)

	PORT_MODIFY("S")
	PORT_DIPNAME(0x01, 0x01, "Keyboard")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x01, DEF_STR( Off ))
	PORT_DIPLOCATION("C:1")
	PORT_DIPNAME(0x20, 0x00, "Enable Horse")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x20, DEF_STR( Off ))
	PORT_DIPLOCATION("C:6")

	PORT_MODIFY("A")
	PORT_DIPNAME(0x20, 0x00, "Coin Window") // needs to be disabled or it can reset on coin-up
	PORT_DIPSETTING(   0x00, DEF_STR( Off ))
	PORT_DIPSETTING(   0x20, DEF_STR( On ))
	PORT_DIPLOCATION("A:6")

	PORT_MODIFY("B")
	PORT_DIPNAME(0x02, 0x02, "Memory Test") // tests d000 to d7ff
	PORT_DIPSETTING(   0x00, DEF_STR( Off ))
	PORT_DIPSETTING(   0x02, DEF_STR( On ))
	PORT_DIPLOCATION("B:2")
INPUT_PORTS_END

static INPUT_PORTS_START( mv4in1 )
	PORT_INCLUDE(ltcasino)

	PORT_MODIFY("S")
	PORT_DIPNAME(0x01, 0x01, "Keyboard")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x01, DEF_STR( Off ))
	PORT_DIPLOCATION("C:1")
	PORT_DIPNAME(0x02, 0x00, "Enable 21")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x02, DEF_STR( Off ))
	PORT_DIPLOCATION("C:2")
	PORT_DIPNAME(0x04, 0x00, "Enable Dice")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x04, DEF_STR( Off ))
	PORT_DIPLOCATION("C:3")
	PORT_DIPNAME(0x40, 0x00, "Enable Red-Dog")
	PORT_DIPSETTING(   0x00, DEF_STR( On ))
	PORT_DIPSETTING(   0x40, DEF_STR( Off ))
	PORT_DIPLOCATION("C:7")
INPUT_PORTS_END


//**************************************************************************
//  VIDEO EMULATION
//**************************************************************************

void ltcasino_state::ltcasin2_palette(palette_device &palette) const
{
	for (int i = 0; i < 8; i++)
	{
		// basic 3 bit palette
		palette.set_indirect_color(i, rgb_t(pal1bit(i >> 0), pal1bit(i >> 2), pal1bit(i >> 1)));

		// setup pen colors for the drawgfx system
		for (int j = 0; j < 8; j++)
		{
			palette.set_pen_indirect((j << 4) | (i << 1) | 0, i);
			palette.set_pen_indirect((j << 4) | (i << 1) | 1, j);
		}
	}
}

/*
 x--- ---- tile bank
 -xxx ---- foreground color
 ---- x--- unknown (used by ltcasino)
 ---- -xxx background color
 */
TILE_GET_INFO_MEMBER(ltcasino_state::ltcasino_tile_info)
{
	uint16_t code = m_video_ram[tile_index];
	// +1 on attribute offset otherwise glitches occurs on left side of objects?
	uint8_t attr = m_attribute_ram[(tile_index + 1) & 0x7ff];

	code |= BIT(attr, 7) << 8;

	tileinfo.set(0, code, 0, 0);
}

TILE_GET_INFO_MEMBER(ltcasino_state::ltcasin2_tile_info)
{
	uint16_t code = m_video_ram[tile_index];
	// +1 on attribute offset otherwise glitches occurs on left side of objects?
	uint8_t attr = m_attribute_ram[(tile_index + 1) & 0x7ff];

	code |= BIT(attr, 7) << 8;

	tileinfo.set(0, code, ((attr & 0x70) >> 1) | (attr & 7), 0);
}

uint32_t ltcasino_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
	m_tilemap->mark_all_dirty();
	m_tilemap->draw(screen, bitmap, cliprect, 0, 0);

	return 0;
}

static const gfx_layout tiles8x8_layout =
{
	8,8,
	RGN_FRAC(1,1),
	1,
	{ 0 },
	{ 7, 6, 5, 4, 3, 2, 1, 0 },
	{ STEP8(0,8) },
	8*8
};

static GFXDECODE_START( gfx_ltcasino )
	GFXDECODE_ENTRY("gfx1", 0, tiles8x8_layout, 0, 1)
GFXDECODE_END

static GFXDECODE_START( gfx_ltcasin2 )
	GFXDECODE_ENTRY("gfx1", 0, tiles8x8_layout, 0, 64)
GFXDECODE_END


//**************************************************************************
//  MACHINE EMULATION
//**************************************************************************

void ltcasino_state::init_mv4in1()
{
	uint8_t *rom = memregion("maincpu")->base();
	for (int i = 0; i < 0x10000; i++)
		rom[i] = bitswap<8>(rom[i], 7, 6, 5, 4, 3, 1, 2, 0);
}

void ltcasino_state::machine_start_ltcasino()
{
	m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ltcasino_state::ltcasino_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
	m_lamps.resolve();
}

void ltcasino_state::machine_start_ltcasin2()
{
	m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ltcasino_state::ltcasin2_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
	m_lamps.resolve();
}

READ8_MEMBER(ltcasino_state::input_s_r)
{
	uint8_t data = m_input_s->read() & 0xf1;

	// bit 1, 2 and 3 from input port Q bit 7, 5 and 6
	data |= BIT(m_input_q->read(), 7) << 1;
	data |= BIT(m_input_q->read(), 5) << 2;
	data |= BIT(m_input_q->read(), 6) << 3;

	return data;
}

READ8_MEMBER(ltcasino_state::input_q_r)
{
	uint8_t data = m_input_q->read() & 0x1f;

	// bit 5, 6 and 7 from input port Q bit 2, 3 and 1
	data |= BIT(m_input_s->read(), 2) << 5;
	data |= BIT(m_input_s->read(), 3) << 6;
	data |= BIT(m_input_s->read(), 1) << 7;

	return data;
}

WRITE8_MEMBER(ltcasino_state::output_r_w)
{
	// 7------- unknown (toggles rapidly)
	// -6------ unknown (toggles rapidly)
	// --5----- coin counter
	// ---43210 button lamps 5 to 1

	m_lamps[0] = BIT(data, 0); // button 1
	m_lamps[1] = BIT(data, 1); // button 2
	m_lamps[2] = BIT(data, 2); // button 3
	m_lamps[3] = BIT(data, 3); // button 4
	m_lamps[4] = BIT(data, 4); // button 5

	machine().bookkeeping().coin_counter_w(0, BIT(data, 5));
}

WRITE8_MEMBER(ltcasino_state::output_t_w)
{
	// 76543210 unknown

	logerror("output_t_w: %02x\n", data);
}


//**************************************************************************
//  MACHINE DEFINTIONS
//**************************************************************************

void ltcasino_state::ltcasino(machine_config &config)
{
	M6502(config, m_maincpu, 18_MHz_XTAL/16); // clock unknown
	m_maincpu->set_addrmap(AS_PROGRAM, &ltcasino_state::main_map);

	input_merger_device &mainirq(INPUT_MERGER_ANY_HIGH(config, "mainirq"));
	mainirq.output_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE);

	NVRAM(config, "nvram");

	PIA6821(config, m_pia[0]);
	m_pia[0]->readpa_handler().set(FUNC(ltcasino_state::input_q_r));
	m_pia[0]->writepb_handler().set(FUNC(ltcasino_state::output_r_w));
	m_pia[0]->irqa_handler().set("mainirq", FUNC(input_merger_device::in_w<0>));
	m_pia[0]->irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<1>));

	PIA6821(config, m_pia[1]);
	m_pia[1]->readpa_handler().set(FUNC(ltcasino_state::input_s_r));
	m_pia[1]->writepb_handler().set(FUNC(ltcasino_state::output_t_w));

	MCFG_MACHINE_START_OVERRIDE(ltcasino_state, ltcasino)

	// video hardware
	CRT5037(config, m_vtc, 18_MHz_XTAL/16); // this clock gives about 60/50 hz
	m_vtc->set_char_width(8);
	m_vtc->set_screen("screen");
	m_vtc->set_visarea(48, 463, 0, 255);
	m_vtc->vsyn_callback().set(m_pia[0], FUNC(pia6821_device::cb2_w)).invert(); // ? (CA1, CA2 also enabled)

	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
	m_screen->set_raw(18_MHz_XTAL/2, 560, 48, 464, 268, 0, 256);
	m_screen->set_screen_update(FUNC(ltcasino_state::screen_update));
	m_screen->set_palette("palette");

	GFXDECODE(config, m_gfxdecode, "palette", gfx_ltcasino);

	PALETTE(config, "palette", palette_device::MONOCHROME);

	// sound hardware
	SPEAKER(config, "mono").front_center();

	AY8910(config, m_ay, 18_MHz_XTAL/16); // clock unknown
	m_ay->port_a_read_callback().set_ioport("A");
	m_ay->port_b_read_callback().set_ioport("B");
	m_ay->add_route(ALL_OUTPUTS, "mono", 0.4);
}

void ltcasino_state::ltcasin2(machine_config &config)
{
	ltcasino(config);

	MCFG_MACHINE_START_OVERRIDE(ltcasino_state, ltcasin2)

	config.device_remove("palette");
	PALETTE(config, "palette", FUNC(ltcasino_state::ltcasin2_palette), 128, 8);

	m_gfxdecode->set_info(gfx_ltcasin2);
}

void ltcasino_state::mv4in1(machine_config &config)
{
	ltcasin2(config);

	// different XTAL
	m_maincpu->set_clock(18.432_MHz_XTAL/16);
	m_vtc->set_clock(18.432_MHz_XTAL/16);
	m_screen->set_raw(18.432_MHz_XTAL/2, 560, 48, 464, 268, 0, 256);
	m_ay->set_clock(18.432_MHz_XTAL/16);
}


//**************************************************************************
//  ROM DEFINITIONS
//**************************************************************************

// Selection text: "SELECT GAME DESIRED!"
// Games: Black Jack, Draw Poker, Craps, Hi-Lo
ROM_START( ltcasino )
	ROM_REGION( 0x10000, "maincpu", 0 )
	ROM_LOAD( "a", 0x8000, 0x1000, CRC(14909fee) SHA1(bf53fa65da7f013ea1ac6b4942cdfdb34ef16252) )
	ROM_LOAD( "b", 0x9800, 0x0800, CRC(1473f854) SHA1(eadaec1f6d653e61458bc262945c20140f4530eb) )
	ROM_LOAD( "c", 0xa800, 0x0800, CRC(7a07004b) SHA1(62bd0f3d12b7eada6fc271abea60569aca7262b0) )
	ROM_LOAD( "d", 0xb800, 0x0800, CRC(5148cafc) SHA1(124039f48784bf032f612714db73fb67a216a1e7) )
	ROM_LOAD( "e", 0xc800, 0x0800, CRC(5f9e103a) SHA1(b0e9ace4c3962c06e5250fac16a245dca711350f) )
	ROM_LOAD( "f", 0xf000, 0x1000, CRC(7345aada) SHA1(6640f5eb1130c8f1cb197eb12b8e6403c7f8d34d) )

	ROM_REGION( 0x0800, "gfx1", 0 )
	ROM_LOAD( "v", 0x0000, 0x0800, CRC(f1f75675) SHA1(8f3777e6b2a3f824f94b28669cac501ec02bbf36) )
ROM_END

// Selection text: "PLAY YOUR FAVORITES"
// Games: 21, Draw Poker, Dice, Red-Dog
ROM_START( mv4in1 )
	ROM_REGION( 0x10000, "maincpu", 0 )
	ROM_LOAD( "g.ic13", 0x8000, 0x1000, CRC(ac33bd85) SHA1(fd555f70d0a7040473d35ec38e19185671a471ea) )
	ROM_LOAD( "f.ic14", 0x9000, 0x1000, CRC(f95c87d1) SHA1(df5ed53722ec55a97eabe10b0ed3f1ba32cbe55f) )
	ROM_LOAD( "e.ic15", 0xa000, 0x1000, CRC(e525fcf2) SHA1(f1ec0c514e25ec4a1caf737ff8a962c81fb2706a) )
	ROM_LOAD( "d.ic16", 0xb000, 0x1000, CRC(ab34673f) SHA1(520a173a342a27b5f9d995e6f53c3a2f0f359f9e) )
	ROM_LOAD( "c.ic17", 0xc000, 0x1000, CRC(e384edf4) SHA1(99042528ce2b35191248d90162ca06a1a585667c) )
	ROM_LOAD( "b.ic18", 0xf000, 0x1000, CRC(3450b862) SHA1(816d13fd8d03c299c1dbecf971ee5fae2f1d64bc) )

	ROM_REGION( 0x1000, "gfx1", 0 )
	ROM_LOAD( "a.ic19", 0x0000, 0x1000, CRC(a25c125e) SHA1(e0ba83ccddbd82a2bf52585ae0accb9192cbb00e) )
ROM_END

// Selection text: "PLEASE MAKE SELECTION!"
// Games: Black Jack, Draw Poker, Craps, Slots, Horse
// Board was marked version 18.1 (C)1984
ROM_START( ltcasin2 )
	ROM_REGION( 0x10000, "maincpu", 0 )
	ROM_LOAD( "v18_10_ra.bin", 0x8000, 0x1000, CRC(f0c5cc96) SHA1(ec50918ba2a2487df70694f9e1a52d4b8d1bc7e2) )
	ROM_LOAD( "v18_10_rb.bin", 0x9000, 0x1000, CRC(2ece16e4) SHA1(ef6adc45be2ecc510cd8b2e9682635066013a5e4) )
	ROM_LOAD( "v18_10_rc.bin", 0xa000, 0x1000, CRC(16bae5c9) SHA1(e5cb61d9dcae3c46c7139f3494d1bf981ec8821f) )
	ROM_LOAD( "v18_10_rd.bin", 0xb000, 0x1000, CRC(d12f2d6b) SHA1(e3544bf6b778c21b704a01f1ed06d6517ca01604) )
	ROM_LOAD( "v18_10_re.bin", 0xc000, 0x1000, CRC(2acdad10) SHA1(2732b791fea0a9d1c6e4c174739381466f2b0270) )
	ROM_LOAD( "v18_10_rf.bin", 0xf000, 0x1000, CRC(b711c779) SHA1(2bab84cab174a35fccfd23003a8a41aa241d4595) )

	ROM_REGION( 0x1000, "gfx1", 0 )
	ROM_LOAD( "v18_10_rv.bin", 0x0000, 0x1000, CRC(7209898d) SHA1(94bd7e8c3a544429af721e9564c11cc56d7805be) )
ROM_END

// Selection text: "PLEASE PICK YOUR POISON!"
// Games: Black Jack, Draw Poker, Craps, Hi-Lo, Horse
ROM_START( ltcasin2a )
	ROM_REGION( 0x10000, "maincpu", 0 )
	ROM_LOAD( "v17_00_ra.bin", 0x8000, 0x1000, CRC(1a595442) SHA1(b8fe3e5ed2024a57187c0ce547c1bbef2429ed63) )
	ROM_LOAD( "v17_00_rb.bin", 0x9000, 0x1000, CRC(4f5502c1) SHA1(cd1b7c08d26fed71c45e44ebd208bd18dc262e8f) )
	ROM_LOAD( "v17_00_rc.bin", 0xa000, 0x1000, CRC(990283b8) SHA1(8a3fe5be8381894b8e8dd14c7d42190e60a25600) )
	ROM_LOAD( "v17_00_rd.bin", 0xb000, 0x1000, CRC(884f39dc) SHA1(fe149faf118279205e82760c5052cefb88a2f5be) )
	ROM_LOAD( "v17_00_re.bin", 0xc000, 0x1000, CRC(fae38204) SHA1(e5908734cee0a89d873ab3761ded285f8ae138d3) )
	ROM_LOAD( "v17_00_rf.bin", 0xf000, 0x1000, CRC(7e8ad9d3) SHA1(8cbe342af7d9f32b2214664db318edd3d2e75630) )

	ROM_REGION( 0x1000, "gfx1", 0 )
	ROM_LOAD( "v17_00_rv.bin", 0x0000, 0x1000, CRC(84cbee7b) SHA1(742831d5ae0db6c7c644a18a837831ee0474d472) )
ROM_END


//**************************************************************************
//  SYSTEM DRIVERS
//**************************************************************************

//     YEAR  NAME       PARENT    MACHINE   INPUT      CLASS           INIT         ROTATION  COMPANY                            FULLNAME                  FLAGS
GAMEL( 1982, ltcasino,  0,        ltcasino, ltcasino,  ltcasino_state, empty_init,  ROT0,     "Digital Controls Inc.",           "Little Casino",          MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasino )
GAMEL( 1983, mv4in1,    0,        mv4in1,   mv4in1,    ltcasino_state, init_mv4in1, ROT0,     "Entertainment Enterprises, Ltd.", "Mini Vegas 4in1",        MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasinn )
GAMEL( 1984, ltcasin2,  0,        ltcasin2, ltcasin2,  ltcasino_state, empty_init,  ROT0,     "Digital Controls Inc.",           "Little Casino II v18.1", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasinn )
GAMEL( 1984, ltcasin2a, ltcasin2, ltcasin2, ltcasin2a, ltcasino_state, empty_init,  ROT0,     "Digital Controls Inc.",           "Little Casino II v17.0", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasinn )