From ad354d52ac3f6ce1c12cf666d20c055e853c5f0a Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Mon, 9 Mar 2015 15:38:03 +1100 Subject: [PATCH] Move Wing Co stuff out to a different class --- src/mame/drivers/goldstar.c | 154 +++++++------------- src/mame/includes/goldstar.h | 71 ++++++---- src/mame/video/goldstar.c | 264 ++++++++++++++++++----------------- 3 files changed, 228 insertions(+), 261 deletions(-) diff --git a/src/mame/drivers/goldstar.c b/src/mame/drivers/goldstar.c index 0df9bcae220..4d0d5ce7cc8 100644 --- a/src/mame/drivers/goldstar.c +++ b/src/mame/drivers/goldstar.c @@ -785,7 +785,7 @@ static ADDRESS_MAP_START( lucky8_map, AS_PROGRAM, 8, goldstar_state ) AM_RANGE(0xf800, 0xffff) AM_RAM ADDRESS_MAP_END -WRITE8_MEMBER(goldstar_state::magodds_outb850_w) +WRITE8_MEMBER(wingco_state::magodds_outb850_w) { // guess, could be wrong, this might just be lights @@ -801,12 +801,12 @@ WRITE8_MEMBER(goldstar_state::magodds_outb850_w) } -WRITE8_MEMBER(goldstar_state::magodds_outb860_w) +WRITE8_MEMBER(wingco_state::magodds_outb860_w) { // popmessage("magodds_outb860_w %02x\n", data); } -static ADDRESS_MAP_START(magodds_map, AS_PROGRAM, 8, goldstar_state ) +static ADDRESS_MAP_START( magodds_map, AS_PROGRAM, 8, wingco_state ) 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_SHARE("nvram") @@ -958,7 +958,7 @@ WRITE8_MEMBER(unkch_state::unkcm_0x03_w) { //popmessage("unkcm_0x03_w %02x", data); - m_unkch_vidreg = data; + m_vidreg = data; // -x-- ---- seems to toggle when a 'normal' tilemap should be displayed instead of the reels? } @@ -7477,22 +7477,22 @@ static GFXDECODE_START( cm97 ) GFXDECODE_END -WRITE8_MEMBER(goldstar_state::system_outputa_w) +WRITE8_MEMBER(wingco_state::system_outputa_w) { //popmessage("system_outputa_w %02x",data); } -WRITE8_MEMBER(goldstar_state::system_outputb_w) +WRITE8_MEMBER(wingco_state::system_outputb_w) { //popmessage("system_outputb_w %02x",data); } -WRITE8_MEMBER(goldstar_state::system_outputc_w) +WRITE8_MEMBER(wingco_state::system_outputc_w) { - m_lucky8_nmi_enable = data & 8; - m_unkch_vidreg = data & 2; + m_nmi_enable = data & 8; + m_vidreg = data & 2; //popmessage("system_outputc_w %02x",data); } @@ -7763,7 +7763,7 @@ PALETTE_INIT_MEMBER(goldstar_state,cmast91) } } -PALETTE_INIT_MEMBER(goldstar_state,lucky8) +PALETTE_INIT_MEMBER(goldstar_state, lucky8) { /* BBGGGRRR */ @@ -8171,19 +8171,19 @@ static MACHINE_CONFIG_START( cmast91, goldstar_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END -INTERRUPT_GEN_MEMBER(goldstar_state::lucky8_irq) +INTERRUPT_GEN_MEMBER(wingco_state::masked_irq) { - if(m_lucky8_nmi_enable) + if (m_nmi_enable) device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); } -static MACHINE_CONFIG_START( lucky8, goldstar_state ) +static MACHINE_CONFIG_START( lucky8, wingco_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) MCFG_CPU_PROGRAM_MAP(lucky8_map) //MCFG_CPU_IO_MAP(goldstar_readport) - MCFG_CPU_VBLANK_INT_DRIVER("screen", goldstar_state, lucky8_irq) + MCFG_CPU_VBLANK_INT_DRIVER("screen", wingco_state, masked_irq) MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0) MCFG_I8255_IN_PORTA_CB(IOPORT("IN0")) @@ -8197,9 +8197,9 @@ static MACHINE_CONFIG_START( lucky8, goldstar_state ) MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0) MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2")) - MCFG_I8255_OUT_PORTA_CB(WRITE8(goldstar_state, system_outputa_w)) - MCFG_I8255_OUT_PORTB_CB(WRITE8(goldstar_state, system_outputb_w)) - MCFG_I8255_OUT_PORTC_CB(WRITE8(goldstar_state, system_outputc_w)) + MCFG_I8255_OUT_PORTA_CB(WRITE8(wingco_state, system_outputa_w)) + MCFG_I8255_OUT_PORTB_CB(WRITE8(wingco_state, system_outputb_w)) + MCFG_I8255_OUT_PORTC_CB(WRITE8(wingco_state, system_outputc_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -8213,7 +8213,7 @@ static MACHINE_CONFIG_START( lucky8, goldstar_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ncb3) MCFG_PALETTE_ADD("palette", 256) MCFG_PALETTE_FORMAT(BBGGGRRR) - MCFG_PALETTE_INIT_OWNER(goldstar_state,lucky8) + MCFG_PALETTE_INIT_OWNER(goldstar_state, lucky8) MCFG_NVRAM_ADD_1FILL("nvram") MCFG_VIDEO_START_OVERRIDE(goldstar_state,goldstar) @@ -8232,13 +8232,13 @@ static MACHINE_CONFIG_START( lucky8, goldstar_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( bingowng, goldstar_state ) +static MACHINE_CONFIG_START( bingowng, wingco_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) MCFG_CPU_PROGRAM_MAP(lucky8_map) //MCFG_CPU_IO_MAP(goldstar_readport) - MCFG_CPU_VBLANK_INT_DRIVER("screen", goldstar_state, lucky8_irq) + MCFG_CPU_VBLANK_INT_DRIVER("screen", wingco_state, masked_irq) MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0) MCFG_I8255_IN_PORTA_CB(IOPORT("IN0")) @@ -8252,9 +8252,9 @@ static MACHINE_CONFIG_START( bingowng, goldstar_state ) MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0) MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2")) - MCFG_I8255_OUT_PORTA_CB(WRITE8(goldstar_state, system_outputa_w)) - MCFG_I8255_OUT_PORTB_CB(WRITE8(goldstar_state, system_outputb_w)) - MCFG_I8255_OUT_PORTC_CB(WRITE8(goldstar_state, system_outputc_w)) + MCFG_I8255_OUT_PORTA_CB(WRITE8(wingco_state, system_outputa_w)) + MCFG_I8255_OUT_PORTB_CB(WRITE8(wingco_state, system_outputb_w)) + MCFG_I8255_OUT_PORTC_CB(WRITE8(wingco_state, system_outputc_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -8262,7 +8262,7 @@ static MACHINE_CONFIG_START( bingowng, goldstar_state ) // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_bingowng) + MCFG_SCREEN_UPDATE_DRIVER(wingco_state, screen_update_bingowng) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", ncb3) @@ -8270,7 +8270,7 @@ static MACHINE_CONFIG_START( bingowng, goldstar_state ) MCFG_PALETTE_INIT_OWNER(goldstar_state,lucky8) MCFG_NVRAM_ADD_1FILL("nvram") - MCFG_VIDEO_START_OVERRIDE(goldstar_state,bingowng) + MCFG_VIDEO_START_OVERRIDE(wingco_state, bingowng) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -8286,61 +8286,11 @@ static MACHINE_CONFIG_START( bingowng, goldstar_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( bingownga, goldstar_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_CPU_PROGRAM_MAP(lucky8_map) - //MCFG_CPU_IO_MAP(goldstar_readport) - MCFG_CPU_VBLANK_INT_DRIVER("screen", goldstar_state, lucky8_irq) - - MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0) - MCFG_I8255_IN_PORTA_CB(IOPORT("IN0")) - MCFG_I8255_IN_PORTB_CB(IOPORT("IN1")) - MCFG_I8255_IN_PORTC_CB(IOPORT("IN2")) - - MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - MCFG_I8255_IN_PORTA_CB(IOPORT("IN3")) - MCFG_I8255_IN_PORTB_CB(IOPORT("IN4")) - MCFG_I8255_IN_PORTC_CB(IOPORT("DSW1")) - - MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0) - MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2")) - MCFG_I8255_OUT_PORTA_CB(WRITE8(goldstar_state, system_outputa_w)) - MCFG_I8255_OUT_PORTB_CB(WRITE8(goldstar_state, system_outputb_w)) - MCFG_I8255_OUT_PORTC_CB(WRITE8(goldstar_state, system_outputc_w)) - - /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_bingowng) - MCFG_SCREEN_PALETTE("palette") - - MCFG_GFXDECODE_ADD("gfxdecode", "palette", bingownga) /* GFX Decode is the only difference with the parent machine */ - MCFG_PALETTE_ADD("palette", 256) - MCFG_PALETTE_INIT_OWNER(goldstar_state,lucky8) - MCFG_NVRAM_ADD_1FILL("nvram") - - MCFG_VIDEO_START_OVERRIDE(goldstar_state,bingowng) - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_MONO("mono") - - MCFG_SOUND_ADD("snsnd", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) - - MCFG_SOUND_ADD("aysnd", AY8910, AY_CLOCK) - MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW3")) - MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW4")) - MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(goldstar_state, ay8910_outputa_w)) - MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(goldstar_state, ay8910_outputb_w)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) +static MACHINE_CONFIG_DERIVED( bingownga, bingowng ) + MCFG_GFXDECODE_MODIFY("gfxdecode", bingownga) MACHINE_CONFIG_END -PALETTE_INIT_MEMBER(goldstar_state,magodds) +PALETTE_INIT_MEMBER(wingco_state, magodds) { int i; for (i = 0; i < 0x100; i++) @@ -8357,13 +8307,13 @@ PALETTE_INIT_MEMBER(goldstar_state,magodds) } } -static MACHINE_CONFIG_START( magodds, goldstar_state ) +static MACHINE_CONFIG_START( magodds, wingco_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) MCFG_CPU_PROGRAM_MAP(magodds_map) //MCFG_CPU_IO_MAP(goldstar_readport) - MCFG_CPU_VBLANK_INT_DRIVER("screen", goldstar_state, lucky8_irq) + MCFG_CPU_VBLANK_INT_DRIVER("screen", wingco_state, masked_irq) MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0) MCFG_I8255_IN_PORTA_CB(IOPORT("IN0")) @@ -8377,9 +8327,9 @@ static MACHINE_CONFIG_START( magodds, goldstar_state ) MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0) MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2")) - MCFG_I8255_OUT_PORTA_CB(WRITE8(goldstar_state, system_outputa_w)) - MCFG_I8255_OUT_PORTB_CB(WRITE8(goldstar_state, system_outputb_w)) - MCFG_I8255_OUT_PORTC_CB(WRITE8(goldstar_state, system_outputc_w)) + MCFG_I8255_OUT_PORTA_CB(WRITE8(wingco_state, system_outputa_w)) + MCFG_I8255_OUT_PORTB_CB(WRITE8(wingco_state, system_outputb_w)) + MCFG_I8255_OUT_PORTC_CB(WRITE8(wingco_state, system_outputc_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -8387,15 +8337,15 @@ static MACHINE_CONFIG_START( magodds, goldstar_state ) // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_magical) + MCFG_SCREEN_UPDATE_DRIVER(wingco_state, screen_update_magical) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", magodds) MCFG_PALETTE_ADD("palette", 256) - MCFG_PALETTE_INIT_OWNER(goldstar_state,magodds) + MCFG_PALETTE_INIT_OWNER(wingco_state, magodds) MCFG_NVRAM_ADD_1FILL("nvram") - MCFG_VIDEO_START_OVERRIDE(goldstar_state,magical) + MCFG_VIDEO_START_OVERRIDE(wingco_state, magical) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -8443,7 +8393,7 @@ static MACHINE_CONFIG_START( kkotnoli, goldstar_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ncb3) MCFG_PALETTE_ADD("palette", 256) - MCFG_PALETTE_INIT_OWNER(goldstar_state,lucky8) + MCFG_PALETTE_INIT_OWNER(goldstar_state, lucky8) MCFG_VIDEO_START_OVERRIDE(goldstar_state,goldstar) @@ -8483,7 +8433,7 @@ static MACHINE_CONFIG_START( ladylinr, goldstar_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ncb3) MCFG_PALETTE_ADD("palette", 256) - MCFG_PALETTE_INIT_OWNER(goldstar_state,lucky8) + MCFG_PALETTE_INIT_OWNER(goldstar_state, lucky8) MCFG_NVRAM_ADD_1FILL("nvram") MCFG_VIDEO_START_OVERRIDE(goldstar_state,goldstar) @@ -8499,7 +8449,7 @@ static MACHINE_CONFIG_START( ladylinr, goldstar_state ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( wcat3, goldstar_state ) +static MACHINE_CONFIG_START( wcat3, wingco_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) @@ -8519,9 +8469,9 @@ static MACHINE_CONFIG_START( wcat3, goldstar_state ) MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0) MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2")) - MCFG_I8255_OUT_PORTA_CB(WRITE8(goldstar_state, system_outputa_w)) - MCFG_I8255_OUT_PORTB_CB(WRITE8(goldstar_state, system_outputb_w)) - MCFG_I8255_OUT_PORTC_CB(WRITE8(goldstar_state, system_outputc_w)) + MCFG_I8255_OUT_PORTA_CB(WRITE8(wingco_state, system_outputa_w)) + MCFG_I8255_OUT_PORTB_CB(WRITE8(wingco_state, system_outputb_w)) + MCFG_I8255_OUT_PORTC_CB(WRITE8(wingco_state, system_outputc_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -8534,7 +8484,7 @@ static MACHINE_CONFIG_START( wcat3, goldstar_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ncb3) MCFG_PALETTE_ADD("palette", 256) - MCFG_PALETTE_INIT_OWNER(goldstar_state,lucky8) + MCFG_PALETTE_INIT_OWNER(goldstar_state, lucky8) MCFG_NVRAM_ADD_1FILL("nvram") MCFG_VIDEO_START_OVERRIDE(goldstar_state,goldstar) @@ -8773,12 +8723,10 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( cherrys, ncb3 ) MCFG_GFXDECODE_MODIFY("gfxdecode", cherrys) - MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( cm97, ncb3 ) MCFG_GFXDECODE_MODIFY("gfxdecode", cm97) - MACHINE_CONFIG_END @@ -8840,7 +8788,7 @@ static MACHINE_CONFIG_START( megaline, unkch_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", megaline) MCFG_PALETTE_ADD("palette", 256) - MCFG_PALETTE_INIT_OWNER(goldstar_state,lucky8) + MCFG_PALETTE_INIT_OWNER(goldstar_state, lucky8) // MCFG_NVRAM_ADD_1FILL("nvram") MCFG_VIDEO_START_OVERRIDE(goldstar_state,goldstar) @@ -8885,7 +8833,7 @@ static MACHINE_CONFIG_START( bonusch, unkch_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", megaline) MCFG_PALETTE_ADD("palette", 256) - MCFG_PALETTE_INIT_OWNER(goldstar_state,lucky8) + MCFG_PALETTE_INIT_OWNER(goldstar_state, lucky8) MCFG_VIDEO_START_OVERRIDE(goldstar_state, goldstar) @@ -10886,7 +10834,7 @@ YM2203 is this the original Magical Odds? */ -DRIVER_INIT_MEMBER(goldstar_state,magoddsc) +DRIVER_INIT_MEMBER(wingco_state, magoddsc) { int A; UINT8 *ROM = memregion("maincpu")->base(); @@ -13594,7 +13542,7 @@ DRIVER_INIT_MEMBER(goldstar_state,cmast91) ROM[0x0a92] = 0x9b; } -DRIVER_INIT_MEMBER(goldstar_state,lucky8a) +DRIVER_INIT_MEMBER(wingco_state, lucky8a) { UINT8 *ROM = memregion("maincpu")->base(); @@ -14188,9 +14136,9 @@ GAME( 1992, cmast92, 0, cmast91, cmast91, goldstar_state, cmast91, GAMEL( 1989, lucky8, 0, lucky8, lucky8, driver_device, 0, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 1, W-4)", 0, layout_lucky8 ) -GAMEL( 1989, lucky8a, lucky8, lucky8, lucky8a, goldstar_state, lucky8a, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 2, W-4)", 0, layout_lucky8 ) +GAMEL( 1989, lucky8a, lucky8, lucky8, lucky8a, wingco_state, lucky8a, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 2, W-4)", 0, layout_lucky8 ) GAMEL( 1989, lucky8b, lucky8, lucky8, lucky8b, driver_device, 0, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 3, W-4, extended gfx)", 0, layout_lucky8 ) -GAMEL( 1989, lucky8c, lucky8, lucky8, lucky8, goldstar_state, lucky8a, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 4, W-4)", 0, layout_lucky8 ) +GAMEL( 1989, lucky8c, lucky8, lucky8, lucky8, wingco_state, lucky8a, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 4, W-4)", 0, layout_lucky8 ) GAMEL( 1989, lucky8d, lucky8, lucky8, lucky8d, driver_device, 0, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 5, W-4, main 40%, d-up 60%)", 0, layout_lucky8 ) GAMEL( 1989, lucky8e, lucky8, lucky8, lucky8d, driver_device, 0, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 6, W-4, main 40%, d-up 60%)", 0, layout_lucky8 ) GAMEL( 198?, ns8lines, 0, lucky8, lucky8b, driver_device, 0, ROT0, "", "New Lucky 8 Lines / New Super 8 Lines (W-4)", 0, layout_lucky8 ) @@ -14211,8 +14159,8 @@ GAMEL( 1993, bingownga, bingowng, bingownga,bingownga,driver_device, 0, GAME( 1992, magodds, 0, magodds, magodds, driver_device, 0, ROT0, "Pal Company / Micro Manufacturing Inc.", "Magical Odds (set 1)", GAME_WRONG_COLORS | GAME_IMPERFECT_GRAPHICS ) GAME( 1992, magoddsa, magodds, magodds, magodds, driver_device, 0, ROT0, "Pal Company / Micro Manufacturing Inc.", "Magical Odds (set 2)", GAME_WRONG_COLORS | GAME_IMPERFECT_GRAPHICS ) GAME( 1992, magoddsb, magodds, magodds, magodds, driver_device, 0, ROT0, "Pal Company / Micro Manufacturing Inc.", "Magical Odds (set 3)", GAME_WRONG_COLORS | GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, magoddsc, magodds, magodds, magoddsc, goldstar_state, magoddsc, ROT0, "Pal Company", "Magical Odds (set 4, custom encrypted CPU block)", GAME_WRONG_COLORS | GAME_NOT_WORKING |GAME_NO_SOUND) -GAME( 1991, magoddsd, magodds, magodds, magoddsc, goldstar_state, magoddsc, ROT0, "Pal Company", "Magical Odds (set 5, custom encrypted CPU block)", GAME_WRONG_COLORS | GAME_NOT_WORKING |GAME_NO_SOUND) +GAME( 1991, magoddsc, magodds, magodds, magoddsc, wingco_state, magoddsc, ROT0, "Pal Company", "Magical Odds (set 4, custom encrypted CPU block)", GAME_WRONG_COLORS | GAME_NOT_WORKING |GAME_NO_SOUND) +GAME( 1991, magoddsd, magodds, magodds, magoddsc, wingco_state, magoddsc, ROT0, "Pal Company", "Magical Odds (set 5, custom encrypted CPU block)", GAME_WRONG_COLORS | GAME_NOT_WORKING |GAME_NO_SOUND) /* --- Amcoe games --- */ diff --git a/src/mame/includes/goldstar.h b/src/mame/includes/goldstar.h index 815b95c9920..d8851fd70b8 100644 --- a/src/mame/includes/goldstar.h +++ b/src/mame/includes/goldstar.h @@ -1,8 +1,8 @@ class goldstar_state : public driver_device { public: - goldstar_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + goldstar_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_fg_vidram(*this, "fg_vidram"), m_fg_atrram(*this, "fg_atrram"), m_bg_vidram(*this, "bg_vidram"), @@ -37,8 +37,6 @@ public: optional_shared_ptr m_reel3_scroll; - UINT8 m_unkch_vidreg; - tilemap_t *m_reel1_tilemap; tilemap_t *m_reel2_tilemap; tilemap_t *m_reel3_tilemap; @@ -50,19 +48,16 @@ public: UINT8 m_cmaster_girl_pal; UINT8 m_cm_enable_reg; UINT8 m_cm_girl_scroll; - UINT8 m_lucky8_nmi_enable; int m_tile_bank; DECLARE_WRITE8_MEMBER(protection_w); DECLARE_READ8_MEMBER(protection_r); + DECLARE_WRITE8_MEMBER(lucky8_outport_w); DECLARE_WRITE8_MEMBER(ncb3_port81_w); DECLARE_WRITE8_MEMBER(goldstar_lamps_w); DECLARE_WRITE8_MEMBER(cb3_lamps_w); DECLARE_WRITE8_MEMBER(cm_outport1_w); DECLARE_WRITE8_MEMBER(pkrmast_lamps_w); - DECLARE_WRITE8_MEMBER(lucky8_outport_w); - DECLARE_WRITE8_MEMBER(magodds_outb850_w); - DECLARE_WRITE8_MEMBER(magodds_outb860_w); DECLARE_WRITE8_MEMBER(ladylinr_outport_w); DECLARE_READ8_MEMBER(fixedvalb4_r); DECLARE_READ8_MEMBER(fixedvala8_r); @@ -92,16 +87,12 @@ public: DECLARE_WRITE8_MEMBER(goldstar_reel3_ram_w); DECLARE_WRITE8_MEMBER(goldstar_fa00_w); DECLARE_WRITE8_MEMBER(cm_background_col_w); - DECLARE_WRITE8_MEMBER(system_outputa_w); - DECLARE_WRITE8_MEMBER(system_outputb_w); - DECLARE_WRITE8_MEMBER(system_outputc_w); DECLARE_WRITE8_MEMBER(ay8910_outputa_w); DECLARE_WRITE8_MEMBER(ay8910_outputb_w); DECLARE_DRIVER_INIT(goldstar); DECLARE_DRIVER_INIT(cmast91); DECLARE_DRIVER_INIT(nfb96_dk); DECLARE_DRIVER_INIT(cm); - DECLARE_DRIVER_INIT(lucky8a); DECLARE_DRIVER_INIT(nfb96sea); DECLARE_DRIVER_INIT(schery97a); DECLARE_DRIVER_INIT(rp35); @@ -116,7 +107,6 @@ public: DECLARE_DRIVER_INIT(po33); DECLARE_DRIVER_INIT(match133); DECLARE_DRIVER_INIT(rp36c3); - DECLARE_DRIVER_INIT(magoddsc); DECLARE_DRIVER_INIT(nfb96_c1); DECLARE_DRIVER_INIT(fb2010); DECLARE_DRIVER_INIT(super9); @@ -131,15 +121,9 @@ public: DECLARE_VIDEO_START(cherrym); DECLARE_PALETTE_INIT(cmast91); DECLARE_PALETTE_INIT(lucky8); - DECLARE_VIDEO_START(bingowng); - DECLARE_VIDEO_START(magical); - DECLARE_PALETTE_INIT(magodds); UINT32 screen_update_goldstar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_cmast91(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - UINT32 screen_update_bingowng(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - UINT32 screen_update_magical(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_amcoe1a(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(lucky8_irq); void do_blockswaps(UINT8* ROM); void dump_to_file( UINT8* ROM); required_device m_maincpu; @@ -148,11 +132,42 @@ public: }; +class wingco_state : public goldstar_state +{ +public: + wingco_state(const machine_config &mconfig, device_type type, const char *tag) : + goldstar_state(mconfig, type, tag) + { + } + + DECLARE_WRITE8_MEMBER(magodds_outb850_w); + DECLARE_WRITE8_MEMBER(magodds_outb860_w); + DECLARE_WRITE8_MEMBER(system_outputa_w); + DECLARE_WRITE8_MEMBER(system_outputb_w); + DECLARE_WRITE8_MEMBER(system_outputc_w); + + DECLARE_DRIVER_INIT(lucky8a); + DECLARE_DRIVER_INIT(magoddsc); + + DECLARE_VIDEO_START(bingowng); + DECLARE_VIDEO_START(magical); + DECLARE_PALETTE_INIT(magodds); + UINT32 screen_update_bingowng(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT32 screen_update_magical(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + INTERRUPT_GEN_MEMBER(masked_irq); + +private: + UINT8 m_nmi_enable; + UINT8 m_vidreg; +}; + + class cb3_state : public goldstar_state { public: - cb3_state(const machine_config &mconfig, device_type type, const char *tag) - : goldstar_state(mconfig, type, tag) + cb3_state(const machine_config &mconfig, device_type type, const char *tag) : + goldstar_state(mconfig, type, tag) { } @@ -168,8 +183,8 @@ protected: class chrygld_state : public goldstar_state { public: - chrygld_state(const machine_config &mconfig, device_type type, const char *tag) - : goldstar_state(mconfig, type, tag) + chrygld_state(const machine_config &mconfig, device_type type, const char *tag) : + goldstar_state(mconfig, type, tag) { } @@ -184,8 +199,8 @@ protected: class sangho_state : public goldstar_state { public: - sangho_state(const machine_config &mconfig, device_type type, const char *tag) - : goldstar_state(mconfig, type, tag), + sangho_state(const machine_config &mconfig, device_type type, const char *tag) : + goldstar_state(mconfig, type, tag), m_reel1_attrram(*this, "reel1_attrram"), m_reel2_attrram(*this, "reel2_attrram"), m_reel3_attrram(*this, "reel3_attrram") @@ -225,8 +240,8 @@ private: class unkch_state : public goldstar_state { public: - unkch_state(const machine_config &mconfig, device_type type, const char *tag) - : goldstar_state(mconfig, type, tag), + unkch_state(const machine_config &mconfig, device_type type, const char *tag) : + goldstar_state(mconfig, type, tag), m_reel1_attrram(*this, "reel1_attrram"), m_reel2_attrram(*this, "reel2_attrram"), m_reel3_attrram(*this, "reel3_attrram") @@ -260,4 +275,6 @@ private: required_shared_ptr m_reel1_attrram; required_shared_ptr m_reel2_attrram; required_shared_ptr m_reel3_attrram; + + UINT8 m_vidreg; }; diff --git a/src/mame/video/goldstar.c b/src/mame/video/goldstar.c index 888107c8551..bf9bdd3407f 100644 --- a/src/mame/video/goldstar.c +++ b/src/mame/video/goldstar.c @@ -162,36 +162,6 @@ VIDEO_START_MEMBER(goldstar_state, goldstar) m_cm_enable_reg = 0x0b; } -VIDEO_START_MEMBER(goldstar_state, bingowng) -{ - m_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); - - m_reel1_tilemap->set_scroll_cols(64); - - m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8, 64, 32); - m_fg_tilemap->set_transparent_pen(0); - - // is there an enable reg for this game? - m_cm_enable_reg = 0x0b; -} - -VIDEO_START_MEMBER(goldstar_state, magical) -{ - m_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); - m_reel2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); - m_reel3_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); - - m_reel1_tilemap->set_scroll_cols(32); - m_reel2_tilemap->set_scroll_cols(32); - m_reel3_tilemap->set_scroll_cols(32); - - m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_magical_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8, 64, 32); - m_fg_tilemap->set_transparent_pen(0); - - // is there an enable reg for this game? - m_cm_enable_reg = 0x0b; -} - VIDEO_START_MEMBER(goldstar_state, cherrym) { m_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); @@ -311,105 +281,6 @@ UINT32 goldstar_state::screen_update_goldstar(screen_device &screen, bitmap_ind1 } -UINT32 goldstar_state::screen_update_bingowng(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - int i; - - bitmap.fill(m_palette->black_pen(), cliprect); - - if (!(m_cm_enable_reg &0x01)) - return 0; - - if (m_cm_enable_reg &0x08) - { - for (i= 0;i < 64;i++) - { - m_reel1_tilemap->set_scrolly(i, m_reel1_scroll[i]); - } - - - const rectangle visible1(0*8, (14+48)*8-1, 3*8, (4+7)*8-1); - m_reel1_tilemap->draw(screen, bitmap, visible1, 0, 0); - } - - if (m_cm_enable_reg &0x04) - { - if (memregion("user1")->base()) - { - gfx_element *gfx = m_gfxdecode->gfx(2); - int girlyscroll = (INT8)((m_cm_girl_scroll & 0xf0)); - int girlxscroll = (INT8)((m_cm_girl_scroll & 0x0f)<<4); - - gfx->zoom_transpen(bitmap,cliprect,m_cmaster_girl_num,m_cmaster_girl_pal,0,0,-(girlxscroll*2),-(girlyscroll), 0x20000, 0x10000,0); - } - } - - if (m_cm_enable_reg &0x02) - { - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - } - - return 0; -} - - -UINT32 goldstar_state::screen_update_magical(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - int i; - - bitmap.fill(m_palette->black_pen(), cliprect); - - if (!(m_cm_enable_reg &0x01)) - return 0; - - if (m_cm_enable_reg &0x08) - { - // guess, could be wrong, but different screens clearly need different reel layouts - if (m_unkch_vidreg & 2) - { - for (i= 0;i < 32;i++) - { - m_reel1_tilemap->set_scrolly(i, m_reel1_scroll[i*2]); - m_reel2_tilemap->set_scrolly(i, m_reel2_scroll[i*2]); - // m_reel3_tilemap->set_scrolly(i, m_reel3_scroll[i*2]); - } - - - const rectangle visible1alt(0*8, (16+48)*8-1, 4*8, 16*8-1); - const rectangle visible2alt(0*8, (16+48)*8-1, 16*8, 28*8-1); - - m_reel1_tilemap->draw(screen, bitmap, visible1alt, 0, 0); - m_reel2_tilemap->draw(screen, bitmap, visible2alt, 0, 0); - //m_reel3_tilemap->draw(screen, bitmap, &magical_visible3, 0, 0); - } - else - { - for (i= 0;i < 32;i++) - { - m_reel1_tilemap->set_scrolly(i, m_reel1_scroll[i*2]); - m_reel2_tilemap->set_scrolly(i, m_reel2_scroll[i*2]); - m_reel3_tilemap->set_scrolly(i, m_reel3_scroll[i*2]); - } - - - const rectangle visible1(0*8, (14+48)*8-1, 4*8, (4+8)*8-1); - const rectangle visible2(0*8, (14+48)*8-1, 12*8, (12+8)*8-1); - const rectangle visible3(0*8, (14+48)*8-1, 20*8, (20+8)*8-1); - - m_reel1_tilemap->draw(screen, bitmap, visible1, 0, 0); - m_reel2_tilemap->draw(screen, bitmap, visible2, 0, 0); - m_reel3_tilemap->draw(screen, bitmap, visible3, 0, 0); - } - } - - if (m_cm_enable_reg &0x02) - { - m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - } - - return 0; -} - UINT32 goldstar_state::screen_update_cmast91(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int i; @@ -487,6 +358,137 @@ UINT32 goldstar_state::screen_update_amcoe1a(screen_device &screen, bitmap_ind16 +VIDEO_START_MEMBER(wingco_state, bingowng) +{ + m_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); + + m_reel1_tilemap->set_scroll_cols(64); + + m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8, 64, 32); + m_fg_tilemap->set_transparent_pen(0); + + // is there an enable reg for this game? + m_cm_enable_reg = 0x0b; +} + +VIDEO_START_MEMBER(wingco_state, magical) +{ + m_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); + m_reel2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); + m_reel3_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_goldstar_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); + + m_reel1_tilemap->set_scroll_cols(32); + m_reel2_tilemap->set_scroll_cols(32); + m_reel3_tilemap->set_scroll_cols(32); + + m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_magical_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8, 64, 32); + m_fg_tilemap->set_transparent_pen(0); + + // is there an enable reg for this game? + m_cm_enable_reg = 0x0b; +} + + +UINT32 wingco_state::screen_update_bingowng(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + int i; + + bitmap.fill(m_palette->black_pen(), cliprect); + + if (!(m_cm_enable_reg &0x01)) + return 0; + + if (m_cm_enable_reg &0x08) + { + for (i= 0;i < 64;i++) + { + m_reel1_tilemap->set_scrolly(i, m_reel1_scroll[i]); + } + + + const rectangle visible1(0*8, (14+48)*8-1, 3*8, (4+7)*8-1); + m_reel1_tilemap->draw(screen, bitmap, visible1, 0, 0); + } + + if (m_cm_enable_reg &0x04) + { + if (memregion("user1")->base()) + { + gfx_element *gfx = m_gfxdecode->gfx(2); + int girlyscroll = (INT8)((m_cm_girl_scroll & 0xf0)); + int girlxscroll = (INT8)((m_cm_girl_scroll & 0x0f)<<4); + + gfx->zoom_transpen(bitmap,cliprect,m_cmaster_girl_num,m_cmaster_girl_pal,0,0,-(girlxscroll*2),-(girlyscroll), 0x20000, 0x10000,0); + } + } + + if (m_cm_enable_reg &0x02) + { + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + } + + return 0; +} + +UINT32 wingco_state::screen_update_magical(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + int i; + + bitmap.fill(m_palette->black_pen(), cliprect); + + if (!(m_cm_enable_reg &0x01)) + return 0; + + if (m_cm_enable_reg &0x08) + { + // guess, could be wrong, but different screens clearly need different reel layouts + if (m_vidreg & 2) + { + for (i= 0;i < 32;i++) + { + m_reel1_tilemap->set_scrolly(i, m_reel1_scroll[i*2]); + m_reel2_tilemap->set_scrolly(i, m_reel2_scroll[i*2]); + // m_reel3_tilemap->set_scrolly(i, m_reel3_scroll[i*2]); + } + + + const rectangle visible1alt(0*8, (16+48)*8-1, 4*8, 16*8-1); + const rectangle visible2alt(0*8, (16+48)*8-1, 16*8, 28*8-1); + + m_reel1_tilemap->draw(screen, bitmap, visible1alt, 0, 0); + m_reel2_tilemap->draw(screen, bitmap, visible2alt, 0, 0); + //m_reel3_tilemap->draw(screen, bitmap, &magical_visible3, 0, 0); + } + else + { + for (i= 0;i < 32;i++) + { + m_reel1_tilemap->set_scrolly(i, m_reel1_scroll[i*2]); + m_reel2_tilemap->set_scrolly(i, m_reel2_scroll[i*2]); + m_reel3_tilemap->set_scrolly(i, m_reel3_scroll[i*2]); + } + + + const rectangle visible1(0*8, (14+48)*8-1, 4*8, (4+8)*8-1); + const rectangle visible2(0*8, (14+48)*8-1, 12*8, (12+8)*8-1); + const rectangle visible3(0*8, (14+48)*8-1, 20*8, (20+8)*8-1); + + m_reel1_tilemap->draw(screen, bitmap, visible1, 0, 0); + m_reel2_tilemap->draw(screen, bitmap, visible2, 0, 0); + m_reel3_tilemap->draw(screen, bitmap, visible3, 0, 0); + } + } + + if (m_cm_enable_reg &0x02) + { + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + } + + return 0; +} + + + WRITE8_MEMBER(sangho_state::fg_vidram_w) { m_fg_vidram[offset] = data; @@ -714,7 +716,7 @@ VIDEO_START_MEMBER(unkch_state, unkch) m_cmaster_girl_num = 0; m_cmaster_girl_pal = 0; - m_unkch_vidreg = 0x00; + m_vidreg = 0x00; m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(goldstar_state::get_cherrym_fg_tile_info),this),TILEMAP_SCAN_ROWS,8,8, 64, 32); m_fg_tilemap->set_transparent_pen(0); @@ -735,7 +737,7 @@ UINT32 unkch_state::screen_update_unkch(screen_device &screen, bitmap_ind16 &bit { // 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 (m_unkch_vidreg & 0x40) + if (m_vidreg & 0x40) { for (i= 0;i < 32;i++) {