summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/wallc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/wallc.cpp')
-rw-r--r--src/mame/drivers/wallc.cpp785
1 files changed, 0 insertions, 785 deletions
diff --git a/src/mame/drivers/wallc.cpp b/src/mame/drivers/wallc.cpp
deleted file mode 100644
index 037305b5696..00000000000
--- a/src/mame/drivers/wallc.cpp
+++ /dev/null
@@ -1,785 +0,0 @@
-// license:GPL-2.0+
-// copyright-holders:Jarek Burczynski
-/****************************************************************************
-
-Wall Crash by Midcoin (c) 1984
-
-
-Driver by Jarek Burczynski
-2002.12.23
-
-
-
-
- DIPSW-8 AY-3-8912 DIPSW-4
- DIPSW-4
-
- 74s288
-
-
- WAC1 WAC2 WAC3
- (2532) (2532) (2532)
-12.288MHz
-
- +------------+ 2114 2114 2114 2114
- + EPOXY WITH + +-------+
- + LS08 + WAC05 WAC1/52 EMPTY + SMALL +
- +LS240, LS245+ (2764) (2764) SOCKET + EPOXY +
- + Z80 + +-------+
- +------------+
-
-The bigger Epoxy brick contains three standard 74LSxxx chips and is used as
-DATA lines decoder for all READS from addresses in range: 0..0x7fff.
-The pinout (of the whole brick) is 1:1 Z80 and it can be replaced with
-a plain Z80, given that decoded ROMS are put in place of WAC05 and WAC1/52.
-
-The smaller Epoxy contains:
- 5 chips (names sanded off...): 20 pins, 8 pins, 14 pins, 16 pins, 16 pins,
- 1 resistor: 120 Ohm
- 1 probably resistor: measured: 1000 Ohm
- 1 diode: standard 1N4148 (info from HIGHWAYMAN)
- 4 capacitors: 3 same: blue ones probably 10n , 1 smaller 1.3n (measured by HIGHWAYMAN)
-It's mapped as ROM at 0x6000-0x7fff but is NOT accessed by the CPU.
-It's also not needed for emulation.
-
-
-Thanks to Dox for donating PCB.
-Thanks to HIGHWAYMAN for providing info on how to get to these epoxies
-(heat gun) and for info (very close one) on decoding.
-
-****************************************************************************/
-
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "machine/adc0804.h"
-#include "sound/ay8910.h"
-#include "video/resnet.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-#include "tilemap.h"
-
-
-class wallc_state : public driver_device
-{
-public:
- wallc_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_videoram(*this, "videoram")
- { }
-
- void sidampkr(machine_config &config);
- void unkitpkr(machine_config &config);
- void wallc(machine_config &config);
- void wallca(machine_config &config);
-
- void init_wallc();
- void init_wallca();
- void init_sidam();
- void init_unkitpkr();
-
-protected:
- virtual void video_start() override;
-
-private:
- void unkitpkr_map(address_map &map);
- void wallc_map(address_map &map);
-
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
-
- required_shared_ptr<uint8_t> m_videoram;
-
- tilemap_t *m_bg_tilemap;
-
- bool m_bookkeeping_mode;
-
- DECLARE_WRITE8_MEMBER(videoram_w);
- DECLARE_WRITE8_MEMBER(wallc_coin_counter_w);
- DECLARE_WRITE8_MEMBER(unkitpkr_out0_w);
- DECLARE_WRITE8_MEMBER(unkitpkr_out1_w);
- DECLARE_WRITE8_MEMBER(unkitpkr_out2_w);
-
- TILE_GET_INFO_MEMBER(get_bg_tile_info);
- TILE_GET_INFO_MEMBER(get_bg_tile_info_unkitpkr);
- TILE_GET_INFO_MEMBER(get_bg_tile_info_sidampkr);
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
-
- void wallc_palette(palette_device &palette) const;
- void unkitpkr_palette(palette_device &palette) const;
- DECLARE_VIDEO_START(unkitpkr);
- DECLARE_VIDEO_START(sidampkr);
-};
-
-
-
-/***************************************************************************
-
- Convert the color PROMs into a more usable format.
-
- Wall Crash has one 32 bytes palette PROM, connected to the RGB output this
- way:
-
- bit 6 -- 330 Ohm resistor --+-- 330 Ohm pulldown resistor -- RED
- bit 5 -- 220 Ohm resistor --/
-
- bit 4 -- NC
-
- bit 3 -- 330 Ohm resistor --+-- 330 Ohm pulldown resistor -- GREEN
- bit 2 -- 220 Ohm resistor --/
-
- bit 1 -- 330 Ohm resistor --+--+-- 330 Ohm pulldown resistor -- BLUE
- bit 0 -- 220 Ohm resistor --/ |
- |
- bit 7 -+- diode(~655 Ohm)------/
- \------220 Ohm pullup (+5V) resistor
-
-
-***************************************************************************/
-
-void wallc_state::wallc_palette(palette_device &palette) const
-{
- uint8_t const *const color_prom = memregion("proms")->base();
-
- static constexpr int resistances_rg[2] = { 330, 220 };
- static constexpr int resistances_b[3] = { 655, 330, 220 };
-
- double weights_r[2], weights_g[2], weights_b[3];
- compute_resistor_weights(0, 255, -1.0,
- 2, resistances_rg, weights_r, 330, 0,
- 2, resistances_rg, weights_g, 330, 0,
- 3, resistances_b, weights_b, 330, 655+220);
-
- for (int i = 0; i < palette.entries(); i++)
- {
- int bit0, bit1, bit7;
-
- // red component
- bit0 = BIT(color_prom[i], 5);
- bit1 = BIT(color_prom[i], 6);
- int const r = combine_weights(weights_r, bit1, bit0);
-
- // green component
- bit0 = BIT(color_prom[i], 2);
- bit1 = BIT(color_prom[i], 3);
- int const g = combine_weights(weights_g, bit1, bit0);
-
- // blue component
- bit0 = BIT(color_prom[i], 0);
- bit1 = BIT(color_prom[i], 1);
- bit7 = BIT(color_prom[i], 7);
- int const b = combine_weights(weights_b, bit7, bit1, bit0);
-
- palette.set_pen_color(i, rgb_t(r, g, b));
- }
-}
-
-void wallc_state::unkitpkr_palette(palette_device &palette) const
-{
- // this pcb has 470 Ohm resistors instead of the expected 330 Ohms.
- uint8_t const *const color_prom = memregion("proms")->base();
-
- static constexpr int resistances_rg[2] = { 470, 220 };
- static constexpr int resistances_b[3] = { 655, 470, 220 };
-
- double weights_r[2], weights_g[2], weights_b[3];
- compute_resistor_weights(0, 255, -1.0,
- 2, resistances_rg, weights_r, 470, 0,
- 2, resistances_rg, weights_g, 470, 0,
- 3, resistances_b, weights_b, 470, 655+220);
-
- for (int i = 0; i < palette.entries(); i++)
- {
- int bit0, bit1, bit7;
-
- // red component
- bit0 = BIT(color_prom[i], 5);
- bit1 = BIT(color_prom[i], 6);
- int const r = combine_weights(weights_r, bit1, bit0);
-
- // green component
- bit0 = BIT(color_prom[i], 2);
- bit1 = BIT(color_prom[i], 3);
- int const g = combine_weights(weights_g, bit1, bit0);
-
- // blue component
- bit0 = BIT(color_prom[i], 0);
- bit1 = BIT(color_prom[i], 1);
- bit7 = BIT(color_prom[i], 7);
- int const b = combine_weights(weights_b, bit7, bit1, bit0);
-
- palette.set_pen_color(i, rgb_t(r, g, b));
- }
-}
-
-WRITE8_MEMBER(wallc_state::videoram_w)
-{
- m_videoram[offset] = data;
- m_bg_tilemap->mark_tile_dirty(offset);
-}
-
-TILE_GET_INFO_MEMBER(wallc_state::get_bg_tile_info)
-{
- SET_TILE_INFO_MEMBER(0, m_videoram[tile_index] | 0x100, 1, 0);
-}
-
-TILE_GET_INFO_MEMBER(wallc_state::get_bg_tile_info_unkitpkr)
-{
- int code = m_videoram[tile_index];
-
- // hack to display "card" graphics in middle of screen outside of bookkeeping mode
- if (m_bookkeeping_mode || (tile_index & 0x1f) < 0x08 || (tile_index & 0x1f) >= 0x10)
- code |= 0x100;
-
- SET_TILE_INFO_MEMBER(0, code, 1, 0);
-}
-
-TILE_GET_INFO_MEMBER(wallc_state::get_bg_tile_info_sidampkr)
-{
- SET_TILE_INFO_MEMBER(0, m_videoram[tile_index] | 0x100, 0, 0);
-}
-
-void wallc_state::video_start()
-{
- m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wallc_state::get_bg_tile_info)), TILEMAP_SCAN_COLS_FLIP_Y, 8, 8, 32, 32);
-}
-
-VIDEO_START_MEMBER(wallc_state, unkitpkr)
-{
- m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wallc_state::get_bg_tile_info_unkitpkr)), TILEMAP_SCAN_COLS_FLIP_Y, 8, 8, 32, 32);
-}
-
-VIDEO_START_MEMBER(wallc_state, sidampkr)
-{
- m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wallc_state::get_bg_tile_info_sidampkr)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
-}
-
-uint32_t wallc_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
- return 0;
-}
-
-
-WRITE8_MEMBER(wallc_state::wallc_coin_counter_w)
-{
- machine().bookkeeping().coin_counter_w(0, data & 2);
-}
-
-
-WRITE8_MEMBER(wallc_state::unkitpkr_out0_w)
-{
-}
-
-WRITE8_MEMBER(wallc_state::unkitpkr_out1_w)
-{
- machine().bookkeeping().coin_counter_w(0, BIT(data, 4));
-}
-
-WRITE8_MEMBER(wallc_state::unkitpkr_out2_w)
-{
- if (m_bookkeeping_mode != BIT(data, 0))
- {
- m_bookkeeping_mode = BIT(data, 0);
- m_bg_tilemap->mark_all_dirty();
- }
-}
-
-void wallc_state::wallc_map(address_map &map)
-{
- map(0x0000, 0x7fff).rom();
- map(0x8000, 0x83ff).ram().w(FUNC(wallc_state::videoram_w)).mirror(0xc00).share("videoram"); /* 2114, 2114 */
- map(0xa000, 0xa3ff).ram(); /* 2114, 2114 */
-
- map(0xb000, 0xb000).portr("DSW1");
- map(0xb200, 0xb200).portr("SYSTEM");
- map(0xb400, 0xb400).r("adc", FUNC(adc0804_device::read_and_write));
-
- map(0xb000, 0xb000).nopw();
- map(0xb100, 0xb100).w(FUNC(wallc_state::wallc_coin_counter_w));
- map(0xb200, 0xb200).nopw();
- map(0xb500, 0xb500).w("aysnd", FUNC(ay8912_device::address_w));
- map(0xb600, 0xb600).rw("aysnd", FUNC(ay8912_device::data_r), FUNC(ay8912_device::data_w));
-}
-
-void wallc_state::unkitpkr_map(address_map &map)
-{
- map(0x0000, 0x7fff).rom();
- map(0x8000, 0x83ff).ram().w(FUNC(wallc_state::videoram_w)).mirror(0xc00).share("videoram"); /* 2114, 2114 */
- map(0xa000, 0xa3ff).ram(); /* 2114, 2114 */
-
- map(0xb000, 0xb000).portr("DSW1");
- map(0xb100, 0xb100).portr("IN1");
- map(0xb200, 0xb200).portr("IN2");
- map(0xb300, 0xb300).portr("IN3");
- map(0xb500, 0xb5ff).nopr(); // read by memory test routine. left over from some other game
-
- map(0xb000, 0xb000).w(FUNC(wallc_state::unkitpkr_out0_w));
- map(0xb100, 0xb100).w(FUNC(wallc_state::unkitpkr_out1_w));
- map(0xb200, 0xb200).w(FUNC(wallc_state::unkitpkr_out2_w));
- map(0xb500, 0xb500).w("aysnd", FUNC(ay8912_device::address_w));
- map(0xb600, 0xb600).rw("aysnd", FUNC(ay8912_device::data_r), FUNC(ay8910_device::data_w)); // Port A = DSW
-}
-
-
-static INPUT_PORTS_START( wallc )
- PORT_START("SYSTEM") /* b200 */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) //Right curve button; select current playfield in test mode
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) //not used ?
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) //service?? plays loud,high-pitched sound
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) //Left curve button; browse playfields in test mode
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) //ok
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) //ok
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 ) //ok
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) //ok
-
- PORT_START("DIAL") /* b400 - player position 8 bit analog input - value read is used as position of the player directly - what type of input is that ? DIAL ?*/
- PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(3) PORT_REVERSE PORT_PLAYER(1)
-
- PORT_START("DSW1") /* b000 */
- PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
- PORT_DIPSETTING( 0x03, "5" )
- PORT_DIPSETTING( 0x02, "4" )
- PORT_DIPSETTING( 0x01, "3" )
- PORT_DIPSETTING( 0x00, "2" )
- PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life) ) PORT_DIPLOCATION("SW1:3,4")
- PORT_DIPSETTING( 0x0c, "100K/200K/400K/800K" )
- PORT_DIPSETTING( 0x08, "80K/160K/320K/640K" )
- PORT_DIPSETTING( 0x04, "60K/120K/240K/480K" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPNAME( 0x10, 0x00, "Curve Effect" ) PORT_DIPLOCATION("SW3:1")
- PORT_DIPSETTING( 0x10, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x00, "More" )
- PORT_DIPNAME( 0x60, 0x60, "Timer Speed" ) PORT_DIPLOCATION("SW3:2,3")
- PORT_DIPSETTING( 0x60, "Slow" )
- PORT_DIPSETTING( 0x40, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x20, "Fast" )
- PORT_DIPSETTING( 0x00, "Super Fast" )
- PORT_DIPNAME( 0x80, 0x00, "Service" ) PORT_DIPLOCATION("SW3:4")
- PORT_DIPSETTING( 0x80, "Free Play With Level Select" )
- PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
-
- PORT_START("DSW2") /* b600 */
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2")
- PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_5C ) )
- PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:3,4")
- PORT_DIPSETTING( 0x0c, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_5C ) )
- PORT_DIPNAME( 0x30, 0x00, "Coin C" ) PORT_DIPLOCATION("SW2:5,6")
- PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x20, DEF_STR( 1C_5C ) )
- PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) /* Shown as "Unused" in the manual */
- PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Shown as "Unused" in the manual */
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( unkitpkr )
- PORT_START("DSW1") /* b000 */
- PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1")
- PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2")
- PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3")
- PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:4")
- PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW1:5")
- PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW1:6")
- PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:7")
- PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8")
-
- PORT_START("IN1") /* b100 */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // coin out
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 )
-
- PORT_START("IN2") /* b200 */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )
-
- PORT_START("IN3") /* b300 */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) // ok?
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
-
- PORT_START("DSW2") /* b600 */
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2") // ok
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x03, "1 Coin/10 Credits" )
- PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:3,4") // ok
- 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, 0x00, "Coin C" ) PORT_DIPLOCATION("SW2:5,6") // ok
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x20, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x30, "1 Coin/10 Credits" )
- PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" )
- PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( sidampkr )
- PORT_INCLUDE(unkitpkr)
-
- PORT_MODIFY("DSW1") /* b000 */
- PORT_DIPNAME( 0x01, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING( 0x00, DEF_STR( English ) )
- PORT_DIPSETTING( 0x01, DEF_STR( French ) )
- PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" )
- PORT_DIPNAME( 0x1c, 0x00, "Min/Max Bet" ) PORT_DIPLOCATION("SW1:3,4,5")
- PORT_DIPSETTING( 0x00, "Min:1; Max:2" )
- PORT_DIPSETTING( 0x04, "Min:1; Max:5" )
- PORT_DIPSETTING( 0x08, "Min:1; Max:8" )
- PORT_DIPSETTING( 0x0c, "Min:2; Max:10" )
- PORT_DIPSETTING( 0x10, "Min:5; Max:15" )
- PORT_DIPSETTING( 0x14, "Min:10; Max:20" )
- PORT_DIPSETTING( 0x18, "Min:15; Max:30" )
- PORT_DIPSETTING( 0x1c, "Min:20; Max:40" )
- PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
- PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
- PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" )
-INPUT_PORTS_END
-
-static const gfx_layout charlayout =
-{
- 8,8, /* 8*8 characters */
- RGN_FRAC(1,3),
- 3, /* 3 bits per pixel */
- { RGN_FRAC(0,3),RGN_FRAC(1,3),RGN_FRAC(2,3) }, /* the bitplanes are separated */
- { 7, 6, 5, 4, 3, 2, 1, 0 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
- 8*8 /* every char takes 8 consecutive bytes */
-};
-
-static GFXDECODE_START( gfx_wallc )
- GFXDECODE_ENTRY( "gfx1", 0 , charlayout, 0, 4 )
-GFXDECODE_END
-
-
-void wallc_state::init_wallc()
-{
- uint8_t *ROM = memregion("maincpu")->base();
-
- for (uint32_t i = 0; i < 0x2000 * 2; i++)
- {
- uint8_t c = ROM[ i ] ^ 0x55 ^ 0xff; /* NOTE: this can be shortened but now it fully reflects what the bigger module really does */
- c = bitswap<8>(c, 4,2,6,0,7,1,3,5); /* also swapped inside of the bigger module */
- ROM[ i ] = c;
- }
-}
-
-void wallc_state::init_wallca()
-{
- uint8_t *ROM = memregion("maincpu")->base();
-
- for (uint32_t i = 0; i < 0x4000; i++)
- {
- uint8_t c;
- if (i & 0x100)
- {
- c = ROM[i] ^ 0x4a;
- c = bitswap<8>(c, 4,7,1,3,2,0,5,6);
- }
- else
- {
- c = ROM[i] ^ 0xa5;
- c = bitswap<8>(c, 0,2,3,6,1,5,7,4);
- }
-
- ROM[ i ] = c;
- }
-}
-
-
-void wallc_state::wallc(machine_config &config)
-{
- /* basic machine hardware */
- Z80(config, m_maincpu, 12.288_MHz_XTAL / 4); /* 3.072 MHz ? */
- m_maincpu->set_addrmap(AS_PROGRAM, &wallc_state::wallc_map);
- m_maincpu->set_vblank_int("screen", FUNC(wallc_state::irq0_line_hold));
-
- ADC0804(config, "adc", 640000).vin_callback().set_ioport("DIAL"); // clock not verified
-
- /* video hardware */
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_refresh_hz(60);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
- screen.set_size(32*8, 32*8);
- screen.set_visarea(0*8, 32*8-1, 0*8, 32*8-1);
- screen.set_screen_update(FUNC(wallc_state::screen_update));
- screen.set_palette("palette");
-
- GFXDECODE(config, m_gfxdecode, "palette", gfx_wallc);
- PALETTE(config, "palette", FUNC(wallc_state::wallc_palette), 32);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- ay8912_device &aysnd(AY8912(config, "aysnd", 12288000 / 8));
- aysnd.port_a_read_callback().set_ioport("DSW2");
- aysnd.add_route(ALL_OUTPUTS, "mono", 0.30);
-}
-
-void wallc_state::wallca(machine_config &config)
-{
- wallc(config);
- m_maincpu->set_clock(12_MHz_XTAL / 4);
-}
-
-void wallc_state::unkitpkr(machine_config &config)
-{
- wallc(config);
- config.device_remove("adc");
-
- m_maincpu->set_addrmap(AS_PROGRAM, &wallc_state::unkitpkr_map);
-
- MCFG_VIDEO_START_OVERRIDE(wallc_state, unkitpkr)
- subdevice<palette_device>("palette")->set_init(FUNC(wallc_state::unkitpkr_palette));
-
- /* sound hardware */
- subdevice<ay8912_device>("aysnd")->reset_routes().add_route(ALL_OUTPUTS, "mono", 0.50);
-}
-
-void wallc_state::sidampkr(machine_config &config)
-{
- unkitpkr(config);
-
- MCFG_VIDEO_START_OVERRIDE(wallc_state, sidampkr)
-}
-
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
-ROM_START( wallc )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "wac05.h7", 0x0000, 0x2000, CRC(ab6e472e) SHA1(a387fec24fb899df349a35d1d3a91e897b074712) )
- ROM_LOAD( "wac1-52.h6", 0x2000, 0x2000, CRC(988eaa6d) SHA1(d5e5dbee6e7e0488fdecfb864198c686cbd5d59c) )
-
- ROM_REGION( 0x3000, "gfx1", 0 )
- ROM_LOAD( "wc1.e3", 0x0000, 0x1000, CRC(ca5c4b53) SHA1(5d2e14fe81cca4ec7dbe0c98eaa26890fca28e58) )
- ROM_LOAD( "wc2.e2", 0x1000, 0x1000, CRC(b7f52a59) SHA1(737e7616d7295762057fbdb69d65c8c1edc773dc) )
- ROM_LOAD( "wc3.e1", 0x2000, 0x1000, CRC(f6854b3a) SHA1(bc1e7f785c338c1afa4ab61c07c61397b3de0b01) )
-
- ROM_REGION( 0x0020, "proms", 0 )
- ROM_LOAD( "74s288.c2", 0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) )
-ROM_END
-
-/* this set uses a different encryption, but the decrypted code is the same */
-ROM_START( wallca )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "rom4.rom", 0x0000, 0x2000, CRC(ce43af1b) SHA1(c05419cb4aa57c6187b469573a3787d9123c4a05) )
- ROM_LOAD( "rom5.rom", 0x2000, 0x2000, CRC(b789a705) SHA1(2b62b14d1a3ad5eff5b8d502d7891e58379ee820) )
-
- ROM_REGION( 0x3000, "gfx1", 0 )
- ROM_LOAD( "rom3.rom", 0x0800, 0x0800, CRC(6634db73) SHA1(fe6104f974495a250e0cd14c0745eec8e44b8d3a) )
- ROM_LOAD( "rom2.rom", 0x1800, 0x0800, CRC(79f49c2c) SHA1(485fdba5ebdb4c01306f3ef26c992a513aa6b5dc) )
- ROM_LOAD( "rom1.rom", 0x2800, 0x0800, CRC(3884fd4f) SHA1(47254c8828128ac48fc15f05b52fe4d42d4919e7) )
-
- ROM_REGION( 0x0020, "proms", 0 )
- ROM_LOAD( "74s288.c2", 0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) )
-ROM_END
-
-ROM_START( brkblast )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "fadesa-r0.6m", 0x0000, 0x4000, CRC(4e96ca15) SHA1(87f1a3538712aa3d6c3713b845679dd42a4ba5a4) )
-
- ROM_REGION( 0x3000, "gfx1", 0 )
- ROM_LOAD( "rom3.rom", 0x0800, 0x0800, CRC(6634db73) SHA1(fe6104f974495a250e0cd14c0745eec8e44b8d3a) )
- ROM_LOAD( "rom2.rom", 0x1800, 0x0800, CRC(79f49c2c) SHA1(485fdba5ebdb4c01306f3ef26c992a513aa6b5dc) )
- ROM_LOAD( "rom1.rom", 0x2800, 0x0800, CRC(3884fd4f) SHA1(47254c8828128ac48fc15f05b52fe4d42d4919e7) )
-
- ROM_REGION( 0x0020, "proms", 0 )
- ROM_LOAD( "74s288.c2", 0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) )
-ROM_END
-
-
-/*
-
-It uses an epoxy brick like wallc
-Inside the brick there are:
-- 74245
-- 74368
-- Pal16r4
-
-74368 is a tristate not, it's used to:
--negate D0 that goes to the CPU if A15 is low
--negate D1 that goes to the CPU if A15 is low
--negate D2 that goes to the CPU if A15 is low
--negate D3 that goes to the CPU if A15 is low
-
--negate cpu clk to feed the pal clk ALWAYS
--negate A15 to feed 74245 /EN ALWAYS
-
-
-The 74245 let pass the data unmodified if A15 is high (like wallc)
-
-If A15 is low a Pal16r4 kick in
-this chip can modify D2,D3,D4,D5,D6,D7
-
-D0 and D1 are negated from outside to real Z80
-D2 and D3 are negated after begin modified by the Pal
-
-Pal input
-A1
-A3
-A6
-A15 (Output enable, not in equation)
-
-D2
-D3
-D4
-D5 (2 times)
-D7 (2 times)
-
-Pal output
-D2 (via not to cpu)
-D3 (via not to cpu)
-D4 to cpu
-D5 to cpu
-D6 to cpu
-D7 to cpu
-
-*/
-
-ROM_START( sidampkr )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "11600.0", 0x0000, 0x1000, CRC(88cac4d2) SHA1(a369da3dc80671eeff549077cf2ce860d5f4ea35) )
- ROM_LOAD( "11600.1", 0x1000, 0x1000, CRC(96cca320) SHA1(85326f7126c8250a22f35f6eed138051a9ab35cb) )
-
- ROM_REGION( 0x3000, "gfx1", 0 )
- ROM_LOAD( "11605.b", 0x0800, 0x0800, CRC(a7800f8a) SHA1(3955e0f71ced6fd759f52d12c0b39ab6aab31ca4) )
- ROM_LOAD( "11605.g", 0x1800, 0x0800, CRC(b7bebf1e) SHA1(764536989ba4c4c143a61d4453c3bba547bc630a) )
- ROM_LOAD( "11605.r", 0x2800, 0x0800, CRC(4d645b8d) SHA1(d4f8d11c4ef796cf66ebf2e6b8a11247d630951a) )
-
- ROM_REGION( 0x0020, "proms", 0 )
- ROM_LOAD( "11607-74.288", 0x0000, 0x0020, CRC(e14bf545) SHA1(5e8c5a9ea6e4842f27a47c1d7224ed294bbaa40b) )
-ROM_END
-
-void wallc_state::init_sidam()
-{
- uint8_t *ROM = memregion("maincpu")->base();
-
- for (int i = 0; i < 0x2000; i++)
- {
- uint8_t x = ROM[i];
- switch(i & 0x4a) // seems correct. Plaintext available in the 0x1150-0x1550 range. First 0x50 of code are very similar if not identical to unkitpkr.
- {
- case 0x00: x = bitswap<8>(x ^ (BIT(x, 6) ? 0xaf : 0x03), 7, 3, 5, 2, 6, 4, 1, 0); break;
- case 0x02: x = bitswap<8>(x ^ 0x77, 4, 6, 2, 5, 3, 7, 1, 0); break;
- case 0x08: x = bitswap<8>(x ^ 0x5f, 2, 4, 6, 3, 7, 5, 1, 0); break;
- case 0x0a: x = bitswap<8>(x ^ 0xd7, 6, 2, 4, 7, 5, 3, 1, 0); break;
- case 0x40: x = bitswap<8>(x ^ (BIT(x, 6) ? 0xaf : 0x03), 7, 3, 5, 2, 6, 4, 1, 0); break;
- case 0x42: x = bitswap<8>(x ^ 0xeb, 5, 7, 3, 6, 4, 2, 1, 0); break;
- case 0x48: x = bitswap<8>(x ^ (BIT(x, 6) ? 0xbb : 0x03), 3, 5, 7, 4, 2, 6, 1, 0); break;
- case 0x4a: x = bitswap<8>(x ^ 0xd7, 6, 2, 4, 7, 5, 3, 1, 0); break;
- }
-
- ROM[i] = x;
- }
-}
-
-/*
- Unknown Italian Poker
- Seems a brute hack of an unknown game.
-
- The "conforme alla legge n." string is overwriting the hands table:
-
- "CONFORME" = Royal Flush
- (blank line) = Straight Flush
- "ALLA LEGGE" = Four of a Kind
- (blank line) = Full House
- "N.904 DEL" = Flush
- (blank line) = Straight
- "17.12.1986" = Three of a Kind
- (blank line) = Double Pair
- "........." = Simple Pair
-
- Also the code is hacked/patched to avoid some jumps:
-
- 00cb: ld a,(hl)
- 00cc: cp c
- 00cd: nop
- 00ce: nop
- 00cf: nop
-
- 00d2: ld a,(hl)
- 00d3: cp c
- 00d4: nop
- 00d5: nop
- 00d6: nop
-
- 1866: pop af
- 1867: cp $46
- 1869: nop
- 186a: nop
- 186b: nop
-
- Main PCB has a Microchip AY-3-8912A PSG, a 3.6V battery and no ROM numbered 4.
- A daughterboard contains the Z80 and some RAM.
-*/
-ROM_START( unkitpkr )
- ROM_REGION( 0x8000, "maincpu", 0 )
- ROM_LOAD( "1", 0x0000, 0x2000, CRC(82dacf83) SHA1(d2bd4664737aeb968e9e34da74c2654e556c8567) )
-
- ROM_REGION( 0x3000, "gfx1", 0 )
- ROM_LOAD( "2", 0x0000, 0x1000, CRC(a359b7aa) SHA1(832a0dfd0689f76381f34d2d8419a7f09a6c403a) )
- ROM_CONTINUE( 0x0000, 0x1000 ) // first half is empty
- ROM_LOAD( "3", 0x1000, 0x1000, CRC(f7d7d48b) SHA1(d9787dcbbfdb5f8f8434d8e688c1ee1e0566969d) )
- ROM_CONTINUE( 0x1000, 0x1000 ) // first half is empty
- ROM_LOAD( "5", 0x2000, 0x1000, CRC(b3084b49) SHA1(21b2fa41492faf95e66c5765acfdae1685ee8784) )
- ROM_CONTINUE( 0x2000, 0x1000 ) // first half is empty
-
- ROM_REGION( 0x0020, "proms", 0 )
- ROM_LOAD( "74s288.c2", 0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) ) // dumped; matches the wallc bp
-ROM_END
-
-void wallc_state::init_unkitpkr()
-{
- // line swapping is too annoying to handle with ROM_LOAD macros
- uint8_t buffer[0x400];
- for (int b = 0; b < 0x3000; b += 0x400)
- {
- uint8_t *gfxrom = memregion("gfx1")->base() + b;
- for (int a = 0; a < 0x400; a++)
- buffer[a] = gfxrom[(a & 0x03f) | (a & 0x280) >> 1 | (a & 0x140) << 1];
- memcpy(gfxrom, &buffer[0], 0x400);
- }
-
- m_bookkeeping_mode = false;
- save_item(NAME(m_bookkeeping_mode));
-}
-
-
-// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS
-GAME( 1984, wallc, 0, wallc, wallc, wallc_state, init_wallc, ROT0, "Midcoin", "Wall Crash (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1984, wallca, wallc, wallca, wallc, wallc_state, init_wallca, ROT0, "Midcoin", "Wall Crash (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1984, brkblast, wallc, wallc, wallc, wallc_state, init_wallca, ROT0, "bootleg (Fadesa)", "Brick Blast (bootleg of Wall Crash)", MACHINE_SUPPORTS_SAVE ) // Spanish bootleg board, Fadesa stickers / text on various components
-
-GAME( 1984, sidampkr, 0, sidampkr, sidampkr, wallc_state, init_sidam, ROT270, "Sidam", "unknown Sidam poker", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // colors should be verified
-GAME( 198?, unkitpkr, 0, unkitpkr, unkitpkr, wallc_state, init_unkitpkr, ROT0, "<unknown>", "unknown Italian poker game", MACHINE_SUPPORTS_SAVE )