From 3861fbc65efa5bfe42d05ef5942ba1e1d0888928 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 26 May 2017 18:58:57 +0200 Subject: [PATCH] lastfght.cpp, subsino.cpp, subsino2.cpp: used ramdac_device instead of custom implementations (nw) --- src/mame/drivers/lastfght.cpp | 182 ++++++++++++++++------------------ src/mame/drivers/subsino.cpp | 55 +++------- src/mame/drivers/subsino2.cpp | 72 ++++++-------- 3 files changed, 124 insertions(+), 185 deletions(-) diff --git a/src/mame/drivers/lastfght.cpp b/src/mame/drivers/lastfght.cpp index 760628ad48c..ff846848d88 100644 --- a/src/mame/drivers/lastfght.cpp +++ b/src/mame/drivers/lastfght.cpp @@ -67,6 +67,7 @@ Notes: #include "emu.h" #include "cpu/h8/h83048.h" #include "machine/nvram.h" +#include "video/ramdac.h" #include "screen.h" @@ -80,9 +81,35 @@ public: m_palette(*this, "palette") { } + /* memory */ + DECLARE_WRITE16_MEMBER(hi_w); + DECLARE_WRITE16_MEMBER(x_w); + DECLARE_WRITE16_MEMBER(yw_w); + DECLARE_WRITE16_MEMBER(h_w); + DECLARE_WRITE16_MEMBER(sx_w); + DECLARE_WRITE16_MEMBER(sy_w); + DECLARE_WRITE16_MEMBER(sr_w); + DECLARE_WRITE16_MEMBER(sd_w); + DECLARE_WRITE16_MEMBER(blit_w); + DECLARE_WRITE16_MEMBER(dest_w); + DECLARE_READ16_MEMBER(c00000_r); + DECLARE_READ16_MEMBER(c00002_r); + DECLARE_READ16_MEMBER(c00004_r); + DECLARE_READ16_MEMBER(c00006_r); + DECLARE_WRITE16_MEMBER(c00006_w); + DECLARE_READ16_MEMBER(sound_r); + DECLARE_WRITE16_MEMBER(sound_w); + DECLARE_DRIVER_INIT(lastfght); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + +private: /* video-related */ bitmap_ind16 m_bitmap[2]; - int m_clr_offset; int m_dest; int m_hi; int m_sx; @@ -107,32 +134,6 @@ public: required_device m_maincpu; required_device m_screen; required_device m_palette; - - /* memory */ - uint8_t m_colorram[256 * 3]; - DECLARE_WRITE16_MEMBER(colordac_w); - DECLARE_WRITE16_MEMBER(lastfght_hi_w); - DECLARE_WRITE16_MEMBER(lastfght_x_w); - DECLARE_WRITE16_MEMBER(lastfght_yw_w); - DECLARE_WRITE16_MEMBER(lastfght_h_w); - DECLARE_WRITE16_MEMBER(lastfght_sx_w); - DECLARE_WRITE16_MEMBER(lastfght_sy_w); - DECLARE_WRITE16_MEMBER(lastfght_sr_w); - DECLARE_WRITE16_MEMBER(lastfght_sd_w); - DECLARE_WRITE16_MEMBER(lastfght_blit_w); - DECLARE_WRITE16_MEMBER(lastfght_dest_w); - DECLARE_READ16_MEMBER(lastfght_c00000_r); - DECLARE_READ16_MEMBER(lastfght_c00002_r); - DECLARE_READ16_MEMBER(lastfght_c00004_r); - DECLARE_READ16_MEMBER(lastfght_c00006_r); - DECLARE_WRITE16_MEMBER(lastfght_c00006_w); - DECLARE_READ16_MEMBER(lastfght_sound_r); - DECLARE_WRITE16_MEMBER(lastfght_sound_w); - DECLARE_DRIVER_INIT(lastfght); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_lastfght(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); }; @@ -148,11 +149,10 @@ void lastfght_state::video_start() save_item(NAME(m_bitmap[0])); save_item(NAME(m_bitmap[1])); - save_item(NAME(m_colorram)); } -uint32_t lastfght_state::screen_update_lastfght(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t lastfght_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { #ifdef MAME_DEBUG #if 1 @@ -191,141 +191,121 @@ uint32_t lastfght_state::screen_update_lastfght(screen_device &screen, bitmap_in return 0; } -// Palette: HMC HM86171 VGA 256 colour RAMDAC - -WRITE16_MEMBER(lastfght_state::colordac_w) -{ - if (ACCESSING_BITS_0_7) - { - m_colorram[m_clr_offset] = data; - m_palette->set_pen_color(m_clr_offset / 3, - pal6bit(m_colorram[(m_clr_offset / 3) * 3 + 0]), - pal6bit(m_colorram[(m_clr_offset / 3) * 3 + 1]), - pal6bit(m_colorram[(m_clr_offset / 3) * 3 + 2]) - ); - m_clr_offset = (m_clr_offset + 1) % (256 * 3); - } - if (ACCESSING_BITS_8_15) - { - m_clr_offset = (data >> 8) * 3; - } -} - // Blitter (supports zooming) // high byte of a 16 bit register -WRITE16_MEMBER(lastfght_state::lastfght_hi_w) +WRITE16_MEMBER(lastfght_state::hi_w) { if (ACCESSING_BITS_8_15) logerror("%06x: 600000.b = %02x\n", space.device().safe_pc(), data >> 8); if (ACCESSING_BITS_0_7) { m_hi = data << 8; - //logerror("%06x: lastfght_hi = %02x\n", space.device().safe_pc(), data); + //logerror("%06x: hi = %02x\n", space.device().safe_pc(), data); } } // screen x -WRITE16_MEMBER(lastfght_state::lastfght_x_w) +WRITE16_MEMBER(lastfght_state::x_w) { if (ACCESSING_BITS_8_15) logerror("%06x: 800008.b = %02x\n", space.device().safe_pc(), data >> 8); if (ACCESSING_BITS_0_7) { m_x = m_hi | data; - //logerror("%06x: lastfght_x = %02x\n", space.device().safe_pc(),data); + //logerror("%06x: x = %02x\n", space.device().safe_pc(),data); } } // screen y, screen width - 1 -WRITE16_MEMBER(lastfght_state::lastfght_yw_w) +WRITE16_MEMBER(lastfght_state::yw_w) { if (ACCESSING_BITS_8_15) { m_y = m_hi | (data >> 8); - //logerror("%06x: lastfght_y = %02x\n", space.device().safe_pc(), data >> 8); + //logerror("%06x: y = %02x\n", space.device().safe_pc(), data >> 8); } if (ACCESSING_BITS_0_7) { m_w = m_hi | data; - //logerror("%06x: lastfght_w = %02x\n", space.device().safe_pc(), data); + //logerror("%06x: w = %02x\n", space.device().safe_pc(), data); } } // screen height - 1 -WRITE16_MEMBER(lastfght_state::lastfght_h_w) +WRITE16_MEMBER(lastfght_state::h_w) { if (ACCESSING_BITS_8_15) { m_h = m_hi | (data >> 8); - //logerror("%06x: lastfght_h = %02x\n", space.device().safe_pc(), data >> 8); + //logerror("%06x: h = %02x\n", space.device().safe_pc(), data >> 8); } if (ACCESSING_BITS_0_7) logerror("%06x: 80000d.b = %02x\n", space.device().safe_pc(), data); } // source delta x << 6, source x << 6 -WRITE16_MEMBER(lastfght_state::lastfght_sx_w) +WRITE16_MEMBER(lastfght_state::sx_w) { if (ACCESSING_BITS_8_15) { m_dsx = m_hi | (data >> 8); - //logerror("%06x: lastfght_dsx = %02x\n", space.device().safe_pc(), data >> 8); + //logerror("%06x: dsx = %02x\n", space.device().safe_pc(), data >> 8); } if (ACCESSING_BITS_0_7) { m_sx = m_hi | data; - //logerror("%06x: lastfght_sx = %02x\n", space.device().safe_pc(), data); + //logerror("%06x: sx = %02x\n", space.device().safe_pc(), data); } } // source y << 6, source y1 << 6 -WRITE16_MEMBER(lastfght_state::lastfght_sy_w) +WRITE16_MEMBER(lastfght_state::sy_w) { if (ACCESSING_BITS_8_15) { m_sy = m_hi | (data >> 8); - //logerror("%06x: lastfght_sy = %02x\n", space.device().safe_pc(), data >> 8); + //logerror("%06x: sy = %02x\n", space.device().safe_pc(), data >> 8); } if (ACCESSING_BITS_0_7) { m_sy1 = m_hi | data; - //logerror("%06x: lastfght_sy1 = %02x\n", space.device().safe_pc(), data); + //logerror("%06x: sy1 = %02x\n", space.device().safe_pc(), data); } } // source rom (0x200000 bytes), source page (512x256 bytes) -WRITE16_MEMBER(lastfght_state::lastfght_sr_w) +WRITE16_MEMBER(lastfght_state::sr_w) { if (ACCESSING_BITS_8_15) { m_sp = (m_hi >> 8) >> 4; - //logerror("%06x: lastfght_sp = %02x\n", space.device().safe_pc(), data >> 8); + //logerror("%06x: sp = %02x\n", space.device().safe_pc(), data >> 8); } if (ACCESSING_BITS_0_7) { m_sr = data; - //logerror("%06x: lastfght_sr = %02x\n", space.device().safe_pc(), data); + //logerror("%06x: sr = %02x\n", space.device().safe_pc(), data); } } // source x1 << 6, source delta y << 6 -WRITE16_MEMBER(lastfght_state::lastfght_sd_w) +WRITE16_MEMBER(lastfght_state::sd_w) { if (ACCESSING_BITS_8_15) { m_sx1 = m_hi | (data >> 8); - //logerror("%06x: lastfght_sx1 = %02x\n", space.device().safe_pc(), data >> 8); + //logerror("%06x: sx1 = %02x\n", space.device().safe_pc(), data >> 8); } if (ACCESSING_BITS_0_7) { m_dsy = m_hi | data; - //logerror("%06x: lastfght_dsy = %02x\n", space.device().safe_pc(), data); + //logerror("%06x: dsy = %02x\n", space.device().safe_pc(), data); } } // start blit -WRITE16_MEMBER(lastfght_state::lastfght_blit_w) +WRITE16_MEMBER(lastfght_state::blit_w) { if (ACCESSING_BITS_8_15) { @@ -362,13 +342,13 @@ WRITE16_MEMBER(lastfght_state::lastfght_blit_w) } // toggle framebuffer -WRITE16_MEMBER(lastfght_state::lastfght_dest_w) +WRITE16_MEMBER(lastfght_state::dest_w) { if (ACCESSING_BITS_0_7) m_dest ^= 1; } -READ16_MEMBER(lastfght_state::lastfght_c00000_r) +READ16_MEMBER(lastfght_state::c00000_r) { // high byte: // bit 7 = blitter busy @@ -377,19 +357,19 @@ READ16_MEMBER(lastfght_state::lastfght_c00000_r) } -READ16_MEMBER(lastfght_state::lastfght_c00002_r) +READ16_MEMBER(lastfght_state::c00002_r) { // high byte: // mask 0x1c: from sound? return (machine().rand() & 0x1c00) | ioport("IN0")->read(); } -READ16_MEMBER(lastfght_state::lastfght_c00004_r) +READ16_MEMBER(lastfght_state::c00004_r) { return ioport("IN1")->read(); } -READ16_MEMBER(lastfght_state::lastfght_c00006_r) +READ16_MEMBER(lastfght_state::c00006_r) { // low byte: // bit 7 = protection? @@ -397,20 +377,20 @@ READ16_MEMBER(lastfght_state::lastfght_c00006_r) return ioport("IN2")->read(); } -WRITE16_MEMBER(lastfght_state::lastfght_c00006_w) +WRITE16_MEMBER(lastfght_state::c00006_w) { COMBINE_DATA(&m_c00006); // popmessage("%04x", m_c00006); } -READ16_MEMBER(lastfght_state::lastfght_sound_r) +READ16_MEMBER(lastfght_state::sound_r) { // low byte: // bit 3 return 8; } -WRITE16_MEMBER(lastfght_state::lastfght_sound_w) +WRITE16_MEMBER(lastfght_state::sound_w) { if (ACCESSING_BITS_8_15) logerror("%06x: sound_w msb = %02x\n", space.device().safe_pc(), data >> 8); @@ -430,28 +410,32 @@ static ADDRESS_MAP_START( lastfght_map, AS_PROGRAM, 16, lastfght_state ) AM_RANGE( 0x200000, 0x20ffff ) AM_RAM AM_SHARE("nvram") // battery - AM_RANGE( 0x600000, 0x600001 ) AM_WRITE(lastfght_hi_w ) - AM_RANGE( 0x600002, 0x600003 ) AM_READWRITE(lastfght_sound_r, lastfght_sound_w ) - AM_RANGE( 0x600006, 0x600007 ) AM_WRITE(lastfght_blit_w ) - AM_RANGE( 0x600008, 0x600009 ) AM_WRITE(colordac_w ) - AM_RANGE( 0x60000a, 0x60000b ) AM_WRITENOP // colordac? + AM_RANGE( 0x600000, 0x600001 ) AM_WRITE(hi_w ) + AM_RANGE( 0x600002, 0x600003 ) AM_READWRITE(sound_r, sound_w ) + AM_RANGE( 0x600006, 0x600007 ) AM_WRITE(blit_w ) + AM_RANGE( 0x600008, 0x600009 ) AM_DEVWRITE8("ramdac", ramdac_device, pal_w, 0x00ff ) + AM_RANGE( 0x600008, 0x600009 ) AM_DEVWRITE8("ramdac", ramdac_device, index_w, 0xff00 ) + AM_RANGE( 0x60000a, 0x60000b ) AM_DEVWRITE8("ramdac", ramdac_device, mask_w, 0xff00 ) - AM_RANGE( 0x800000, 0x800001 ) AM_WRITE(lastfght_sx_w ) - AM_RANGE( 0x800002, 0x800003 ) AM_WRITE(lastfght_sd_w ) - AM_RANGE( 0x800004, 0x800005 ) AM_WRITE(lastfght_sy_w ) - AM_RANGE( 0x800006, 0x800007 ) AM_WRITE(lastfght_sr_w ) - AM_RANGE( 0x800008, 0x800009 ) AM_WRITE(lastfght_x_w ) - AM_RANGE( 0x80000a, 0x80000b ) AM_WRITE(lastfght_yw_w ) - AM_RANGE( 0x80000c, 0x80000d ) AM_WRITE(lastfght_h_w ) + AM_RANGE( 0x800000, 0x800001 ) AM_WRITE(sx_w ) + AM_RANGE( 0x800002, 0x800003 ) AM_WRITE(sd_w ) + AM_RANGE( 0x800004, 0x800005 ) AM_WRITE(sy_w ) + AM_RANGE( 0x800006, 0x800007 ) AM_WRITE(sr_w ) + AM_RANGE( 0x800008, 0x800009 ) AM_WRITE(x_w ) + AM_RANGE( 0x80000a, 0x80000b ) AM_WRITE(yw_w ) + AM_RANGE( 0x80000c, 0x80000d ) AM_WRITE(h_w ) - AM_RANGE( 0x800014, 0x800015 ) AM_WRITE(lastfght_dest_w ) + AM_RANGE( 0x800014, 0x800015 ) AM_WRITE(dest_w ) - AM_RANGE( 0xc00000, 0xc00001 ) AM_READ(lastfght_c00000_r ) - AM_RANGE( 0xc00002, 0xc00003 ) AM_READ(lastfght_c00002_r ) - AM_RANGE( 0xc00004, 0xc00005 ) AM_READ(lastfght_c00004_r ) - AM_RANGE( 0xc00006, 0xc00007 ) AM_READWRITE(lastfght_c00006_r, lastfght_c00006_w ) + AM_RANGE( 0xc00000, 0xc00001 ) AM_READ(c00000_r ) + AM_RANGE( 0xc00002, 0xc00003 ) AM_READ(c00002_r ) + AM_RANGE( 0xc00004, 0xc00005 ) AM_READ(c00004_r ) + AM_RANGE( 0xc00006, 0xc00007 ) AM_READWRITE(c00006_r, c00006_w ) ADDRESS_MAP_END +static ADDRESS_MAP_START( ramdac_map, AS_0, 8, lastfght_state ) + AM_RANGE(0x000, 0x3ff) AM_DEVREADWRITE("ramdac", ramdac_device, ramdac_pal_r, ramdac_rgb666_w) +ADDRESS_MAP_END /*************************************************************************** Input Ports @@ -523,7 +507,6 @@ INPUT_PORTS_END void lastfght_state::machine_start() { - save_item(NAME(m_clr_offset)); save_item(NAME(m_dest)); save_item(NAME(m_hi)); save_item(NAME(m_sx)); @@ -543,7 +526,6 @@ void lastfght_state::machine_start() void lastfght_state::machine_reset() { - m_clr_offset = 0; m_dest = 0; m_hi = 0; m_sx = 0; @@ -574,11 +556,13 @@ static MACHINE_CONFIG_START( lastfght ) /* video hardware */ MCFG_PALETTE_ADD( "palette", 256 ) + MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette") // HMC HM86171 VGA 256 colour RAMDAC + MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_SIZE( 512, 256 ) MCFG_SCREEN_VISIBLE_AREA( 0, 512-1, 0, 256-16-1 ) MCFG_SCREEN_REFRESH_RATE( 60 ) - MCFG_SCREEN_UPDATE_DRIVER(lastfght_state, screen_update_lastfght) + MCFG_SCREEN_UPDATE_DRIVER(lastfght_state, screen_update) MCFG_SCREEN_PALETTE("palette") MACHINE_CONFIG_END diff --git a/src/mame/drivers/subsino.cpp b/src/mame/drivers/subsino.cpp index 54ec51fd806..9077357db71 100644 --- a/src/mame/drivers/subsino.cpp +++ b/src/mame/drivers/subsino.cpp @@ -224,6 +224,7 @@ To Do: #include "sound/okim6295.h" #include "sound/ym2413.h" #include "sound/3812intf.h" +#include "video/ramdac.h" #include "screen.h" #include "speaker.h" @@ -277,8 +278,6 @@ public: uint8_t m_flash_val; uint8_t m_flash_packet; uint8_t m_flash_packet_start; - int m_colordac_offs; - std::unique_ptr m_stbsub_colorram; ticket_dispenser_device *m_hopper; @@ -294,7 +293,6 @@ public: DECLARE_WRITE8_MEMBER(flash_w); DECLARE_READ8_MEMBER(hwcheck_r); DECLARE_WRITE8_MEMBER(subsino_out_c_w); - DECLARE_WRITE8_MEMBER(colordac_w); DECLARE_WRITE8_MEMBER(reel_scrollattr_w); DECLARE_READ8_MEMBER(reel_scrollattr_r); DECLARE_DRIVER_INIT(stbsub); @@ -1074,34 +1072,9 @@ static ADDRESS_MAP_START( tisub_map, AS_PROGRAM, 8, subsino_state ) AM_RANGE( 0x15c00, 0x15dff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_SHARE("reel3_ram") ADDRESS_MAP_END - -WRITE8_MEMBER(subsino_state::colordac_w) -{ - switch ( offset ) - { - case 0: - m_colordac_offs = data * 3; - break; - - case 1: - m_stbsub_colorram[m_colordac_offs] = data; - m_palette->set_pen_color(m_colordac_offs/3, - pal6bit(m_stbsub_colorram[(m_colordac_offs/3)*3+0]), - pal6bit(m_stbsub_colorram[(m_colordac_offs/3)*3+1]), - pal6bit(m_stbsub_colorram[(m_colordac_offs/3)*3+2]) - ); - m_colordac_offs = (m_colordac_offs+1) % (256*3); - break; - - case 2: - // ff? - break; - - case 3: - break; - } -} - +static ADDRESS_MAP_START( ramdac_map, AS_0, 8, subsino_state ) + AM_RANGE(0x000, 0x3ff) AM_DEVREADWRITE("ramdac", ramdac_device, ramdac_pal_r, ramdac_rgb666_w) +ADDRESS_MAP_END // this stuff is banked.. // not 100% sure on the bank bits.. other bits are also set @@ -1174,7 +1147,9 @@ static ADDRESS_MAP_START( stbsub_map, AS_PROGRAM, 8, subsino_state ) AM_RANGE( 0x0d00c, 0x0d00c ) AM_READ_PORT( "INC" ) - AM_RANGE( 0x0d010, 0x0d013 ) AM_WRITE(colordac_w) + AM_RANGE( 0x0d010, 0x0d010 ) AM_DEVWRITE("ramdac", ramdac_device, index_w) + AM_RANGE( 0x0d011, 0x0d011 ) AM_DEVWRITE("ramdac", ramdac_device, pal_w) + AM_RANGE( 0x0d012, 0x0d012 ) AM_DEVWRITE("ramdac", ramdac_device, mask_w) AM_RANGE( 0x0d016, 0x0d017 ) AM_DEVWRITE("ymsnd", ym3812_device, write) @@ -1213,7 +1188,9 @@ static ADDRESS_MAP_START( mtrainnv_map, AS_PROGRAM, 8, subsino_state ) // AM_RANGE( 0x0d00b, 0x0d00b ) AM_WRITE AM_RANGE( 0x0d00c, 0x0d00c ) AM_READ_PORT( "INC" ) - AM_RANGE( 0x0d010, 0x0d013 ) AM_WRITE(colordac_w) + AM_RANGE( 0x0d010, 0x0d010 ) AM_DEVWRITE("ramdac", ramdac_device, index_w) + AM_RANGE( 0x0d011, 0x0d011 ) AM_DEVWRITE("ramdac", ramdac_device, pal_w) + AM_RANGE( 0x0d012, 0x0d012 ) AM_DEVWRITE("ramdac", ramdac_device, mask_w) // AM_RANGE( 0x0d012, 0x0d012 ) AM_WRITE @@ -2968,6 +2945,8 @@ static MACHINE_CONFIG_START( stbsub ) MCFG_PALETTE_ADD("palette", 0x100) //MCFG_PALETTE_INIT_OWNER(subsino_state,subsino_3proms) + MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette") // HMC HM86171 VGA 256 colour RAMDAC + MCFG_VIDEO_START_OVERRIDE(subsino_state,stbsub) /* sound hardware */ @@ -3843,8 +3822,6 @@ DRIVER_INIT_MEMBER(subsino_state,stbsub) rom[0x957] = 0x18; //patch "losing protection" check #endif - m_stbsub_colorram = std::make_unique(256*3); - m_reel1_scroll.allocate(0x40); m_reel2_scroll.allocate(0x40); m_reel3_scroll.allocate(0x40); @@ -3860,8 +3837,6 @@ DRIVER_INIT_MEMBER(subsino_state, stisub) rom[0x0FA0] = 0x28; rom[0x0FA1] = 0x1d; //patch protection check - m_stbsub_colorram = std::make_unique(256*3); - m_reel1_scroll.allocate(0x40); m_reel2_scroll.allocate(0x40); m_reel3_scroll.allocate(0x40); @@ -3881,8 +3856,6 @@ DRIVER_INIT_MEMBER(subsino_state,tesorone) rom[0xa84] = 0x18; //patch "losing protection" check #endif - m_stbsub_colorram = std::make_unique(256*3); - m_reel1_scroll.allocate(0x40); m_reel2_scroll.allocate(0x40); m_reel3_scroll.allocate(0x40); @@ -3902,8 +3875,6 @@ DRIVER_INIT_MEMBER(subsino_state,tesorone230) rom[0xa88] = 0x18; //patch "losing protection" check #endif - m_stbsub_colorram = std::make_unique(256*3); - m_reel1_scroll.allocate(0x40); m_reel2_scroll.allocate(0x40); m_reel3_scroll.allocate(0x40); @@ -3916,8 +3887,6 @@ DRIVER_INIT_MEMBER(subsino_state,tesorone230) DRIVER_INIT_MEMBER(subsino_state,mtrainnv) { - m_stbsub_colorram = std::make_unique(256*3); - m_reel1_scroll.allocate(0x40); m_reel2_scroll.allocate(0x40); m_reel3_scroll.allocate(0x40); diff --git a/src/mame/drivers/subsino2.cpp b/src/mame/drivers/subsino2.cpp index 03bd43f6dab..72710024f91 100644 --- a/src/mame/drivers/subsino2.cpp +++ b/src/mame/drivers/subsino2.cpp @@ -49,6 +49,7 @@ To do: #include "machine/ticket.h" #include "sound/3812intf.h" #include "sound/okim6295.h" +#include "video/ramdac.h" #include "screen.h" #include "speaker.h" @@ -94,7 +95,6 @@ public: m_screen(*this, "screen"), m_palette(*this, "palette") { } - std::unique_ptr m_hm86171_colorram; layer_t m_layers[2]; uint8_t m_ss9601_byte_lo; uint8_t m_ss9601_byte_lo2; @@ -103,7 +103,6 @@ public: uint8_t m_ss9601_scrollctrl; uint8_t m_ss9601_tilesize; uint8_t m_ss9601_disable; - int m_hm86171_offs; uint8_t m_dsw_mask; optional_shared_ptr m_outputs16; optional_shared_ptr m_outputs; @@ -140,7 +139,6 @@ public: DECLARE_READ8_MEMBER(ss9601_scrollram_1_hi_r); DECLARE_READ8_MEMBER(ss9601_scrollram_1_lo_r); DECLARE_WRITE8_MEMBER(ss9601_disable_w); - DECLARE_WRITE8_MEMBER(hm86171_colorram_w); DECLARE_WRITE8_MEMBER(dsw_mask_w); DECLARE_READ8_MEMBER(dsw_r); DECLARE_READ8_MEMBER(vblank_bit2_r); @@ -605,8 +603,6 @@ WRITE8_MEMBER(subsino2_state::ss9601_disable_w) VIDEO_START_MEMBER(subsino2_state,subsino2) { - m_hm86171_colorram = std::make_unique(256*3); - // SS9601 Regs: m_ss9601_tilesize = TILE_8x8; @@ -785,39 +781,6 @@ uint32_t subsino2_state::screen_update_subsino2(screen_device &screen, bitmap_in return 0; } -/*************************************************************************** - Palette: HMC HM86171 VGA 256 colour RAMDAC -***************************************************************************/ - - -WRITE8_MEMBER(subsino2_state::hm86171_colorram_w) -{ - switch (offset) - { - case 0: - m_hm86171_offs = data * 3; - break; - - case 1: - m_hm86171_colorram[m_hm86171_offs] = data; - m_palette->set_pen_color(m_hm86171_offs/3, - pal6bit(m_hm86171_colorram[(m_hm86171_offs/3)*3+0]), - pal6bit(m_hm86171_colorram[(m_hm86171_offs/3)*3+1]), - pal6bit(m_hm86171_colorram[(m_hm86171_offs/3)*3+2]) - ); - m_hm86171_offs = (m_hm86171_offs+1) % (256*3); - break; - - case 2: - // ff? - break; - - case 3: - break; - } -} - - /*************************************************************************** Input / Output ***************************************************************************/ @@ -967,7 +930,9 @@ static ADDRESS_MAP_START( bishjan_map, AS_PROGRAM, 16, subsino2_state ) AM_RANGE( 0x600000, 0x600001 ) AM_READNOP AM_WRITE(bishjan_sound_w ) AM_RANGE( 0x600040, 0x600041 ) AM_WRITE8(ss9601_scrollctrl_w, 0xff00 ) - AM_RANGE( 0x600060, 0x600063 ) AM_WRITE8(hm86171_colorram_w, 0xffff ) + AM_RANGE( 0x600060, 0x600061 ) AM_DEVWRITE8("ramdac", ramdac_device, index_w, 0xff00) + AM_RANGE( 0x600060, 0x600061 ) AM_DEVWRITE8("ramdac", ramdac_device, pal_w, 0x00ff) + AM_RANGE( 0x600062, 0x600063 ) AM_DEVWRITE8("ramdac", ramdac_device, mask_w, 0xff00) AM_RANGE( 0x600080, 0x600081 ) AM_WRITE8(ss9601_tilesize_w, 0xff00 ) AM_RANGE( 0x6000a0, 0x6000a1 ) AM_WRITE8(ss9601_byte_lo_w, 0xff00 ) @@ -981,6 +946,10 @@ static ADDRESS_MAP_START( bishjan_map, AS_PROGRAM, 16, subsino2_state ) AM_RANGE( 0xc00008, 0xc00009 ) AM_READ_PORT("RESET") AM_WRITE(bishjan_outputs_w ) AM_SHARE("outputs16") ADDRESS_MAP_END +static ADDRESS_MAP_START( ramdac_map, AS_0, 8, subsino2_state ) + AM_RANGE(0x000, 0x3ff) AM_DEVREADWRITE("ramdac", ramdac_device, ramdac_pal_r, ramdac_rgb666_w) +ADDRESS_MAP_END + /*************************************************************************** New 2001 ***************************************************************************/ @@ -1054,7 +1023,9 @@ static ADDRESS_MAP_START( new2001_base_map, AS_PROGRAM, 16, subsino2_state ) AM_RANGE( 0x600000, 0x600001 ) AM_READNOP AM_WRITE(bishjan_sound_w ) AM_RANGE( 0x600020, 0x600021 ) AM_WRITE8(ss9601_byte_lo2_w, 0xff00 ) AM_RANGE( 0x600040, 0x600041 ) AM_WRITE8(ss9601_scrollctrl_w, 0xff00 ) - AM_RANGE( 0x600060, 0x600063 ) AM_WRITE8(hm86171_colorram_w, 0xffff ) + AM_RANGE( 0x600060, 0x600061 ) AM_DEVWRITE8("ramdac", ramdac_device, index_w, 0xff00) + AM_RANGE( 0x600060, 0x600061 ) AM_DEVWRITE8("ramdac", ramdac_device, pal_w, 0x00ff) + AM_RANGE( 0x600062, 0x600063 ) AM_DEVWRITE8("ramdac", ramdac_device, mask_w, 0xff00) AM_RANGE( 0x600080, 0x600081 ) AM_WRITE8(ss9601_tilesize_w, 0xff00 ) AM_RANGE( 0x6000a0, 0x6000a1 ) AM_WRITE8(ss9601_byte_lo_w, 0xff00 ) @@ -1261,7 +1232,9 @@ static ADDRESS_MAP_START( mtrain_map, AS_PROGRAM, 8, subsino2_state ) AM_RANGE( 0x09158, 0x0915e ) AM_READ(mtrain_prot_r ) - AM_RANGE( 0x09160, 0x09163 ) AM_WRITE(hm86171_colorram_w ) + AM_RANGE( 0x09160, 0x09160 ) AM_DEVWRITE("ramdac", ramdac_device, index_w) + AM_RANGE( 0x09161, 0x09161 ) AM_DEVWRITE("ramdac", ramdac_device, pal_w) + AM_RANGE( 0x09162, 0x09162 ) AM_DEVWRITE("ramdac", ramdac_device, mask_w) AM_RANGE( 0x09164, 0x09164 ) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_RANGE( 0x09168, 0x09168 ) AM_WRITE(mtrain_tilesize_w ) @@ -1334,7 +1307,9 @@ static ADDRESS_MAP_START( saklove_io, AS_IO, 8, subsino2_state ) AM_RANGE(0x0020, 0x0020) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_RANGE(0x0040, 0x0041) AM_DEVWRITE("ymsnd", ym3812_device, write) - AM_RANGE(0x0060, 0x0063) AM_WRITE(hm86171_colorram_w ) + AM_RANGE(0x0060, 0x0060) AM_DEVWRITE("ramdac", ramdac_device, index_w) + AM_RANGE(0x0061, 0x0061) AM_DEVWRITE("ramdac", ramdac_device, pal_w) + AM_RANGE(0x0062, 0x0062) AM_DEVWRITE("ramdac", ramdac_device, mask_w) AM_RANGE(0x0080, 0x0080) AM_WRITE(ss9601_tilesize_w ) AM_RANGE(0x00a0, 0x00a0) AM_WRITE(ss9601_byte_lo_w ) @@ -1432,7 +1407,10 @@ static ADDRESS_MAP_START( xplan_io, AS_IO, 8, subsino2_state ) AM_RANGE(0x0040, 0x0040) AM_WRITE(ss9601_scrollctrl_w ) - AM_RANGE(0x0060, 0x0063) AM_WRITE(hm86171_colorram_w ) + AM_RANGE(0x0060, 0x0060) AM_DEVWRITE("ramdac", ramdac_device, index_w) + AM_RANGE(0x0061, 0x0061) AM_DEVWRITE("ramdac", ramdac_device, pal_w) + AM_RANGE(0x0062, 0x0062) AM_DEVWRITE("ramdac", ramdac_device, mask_w) + AM_RANGE(0x0080, 0x0080) AM_WRITE(ss9601_tilesize_w ) AM_RANGE(0x00a0, 0x00a0) AM_WRITE(ss9601_byte_lo_w ) @@ -2371,6 +2349,8 @@ static MACHINE_CONFIG_START( bishjan ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ss9601 ) MCFG_PALETTE_ADD( "palette", 256 ) + MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette") // HMC HM86171 VGA 256 colour RAMDAC + MCFG_VIDEO_START_OVERRIDE(subsino2_state, subsino2 ) // sound hardware @@ -2418,6 +2398,8 @@ static MACHINE_CONFIG_START( mtrain ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ss9601 ) MCFG_PALETTE_ADD( "palette", 256 ) + MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette") // HMC HM86171 VGA 256 colour RAMDAC + MCFG_VIDEO_START_OVERRIDE(subsino2_state, subsino2 ) // sound hardware @@ -2450,6 +2432,8 @@ static MACHINE_CONFIG_START( saklove ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ss9601 ) MCFG_PALETTE_ADD( "palette", 256 ) + MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette") // HMC HM86171 VGA 256 colour RAMDAC + MCFG_VIDEO_START_OVERRIDE(subsino2_state, subsino2 ) // sound hardware @@ -2486,6 +2470,8 @@ static MACHINE_CONFIG_START( xplan ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", ss9601 ) MCFG_PALETTE_ADD( "palette", 256 ) + MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette") // HMC HM86171 VGA 256 colour RAMDAC + MCFG_VIDEO_START_OVERRIDE(subsino2_state, subsino2 ) // sound hardware