lastfght.cpp, subsino.cpp, subsino2.cpp: used ramdac_device instead of custom implementations (nw)

This commit is contained in:
Ivan Vangelista 2017-05-26 18:58:57 +02:00
parent aa10258d37
commit 3861fbc65e
3 changed files with 124 additions and 185 deletions

View File

@ -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<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<palette_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

View File

@ -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<uint8_t[]> 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<uint8_t[]>(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<uint8_t[]>(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<uint8_t[]>(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<uint8_t[]>(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<uint8_t[]>(256*3);
m_reel1_scroll.allocate(0x40);
m_reel2_scroll.allocate(0x40);
m_reel3_scroll.allocate(0x40);

View File

@ -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<uint8_t[]> 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<uint16_t> m_outputs16;
optional_shared_ptr<uint8_t> 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<uint8_t[]>(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