mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
Merge pull request #1534 from ajrhacker/skylncr_ramdac
Update skylncr.cpp to use RAMDAC (nw)
This commit is contained in:
commit
7ef6d96c00
@ -45,6 +45,7 @@ ramdac_device::ramdac_device(const machine_config &mconfig, const char *tag, dev
|
||||
device_memory_interface(mconfig, *this),
|
||||
m_space_config("videoram", ENDIANNESS_LITTLE, 8, 10, 0, nullptr, *ADDRESS_MAP_NAME(ramdac_palram)),
|
||||
m_palette(*this, finder_base::DUMMY_TAG),
|
||||
m_color_base(0),
|
||||
m_split_read_reg(0)
|
||||
{
|
||||
}
|
||||
@ -190,7 +191,8 @@ WRITE8_MEMBER( ramdac_device::ramdac_rgb666_w )
|
||||
m_palram[offset] = data & 0x3f;
|
||||
pal_offs = (offset & 0xff);
|
||||
|
||||
m_palette->set_pen_color(offset&0xff,pal6bit(m_palram[pal_offs|0x000]),pal6bit(m_palram[pal_offs|0x100]),pal6bit(m_palram[pal_offs|0x200]));
|
||||
pen_t pen = m_color_base + (offset & 0xff);
|
||||
m_palette->set_pen_color(pen, pal6bit(m_palram[pal_offs|0x000]), pal6bit(m_palram[pal_offs|0x100]), pal6bit(m_palram[pal_offs|0x200]));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ramdac_device::ramdac_rgb888_w )
|
||||
@ -200,5 +202,6 @@ WRITE8_MEMBER( ramdac_device::ramdac_rgb888_w )
|
||||
m_palram[offset] = data;
|
||||
pal_offs = (offset & 0xff);
|
||||
|
||||
m_palette->set_pen_color(offset&0xff,m_palram[pal_offs|0x000],m_palram[pal_offs|0x100],m_palram[pal_offs|0x200]);
|
||||
pen_t pen = m_color_base + (offset & 0xff);
|
||||
m_palette->set_pen_color(pen, m_palram[pal_offs|0x000], m_palram[pal_offs|0x100], m_palram[pal_offs|0x200]);
|
||||
}
|
||||
|
@ -23,6 +23,9 @@
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _map) \
|
||||
ramdac_device::static_set_palette_tag(*device, "^" _palette_tag);
|
||||
|
||||
#define MCFG_RAMDAC_COLOR_BASE(_color_base) \
|
||||
ramdac_device::static_set_color_base(*device, _color_base);
|
||||
|
||||
#define MCFG_RAMDAC_SPLIT_READ(_split) \
|
||||
ramdac_device::set_split_read(*device, _split);
|
||||
|
||||
@ -42,6 +45,7 @@ public:
|
||||
|
||||
// static configuration
|
||||
static void static_set_palette_tag(device_t &device, const char *tag);
|
||||
static void static_set_color_base(device_t &device, UINT32 color_base) { downcast<ramdac_device &>(device).m_color_base = color_base; }
|
||||
static void set_split_read(device_t &device, int split) { downcast<ramdac_device &>(device).m_split_read_reg = split; }
|
||||
|
||||
// I/O operations
|
||||
@ -76,6 +80,7 @@ private:
|
||||
const address_space_config m_space_config;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
UINT32 m_color_base;
|
||||
UINT8 m_split_read_reg; // read register index is separated, seen in rltennis
|
||||
};
|
||||
|
||||
|
@ -127,6 +127,7 @@
|
||||
#include "machine/i8255.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/ticket.h"
|
||||
#include "video/ramdac.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
@ -153,8 +154,6 @@ public:
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_generic_paletteram_8(*this, "paletteram"),
|
||||
m_generic_paletteram2_8(*this, "paletteram2"),
|
||||
m_hopper(*this, "hopper") { }
|
||||
|
||||
tilemap_t *m_tmap;
|
||||
@ -189,8 +188,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(reeltileshigh_2_w);
|
||||
DECLARE_WRITE8_MEMBER(reeltileshigh_3_w);
|
||||
DECLARE_WRITE8_MEMBER(reeltileshigh_4_w);
|
||||
DECLARE_WRITE8_MEMBER(skylncr_paletteram_w);
|
||||
DECLARE_WRITE8_MEMBER(skylncr_paletteram2_w);
|
||||
DECLARE_WRITE8_MEMBER(reelscroll1_w);
|
||||
DECLARE_WRITE8_MEMBER(reelscroll2_w);
|
||||
DECLARE_WRITE8_MEMBER(reelscroll3_w);
|
||||
@ -201,7 +198,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(mbutrfly_prot_w);
|
||||
READ_LINE_MEMBER(mbutrfly_prot_r);
|
||||
DECLARE_READ8_MEMBER(bdream97_opcode_r);
|
||||
DECLARE_DRIVER_INIT(skylncr);
|
||||
DECLARE_DRIVER_INIT(sonikfig);
|
||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_reel_1_tile_info);
|
||||
@ -214,8 +210,6 @@ public:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
optional_shared_ptr<UINT8> m_generic_paletteram_8;
|
||||
optional_shared_ptr<UINT8> m_generic_paletteram2_8;
|
||||
required_device<ticket_dispenser_device> m_hopper;
|
||||
bool m_mbutrfly_prot;
|
||||
};
|
||||
@ -372,55 +366,6 @@ WRITE8_MEMBER(skylncr_state::reeltileshigh_4_w)
|
||||
m_reel_4_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
// FIXME: this is a VGA-style RAMDAC, so use one
|
||||
// instead of this custom implementation
|
||||
|
||||
WRITE8_MEMBER(skylncr_state::skylncr_paletteram_w)
|
||||
{
|
||||
if (offset == 0)
|
||||
{
|
||||
m_color = data;
|
||||
}
|
||||
else
|
||||
{
|
||||
int r,g,b;
|
||||
m_generic_paletteram_8[m_color] = data;
|
||||
|
||||
r = m_generic_paletteram_8[(m_color/3 * 3) + 0];
|
||||
g = m_generic_paletteram_8[(m_color/3 * 3) + 1];
|
||||
b = m_generic_paletteram_8[(m_color/3 * 3) + 2];
|
||||
r = (r << 2) | (r >> 4);
|
||||
g = (g << 2) | (g >> 4);
|
||||
b = (b << 2) | (b >> 4);
|
||||
|
||||
m_palette->set_pen_color(m_color / 3, rgb_t(r, g, b));
|
||||
m_color = (m_color + 1) % (0x100 * 3);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(skylncr_state::skylncr_paletteram2_w)
|
||||
{
|
||||
if (offset == 0)
|
||||
{
|
||||
m_color2 = data;
|
||||
}
|
||||
else
|
||||
{
|
||||
int r,g,b;
|
||||
m_generic_paletteram2_8[m_color2] = data;
|
||||
|
||||
r = m_generic_paletteram2_8[(m_color2/3 * 3) + 0];
|
||||
g = m_generic_paletteram2_8[(m_color2/3 * 3) + 1];
|
||||
b = m_generic_paletteram2_8[(m_color2/3 * 3) + 2];
|
||||
r = (r << 2) | (r >> 4);
|
||||
g = (g << 2) | (g >> 4);
|
||||
b = (b << 2) | (b >> 4);
|
||||
|
||||
m_palette->set_pen_color(0x100 + m_color2 / 3, rgb_t(r, g, b));
|
||||
m_color2 = (m_color2 + 1) % (0x100 * 3);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(skylncr_state::reelscroll1_w)
|
||||
{
|
||||
m_reelscroll1[offset] = data;
|
||||
@ -449,7 +394,7 @@ WRITE8_MEMBER(skylncr_state::reelscroll4_w)
|
||||
WRITE8_MEMBER(skylncr_state::skylncr_coin_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x04);
|
||||
m_hopper->write(space, 0, (data & 0x20) ? 0x80 : 0);
|
||||
m_hopper->motor_w(data & 0x20);
|
||||
}
|
||||
|
||||
READ8_MEMBER(skylncr_state::ret_ff)
|
||||
@ -561,15 +506,20 @@ static ADDRESS_MAP_START( io_map_skylncr, AS_IO, 8, skylncr_state )
|
||||
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) /* Input Ports */
|
||||
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) /* Input Ports */
|
||||
|
||||
AM_RANGE(0x20, 0x20) AM_WRITE(skylncr_coin_w )
|
||||
AM_RANGE(0x20, 0x20) AM_WRITE(skylncr_coin_w)
|
||||
|
||||
AM_RANGE(0x30, 0x31) AM_DEVWRITE("aysnd", ay8910_device, address_data_w)
|
||||
AM_RANGE(0x31, 0x31) AM_DEVREAD("aysnd", ay8910_device, data_r)
|
||||
|
||||
AM_RANGE(0x40, 0x41) AM_WRITE(skylncr_paletteram_w )
|
||||
AM_RANGE(0x50, 0x51) AM_WRITE(skylncr_paletteram2_w )
|
||||
AM_RANGE(0x40, 0x40) AM_DEVWRITE("ramdac", ramdac_device, index_w)
|
||||
AM_RANGE(0x41, 0x41) AM_DEVWRITE("ramdac", ramdac_device, pal_w)
|
||||
AM_RANGE(0x42, 0x42) AM_DEVWRITE("ramdac", ramdac_device, mask_w)
|
||||
|
||||
AM_RANGE(0x70, 0x70) AM_WRITE(skylncr_nmi_enable_w )
|
||||
AM_RANGE(0x50, 0x50) AM_DEVWRITE("ramdac2", ramdac_device, index_w)
|
||||
AM_RANGE(0x51, 0x51) AM_DEVWRITE("ramdac2", ramdac_device, pal_w)
|
||||
AM_RANGE(0x52, 0x52) AM_DEVWRITE("ramdac2", ramdac_device, mask_w)
|
||||
|
||||
AM_RANGE(0x70, 0x70) AM_WRITE(skylncr_nmi_enable_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -585,6 +535,17 @@ static ADDRESS_MAP_START( bdream97_opcode_map, AS_DECRYPTED_OPCODES, 8, skylncr_
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( ramdac_map, AS_0, 8, skylncr_state )
|
||||
AM_RANGE(0x000, 0x3ff) AM_DEVREADWRITE("ramdac", ramdac_device, ramdac_pal_r, ramdac_rgb666_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( ramdac2_map, AS_0, 8, skylncr_state )
|
||||
AM_RANGE(0x000, 0x3ff) AM_DEVREADWRITE("ramdac2", ramdac_device, ramdac_pal_r, ramdac_rgb666_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
/***************************************
|
||||
* Graphics Layouts *
|
||||
***************************************/
|
||||
@ -1689,6 +1650,12 @@ static MACHINE_CONFIG_START( skylncr, skylncr_state )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", skylncr)
|
||||
MCFG_PALETTE_ADD("palette", 0x200)
|
||||
|
||||
MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette")
|
||||
MCFG_RAMDAC_COLOR_BASE(0)
|
||||
|
||||
MCFG_RAMDAC_ADD("ramdac2", ramdac2_map, "palette")
|
||||
MCFG_RAMDAC_COLOR_BASE(0x100)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("aysnd", AY8910, MASTER_CLOCK/8)
|
||||
@ -2007,12 +1974,6 @@ ROM_END
|
||||
* Driver Init *
|
||||
**********************************/
|
||||
|
||||
DRIVER_INIT_MEMBER(skylncr_state, skylncr)
|
||||
{
|
||||
m_generic_paletteram_8.allocate(0x100 * 3);
|
||||
m_generic_paletteram2_8.allocate(0x100 * 3);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(skylncr_state, sonikfig)
|
||||
/*
|
||||
Encryption: For each 8 bytes group,
|
||||
@ -2043,9 +2004,6 @@ DRIVER_INIT_MEMBER(skylncr_state, sonikfig)
|
||||
std::swap(ROM[x + 1], ROM[x + 4]);
|
||||
std::swap(ROM[x + 3], ROM[x + 6]);
|
||||
}
|
||||
|
||||
m_generic_paletteram_8.allocate(0x100 * 3);
|
||||
m_generic_paletteram2_8.allocate(0x100 * 3);
|
||||
}
|
||||
|
||||
|
||||
@ -2054,13 +2012,13 @@ DRIVER_INIT_MEMBER(skylncr_state, sonikfig)
|
||||
****************************************************/
|
||||
|
||||
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
|
||||
GAME( 1995, skylncr, 0, skylncr, skylncr, skylncr_state, skylncr, ROT0, "Bordun International", "Sky Lancer (Bordun, version U450C)", 0 )
|
||||
GAME( 1995, butrfly, 0, skylncr, skylncr, skylncr_state, skylncr, ROT0, "Bordun International", "Butterfly Video Game (version U350C)", 0 )
|
||||
GAME( 1999, mbutrfly, 0, mbutrfly, mbutrfly, skylncr_state, skylncr, ROT0, "Bordun International", "Magical Butterfly (version U350C, protected)", 0 )
|
||||
GAME( 1995, madzoo, 0, skylncr, skylncr, skylncr_state, skylncr, ROT0, "Bordun International", "Mad Zoo (version U450C)", 0 )
|
||||
GAME( 1995, leader, 0, skylncr, leader, skylncr_state, skylncr, ROT0, "bootleg", "Leader (version Z 2E, Greece)", 0 )
|
||||
GAME( 199?, gallag50, 0, skylncr, gallag50, skylncr_state, skylncr, ROT0, "bootleg", "Gallag Video Game / Petalouda (Butterfly, x50)", 0 )
|
||||
GAME( 199?, neraidou, 0, neraidou, neraidou, skylncr_state, skylncr, ROT0, "bootleg", "Neraidoula (Fairy Butterfly)", 0 )
|
||||
GAME( 199?, sstar97, 0, sstar97, sstar97, skylncr_state, skylncr, ROT0, "Bordun International", "Super Star 97 / Ming Xing 97 (version V153B)", 0 )
|
||||
GAME( 1995, bdream97, 0, bdream97, skylncr, skylncr_state, skylncr, ROT0, "bootleg (KKK)", "Butterfly Dream 97 / Hudie Meng 97", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
|
||||
GAME( 1995, skylncr, 0, skylncr, skylncr, driver_device, 0, ROT0, "Bordun International", "Sky Lancer (Bordun, version U450C)", 0 )
|
||||
GAME( 1995, butrfly, 0, skylncr, skylncr, driver_device, 0, ROT0, "Bordun International", "Butterfly Video Game (version U350C)", 0 )
|
||||
GAME( 1999, mbutrfly, 0, mbutrfly, mbutrfly, driver_device, 0, ROT0, "Bordun International", "Magical Butterfly (version U350C, protected)", 0 )
|
||||
GAME( 1995, madzoo, 0, skylncr, skylncr, driver_device, 0, ROT0, "Bordun International", "Mad Zoo (version U450C)", 0 )
|
||||
GAME( 1995, leader, 0, skylncr, leader, driver_device, 0, ROT0, "bootleg", "Leader (version Z 2E, Greece)", 0 )
|
||||
GAME( 199?, gallag50, 0, skylncr, gallag50, driver_device, 0, ROT0, "bootleg", "Gallag Video Game / Petalouda (Butterfly, x50)", 0 )
|
||||
GAME( 199?, neraidou, 0, neraidou, neraidou, driver_device, 0, ROT0, "bootleg", "Neraidoula (Fairy Butterfly)", 0 )
|
||||
GAME( 199?, sstar97, 0, sstar97, sstar97, driver_device, 0, ROT0, "Bordun International", "Super Star 97 / Ming Xing 97 (version V153B)", 0 )
|
||||
GAME( 1995, bdream97, 0, bdream97, skylncr, driver_device, 0, ROT0, "bootleg (KKK)", "Butterfly Dream 97 / Hudie Meng 97", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
|
||||
GAME( 2000, sonikfig, 0, skylncr, sonikfig, skylncr_state, sonikfig, ROT0, "Z Games", "Sonik Fighter (version 02, encrypted)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING )
|
||||
|
Loading…
Reference in New Issue
Block a user