summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2008-12-15 01:05:48 +0000
committer Aaron Giles <aaron@aarongiles.com>2008-12-15 01:05:48 +0000
commit1f549950660f3120f6d56e81294617a45ec2c43b (patch)
tree63f8068a312ea92699b2fa2451b8168084734605
parent6b4efba253dc8b31c1f2d3f8d2401ddc9752c452 (diff)
-Merged goldstar.c & cmaster.c drivers
-Converted the Reels video to Tilemaps [David Haywood] New clones ---------- (New?) Cherry Bonus III [David Haywood] Cherry Bonus III [David Haywood] New non-working --------------- Cherry Master (Corsica, v8.01) [David Haywood] Cherry Master 91? [David Haywood] -----Messaggio originale----- Da: David Haywood [mailto:neohaze@nildram.co.uk] Inviato: domenica 14 dicembre 2008 22.20 A: Angelo Salese Oggetto: Gold Star update I converted the Reels video to Tilemaps merged cmaster.c with this, since it's basically the same thing, but with some changes.. made a few improvements to that. also added another cherry master set, might be "cherry master '91" but it's probably running on an extended version of the hardware as it has extra roms etc. it's still rather messy.. seems this game / hardware was used for the base of a lot of hacks, and it's really hard to know what the originals were... ------------------------------------------------------------------------ the cherry bonus 3 sets seem to be the same game as goldstar .... again these were just random messy sets on f205v's pcb with no proper info, no proms etc. ... ncb3 boots, and does show a dyna logo . cb3 seems to be encrypted.
-rw-r--r--src/mame/drivers/goldstar.c564
-rw-r--r--src/mame/mamedriv.c4
-rw-r--r--src/mame/video/goldstar.c171
3 files changed, 660 insertions, 79 deletions
diff --git a/src/mame/drivers/goldstar.c b/src/mame/drivers/goldstar.c
index bdb9335ded3..5ec58fa271c 100644
--- a/src/mame/drivers/goldstar.c
+++ b/src/mame/drivers/goldstar.c
@@ -1,10 +1,14 @@
/***************************************************************************
Golden Star
+Cherry Master
+
+Golden Star and Cherry Master seem to be almost the same thing, running on
+different hardware. There are also various bootlegs / hacks, it isn't clear
+exactly what hardware each runs on, some appear to have no OKI for example.
driver by Mirko Buffoni
-Is this a Konami board?
***************************************************************************/
#include "driver.h"
#include "sound/ay8910.h"
@@ -14,12 +18,21 @@ static int dataoffset=0;
extern UINT8 *goldstar_video1, *goldstar_video2, *goldstar_video3;
extern size_t goldstar_video_size;
-extern UINT8 *goldstar_scroll1, *goldstar_scroll2, *goldstar_scroll3;
+extern UINT8 *goldstar_reel1_scroll, *goldstar_reel2_scroll, *goldstar_reel3_scroll;
+
+
+
+extern UINT8 *goldstar_reel1_ram;
+extern WRITE8_HANDLER( goldstar_reel1_ram_w );
+extern UINT8 *goldstar_reel2_ram;
+extern WRITE8_HANDLER( goldstar_reel2_ram_w );
+extern UINT8 *goldstar_reel3_ram;
+extern WRITE8_HANDLER( goldstar_reel3_ram_w );
WRITE8_HANDLER( goldstar_fa00_w );
VIDEO_START( goldstar );
VIDEO_UPDATE( goldstar );
-
+VIDEO_UPDATE( cherrym );
static UINT8 *nvram;
static size_t nvram_size;
@@ -53,16 +66,19 @@ static READ8_HANDLER( protection_r )
return data[dataoffset++];
}
-static ADDRESS_MAP_START( map, ADDRESS_SPACE_PROGRAM, 8 )
+static ADDRESS_MAP_START( goldstar_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xb7ff) AM_ROM
AM_RANGE(0xb800, 0xbfff) AM_RAM AM_BASE(&nvram) AM_SIZE(&nvram_size)
AM_RANGE(0xc000, 0xc7ff) AM_ROM
AM_RANGE(0xc800, 0xcfff) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_BASE(&colorram)
- AM_RANGE(0xd800, 0xd9ff) AM_RAM AM_BASE(&goldstar_video1) AM_SIZE(&goldstar_video_size)
- AM_RANGE(0xe000, 0xe1ff) AM_RAM AM_BASE(&goldstar_video2)
- AM_RANGE(0xe800, 0xe9ff) AM_WRITE(SMH_RAM) AM_BASE(&goldstar_video3)
- AM_RANGE(0xf040, 0xf07f) AM_WRITE(SMH_RAM) AM_BASE(&goldstar_scroll1)
+ AM_RANGE(0xd800, 0xd9ff) AM_RAM AM_WRITE( goldstar_reel1_ram_w ) AM_BASE(&goldstar_reel1_ram)
+ AM_RANGE(0xe000, 0xe1ff) AM_RAM AM_WRITE( goldstar_reel2_ram_w ) AM_BASE(&goldstar_reel2_ram)
+ AM_RANGE(0xe800, 0xe9ff) AM_RAM AM_WRITE( goldstar_reel3_ram_w ) AM_BASE(&goldstar_reel3_ram)
+ AM_RANGE(0xf040, 0xf07f) AM_RAM AM_BASE(&goldstar_reel1_scroll)
+ AM_RANGE(0xf080, 0xf0bf) AM_RAM AM_BASE(&goldstar_reel2_scroll)
+ AM_RANGE(0xf0c0, 0xf0ff) AM_RAM AM_BASE(&goldstar_reel3_scroll)
+
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("IN0")
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("IN1") /* Test Mode */
AM_RANGE(0xf802, 0xf802) AM_READ_PORT("DSW1")
@@ -70,9 +86,6 @@ static ADDRESS_MAP_START( map, ADDRESS_SPACE_PROGRAM, 8 )
// AM_RANGE(0xf804, 0xf804)
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW4") /* DSW 4 (also appears in 8910 port) */
AM_RANGE(0xf806, 0xf806) AM_READ_PORT("DSW7") /* (don't know to which one of the */
- /* service mode dip switches it should map) */
- AM_RANGE(0xf080, 0xf0bf) AM_WRITE(SMH_RAM) AM_BASE(&goldstar_scroll2)
- AM_RANGE(0xf0c0, 0xf0ff) AM_WRITE(SMH_RAM) AM_BASE(&goldstar_scroll3)
AM_RANGE(0xf810, 0xf810) AM_READ_PORT("UNK1")
AM_RANGE(0xf811, 0xf811) AM_READ_PORT("UNK2")
AM_RANGE(0xf820, 0xf820) AM_READ_PORT("DSW2")
@@ -84,12 +97,246 @@ static ADDRESS_MAP_START( map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xfe00, 0xfe00) AM_READWRITE(protection_r,protection_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( ncb3_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0xb7ff) AM_ROM
+ AM_RANGE(0xb800, 0xbfff) AM_RAM AM_BASE(&nvram) AM_SIZE(&nvram_size)
+ AM_RANGE(0xc000, 0xc7ff) AM_ROM
+ AM_RANGE(0xc800, 0xcfff) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
+ AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_BASE(&colorram)
+ AM_RANGE(0xd800, 0xd9ff) AM_RAM AM_WRITE( goldstar_reel1_ram_w ) AM_BASE(&goldstar_reel1_ram)
+ AM_RANGE(0xe000, 0xe1ff) AM_RAM AM_WRITE( goldstar_reel2_ram_w ) AM_BASE(&goldstar_reel2_ram)
+ AM_RANGE(0xe800, 0xe9ff) AM_RAM AM_WRITE( goldstar_reel3_ram_w ) AM_BASE(&goldstar_reel3_ram)
+ AM_RANGE(0xf040, 0xf07f) AM_RAM AM_BASE(&goldstar_reel1_scroll)
+ AM_RANGE(0xf080, 0xf0bf) AM_RAM AM_BASE(&goldstar_reel2_scroll)
+ AM_RANGE(0xf100, 0xf17f) AM_RAM AM_BASE(&goldstar_reel3_scroll) // moved compared to ncb3
+
+ AM_RANGE(0xf800, 0xf800) AM_READ_PORT("IN0")
+ AM_RANGE(0xf801, 0xf801) AM_READ_PORT("IN1") /* Test Mode */
+ AM_RANGE(0xf802, 0xf802) AM_READ_PORT("DSW1")
+// AM_RANGE(0xf803, 0xf803)
+// AM_RANGE(0xf804, 0xf804)
+ AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW4") /* DSW 4 (also appears in 8910 port) */
+ AM_RANGE(0xf806, 0xf806) AM_READ_PORT("DSW7") /* (don't know to which one of the */
+ AM_RANGE(0xf810, 0xf810) AM_READ_PORT("UNK1")
+ AM_RANGE(0xf811, 0xf811) AM_READ_PORT("UNK2")
+ AM_RANGE(0xf820, 0xf820) AM_READ_PORT("DSW2")
+// AM_RANGE(0xf830, 0xf830) AM_READWRITE(ay8910_read_port_0_r,ay8910_write_port_0_w)
+// AM_RANGE(0xf840, 0xf840) AM_WRITE(ay8910_control_port_0_w)
+// AM_RANGE(0xfa00, 0xfa00) AM_WRITE(goldstar_fa00_w)
+// AM_RANGE(0xfb00, 0xfb00) AM_READWRITE(okim6295_status_0_r,okim6295_data_0_w)
+// AM_RANGE(0xfd00, 0xfdff) AM_READWRITE(SMH_RAM,paletteram_BBGGGRRR_w) AM_BASE(&paletteram)
+// AM_RANGE(0xfe00, 0xfe00) AM_READWRITE(protection_r,protection_w)
+ADDRESS_MAP_END
+
-static ADDRESS_MAP_START( readport, ADDRESS_SPACE_IO, 8 )
+
+static ADDRESS_MAP_START( goldstar_readport, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x10, 0x10) AM_READ_PORT("DSW6")
ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cm_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0xbfff) AM_ROM AM_WRITENOP
+
+
+ AM_RANGE(0xb800, 0xbfff) AM_RAM AM_BASE(&nvram) AM_SIZE(&nvram_size) // not here..
+ AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
+ AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(&colorram)
+
+ AM_RANGE(0xd000, 0xd7ff) AM_RAM // main?
+ AM_RANGE(0xd800, 0xdfff) AM_RAM
+
+ AM_RANGE(0xf000, 0xf1ff) AM_RAM AM_WRITE( goldstar_reel1_ram_w ) AM_BASE(&goldstar_reel1_ram)
+ AM_RANGE(0xf200, 0xf3ff) AM_RAM AM_WRITE( goldstar_reel2_ram_w ) AM_BASE(&goldstar_reel2_ram)
+ AM_RANGE(0xf400, 0xf5ff) AM_RAM AM_WRITE( goldstar_reel3_ram_w ) AM_BASE(&goldstar_reel3_ram)
+ AM_RANGE(0xf600, 0xf7ff) AM_RAM
+
+ AM_RANGE(0xf800, 0xf87f) AM_RAM AM_BASE(&goldstar_reel1_scroll)
+ AM_RANGE(0xf880, 0xf9ff) AM_RAM
+ AM_RANGE(0xfa00, 0xfa7f) AM_RAM AM_BASE(&goldstar_reel2_scroll)
+ AM_RANGE(0xfa80, 0xfbff) AM_RAM
+ AM_RANGE(0xfc00, 0xfc7f) AM_RAM AM_BASE(&goldstar_reel3_scroll)
+ AM_RANGE(0xfc80, 0xffff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cm_portmap, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x01, 0x01) AM_READ(ay8910_read_port_0_r)
+ AM_RANGE(0x02, 0x02) AM_WRITE(ay8910_write_port_0_w)
+ AM_RANGE(0x03, 0x03) AM_WRITE(ay8910_control_port_0_w)
+ AM_RANGE(0x04, 0x04) AM_READ_PORT("PLAYER")
+ AM_RANGE(0x05, 0x05) AM_READ_PORT("COIN")
+ AM_RANGE(0x06, 0x06) AM_READ_PORT("TEST")
+ AM_RANGE(0x07, 0x07) AM_WRITENOP
+ AM_RANGE(0x08, 0x08) AM_READ_PORT("DSW1")
+ AM_RANGE(0x09, 0x09) AM_READ_PORT("DSW2")
+ AM_RANGE(0x0a, 0x0a) AM_READ_PORT("DSW3")
+ AM_RANGE(0x0b, 0x0b) AM_WRITENOP
+ AM_RANGE(0x10, 0x10) AM_WRITENOP
+ AM_RANGE(0x11, 0x11) AM_WRITENOP
+ AM_RANGE(0x12, 0x12) AM_WRITENOP
+ AM_RANGE(0x13, 0x13) AM_WRITENOP
+ADDRESS_MAP_END
+
+static INPUT_PORTS_START( cmv801 )
+ PORT_START("PLAYER")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 0") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 1") PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Big")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Double Up")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Stop / Take Score")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Bet")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Small")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
+
+ PORT_START("COIN")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 0") PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 1") PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 3") PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) // PORT_NAME("Bit 4") PORT_CODE(KEYCODE_G)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN4 ) // PORT_NAME("Bit 5") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 ) // Key-In
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) // 10 Credits
+
+ PORT_START("TEST")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 0") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 1") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 2") PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Bit 3") PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4) PORT_NAME("Payout")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Limit Over")
+ PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F2) PORT_NAME("Analyzer")
+
+ PORT_START("DSW1")
+ PORT_DIPUNUSED_DIPLOC( 0x01, 0x00, "SW1:!1" ) /* Listed as "Unused" */
+ PORT_DIPNAME( 0x02, 0x00, "Hopper Out Switch" ) PORT_DIPLOCATION("SW1:!2")
+ PORT_DIPSETTING( 0x02, "Active High" )
+ PORT_DIPSETTING( 0x00, "Active Low" )
+ PORT_DIPNAME( 0x04, 0x00, "Type Of Payout" ) PORT_DIPLOCATION("SW1:!3")
+ PORT_DIPSETTING( 0x04, "Automatic" )
+ PORT_DIPSETTING( 0x00, "Payout SH" )
+ PORT_DIPNAME( 0x08, 0x00, "@ IN DoubleUp" ) PORT_DIPLOCATION("SW1:!4")
+ PORT_DIPSETTING( 0x08, "Even" )
+ PORT_DIPSETTING( 0x00, "LOST" )
+ PORT_DIPNAME( 0x10, 0x00, "DoubleUp Pay-Rate" ) PORT_DIPLOCATION("SW1:!5")
+ PORT_DIPSETTING( 0x00, "80%" )
+ PORT_DIPSETTING( 0x10, "90%" )
+ PORT_DIPNAME( 0x20, 0x00, "DoubleUp" ) PORT_DIPLOCATION("SW1:!6")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0xc0, 0x00, "Bet Max" ) PORT_DIPLOCATION("SW1:!7,!8") /* Manual says 8/16/32/64 */
+ PORT_DIPSETTING( 0x00, "16 Bet" )
+ PORT_DIPSETTING( 0x40, "32 Bet" )
+ PORT_DIPSETTING( 0x80, "64 Bet" )
+ PORT_DIPSETTING( 0xc0, "96 Bet" )
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x07, 0x07, "Main Game Pay-Rate" ) PORT_DIPLOCATION("SW2:!1,!2,!3")
+ PORT_DIPSETTING( 0x07, "55 30% 45" ) /* Displays 35% */
+ PORT_DIPSETTING( 0x06, "60 38% 50" ) /* Displays 40% */
+ PORT_DIPSETTING( 0x05, "65 46% 55" ) /* Displays 45% */
+ PORT_DIPSETTING( 0x04, "70 54% 60" ) /* Displays 50% */
+ PORT_DIPSETTING( 0x03, "75 62% 65" ) /* Displays 55% */
+ PORT_DIPSETTING( 0x02, "80 70% 70" ) /* Displays 60% */
+ PORT_DIPSETTING( 0x01, "85 78% 75" ) /* Displays 65% */
+ PORT_DIPSETTING( 0x00, "90 86% 80" ) /* Displays 70% */
+ PORT_DIPNAME( 0x18, 0x18, "Hopper Limit" ) PORT_DIPLOCATION("SW2:!4,!5")
+ PORT_DIPSETTING( 0x00, "300" )
+ PORT_DIPSETTING( 0x08, "500" )
+ PORT_DIPSETTING( 0x10, "1000" )
+ PORT_DIPSETTING( 0x18, "Unlimited" )
+ PORT_DIPNAME( 0x20, 0x20, "Sound On/Off Odds Over 100" ) PORT_DIPLOCATION("SW2:!6")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "Type Of Key In" ) PORT_DIPLOCATION("SW2:!7") /* Manual says C-Type/D-Type probably a typo */
+ PORT_DIPSETTING( 0x40, "A-Type" )
+ PORT_DIPSETTING( 0x00, "B-Type" )
+ PORT_DIPNAME( 0x80, 0x80, "Bet Limit For Center Super 7" ) PORT_DIPLOCATION("SW2:!8")
+ PORT_DIPSETTING( 0x00, "Unlimited" )
+ PORT_DIPSETTING( 0x80, "Limited" ) /* "Number is fixed by 4-6" */
+
+ PORT_START("DSW3")
+ PORT_DIPNAME( 0x03, 0x03, "Key In Rate" ) PORT_DIPLOCATION("SW3:1,2")
+ PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" ) PORT_CONDITION("DSW2",0x40,PORTCOND_EQUALS,0x40) // A-Type
+ PORT_DIPSETTING( 0x01, "1 Coin/20 Credits" ) PORT_CONDITION("DSW2",0x40,PORTCOND_EQUALS,0x40)
+ PORT_DIPSETTING( 0x02, "1 Coin/50 Credits" ) PORT_CONDITION("DSW2",0x40,PORTCOND_EQUALS,0x40)
+ PORT_DIPSETTING( 0x03, "1 Coin/100 Credits" ) PORT_CONDITION("DSW2",0x40,PORTCOND_EQUALS,0x40)
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) PORT_CONDITION("DSW2",0x40,PORTCOND_EQUALS,0x00) // B-Type
+ PORT_DIPSETTING( 0x01, "1 Coin/10 Credits" ) PORT_CONDITION("DSW2",0x40,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x02, "1 Coin/25 Credits" ) PORT_CONDITION("DSW2",0x40,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x03, "1 Coin/50 Credits" ) PORT_CONDITION("DSW2",0x40,PORTCOND_EQUALS,0x00)
+ PORT_DIPNAME( 0x0c, 0x0c, "Coin A Rate" ) PORT_DIPLOCATION("SW3:3,4")
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x0c, "1 Coin/10 Credits" )
+ PORT_DIPNAME( 0x30, 0x30, "Coin D Rate" ) PORT_DIPLOCATION("SW3:5,6")
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) PORT_CONDITION("DSW4",0x10,PORTCOND_EQUALS,0x00) // C-Type
+ PORT_DIPSETTING( 0x10, "1 Coin/10 Credits" ) PORT_CONDITION("DSW4",0x10,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x20, "1 Coin/25 Credits" ) PORT_CONDITION("DSW4",0x10,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x30, "1 Coin/50 Credits" ) PORT_CONDITION("DSW4",0x10,PORTCOND_EQUALS,0x00)
+ PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_CONDITION("DSW4",0x10,PORTCOND_EQUALS,0x10) // D-Type
+ PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSW4",0x10,PORTCOND_EQUALS,0x10)
+ PORT_DIPSETTING( 0x20, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSW4",0x10,PORTCOND_EQUALS,0x10)
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSW4",0x10,PORTCOND_EQUALS,0x10)
+ PORT_DIPNAME( 0xc0, 0xc0, "Coin C Rate" ) PORT_DIPLOCATION("SW3:7,8")
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
+
+ PORT_START("DSW4")
+ PORT_DIPNAME( 0x07, 0x07, "Credit Limit" ) PORT_DIPLOCATION("SW4:1,2,3")
+ PORT_DIPSETTING( 0x07, "5,000" )
+ PORT_DIPSETTING( 0x06, "10,000" )
+ PORT_DIPSETTING( 0x05, "20,000" )
+ PORT_DIPSETTING( 0x04, "30,000" )
+ PORT_DIPSETTING( 0x03, "40,000" )
+ PORT_DIPSETTING( 0x02, "50,000" )
+ PORT_DIPSETTING( 0x01, "100,000" )
+ PORT_DIPSETTING( 0x00, "Unlimited" )
+ PORT_DIPNAME( 0x08, 0x08, "Display Of Payout Limit" ) PORT_DIPLOCATION("SW4:4")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, "Type Of Coin D" ) PORT_DIPLOCATION("SW4:5")
+ PORT_DIPSETTING( 0x10, "C-Type" )
+ PORT_DIPSETTING( 0x00, "D-Type" )
+ PORT_DIPNAME( 0x20, 0x20, "Min. Bet For Bonus Play" ) PORT_DIPLOCATION("SW4:6")
+ PORT_DIPSETTING( 0x20, "16 Bet" )
+ PORT_DIPSETTING( 0x00, "8 Bet" )
+ PORT_DIPNAME( 0x40, 0x40, "Reel Speed" ) PORT_DIPLOCATION("SW4:7")
+ PORT_DIPSETTING( 0x40, DEF_STR( High ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Low ) )
+ PORT_DIPNAME( 0x80, 0x80, "Hopper Out By Coin A" ) PORT_DIPLOCATION("SW4:8")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("DSW5")
+ PORT_DIPNAME( 0x01, 0x01, "Display Of Doll On Demo" ) PORT_DIPLOCATION("SW5:1")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x06, 0x06, "Coin In Limit" ) PORT_DIPLOCATION("SW5:2,3")
+ PORT_DIPSETTING( 0x06, "1,000" )
+ PORT_DIPSETTING( 0x04, "5,000" )
+ PORT_DIPSETTING( 0x02, "10,000" )
+ PORT_DIPSETTING( 0x00, "20,000" )
+ PORT_DIPNAME( 0x18, 0x18, "Condition For 3 Kind Of Bonus" ) PORT_DIPLOCATION("SW5:4,5")
+ PORT_DIPSETTING( 0x18, "12-7-1" )
+ PORT_DIPSETTING( 0x10, "9-5-1" )
+ PORT_DIPSETTING( 0x08, "6-3-1" )
+ PORT_DIPSETTING( 0x00, "3-2-1" )
+ PORT_DIPNAME( 0x20, 0x20, "Display Of Doll At All Fr. Bonus" ) PORT_DIPLOCATION("SW5:6")
+ PORT_DIPSETTING( 0x20, DEF_STR( Low ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( High ) )
+ PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW5:7" ) /* Listed as "Unused" */
+ PORT_DIPNAME( 0x80, 0x80, "Test Mode For Disp. Of Doll" ) PORT_DIPLOCATION("SW5:8")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( goldstar )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -287,6 +534,34 @@ static const gfx_layout tilelayout_chry10 =
+static const gfx_layout tiles8x8x3_layout =
+{
+ 8,8,
+ RGN_FRAC(1,3),
+ 3,
+ { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
+ { 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 tiles8x32x4_layout =
+{
+ 8,32,
+ RGN_FRAC(1,4),
+ 4,
+ { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,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, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8,
+ 16*8,17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8,
+ 24*8,25*8, 26*8, 27*8, 28*8, 29*8, 30*8, 31*8
+ },
+ 32*8
+};
+
+
+
static GFXDECODE_START( goldstar )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
@@ -306,7 +581,10 @@ static GFXDECODE_START( chry10 )
GFXDECODE_ENTRY( "gfx2", 0, tilelayout_chry10, 128, 8 )
GFXDECODE_END
-
+static GFXDECODE_START( ncb3 )
+ GFXDECODE_ENTRY( "gfx1", 0, tiles8x8x3_layout, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0, tiles8x32x4_layout, 128+64, 4 )
+GFXDECODE_END
static const ay8910_interface ay8910_config =
{
@@ -322,8 +600,8 @@ static MACHINE_DRIVER_START( goldstar )
/* basic machine hardware */
MDRV_CPU_ADD("main", Z80, 3579545)//(4000000?)
- MDRV_CPU_PROGRAM_MAP(map,0)
- MDRV_CPU_IO_MAP(readport,0)
+ MDRV_CPU_PROGRAM_MAP(goldstar_map,0)
+ MDRV_CPU_IO_MAP(goldstar_readport,0)
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
/* video hardware */
@@ -358,8 +636,8 @@ static MACHINE_DRIVER_START( goldstbl )
/* basic machine hardware */
MDRV_CPU_ADD("main", Z80, 3579545)//(4000000?)
- MDRV_CPU_PROGRAM_MAP(map,0)
- MDRV_CPU_IO_MAP(readport,0)
+ MDRV_CPU_PROGRAM_MAP(goldstar_map,0)
+ MDRV_CPU_IO_MAP(goldstar_readport,0)
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
/* video hardware */
@@ -393,8 +671,8 @@ static MACHINE_DRIVER_START( moonlght )
/* basic machine hardware */
MDRV_CPU_ADD("main", Z80, 3579545)//(4000000?)
- MDRV_CPU_PROGRAM_MAP(map,0)
- MDRV_CPU_IO_MAP(readport,0)
+ MDRV_CPU_PROGRAM_MAP(goldstar_map,0)
+ MDRV_CPU_IO_MAP(goldstar_readport,0)
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
/* video hardware */
@@ -429,8 +707,8 @@ static MACHINE_DRIVER_START( chry10 )
/* basic machine hardware */
MDRV_CPU_ADD("main", Z80, 3579545)//(4000000?)
- MDRV_CPU_PROGRAM_MAP(map,0)
- MDRV_CPU_IO_MAP(readport,0)
+ MDRV_CPU_PROGRAM_MAP(goldstar_map,0)
+ MDRV_CPU_IO_MAP(goldstar_readport,0)
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
/* video hardware */
@@ -461,6 +739,94 @@ MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( ncb3 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD("main", Z80, 3579545)//(4000000?)
+ MDRV_CPU_PROGRAM_MAP(ncb3_map,0)
+ MDRV_CPU_IO_MAP(goldstar_readport,0)
+ MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
+
+ /* video hardware */
+ MDRV_SCREEN_ADD("main", 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_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("ay", AY8910,1500000)
+ MDRV_SOUND_CONFIG(ay8910_config)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+MACHINE_DRIVER_END
+
+// wrong
+static PALETTE_INIT(cm)
+{
+ int i;
+ for (i=0;i<0x100;i++)
+ {
+ int r,g,b;
+ UINT8 dat;
+
+ UINT8*proms = memory_region(machine, "proms");
+
+ dat = proms[0x000+i] | (proms[0x100+i]<<4);
+
+ r = (dat & 0x07) << 5;
+ g = (dat & 0x38) << 2;
+ b = (dat & 0xc0) << 0;
+
+ palette_set_color(machine, i, MAKE_RGB(r, g, b));
+
+ }
+}
+static MACHINE_DRIVER_START( cm )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD("main", Z80, 3579545)//(4000000?)
+ MDRV_CPU_PROGRAM_MAP(cm_map,0)
+ MDRV_CPU_IO_MAP(cm_portmap,0)
+ MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
+
+ /* video hardware */
+ MDRV_SCREEN_ADD("main", 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_GFXDECODE(ncb3)
+ MDRV_PALETTE_LENGTH(256)
+ MDRV_PALETTE_INIT(cm)
+// MDRV_NVRAM_HANDLER(goldstar)
+
+ MDRV_VIDEO_START(goldstar)
+ MDRV_VIDEO_UPDATE(cherrym)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_MONO("mono")//set up a standard mono speaker called 'mono'
+ MDRV_SOUND_ADD("ay", AY8910,1500000)//1 AY8910, at clock 150000Hz
+ MDRV_SOUND_CONFIG(ay8910_config)//read extra data from interface
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)//all sound goes to the 'mono' speaker, at 0.50 X maximum
+
+ MDRV_SOUND_ADD("oki", OKIM6295, 1056000)//clock
+ MDRV_SOUND_CONFIG(okim6295_interface_pin7high) // clock frequency & pin 7 not verified //"oki"
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)//all sound goes to the 'mono' speaker, at 1.0 X maximum
+MACHINE_DRIVER_END
+
+
/***************************************************************************
Game driver(s)
@@ -643,6 +1009,118 @@ ROM_START( moonlght )
ROM_END
+ROM_START( ncb3 )
+ ROM_REGION( 0x10000, "main", 0 )
+ ROM_LOAD( "8.512", 0x00000, 0x10000, CRC(1f669cd0) SHA1(fd394119e33c017507fde87a710577e37dcdec07) )
+
+ ROM_REGION( 0x18000, "gfx1", 0 )
+ ROM_LOAD( "2.256", 0x00000, 0x08000, CRC(83650a94) SHA1(e79420ab559d3f74013708767ca3f238fd333fb7) )
+ ROM_LOAD( "3.256", 0x08000, 0x08000, CRC(2f46a3f5) SHA1(3e6022ee8f84039e48f41aea5e68ee28aabdc556) )
+ //ROM_LOAD( "4.256", 0x10000, 0x08000, BAD_DUMP CRC(a390f1f2) SHA1(0a04a5af51f91f04773125f703c7cd3397d192f2) ) // FIXED BITS (xxxx1xxx) - use main_7.256 from set below instead?
+ ROM_LOAD( "main_7.256", 0x10000, 0x08000, CRC(dcf97517) SHA1(0a29696e0464c8878c499b1786a17080fd088a72) )
+
+ ROM_REGION( 0x8000, "gfx2", 0 )
+ ROM_LOAD( "1.764", 0x00000, 0x02000, CRC(cbcc6bfb) SHA1(5bafc934fef1f50d8c182c39d3a7ce795c89d175) )
+ ROM_LOAD( "5.764", 0x02000, 0x02000, CRC(91162010) SHA1(3acc21e7074602b247f2f392eb181802092d2f21) )
+ ROM_LOAD( "6.764", 0x04000, 0x02000, CRC(e73ea4e3) SHA1(c9fd56461f6986d6bc170403d298fcc408a524e9) )
+ ROM_LOAD( "7.764", 0x06000, 0x02000, CRC(7cc6d26b) SHA1(de33e8985affce7bd3ead89463117c9aaa93d5e4) )
+
+ ROM_REGION( 0x0200, "prom", ROMREGION_DISPOSE )
+ /* prom missing? */
+
+ ROM_REGION( 0x20000, "oki", ROMREGION_ERASE00 )
+ /* no oki on this pcb? */
+ROM_END
+
+/*
+mame -romident cb3.zip
+cpu_u6.512 NO MATCH
+main_3.764 = 5.764 New Cherry Bonus 3
+main_4.764 = 1.764 New Cherry Bonus 3
+main_5.256 = 2.256 New Cherry Bonus 3
+main_6.256 = 3.256 New Cherry Bonus 3
+main_7.256 NO MATCH
+
+C:\mame061208>src\mame\mamedriv.c
+
+*/
+
+ROM_START( cb3 )
+ ROM_REGION( 0x10000, "main", 0 )
+ ROM_LOAD( "cpu_u6.512", 0x00000, 0x10000, CRC(d17c936b) SHA1(bf90edd214118116da675bcfca41247d5891ac90) ) // encrypted??
+
+ ROM_REGION( 0x18000, "gfx1", 0 )
+ ROM_LOAD( "main_5.256", 0x00000, 0x08000, CRC(83650a94) SHA1(e79420ab559d3f74013708767ca3f238fd333fb7) )
+ ROM_LOAD( "main_6.256", 0x08000, 0x08000, CRC(2f46a3f5) SHA1(3e6022ee8f84039e48f41aea5e68ee28aabdc556) )
+ ROM_LOAD( "main_7.256", 0x10000, 0x08000, CRC(dcf97517) SHA1(0a29696e0464c8878c499b1786a17080fd088a72) )
+
+ ROM_REGION( 0x8000, "gfx2", 0 )
+ ROM_LOAD( "main_4.764", 0x00000, 0x02000, CRC(cbcc6bfb) SHA1(5bafc934fef1f50d8c182c39d3a7ce795c89d175) )
+ ROM_LOAD( "main_3.764", 0x02000, 0x02000, CRC(91162010) SHA1(3acc21e7074602b247f2f392eb181802092d2f21) )
+ /* 2 roms missing - roms below taken from above set */
+ ROM_LOAD( "6.764", 0x04000, 0x02000, CRC(e73ea4e3) SHA1(c9fd56461f6986d6bc170403d298fcc408a524e9) )
+ ROM_LOAD( "7.764", 0x06000, 0x02000, CRC(7cc6d26b) SHA1(de33e8985affce7bd3ead89463117c9aaa93d5e4) )
+
+ ROM_REGION( 0x0200, "prom", ROMREGION_DISPOSE )
+ /* prom missing? */
+
+ ROM_REGION( 0x20000, "oki", ROMREGION_ERASE00 )
+ /* no oki on this pcb? */
+ROM_END
+
+
+
+ROM_START( cmv801 )
+ ROM_REGION( 0x10000, "main", 0 )
+ ROM_LOAD( "prg512", 0x0000, 0x10000, CRC(2f6e3fe9) SHA1(c5ffa51478a0dc2d8ff6a0f286cfb461011bb55d) )
+
+ ROM_REGION( 0x18000, "gfx1", ROMREGION_DISPOSE )
+ ROM_LOAD( "m5.256", 0x00000, 0x8000, CRC(19cc1d67) SHA1(47487f9362bfb36a32100ed772960628844462bf) )
+ ROM_LOAD( "m6.256", 0x08000, 0x8000, CRC(63b3df4e) SHA1(9bacd23da598805ec18ec5ad15cab95d71eb9262) )
+ ROM_LOAD( "m7.256", 0x10000, 0x8000, CRC(e39fff9c) SHA1(22fdc517fa478441622c6245cecb5728c5595757) )
+
+ ROM_REGION( 0x8000, "gfx2", ROMREGION_DISPOSE )
+ ROM_LOAD( "m1.64", 0x0000, 0x2000, CRC(6dfcb188) SHA1(22430429c798954d9d979e62699b58feae7fdbf4) )
+ ROM_LOAD( "m2.64", 0x2000, 0x2000, CRC(9678ead2) SHA1(e80aefa98b2363fe9e6b2415762695ace272e4d3) )
+ ROM_LOAD( "m3.64", 0x4000, 0x2000, CRC(8607ffd9) SHA1(9bc94715554aa2473ae2ed249a47f29c7886b3dc) )
+ ROM_LOAD( "m4.64", 0x6000, 0x2000, CRC(c32367be) SHA1(ff217021b9c58e23b2226f8b0a7f5da966225715) )
+
+ ROM_REGION( 0x200, "proms", 0 ) // pal
+ ROM_LOAD( "prom2.287", 0x0000, 0x0100, CRC(0489b760) SHA1(78f8632b17a76335183c5c204cdec856988368b0) )
+ ROM_LOAD( "prom3.287", 0x0100, 0x0100, CRC(21eb5b19) SHA1(9b8425bdb97f11f4855c998c7792c3291fd07470) )
+
+ ROM_REGION( 0x100, "proms2", 0 ) // something else?
+ ROM_LOAD( "prom1.287", 0x0000, 0x0100, CRC(50ec383b) SHA1(ae95b92bd3946b40134bcdc22708d5c6b0f4c23e) )
+ROM_END
+
+// this is probably different hardware..
+ROM_START( cmaster )
+ ROM_REGION( 0x10000, "main", 0 )
+ ROM_LOAD( "8.bin", 0x00000, 0x10000, CRC(31a16d9f) SHA1(f007148449d66954b780f12a9f910968a4052482) )
+
+ ROM_REGION( 0x40000, "user1", 0 )
+ ROM_LOAD( "9.bin", 0x00000, 0x40000, CRC(92342276) SHA1(f9436752f2ec67cf873fd01c729c7c113dc18be0) ) // ?
+
+ ROM_REGION( 0x18000, "gfx1", ROMREGION_DISPOSE )
+ ROM_LOAD( "5.bin", 0x00000, 0x8000, CRC(28ff88cc) SHA1(46bc0407be857e8348159735b60cfb660f047a56) )
+ ROM_LOAD( "6.bin", 0x08000, 0x8000, CRC(13582e74) SHA1(27e318542606b8e8d38250749ba996402d314abd) )
+ ROM_LOAD( "7.bin", 0x10000, 0x8000, CRC(1edf1f1d) SHA1(558fa01f1efd7f6541047d3930bdce0974bae5b0))
+
+ ROM_REGION( 0x20000, "gfx2", ROMREGION_DISPOSE )
+ ROM_LOAD( "1.bin", 0x0000, 0x8000, CRC(71bdab69) SHA1(d2c594ed88d6368df15b623c48eecc1c219b839e) )
+ ROM_LOAD( "2.bin", 0x8000, 0x8000, CRC(fccd48d7) SHA1(af564f5ef9ff5b6363897ce6bdf0b21123911fd4) )
+ ROM_LOAD( "3.bin", 0x10000, 0x8000, CRC(dc77d04a) SHA1(d8656130cde54d4bb96307899f6d607867e49e6c) )
+ ROM_LOAD( "4.bin", 0x18000, 0x8000, CRC(0dbabaa2) SHA1(44235b19dac1c996e2166672b03f6e3888ecbefa) )
+
+ ROM_REGION( 0x400, "proms", 0 )
+ ROM_LOAD( "p1.bin", 0x0000, 0x0100, CRC(ac529f04) SHA1(5bc92e50c85bb23e609172cc15c430ddea7fdcb5) )
+ ROM_LOAD( "p2.bin", 0x0100, 0x0100, CRC(3febce95) SHA1(c7c0fec0fb024ebf7d7365a09d28ba3d0037b0b4) )
+ ROM_LOAD( "p3.bin", 0x0200, 0x0100, CRC(99dbdf19) SHA1(3680335406f63289f8d9a81b4cd163e4aa0c14d4) )
+ ROM_LOAD( "p4.bin", 0x0300, 0x0100, CRC(72212427) SHA1(e87a91f28284313c706ebb8175a3586780636e31) )
+ROM_END
+
+
+
static DRIVER_INIT(goldstar)
{
int A;
@@ -659,18 +1137,44 @@ static DRIVER_INIT(goldstar)
static DRIVER_INIT( chry10 )
{
+ // probably has the same block swapping as chryigld below, but data swap is different
+}
+
+static DRIVER_INIT( chryigld )
+{
int A;
UINT8 *ROM = memory_region(machine, "main");
UINT8 *buffer;
+
+ static UINT16 cherry_swaptables[32] = {
+ /* to align with goldstar */
+ 0x0800, 0x4000, 0x2800, 0x5800,
+ 0x1800, 0x3000, 0x6800, 0x7000,
+ 0x0000, 0x4800, 0x2000, 0x5000,
+ 0x1000, 0x7800, 0x6000, 0x3800,
+ /* bit below, I'm not sure, no match */
+ 0xc000, 0xc800, 0xd000, 0xd800,
+ 0xe000, 0xe800, 0xf000, 0xf800,
+ 0x8000, 0x8800, 0x9000, 0x9800,
+ 0xa000, 0xa800, 0xb000, 0xb800,
+ };
+
buffer = malloc(0x10000);
- // there is more to this..
+ // a data bitswap (this is correct for chryigld, not chry10)
for (A = 0;A < 0x10000;A++)
{
- buffer[A^0x800] = ROM[A];
+ UINT8 dat = ROM[A];
+ dat = BITSWAP8(dat,5,6,3,4,7,2,1,0);
+ buffer[A] = dat;
+ }
+
+ // swap some 0x800 blocks around..
+ for (A =0;A<32; A++)
+ {
+ memcpy(ROM+A*0x800,buffer+cherry_swaptables[A],0x800);
}
- memcpy(ROM,buffer,0x10000);
free(buffer);
#if 0
@@ -686,8 +1190,6 @@ static DRIVER_INIT( chry10 )
}
}
#endif
-
- // these are scrambled, 0x800 should go at 0x000, data seems swapped too
}
@@ -695,4 +1197,12 @@ GAME( 199?, goldstar, 0, goldstar, goldstar, goldstar, ROT0, "IGS", "Gold
GAME( 199?, goldstbl, goldstar, goldstbl, goldstar, 0, ROT0, "IGS", "Golden Star (Blue version)", 0 )
GAME( 199?, moonlght, goldstar, moonlght, goldstar, 0, ROT0, "bootleg", "Moon Light (bootleg of Golden Star)", 0 )
GAME( 199?, chry10, goldstar, chry10, goldstar, chry10, ROT0, "bootleg", "Cherry 10 (bootleg of Golden Star)", GAME_NOT_WORKING )
-GAME( 199?, chryigld, goldstar, chry10, goldstar, chry10, ROT0, "bootleg", "Cherry I Gold (bootleg of Golden Star)", GAME_NOT_WORKING )
+GAME( 199?, chryigld, goldstar, chry10, goldstar, chryigld, ROT0, "bootleg", "Cherry I Gold (bootleg of Golden Star)", GAME_NOT_WORKING )
+
+// are these really dyna, or bootlegs?
+GAME( 19??, ncb3, goldstar, ncb3, goldstar, 0, ROT0, "Dyna", "(New?) Cherry Bonus III", GAME_NOT_WORKING | GAME_NO_SOUND ) // set was labeled 'new cherry bonus 3' but there is no 'new' in the gfx roms
+GAME( 19??, cb3, goldstar, ncb3, goldstar, 0, ROT0, "Dyna", "Cherry Bonus III", GAME_NOT_WORKING | GAME_NO_SOUND )
+
+// cherry master hardware has a rather different mem map, but is basically the same
+GAME( 198?, cmv801, 0, cm, cmv801, 0, ROT0, "Corsica", "Cherry Master (Corsica, v8.01)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_NOT_WORKING ) // says ED-96 where the manufacturer is on some games..
+GAME( 1991, cmaster, 0, cm, cmv801, 0, ROT0, "Dyna", "Cherry Master 91?", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_NOT_WORKING ) // different HW? closer to cherry master 2?
diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c
index faa3ce56732..159fbbff1de 100644
--- a/src/mame/mamedriv.c
+++ b/src/mame/mamedriv.c
@@ -7397,6 +7397,10 @@ Other Sun games
DRIVER( moonlght ) /* bootleg */
DRIVER( chry10 ) /* bootleg */
DRIVER( chryigld ) /* bootleg */
+ DRIVER( ncb3 ) /* (c) 19?? Dyna/bootleg? */
+ DRIVER( cb3 ) /* (c) 19?? Dyna/bootleg? */
+ DRIVER( cmv801 ) /* (c) 198? Corsica */
+ DRIVER( cmaster ) /* (c) 1991 Dyna */
DRIVER( cpoker ) /* (c) 1993? IGS */
DRIVER( cpokert ) /* (c) 1993? Tuning */
DRIVER( csk227it ) /* (c) 198? IGS */
diff --git a/src/mame/video/goldstar.c b/src/mame/video/goldstar.c
index ff69a211134..dff5d640098 100644
--- a/src/mame/video/goldstar.c
+++ b/src/mame/video/goldstar.c
@@ -12,9 +12,9 @@
UINT8 *goldstar_video1, *goldstar_video2, *goldstar_video3;
size_t goldstar_video_size;
-UINT8 *goldstar_scroll1, *goldstar_scroll2, *goldstar_scroll3;
+UINT8 *goldstar_reel1_scroll, *goldstar_reel2_scroll, *goldstar_reel3_scroll;
-static bitmap_t *tmpbitmap1, *tmpbitmap2, *tmpbitmap3, *tmpbitmap4;
+static bitmap_t *tmpbitmap4;
static int bgcolor;
@@ -24,15 +24,81 @@ static int bgcolor;
Start the video hardware emulation.
***************************************************************************/
-VIDEO_START( goldstar )
+static tilemap *reel1_tilemap;
+UINT8 *goldstar_reel1_ram;
+
+WRITE8_HANDLER( goldstar_reel1_ram_w )
+{
+ goldstar_reel1_ram[offset] = data;
+ tilemap_mark_tile_dirty(reel1_tilemap,offset);
+}
+
+static TILE_GET_INFO( get_reel1_tile_info )
+{
+ int code = goldstar_reel1_ram[tile_index];
+
+ SET_TILE_INFO(
+ 1,
+ code,
+ bgcolor,
+ 0);
+}
+
+
+static tilemap *reel2_tilemap;
+UINT8 *goldstar_reel2_ram;
+
+WRITE8_HANDLER( goldstar_reel2_ram_w )
+{
+ goldstar_reel2_ram[offset] = data;
+ tilemap_mark_tile_dirty(reel2_tilemap,offset);
+}
+
+static TILE_GET_INFO( get_reel2_tile_info )
+{
+ int code = goldstar_reel2_ram[tile_index];
+
+ SET_TILE_INFO(
+ 1,
+ code,
+ bgcolor,
+ 0);
+}
+
+static tilemap *reel3_tilemap;
+UINT8 *goldstar_reel3_ram;
+
+WRITE8_HANDLER( goldstar_reel3_ram_w )
{
-// int i;
+ goldstar_reel3_ram[offset] = data;
+ tilemap_mark_tile_dirty(reel3_tilemap,offset);
+}
+
+static TILE_GET_INFO( get_reel3_tile_info )
+{
+ int code = goldstar_reel3_ram[tile_index];
- /* the background area is half as high as the screen */
- tmpbitmap1 = video_screen_auto_bitmap_alloc(machine->primary_screen);
- tmpbitmap2 = video_screen_auto_bitmap_alloc(machine->primary_screen);
- tmpbitmap3 = video_screen_auto_bitmap_alloc(machine->primary_screen);
+ SET_TILE_INFO(
+ 1,
+ code,
+ bgcolor,
+ 0);
+}
+
+
+
+VIDEO_START( goldstar )
+{
tmpbitmap4 = video_screen_auto_bitmap_alloc(machine->primary_screen);
+
+ reel1_tilemap = tilemap_create(machine,get_reel1_tile_info,tilemap_scan_rows,8,32, 64, 8);
+ reel2_tilemap = tilemap_create(machine,get_reel2_tile_info,tilemap_scan_rows,8,32, 64, 8);
+ reel3_tilemap = tilemap_create(machine,get_reel3_tile_info,tilemap_scan_rows,8,32, 64, 8);
+
+ tilemap_set_scroll_cols(reel1_tilemap, 64);
+ tilemap_set_scroll_cols(reel2_tilemap, 64);
+ tilemap_set_scroll_cols(reel3_tilemap, 64);
+
}
@@ -47,7 +113,7 @@ WRITE8_HANDLER( goldstar_fa00_w )
}
-
+// are these hardcoded, or registers?
static const rectangle visible1 = { 14*8, (14+48)*8-1, 4*8, (4+7)*8-1 };
static const rectangle visible2 = { 14*8, (14+48)*8-1, 12*8, (12+7)*8-1 };
static const rectangle visible3 = { 14*8, (14+48)*8-1, 20*8, (20+7)*8-1 };
@@ -56,6 +122,21 @@ static const rectangle visible3 = { 14*8, (14+48)*8-1, 20*8, (20+7)*8-1 };
VIDEO_UPDATE( goldstar )
{
int offs;
+ int i;
+
+ bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
+
+ for (i= 0;i < 64;i++)
+ {
+ tilemap_set_scrolly(reel1_tilemap, i, goldstar_reel1_scroll[i]);
+ tilemap_set_scrolly(reel2_tilemap, i, goldstar_reel2_scroll[i]);
+ tilemap_set_scrolly(reel3_tilemap, i, goldstar_reel3_scroll[i]);
+ }
+
+ tilemap_draw(bitmap,&visible1,reel1_tilemap,0,0);
+ tilemap_draw(bitmap,&visible2,reel2_tilemap,0,0);
+ tilemap_draw(bitmap,&visible3,reel3_tilemap,0,0);
+
for (offs = videoram_size - 1;offs >= 0;offs--)
@@ -66,65 +147,51 @@ VIDEO_UPDATE( goldstar )
sx = offs % 64;
sy = offs / 64;
- drawgfx(tmpbitmap4,screen->machine->gfx[0],
+ drawgfx(bitmap,screen->machine->gfx[0],
videoram[offs] + ((colorram[offs] & 0xf0) << 4),
colorram[offs] & 0x0f,
0,0,
8*sx,8*sy,
- 0,TRANSPARENCY_NONE,0);
+ 0,TRANSPARENCY_PEN,0);
}
- copybitmap(bitmap,tmpbitmap4,0,0,0,0,cliprect);
-
-
- for (offs = goldstar_video_size - 1;offs >= 0;offs--)
- {
- int sx = offs % 64;
- int sy = offs / 64;
-
+ return 0;
+}
- drawgfx(tmpbitmap1,screen->machine->gfx[1],
- goldstar_video1[offs],
- bgcolor,
- 0,0,
- sx*8,sy*32,
- 0,TRANSPARENCY_NONE,0);
- drawgfx(tmpbitmap2,screen->machine->gfx[1],
- goldstar_video2[offs],
- bgcolor,
- 0,0,
- sx*8,sy*32,
- 0,TRANSPARENCY_NONE,0);
+VIDEO_UPDATE( cherrym )
+{
+ int offs;
+ int i;
- drawgfx(tmpbitmap3,screen->machine->gfx[1],
- goldstar_video3[offs],
- bgcolor,
- 0,0,
- sx*8,sy*32,
- 0,TRANSPARENCY_NONE,0);
- }
+ bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
+ for (i= 0;i < 64;i++)
{
- int i,scrolly[64];
-
- for (i= 0;i < 64;i++)
- scrolly[i] = -goldstar_scroll1[i];
+ tilemap_set_scrolly(reel1_tilemap, i, goldstar_reel1_scroll[i]);
+ tilemap_set_scrolly(reel2_tilemap, i, goldstar_reel2_scroll[i]);
+ tilemap_set_scrolly(reel3_tilemap, i, goldstar_reel3_scroll[i]);
+ }
- copyscrollbitmap(bitmap,tmpbitmap1,0,0,64,scrolly,&visible1);
- copybitmap_trans(bitmap,tmpbitmap4,0,0,0,0,&visible1,0);
+ tilemap_draw(bitmap,&visible1,reel1_tilemap,0,0);
+ tilemap_draw(bitmap,&visible2,reel2_tilemap,0,0);
+ tilemap_draw(bitmap,&visible3,reel3_tilemap,0,0);
- for (i= 0;i < 64;i++)
- scrolly[i] = -goldstar_scroll2[i];
+ for (offs = videoram_size - 1;offs >= 0;offs--)
+ {
+ int sx,sy;
- copyscrollbitmap(bitmap,tmpbitmap2,0,0,64,scrolly,&visible2);
- copybitmap_trans(bitmap,tmpbitmap4,0,0,0,0,&visible2,0);
- for (i= 0;i < 64;i++)
- scrolly[i] = -goldstar_scroll3[i];
+ sx = offs % 64;
+ sy = offs / 64;
- copyscrollbitmap(bitmap,tmpbitmap3,0,0,64,scrolly,&visible3);
- copybitmap_trans(bitmap,tmpbitmap4,0,0,0,0,&visible3,0);
+ drawgfx(bitmap,screen->machine->gfx[0],
+ videoram[offs] + ((colorram[offs] & 0x0f) << 8),
+ (colorram[offs] & 0xf0)>>4,
+ 0,0,
+ 8*sx,8*sy,
+ 0,TRANSPARENCY_PEN,0);
}
+
return 0;
}