summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/magic10.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/magic10.c')
-rw-r--r--src/mame/drivers/magic10.c478
1 files changed, 478 insertions, 0 deletions
diff --git a/src/mame/drivers/magic10.c b/src/mame/drivers/magic10.c
new file mode 100644
index 00000000000..36983ae28e2
--- /dev/null
+++ b/src/mame/drivers/magic10.c
@@ -0,0 +1,478 @@
+/*
+ Magic's 10 (c) 1995 AWP Games
+ Magic's 10 2 (c) 1997 ABM Games
+
+ driver by Pierpaolo Prazzoli
+
+ TODO:
+ - ticket / coin dispenser
+ - some unknown writes
+ - finish magic10_2 (association coin - credits handling its inputs
+ and some reads that drive the note displayed?)
+
+Magic's 10 instruction for the 1st boot:
+- Switch "Disable Free Play" to ON
+- Enter a coin
+- Press Collect to get the 1st game over
+
+*/
+
+#include "driver.h"
+#include "sound/okim6295.h"
+
+static tilemap *layer0_tilemap, *layer1_tilemap, *layer2_tilemap;
+static UINT16 *layer0_videoram, *layer1_videoram, *layer2_videoram;
+static int layer2_offset[2];
+
+static WRITE16_HANDLER( layer0_videoram_w )
+{
+ COMBINE_DATA(&layer0_videoram[offset]);
+ tilemap_mark_tile_dirty(layer0_tilemap,offset>>1);
+}
+
+static WRITE16_HANDLER( layer1_videoram_w )
+{
+ COMBINE_DATA(&layer1_videoram[offset]);
+ tilemap_mark_tile_dirty(layer1_tilemap,offset>>1);
+}
+
+static WRITE16_HANDLER( layer2_videoram_w )
+{
+ COMBINE_DATA(&layer2_videoram[offset]);
+ tilemap_mark_tile_dirty(layer2_tilemap,offset>>1);
+}
+
+static WRITE16_HANDLER( paletteram_w )
+{
+ data = COMBINE_DATA(&paletteram16[offset]);
+ palette_set_color_rgb( Machine, offset, pal4bit(data >> 4), pal4bit(data >> 0), pal4bit(data >> 8));
+}
+
+static WRITE16_HANDLER( magic10_misc_w )
+{
+/*
+ lamps:
+ 1 -> data & 0x01
+ 2 -> data & 0x02
+ 3 -> data & 0x04
+ 4 -> data & 0x08
+ 5 -> data & 0x10
+ 6 -> data & 0x20
+ 7 -> data & 0x40
+*/
+
+/*
+ data & 0x0180 toggles
+ data & 0x2000 ? written with 0x400 when coin1 is inserted
+*/
+
+ coin_counter_w(0, data & 0x400);
+}
+
+static READ16_HANDLER( magic102_r )
+{
+ static UINT16 ret = 0;
+ ret ^= 0x20;
+ return ret;
+}
+
+static ADDRESS_MAP_START( magic10_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x100000, 0x100fff) AM_RAM AM_WRITE(layer1_videoram_w) AM_BASE(&layer1_videoram)
+ AM_RANGE(0x101000, 0x101fff) AM_RAM AM_WRITE(layer0_videoram_w) AM_BASE(&layer0_videoram)
+ AM_RANGE(0x102000, 0x103fff) AM_RAM AM_WRITE(layer2_videoram_w) AM_BASE(&layer2_videoram)
+ AM_RANGE(0x200000, 0x2007ff) AM_RAM AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x300000, 0x3001ff) AM_RAM AM_WRITE(paletteram_w) AM_BASE(&paletteram16)
+ AM_RANGE(0x400000, 0x400001) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x400002, 0x400003) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x400008, 0x400009) AM_WRITE(magic10_misc_w)
+ AM_RANGE(0x40000a, 0x40000b) AM_READWRITE(OKIM6295_status_0_lsb_r, OKIM6295_data_0_lsb_w)
+ AM_RANGE(0x40000e, 0x40000f) AM_WRITENOP
+ AM_RANGE(0x400080, 0x400087) AM_WRITENOP
+ AM_RANGE(0x600000, 0x603fff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( magic10a_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x100000, 0x100fff) AM_RAM AM_WRITE(layer1_videoram_w) AM_BASE(&layer1_videoram)
+ AM_RANGE(0x101000, 0x101fff) AM_RAM AM_WRITE(layer0_videoram_w) AM_BASE(&layer0_videoram)
+ AM_RANGE(0x102000, 0x103fff) AM_RAM AM_WRITE(layer2_videoram_w) AM_BASE(&layer2_videoram)
+ AM_RANGE(0x200000, 0x2007ff) AM_RAM AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x300000, 0x3001ff) AM_RAM AM_WRITE(paletteram_w) AM_BASE(&paletteram16)
+ AM_RANGE(0x500000, 0x500001) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x500002, 0x500003) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x500008, 0x500009) AM_WRITE(magic10_misc_w)
+ AM_RANGE(0x50000a, 0x50000b) AM_READWRITE(OKIM6295_status_0_lsb_r, OKIM6295_data_0_lsb_w)
+ AM_RANGE(0x50000e, 0x50000f) AM_WRITENOP
+ AM_RANGE(0x500080, 0x500087) AM_WRITENOP
+ AM_RANGE(0x600000, 0x603fff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( magic102_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x100000, 0x100fff) AM_RAM AM_WRITE(layer1_videoram_w) AM_BASE(&layer1_videoram)
+ AM_RANGE(0x101000, 0x101fff) AM_RAM AM_WRITE(layer0_videoram_w) AM_BASE(&layer0_videoram)
+ AM_RANGE(0x102000, 0x103fff) AM_RAM AM_WRITE(layer2_videoram_w) AM_BASE(&layer2_videoram)
+ AM_RANGE(0x200000, 0x2007ff) AM_RAM AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size)
+ AM_RANGE(0x400000, 0x4001ff) AM_RAM AM_WRITE(paletteram_w) AM_BASE(&paletteram16)
+ AM_RANGE(0x500000, 0x500001) AM_READ(magic102_r)
+ AM_RANGE(0x500004, 0x500005) AM_READNOP // gives credits
+ AM_RANGE(0x500006, 0x500007) AM_READNOP // gives credits
+ AM_RANGE(0x50001a, 0x50001b) AM_READ(input_port_0_word_r)
+ AM_RANGE(0x50001c, 0x50001d) AM_READ(input_port_1_word_r)
+ AM_RANGE(0x500002, 0x50001f) AM_READNOP
+ AM_RANGE(0x500002, 0x50001f) AM_WRITENOP
+ AM_RANGE(0x600000, 0x603fff) AM_RAM
+ AM_RANGE(0x700000, 0x700001) AM_READWRITE(OKIM6295_status_0_lsb_r, OKIM6295_data_0_lsb_w)
+ AM_RANGE(0x700080, 0x700087) AM_WRITENOP
+ADDRESS_MAP_END
+
+
+
+static INPUT_PORTS_START( magic10 )
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Play") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("Note A")
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("Note B")
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("Note C")
+ PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Out Hole") PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN5 ) PORT_NAME("Note D")
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Collect") PORT_CODE(KEYCODE_C)
+
+ PORT_START_TAG("DSW")
+ PORT_DIPNAME( 0x0001, 0x0001, "Display Logo" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Yes ) )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL ) // empty dispenser
+ PORT_DIPNAME( 0x00ee, 0x00ee, "Disable Free Play" )
+ PORT_DIPSETTING( 0x00ee, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0300, 0x0100, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0300, DEF_STR( Hardest ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Easy ) )
+ PORT_DIPNAME( 0x0c00, 0x0000, "Notes Settings" )
+ PORT_DIPSETTING( 0x0000, "Note A: 10 - Note B: 20 - Note C: 50 - Note D: 100" )
+ PORT_DIPSETTING( 0x0800, "Note A: 20 - Note B: 40 - Note C: 100 - Note D: 200" )
+ PORT_DIPSETTING( 0x0400, "Note A: 50 - Note B: 100 - Note C: 500 - Note D: 1000" )
+ PORT_DIPSETTING( 0x0c00, "Note A: 100 - Note B: 200 - Note C: 1000 - Note D: 2000" )
+ PORT_DIPNAME( 0x3000, 0x3000, "Lots At" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0xc000)
+ PORT_DIPSETTING( 0x0000, "50 200 500 1000 2000" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0xc000)
+ PORT_DIPSETTING( 0x1000, "100 300 1000 3000 5000" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0xc000)
+ PORT_DIPSETTING( 0x2000, "200 500 2000 3000 5000" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0xc000)
+ PORT_DIPSETTING( 0x3000, "500 1000 2000 4000 8000" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0xc000)
+ PORT_DIPNAME( 0x3000, 0x3000, "1 Ticket Won" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x8000)
+// PORT_DIPSETTING( 0x0000, "Every 100 Score" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x8000)
+// PORT_DIPSETTING( 0x1000, "Every 100 Score" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x8000)
+// PORT_DIPSETTING( 0x2000, "Every 100 Score" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x8000)
+ PORT_DIPSETTING( 0x3000, "Every 100 Score" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x8000)
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unused ) ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x4000)
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x4000)
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x4000)
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unused ) ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x4000)
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x4000)
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x4000)
+ PORT_DIPNAME( 0x3000, 0x3000, "1 Play Won" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x0000)
+// PORT_DIPSETTING( 0x0000, "Every 10 Score" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x0000)
+// PORT_DIPSETTING( 0x1000, "Every 10 Score" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x0000)
+// PORT_DIPSETTING( 0x2000, "Every 10 Score" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x0000)
+ PORT_DIPSETTING( 0x3000, "Every 10 Score" ) PORT_CONDITION("DSW",0xc000,PORTCOND_EQUALS,0x0000)
+ PORT_DIPNAME( 0xc000, 0xc000, "Dispenser Type" )
+ PORT_DIPSETTING( 0x0000, "MKII Hopper - Supergame" )
+ PORT_DIPSETTING( 0x4000, "10 Tokens" )
+ PORT_DIPSETTING( 0x8000, "Tickets Dispenser" )
+ PORT_DIPSETTING( 0xc000, "Lots Dispenser" )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( magic102 )
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("Note A")
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("Note B")
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("Note C")
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_COIN5 ) PORT_NAME("Note D")
+ PORT_SERVICE_NO_TOGGLE( 0x0020, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bet") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Collect") PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+
+/*
+ credits inputs
+
+ PORT_START
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ 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( 0x10, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ 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( 0x10, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED )
+*/
+INPUT_PORTS_END
+
+static TILE_GET_INFO( get_layer0_tile_info )
+{
+ SET_TILE_INFO(1,layer0_videoram[tile_index*2],layer0_videoram[tile_index*2+1] & 0xf,TILE_FLIPYX((layer0_videoram[tile_index*2+1] & 0xc0) >> 6));
+}
+
+static TILE_GET_INFO( get_layer1_tile_info )
+{
+ SET_TILE_INFO(1,layer1_videoram[tile_index*2],layer1_videoram[tile_index*2+1] & 0xf,TILE_FLIPYX((layer1_videoram[tile_index*2+1] & 0xc0) >> 6));
+}
+
+static TILE_GET_INFO( get_layer2_tile_info )
+{
+ SET_TILE_INFO(0,layer2_videoram[tile_index*2],layer2_videoram[tile_index*2+1] & 0xf,0);
+}
+
+
+static VIDEO_START( magic10 )
+{
+ layer0_tilemap = tilemap_create(get_layer0_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN, 16,16,32,32);
+ layer1_tilemap = tilemap_create(get_layer1_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,16,16,32,32);
+ layer2_tilemap = tilemap_create(get_layer2_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN, 8, 8,64,64);
+
+ tilemap_set_transparent_pen(layer1_tilemap,0);
+ tilemap_set_transparent_pen(layer2_tilemap,0);
+
+ tilemap_set_scrollx(layer2_tilemap,0,layer2_offset[0]);
+ tilemap_set_scrolly(layer2_tilemap,0,layer2_offset[1]);
+}
+
+static VIDEO_UPDATE( magic10 )
+{
+ tilemap_draw(bitmap,cliprect,layer0_tilemap,0,0);
+ tilemap_draw(bitmap,cliprect,layer1_tilemap,0,0);
+ tilemap_draw(bitmap,cliprect,layer2_tilemap,0,0);
+ return 0;
+}
+
+static const gfx_layout tiles8x8_layout =
+{
+ 8,8,
+ RGN_FRAC(1,4),
+ 4,
+ { RGN_FRAC(3,4),RGN_FRAC(2,4),RGN_FRAC(1,4),RGN_FRAC(0,4) },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8
+};
+
+static const gfx_layout tiles16x16_layout =
+{
+ 16,16,
+ RGN_FRAC(1,4),
+ 4,
+ { RGN_FRAC(3,4),RGN_FRAC(2,4),RGN_FRAC(1,4),RGN_FRAC(0,4) },
+ { 0, 1, 2, 3, 4, 5, 6, 7,
+ 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
+ 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
+ 32*8
+};
+
+static GFXDECODE_START( magic10 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, tiles8x8_layout, 0, 16 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, tiles16x16_layout, 0, 16 )
+GFXDECODE_END
+
+static MACHINE_DRIVER_START( magic10 )
+ MDRV_CPU_ADD_TAG("cpu", M68000, 10000000) // ?
+ MDRV_CPU_PROGRAM_MAP(magic10_map,0)
+ MDRV_CPU_VBLANK_INT(irq1_line_hold,1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_NVRAM_HANDLER(generic_0fill)
+
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(64*8, 64*8)
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 44*8-1, 2*8, 32*8-1)
+ MDRV_PALETTE_LENGTH(0x100)
+ MDRV_GFXDECODE(magic10)
+
+ MDRV_VIDEO_START(magic10)
+ MDRV_VIDEO_UPDATE(magic10)
+
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ MDRV_SOUND_ADD(OKIM6295, 1056000)
+ MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) // clock frequency & pin 7 not verified
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( magic10a )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(magic10)
+ MDRV_CPU_MODIFY("cpu")
+ MDRV_CPU_PROGRAM_MAP(magic10a_map,0)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( magic102 )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(magic10)
+ MDRV_CPU_MODIFY("cpu")
+ MDRV_CPU_PROGRAM_MAP(magic102_map,0)
+
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 0*8, 30*8-1)
+MACHINE_DRIVER_END
+
+/*
+
+Magic 10 (videopoker)
+
+1x 68k
+1x 20mhz OSC near 68k
+1x Oki M6295
+1x 30mhz OSC near oki chip
+2x fpga
+1x bank of Dipswitch
+1x Dallas Ds1220y-200 Nonvolatile ram
+
+*/
+
+ROM_START( magic10 )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "u3.bin", 0x000000, 0x20000, CRC(191a46f4) SHA1(65bc22cdcc4b2f102d3eef595626819af709cacb) )
+ ROM_LOAD16_BYTE( "u2.bin", 0x000001, 0x20000, CRC(a03a80bc) SHA1(a21da8912f1d2c8c2fa4a8d3ce4d43da8a934e21) )
+
+ ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* Tiles */
+ ROM_LOAD( "u25.bin", 0x00000, 0x20000, CRC(7abb8136) SHA1(1d4daf6a4477853d89d08afb524516ef79f60dd6) )
+ ROM_LOAD( "u26.bin", 0x20000, 0x20000, CRC(fd0b912d) SHA1(1cd15fa3459e7fece9fc37595f2b6848c00ffa43) )
+ ROM_LOAD( "u27.bin", 0x40000, 0x20000, CRC(8178c907) SHA1(8c3440769ed4e113d84d1f8f9079783497791859) )
+ ROM_LOAD( "u28.bin", 0x60000, 0x20000, CRC(dfd41aab) SHA1(82248c7fa4febb1c453f35a0e4cfae062c5da2d5) )
+
+ ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "u22.bin", 0x00000, 0x40000, CRC(98885246) SHA1(752d549e6248074f2a7f6c5cc4d0bbc44c7fa4c3) )
+ROM_END
+
+ROM_START( magic10a )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "u3_1645.bin", 0x00000, 0x20000, CRC(7f2549e4) SHA1(6578ad29273c357faae7c6be3fa1b49087e088a2) )
+ ROM_LOAD16_BYTE( "u2_1645.bin", 0x00001, 0x20000, CRC(c075234e) SHA1(d9bc38f0b984082a77088fbb52b02c8f5c49846c) )
+
+ ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* Tile */
+ ROM_LOAD( "u25.bin", 0x00000, 0x20000, CRC(7abb8136) SHA1(1d4daf6a4477853d89d08afb524516ef79f60dd6) )
+ ROM_LOAD( "u26.bin", 0x20000, 0x20000, CRC(fd0b912d) SHA1(1cd15fa3459e7fece9fc37595f2b6848c00ffa43) )
+ ROM_LOAD( "u27.bin", 0x40000, 0x20000, CRC(8178c907) SHA1(8c3440769ed4e113d84d1f8f9079783497791859) )
+ ROM_LOAD( "u28.bin", 0x60000, 0x20000, CRC(dfd41aab) SHA1(82248c7fa4febb1c453f35a0e4cfae062c5da2d5) )
+
+ ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "u22.bin", 0x00000, 0x40000, CRC(98885246) SHA1(752d549e6248074f2a7f6c5cc4d0bbc44c7fa4c3) )
+ROM_END
+
+/*
+
+pcb is marked: Copyright ABM - 9605 Rev.02
+
+1x 68000
+1x osc 30mhz
+1x osc 20mhz (near the 68k)
+1x h8/330 HD6473308cp10
+1x dipswitch
+1x battery
+1x fpga by Actel
+1x oki6295
+
+*/
+
+ROM_START( magic102 )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "2.u3", 0x00000, 0x20000, CRC(6fc55fe4) SHA1(392ad92e55aeac9bf5235cceb6b0b415942105a4) )
+ ROM_LOAD16_BYTE( "1.u2", 0x00001, 0x20000, CRC(501507af) SHA1(ceed50c9380a9838cd3d171d2387334edfeff77f) )
+
+ ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* Tiles */
+ ROM_LOAD( "3.u35", 0x00000, 0x20000, CRC(df47bb12) SHA1(b8bcbc9ab764d3159344d93776d13a14c9154086) )
+ ROM_LOAD( "4.u36", 0x20000, 0x20000, CRC(dc242034) SHA1(6a2983c79776df07f29b77f23799fef6f20df24f) )
+ ROM_LOAD( "5.u37", 0x40000, 0x20000, CRC(a048e26e) SHA1(788c28470298896902120e74fd8b9b283b8e9b79) )
+ ROM_LOAD( "6.u38", 0x60000, 0x20000, CRC(469efb34) SHA1(b16646fb0c4757132e272b3877cf546b6f616786) )
+
+ ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "7.u32", 0x00000, 0x40000, CRC(47804af7) SHA1(602dc0361869b52532e2adcb0de3cbdd042761b3) )
+ROM_END
+
+static DRIVER_INIT( magic10 )
+{
+ layer2_offset[0] = 32;
+ layer2_offset[1] = 2;
+}
+
+static DRIVER_INIT( magic102 )
+{
+ layer2_offset[0] = 8;
+ layer2_offset[1] = 20;
+}
+
+GAME( 1995, magic10, 0, magic10, magic10, magic10, ROT0, "A.W.P. Games", "Magic's 10 (ver. 16.55)", 0 )
+GAME( 1995, magic10a, magic10, magic10a, magic10, magic10, ROT0, "A.W.P. Games", "Magic's 10 (ver. 16.45)", 0 )
+GAME( 1997, magic102, 0, magic102, magic102, magic102, ROT0, "ABM Games", "Magic's 10 2 (ver 1.1)", GAME_NOT_WORKING )