mirror of
https://github.com/holub/mame
synced 2025-04-16 05:24:54 +03:00
New machines marked as NOT_WORKING
---------------------------------- Magic Touch [Ivan Vangelista]
This commit is contained in:
parent
ba5e0c747a
commit
e1d00b62ba
@ -3349,8 +3349,6 @@ files {
|
||||
MAME_DIR .. "src/mame/video/playmark.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/powerbal.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/includes/sslam.h",
|
||||
MAME_DIR .. "src/mame/video/sslam.cpp",
|
||||
|
@ -11,9 +11,12 @@
|
||||
|
||||
Supported games:
|
||||
|
||||
Super Derby, 1996, Playmark.
|
||||
Scacco Matto / Space Win, 1996, Playmark.
|
||||
Croupier (Playmark Roulette), 1997, Playmark.
|
||||
Lucky Boom 1996, Playmark.
|
||||
Scacco Matto / Space Win, 1996, 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 :
|
||||
|
||||
- figure out the reads from 0x308002.w and 0x30800e.w (see sderby_input_r read handler)
|
||||
(by default, demo sounds are OFF, so change this in the "test mode")
|
||||
|
||||
- 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");
|
||||
- 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 "includes/sderby.h"
|
||||
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "sound/okim6295.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
#include "pmroulet.lh"
|
||||
#include "sderby.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 *
|
||||
***************************/
|
||||
|
||||
uint16_t sderby_state::sderby_input_r(offs_t offset)
|
||||
uint16_t sderby_state::input_r(offs_t offset)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00 >> 1:
|
||||
return ioport("IN0")->read();
|
||||
return m_in[0]->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());
|
||||
LOGINPUTS("input_r : offset = %x - PC = %06x\n", offset * 2, m_maincpu->pc());
|
||||
|
||||
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)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00 >> 1:
|
||||
return ioport("IN0")->read();
|
||||
return m_in[0]->read();
|
||||
case 0x02 >> 1:
|
||||
return ioport("IN1")->read();
|
||||
return m_in[1]->read();
|
||||
case 0x04 >> 1:
|
||||
return ioport("IN2")->read();
|
||||
return m_in[2]->read();
|
||||
}
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
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()
|
||||
{
|
||||
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.
|
||||
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)
|
||||
{
|
||||
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.
|
||||
|
||||
*/
|
||||
m_lamps[0] = BIT(data, 0); /* Lamp 1 - START */
|
||||
m_lamps[1] = BIT(data, 1); /* Lamp 2 - BET */
|
||||
m_lamps[2] = BIT(data, 15); /* Lamp 3 - END OF RACE */
|
||||
m_lamps[0] = BIT(data, 0); // Lamp 1 - START
|
||||
m_lamps[1] = BIT(data, 1); // Lamp 2 - BET
|
||||
m_lamps[2] = BIT(data, 15); // Lamp 3 - END OF RACE
|
||||
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x2000);
|
||||
}
|
||||
@ -251,13 +452,13 @@ void sderby_state::scmatto_out_w(uint16_t data)
|
||||
--x- ---- Coin counter.
|
||||
|
||||
*/
|
||||
m_lamps[0] = BIT(data, 0); /* Lamp 1 - HOLD 1 */
|
||||
m_lamps[1] = BIT(data, 1); /* Lamp 2 - HOLD 2 */
|
||||
m_lamps[2] = BIT(data, 2); /* Lamp 3 - HOLD 3 */
|
||||
m_lamps[3] = BIT(data, 3); /* Lamp 4 - HOLD 4 */
|
||||
m_lamps[4] = BIT(data, 4); /* Lamp 5 - HOLD 5 */
|
||||
m_lamps[5] = BIT(data, 5); /* Lamp 6 - START */
|
||||
m_lamps[6] = BIT(data, 6); /* Lamp 7 - BET */
|
||||
m_lamps[0] = BIT(data, 0); // Lamp 1 - HOLD 1
|
||||
m_lamps[1] = BIT(data, 1); // Lamp 2 - HOLD 2
|
||||
m_lamps[2] = BIT(data, 2); // Lamp 3 - HOLD 3
|
||||
m_lamps[3] = BIT(data, 3); // Lamp 4 - HOLD 4
|
||||
m_lamps[4] = BIT(data, 4); // Lamp 5 - HOLD 5
|
||||
m_lamps[5] = BIT(data, 5); // Lamp 6 - START
|
||||
m_lamps[6] = BIT(data, 6); // Lamp 7 - BET
|
||||
|
||||
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).
|
||||
|
||||
*/
|
||||
m_lamps[0] = BIT(data, 0); /* Lamp 1 - START */
|
||||
m_lamps[1] = BIT(data, 1); /* Lamp 2 - BET */
|
||||
m_lamps[0] = BIT(data, 0); // Lamp 1 - START
|
||||
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)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom();
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w));
|
||||
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(0x200000, 0x200fff).ram().share("spriteram");
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderby_input_r));
|
||||
map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w)); /* output port */
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
|
||||
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(0x200000, 0x200fff).ram().share(m_spriteram);
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
|
||||
map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w));
|
||||
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(0x500000, 0x500001).nopw(); /* unknown... write 0x01 in game, and 0x00 on reset */
|
||||
map(0x500000, 0x500001).nopw();
|
||||
map(0xd00000, 0xd007ff).ram().share("nvram");
|
||||
map(0xffc000, 0xffffff).ram();
|
||||
}
|
||||
@ -318,18 +519,18 @@ void sderby_state::sderby_map(address_map &map)
|
||||
void sderby_state::sderbya_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom();
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w));
|
||||
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(0x200000, 0x200fff).ram().share("spriteram");
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderbya_input_r));
|
||||
map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w)); /* output port */
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
|
||||
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(0x200000, 0x200fff).ram().share(m_spriteram);
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
|
||||
map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w));
|
||||
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(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(0xcfc000, 0xcfffff).ram(); //MOD
|
||||
}
|
||||
@ -338,18 +539,18 @@ void sderby_state::sderbya_map(address_map &map)
|
||||
void sderby_state::luckboom_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom();
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w));
|
||||
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(0x200000, 0x200fff).ram().share("spriteram");
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderby_input_r));
|
||||
map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w)); /* output port */
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
|
||||
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(0x200000, 0x200fff).ram().share(m_spriteram);
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
|
||||
map(0x308008, 0x308009).w(FUNC(sderby_state::sderby_out_w));
|
||||
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(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(0xff0000, 0xffffff).ram();
|
||||
}
|
||||
@ -357,67 +558,83 @@ void sderby_state::luckboom_map(address_map &map)
|
||||
void sderby_state::spacewin_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x03ffff).rom();
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w)); /* tilemaps offset control */
|
||||
map(0x10400c, 0x10400d).nopw(); /* seems another video register. constantly used */
|
||||
map(0x10400e, 0x10400f).nopw(); /* seems another video register. constantly used */
|
||||
map(0x104010, 0x105fff).nopw(); /* unknown */
|
||||
map(0x300000, 0x300001).nopw(); /* unknown... write 0x01 in game, and 0x00 on reset */
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderby_input_r));
|
||||
map(0x308008, 0x308009).w(FUNC(sderby_state::scmatto_out_w)); /* output port */
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
|
||||
map(0x10400c, 0x10400d).nopw(); // seems another video register. constantly used
|
||||
map(0x10400e, 0x10400f).nopw(); // seems another video register. constantly used
|
||||
map(0x104010, 0x105fff).nopw(); // unknown
|
||||
map(0x300000, 0x300001).nopw(); // unknown... write 0x01 in game, and 0x00 on reset
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
|
||||
map(0x308008, 0x308009).w(FUNC(sderby_state::scmatto_out_w));
|
||||
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(0xd00000, 0xd001ff).ram();
|
||||
map(0x800000, 0x800fff).ram().share("spriteram");
|
||||
map(0x801000, 0x80100d).nopw(); /* unknown */
|
||||
map(0x8f0000, 0x8f07ff).ram().share("nvram"); /* 16K Dallas DS1220Y-200 NVRAM */
|
||||
map(0x800000, 0x800fff).ram().share(m_spriteram);
|
||||
map(0x801000, 0x80100d).nopw(); // unknown
|
||||
map(0x8f0000, 0x8f07ff).ram().share("nvram"); // 16K Dallas DS1220Y-200 NVRAM
|
||||
map(0x8fc000, 0x8fffff).ram();
|
||||
}
|
||||
|
||||
void sderby_state::shinygld_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x03ffff).rom();
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::sderby_scroll_w)); /* tilemaps offset control */
|
||||
map(0x10400c, 0x10400d).nopw(); /* seems another video register. constantly used */
|
||||
map(0x10400e, 0x10400f).nopw(); /* seems another video register. constantly used */
|
||||
map(0x104010, 0x105fff).nopw(); /* unknown */
|
||||
map(0x300000, 0x300001).nopw(); /* unknown... write 0x01 in game, and 0x00 on reset */
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::sderby_input_r));
|
||||
map(0x308008, 0x308009).nopw(); /* output port */
|
||||
map(0x100000, 0x100fff).ram().w(FUNC(sderby_state::bg_videoram_w)).share(m_bg_videoram);
|
||||
map(0x101000, 0x101fff).ram().w(FUNC(sderby_state::md_videoram_w)).share(m_md_videoram);
|
||||
map(0x102000, 0x103fff).ram().w(FUNC(sderby_state::fg_videoram_w)).share(m_fg_videoram);
|
||||
map(0x104000, 0x10400b).w(FUNC(sderby_state::scroll_w));
|
||||
map(0x10400c, 0x10400d).nopw(); // seems another video register. constantly used
|
||||
map(0x10400e, 0x10400f).nopw(); // seems another video register. constantly used
|
||||
map(0x104010, 0x105fff).nopw(); // unknown
|
||||
map(0x300000, 0x300001).nopw(); // unknown... write 0x01 in game, and 0x00 on reset
|
||||
map(0x308000, 0x30800d).r(FUNC(sderby_state::input_r));
|
||||
map(0x308008, 0x308009).nopw();
|
||||
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(0x400000, 0x400fff).ram().share("spriteram");
|
||||
map(0x401000, 0x40100d).nopw(); /* unknown */
|
||||
map(0x700000, 0x7007ff).ram().share("nvram"); /* 16K Dallas DS1220Y-200 NVRAM */
|
||||
map(0x400000, 0x400fff).ram().share(m_spriteram);
|
||||
map(0x401000, 0x40100d).nopw(); // unknown
|
||||
map(0x700000, 0x7007ff).ram().share("nvram"); // 16K Dallas DS1220Y-200 NVRAM
|
||||
map(0x7f0000, 0x7fffff).ram();
|
||||
}
|
||||
|
||||
void sderby_state::roulette_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x03ffff).rom();
|
||||
map(0x440000, 0x440fff).writeonly().share("spriteram");
|
||||
map(0x500000, 0x500fff).ram().w(FUNC(sderby_state::sderby_videoram_w)).share("videoram"); /* bg */
|
||||
map(0x501000, 0x501fff).ram().w(FUNC(sderby_state::sderby_md_videoram_w)).share("md_videoram"); /* mid */
|
||||
map(0x502000, 0x503fff).ram().w(FUNC(sderby_state::sderby_fg_videoram_w)).share("fg_videoram"); /* fg */
|
||||
map(0x504000, 0x50400b).ram().w(FUNC(sderby_state::sderby_scroll_w));
|
||||
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, 0x708009).r(FUNC(sderby_state::roulette_input_r));
|
||||
map(0x708006, 0x708007).w(FUNC(sderby_state::roulette_out_w));
|
||||
map(0x70800b, 0x70800b).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x70800c, 0x70800d).nopw(); /* watchdog?? (0x0003) */
|
||||
map(0x70800e, 0x70800f).rw(FUNC(sderby_state::rprot_r), FUNC(sderby_state::rprot_w)); /* MCU communication */
|
||||
map(0x70800c, 0x70800d).nopw(); // watchdog?? (0x0003)
|
||||
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(0xff0000, 0xff07ff).ram().share("nvram");
|
||||
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 )
|
||||
PORT_START("IN0") /* 0x308000.w */
|
||||
PORT_START("IN0") // 0x308000.w
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) 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
|
||||
|
||||
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( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) 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
|
||||
|
||||
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( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
|
||||
@ -485,7 +702,7 @@ static INPUT_PORTS_START( luckboom )
|
||||
INPUT_PORTS_END
|
||||
|
||||
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( 0x0002, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
|
||||
@ -505,7 +722,7 @@ static INPUT_PORTS_START( spacewin )
|
||||
INPUT_PORTS_END
|
||||
|
||||
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( 0x0002, IP_ACTIVE_LOW, IPT_SLOT_STOP2 )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SLOT_STOP3 )
|
||||
@ -527,7 +744,7 @@ INPUT_PORTS_END
|
||||
static INPUT_PORTS_START( pmroulet )
|
||||
PORT_START("IN0")
|
||||
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_BIT( 0x00c0, 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( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
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( 0x0f00, 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 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0x000, 256 ) /* sprites */
|
||||
GFXDECODE_ENTRY( "gfx1", 0, tiles16x16_layout, 0x000, 256 ) /* sprites */
|
||||
GFXDECODE_ENTRY( "gfx", 0, tiles8x8_layout, 0x000, 256 )
|
||||
GFXDECODE_ENTRY( "gfx", 0, tiles16x16_layout, 0x000, 256 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
@ -612,14 +829,14 @@ void sderby_state::sderby(machine_config &config)
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
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_sderby));
|
||||
screen.set_screen_update(FUNC(sderby_state::screen_update));
|
||||
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", 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)
|
||||
@ -635,14 +852,14 @@ void sderby_state::sderbya(machine_config &config)
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
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_sderby));
|
||||
screen.set_screen_update(FUNC(sderby_state::screen_update));
|
||||
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", 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)
|
||||
@ -658,14 +875,14 @@ void sderby_state::luckboom(machine_config &config)
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
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_sderby));
|
||||
screen.set_screen_update(FUNC(sderby_state::screen_update));
|
||||
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", 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)
|
||||
@ -688,7 +905,7 @@ void sderby_state::spacewin(machine_config &config)
|
||||
PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000);
|
||||
|
||||
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)
|
||||
@ -704,14 +921,14 @@ void sderby_state::shinygld(machine_config &config)
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
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_sderby));
|
||||
screen.set_screen_update(FUNC(sderby_state::screen_update));
|
||||
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.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)
|
||||
@ -724,7 +941,7 @@ void sderby_state::pmroulet(machine_config &config)
|
||||
|
||||
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_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));
|
||||
@ -734,7 +951,30 @@ void sderby_state::pmroulet(machine_config &config)
|
||||
PALETTE(config, m_palette).set_format(palette_device::RGBx_555, 0x1000);
|
||||
|
||||
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_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( "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_REGION( 0xa0000, "gfx1", 0 ) /* Sprites */
|
||||
ROM_REGION( 0xa0000, "gfx", 0 )
|
||||
ROM_LOAD( "24.bin", 0x00000, 0x20000, CRC(93c917df) SHA1(dc2fa5e29749ec92871c66146c0412a23f47e316) )
|
||||
ROM_LOAD( "25.bin", 0x20000, 0x20000, CRC(7ba485cd) SHA1(b0170614d713af9d1556251c76ae762de872abe6) )
|
||||
ROM_LOAD( "26.bin", 0x40000, 0x20000, CRC(beabe4f7) SHA1(a5615450fae930cb2408f201a9faa12551de0d70) )
|
||||
@ -784,14 +1024,14 @@ ROM_START( sderby )
|
||||
ROM_END
|
||||
|
||||
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( "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_REGION( 0x140000, "gfx1", 0 ) /* Sprites */
|
||||
ROM_REGION( 0x140000, "gfx", 0 )
|
||||
ROM_LOAD( "24.u141", 0x000000, 0x40000, CRC(54234f72) SHA1(c2e3e547255174daa9a6acad743c210b92ded385) )
|
||||
ROM_LOAD( "25.u142", 0x040000, 0x40000, CRC(1bd98cf7) SHA1(67143a16e2cf01868fac3d8d6d9db423f77d09b9) )
|
||||
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_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( "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_REGION( 0xa0000, "gfx1", 0 ) /* Sprites */
|
||||
ROM_REGION( 0xa0000, "gfx", 0 )
|
||||
ROM_LOAD( "4.u141", 0x000000, 0x20000, CRC(ce20c599) SHA1(93358c3a891c66ca944eb684bd47e9c25bfcb88d) )
|
||||
ROM_LOAD( "5.u142", 0x020000, 0x20000, CRC(ae4f8e06) SHA1(cb3b941c67ae5c9df005d9f8b2105dc5a114f19f) )
|
||||
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.
|
||||
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( "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_REGION( 0xa0000, "gfx1", 0 ) /* Sprites */
|
||||
ROM_REGION( 0xa0000, "gfx", 0 )
|
||||
ROM_LOAD( "18.u141", 0x000000, 0x20000, CRC(a905c02d) SHA1(07a0a70424aa759e4c552408154c2d1515f512d5) ) // 27C1001
|
||||
ROM_LOAD( "19.u142", 0x020000, 0x20000, CRC(8db53f3b) SHA1(aeb2da8bb065bb49edae1de51f6db9a7a02989c3) ) // 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),
|
||||
three PALCE22V10H (two are near the GFX ROMs, probably for enabling them), one PALCE16V8H.*/
|
||||
ROM_REGION( 0x1000, "plds", 0)
|
||||
ROM_LOAD( "gal22v10.bin", 0x0400, 0x02e5, NO_DUMP ) // soldered
|
||||
ROM_LOAD( "palce22v10_1.bin", 0x2dd, 0x2dd, NO_DUMP ) // soldered
|
||||
ROM_LOAD( "palce22v10_2.bin", 0x2dd, 0x2dd, NO_DUMP ) // soldered
|
||||
ROM_LOAD( "palce22v10_3.bin", 0x2dd, 0x2dd, NO_DUMP ) // soldered
|
||||
ROM_LOAD( "palce16v8h.bin", 0x0200, 0x0117, NO_DUMP ) // soldered
|
||||
ROM_REGION( 0xd00, "plds", 0)
|
||||
ROM_LOAD( "gal22v10.bin", 0x000, 0x2e5, NO_DUMP ) // soldered
|
||||
ROM_LOAD( "palce22v10_1.bin", 0x300, 0x2dd, NO_DUMP ) // soldered
|
||||
ROM_LOAD( "palce22v10_2.bin", 0x600, 0x2dd, NO_DUMP ) // soldered
|
||||
ROM_LOAD( "palce22v10_3.bin", 0x900, 0x2dd, NO_DUMP ) // soldered
|
||||
ROM_LOAD( "palce16v8h.bin", 0xb00, 0x117, NO_DUMP ) // soldered
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
@ -940,17 +1180,17 @@ CRC-32 : D4C2B7DAh
|
||||
|
||||
*/
|
||||
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( "3.bin", 0x00001, 0x20000, CRC(29d06a38) SHA1(c6fdca1a31fad9abf854e521e593f3ec8018ae6d))
|
||||
|
||||
ROM_REGION( 0x4008, "pic16c74", 0 )
|
||||
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_REGION( 0x280000, "gfx1", 0 ) /* sprites */
|
||||
ROM_REGION( 0x280000, "gfx", 0 )
|
||||
ROM_LOAD( "4.bin", 0x000000, 0x80000, CRC(efcddac9) SHA1(72435ec478b70a067d47f3daf7c224169ee5827a))
|
||||
ROM_LOAD( "5.bin", 0x080000, 0x80000, CRC(bc75ef8f) SHA1(1f3dc457e5ae143d53cfef0e1fcb4586dceefb67))
|
||||
ROM_LOAD( "6.bin", 0x100000, 0x80000, CRC(e47d5f55) SHA1(a341e24f98125265cb3986f8c7ce84eedd056b71))
|
||||
@ -959,17 +1199,17 @@ ROM_START( croupier )
|
||||
ROM_END
|
||||
|
||||
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( "3.bin", 0x00001, 0x20000, CRC(11acaac2) SHA1(19e7bbbf4356fc9a866f9f36d0568c42d6a36c07)) // sldh
|
||||
|
||||
ROM_REGION( 0x4008, "pic16c74", 0 )
|
||||
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_REGION( 0x280000, "gfx1", 0 ) /* sprites */
|
||||
ROM_REGION( 0x280000, "gfx", 0 )
|
||||
ROM_LOAD( "4.bin", 0x000000, 0x80000, CRC(efcddac9) SHA1(72435ec478b70a067d47f3daf7c224169ee5827a))
|
||||
ROM_LOAD( "5.bin", 0x080000, 0x80000, CRC(bc75ef8f) SHA1(1f3dc457e5ae143d53cfef0e1fcb4586dceefb67))
|
||||
ROM_LOAD( "6.bin", 0x100000, 0x80000, CRC(e47d5f55) SHA1(a341e24f98125265cb3986f8c7ce84eedd056b71))
|
||||
@ -1009,14 +1249,14 @@ QTY Type position status
|
||||
|
||||
|
||||
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( "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_REGION( 0xa0000, "gfx1", 0 ) /* Sprites */
|
||||
ROM_REGION( 0xa0000, "gfx", 0 )
|
||||
ROM_LOAD( "4.u141", 0x000000, 0x20000, CRC(3aeccad7) SHA1(4104dd3ae928c1a876ac9b460fe18b58ce1206f7) )
|
||||
ROM_LOAD( "5.u142", 0x020000, 0x20000, CRC(4e4f9ac6) SHA1(e9b0c48195d8b21cdab16d66423ff43e6292ef2c) )
|
||||
ROM_LOAD( "6.u143", 0x040000, 0x20000, CRC(d1b4910e) SHA1(cfcb14bcd992bceaa634b20eb2d446caa62b6d82) )
|
||||
@ -1025,6 +1265,40 @@ ROM_START( luckboom )
|
||||
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 *
|
||||
******************************/
|
||||
@ -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, 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( 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
|
||||
|
@ -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
|
@ -37695,6 +37695,7 @@ scyclone // (c) 1980 Taito Corporation
|
||||
croupier // (c) 1997 Playmark
|
||||
croupiera // (c) 1997 Playmark
|
||||
luckboom //
|
||||
magictch //
|
||||
sderby // (c) 1996
|
||||
sderbya // (c) 1996
|
||||
shinygld //
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user