summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2010-03-08 14:25:41 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2010-03-08 14:25:41 +0000
commit89959b2cf121b2a6300c6dfa1c865a3e80c6fc02 (patch)
treef8804d30e94f2a2255b206efbe9e1726e16ede5f
parent7d94ce8dec86ddfbfd2a19879375fa26aaeb9206 (diff)
Improvements to the unkch1/4 sets [David Haywood]
-rw-r--r--src/mame/drivers/goldstar.c283
-rw-r--r--src/mame/includes/goldstar.h12
-rw-r--r--src/mame/video/goldstar.c142
3 files changed, 413 insertions, 24 deletions
diff --git a/src/mame/drivers/goldstar.c b/src/mame/drivers/goldstar.c
index 1e008816c94..40d353a60e7 100644
--- a/src/mame/drivers/goldstar.c
+++ b/src/mame/drivers/goldstar.c
@@ -378,6 +378,40 @@ static ADDRESS_MAP_START( lucky8_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xf800, 0xffff) AM_RAM
ADDRESS_MAP_END
+
+static READ8_HANDLER( magical_unk_r )
+{
+ return 0xff;
+}
+
+
+static ADDRESS_MAP_START(magical_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ // where does the extra rom data map?? it seems like it should come straight after the existing rom, but it can't if this is a plain z80?
+ AM_RANGE(0x8000, 0x87ff) AM_RAM AM_BASE_MEMBER(goldstar_state,nvram) AM_SIZE_MEMBER(goldstar_state,nvram_size)
+ AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(goldstar_fg_vidram_w) AM_BASE_MEMBER(goldstar_state,fg_vidram)
+ AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(goldstar_fg_atrram_w) AM_BASE_MEMBER(goldstar_state,fg_atrram)
+ AM_RANGE(0x9800, 0x99ff) AM_RAM_WRITE(goldstar_reel1_ram_w) AM_BASE_MEMBER(goldstar_state,reel1_ram)
+ AM_RANGE(0xa000, 0xa1ff) AM_RAM_WRITE(goldstar_reel2_ram_w) AM_BASE_MEMBER(goldstar_state,reel2_ram)
+ AM_RANGE(0xa800, 0xa9ff) AM_RAM_WRITE(goldstar_reel3_ram_w) AM_BASE_MEMBER(goldstar_state,reel3_ram)
+ AM_RANGE(0xb040, 0xb07f) AM_RAM AM_BASE_MEMBER(goldstar_state,reel1_scroll)
+ AM_RANGE(0xb080, 0xb0bf) AM_RAM AM_BASE_MEMBER(goldstar_state,reel2_scroll)
+ AM_RANGE(0xb100, 0xb17f) AM_RAM AM_BASE_MEMBER(goldstar_state,reel3_scroll)
+
+ AM_RANGE(0xb800, 0xb800) AM_READ(magical_unk_r)
+ AM_RANGE(0xb801, 0xb801) AM_READ(magical_unk_r)
+
+
+ //AM_RANGE(0xb800, 0xb803) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w) /* Input Ports */
+ //AM_RANGE(0xb810, 0xb813) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w) /* Input Ports */
+ //AM_RANGE(0xb820, 0xb823) AM_DEVREADWRITE("ppi8255_2", ppi8255_r, ppi8255_w) /* Input/Output Ports */
+ //AM_RANGE(0xb830, 0xb830) AM_DEVREADWRITE("aysnd", ay8910_r, ay8910_data_w)
+ //AM_RANGE(0xb840, 0xb840) AM_DEVWRITE("aysnd", ay8910_address_w) /* no sound... only use both ports for DSWs */
+ //AM_RANGE(0xb850, 0xb850) AM_WRITE(lucky8_outport_w)
+ //AM_RANGE(0xb870, 0xb870) AM_DEVWRITE("snsnd", sn76496_w) /* sound */
+ AM_RANGE(0xf800, 0xffff) AM_RAM
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( kkojnoli_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM /* definitely no NVRAM */
@@ -463,20 +497,26 @@ static ADDRESS_MAP_START( wcat3_map, ADDRESS_SPACE_PROGRAM, 8 )
ADDRESS_MAP_END
+/*
static READ8_HANDLER( unkch_unk_r )
{
return 0xff;
}
+*/
+
-// scrolling is wrong / different
+/* newer / more capable hw */
static ADDRESS_MAP_START( unkch_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x9fff) AM_ROM
AM_RANGE(0xc000, 0xc1ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_split1_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0xc800, 0xc9ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_split2_w) AM_BASE_GENERIC(paletteram2)
AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_BASE_MEMBER(goldstar_state,nvram) AM_SIZE_MEMBER(goldstar_state,nvram_size)
- AM_RANGE(0xd800, 0xdfff) AM_RAM
-
+
+ AM_RANGE(0xd840, 0xd87f) AM_RAM AM_BASE_MEMBER(goldstar_state,reel1_scroll)
+ AM_RANGE(0xd880, 0xd8bf) AM_RAM AM_BASE_MEMBER(goldstar_state,reel2_scroll)
+ AM_RANGE(0xd900, 0xd93f) AM_RAM AM_BASE_MEMBER(goldstar_state,reel3_scroll)
+ AM_RANGE(0xdfc0, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(goldstar_fg_vidram_w) AM_BASE_MEMBER(goldstar_state,fg_vidram)
AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(goldstar_fg_atrram_w) AM_BASE_MEMBER(goldstar_state,fg_atrram)
@@ -485,19 +525,47 @@ static ADDRESS_MAP_START( unkch_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xf200, 0xf3ff) AM_RAM_WRITE( goldstar_reel2_ram_w ) AM_BASE_MEMBER(goldstar_state,reel2_ram)
AM_RANGE(0xf400, 0xf5ff) AM_RAM_WRITE( goldstar_reel3_ram_w ) AM_BASE_MEMBER(goldstar_state,reel3_ram)
AM_RANGE(0xf600, 0xf7ff) AM_RAM
-
- AM_RANGE(0xf800, 0xf87f) AM_RAM AM_BASE_MEMBER(goldstar_state,reel1_scroll)
- AM_RANGE(0xf880, 0xf9ff) AM_RAM
- AM_RANGE(0xfa00, 0xfa7f) AM_RAM AM_BASE_MEMBER(goldstar_state,reel2_scroll)
- AM_RANGE(0xfa80, 0xfbff) AM_RAM
- AM_RANGE(0xfc00, 0xfc7f) AM_RAM AM_BASE_MEMBER(goldstar_state,reel3_scroll)
- AM_RANGE(0xfc80, 0xffff) AM_RAM
+ AM_RANGE(0xf800, 0xf9ff) AM_RAM_WRITE( unkch_reel1_attrram_w ) AM_BASE_MEMBER(goldstar_state,reel1_attrram)
+ AM_RANGE(0xfa00, 0xfbff) AM_RAM_WRITE( unkch_reel2_attrram_w ) AM_BASE_MEMBER(goldstar_state,reel2_attrram)
+ AM_RANGE(0xfc00, 0xfdff) AM_RAM_WRITE( unkch_reel3_attrram_w ) AM_BASE_MEMBER(goldstar_state,reel3_attrram)
+ AM_RANGE(0xfe00, 0xffff) AM_RAM
ADDRESS_MAP_END
+static WRITE8_HANDLER( unkcm_0x02_w )
+{
+ //popmessage("unkcm_0x02_w %02x", data);
+}
+
+static WRITE8_HANDLER( unkcm_0x03_w )
+{
+ //popmessage("unkcm_0x03_w %02x", data);
+ goldstar_state *state = (goldstar_state *)space->machine->driver_data;
+
+ state->unkch_vidreg = data;
+
+ // -x-- ---- seems to toggle when a 'normal' tilemap should be displayed instead of the reels?
+}
+
+
+static WRITE8_HANDLER( unkcm_0x11_w )
+{
+ //popmessage("unkcm_0x11_w %02x", data);
+}
+
+static WRITE8_HANDLER( unkcm_0x12_w )
+{
+// popmessage("unkcm_0x12_w %02x", data);
+}
+
+
static ADDRESS_MAP_START( unkch_portmap, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
// AM_RANGE(0x01, 0x01) AM_DEVREAD("aysnd", ay8910_r)
-// AM_RANGE(0x02, 0x03) AM_DEVWRITE("aysnd", ay8910_data_address_w)
+ AM_RANGE(0x02, 0x02) AM_WRITE(unkcm_0x02_w)
+ AM_RANGE(0x03, 0x03) AM_WRITE(unkcm_0x03_w)
+ AM_RANGE(0x11, 0x11) AM_WRITE(unkcm_0x11_w)
+ AM_RANGE(0x12, 0x12) AM_WRITE(unkcm_0x12_w)
+
// AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w) /* Input Ports */
// AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w) /* DIP switches */
// AM_RANGE(0x10, 0x10) AM_WRITE (cm_outport0_w) /* output port */
@@ -506,7 +574,12 @@ static ADDRESS_MAP_START( unkch_portmap, ADDRESS_SPACE_IO, 8 )
// AM_RANGE(0x13, 0x13) AM_WRITE(cm_background_col_w)
// AM_RANGE(0x14, 0x14) AM_WRITE(cm_girl_scroll_w)
- AM_RANGE(0x08, 0x09) AM_READ(unkch_unk_r)
+ AM_RANGE(0x08, 0x08) AM_READ_PORT("IN0")
+ AM_RANGE(0x09, 0x09) AM_READ_PORT("IN1")
+ AM_RANGE(0x0a, 0x0a) AM_READ_PORT("IN2")
+ AM_RANGE(0x0b, 0x0b) AM_READ_PORT("IN3")
+ AM_RANGE(0x10, 0x10) AM_READ_PORT("IN4")
+
ADDRESS_MAP_END
@@ -4153,6 +4226,125 @@ static INPUT_PORTS_START( nfb96bl )
INPUT_PORTS_END
+static INPUT_PORTS_START( unkch )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_N) PORT_NAME("Bet A / STOP 2")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_C) PORT_NAME("Take / STOP1")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_M) PORT_NAME("Bet B / D-UP")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_V) PORT_NAME("Small / STOP 3")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_B) PORT_NAME("Big")
+
+ PORT_START("IN1")
+ PORT_DIPNAME( 0x01, 0x01, "IN1" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+
+ PORT_START("IN2")
+ PORT_DIPNAME( 0x01, 0x01, "IN2")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("IN3")
+ PORT_DIPNAME( 0x01, 0x01, "IN3" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("IN4")
+ PORT_DIPNAME( 0x01, 0x01, "IN4" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
static const gfx_layout charlayout =
{
8,8, /* 8*8 characters */
@@ -4448,7 +4640,7 @@ static const gfx_layout tiles8x32x4alt2_layout =
static GFXDECODE_START( unkch )
GFXDECODE_ENTRY( "gfx1", 0, tiles8x8x4alt_layout, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0, tiles8x32x4alt2_layout, 128, 8 )
+ GFXDECODE_ENTRY( "gfx2", 0, tiles8x32x4alt2_layout, 0, 16 )
GFXDECODE_END
static const gfx_layout tilescherrys_layout =
@@ -5060,6 +5252,49 @@ static MACHINE_DRIVER_START( lucky8 )
MACHINE_DRIVER_END
+static MACHINE_DRIVER_START( magical )
+
+ MDRV_DRIVER_DATA(goldstar_state)
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD("maincpu", Z80, CPU_CLOCK)
+ MDRV_CPU_PROGRAM_MAP(magical_map)
+ //MDRV_CPU_IO_MAP(goldstar_readport)
+ //MDRV_CPU_VBLANK_INT("screen", nmi_line_pulse) // causes nested nmis and 'error ff' (needs enable?)
+ MDRV_CPU_VBLANK_INT("screen", irq0_line_hold) // causes 'magical' to display 'wait' instead
+
+ /* 3x 8255 */
+ //MDRV_PPI8255_ADD( "ppi8255_0", lucky8_ppi8255_intf[0] )
+ //MDRV_PPI8255_ADD( "ppi8255_1", lucky8_ppi8255_intf[1] )
+ //MDRV_PPI8255_ADD( "ppi8255_2", lucky8_ppi8255_intf[2] )
+
+ /* video hardware */
+ MDRV_SCREEN_ADD("screen", RASTER)
+ MDRV_SCREEN_REFRESH_RATE(60)
+// MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(64*8, 32*8)
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 2*8, 30*8-1)
+ MDRV_PALETTE_INIT(lucky8)
+
+ MDRV_GFXDECODE(ncb3)
+ MDRV_PALETTE_LENGTH(256)
+ MDRV_NVRAM_HANDLER(goldstar)
+
+ MDRV_VIDEO_START(goldstar)
+ MDRV_VIDEO_UPDATE(goldstar)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_MONO("mono")
+
+ //MDRV_SOUND_ADD("snsnd", SN76489, PSG_CLOCK)
+ //MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+
+ //MDRV_SOUND_ADD("aysnd", AY8910, AY_CLOCK)
+ //MDRV_SOUND_CONFIG(lucky8_ay8910_config)
+ //MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+MACHINE_DRIVER_END
+
static MACHINE_DRIVER_START( kkojnoli )
@@ -5372,15 +5607,15 @@ static MACHINE_DRIVER_START( unkch )
//MDRV_NVRAM_HANDLER(goldstar)
- MDRV_VIDEO_START(cherrym)
- MDRV_VIDEO_UPDATE(goldstar)
+ MDRV_VIDEO_START(unkch)
+ MDRV_VIDEO_UPDATE(unkch)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
- MDRV_SOUND_ADD("aysnd", AY8910, AY_CLOCK)
- MDRV_SOUND_CONFIG(ay8910_config)
- MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+// MDRV_SOUND_ADD("aysnd", AY8910, AY_CLOCK)
+// MDRV_SOUND_CONFIG(ay8910_config)
+// MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( cherrys )
@@ -8840,8 +9075,8 @@ GAME( 198?, ladylinr, 0, ladylinr, ladylinr, 0, ROT0, "TAB Austr
GAME( 198?, kkojnoli, 0, kkojnoli, kkojnoli, 0, ROT0, "south korean hack", "Kkoj Noli (Kill the Bees)", GAME_IMPERFECT_COLORS )
GAME( 198?, wcat3, 0, wcat3, lucky8, 0, ROT0, "E.A.I.", "Wild Cat 3", GAME_NOT_WORKING )
-GAME( 198?, mtonic, 0, ncb3, cmv801, mtonic, ROT0, "Tonic", "Magical Tonic?", GAME_WRONG_COLORS | GAME_NOT_WORKING )
-GAME( 198?, magical, 0, lucky8, lucky8, 0, ROT0, "Micro Manufacturing Inc.", "Magical Tonic / Magical Odds?", GAME_NOT_WORKING )
+GAME( 198?, mtonic, 0, magical, lucky8, mtonic, ROT0, "Pal Company Ltd.", "Magical Odds", GAME_WRONG_COLORS | GAME_NOT_WORKING |GAME_NO_SOUND) // Magical Odds logo / company in GFX
+GAME( 198?, magical, 0, magical, lucky8, 0, ROT0, "Micro Manufacturing Inc.", "Magical Tonic / Magical Odds?", GAME_NOT_WORKING|GAME_NO_SOUND )
/* --- Amcoe games --- */
@@ -8884,10 +9119,10 @@ GAME( 2003, carb2003, nfb96, amcoe2, nfb96bl, 0, ROT0, "bootleg"
GAME( 2003, nfm, 0, nfm, nfb96bl, 0, ROT0, "Ming-Yang Electronic", "New Fruit Machine (Ming-Yang Electronic)", GAME_NOT_WORKING )
// these have 'cherry 1994' in the program roms, but also "Super Cherry / New Cherry Gold '99" probably hacks of a 1994 version of Cherry Bonus / Cherry Master (Super Cherry Master?)
-GAME( 1999, unkch1, 0, unkch, schery97, unkch1, ROT0, "bootleg", "New Cherry Gold '99 (bootleg of Super Cherry Master) (set 1)", GAME_NOT_WORKING )
-GAME( 1999, unkch2, unkch1, unkch, schery97, unkch1, ROT0, "bootleg", "Super Cherry Gold (bootleg of Super Cherry Master)", GAME_NOT_WORKING )
-GAME( 1999, unkch3, unkch1, unkch, schery97, unkch3, ROT0, "bootleg", "New Cherry Gold '99 (bootleg of Super Cherry Master) (set 2)", GAME_NOT_WORKING ) // cards have been hacked to look like barrels
-GAME( 1999, unkch4, unkch1, unkch, schery97, unkch4, ROT0, "bootleg", "Grand Cherry Master (bootleg of Super Cherry Master)", GAME_NOT_WORKING ) // by 'toy system' hungary
+GAME( 1999, unkch1, 0, unkch, unkch, unkch1, ROT0, "bootleg", "New Cherry Gold '99 (bootleg of Super Cherry Master) (set 1)", GAME_NOT_WORKING|GAME_NO_SOUND )
+GAME( 1999, unkch2, unkch1, unkch, unkch, unkch1, ROT0, "bootleg", "Super Cherry Gold (bootleg of Super Cherry Master)", GAME_NOT_WORKING|GAME_NO_SOUND )
+GAME( 1999, unkch3, unkch1, unkch, unkch, unkch3, ROT0, "bootleg", "New Cherry Gold '99 (bootleg of Super Cherry Master) (set 2)", GAME_NOT_WORKING|GAME_NO_SOUND ) // cards have been hacked to look like barrels, girl removed?
+GAME( 1999, unkch4, unkch1, unkch, unkch, unkch4, ROT0, "bootleg", "Grand Cherry Master (bootleg of Super Cherry Master)", GAME_NOT_WORKING|GAME_NO_SOUND ) // by 'toy system' hungary
diff --git a/src/mame/includes/goldstar.h b/src/mame/includes/goldstar.h
index 4719db5248c..73958ad3605 100644
--- a/src/mame/includes/goldstar.h
+++ b/src/mame/includes/goldstar.h
@@ -22,6 +22,12 @@ public:
UINT8 *reel2_ram;
UINT8 *reel3_ram;
+ /* reelx_attrram for unkch sets */
+ UINT8 *reel1_attrram;
+ UINT8 *reel2_attrram;
+ UINT8 *reel3_attrram;
+ UINT8 unkch_vidreg;
+
tilemap_t *reel1_tilemap;
tilemap_t *reel2_tilemap;
tilemap_t *reel3_tilemap;
@@ -41,6 +47,10 @@ WRITE8_HANDLER( goldstar_reel1_ram_w );
WRITE8_HANDLER( goldstar_reel2_ram_w );
WRITE8_HANDLER( goldstar_reel3_ram_w );
+WRITE8_HANDLER( unkch_reel1_attrram_w );
+WRITE8_HANDLER( unkch_reel2_attrram_w );
+WRITE8_HANDLER( unkch_reel3_attrram_w );
+
WRITE8_HANDLER( goldstar_fg_vidram_w );
WRITE8_HANDLER( goldstar_fg_atrram_w );
WRITE8_HANDLER( cm_girl_scroll_w );
@@ -50,6 +60,8 @@ WRITE8_HANDLER( cm_background_col_w );
WRITE8_HANDLER( cm_outport0_w );
VIDEO_START( goldstar );
VIDEO_START( cherrym );
+VIDEO_START( unkch );
VIDEO_UPDATE( goldstar );
VIDEO_UPDATE( cmast91 );
VIDEO_UPDATE( amcoe1a );
+VIDEO_UPDATE( unkch );
diff --git a/src/mame/video/goldstar.c b/src/mame/video/goldstar.c
index deed93fe2ab..6aba173c24d 100644
--- a/src/mame/video/goldstar.c
+++ b/src/mame/video/goldstar.c
@@ -155,6 +155,72 @@ static TILE_GET_INFO( get_goldstar_reel3_tile_info )
0);
}
+WRITE8_HANDLER( unkch_reel1_attrram_w )
+{
+ goldstar_state *state = (goldstar_state *)space->machine->driver_data;
+
+ state->reel1_attrram[offset] = data;
+ tilemap_mark_tile_dirty(state->reel1_tilemap,offset);
+}
+
+WRITE8_HANDLER( unkch_reel2_attrram_w )
+{
+ goldstar_state *state = (goldstar_state *)space->machine->driver_data;
+
+ state->reel2_attrram[offset] = data;
+ tilemap_mark_tile_dirty(state->reel2_tilemap,offset);
+}
+
+
+WRITE8_HANDLER( unkch_reel3_attrram_w )
+{
+ goldstar_state *state = (goldstar_state *)space->machine->driver_data;
+
+ state->reel3_attrram[offset] = data;
+ tilemap_mark_tile_dirty(state->reel3_tilemap,offset);
+}
+
+
+static TILE_GET_INFO( get_unkch_reel1_tile_info )
+{
+ goldstar_state *state = (goldstar_state *)machine->driver_data;
+ int code = state->reel1_ram[tile_index];
+ int attr = state->reel1_attrram[tile_index];
+
+ SET_TILE_INFO(
+ 1,
+ code | (attr & 0x0f)<<8,
+ (attr&0xf0)>>4,
+ 0);
+}
+
+static TILE_GET_INFO( get_unkch_reel2_tile_info )
+{
+ goldstar_state *state = (goldstar_state *)machine->driver_data;
+ int code = state->reel2_ram[tile_index];
+ int attr = state->reel2_attrram[tile_index];
+
+ SET_TILE_INFO(
+ 1,
+ code | (attr & 0x0f)<<8,
+ (attr&0xf0)>>4,
+ 0);
+}
+
+static TILE_GET_INFO( get_unkch_reel3_tile_info )
+{
+ goldstar_state *state = (goldstar_state *)machine->driver_data;
+ int code = state->reel3_ram[tile_index];
+ int attr = state->reel3_attrram[tile_index];
+
+ SET_TILE_INFO(
+ 1,
+ code | (attr & 0x0f)<<8,
+ (attr&0xf0)>>4,
+ 0);
+}
+
+
VIDEO_START( goldstar )
@@ -176,6 +242,28 @@ VIDEO_START( goldstar )
state->cm_enable_reg = 0x0b;
}
+VIDEO_START( unkch )
+{
+ goldstar_state *state = (goldstar_state *)machine->driver_data;
+
+ state->reel1_tilemap = tilemap_create(machine,get_unkch_reel1_tile_info,tilemap_scan_rows,8,32, 64, 8);
+ state->reel2_tilemap = tilemap_create(machine,get_unkch_reel2_tile_info,tilemap_scan_rows,8,32, 64, 8);
+ state->reel3_tilemap = tilemap_create(machine,get_unkch_reel3_tile_info,tilemap_scan_rows,8,32, 64, 8);
+
+ tilemap_set_scroll_cols(state->reel1_tilemap, 32);
+ tilemap_set_scroll_cols(state->reel2_tilemap, 32);
+ tilemap_set_scroll_cols(state->reel3_tilemap, 32);
+
+ state->cmaster_girl_num = 0;
+ state->cmaster_girl_pal = 0;
+ state->unkch_vidreg = 0x00;
+
+ state->fg_tilemap = tilemap_create(machine,get_cherrym_fg_tile_info,tilemap_scan_rows,8,8, 64, 32);
+ tilemap_set_transparent_pen(state->fg_tilemap,0);
+
+ state->cm_enable_reg = 0x0b;
+}
+
VIDEO_START( cherrym )
{
goldstar_state *state = (goldstar_state *)machine->driver_data;
@@ -263,6 +351,9 @@ static const rectangle am1a_visible1 = { 0*8, (14+48)*8-1, 4*8, (4+6)*8-1 };
static const rectangle am1a_visible2 = { 0*8, (14+48)*8-1, 10*8, (10+6)*8-1 };
static const rectangle am1a_visible3 = { 0*8, (14+48)*8-1, 16*8, (16+6)*8-1 };
+static const rectangle unkch_visible1 = { 0*8, (14+48)*8-1, 3*8, (3+7)*8-1 };
+static const rectangle unkch_visible2 = { 0*8, (14+48)*8-1, 10*8, (10+7)*8-1 };
+static const rectangle unkch_visible3 = { 0*8, (14+48)*8-1, 17*8, (17+7)*8-1 };
VIDEO_UPDATE( goldstar )
{
@@ -309,6 +400,57 @@ VIDEO_UPDATE( goldstar )
return 0;
}
+
+VIDEO_UPDATE( unkch )
+{
+ goldstar_state *state = (goldstar_state *)screen->machine->driver_data;
+ int i;
+
+ bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
+
+ if (!state->cm_enable_reg &0x01)
+ return 0;
+
+ if (state->cm_enable_reg &0x08)
+ {
+ // guess, this could be something else completely!!
+ // only draw the first 'reels' tilemap, but fullscreen, using alt registers? (or no scrolling at all? - doubtful, see girl)
+ if (state->unkch_vidreg & 0x40)
+ {
+ for (i= 0;i < 32;i++)
+ {
+ tilemap_set_scrolly(state->reel1_tilemap, i, -0x08/*state->reel1_scroll[(i*2)+1]*/);
+ // tilemap_set_scrolly(state->reel2_tilemap, i, state->reel2_scroll[(i*2)+1]);
+ // tilemap_set_scrolly(state->reel3_tilemap, i, state->reel3_scroll[(i*2)+1]);
+ }
+
+ tilemap_draw(bitmap, cliprect, state->reel1_tilemap, 0, 0);
+
+ }
+ // or draw the reels normally?
+ else
+ {
+ for (i= 0;i < 32;i++)
+ {
+ tilemap_set_scrolly(state->reel1_tilemap, i, state->reel1_scroll[i*2]);
+ tilemap_set_scrolly(state->reel2_tilemap, i, state->reel2_scroll[i*2]);
+ tilemap_set_scrolly(state->reel3_tilemap, i, state->reel3_scroll[i*2]);
+ }
+
+ tilemap_draw(bitmap, &unkch_visible1, state->reel1_tilemap, 0, 0);
+ tilemap_draw(bitmap, &unkch_visible2, state->reel2_tilemap, 0, 0);
+ tilemap_draw(bitmap, &unkch_visible3, state->reel3_tilemap, 0, 0);
+ }
+ }
+
+ if (state->cm_enable_reg &0x02)
+ {
+ tilemap_draw(bitmap,cliprect, state->fg_tilemap, 0, 0);
+ }
+
+ return 0;
+}
+
VIDEO_UPDATE( cmast91 )
{
goldstar_state *state = (goldstar_state *)screen->machine->driver_data;