summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Roberto Fresca <robbie@robertofresca.com>2019-07-28 04:29:54 +0200
committer Roberto Fresca <robbie@robertofresca.com>2019-07-28 04:29:54 +0200
commit0d67ef6cd5e9bb8805434964a648ce5bf4ef6ee3 (patch)
tree5fc77096e64a0edddee22cbf13e7d83aae8d3f88
parent042294d9b0ccd888c341792b20c492f78887b61d (diff)
Super 21 improvements... [Roberto Fresca, Grull Osgo]
- Change setname from paradiss to super21. - Change game description to Super 21. - Added year and manufacturer. - Descramble the program properly, eliminating the skull warning screen. - Identified and set the correct CPU. - Mapped PIAs, CRTC, and AY8910 in the correct offsets. - Inputs from scratch. - Mapped both DIP switches banks with their own defaults and diplocations. - Rearrange the ROM load, graphics banks and gfxdecode. - Reworked the video hardware since palette system and attr RAM is quite different from the standard for this kind of hardware. - Promoted to working. New working machines -------------------- Super 21 [Roberto Fresca, Grull Osgo, Team Europe]
-rw-r--r--src/mame/drivers/goldnpkr.cpp301
-rw-r--r--src/mame/mame.lst2
2 files changed, 255 insertions, 48 deletions
diff --git a/src/mame/drivers/goldnpkr.cpp b/src/mame/drivers/goldnpkr.cpp
index ade773efb82..b9d92ebab0c 100644
--- a/src/mame/drivers/goldnpkr.cpp
+++ b/src/mame/drivers/goldnpkr.cpp
@@ -1273,8 +1273,6 @@
#include "emu.h"
#include "cpu/m6502/m6502.h"
-#include "cpu/m6502/m65sc02.h"
-#include "cpu/m6502/r65c02.h"
#include "cpu/m6805/m68705.h"
#include "cpu/z80/z80.h"
#include "machine/6821pia.h"
@@ -1325,7 +1323,7 @@ public:
void pottnpkr(machine_config &config);
void goldnpkr(machine_config &config);
void wcrdxtnd(machine_config &config);
- void paradiss(machine_config &config);
+ void super21p(machine_config &config);
void init_vkdlswwh();
void init_icp1db();
@@ -1365,6 +1363,7 @@ protected:
DECLARE_WRITE8_MEMBER(goldnpkr_colorram_w);
void witchcrd_palette(palette_device &palette) const;
+ void super21p_palette(palette_device &palette) const;
void goldnpkr_base(machine_config &config);
@@ -1391,8 +1390,10 @@ private:
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(wcrdxtnd_get_bg_tile_info);
+ TILE_GET_INFO_MEMBER(super21p_get_bg_tile_info);
void goldnpkr_palette(palette_device &palette) const;
DECLARE_VIDEO_START(wcrdxtnd);
+ DECLARE_VIDEO_START(super21p);
void wcrdxtnd_palette(palette_device &palette) const;
DECLARE_MACHINE_START(mondial);
DECLARE_MACHINE_RESET(mondial);
@@ -1409,7 +1410,7 @@ private:
void wildcrdb_mcu_map(address_map &map);
void witchcrd_falcon_map(address_map &map);
void witchcrd_map(address_map &map);
- void paradiss_map(address_map &map);
+ void super21p_map(address_map &map);
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_colorram;
@@ -1508,16 +1509,56 @@ TILE_GET_INFO_MEMBER(goldnpkr_state::wcrdxtnd_get_bg_tile_info)
SET_TILE_INFO_MEMBER(bank, code, color, 0);
}
+TILE_GET_INFO_MEMBER(goldnpkr_state::super21p_get_bg_tile_info)
+{
+/* 4 graphics banks system for Super 21 extended graphics.
+
+ - bits -
+ 7654 3210
+ -xxx ---- tiles color.
+ x--- --xx tiles bank.
+*/
+
+ int attr = m_colorram[tile_index];
+ int code = ((attr & 1) << 8) | m_videoram[tile_index];
+ int bank = (attr & 0x03); // bits 0-1, switch the gfx banks
+ int color = (attr & 0x70) >> 3; // bits 4-5-6 for color, shifted x2 to match the color groups used.
+
+ SET_TILE_INFO_MEMBER(bank, code, color, 0);
+
+/*
+ Color codes GFX bank 0 (chars)
+
+ 00 = Black.
+ 10 = Red.
+ 20 = Green.
+ 30 = Yellow.
+ 40 = Blue.
+ 50 = Magenta.
+ 60 = Cyan.
+ 70 = White.
+
+ In test mode, the DIP switches status are assigned with code 00,
+ so you can't see them since they are black on black background.
+
+*/
+}
+
void goldnpkr_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(goldnpkr_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
}
-VIDEO_START_MEMBER(goldnpkr_state,wcrdxtnd)
+VIDEO_START_MEMBER(goldnpkr_state, wcrdxtnd)
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(goldnpkr_state::wcrdxtnd_get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
}
+VIDEO_START_MEMBER(goldnpkr_state, super21p)
+{
+ m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(goldnpkr_state::super21p_get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+}
+
uint32_t goldnpkr_state::screen_update_goldnpkr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
@@ -1641,6 +1682,48 @@ void goldnpkr_state::wcrdxtnd_palette(palette_device &palette) const
}
}
+void goldnpkr_state::super21p_palette(palette_device &palette) const
+{
+/*
+ Each graphics bank has its own palette. The first 3 are tied to
+ bipolar PROMs, and the las one is RGB direct.
+
+ GFX bank 0 ---> bipolar PROM 1
+ GFX bank 1 ---> bipolar PROM 2
+ GFX bank 2 ---> bipolar PROM 3
+ GFX bank 3 ---> RGB direct.
+
+ 7654 3210
+ ---- ---x red component.
+ ---- --x- green component.
+ ---- -x-- blue component.
+ ---- x--- unknown (maybe intensity).
+ xxxx ---- unused.
+*/
+
+ // 0000?BGR
+ uint8_t const *const color_prom = memregion("proms")->base();
+ if (!color_prom)
+ return;
+
+ for (int i = 0; i < (palette.entries() * 3) / 4; i++)
+ {
+// last quarter of palette is RGB direct, for gfx bank 3 (title)
+// todo: implement bit 3.
+
+ // red component
+ int const r = BIT(color_prom[i], 0) * 0xff;
+
+ // green component
+ int const g = BIT(color_prom[i], 1) * 0xff;
+
+ // blue component
+ int const b = BIT(color_prom[i], 2) * 0xff;
+
+ palette.set_pen_color(i, rgb_t(r, g, b));
+ }
+}
+
/*******************************************
* R/W Handlers *
@@ -1923,7 +2006,6 @@ void goldnpkr_state::witchcrd_falcon_map(address_map &map)
void goldnpkr_state::wildcard_map(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0x7fff)
map(0x0000, 0x07ff).ram().share("nvram"); /* battery backed RAM */
map(0x0800, 0x0800).w("crtc", FUNC(mc6845_device::address_w));
map(0x0801, 0x0801).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
@@ -2041,22 +2123,18 @@ void goldnpkr_state::bchancep_map(address_map &map)
map(0x2000, 0x7fff).rom();
}
-void goldnpkr_state::paradiss_map(address_map &map)
+void goldnpkr_state::super21p_map(address_map &map)
{
-// ADDRESS_MAP_GLOBAL_MASK(0x7fff)
map(0x0000, 0x07ff).ram().share("nvram"); /* battery backed RAM */
map(0x0800, 0x0800).w("crtc", FUNC(mc6845_device::address_w));
map(0x0801, 0x0801).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
- map(0x0844, 0x0847).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
- map(0x0848, 0x084b).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
- map(0x0884, 0x0887).ram(); // unknown
- map(0x0888, 0x088b).ram(); // unknown
+ map(0x0804, 0x0807).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0808, 0x080b).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x1000, 0x13ff).ram().w(FUNC(goldnpkr_state::goldnpkr_videoram_w)).share("videoram");
map(0x1800, 0x1bff).ram().w(FUNC(goldnpkr_state::goldnpkr_colorram_w)).share("colorram");
- map(0x2000, 0x2000).portr("SW2");
- map(0x2200, 0x27ff).rom(); /* for VK set */
- map(0x2800, 0x2fff).ram(); /* for VK set */
- map(0x3000, 0xffff).rom(); /* for VK set. bootleg starts from 4000 */
+ map(0x2000, 0x2000).w("crtc", FUNC(mc6845_device::address_w));
+ map(0x2001, 0x2001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
+ map(0x8000, 0xffff).rom();
}
@@ -4191,6 +4269,99 @@ static INPUT_PORTS_START( bonuspkr )
INPUT_PORTS_END
+static INPUT_PORTS_START( super21p )
+ /* Multiplexed - 4x5bits */
+ PORT_START("IN0-0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Meters")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME("Double Up")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Hit")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) PORT_NAME("Not Use")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("IN0-1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("Not Use") PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Key Pay") PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Big")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME("Small")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("IN0-2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("IN0-3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("Not Use") PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_NAME("C.A.R.") PORT_CODE(KEYCODE_G)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("SW1")
+ PORT_DIPNAME( 0x03, 0x03, "Limit" ) PORT_DIPLOCATION("SW1:8,7")
+ PORT_DIPSETTING( 0x03, "3000" )
+ PORT_DIPSETTING( 0x02, "5000" )
+ PORT_DIPSETTING( 0x01, "10000" )
+ PORT_DIPSETTING( 0x00, "30000" )
+ PORT_DIPNAME( 0x04, 0x04, "4 Of a Kind" ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPNAME( 0x08, 0x08, "Credit Limit" ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPNAME( 0x10, 0x10, "Cr. Limit" ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPNAME( 0x20, 0x20, "W. Point" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPNAME( 0x40, 0x40, "Fever Chance" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPNAME( 0x80, 0x80, "Game Mode" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, "Play" )
+ PORT_DIPSETTING( 0x00, "Port Check" )
+
+ PORT_START("SW2")
+ PORT_DIPNAME( 0x07, 0x07, "Coin1-Coin2-NoteIn" ) PORT_DIPLOCATION("SW2:8,7,6")
+ PORT_DIPSETTING( 0x07, "10-100-50" )
+ PORT_DIPSETTING( 0x06, "5-50-25" )
+ PORT_DIPSETTING( 0x05, "4-40-20" )
+ PORT_DIPSETTING( 0x04, "3-30-15" )
+ PORT_DIPSETTING( 0x03, "2-20-10" )
+ PORT_DIPSETTING( 0x02, "1-10-5" )
+ PORT_DIPSETTING( 0x01, "1/2 - 6 - 3" )
+ PORT_DIPSETTING( 0x00, "1/5 - 2 - 1" )
+ PORT_DIPNAME( 0x08, 0x08, "PayOut" ) PORT_DIPLOCATION("SW2:5")
+ PORT_DIPSETTING( 0x08, "Direct" )
+ PORT_DIPSETTING( 0x00, "Credit" )
+ PORT_DIPNAME( 0x10, 0x10, "Win-Up Win" ) PORT_DIPLOCATION("SW2:4")
+ PORT_DIPSETTING( 0x10, "90%" )
+ PORT_DIPSETTING( 0x00, "80%" )
+ PORT_DIPNAME( 0x20, 0x20, "Duty" ) PORT_DIPLOCATION("SW2:3")
+ PORT_DIPSETTING( 0x20, "Weak" )
+ PORT_DIPSETTING( 0x00, "Strong" )
+ PORT_DIPNAME( 0xc0, 0xc0, "Game Win" ) PORT_DIPLOCATION("SW2:2,1")
+ PORT_DIPSETTING( 0xc0, "90%" )
+ PORT_DIPSETTING( 0x80, "80%" )
+ PORT_DIPSETTING( 0x40, "70%" )
+ PORT_DIPSETTING( 0x00, "60%" )
+INPUT_PORTS_END
+
/*********************************************
* Graphics Layouts *
@@ -4207,6 +4378,17 @@ static const gfx_layout tilelayout =
8*8
};
+static const gfx_layout fixedtilelayout =
+{
+ 8, 8,
+ 0x100,
+ 3,
+ { 0, 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
+};
+
/**************************************************
* Graphics Decode Information *
@@ -4236,10 +4418,11 @@ static GFXDECODE_START( gfx_wcrdxtnd )
GFXDECODE_ENTRY( "gfx15", 0, tilelayout, 0, 16 )
GFXDECODE_END
-static GFXDECODE_START( gfx_paradiss )
- GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 16 )
-// GFXDECODE_ENTRY( "gfx1", 0x1000, tilelayout, 0, 16 )
- GFXDECODE_ENTRY( "gfx1", 0x1000, tilelayout, 16, 16 )
+static GFXDECODE_START( gfx_super21p )
+ GFXDECODE_ENTRY( "gfx1", 0, fixedtilelayout, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0, fixedtilelayout, 0x100, 16 )
+ GFXDECODE_ENTRY( "gfx3", 0, fixedtilelayout, 0x200, 16 )
+ GFXDECODE_ENTRY( "gfx4", 0, fixedtilelayout, 0x300, 16 )
GFXDECODE_END
@@ -4500,13 +4683,12 @@ void goldnpkr_state::wcfalcon(machine_config &config)
AY8910(config, m_ay8910, MASTER_CLOCK/4).add_route(ALL_OUTPUTS, "mono", 1.00); /* guess, seems ok */
}
-void goldnpkr_state::paradiss(machine_config &config)
+void goldnpkr_state::super21p(machine_config &config)
{
goldnpkr_base(config);
/* basic machine hardware */
- R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */
- m_maincpu->set_addrmap(AS_PROGRAM, &goldnpkr_state::paradiss_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &goldnpkr_state::super21p_map);
m_pia[0]->writepa_handler().set(FUNC(goldnpkr_state::mux_port_w));
m_pia[0]->writepb_handler().set(FUNC(goldnpkr_state::ay8910_control_w));
@@ -4514,12 +4696,16 @@ void goldnpkr_state::paradiss(machine_config &config)
m_pia[1]->writepa_handler().set(FUNC(goldnpkr_state::ay8910_data_w));
/* video hardware */
- m_palette->set_init(FUNC(goldnpkr_state::witchcrd_palette));
- m_gfxdecode->set_info(gfx_paradiss);
+ MCFG_VIDEO_START_OVERRIDE(goldnpkr_state, super21p)
+ m_gfxdecode->set_info(gfx_super21p);
+
+ PALETTE(config.replace(), m_palette, FUNC(goldnpkr_state::super21p_palette), 1024);
/* sound hardware */
SPEAKER(config, "mono").front_center();
- AY8910(config, m_ay8910, MASTER_CLOCK/4).add_route(ALL_OUTPUTS, "mono", 1.00); /* guess, seems ok */
+ AY8910(config, m_ay8910, MASTER_CLOCK/4).add_route(ALL_OUTPUTS, "mono", 1.00); // guess, seems ok
+ m_ay8910->port_a_read_callback().set_ioport("SW1");
+ m_ay8910->port_b_read_callback().set_ioport("SW2");
}
void goldnpkr_state::wildcard(machine_config &config)
@@ -10357,7 +10543,7 @@ ROM_START( falcnwldc )
ROM_LOAD( "3.b4", 0x1800, 0x0800, CRC(d9246780) SHA1(4ceb24131ec6208b742ba80373201aa53c50732d) )
ROM_REGION( 0x1800, "gfx1", 0 )
- ROM_FILL( 0x0000, 0x1000, 0x0000 ) /* filling bitplanes */
+ ROM_FILL( 0x0000, 0x1000, 0x0000 ) /* filling bitplanes */
ROM_COPY( "temp", 0x0800, 0x1000, 0x0800 ) /* second half of 1.b1 */
ROM_REGION( 0x1800, "gfx2", 0 )
@@ -11254,14 +11440,15 @@ ROM_END
/*
- SE Paradise.
- Paradais PCB
- "SUPN-072"
+ Super 21.
+
+ ROMs stickered with "SE Paradise".
+ PCB stickered with "Paradais" and etched "SUPN-072"
1x Scratched CPU (seems 6502 family)
1x GI AY-3-8910.
2x Hitachi HD6821P.
- 1x IC CIC8645BE (seems 6845 CRTC type)
+ 1x IC CIC8645BE (looks like a 6845 CRTC variant)
3x 27256 EPROMs.
3x N82S129AN Bipolar PROMs.
@@ -11271,26 +11458,46 @@ ROM_END
1x 10.000 MHz. Xtal.
2x 8 DIP switches bank.
+ Edge connector adapter from 2x 22+10 ro 2x 32+10, with optoisolators
+ and one big relay, with unknown purposes. Etched "PS Public Softwear".
+
*/
-ROM_START( paradiss )
+ROM_START( super21p )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "13.ic4", 0xc000, 0x2000, CRC(6f414354) SHA1(290e97b876ce7aa9e273fe5f597caaa2e31992a8) ) // ok
- ROM_CONTINUE( 0x8000, 0x2000) // to check...
- ROM_CONTINUE( 0xe000, 0x2000) // ok
- ROM_CONTINUE( 0xa000, 0x2000) // to check...
+ ROM_LOAD( "13.ic4", 0xa000, 0x2000, CRC(6f414354) SHA1(290e97b876ce7aa9e273fe5f597caaa2e31992a8) ) // ok
+ ROM_CONTINUE( 0x8000, 0x2000) // ok
+ ROM_CONTINUE( 0xe000, 0x2000) // ok
+ ROM_CONTINUE( 0xc000, 0x2000) // ok
- ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "1.ic10", 0x0000, 0x4000, CRC(40bb114e) SHA1(be4636455c6dd303255d21799cd17c590d8f1423) ) // identical halves, 2 bitplanes.
- ROM_IGNORE( 0x4000) // discarding the 2nd half.
- ROM_LOAD( "2.ic9", 0x4000, 0x2000, CRC(51c08823) SHA1(123dab7485cac23ee1d72fd50e4af273c946fc56) ) // identical halves, 1 bitplane.
- ROM_IGNORE( 0x6000) // discarding the 2nd half and the unused 0x2000.
+ ROM_REGION( 0x6000, "gfxpool", 0 )
+ ROM_LOAD( "1.ic10", 0x0000, 0x4000, CRC(40bb114e) SHA1(be4636455c6dd303255d21799cd17c590d8f1423) ) // identical halves, 2 bitplanes.
+ ROM_IGNORE( 0x4000) // discarding the 2nd half.
+ ROM_LOAD( "2.ic9", 0x4000, 0x2000, CRC(51c08823) SHA1(123dab7485cac23ee1d72fd50e4af273c946fc56) ) // identical halves, 1 bitplane.
+ ROM_IGNORE( 0x6000) // discarding the 2nd half and the unused 0x2000.
- ROM_REGION( 0x6000, "gfx2", 0 )
- ROM_LOAD( "1.ic10", 0x0000, 0x4000, CRC(40bb114e) SHA1(be4636455c6dd303255d21799cd17c590d8f1423) ) // identical halves, 2 bitplanes.
- ROM_IGNORE( 0x4000) // discarding the 2nd half.
- ROM_LOAD( "2.ic9", 0x4000, 0x2000, CRC(51c08823) SHA1(123dab7485cac23ee1d72fd50e4af273c946fc56) ) // identical halves, 1 bitplane.
- ROM_IGNORE( 0x6000) // discarding the 2nd half and the unused 0x2000.
+ ROM_REGION( 0x1800, "gfx1", 0 )
+ ROM_COPY( "gfxpool", 0x0000, 0x1000, 0x0800 ) // src-dest-size
+ ROM_COPY( "gfxpool", 0x2000, 0x0800, 0x0800 ) // src-dest-size
+ ROM_COPY( "gfxpool", 0x4000, 0x0000, 0x0800 ) // src-dest-size
+
+ ROM_REGION( 0x1800, "gfx2", 0 )
+ ROM_COPY( "gfxpool", 0x0800, 0x1000, 0x0800 ) // src-dest-size
+ ROM_COPY( "gfxpool", 0x2800, 0x0800, 0x0800 ) // src-dest-size
+ ROM_COPY( "gfxpool", 0x4800, 0x0000, 0x0800 ) // src-dest-size
+
+ ROM_REGION( 0x1800, "gfx3", 0 )
+ ROM_COPY( "gfxpool", 0x1000, 0x1000, 0x0800 ) // src-dest-size
+ ROM_COPY( "gfxpool", 0x3000, 0x0800, 0x0800 ) // src-dest-size
+ ROM_COPY( "gfxpool", 0x5000, 0x0000, 0x0800 ) // src-dest-size
+
+ ROM_REGION( 0x1800, "gfx4", 0 )
+ ROM_COPY( "gfxpool", 0x1800, 0x1000, 0x0800 ) // src-dest-size
+ ROM_COPY( "gfxpool", 0x3800, 0x0800, 0x0800 ) // src-dest-size
+ ROM_COPY( "gfxpool", 0x5800, 0x0000, 0x0800 ) // src-dest-size
+
+// ROM_FILL( 0x0000, 0x1000, 0x0000 ) /* filling the R-G bitplanes */
+// ROM_FILL( 0x2000, 0x1000, 0x0000 ) /* filling the R-G bitplanes */
ROM_REGION( 0x0300, "proms", 0 )
ROM_LOAD( "82s129_1.ic31", 0x0000, 0x0100, CRC(c3d777b4) SHA1(5a3c0325dcbddde3f8ae2ffbc1cb56cfccda308d) )
@@ -11800,7 +12007,7 @@ GAMEL( 1990, falcnwlda, falcnwld, wildcard, wildcard, goldnpkr_state, empty_init
GAMEL( 1990, falcnwldb, falcnwld, wildcard, wildcard, goldnpkr_state, empty_init, ROT0, "Video Klein", "Falcons Wild - World Wide Poker (Video Klein, set 2)", 0, layout_goldnpkr )
GAME( 1983, falcnwldc, falcnwld, wildcrdb, wildcard, goldnpkr_state, init_flcnw, ROT0, "Falcon", "Falcons Wild - World Wide Poker (Falcon original)", MACHINE_NOT_WORKING )
-GAME( 1987, paradiss, 0, paradiss, wildcard, goldnpkr_state, empty_init, ROT0, "Paradise", "Paradise 21", MACHINE_NOT_WORKING )
+GAME( 1987, super21p, 0, super21p, super21p, goldnpkr_state, empty_init, ROT0, "Public MNG", "Super 21", MACHINE_IMPERFECT_COLORS )
GAMEL( 1991, witchcrd, 0, witchcrd, witchcrd, goldnpkr_state, init_vkdlsc, ROT0, "Video Klein?", "Witch Card (Video Klein CPU box, set 1)", 0, layout_goldnpkr )
GAME( 1991, witchcda, witchcrd, witchcrd, witchcda, goldnpkr_state, empty_init, ROT0, "<unknown>", "Witch Card (Spanish, witch game, set 1)", 0 )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 06d148c26ca..898928f50e2 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -14437,7 +14437,6 @@ megadpkrb // (c) 1990 Blitz System Inc
ngold // 198? Unknown
ngolda // 198? Unknown
ngoldb // 198? Unknown
-paradiss // 1987 Paradise
pmpoker // (c) 1981 PlayMan
poker91 // 1991, Unknown
pokerdub // 198?, Unknown
@@ -14461,6 +14460,7 @@ royalea // Unknown
silverga // 1983, Unknown
sloco93 // 1993, Unknown
sloco93a // 1993, Unknown
+super21p // 1987, Public MNG
super98 // 199?, Unknown
superdbl // 198? Karateco
videtrna // Unknown