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;