From 513e6c20cc981c0a01561eacebbefd0320b2665b Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 19 Oct 2016 15:31:49 -0400 Subject: [PATCH] Update skylncr.cpp to use RAMDAC (nw) --- src/devices/video/ramdac.cpp | 7 ++- src/devices/video/ramdac.h | 5 ++ src/mame/drivers/skylncr.cpp | 116 +++++++++++------------------------ 3 files changed, 47 insertions(+), 81 deletions(-) diff --git a/src/devices/video/ramdac.cpp b/src/devices/video/ramdac.cpp index d6a37db90c5..5d22db9442c 100644 --- a/src/devices/video/ramdac.cpp +++ b/src/devices/video/ramdac.cpp @@ -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]); } diff --git a/src/devices/video/ramdac.h b/src/devices/video/ramdac.h index a006312c59f..804bdc68c79 100644 --- a/src/devices/video/ramdac.h +++ b/src/devices/video/ramdac.h @@ -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(device).m_color_base = color_base; } static void set_split_read(device_t &device, int split) { downcast(device).m_split_read_reg = split; } // I/O operations @@ -76,6 +80,7 @@ private: const address_space_config m_space_config; required_device m_palette; + UINT32 m_color_base; UINT8 m_split_read_reg; // read register index is separated, seen in rltennis }; diff --git a/src/mame/drivers/skylncr.cpp b/src/mame/drivers/skylncr.cpp index 4464a9a38b0..b5b78b3c761 100644 --- a/src/mame/drivers/skylncr.cpp +++ b/src/mame/drivers/skylncr.cpp @@ -127,6 +127,7 @@ #include "machine/i8255.h" #include "machine/nvram.h" #include "machine/ticket.h" +#include "video/ramdac.h" #include @@ -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 m_maincpu; required_device m_gfxdecode; required_device m_palette; - optional_shared_ptr m_generic_paletteram_8; - optional_shared_ptr m_generic_paletteram2_8; required_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 )