New machines marked as NOT_WORKING

----------------------------------
Magic Touch [Ivan Vangelista]
This commit is contained in:
Ivan Vangelista 2022-06-13 22:56:46 +02:00
parent ba5e0c747a
commit e1d00b62ba
5 changed files with 430 additions and 367 deletions

View File

@ -3349,8 +3349,6 @@ files {
MAME_DIR .. "src/mame/video/playmark.cpp", MAME_DIR .. "src/mame/video/playmark.cpp",
MAME_DIR .. "src/mame/drivers/powerbal.cpp", MAME_DIR .. "src/mame/drivers/powerbal.cpp",
MAME_DIR .. "src/mame/drivers/sderby.cpp", MAME_DIR .. "src/mame/drivers/sderby.cpp",
MAME_DIR .. "src/mame/includes/sderby.h",
MAME_DIR .. "src/mame/video/sderby.cpp",
MAME_DIR .. "src/mame/drivers/sslam.cpp", MAME_DIR .. "src/mame/drivers/sslam.cpp",
MAME_DIR .. "src/mame/includes/sslam.h", MAME_DIR .. "src/mame/includes/sslam.h",
MAME_DIR .. "src/mame/video/sslam.cpp", MAME_DIR .. "src/mame/video/sslam.cpp",

View File

@ -11,9 +11,12 @@
Supported games: Supported games:
Super Derby, 1996, Playmark. Lucky Boom 1996, Playmark.
Scacco Matto / Space Win, 1996, Playmark. Scacco Matto / Space Win, 1996, Playmark.
Croupier (Playmark Roulette), 1997, Playmark. Shiny Golds, 1996, Playmark.
Super Derby (2 sets), 1996, Playmark.
Croupier (Playmark Roulette) (2 sets), 1997, Playmark.
Magic Touch, 1998, Playmark.
******************************************************************************************** ********************************************************************************************
@ -54,71 +57,269 @@
TO DO : TO DO :
- figure out the reads from 0x308002.w and 0x30800e.w (see sderby_input_r read handler) - figure out the reads from 0x308002.w and 0x30800e.w (see input_r read handler)
(by default, demo sounds are OFF, so change this in the "test mode") (by default, demo sounds are OFF, so change this in the "test mode");
- dump and hook up the MCU for croupier;
- almost everything for magictch. To enter gameplay just do PC=29c2 when it enters a loop at 0x29c0
*******************************************************************************************/ *******************************************************************************************/
#include "emu.h" #include "emu.h"
#include "includes/sderby.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "machine/nvram.h" #include "machine/nvram.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
#include "emupal.h"
#include "screen.h" #include "screen.h"
#include "speaker.h" #include "speaker.h"
#include "tilemap.h"
#include "pmroulet.lh" #include "pmroulet.lh"
#include "sderby.lh" #include "sderby.lh"
#include "spacewin.lh" #include "spacewin.lh"
// configurable logging
#define LOG_INPUTS (1U << 1)
#define LOG_CROUPIER_MCU (1U << 2)
//#define VERBOSE (LOG_GENERAL | LOG_INPUTS | LOG_CROUPIER_MCU)
#include "logmacro.h"
#define LOGINPUTS(...) LOGMASKED(LOG_INPUTS, __VA_ARGS__)
#define LOGCROUPIERMCU(...) LOGMASKED(LOG_CROUPIER_MCU, __VA_ARGS__)
namespace {
class sderby_state : public driver_device
{
public:
sderby_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_bg_videoram(*this, "bg_videoram"),
m_md_videoram(*this, "md_videoram"),
m_fg_videoram(*this, "fg_videoram"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_in(*this, "IN%u", 0U),
m_lamps(*this, "lamp%u", 1U)
{ }
void luckboom(machine_config &config);
void magictch(machine_config &config);
void pmroulet(machine_config &config);
void sderby(machine_config &config);
void sderbya(machine_config &config);
void shinygld(machine_config &config);
void spacewin(machine_config &config);
protected:
virtual void machine_start() override { m_lamps.resolve(); }
virtual void video_start() override;
private:
required_shared_ptr<uint16_t> m_bg_videoram;
required_shared_ptr<uint16_t> m_md_videoram;
required_shared_ptr<uint16_t> m_fg_videoram;
required_shared_ptr<uint16_t> m_spriteram;
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_ioport_array<3> m_in;
output_finder<7> m_lamps;
tilemap_t *m_bg_tilemap = nullptr;
tilemap_t *m_md_tilemap = nullptr;
tilemap_t *m_fg_tilemap = nullptr;
uint16_t m_scroll[6]{};
uint16_t input_r(offs_t offset);
uint16_t roulette_input_r(offs_t offset);
uint16_t rprot_r();
void rprot_w(uint16_t data);
void sderby_out_w(uint16_t data);
void scmatto_out_w(uint16_t data);
void roulette_out_w(uint16_t data);
void bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void md_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void fg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void scroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_md_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_pmroulet(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void luckboom_map(address_map &map);
void magictch_map(address_map &map);
void roulette_map(address_map &map);
void sderby_map(address_map &map);
void sderbya_map(address_map &map);
void shinygld_map(address_map &map);
void spacewin_map(address_map &map);
};
// video
TILE_GET_INFO_MEMBER(sderby_state::get_bg_tile_info)
{
int tileno = m_bg_videoram[tile_index * 2];
int colour = m_bg_videoram[tile_index * 2 + 1] & 0x0f;
tileinfo.set(1, tileno, colour, 0);
}
void sderby_state::bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_bg_videoram[offset]);
m_bg_tilemap->mark_tile_dirty(offset / 2);
}
TILE_GET_INFO_MEMBER(sderby_state::get_md_tile_info)
{
int tileno = m_md_videoram[tile_index * 2];
int colour = m_md_videoram[tile_index * 2 + 1] & 0x0f;
tileinfo.set(1, tileno, colour + 16, 0);
}
void sderby_state::md_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_md_videoram[offset]);
m_md_tilemap->mark_tile_dirty(offset / 2);
}
TILE_GET_INFO_MEMBER(sderby_state::get_fg_tile_info)
{
int tileno = m_fg_videoram[tile_index * 2];
int colour = m_fg_videoram[tile_index * 2 + 1] & 0x0f;
tileinfo.set(0, tileno, colour + 32, 0);
}
void sderby_state::fg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_fg_videoram[offset]);
m_fg_tilemap->mark_tile_dirty(offset / 2);
}
void sderby_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int height = m_gfxdecode->gfx(0)->height();
int colordiv = m_gfxdecode->gfx(0)->granularity() / 16;
for (int offs = 4; offs < m_spriteram.bytes() / 2; offs += 4)
{
int sy = m_spriteram[offs + 3 - 4]; // -4? what the... ???
if (sy == 0x2000) return; // end of list marker
int flipx = sy & 0x4000;
int sx = (m_spriteram[offs + 1] & 0x01ff) - 16 - 7;
sy = (256 - 8 - height - sy) & 0xff;
int code = m_spriteram[offs + 2];
int color = (m_spriteram[offs + 1] & 0x3e00) >> 9;
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
code,
color / colordiv + 48,
flipx, 0,
sx, sy, 0);
}
}
void sderby_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(sderby_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
m_md_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(sderby_state::get_md_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
m_md_tilemap->set_transparent_pen(0);
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(sderby_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fg_tilemap->set_transparent_pen(0);
save_item(NAME(m_scroll));
}
uint32_t sderby_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
m_md_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
uint32_t sderby_state::screen_update_pmroulet(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_md_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
void sderby_state::scroll_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
data = COMBINE_DATA(&m_scroll[offset]);
switch (offset)
{
case 0: m_fg_tilemap->set_scrollx(0, data + 2); break;
case 1: m_fg_tilemap->set_scrolly(0, data - 8); break;
case 2: m_md_tilemap->set_scrollx(0, data + 4); break;
case 3: m_md_tilemap->set_scrolly(0, data - 8); break;
case 4: m_bg_tilemap->set_scrollx(0, data + 6); break;
case 5: m_bg_tilemap->set_scrolly(0, data - 8); break;
}
}
// machine
/*************************** /***************************
* R/W Handlers * * R/W Handlers *
***************************/ ***************************/
uint16_t sderby_state::sderby_input_r(offs_t offset) uint16_t sderby_state::input_r(offs_t offset)
{ {
switch (offset) switch (offset)
{ {
case 0x00 >> 1: case 0x00 >> 1:
return ioport("IN0")->read(); return m_in[0]->read();
case 0x02 >> 1: case 0x02 >> 1:
return 0xffff; // to avoid game to reset (needs more work) return 0xffff; // to avoid game to reset (needs more work)
} }
logerror("sderby_input_r : offset = %x - PC = %06x\n",offset*2,m_maincpu->pc()); LOGINPUTS("input_r : offset = %x - PC = %06x\n", offset * 2, m_maincpu->pc());
return 0xffff; return 0xffff;
} }
uint16_t sderby_state::sderbya_input_r(offs_t offset)
{
switch (offset)
{
case 0x00 >> 1:
return ioport("IN0")->read();
case 0x02 >> 1:
return 0xffff; // to avoid game to reset (needs more work)
}
logerror("sderby_input_r : offset = %x - PC = %06x\n",offset*2,m_maincpu->pc());
return 0xffff;
}
uint16_t sderby_state::roulette_input_r(offs_t offset) uint16_t sderby_state::roulette_input_r(offs_t offset)
{ {
switch (offset) switch (offset)
{ {
case 0x00 >> 1: case 0x00 >> 1:
return ioport("IN0")->read(); return m_in[0]->read();
case 0x02 >> 1: case 0x02 >> 1:
return ioport("IN1")->read(); return m_in[1]->read();
case 0x04 >> 1: case 0x04 >> 1:
return ioport("IN2")->read(); return m_in[2]->read();
} }
return 0xffff; return 0xffff;
@ -136,7 +337,7 @@ uint16_t sderby_state::roulette_input_r(offs_t offset)
Writes to the MCU are always the same values. Writes to the MCU are always the same values.
At beginning, the code writes 3 values: 0x53, 0x5a and 0x0d. At beginning, the code writes 3 values: 0x53, 0x5a and 0x0d.
Then, whith each placed bet the code normally writes 0x4e. Then, with each placed bet the code normally writes 0x4e.
After that, there are 2 reads expecting the MCU response. After that, there are 2 reads expecting the MCU response.
Most probably there is a shared RAM there for communication, Most probably there is a shared RAM there for communication,
@ -148,7 +349,7 @@ uint16_t sderby_state::roulette_input_r(offs_t offset)
uint16_t sderby_state::rprot_r() uint16_t sderby_state::rprot_r()
{ {
logerror("rprot_r : offset = %02x\n",m_maincpu->pc()); LOGCROUPIERMCU("rprot_r : offset = %02x\n", m_maincpu->pc());
/* This is the only mask I found that allow a normal play. /* This is the only mask I found that allow a normal play.
Using other values, the game hangs waiting for response, Using other values, the game hangs waiting for response,
@ -162,7 +363,7 @@ uint16_t sderby_state::rprot_r()
void sderby_state::rprot_w(uint16_t data) void sderby_state::rprot_w(uint16_t data)
{ {
logerror("rprot_w %02x\n", data); LOGCROUPIERMCU("rprot_w %02x\n", data);
} }
@ -206,9 +407,9 @@ void sderby_state::sderby_out_w(uint16_t data)
x--- ---- End of Race lamp. x--- ---- End of Race lamp.
*/ */
m_lamps[0] = BIT(data, 0); /* Lamp 1 - START */ m_lamps[0] = BIT(data, 0); // Lamp 1 - START
m_lamps[1] = BIT(data, 1); /* Lamp 2 - BET */ m_lamps[1] = BIT(data, 1); // Lamp 2 - BET
m_lamps[2] = BIT(data, 15); /* Lamp 3 - END OF RACE */ m_lamps[2] = BIT(data, 15); // Lamp 3 - END OF RACE
machine().bookkeeping().coin_counter_w(0, data & 0x2000); machine().bookkeeping().coin_counter_w(0, data & 0x2000);
} }
@ -251,13 +452,13 @@ void sderby_state::scmatto_out_w(uint16_t data)
--x- ---- Coin counter. --x- ---- Coin counter.
*/ */
m_lamps[0] = BIT(data, 0); /* Lamp 1 - HOLD 1 */ m_lamps[0] = BIT(data, 0); // Lamp 1 - HOLD 1
m_lamps[1] = BIT(data, 1); /* Lamp 2 - HOLD 2 */ m_lamps[1] = BIT(data, 1); // Lamp 2 - HOLD 2
m_lamps[2] = BIT(data, 2); /* Lamp 3 - HOLD 3 */ m_lamps[2] = BIT(data, 2); // Lamp 3 - HOLD 3
m_lamps[3] = BIT(data, 3); /* Lamp 4 - HOLD 4 */ m_lamps[3] = BIT(data, 3); // Lamp 4 - HOLD 4
m_lamps[4] = BIT(data, 4); /* Lamp 5 - HOLD 5 */ m_lamps[4] = BIT(data, 4); // Lamp 5 - HOLD 5
m_lamps[5] = BIT(data, 5); /* Lamp 6 - START */ m_lamps[5] = BIT(data, 5); // Lamp 6 - START
m_lamps[6] = BIT(data, 6); /* Lamp 7 - BET */ m_lamps[6] = BIT(data, 6); // Lamp 7 - BET
machine().bookkeeping().coin_counter_w(0, data & 0x2000); machine().bookkeeping().coin_counter_w(0, data & 0x2000);
} }
@ -287,8 +488,8 @@ void sderby_state::roulette_out_w(uint16_t data)
---- x--- Unknown (always activated). ---- x--- Unknown (always activated).
*/ */
m_lamps[0] = BIT(data, 0); /* Lamp 1 - START */ m_lamps[0] = BIT(data, 0); // Lamp 1 - START
m_lamps[1] = BIT(data, 1); /* Lamp 2 - BET */ m_lamps[1] = BIT(data, 1); // Lamp 2 - BET
} }
@ -299,18 +500,18 @@ void sderby_state::roulette_out_w(uint16_t data)
void sderby_state::sderby_map(address_map &map) void sderby_state::sderby_map(address_map &map)
{ {
map(0x000000, 0x07ffff).rom(); map(0x000000, 0x07ffff).rom();
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */ map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */ map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */ map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w)); map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
map(0x10400c, 0x10400d).nopw(); /* ??? - check code at 0x000456 (executed once at startup) */ map(0x10400c, 0x10400d).nopw(); // ??? - check code at 0x000456 (executed once at startup)
map(0x10400e, 0x10400f).nopw(); /* ??? - check code at 0x000524 (executed once at startup) */ map(0x10400e, 0x10400f).nopw(); // ??? - check code at 0x000524 (executed once at startup)
map(0x200000, 0x200fff).ram().share("spriteram"); map(0x200000, 0x200fff).ram().share(m_spriteram);
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderby_input_r)); map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w)); /* output port */ map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w));
map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x500000, 0x500001).nopw(); /* unknown... write 0x01 in game, and 0x00 on reset */ map(0x500000, 0x500001).nopw();
map(0xd00000, 0xd007ff).ram().share("nvram"); map(0xd00000, 0xd007ff).ram().share("nvram");
map(0xffc000, 0xffffff).ram(); map(0xffc000, 0xffffff).ram();
} }
@ -318,18 +519,18 @@ void sderby_state::sderby_map(address_map &map)
void sderby_state::sderbya_map(address_map &map) void sderby_state::sderbya_map(address_map &map)
{ {
map(0x000000, 0x07ffff).rom(); map(0x000000, 0x07ffff).rom();
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */ map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */ map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */ map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w)); map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
map(0x10400c, 0x10400d).nopw(); /* ??? - check code at 0x000456 (executed once at startup) */ map(0x10400c, 0x10400d).nopw(); // ??? - check code at 0x000456 (executed once at startup)
map(0x10400e, 0x10400f).nopw(); /* ??? - check code at 0x000524 (executed once at startup) */ map(0x10400e, 0x10400f).nopw(); // ??? - check code at 0x000524 (executed once at startup)
map(0x200000, 0x200fff).ram().share("spriteram"); map(0x200000, 0x200fff).ram().share(m_spriteram);
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderbya_input_r)); map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w)); /* output port */ map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w));
map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x300000, 0x300001).nopw(); /* unknown... write 0x01 in game, and 0x00 on reset */ //MOD map(0x300000, 0x300001).nopw(); // unknown... write 0x01 in game, and 0x00 on reset //MOD
map(0xcf0000, 0xcf07ff).ram().share("nvram"); map(0xcf0000, 0xcf07ff).ram().share("nvram");
map(0xcfc000, 0xcfffff).ram(); //MOD map(0xcfc000, 0xcfffff).ram(); //MOD
} }
@ -338,18 +539,18 @@ void sderby_state::sderbya_map(address_map &map)
void sderby_state::luckboom_map(address_map &map) void sderby_state::luckboom_map(address_map &map)
{ {
map(0x000000, 0x07ffff).rom(); map(0x000000, 0x07ffff).rom();
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */ map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */ map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */ map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w)); map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
map(0x10400c, 0x10400d).nopw(); /* ??? - check code at 0x000456 (executed once at startup) */ map(0x10400c, 0x10400d).nopw(); // ??? - check code at 0x000456 (executed once at startup)
map(0x10400e, 0x10400f).nopw(); /* ??? - check code at 0x000524 (executed once at startup) */ map(0x10400e, 0x10400f).nopw(); // ??? - check code at 0x000524 (executed once at startup)
map(0x200000, 0x200fff).ram().share("spriteram"); map(0x200000, 0x200fff).ram().share(m_spriteram);
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderby_input_r)); map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w)); /* output port */ map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w));
map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x500000, 0x500001).nopw(); /* unknown... write 0x01 in game, and 0x00 on reset */ map(0x500000, 0x500001).nopw(); // unknown... write 0x01 in game, and 0x00 on reset
map(0xe00000, 0xe007ff).ram().share("nvram"); map(0xe00000, 0xe007ff).ram().share("nvram");
map(0xff0000, 0xffffff).ram(); map(0xff0000, 0xffffff).ram();
} }
@ -357,67 +558,83 @@ void sderby_state::luckboom_map(address_map &map)
void sderby_state::spacewin_map(address_map &map) void sderby_state::spacewin_map(address_map &map)
{ {
map(0x000000, 0x03ffff).rom(); map(0x000000, 0x03ffff).rom();
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */ map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */ map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */ map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w)); /* tilemaps offset control */ map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
map(0x10400c, 0x10400d).nopw(); /* seems another video register. constantly used */ map(0x10400c, 0x10400d).nopw(); // seems another video register. constantly used
map(0x10400e, 0x10400f).nopw(); /* seems another video register. constantly used */ map(0x10400e, 0x10400f).nopw(); // seems another video register. constantly used
map(0x104010, 0x105fff).nopw(); /* unknown */ map(0x104010, 0x105fff).nopw(); // unknown
map(0x300000, 0x300001).nopw(); /* unknown... write 0x01 in game, and 0x00 on reset */ map(0x300000, 0x300001).nopw(); // unknown... write 0x01 in game, and 0x00 on reset
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderby_input_r)); map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
map(0x308008, 0x308009).w(FUNC(sderby_state::scmatto_out_w)); /* output port */ map(0x308008, 0x308009).w(FUNC(sderby_state::scmatto_out_w));
map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0xd00000, 0xd001ff).ram(); map(0xd00000, 0xd001ff).ram();
map(0x800000, 0x800fff).ram().share("spriteram"); map(0x800000, 0x800fff).ram().share(m_spriteram);
map(0x801000, 0x80100d).nopw(); /* unknown */ map(0x801000, 0x80100d).nopw(); // unknown
map(0x8f0000, 0x8f07ff).ram().share("nvram"); /* 16K Dallas DS1220Y-200 NVRAM */ map(0x8f0000, 0x8f07ff).ram().share("nvram"); // 16K Dallas DS1220Y-200 NVRAM
map(0x8fc000, 0x8fffff).ram(); map(0x8fc000, 0x8fffff).ram();
} }
void sderby_state::shinygld_map(address_map &map) void sderby_state::shinygld_map(address_map &map)
{ {
map(0x000000, 0x03ffff).rom(); map(0x000000, 0x03ffff).rom();
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */ map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */ map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */ map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w)); /* tilemaps offset control */ map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
map(0x10400c, 0x10400d).nopw(); /* seems another video register. constantly used */ map(0x10400c, 0x10400d).nopw(); // seems another video register. constantly used
map(0x10400e, 0x10400f).nopw(); /* seems another video register. constantly used */ map(0x10400e, 0x10400f).nopw(); // seems another video register. constantly used
map(0x104010, 0x105fff).nopw(); /* unknown */ map(0x104010, 0x105fff).nopw(); // unknown
map(0x300000, 0x300001).nopw(); /* unknown... write 0x01 in game, and 0x00 on reset */ map(0x300000, 0x300001).nopw(); // unknown... write 0x01 in game, and 0x00 on reset
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderby_input_r)); map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
map(0x308008, 0x308009).nopw(); /* output port */ map(0x308008, 0x308009).nopw();
map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x30800f, 0x30800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x380000, 0x380fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x400000, 0x400fff).ram().share("spriteram"); map(0x400000, 0x400fff).ram().share(m_spriteram);
map(0x401000, 0x40100d).nopw(); /* unknown */ map(0x401000, 0x40100d).nopw(); // unknown
map(0x700000, 0x7007ff).ram().share("nvram"); /* 16K Dallas DS1220Y-200 NVRAM */ map(0x700000, 0x7007ff).ram().share("nvram"); // 16K Dallas DS1220Y-200 NVRAM
map(0x7f0000, 0x7fffff).ram(); map(0x7f0000, 0x7fffff).ram();
} }
void sderby_state::roulette_map(address_map &map) void sderby_state::roulette_map(address_map &map)
{ {
map(0x000000, 0x03ffff).rom(); map(0x000000, 0x03ffff).rom();
map(0x440000, 0x440fff).writeonly().share("spriteram"); map(0x440000, 0x440fff).writeonly().share(m_spriteram);
map(0x500000, 0x500fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */ map(0x500000, 0x500fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
map(0x501000, 0x501fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */ map(0x501000, 0x501fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
map(0x502000, 0x503fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */ map(0x502000, 0x503fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
map(0x504000, 0x50400b).ram().w(FUNC(sderby_state::sderby_scroll_w)); map(0x504000, 0x50400b).ram().w(FUNC(sderby_state::scroll_w));
map(0x50400e, 0x50400f).nopw(); map(0x50400e, 0x50400f).nopw();
map(0x708000, 0x708009).r(FUNC(sderby_state::roulette_input_r)); map(0x708000, 0x708009).r(FUNC(sderby_state::roulette_input_r));
map(0x708006, 0x708007).w(FUNC(sderby_state::roulette_out_w)); map(0x708006, 0x708007).w(FUNC(sderby_state::roulette_out_w));
map(0x70800b, 0x70800b).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x70800b, 0x70800b).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x70800c, 0x70800d).nopw(); /* watchdog?? (0x0003) */ map(0x70800c, 0x70800d).nopw(); // watchdog?? (0x0003)
map(0x70800e, 0x70800f).rw(FUNC(sderby_state::rprot_r), FUNC(sderby_state::rprot_w)); /* MCU communication */ map(0x70800e, 0x70800f).rw(FUNC(sderby_state::rprot_r), FUNC(sderby_state::rprot_w)); // MCU communication
map(0x780000, 0x780fff).w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x780000, 0x780fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0xff0000, 0xff07ff).ram().share("nvram"); map(0xff0000, 0xff07ff).ram().share("nvram");
map(0xffc000, 0xffffff).ram(); map(0xffc000, 0xffffff).ram();
} }
void sderby_state::magictch_map(address_map &map) // memory map is very similar to the above roulette_map. TODO: verify if deriving makes sense once everything's figured out
{
map(0x000000, 0x03ffff).rom();
map(0x440000, 0x440fff).writeonly().share(m_spriteram);
map(0x500000, 0x500fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
map(0x501000, 0x501fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
map(0x502000, 0x503fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
map(0x504000, 0x50400b).ram().w(FUNC(sderby_state::scroll_w));
map(0x50400e, 0x50400f).nopw();
map(0x708000, 0x70800d).r(FUNC(sderby_state::input_r));
//map(0x708008, 0x708009).w(FUNC(sderby_state::magictch_out_w)); // TODO
map(0x70800f, 0x70800f).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x780000, 0x780fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0xf00000, 0xf007ff).ram().share("nvram");
map(0xff0000, 0xffffff).ram();
}
/*************************** /***************************
@ -425,7 +642,7 @@ void sderby_state::roulette_map(address_map &map)
***************************/ ***************************/
static INPUT_PORTS_START( sderby ) static INPUT_PORTS_START( sderby )
PORT_START("IN0") /* 0x308000.w */ PORT_START("IN0") // 0x308000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
@ -445,7 +662,7 @@ static INPUT_PORTS_START( sderby )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( sderbya ) static INPUT_PORTS_START( sderbya )
PORT_START("IN0") /* 0x308000.w */ PORT_START("IN0") // 0x308000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
@ -465,7 +682,7 @@ static INPUT_PORTS_START( sderbya )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( luckboom ) static INPUT_PORTS_START( luckboom )
PORT_START("IN0") /* 0x308000.w */ PORT_START("IN0") // 0x308000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
@ -485,7 +702,7 @@ static INPUT_PORTS_START( luckboom )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( spacewin ) static INPUT_PORTS_START( spacewin )
PORT_START("IN0") /* 0x308000.w */ PORT_START("IN0") // 0x308000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
@ -505,7 +722,7 @@ static INPUT_PORTS_START( spacewin )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( shinygld ) static INPUT_PORTS_START( shinygld )
PORT_START("IN0") /* 0x308000.w */ PORT_START("IN0") // 0x308000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SLOT_STOP1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SLOT_STOP2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SLOT_STOP3 )
@ -527,7 +744,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( pmroulet ) static INPUT_PORTS_START( pmroulet )
PORT_START("IN0") PORT_START("IN0")
PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") /* it must be toggled to boot anyway */ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") // it must be toggled to boot anyway
PORT_SERVICE_NO_TOGGLE(0x0020, IP_ACTIVE_LOW) PORT_SERVICE_NO_TOGGLE(0x0020, IP_ACTIVE_LOW)
PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNKNOWN )
@ -547,7 +764,7 @@ static INPUT_PORTS_START( pmroulet )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* to cancel bets in 3-button mode */ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) // to cancel bets in 3-button mode
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0f00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNKNOWN )
@ -590,8 +807,8 @@ static const gfx_layout tiles16x16_layout =
****************************/ ****************************/
static GFXDECODE_START( gfx_sderby ) static GFXDECODE_START( gfx_sderby )
GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0x000, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx", 0, tiles8x8_layout, 0x000, 256 )
GFXDECODE_ENTRY( "gfx1", 0, tiles16x16_layout, 0x000, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx", 0, tiles16x16_layout, 0x000, 256 )
GFXDECODE_END GFXDECODE_END
@ -612,14 +829,14 @@ void sderby_state::sderby(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(64*8, 64*8); screen.set_size(64*8, 64*8);
screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1); screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1);
screen.set_screen_update(FUNC(sderby_state::screen_update_sderby)); screen.set_screen_update(FUNC(sderby_state::screen_update));
screen.set_palette(m_palette); screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_sderby); GFXDECODE(config, m_gfxdecode, m_palette, gfx_sderby);
PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000); PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000);
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 not verified
} }
void sderby_state::sderbya(machine_config &config) void sderby_state::sderbya(machine_config &config)
@ -635,14 +852,14 @@ void sderby_state::sderbya(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(64*8, 64*8); screen.set_size(64*8, 64*8);
screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1); screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1);
screen.set_screen_update(FUNC(sderby_state::screen_update_sderby)); screen.set_screen_update(FUNC(sderby_state::screen_update));
screen.set_palette(m_palette); screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_sderby); GFXDECODE(config, m_gfxdecode, m_palette, gfx_sderby);
PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000); PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000);
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 not verified
} }
void sderby_state::luckboom(machine_config &config) void sderby_state::luckboom(machine_config &config)
@ -658,14 +875,14 @@ void sderby_state::luckboom(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(64*8, 64*8); screen.set_size(64*8, 64*8);
screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1); screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1);
screen.set_screen_update(FUNC(sderby_state::screen_update_sderby)); screen.set_screen_update(FUNC(sderby_state::screen_update));
screen.set_palette(m_palette); screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_sderby); GFXDECODE(config, m_gfxdecode, m_palette, gfx_sderby);
PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000); PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000);
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 not verified
} }
void sderby_state::spacewin(machine_config &config) void sderby_state::spacewin(machine_config &config)
@ -688,7 +905,7 @@ void sderby_state::spacewin(machine_config &config)
PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000); PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000);
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 not verified
} }
void sderby_state::shinygld(machine_config &config) void sderby_state::shinygld(machine_config &config)
@ -704,14 +921,14 @@ void sderby_state::shinygld(machine_config &config)
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(64*8, 64*8); screen.set_size(64*8, 64*8);
screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1); screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1);
screen.set_screen_update(FUNC(sderby_state::screen_update_sderby)); screen.set_screen_update(FUNC(sderby_state::screen_update));
screen.set_palette(m_palette); screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_sderby); GFXDECODE(config, m_gfxdecode, m_palette, gfx_sderby);
PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000); PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000);
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
OKIM6295(config, "oki", 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 verified */ OKIM6295(config, "oki", 1.056_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 verified
} }
void sderby_state::pmroulet(machine_config &config) void sderby_state::pmroulet(machine_config &config)
@ -724,7 +941,7 @@ void sderby_state::pmroulet(machine_config &config)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60); screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
screen.set_size(64*8, 64*8); screen.set_size(64*8, 64*8);
screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1); screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1);
screen.set_screen_update(FUNC(sderby_state::screen_update_pmroulet)); screen.set_screen_update(FUNC(sderby_state::screen_update_pmroulet));
@ -734,7 +951,30 @@ void sderby_state::pmroulet(machine_config &config)
PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000); PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000);
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 not verified
}
void sderby_state::magictch(machine_config &config)
{
M68000(config, m_maincpu, 12_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &sderby_state::magictch_map);
m_maincpu->set_vblank_int("screen", FUNC(sderby_state::irq2_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
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(64*8, 64*8);
screen.set_visarea(4*8, 44*8-1, 3*8, 33*8-1);
screen.set_screen_update(FUNC(sderby_state::screen_update_pmroulet));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_sderby);
PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000);
SPEAKER(config, "mono").front_center();
OKIM6295(config, "oki", 1_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // clock frequency & pin 7 verified
} }
@ -768,14 +1008,14 @@ two FPGA chips - one labelled 'Playmark 010412'
*/ */
ROM_START( sderby ) ROM_START( sderby )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 Code
ROM_LOAD16_BYTE( "22.bin", 0x00000, 0x20000, CRC(a319f1e0) SHA1(d932cc7e990aa87308dcd9ffa5af2aaea333aa9a) ) ROM_LOAD16_BYTE( "22.bin", 0x00000, 0x20000, CRC(a319f1e0) SHA1(d932cc7e990aa87308dcd9ffa5af2aaea333aa9a) )
ROM_LOAD16_BYTE( "23.bin", 0x00001, 0x20000, CRC(1d6e2321) SHA1(3bb32021cc9ee6bd6d1fd79a89159fef70f34f41) ) ROM_LOAD16_BYTE( "23.bin", 0x00001, 0x20000, CRC(1d6e2321) SHA1(3bb32021cc9ee6bd6d1fd79a89159fef70f34f41) )
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ ROM_REGION( 0x080000, "oki", 0 )
ROM_LOAD( "21.bin", 0x00000, 0x80000, CRC(6f9f2f2b) SHA1(9778439979bc21b3e49f0c16353488a33b93c01b) ) ROM_LOAD( "21.bin", 0x00000, 0x80000, CRC(6f9f2f2b) SHA1(9778439979bc21b3e49f0c16353488a33b93c01b) )
ROM_REGION( 0xa0000, "gfx1", 0 ) /* Sprites */ ROM_REGION( 0xa0000, "gfx", 0 )
ROM_LOAD( "24.bin", 0x00000, 0x20000, CRC(93c917df) SHA1(dc2fa5e29749ec92871c66146c0412a23f47e316) ) ROM_LOAD( "24.bin", 0x00000, 0x20000, CRC(93c917df) SHA1(dc2fa5e29749ec92871c66146c0412a23f47e316) )
ROM_LOAD( "25.bin", 0x20000, 0x20000, CRC(7ba485cd) SHA1(b0170614d713af9d1556251c76ae762de872abe6) ) ROM_LOAD( "25.bin", 0x20000, 0x20000, CRC(7ba485cd) SHA1(b0170614d713af9d1556251c76ae762de872abe6) )
ROM_LOAD( "26.bin", 0x40000, 0x20000, CRC(beabe4f7) SHA1(a5615450fae930cb2408f201a9faa12551de0d70) ) ROM_LOAD( "26.bin", 0x40000, 0x20000, CRC(beabe4f7) SHA1(a5615450fae930cb2408f201a9faa12551de0d70) )
@ -784,14 +1024,14 @@ ROM_START( sderby )
ROM_END ROM_END
ROM_START( sderbya ) ROM_START( sderbya )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 Code
ROM_LOAD16_BYTE( "22.u16", 0x00000, 0x20000, CRC(5baadc33) SHA1(475843d3f99f5a6aa25bdba75b251ad6be32802f) ) ROM_LOAD16_BYTE( "22.u16", 0x00000, 0x20000, CRC(5baadc33) SHA1(475843d3f99f5a6aa25bdba75b251ad6be32802f) )
ROM_LOAD16_BYTE( "23.u15", 0x00001, 0x20000, CRC(04518b8c) SHA1(97598c43c1cb0a757bca70c0a498838144b2302b) ) ROM_LOAD16_BYTE( "23.u15", 0x00001, 0x20000, CRC(04518b8c) SHA1(97598c43c1cb0a757bca70c0a498838144b2302b) )
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ ROM_REGION( 0x080000, "oki", 0 )
ROM_LOAD( "274001.u147", 0x00000, 0x80000, CRC(6f9f2f2b) SHA1(9778439979bc21b3e49f0c16353488a33b93c01b) ) ROM_LOAD( "274001.u147", 0x00000, 0x80000, CRC(6f9f2f2b) SHA1(9778439979bc21b3e49f0c16353488a33b93c01b) )
ROM_REGION( 0x140000, "gfx1", 0 ) /* Sprites */ ROM_REGION( 0x140000, "gfx", 0 )
ROM_LOAD( "24.u141", 0x000000, 0x40000, CRC(54234f72) SHA1(c2e3e547255174daa9a6acad743c210b92ded385) ) ROM_LOAD( "24.u141", 0x000000, 0x40000, CRC(54234f72) SHA1(c2e3e547255174daa9a6acad743c210b92ded385) )
ROM_LOAD( "25.u142", 0x040000, 0x40000, CRC(1bd98cf7) SHA1(67143a16e2cf01868fac3d8d6d9db423f77d09b9) ) ROM_LOAD( "25.u142", 0x040000, 0x40000, CRC(1bd98cf7) SHA1(67143a16e2cf01868fac3d8d6d9db423f77d09b9) )
ROM_LOAD( "26.u143", 0x080000, 0x40000, CRC(21bf2004) SHA1(7f7cbdcd89807c9e8ca64023a0060b18ef9b6536) ) ROM_LOAD( "26.u143", 0x080000, 0x40000, CRC(21bf2004) SHA1(7f7cbdcd89807c9e8ca64023a0060b18ef9b6536) )
@ -838,14 +1078,14 @@ Title depends on graphics type in test mode.
*/ */
ROM_START( spacewin ) ROM_START( spacewin )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 Code
ROM_LOAD16_BYTE( "2.u16", 0x00000, 0x20000, CRC(2d17c2ab) SHA1(833ab39081fbc3d114103055e3a3f2ea2a28f158) ) ROM_LOAD16_BYTE( "2.u16", 0x00000, 0x20000, CRC(2d17c2ab) SHA1(833ab39081fbc3d114103055e3a3f2ea2a28f158) )
ROM_LOAD16_BYTE( "3.u15", 0x00001, 0x20000, CRC(fd6f93ef) SHA1(1dc35fd92a0185434b44aa3c7da47a408fb2ce27) ) ROM_LOAD16_BYTE( "3.u15", 0x00001, 0x20000, CRC(fd6f93ef) SHA1(1dc35fd92a0185434b44aa3c7da47a408fb2ce27) )
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ ROM_REGION( 0x080000, "oki", 0 )
ROM_LOAD( "1.u147", 0x00000, 0x40000, CRC(eedc7090) SHA1(fc8cabf7a11a1de3ccc3b8860afd8f32669608b8) ) ROM_LOAD( "1.u147", 0x00000, 0x40000, CRC(eedc7090) SHA1(fc8cabf7a11a1de3ccc3b8860afd8f32669608b8) )
ROM_REGION( 0xa0000, "gfx1", 0 ) /* Sprites */ ROM_REGION( 0xa0000, "gfx", 0 )
ROM_LOAD( "4.u141", 0x000000, 0x20000, CRC(ce20c599) SHA1(93358c3a891c66ca944eb684bd47e9c25bfcb88d) ) ROM_LOAD( "4.u141", 0x000000, 0x20000, CRC(ce20c599) SHA1(93358c3a891c66ca944eb684bd47e9c25bfcb88d) )
ROM_LOAD( "5.u142", 0x020000, 0x20000, CRC(ae4f8e06) SHA1(cb3b941c67ae5c9df005d9f8b2105dc5a114f19f) ) ROM_LOAD( "5.u142", 0x020000, 0x20000, CRC(ae4f8e06) SHA1(cb3b941c67ae5c9df005d9f8b2105dc5a114f19f) )
ROM_LOAD( "6.u143", 0x040000, 0x20000, CRC(b99afc96) SHA1(589270dbd5022db2d032da85a9813c271fa71a90) ) ROM_LOAD( "6.u143", 0x040000, 0x20000, CRC(b99afc96) SHA1(589270dbd5022db2d032da85a9813c271fa71a90) )
@ -855,14 +1095,14 @@ ROM_END
// This board seems very similar to the spacewin's one. // This board seems very similar to the spacewin's one.
ROM_START( shinygld ) ROM_START( shinygld )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 Code
ROM_LOAD16_BYTE( "16.u16", 0x00000, 0x20000, CRC(4b08a668) SHA1(8444e7624a40e14eca73c425db1cd574c2bf02e0) ) // 27C1001 ROM_LOAD16_BYTE( "16.u16", 0x00000, 0x20000, CRC(4b08a668) SHA1(8444e7624a40e14eca73c425db1cd574c2bf02e0) ) // 27C1001
ROM_LOAD16_BYTE( "17.u15", 0x00001, 0x20000, CRC(eb126e19) SHA1(d02ba03551f71f3ca46bee49291e4423daeea0ce) ) // 27C1001 ROM_LOAD16_BYTE( "17.u15", 0x00001, 0x20000, CRC(eb126e19) SHA1(d02ba03551f71f3ca46bee49291e4423daeea0ce) ) // 27C1001
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ ROM_REGION( 0x080000, "oki", 0 )
ROM_LOAD( "15.u147", 0x00000, 0x40000, CRC(66db6b15) SHA1(4a1ca962c61d60db8ff66c81253131d067bec8c6) ) // 27C2001 ROM_LOAD( "15.u147", 0x00000, 0x40000, CRC(66db6b15) SHA1(4a1ca962c61d60db8ff66c81253131d067bec8c6) ) // 27C2001
ROM_REGION( 0xa0000, "gfx1", 0 ) /* Sprites */ ROM_REGION( 0xa0000, "gfx", 0 )
ROM_LOAD( "18.u141", 0x000000, 0x20000, CRC(a905c02d) SHA1(07a0a70424aa759e4c552408154c2d1515f512d5) ) // 27C1001 ROM_LOAD( "18.u141", 0x000000, 0x20000, CRC(a905c02d) SHA1(07a0a70424aa759e4c552408154c2d1515f512d5) ) // 27C1001
ROM_LOAD( "19.u142", 0x020000, 0x20000, CRC(8db53f3b) SHA1(aeb2da8bb065bb49edae1de51f6db9a7a02989c3) ) // 27C1001 ROM_LOAD( "19.u142", 0x020000, 0x20000, CRC(8db53f3b) SHA1(aeb2da8bb065bb49edae1de51f6db9a7a02989c3) ) // 27C1001
ROM_LOAD( "20.u143", 0x040000, 0x20000, CRC(be54ae86) SHA1(23c8a01aa05204a6cd186a59269e515a068e23c4) ) // 27C1001 ROM_LOAD( "20.u143", 0x040000, 0x20000, CRC(be54ae86) SHA1(23c8a01aa05204a6cd186a59269e515a068e23c4) ) // 27C1001
@ -871,12 +1111,12 @@ ROM_START( shinygld )
/* Dumper's note: Board carries five PLDs : one GAL22V10 near the 68000 CPU (which most likely acts as main address decoder), /* Dumper's note: Board carries five PLDs : one GAL22V10 near the 68000 CPU (which most likely acts as main address decoder),
three PALCE22V10H (two are near the GFX ROMs, probably for enabling them), one PALCE16V8H.*/ three PALCE22V10H (two are near the GFX ROMs, probably for enabling them), one PALCE16V8H.*/
ROM_REGION( 0x1000, "plds", 0) ROM_REGION( 0xd00, "plds", 0)
ROM_LOAD( "gal22v10.bin", 0x0400, 0x02e5, NO_DUMP ) // soldered ROM_LOAD( "gal22v10.bin", 0x000, 0x2e5, NO_DUMP ) // soldered
ROM_LOAD( "palce22v10_1.bin", 0x2dd, 0x2dd, NO_DUMP ) // soldered ROM_LOAD( "palce22v10_1.bin", 0x300, 0x2dd, NO_DUMP ) // soldered
ROM_LOAD( "palce22v10_2.bin", 0x2dd, 0x2dd, NO_DUMP ) // soldered ROM_LOAD( "palce22v10_2.bin", 0x600, 0x2dd, NO_DUMP ) // soldered
ROM_LOAD( "palce22v10_3.bin", 0x2dd, 0x2dd, NO_DUMP ) // soldered ROM_LOAD( "palce22v10_3.bin", 0x900, 0x2dd, NO_DUMP ) // soldered
ROM_LOAD( "palce16v8h.bin", 0x0200, 0x0117, NO_DUMP ) // soldered ROM_LOAD( "palce16v8h.bin", 0xb00, 0x117, NO_DUMP ) // soldered
ROM_END ROM_END
/* /*
@ -940,17 +1180,17 @@ CRC-32 : D4C2B7DAh
*/ */
ROM_START( croupier ) ROM_START( croupier )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "2.bin", 0x00000, 0x20000, CRC(e7941975) SHA1(ea32cd51b8d87205a1d6c6a83ebf8b50e03c55fc)) ROM_LOAD16_BYTE( "2.bin", 0x00000, 0x20000, CRC(e7941975) SHA1(ea32cd51b8d87205a1d6c6a83ebf8b50e03c55fc))
ROM_LOAD16_BYTE( "3.bin", 0x00001, 0x20000, CRC(29d06a38) SHA1(c6fdca1a31fad9abf854e521e593f3ec8018ae6d)) ROM_LOAD16_BYTE( "3.bin", 0x00001, 0x20000, CRC(29d06a38) SHA1(c6fdca1a31fad9abf854e521e593f3ec8018ae6d))
ROM_REGION( 0x4008, "pic16c74", 0 ) ROM_REGION( 0x4008, "pic16c74", 0 )
ROM_LOAD( "pic16c74.u39", 0x00000, 0x4008, CRC(9cb88e5b) SHA1(3c6b371efeda757f2bcab6c860e7585b628c210a)) ROM_LOAD( "pic16c74.u39", 0x00000, 0x4008, CRC(9cb88e5b) SHA1(3c6b371efeda757f2bcab6c860e7585b628c210a))
ROM_REGION( 0x080000, "oki", 0 ) /* samples are ok */ ROM_REGION( 0x080000, "oki", 0 )
ROM_LOAD( "1.bin", 0x00000, 0x40000, CRC(6673de85) SHA1(df390cd6268efc0e743a9020f19bc0cbeb757cfa)) ROM_LOAD( "1.bin", 0x00000, 0x40000, CRC(6673de85) SHA1(df390cd6268efc0e743a9020f19bc0cbeb757cfa))
ROM_REGION( 0x280000, "gfx1", 0 ) /* sprites */ ROM_REGION( 0x280000, "gfx", 0 )
ROM_LOAD( "4.bin", 0x000000, 0x80000, CRC(efcddac9) SHA1(72435ec478b70a067d47f3daf7c224169ee5827a)) ROM_LOAD( "4.bin", 0x000000, 0x80000, CRC(efcddac9) SHA1(72435ec478b70a067d47f3daf7c224169ee5827a))
ROM_LOAD( "5.bin", 0x080000, 0x80000, CRC(bc75ef8f) SHA1(1f3dc457e5ae143d53cfef0e1fcb4586dceefb67)) ROM_LOAD( "5.bin", 0x080000, 0x80000, CRC(bc75ef8f) SHA1(1f3dc457e5ae143d53cfef0e1fcb4586dceefb67))
ROM_LOAD( "6.bin", 0x100000, 0x80000, CRC(e47d5f55) SHA1(a341e24f98125265cb3986f8c7ce84eedd056b71)) ROM_LOAD( "6.bin", 0x100000, 0x80000, CRC(e47d5f55) SHA1(a341e24f98125265cb3986f8c7ce84eedd056b71))
@ -959,17 +1199,17 @@ ROM_START( croupier )
ROM_END ROM_END
ROM_START( croupiera ) ROM_START( croupiera )
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "2.bin", 0x00000, 0x20000, CRC(1677a2de) SHA1(4dcbb3c1ce9b65e06ba7e0cffa00c0c8016538f5)) // sldh ROM_LOAD16_BYTE( "2.bin", 0x00000, 0x20000, CRC(1677a2de) SHA1(4dcbb3c1ce9b65e06ba7e0cffa00c0c8016538f5)) // sldh
ROM_LOAD16_BYTE( "3.bin", 0x00001, 0x20000, CRC(11acaac2) SHA1(19e7bbbf4356fc9a866f9f36d0568c42d6a36c07)) // sldh ROM_LOAD16_BYTE( "3.bin", 0x00001, 0x20000, CRC(11acaac2) SHA1(19e7bbbf4356fc9a866f9f36d0568c42d6a36c07)) // sldh
ROM_REGION( 0x4008, "pic16c74", 0 ) ROM_REGION( 0x4008, "pic16c74", 0 )
ROM_LOAD( "pic16c74.u39", 0x00000, 0x4008, CRC(9cb88e5b) SHA1(3c6b371efeda757f2bcab6c860e7585b628c210a)) ROM_LOAD( "pic16c74.u39", 0x00000, 0x4008, CRC(9cb88e5b) SHA1(3c6b371efeda757f2bcab6c860e7585b628c210a))
ROM_REGION( 0x080000, "oki", 0 ) /* samples are ok */ ROM_REGION( 0x080000, "oki", 0 )
ROM_LOAD( "1.bin", 0x00000, 0x40000, CRC(6673de85) SHA1(df390cd6268efc0e743a9020f19bc0cbeb757cfa)) ROM_LOAD( "1.bin", 0x00000, 0x40000, CRC(6673de85) SHA1(df390cd6268efc0e743a9020f19bc0cbeb757cfa))
ROM_REGION( 0x280000, "gfx1", 0 ) /* sprites */ ROM_REGION( 0x280000, "gfx", 0 )
ROM_LOAD( "4.bin", 0x000000, 0x80000, CRC(efcddac9) SHA1(72435ec478b70a067d47f3daf7c224169ee5827a)) ROM_LOAD( "4.bin", 0x000000, 0x80000, CRC(efcddac9) SHA1(72435ec478b70a067d47f3daf7c224169ee5827a))
ROM_LOAD( "5.bin", 0x080000, 0x80000, CRC(bc75ef8f) SHA1(1f3dc457e5ae143d53cfef0e1fcb4586dceefb67)) ROM_LOAD( "5.bin", 0x080000, 0x80000, CRC(bc75ef8f) SHA1(1f3dc457e5ae143d53cfef0e1fcb4586dceefb67))
ROM_LOAD( "6.bin", 0x100000, 0x80000, CRC(e47d5f55) SHA1(a341e24f98125265cb3986f8c7ce84eedd056b71)) ROM_LOAD( "6.bin", 0x100000, 0x80000, CRC(e47d5f55) SHA1(a341e24f98125265cb3986f8c7ce84eedd056b71))
@ -1009,14 +1249,14 @@ QTY Type position status
ROM_START( luckboom ) ROM_START( luckboom )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 Code
ROM_LOAD16_BYTE( "2.u16", 0x00000, 0x20000, CRC(0a20eaca) SHA1(edd325b60b3a3ce84e89f8be91b9e19f82d15317) ) ROM_LOAD16_BYTE( "2.u16", 0x00000, 0x20000, CRC(0a20eaca) SHA1(edd325b60b3a3ce84e89f8be91b9e19f82d15317) )
ROM_LOAD16_BYTE( "3.u15", 0x00001, 0x20000, CRC(0d3bb24c) SHA1(31826ec29650aa8b70e1b713678401113e008832) ) ROM_LOAD16_BYTE( "3.u15", 0x00001, 0x20000, CRC(0d3bb24c) SHA1(31826ec29650aa8b70e1b713678401113e008832) )
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */ ROM_REGION( 0x080000, "oki", 0 )
ROM_LOAD( "1.u147", 0x00000, 0x40000, CRC(0d42c0a3) SHA1(1b1d4c7dcbb063e8bf133063770b753947d1a017) ) ROM_LOAD( "1.u147", 0x00000, 0x40000, CRC(0d42c0a3) SHA1(1b1d4c7dcbb063e8bf133063770b753947d1a017) )
ROM_REGION( 0xa0000, "gfx1", 0 ) /* Sprites */ ROM_REGION( 0xa0000, "gfx", 0 )
ROM_LOAD( "4.u141", 0x000000, 0x20000, CRC(3aeccad7) SHA1(4104dd3ae928c1a876ac9b460fe18b58ce1206f7) ) ROM_LOAD( "4.u141", 0x000000, 0x20000, CRC(3aeccad7) SHA1(4104dd3ae928c1a876ac9b460fe18b58ce1206f7) )
ROM_LOAD( "5.u142", 0x020000, 0x20000, CRC(4e4f9ac6) SHA1(e9b0c48195d8b21cdab16d66423ff43e6292ef2c) ) ROM_LOAD( "5.u142", 0x020000, 0x20000, CRC(4e4f9ac6) SHA1(e9b0c48195d8b21cdab16d66423ff43e6292ef2c) )
ROM_LOAD( "6.u143", 0x040000, 0x20000, CRC(d1b4910e) SHA1(cfcb14bcd992bceaa634b20eb2d446caa62b6d82) ) ROM_LOAD( "6.u143", 0x040000, 0x20000, CRC(d1b4910e) SHA1(cfcb14bcd992bceaa634b20eb2d446caa62b6d82) )
@ -1025,6 +1265,40 @@ ROM_START( luckboom )
ROM_END ROM_END
/*
ZW3 PCB with 'MAGIC' sticker
1x MC68000FN12
1x scratched off DIP-40 chip near the main CPU
1x M48Z02-150PC1 ZEROPOWER RAM
1x 12 MHz XTAL
1x 14.318180 MHz XTAL
3x Actel A1020B FPGA
1x Oki M6295
1x 1.000J blue resonator
*/
ROM_START( magictch )
ROM_REGION( 0x40000, "maincpu", 0 )
ROM_LOAD16_BYTE( "22.u43", 0x00000, 0x20000, CRC(47f047b1) SHA1(f47ab9734f6bb1dc50baf159bca144fa79eac1a5) ) // TMS27C010A
ROM_LOAD16_BYTE( "23.u42", 0x00001, 0x20000, CRC(f63e31bf) SHA1(e96da519a8d6488d600e031ac48f5ce1a8a376f5) ) // TMS27C010A
ROM_REGION( 0x040000, "oki", 0 )
ROM_LOAD( "21.u16", 0x00000, 0x40000, CRC(e06a023f) SHA1(b4cd64f6c97e9c3e50a9658e171d748cb9f1c4ef) ) // ST M27C2001, 1xxxxxxxxxxxxxxxxx = 0xFF
ROM_REGION( 0xa0000, "gfx", 0 )
ROM_LOAD( "28.u76", 0x000000, 0x20000, CRC(ca49b54c) SHA1(69d6a3b32ebc357231b22ded40468971ba9ef8c3) ) // TMS27C010A
ROM_LOAD( "27.u77", 0x020000, 0x20000, CRC(55b10fe5) SHA1(caf16512afe1b3fa66018075598cbc2626a63b3e) ) // TMS27C010A
ROM_LOAD( "26.u78", 0x040000, 0x20000, CRC(d7974bd9) SHA1(b49678697e30d104a88adcc8e2c09cd62233c7b4) ) // TMS27C010A
ROM_LOAD( "25.u79", 0x060000, 0x20000, CRC(f825cb9d) SHA1(10ffa614ac82e5c625c36095b298a8acfc7465bf) ) // TMS27C010A
ROM_LOAD( "24.u80", 0x080000, 0x20000, CRC(3bdaea12) SHA1(8d9493ab80f96e6f941039ce6d1b8f1ed3c78379) ) // TMS27C010A
ROM_REGION( 0x300, "plds", 0)
ROM_LOAD( "gal22cv10-15lnc.u40", 0x000, 0x2e5, NO_DUMP ) // soldered
ROM_END
} // anonymous namespace
/****************************** /******************************
* Game Drivers * * Game Drivers *
******************************/ ******************************/
@ -1037,3 +1311,4 @@ GAME( 1996, shinygld, 0, shinygld, shinygld, sderby_state, empty_init,
GAMEL( 1997, croupier, 0, pmroulet, pmroulet, sderby_state, empty_init, ROT0, "Playmark", "Croupier (Playmark Roulette v.20.05)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING, layout_pmroulet ) GAMEL( 1997, croupier, 0, pmroulet, pmroulet, sderby_state, empty_init, ROT0, "Playmark", "Croupier (Playmark Roulette v.20.05)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING, layout_pmroulet )
GAMEL( 1997, croupiera, croupier, pmroulet, pmroulet, sderby_state, empty_init, ROT0, "Playmark", "Croupier (Playmark Roulette v.09.04)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING, layout_pmroulet ) GAMEL( 1997, croupiera, croupier, pmroulet, pmroulet, sderby_state, empty_init, ROT0, "Playmark", "Croupier (Playmark Roulette v.09.04)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING, layout_pmroulet )
GAME( 1996, luckboom, 0, luckboom, luckboom, sderby_state, empty_init, ROT0, "Playmark", "Lucky Boom", 0 ) GAME( 1996, luckboom, 0, luckboom, luckboom, sderby_state, empty_init, ROT0, "Playmark", "Lucky Boom", 0 )
GAME( 1998, magictch, 0, magictch, spacewin, sderby_state, empty_init, ROT0, "Playmark", "Magic Touch", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // wrong text layer hook up, stops during boot and needs debugger help to go in game, inputs aren't done, some scroll offsets are wrong

View File

@ -1,78 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood, Roberto Fresca
#ifndef MAME_INCLUDES_SDERBY_H
#define MAME_INCLUDES_SDERBY_H
#pragma once
#include "emupal.h"
#include "tilemap.h"
class sderby_state : public driver_device
{
public:
sderby_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_videoram(*this, "videoram"),
m_md_videoram(*this, "md_videoram"),
m_fg_videoram(*this, "fg_videoram"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_lamps(*this, "lamp%u", 1U)
{ }
void spacewin(machine_config &config);
void sderbya(machine_config &config);
void pmroulet(machine_config &config);
void shinygld(machine_config &config);
void sderby(machine_config &config);
void luckboom(machine_config &config);
private:
uint16_t sderby_input_r(offs_t offset);
uint16_t sderbya_input_r(offs_t offset);
uint16_t roulette_input_r(offs_t offset);
uint16_t rprot_r();
void rprot_w(uint16_t data);
void sderby_out_w(uint16_t data);
void scmatto_out_w(uint16_t data);
void roulette_out_w(uint16_t data);
void sderby_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void sderby_md_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void sderby_fg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void sderby_scroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
TILE_GET_INFO_MEMBER(get_sderby_tile_info);
TILE_GET_INFO_MEMBER(get_sderby_md_tile_info);
TILE_GET_INFO_MEMBER(get_sderby_fg_tile_info);
uint32_t screen_update_sderby(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_pmroulet(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int codeshift);
void luckboom_map(address_map &map);
void roulette_map(address_map &map);
void sderby_map(address_map &map);
void sderbya_map(address_map &map);
void shinygld_map(address_map &map);
void spacewin_map(address_map &map);
virtual void machine_start() override { m_lamps.resolve(); }
virtual void video_start() override;
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_md_videoram;
required_shared_ptr<uint16_t> m_fg_videoram;
required_shared_ptr<uint16_t> m_spriteram;
tilemap_t *m_tilemap = nullptr;
tilemap_t *m_md_tilemap = nullptr;
tilemap_t *m_fg_tilemap = nullptr;
uint16_t m_scroll[6]{};
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
output_finder<7> m_lamps;
};
#endif // MAME_INCLUDES_SDERBY_H

View File

@ -37695,6 +37695,7 @@ scyclone // (c) 1980 Taito Corporation
croupier // (c) 1997 Playmark croupier // (c) 1997 Playmark
croupiera // (c) 1997 Playmark croupiera // (c) 1997 Playmark
luckboom // luckboom //
magictch //
sderby // (c) 1996 sderby // (c) 1996
sderbya // (c) 1996 sderbya // (c) 1996
shinygld // shinygld //

View File

@ -1,133 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood, Roberto Fresca
#include "emu.h"
#include "includes/sderby.h"
/* BG Layer */
TILE_GET_INFO_MEMBER(sderby_state::get_sderby_tile_info)
{
int tileno,colour;
tileno = m_videoram[tile_index*2];
colour = m_videoram[tile_index*2+1] & 0x0f;
tileinfo.set(1,tileno,colour,0);
}
void sderby_state::sderby_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_videoram[offset]);
m_tilemap->mark_tile_dirty(offset/2);
}
/* MD Layer */
TILE_GET_INFO_MEMBER(sderby_state::get_sderby_md_tile_info)
{
int tileno,colour;
tileno = m_md_videoram[tile_index*2];
colour = m_md_videoram[tile_index*2+1] & 0x0f;
tileinfo.set(1,tileno,colour+16,0);
}
void sderby_state::sderby_md_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_md_videoram[offset]);
m_md_tilemap->mark_tile_dirty(offset/2);
}
/* FG Layer */
TILE_GET_INFO_MEMBER(sderby_state::get_sderby_fg_tile_info)
{
int tileno,colour;
tileno = m_fg_videoram[tile_index*2];
colour = m_fg_videoram[tile_index*2+1] & 0x0f;
tileinfo.set(0,tileno,colour+32,0);
}
void sderby_state::sderby_fg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
COMBINE_DATA(&m_fg_videoram[offset]);
m_fg_tilemap->mark_tile_dirty(offset/2);
}
void sderby_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int codeshift)
{
uint16_t *spriteram16 = m_spriteram;
int offs;
int height = m_gfxdecode->gfx(0)->height();
int colordiv = m_gfxdecode->gfx(0)->granularity() / 16;
for (offs = 4;offs < m_spriteram.bytes()/2;offs += 4)
{
int sx,sy,code,color,flipx;
sy = spriteram16[offs+3-4]; /* -4? what the... ??? */
if (sy == 0x2000) return; /* end of list marker */
flipx = sy & 0x4000;
sx = (spriteram16[offs+1] & 0x01ff) - 16-7;
sy = (256-8-height - sy) & 0xff;
code = spriteram16[offs+2] >> codeshift;
color = (spriteram16[offs+1] & 0x3e00) >> 9;
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
code,
color/colordiv+48,
flipx,0,
sx,sy,0);
}
}
void sderby_state::video_start()
{
m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(sderby_state::get_sderby_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
m_md_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(sderby_state::get_sderby_md_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
m_md_tilemap->set_transparent_pen(0);
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(sderby_state::get_sderby_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fg_tilemap->set_transparent_pen(0);
}
uint32_t sderby_state::screen_update_sderby(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_tilemap->draw(screen, bitmap, cliprect, 0,0);
draw_sprites(bitmap,cliprect,0);
m_md_tilemap->draw(screen, bitmap, cliprect, 0,0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0);
return 0;
}
uint32_t sderby_state::screen_update_pmroulet(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_tilemap->draw(screen, bitmap, cliprect, 0,0);
m_md_tilemap->draw(screen, bitmap, cliprect, 0,0);
draw_sprites(bitmap,cliprect,0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0);
return 0;
}
void sderby_state::sderby_scroll_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
data = COMBINE_DATA(&m_scroll[offset]);
switch (offset)
{
case 0: m_fg_tilemap->set_scrollx(0,data+2);break;
case 1: m_fg_tilemap->set_scrolly(0,data-8);break;
case 2: m_md_tilemap->set_scrollx(0,data+4);break;
case 3: m_md_tilemap->set_scrolly(0,data-8);break;
case 4: m_tilemap->set_scrollx(0,data+6); break;
case 5: m_tilemap->set_scrolly(0,data-8); break;
}
}