diff options
Diffstat (limited to 'src/mame/igs/goldstar.cpp')
| -rw-r--r-- | src/mame/igs/goldstar.cpp | 357 |
1 files changed, 245 insertions, 112 deletions
diff --git a/src/mame/igs/goldstar.cpp b/src/mame/igs/goldstar.cpp index 55acbe0c749..170b13d6d1b 100644 --- a/src/mame/igs/goldstar.cpp +++ b/src/mame/igs/goldstar.cpp @@ -332,7 +332,6 @@ public: { } - void feverch(machine_config &config) ATTR_COLD; void goldfrui(machine_config &config) ATTR_COLD; void goldstar(machine_config &config) ATTR_COLD; void goldstbl(machine_config &config) ATTR_COLD; @@ -400,6 +399,7 @@ protected: void bg_vidram_w(offs_t offset, uint8_t data); void bg_atrram_w(offs_t offset, uint8_t data); template <uint8_t Which> void reel_ram_w(offs_t offset, uint8_t data); + template <uint8_t Which> void reel_scroll_w(offs_t offset, uint8_t data); void goldstar_fa00_w(uint8_t data); void bonusch_palette(palette_device &palette) const ATTR_COLD; void cm_palette(palette_device &palette) const ATTR_COLD; @@ -420,8 +420,6 @@ private: void protection_w(uint8_t data); uint8_t protection_r(); - void feverch_map(address_map &map) ATTR_COLD; - void feverch_portmap(address_map &map) ATTR_COLD; void kkotnoli_map(address_map &map) ATTR_COLD; void ladylinr_map(address_map &map) ATTR_COLD; void super9_map(address_map &map) ATTR_COLD; @@ -618,6 +616,7 @@ public: void animalw(machine_config &config) ATTR_COLD; void bingowng(machine_config &config) ATTR_COLD; void bingownga(machine_config &config) ATTR_COLD; + void feverch(machine_config &config) ATTR_COLD; void flam7_tw(machine_config &config) ATTR_COLD; void flam7_w4(machine_config &config) ATTR_COLD; void flaming7(machine_config &config) ATTR_COLD; @@ -638,6 +637,7 @@ public: void wcat3(machine_config &config) ATTR_COLD; void init_cb2() ATTR_COLD; + void init_feverch() ATTR_COLD; void init_flam7_tw() ATTR_COLD; void init_flaming7() ATTR_COLD; void init_lucky8a() ATTR_COLD; @@ -679,6 +679,7 @@ private: void megaline_outputd_w(uint8_t data); void ay8910_outputa_w(uint8_t data); void ay8910_outputb_w(uint8_t data); + void fever_outp_w(offs_t offset, uint8_t data); // handlers for lucky bar MCU ports uint8_t mcu_portb_r(); @@ -691,6 +692,7 @@ private: void magodds_palette(palette_device &palette) const ATTR_COLD; uint32_t screen_update_lucky8(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_bingowng(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + uint32_t screen_update_feverch(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_magical(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_mbstar(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_megaline(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -723,6 +725,8 @@ private: void animalw_map(address_map &map) ATTR_COLD; void bingowng_map(address_map &map) ATTR_COLD; + void feverch_map(address_map &map) ATTR_COLD; + void feverch_portmap(address_map &map) ATTR_COLD; void flaming7_map(address_map &map) ATTR_COLD; void lucky8_map(address_map &map) ATTR_COLD; void lucky8p_map(address_map &map) ATTR_COLD; @@ -954,6 +958,15 @@ void goldstar_state::bg_atrram_w(offs_t offset, uint8_t data) m_bg_tilemap->mark_tile_dirty(offset); } +// W-8 reels scroll need even-odd bytes mirrored +template <uint8_t Which> +void goldstar_state::reel_scroll_w(offs_t offset, uint8_t data) +{ + m_reel_scroll[Which][offset] = data; + m_reel_scroll[Which][offset + 1] = data; + +} + /**************************************************** Tile Get Info @@ -1671,6 +1684,45 @@ uint32_t wingco_state::screen_update_megaline(screen_device &screen, bitmap_rgb3 return 0; } +uint32_t wingco_state::screen_update_feverch(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(rgb_t::black(), cliprect); + + if (m_enable_reg & 0x02) // only 1st reel for d-up + { + for (int i = 0; i < 64; i++) + { + // only one reels tilemap + m_reel_tilemap[0]->set_scrolly(i, m_reel_scroll[0][i]); + } + const rectangle visible1(0, (7+48)*8-1, 15*8, (12+8)*8-1); // adjust the rolling numbers + + m_reel_tilemap[0]->draw(screen, bitmap, visible1, 0, 0); + } + else + { + for (int i = 0; i < 64; i++) + { + // all three reels tilemaps + m_reel_tilemap[0]->set_scrolly(i, m_reel_scroll[0][i]); + m_reel_tilemap[1]->set_scrolly(i, m_reel_scroll[1][i]); + m_reel_tilemap[2]->set_scrolly(i, m_reel_scroll[2][i]); + } + + const rectangle visible1(0*8, (14+48)*8-1, 4*8, (4+7)*8-1); + const rectangle visible2(0*8, (14+48)*8-1, 12*8, (12+7)*8-1); + const rectangle visible3(0*8, (14+48)*8-1, 20*8, (20+7)*8-1); + + m_reel_tilemap[0]->draw(screen, bitmap, visible1, 0, 0); + m_reel_tilemap[1]->draw(screen, bitmap, visible2, 0, 0); + m_reel_tilemap[2]->draw(screen, bitmap, visible3, 0, 0); + } + + m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + return 0; +} + uint32_t unkch_state::screen_update_bonusch(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap.fill(rgb_t::black(), cliprect); @@ -2773,9 +2825,60 @@ void unkch_state::bonch_0x40_w(uint8_t data) // player 2 ??? wdog ??? video_reg // bit 5 - Hopper Motor // The hopper's operation cannot be verified because the protection system disables this payment method. - m_ticket_dispenser->motor_w(BIT(data, 5)); + m_ticket_dispenser->motor_w(BIT(data, 5)); +} + +void wingco_state::fever_outp_w(offs_t offset, uint8_t data) +{ + switch(offset) + { + case 0: // 0x38 + { + m_ticket_dispenser->motor_w(BIT(data, 7)); + m_enable_reg = data; + //popmessage("port 38: data%02x", data); + break; + } + case 1: // 0x39 + { + machine().bookkeeping().coin_counter_w(4, data & 0x01); // ????? + machine().bookkeeping().coin_counter_w(3, data & 0x04); // Hopper + machine().bookkeeping().coin_counter_w(2, data & 0x08); // Coin C + machine().bookkeeping().coin_counter_w(1, data & 0x10); // Coin B + machine().bookkeeping().coin_counter_w(0, data & 0x20); // Coin A / Exchange + //popmessage("port 39: data%02x", data); + break; + } + case 2: // 0x3a lamps1 + { + m_lamps[0] = BIT(data, 0); // + m_lamps[1] = BIT(data, 1); // + m_lamps[2] = BIT(data, 2); // + m_lamps[3] = BIT(data, 3); // + m_lamps[4] = BIT(data, 4); // + m_lamps[5] = BIT(data, 5); // + m_lamps[6] = BIT(data, 6); // + m_lamps[7] = BIT(data, 7); // + //popmessage("port 3a:Lamps??? data%02x", data); + break; + } + case 3: // 0x3b lamps2 + { + m_lamps[8+0] = BIT(data, 0); // + m_lamps[8+1] = BIT(data, 1); // + m_lamps[8+2] = BIT(data, 2); // + m_lamps[8+3] = BIT(data, 3); // + m_lamps[8+4] = BIT(data, 4); // + m_lamps[8+5] = BIT(data, 5); // + m_lamps[8+6] = BIT(data, 6); // D-Up/Take + m_lamps[8+7] = BIT(data, 7); // + //popmessage("port 3b: data%02x", data); + break; + } + } } + /**************************************************** Memory Map Information @@ -4154,38 +4257,38 @@ void wingco_state::tmcu_io_map(address_map &map) } -void goldstar_state::feverch_map(address_map &map) +void wingco_state::feverch_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0xc000, 0xc7ff).ram(); + map(0xc000, 0xc7ff).ram().share("nvram"); map(0xc800, 0xcfff).ram(); - map(0xd000, 0xd7ff).ram().w(FUNC(goldstar_state::fg_vidram_w)).share(m_fg_vidram); - map(0xd800, 0xdfff).ram().w(FUNC(goldstar_state::fg_atrram_w)).share(m_fg_atrram); + map(0xd000, 0xd7ff).ram().w(FUNC(wingco_state::fg_vidram_w)).share(m_fg_vidram); + map(0xd800, 0xdfff).ram().w(FUNC(wingco_state::fg_atrram_w)).share(m_fg_atrram); - map(0xe000, 0xe1ff).ram().w(FUNC(goldstar_state::reel_ram_w<0>)).share(m_reel_ram[0]); - map(0xe200, 0xe3ff).ram().w(FUNC(goldstar_state::reel_ram_w<1>)).share(m_reel_ram[1]); - map(0xe400, 0xe5ff).ram().w(FUNC(goldstar_state::reel_ram_w<2>)).share(m_reel_ram[2]); + map(0xe000, 0xe1ff).ram().w(FUNC(wingco_state::reel_ram_w<0>)).share(m_reel_ram[0]); + map(0xe200, 0xe3ff).ram().w(FUNC(wingco_state::reel_ram_w<1>)).share(m_reel_ram[1]); + map(0xe400, 0xe5ff).ram().w(FUNC(wingco_state::reel_ram_w<2>)).share(m_reel_ram[2]); map(0xe600, 0xe7ff).ram(); - map(0xe800, 0xe83f).ram().share(m_reel_scroll[0]); - map(0xea00, 0xea3f).ram().share(m_reel_scroll[1]); - map(0xec00, 0xec3f).ram().share(m_reel_scroll[2]); + map(0xe800, 0xe83f).mirror(0x80).ram().w(FUNC(wingco_state::reel_scroll_w<0>)).share(m_reel_scroll[0]); // different offsets for normal or dup reels + map(0xea00, 0xea3f).ram().w(FUNC(wingco_state::reel_scroll_w<1>)).share(m_reel_scroll[1]); + map(0xec00, 0xec3f).ram().w(FUNC(wingco_state::reel_scroll_w<2>)).share(m_reel_scroll[2]); map(0xf000, 0xffff).ram(); } - -void goldstar_state::feverch_portmap(address_map &map) +void wingco_state::feverch_portmap(address_map &map) { map.global_mask(0xff); map(0x00, 0x03).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0x08, 0x0b).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0x10, 0x13).rw("ppi8255_2", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0x18, 0x1c).noprw(); // unknown protection device - under test map(0x20, 0x20).w("sn1", FUNC(sn76489_device::write)); map(0x28, 0x28).w("sn2", FUNC(sn76489_device::write)); map(0x30, 0x30).w("sn3", FUNC(sn76489_device::write)); - //map(0x38, 0x3b) + map(0x38, 0x3b).w(FUNC(wingco_state::fever_outp_w)); } @@ -11207,7 +11310,7 @@ static INPUT_PORTS_START( bonusch ) PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, "Double-Up Type" ) PORT_DIPSETTING( 0x03, "1" ) // Hi-Lo Card Style - PORT_DIPSETTING( 0x02, "2" ) // Hi-Lo With Reel Bonus + PORT_DIPSETTING( 0x02, "2" ) // Hi-Lo With Reel Bonus PORT_DIPSETTING( 0x01, "3" ) // Hi-Lo With Poker Combo PORT_DIPSETTING( 0x00, "None" ) PORT_DIPNAME( 0x04, 0x04, "Hopper SW" ) @@ -11224,8 +11327,8 @@ static INPUT_PORTS_START( bonusch ) PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Unknown ) ) // Max Bet: default 0 ("40") - settled by protection device PORT_START("DSW2") - PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Unknown ) ) // WIn Rate: default 0 "95%") - settled by protection device - PORT_DIPNAME( 0x10, 0x10, "Limit Display" ) + PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Unknown ) ) // WIn Rate: default 0 "95%") - settled by protection device + PORT_DIPNAME( 0x10, 0x10, "Limit Display" ) PORT_DIPSETTING( 0x10, "On" ) PORT_DIPSETTING( 0x00, "Off" ) PORT_DIPNAME( 0xe0, 0xe0, "Game Limits" ) @@ -11345,51 +11448,50 @@ static INPUT_PORTS_START( feverch ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) PORT_NAME("Coin B") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_IMPULSE(2) PORT_NAME("Coin D") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) PORT_NAME("Coin C") + PORT_START("IN3") // coin + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CODE(KEYCODE_E) PORT_NAME("IN3-1") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CODE(KEYCODE_R) PORT_NAME("IN3-2") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CODE(KEYCODE_T) PORT_NAME("IN3-4") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CODE(KEYCODE_Y) PORT_NAME("IN3-8") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) PORT_NAME("Coin C") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) PORT_NAME("Coin B") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) PORT_NAME("Coin A") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) PORT_NAME("Coin A - Exchange Out") - PORT_START("IN4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("IN4-1") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("IN4-2") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("IN4-3") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("IN4-4") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("IN4-5") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("IN4-6") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("IN4-8") + PORT_START("IN4") // service + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Reset") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("Service Coin") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) // 1 coin - 100 credits + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) // Hopper presence detection + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Key Out / Attendant") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Hopper Payout") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_SERVICE ) PORT_NAME("Settings") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats") PORT_START("DSW1") - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1") - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:2") - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:3") - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:4") - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:5") - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:6") - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:7") - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:8") - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x01, "Game Style" ) PORT_DIPLOCATION("DSW1:1") + PORT_DIPSETTING( 0x00, "Upright Type" ) + PORT_DIPSETTING( 0x01, "Table Type" ) + PORT_DIPNAME( 0x02, 0x02, "Hopper Coin SW" ) PORT_DIPLOCATION("DSW1:2") + PORT_DIPSETTING( 0x02, "Active Low" ) + PORT_DIPSETTING( 0x00, "Active High" ) + PORT_DIPNAME( 0x04, 0x04, "Payout Method" ) PORT_DIPLOCATION("DSW1:3") + PORT_DIPSETTING( 0x00, "Automatic" ) + PORT_DIPSETTING( 0x04, "Pay Out Switch" ) + PORT_DIPNAME( 0x08, 0x08, "Double Up Game (7)" ) PORT_DIPLOCATION("DSW1:4") + PORT_DIPSETTING( 0x00, "Even" ) + PORT_DIPSETTING( 0x08, "Lose" ) + PORT_DIPNAME( 0x10, 0x10, "Reel Speed" ) PORT_DIPLOCATION("DSW1:5") + PORT_DIPSETTING( 0x10, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x00, "Fast" ) + PORT_DIPNAME( 0x20, 0x20, "Double Up Game" ) PORT_DIPLOCATION("DSW1:6") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0xc0, 0xc0, "Hopper Pay Limit" ) PORT_DIPLOCATION("DSW1:7,8") + PORT_DIPSETTING( 0x80, "x300" ) + PORT_DIPSETTING( 0x40, "x500" ) + PORT_DIPSETTING( 0x00, "x1000" ) + PORT_DIPSETTING( 0xc0, "None" ) PORT_START("DSW2") PORT_DIPNAME( 0x0f, 0x0f, "Main Game Pay Rate" ) PORT_DIPLOCATION("DSW2:1,2,3,4") @@ -11409,21 +11511,20 @@ static INPUT_PORTS_START( feverch ) PORT_DIPSETTING( 0x02, "92%" ) PORT_DIPSETTING( 0x01, "95%" ) PORT_DIPSETTING( 0x00, "97%" ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:5") - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:6") - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:7") - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:8") - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, "Maximum Bet" ) PORT_DIPLOCATION("DSW2:5,6") + PORT_DIPSETTING( 0x30, "8" ) + PORT_DIPSETTING( 0x20, "16" ) + PORT_DIPSETTING( 0x10, "32" ) + PORT_DIPSETTING( 0x00, "64" ) + PORT_DIPNAME( 0x40, 0x40, "Big/Small Flip Flop" ) PORT_DIPLOCATION("DSW2:7") + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPNAME( 0x80, 0x80, "Hopper Out by Coin A" ) PORT_DIPLOCATION("DSW2:8") + PORT_DIPSETTING( 0x80, "Not Exchanged" ) + PORT_DIPSETTING( 0x00, "Exchange" ) PORT_START("DSW3") - PORT_DIPNAME( 0x07, 0x07, "Key In Rate" ) PORT_DIPLOCATION("DSW3:1,2,3") + PORT_DIPNAME( 0x07, 0x07, "Key In Rate" ) PORT_DIPLOCATION("DSW3:1,2,3") PORT_DIPSETTING( 0x00, "5 Credits" ) PORT_DIPSETTING( 0x01, "10 Credits" ) PORT_DIPSETTING( 0x02, "20 Credits" ) @@ -11432,22 +11533,21 @@ static INPUT_PORTS_START( feverch ) PORT_DIPSETTING( 0x05, "50 Credits" ) PORT_DIPSETTING( 0x06, "60 Credits" ) PORT_DIPSETTING( 0x07, "100 Credits" ) - PORT_DIPNAME( 0x38, 0x38, "Coin A Rate" ) PORT_DIPLOCATION("DSW3:4,5,6") + PORT_DIPNAME( 0x38, 0x28, "Coin A Rate" ) PORT_DIPLOCATION("DSW3:4,5,6") PORT_DIPSETTING( 0x38, DEF_STR( 1C_50C ) ) // why?? hacked? PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x10, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x18, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x20, DEF_STR( 1C_6C ) ) PORT_DIPSETTING( 0x28, DEF_STR( 1C_10C ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW3:7") - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW3:8") - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xc0, 0xc0, "Jackpot Limit" ) PORT_DIPLOCATION("DSW3:7,8") + PORT_DIPSETTING( 0xc0, "Unlimited" ) + PORT_DIPSETTING( 0x80, "30000" ) + PORT_DIPSETTING( 0x40, "40000" ) + PORT_DIPSETTING( 0x00, "50000" ) PORT_START("DSW4") - PORT_DIPNAME( 0x0f, 0x0f, "Coin D Rate" ) PORT_DIPLOCATION("DSW4:1,2,3,4") + PORT_DIPNAME( 0x0f, 0x0f, "Coin C Rate" ) PORT_DIPLOCATION("DSW4:1,2,3,4") PORT_DIPSETTING( 0x0f, DEF_STR( 10C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 5C_2C ) ) @@ -11460,16 +11560,21 @@ static INPUT_PORTS_START( feverch ) PORT_DIPSETTING( 0x09, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x0a, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x0b, DEF_STR( 1C_10C ) ) - PORT_DIPNAME( 0x70, 0x70, "Coin C Rate" ) PORT_DIPLOCATION("DSW4:5,6,7") - PORT_DIPSETTING( 0x70, DEF_STR( 1C_50C ) ) // why?? hacked? + PORT_DIPSETTING( 0x0c, DEF_STR( 10C_1C ) ) + PORT_DIPSETTING( 0x0d, DEF_STR( 10C_1C ) ) + PORT_DIPSETTING( 0x0e, DEF_STR( 10C_1C ) ) + PORT_DIPSETTING( 0x0f, DEF_STR( 10C_1C ) ) + PORT_DIPNAME( 0x70, 0x70, "Coin B Rate" ) PORT_DIPLOCATION("DSW4:5,6,7") + PORT_DIPSETTING( 0x70, DEF_STR( 10C_1C ) ) PORT_DIPSETTING( 0x10, DEF_STR( 9C_1C ) ) PORT_DIPSETTING( 0x20, DEF_STR( 6C_1C ) ) PORT_DIPSETTING( 0x30, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x50, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x60, DEF_STR( 1C_1C ) ) - PORT_DIPNAME( 0x80, 0x80, "4th Coin" ) PORT_DIPLOCATION("DSW4:8") - PORT_DIPSETTING( 0x80, "As Coin A" ) + PORT_DIPSETTING( 0x70, "1 Coin / 50 Credits" ) + PORT_DIPNAME( 0x80, 0x80, "Credit Limit Game Over" ) PORT_DIPLOCATION("DSW4:8") + PORT_DIPSETTING( 0x80, "Game Over" ) PORT_DIPSETTING( 0x00, "As Hopper Line" ) INPUT_PORTS_END @@ -14369,11 +14474,13 @@ void unkch_state::bonusch(machine_config &config) TICKET_DISPENSER(config, m_ticket_dispenser, attotime::from_msec(50)); } -void goldstar_state::feverch(machine_config &config) +void wingco_state::feverch(machine_config &config) { Z80(config, m_maincpu, 12'000'000 / 2); // clock not verified - m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::feverch_map); - m_maincpu->set_addrmap(AS_IO, &goldstar_state::feverch_portmap); + m_maincpu->set_addrmap(AS_PROGRAM, &wingco_state::feverch_map); + m_maincpu->set_addrmap(AS_IO, &wingco_state::feverch_portmap); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -14394,17 +14501,20 @@ void goldstar_state::feverch(machine_config &config) screen.set_refresh_hz(60); screen.set_size(64*8, 32*8); screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); - screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_screen_update(FUNC(wingco_state::screen_update_feverch)); screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ncb3); - PALETTE(config, m_palette, FUNC(goldstar_state::cm_palette), 256); + PALETTE(config, m_palette, FUNC(wingco_state::cm_palette), 256); SPEAKER(config, "mono").front_center(); SN76489A(config, "sn1", 12'000'000 / 12).add_route(ALL_OUTPUTS, "mono", 0.80); // actually SN76489AN, clock not verified SN76489A(config, "sn2", 12'000'000 / 12).add_route(ALL_OUTPUTS, "mono", 0.80); // actually SN76489AN, clock not verified SN76489A(config, "sn3", 12'000'000 / 12).add_route(ALL_OUTPUTS, "mono", 0.80); // actually SN76489AN, clock not verified + + // payout hardware + TICKET_DISPENSER(config, m_ticket_dispenser, attotime::from_msec(50)); } @@ -24511,8 +24621,8 @@ ROM_START( feverch ) ROM_LOAD( "w9.c11", 0x00000, 0x8000, CRC(4dda18ef) SHA1(9a98a2f6996903b58d53e10b7b68c6ed1c34967a) ) ROM_REGION( 0x18000, "gfx1", 0 ) - ROM_LOAD( "cf18.7h", 0x00000, 0x08000, CRC(c63924fe) SHA1(7471d05c8688ba1fa6c0c3444de8883595c21776) ) - ROM_LOAD( "cf19.8h", 0x08000, 0x08000, CRC(f0229490) SHA1(665d335cc030a0cbec0c11c685a6f1e2f9706989) ) + ROM_LOAD( "cf18.7h", 0x00000, 0x08000, CRC(c63924fe) SHA1(7471d05c8688ba1fa6c0c3444de8883595c21776) ) + ROM_LOAD( "cf19.8h", 0x08000, 0x08000, CRC(f0229490) SHA1(665d335cc030a0cbec0c11c685a6f1e2f9706989) ) ROM_LOAD( "cf20.10h", 0x10000, 0x08000, CRC(1d831a06) SHA1(42d235b8dd894d38579886940a3e13adb843e00d) ) ROM_REGION( 0x8000, "gfx2", 0 ) @@ -24525,14 +24635,14 @@ ROM_START( feverch ) ROM_LOAD( "cf4.5h", 0x6000, 0x2000, CRC(7f73744e) SHA1(7c07095f7ec4302a4839a279c755979ec10e0715) ) // 1ST AND 2ND HALF IDENTICAL ROM_CONTINUE( 0x6000, 0x2000 ) - ROM_REGION( 0x200, "proms", 0 ) - ROM_LOAD_NIB_LOW( "82s129.11f", 0x000, 0x100, CRC(0a15ccc6) SHA1(7915e2cbfe4264cab42a780364ca56038412a249) ) - ROM_LOAD_NIB_HIGH( "82s129.12f", 0x000, 0x100, CRC(5b826df5) SHA1(c6e8ffec328f1bb8acdcad70d7045f96cc150166) ) - ROM_LOAD( "82s123.13f", 0x080, 0x020, CRC(82b2660a) SHA1(af4a8f4560ec22a7adda1f590651d6a84f894314) ) + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD_NIB_LOW( "82s129.12f", 0x0000, 0x0100, CRC(5b826df5) SHA1(c6e8ffec328f1bb8acdcad70d7045f96cc150166) ) + ROM_LOAD_NIB_HIGH( "82s129.11f", 0x0000, 0x0100, CRC(0a15ccc6) SHA1(7915e2cbfe4264cab42a780364ca56038412a249) ) + ROM_LOAD( "82s123.13f", 0x0080, 0x0020, CRC(82b2660a) SHA1(af4a8f4560ec22a7adda1f590651d6a84f894314) ) - ROM_REGION( 0x120, "unkproms", 0 ) - ROM_LOAD( "82s129.4e", 0x000, 0x0100, CRC(7edb311b) SHA1(8e7f933313dc7a1f2a5e8803c26953ced3f798d0) ) // same as megaline - ROM_LOAD( "82s123.10d", 0x100, 0x0020, CRC(71670863) SHA1(bd0d18c55774db7720413632d130cf3790fca1ad) ) + ROM_REGION( 0x0120, "unkproms", 0 ) + ROM_LOAD( "82s129.4e", 0x0000, 0x0100, CRC(7edb311b) SHA1(8e7f933313dc7a1f2a5e8803c26953ced3f798d0) ) // same as megaline + ROM_LOAD( "82s123.10d", 0x0100, 0x0020, CRC(71670863) SHA1(bd0d18c55774db7720413632d130cf3790fca1ad) ) ROM_END ROM_START( fevercha ) @@ -24554,14 +24664,14 @@ ROM_START( fevercha ) ROM_LOAD( "5h", 0x6000, 0x2000, CRC(7f73744e) SHA1(7c07095f7ec4302a4839a279c755979ec10e0715) ) // 1ST AND 2ND HALF IDENTICAL ROM_CONTINUE( 0x6000, 0x2000 ) - ROM_REGION( 0x200, "proms", 0 ) - ROM_LOAD_NIB_LOW( "82s129.11f", 0x000, 0x100, CRC(0a15ccc6) SHA1(7915e2cbfe4264cab42a780364ca56038412a249) ) - ROM_LOAD_NIB_HIGH( "82s129.12f", 0x000, 0x100, CRC(5b826df5) SHA1(c6e8ffec328f1bb8acdcad70d7045f96cc150166) ) - ROM_LOAD( "82s123.13f", 0x080, 0x020, CRC(82b2660a) SHA1(af4a8f4560ec22a7adda1f590651d6a84f894314) ) + ROM_REGION( 0x0200, "proms", 0 ) + ROM_LOAD_NIB_LOW( "82s129.12f", 0x0000, 0x0100, CRC(5b826df5) SHA1(c6e8ffec328f1bb8acdcad70d7045f96cc150166) ) + ROM_LOAD_NIB_HIGH( "82s129.11f", 0x0000, 0x0100, CRC(0a15ccc6) SHA1(7915e2cbfe4264cab42a780364ca56038412a249) ) + ROM_LOAD( "82s123.13f", 0x0080, 0x0020, CRC(82b2660a) SHA1(af4a8f4560ec22a7adda1f590651d6a84f894314) ) - ROM_REGION( 0x120, "unkproms", 0 ) - ROM_LOAD( "82s129.4e", 0x000, 0x0100, CRC(7edb311b) SHA1(8e7f933313dc7a1f2a5e8803c26953ced3f798d0) ) // same as megaline - ROM_LOAD( "82s123.10d", 0x100, 0x0020, CRC(71670863) SHA1(bd0d18c55774db7720413632d130cf3790fca1ad) ) + ROM_REGION( 0x0120, "unkproms", 0 ) + ROM_LOAD( "82s129.4e", 0x0000, 0x0100, CRC(7edb311b) SHA1(8e7f933313dc7a1f2a5e8803c26953ced3f798d0) ) // same as megaline + ROM_LOAD( "82s123.10d", 0x0100, 0x0020, CRC(71670863) SHA1(bd0d18c55774db7720413632d130cf3790fca1ad) ) ROM_END ROM_START( feverchtw ) @@ -28381,7 +28491,7 @@ void unkch_state::init_bonch() void unkch_state::init_boncha() { uint8_t *rom = memregion("maincpu")->base(); - + rom[0x5a47] = 0x77; rom[0x5a4e] = 0x77; rom[0x5a73] = 0x77; @@ -28411,6 +28521,29 @@ void unkch_state::init_boncha() rom[0x5d04] = 0x77; } +void wingco_state::init_feverch() +{ + uint8_t *rom = memregion("maincpu")->base(); + +// dipsw read protection skip + rom[0x06cf] = 0x0a; + rom[0x073c] = 0x11; + rom[0x07d2] = 0x12; + rom[0x0810] = 0x10; + +// battery check + rom[0x3382] = 0x18; + rom[0x3383] = 0x00; + +// temp hack - divide by 0 endless loop + rom[0x4160] = 0x00; + rom[0x4161] = 0x00; + +// signature break (protection) +// rom[0x3387] = 0xd0; + rom[0x3350] = 0xc9; // 02c1 call 0x3350 - signature breakĀ (protection) +} + } // anonymous namespace @@ -28634,9 +28767,9 @@ GAME( 199?, fl7_tw, fl7_50, flam7_tw, flaming7, wingco_state, init_flam // --- Wing W-6 hardware --- -GAME( 1986, feverch, 0, feverch, feverch, goldstar_state, empty_init, ROT0, "Wing Co., Ltd.", "Fever Chance (W-6, Japan, set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // unimplemented arithmetic chip, reels scrolling, I/O -GAME( 1986, fevercha, feverch, feverch, feverch, goldstar_state, empty_init, ROT0, "Wing Co., Ltd.", "Fever Chance (W-6, Japan, set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // unimplemented arithmetic chip, reels scrolling, I/O -GAME( 1986, feverchtw, feverch, feverch, feverch, goldstar_state, empty_init, ROT0, "Yamate", "Fever Chance (W-6, Taiwan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // reels scrolling, I/O +GAMEL( 1986, feverch, 0, feverch, feverch, wingco_state, init_feverch, ROT0, "Wing Co., Ltd.", "Fever Chance (W-6, Japan, set 1)", MACHINE_NOT_WORKING, layout_lucky8 ) // unimplemented arithmetic chip +GAMEL( 1986, fevercha, feverch, feverch, feverch, wingco_state, empty_init, ROT0, "Wing Co., Ltd.", "Fever Chance (W-6, Japan, set 2)", MACHINE_NOT_WORKING, layout_lucky8 ) // unimplemented arithmetic chip +GAMEL( 1986, feverchtw, feverch, feverch, feverch, wingco_state, empty_init, ROT0, "Yamate", "Fever Chance (W-6, Taiwan)", 0, layout_lucky8 ) // --- Wing W-7 hardware --- GAMEL( 1991, megaline, 0, megaline, megaline, wingco_state, init_mgln, ROT0, "Fun World", "Mega Lines (Wing W-7 System)", 0, layout_megaline ) @@ -28644,7 +28777,7 @@ GAMEL( 1986, skillch, 0, megaline, megaline, wingco_state, init_skch GAMEL( 1986, skillcha, skillch, megaline, skillcha, wingco_state, init_skcha, ROT0, "Wing Co., Ltd.", "Skill Chance (W-7, set 2, 53-98 main)", 0, layout_skillch ) // --- Wing W-8 hardware --- -GAMEL( 1990, bonusch, 0, bonusch, bonusch, unkch_state, init_bonch, ROT0, "Wing Co., Ltd.", "Bonus Chance (W-8, set 1)", 0, layout_bonusch ) // M80C51F MCU +GAMEL( 1990, bonusch, 0, bonusch, bonusch, unkch_state, init_bonch, ROT0, "Wing Co., Ltd.", "Bonus Chance (W-8, set 1)", 0, layout_bonusch ) // M80C51F MCU GAMEL( 1990, bonuscha, bonusch, bonusch, bonusch, unkch_state, init_boncha, ROT0, "Wing Co., Ltd.", "Bonus Chance (W-8, set 2)", 0, layout_bonusch ) // M80C51F MCU |
