ltcasino: Rewrite the rest of the driver

All games are now fully playable with correct graphics.

- ltcasino: This is the monochrome version. Added a layout with color
overlays based on a flyer
- ltcasinn: Fixed reset on coin-up
- Corrected RAM size
- Hooked up CRT5037
- Adjusted clocks
- Resolved a few more dipswitch functions
This commit is contained in:
Dirk Best 2019-03-29 22:13:20 +01:00
parent 17d5b41987
commit e4d3e12e25
3 changed files with 310 additions and 166 deletions

View File

@ -1,18 +1,17 @@
// license:BSD-3-Clause
// copyright-holders:Pierpaolo Prazzoli, David Haywood
/*
// license: BSD-3-Clause
// copyright-holders: Pierpaolo Prazzoli, David Haywood, Dirk Best
/***************************************************************************
Little Casino
Mini Vegas 4in1
Little Casino
Mini Vegas 4in1
Non-Payout 'Gambling' style games.
Non-Payout 'Gambling' style games.
TODO:
TODO:
- color version of the first version is undumped?
- figure out the rest of the dipswitches
- keyboard
* colours (there are 2 flyers which show different colours?)
* hook up TMS9937
* figure out the rest of the dipswitches
* keyboard
Mini Vegas
CC-089 (c) Entertainment Enterprises Ltd. 1983
@ -53,155 +52,95 @@ Other: Hitachi HD46821P 1MHz NMOS Peripheral Interface Adapter (PIA) x 2
D1 - Power On Diode
44 pin edge connector
*/
***************************************************************************/
#include "emu.h"
#include "cpu/m6502/m6502.h"
#include "machine/6821pia.h"
#include "sound/ay8910.h"
#include "video/tms9927.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.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_pia{ { *this, "pia0" }, { *this, "pia1" } },
m_tile_num_ram(*this, "tile_nuram"),
m_tile_atr_ram(*this, "tile_atr_ram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode")
m_pia{ { *this, "pia0" }, { *this, "pia1" } },
m_vtc(*this, "vtc"),
m_video_ram(*this, "video_ram"),
m_attribute_ram(*this, "attribute_ram"),
m_gfxdecode(*this, "gfxdecode"),
m_lamps(*this, "button_%u", 0U),
m_tilemap(nullptr)
{ }
void init_mv4in1();
void ltcasino(machine_config &config);
protected:
virtual void video_start() override;
void ltcasino(machine_config &config);
void ltcasinn(machine_config &config);
private:
required_device<pia6821_device> m_pia[2];
required_shared_ptr<uint8_t> m_tile_num_ram;
required_shared_ptr<uint8_t> m_tile_atr_ram;
required_device<cpu_device> m_maincpu;
required_device<pia6821_device> m_pia[2];
required_device<crt5037_device> m_vtc;
required_shared_ptr<uint8_t> m_video_ram;
required_shared_ptr<uint8_t> m_attribute_ram;
required_device<gfxdecode_device> m_gfxdecode;
output_finder<5> m_lamps;
tilemap_t *m_tilemap;
DECLARE_WRITE8_MEMBER(tile_num_w);
DECLARE_WRITE8_MEMBER(tile_atr_w);
void main_map(address_map &map);
void ltcasinn_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(ltcasinn_tile_info);
void machine_start_ltcasino();
void machine_start_ltcasinn();
DECLARE_WRITE8_MEMBER(output_r_w);
DECLARE_WRITE8_MEMBER(output_t_w);
TILE_GET_INFO_MEMBER(get_tile_info);
void ltcasino_palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void main_map(address_map &map);
};
/* Video */
void ltcasino_state::ltcasino_palette(palette_device &palette) const
{
for (int i = 0; i < 64; i++)
{
palette.set_pen_color(2*i+0, pal1bit(i >> 0), pal1bit(i >> 2), pal1bit(i >> 1));
palette.set_pen_color(2*i+1, pal1bit(i >> 3), pal1bit(i >> 5), pal1bit(i >> 4));
}
}
/*
x--- ---- tile bank
-xxx ---- foreground color
---- x--- unknown (used by ltcasino)
---- -xxx background color
*/
TILE_GET_INFO_MEMBER(ltcasino_state::get_tile_info)
{
int tileno = m_tile_num_ram[tile_index];
// TODO: wtf +1 on attribute offset otherwise glitches occurs on left side of objects?
int colour = m_tile_atr_ram[(tile_index+1) & 0x7ff];
tileno += (colour & 0x80) << 1;
SET_TILE_INFO_MEMBER(0,tileno,((colour & 0x70) >> 1) | (colour & 7),0);
}
void ltcasino_state::video_start()
{
m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(ltcasino_state::get_tile_info),this),TILEMAP_SCAN_ROWS,8, 8,64,32);
}
uint32_t ltcasino_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// not sure what's connected here, game wants IRQ2 to be active
m_pia[0]->cb2_w(0);
m_pia[0]->cb2_w(1);
m_tilemap->draw(screen, bitmap, cliprect, 0,0);
return 0;
}
WRITE8_MEMBER(ltcasino_state::tile_num_w)
{
m_tile_num_ram[offset] = data;
m_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(ltcasino_state::tile_atr_w)
{
m_tile_atr_ram[offset] = data;
m_tilemap->mark_tile_dirty((offset + 1) & 0x7ff);
}
WRITE8_MEMBER(ltcasino_state::output_r_w)
{
// 7------- unknown (toggles rapidly)
// -6------ unknown (toggles rapidly)
// --5----- coin counter
// ---43210 button lamps 5 to 1
output().set_value("button_0", BIT(data, 0)); // button 1
output().set_value("button_1", BIT(data, 1)); // button 2
output().set_value("button_2", BIT(data, 2)); // button 3
output().set_value("button_3", BIT(data, 3)); // button 4
output().set_value("button_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);
}
//**************************************************************************
// ADDRESS MAPS
//**************************************************************************
void ltcasino_state::main_map(address_map &map)
{
map(0x0000, 0x7fff).ram();
map.unmap_value_high();
map(0x0000, 0x07ff).ram();
map(0x8000, 0xcfff).rom();
map(0xd000, 0xd7ff).ram().w(FUNC(ltcasino_state::tile_num_w)).share(m_tile_num_ram);
map(0xd800, 0xdfff).ram();
map(0xe000, 0xe7ff).ram().w(FUNC(ltcasino_state::tile_atr_w)).share(m_tile_atr_ram);
map(0xe800, 0xebff).ram();
map(0xd000, 0xd7ff).ram().share(m_video_ram);
map(0xe000, 0xe7ff).ram().share(m_attribute_ram);
map(0xec00, 0xec03).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0xec10, 0xec13).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0xec20, 0xec21).r("aysnd", FUNC(ay8910_device::data_r));
map(0xec20, 0xec21).w("aysnd", FUNC(ay8910_device::data_address_w));
map(0xec30, 0xec3f).ram(); // TMS9937
map(0xec3e, 0xec3e).nopr(); //not used
map(0xec30, 0xec3f).rw("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)
@ -249,10 +188,19 @@ static INPUT_PORTS_START( ltcasino )
PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ))
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ))
PORT_DIPLOCATION("A:3,4")
PORT_DIPUNKNOWN_DIPLOC(0x10, IP_ACTIVE_LOW, "A:5")
PORT_DIPUNKNOWN_DIPLOC(0x20, IP_ACTIVE_LOW, "A:6")
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_DIPNAME(0x20, 0x00, DEF_STR( Unknown ))
PORT_DIPSETTING( 0x00, DEF_STR( On )) // needs to be 0 or ltcasinn can reset on coin-up
PORT_DIPSETTING( 0x20, DEF_STR( Off ))
PORT_DIPLOCATION("A:6")
PORT_DIPUNKNOWN_DIPLOC(0x40, IP_ACTIVE_LOW, "A:7")
PORT_DIPUNKNOWN_DIPLOC(0x80, IP_ACTIVE_LOW, "A:8")
PORT_DIPNAME(0x80, 0x80, "Screen Mode")
PORT_DIPSETTING( 0x80, "60 Hz")
PORT_DIPSETTING( 0x00, "50 Hz")
PORT_DIPLOCATION("A:8")
PORT_START("B")
PORT_DIPUNKNOWN_DIPLOC(0x01, IP_ACTIVE_LOW, "B:1")
@ -274,10 +222,17 @@ static INPUT_PORTS_START( ltcasinn )
PORT_MODIFY("COIN")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
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")
PORT_MODIFY("S")
PORT_DIPNAME(0x01, 0x01, "Keyboard")
PORT_DIPSETTING( 0x01, DEF_STR( Off ))
PORT_DIPSETTING( 0x00, DEF_STR( On ))
PORT_DIPLOCATION("DSW3:1")
INPUT_PORTS_END
static INPUT_PORTS_START( mv4in1 )
@ -298,9 +253,66 @@ static INPUT_PORTS_START( mv4in1 )
PORT_DIPNAME(0x01, 0x01, "Keyboard")
PORT_DIPSETTING( 0x01, DEF_STR( Off ))
PORT_DIPSETTING( 0x00, DEF_STR( On ))
PORT_DIPLOCATION("DSW3:1")
INPUT_PORTS_END
//**************************************************************************
// VIDEO EMULATION
//**************************************************************************
void ltcasino_state::ltcasinn_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;
SET_TILE_INFO_MEMBER(0, code, 0, 0);
}
TILE_GET_INFO_MEMBER(ltcasino_state::ltcasinn_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;
SET_TILE_INFO_MEMBER(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,
@ -308,22 +320,74 @@ static const gfx_layout tiles8x8_layout =
1,
{ 0 },
{ 7, 6, 5, 4, 3, 2, 1, 0 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
{ STEP8(0,8) },
8*8
};
static GFXDECODE_START( gfx_ltcasino )
GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 64 )
GFXDECODE_ENTRY("gfx1", 0, tiles8x8_layout, 0, 1)
GFXDECODE_END
static GFXDECODE_START( gfx_ltcasinn )
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(FUNC(ltcasino_state::ltcasino_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_lamps.resolve();
}
void ltcasino_state::machine_start_ltcasinn()
{
m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(ltcasino_state::ltcasinn_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_lamps.resolve();
}
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)
{
/* basic machine hardware */
M6502(config, m_maincpu, XTAL(18'432'000)/9); /* 2.048MHz ?? (or 18.432MHz/8 = 2.304MHz) - not verified */
M6502(config, m_maincpu, 18.432_MHz_XTAL/16); // clock unknown
m_maincpu->set_addrmap(AS_PROGRAM, &ltcasino_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(ltcasino_state::irq0_line_hold));
PIA6821(config, m_pia[0], 0);
m_pia[0]->readpa_handler().set_ioport("Q");
@ -333,45 +397,64 @@ void ltcasino_state::ltcasino(machine_config &config)
m_pia[1]->readpa_handler().set_ioport("S");
m_pia[1]->writepb_handler().set(FUNC(ltcasino_state::output_t_w));
/* video hardware */
MCFG_MACHINE_START_OVERRIDE(ltcasino_state, ltcasino)
// video hardware
CRT5037(config, m_vtc, 18.432_MHz_XTAL/16); // this clock gives about 61/51 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_inputline("maincpu", 0); // ?
m_vtc->vsyn_callback().append(m_pia[0], FUNC(pia6821_device::cb2_w)); // ?
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(64*8, 32*8);
screen.set_visarea(6*8, 58*8-1, 0, 32*8-1);
screen.set_raw(18.432_MHz_XTAL/2, 560, 48, 464, 268, 0, 256);
screen.set_screen_update(FUNC(ltcasino_state::screen_update));
screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_ltcasino);
PALETTE(config, "palette", FUNC(ltcasino_state::ltcasino_palette), 2*64);
config.set_default_layout(layout_ltcasino);
PALETTE(config, "palette", palette_device::MONOCHROME);
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
ay8910_device &aysnd(AY8910(config, "aysnd", XTAL(18'432'000)/18)); /* 1.024MHz ?? (or 18.432MHz/16 = 1.152MHz) - not verified */
ay8910_device &aysnd(AY8910(config, "aysnd", 18.432_MHz_XTAL/16)); // clock unknown
aysnd.port_a_read_callback().set_ioport("A");
aysnd.port_b_read_callback().set_ioport("B");
//ltcasino -> pc: F3F3 (A in service) and F3FD (B in service)
aysnd.add_route(ALL_OUTPUTS, "mono", 0.4);
}
void ltcasino_state::ltcasinn(machine_config &config)
{
ltcasino(config);
MCFG_MACHINE_START_OVERRIDE(ltcasino_state, ltcasinn)
config.device_remove("palette");
PALETTE(config, "palette", FUNC(ltcasino_state::ltcasinn_palette), 128, 8);
m_gfxdecode->set_info(gfx_ltcasinn);
}
//**************************************************************************
// ROM DEFINITIONS
//**************************************************************************
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_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_LOAD( "v", 0x0000, 0x0800, CRC(f1f75675) SHA1(8f3777e6b2a3f824f94b28669cac501ec02bbf36) )
ROM_END
ROM_START( ltcasinn )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "lc2_ra.bin", 0x8000, 0x1000, CRC(1a595442) SHA1(b8fe3e5ed2024a57187c0ce547c1bbef2429ed63) )
@ -387,26 +470,23 @@ ROM_END
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_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_LOAD( "a.ic19", 0x0000, 0x1000, CRC(a25c125e) SHA1(e0ba83ccddbd82a2bf52585ae0accb9192cbb00e) )
ROM_END
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);
}
//**************************************************************************
// SYSTEM DRIVERS
//**************************************************************************
GAME( 1982, ltcasino, 0, ltcasino, ltcasino, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (older)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1983, mv4in1, ltcasino, ltcasino, mv4in1, ltcasino_state, init_mv4in1, ROT0, "Entertainment Enterprises, Ltd.", "Mini Vegas 4in1", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1984, ltcasinn, 0, ltcasino, ltcasinn, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (newer)", MACHINE_NOT_WORKING )
// 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 (older)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasino )
GAMEL( 1983, mv4in1, ltcasino, ltcasinn, mv4in1, ltcasino_state, init_mv4in1, ROT0, "Entertainment Enterprises, Ltd.", "Mini Vegas 4in1", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasinn )
GAMEL( 1984, ltcasinn, 0, ltcasinn, ltcasinn, ltcasino_state, empty_init, ROT0, "Digital Controls Inc.", "Little Casino (newer)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK, layout_ltcasinn )

View File

@ -0,0 +1,43 @@
<?xml version="1.0"?>
<!--
license: CC0
copyright-holders: Dirk Best
Simple layout for Little Casino (color) and clones
-->
<mamelayout version="2">
<element name="background">
</element>
<element name="button" defstate="0">
<rect state="0">
<color red="0.2" green="0.2" blue="0.2" />
</rect>
<rect state="1">
<color red="0.8" green="0.8" blue="0.8" />
</rect>
</element>
<view name="Buttons">
<backdrop element="background">
<bounds x="0" y="0" width="640" height="580" />
</backdrop>
<screen index="0">
<bounds left="0" top="0" right="640" bottom="480" />
</screen>
<cpanel name="button_0" element="button" inputtag="Q" inputmask="0x01">
<bounds x="80" y="505" width="70" height="35" />
</cpanel>
<cpanel name="button_1" element="button" inputtag="Q" inputmask="0x02">
<bounds x="180" y="505" width="70" height="35" />
</cpanel>
<cpanel name="button_2" element="button" inputtag="Q" inputmask="0x04">
<bounds x="280" y="505" width="70" height="35" />
</cpanel>
<cpanel name="button_3" element="button" inputtag="Q" inputmask="0x08">
<bounds x="380" y="505" width="70" height="35" />
</cpanel>
<cpanel name="button_4" element="button" inputtag="Q" inputmask="0x10">
<bounds x="480" y="505" width="70" height="35" />
</cpanel>
</view>
</mamelayout>

View File

@ -3,12 +3,30 @@
<!--
license: CC0
copyright-holders: Dirk Best
Simple layout for Little Casino and clones
Simple layout for Little Casino (monochrome)
-->
<mamelayout version="2">
<element name="background">
</element>
<element name="overlay">
<rect>
<bounds left="0" top="0" right="640" bottom="70" />
<color red="0.18" green="0.85" blue="0.33" />
</rect>
<rect>
<bounds left="0" top="75" right="640" bottom="240" />
<color red="0.10" green="0.44" blue="0.72" />
</rect>
<rect>
<bounds left="0" top="240" right="640" bottom="410" />
<color red="0.77" green="0.14" blue="0.14" />
</rect>
<rect>
<bounds left="0" top="415" right="640" bottom="480" />
<color red="0.18" green="0.85" blue="0.33" />
</rect>
</element>
<element name="button" defstate="0">
<rect state="0">
<color red="0.2" green="0.2" blue="0.2" />
@ -19,25 +37,28 @@ Simple layout for Little Casino and clones
</element>
<view name="Buttons">
<backdrop element="background">
<bounds x="0" y="0" width="416" height="300" />
<bounds x="0" y="0" width="640" height="580" />
</backdrop>
<screen index="0">
<bounds left="0" top="0" right="416" bottom="256" />
<bounds left="0" top="0" right="640" bottom="480" />
</screen>
<overlay name="overlay" element="overlay">
<bounds x="0" y="0" width="640" height="480" />
</overlay>
<cpanel name="button_0" element="button" inputtag="Q" inputmask="0x01">
<bounds x="25" y="280" width="50" height="25" />
<bounds x="80" y="505" width="70" height="35" />
</cpanel>
<cpanel name="button_1" element="button" inputtag="Q" inputmask="0x02">
<bounds x="100" y="280" width="50" height="25" />
<bounds x="180" y="505" width="70" height="35" />
</cpanel>
<cpanel name="button_2" element="button" inputtag="Q" inputmask="0x04">
<bounds x="175" y="280" width="50" height="25" />
<bounds x="280" y="505" width="70" height="35" />
</cpanel>
<cpanel name="button_3" element="button" inputtag="Q" inputmask="0x08">
<bounds x="250" y="280" width="50" height="25" />
<bounds x="380" y="505" width="70" height="35" />
</cpanel>
<cpanel name="button_4" element="button" inputtag="Q" inputmask="0x10">
<bounds x="325" y="280" width="50" height="25" />
<bounds x="480" y="505" width="70" height="35" />
</cpanel>
</view>
</mamelayout>