-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.
This commit is contained in:
Aaron Giles 2008-12-15 01:05:48 +00:00
parent 6b4efba253
commit 1f54995066
3 changed files with 671 additions and 90 deletions

View File

@ -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
static ADDRESS_MAP_START( readport, ADDRESS_SPACE_IO, 8 )
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( 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;
@ -658,19 +1136,45 @@ 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?

View File

@ -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 */

View File

@ -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.
***************************************************************************/
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 )
{
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];
SET_TILE_INFO(
1,
code,
bgcolor,
0);
}
VIDEO_START( goldstar )
{
// int i;
/* 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);
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);
}
return 0;
}
VIDEO_UPDATE( cherrym )
{
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--)
{
int sx,sy;
sx = offs % 64;
sy = offs / 64;
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);
}
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;
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);
drawgfx(tmpbitmap3,screen->machine->gfx[1],
goldstar_video3[offs],
bgcolor,
0,0,
sx*8,sy*32,
0,TRANSPARENCY_NONE,0);
}
{
int i,scrolly[64];
for (i= 0;i < 64;i++)
scrolly[i] = -goldstar_scroll1[i];
copyscrollbitmap(bitmap,tmpbitmap1,0,0,64,scrolly,&visible1);
copybitmap_trans(bitmap,tmpbitmap4,0,0,0,0,&visible1,0);
for (i= 0;i < 64;i++)
scrolly[i] = -goldstar_scroll2[i];
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];
copyscrollbitmap(bitmap,tmpbitmap3,0,0,64,scrolly,&visible3);
copybitmap_trans(bitmap,tmpbitmap4,0,0,0,0,&visible3,0);
}
return 0;
}