converted h63484 to use delegates. (nw)

This commit is contained in:
Sandro Ronco 2014-04-01 19:37:34 +00:00
parent 458fa22d75
commit 08f871c71c
3 changed files with 28 additions and 54 deletions

View File

@ -382,26 +382,6 @@ inline void h63484_device::writeword(offs_t address, UINT16 data)
}
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void h63484_device::device_config_complete()
{
// inherit a copy of the static data
const h63484_interface *intf = reinterpret_cast<const h63484_interface *>(static_config());
if (intf != NULL)
*static_cast<h63484_interface *>(this) = *intf;
// or initialize to defaults if none provided
else
{
// ...
}
}
inline void h63484_device::fifo_w_clear()
{
int i;
@ -1974,7 +1954,7 @@ WRITE16_MEMBER( h63484_device::data_w )
void h63484_device::device_start()
{
//h63484->space = device->memory().space(AS_0);
m_display_cb.bind_relative_to(*owner());
}
//-------------------------------------------------
@ -2062,13 +2042,10 @@ void h63484_device::draw_graphics_line(bitmap_ind16 &bitmap, const rectangle &cl
for (int b=0; b<ppw; b++)
{
int x = sx + g * ppw + b;
if (cliprect.contains(x, y))
{
if (m_display_cb)
m_display_cb(this, bitmap, y, x, data & mask);
else
bitmap.pix16(y, x) = data & mask;
}
if (!m_display_cb.isnull())
m_display_cb(bitmap, cliprect, y, x, data & mask);
else if (cliprect.contains(x, y))
bitmap.pix16(y, x) = data & mask;
data >>= bpp;
}

View File

@ -14,39 +14,38 @@
#include "emu.h"
typedef device_delegate<void (bitmap_ind16 &bitmap, const rectangle &cliprect, int y, int x, UINT16 data)> h63484_display_delegate;
/***************************************************************************
DEVICE CONFIGURATION MACROS
***************************************************************************/
#define MCFG_H63484_ADD(_tag, _clock, _config, _map) \
#define MCFG_H63484_ADD(_tag, _clock, _map) \
MCFG_DEVICE_ADD(_tag, H63484, _clock) \
MCFG_DEVICE_CONFIG(_config) \
MCFG_DEVICE_ADDRESS_MAP(AS_0, _map)
#define H63484_INTERFACE(name) \
const h63484_interface (name) =
#define MCFG_H63484_ADDRESS_MAP(_map) \
MCFG_DEVICE_ADDRESS_MAP(AS_0, _map)
typedef void (*h63484_display_pixels_func)(device_t *device, bitmap_ind16 &bitmap, int y, int x, UINT16 data);
#define H63484_DISPLAY_PIXELS(name) void name(device_t *device, bitmap_ind16 &bitmap, int y, int x, UINT16 data)
#define MCFG_H63484_DISPLAY_CALLBACK_OWNER(_class, _method) \
h63484_device::static_set_display_callback(*device, h63484_display_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
// ======================> h63484_interface
#define H63484_DISPLAY_PIXELS_MEMBER(_name) void _name(bitmap_ind16 &bitmap, const rectangle &cliprect, int y, int x, UINT16 data)
struct h63484_interface
{
h63484_display_pixels_func m_display_cb;
};
// ======================> h63484_device
class h63484_device : public device_t,
public device_memory_interface,
public device_video_interface,
public h63484_interface
public device_video_interface
{
public:
// construction/destruction
h63484_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
static void static_set_display_callback(device_t &device, h63484_display_delegate callback) { downcast<h63484_device &>(device).m_display_cb = callback; }
DECLARE_WRITE16_MEMBER( address_w );
DECLARE_WRITE16_MEMBER( data_w );
@ -62,7 +61,6 @@ protected:
virtual void device_start();
virtual void device_reset();
//virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
virtual void device_config_complete();
inline UINT16 readword(offs_t address);
inline void writeword(offs_t address, UINT16 data);
@ -105,6 +103,7 @@ private:
int translate_command(UINT16 data);
void draw_graphics_line(bitmap_ind16 &bitmap, const rectangle &cliprect, int vs, int y, int layer_n, bool active, bool ins_window);
h63484_display_delegate m_display_cb;
UINT8 m_ar;
UINT8 m_vreg[0x100];

View File

@ -196,13 +196,15 @@ public:
DECLARE_PALETTE_INIT(adp);
DECLARE_WRITE_LINE_MEMBER(duart_irq_handler);
UINT32 screen_update_adp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
H63484_DISPLAY_PIXELS_MEMBER( acrtc_display_pixels );
//INTERRUPT_GEN_MEMBER(adp_int);
};
static H63484_DISPLAY_PIXELS( acrtc_display_pixels )
H63484_DISPLAY_PIXELS_MEMBER( adp_state::acrtc_display_pixels )
{
bitmap.pix16(y, x) = data & 0xf;
if (cliprect.contains(x, y))
bitmap.pix16(y, x) = data;
}
UINT32 adp_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@ -645,11 +647,6 @@ static ADDRESS_MAP_START( fstation_h63484_map, AS_0, 16, adp_state )
AM_RANGE(0x80000, 0xfffff) AM_RAM
ADDRESS_MAP_END
static H63484_INTERFACE( adp_h63484_intf )
{
acrtc_display_pixels
};
static MACHINE_CONFIG_START( quickjac, adp_state )
MCFG_CPU_ADD("maincpu", M68000, 8000000)
@ -678,7 +675,8 @@ static MACHINE_CONFIG_START( quickjac, adp_state )
MCFG_PALETTE_INIT_OWNER(adp_state,adp)
MCFG_H63484_ADD("h63484", 0, adp_h63484_intf, adp_h63484_map)
MCFG_H63484_ADD("h63484", 0, adp_h63484_map)
MCFG_H63484_DISPLAY_CALLBACK_OWNER(adp_state, acrtc_display_pixels)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("aysnd", AY8910, 3686400/2)
@ -702,8 +700,8 @@ static MACHINE_CONFIG_DERIVED( backgamn, skattv )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( fashiong, skattv )
MCFG_DEVICE_REMOVE("h63484")
MCFG_H63484_ADD("h63484", 0, adp_h63484_intf, fashiong_h63484_map)
MCFG_DEVICE_MODIFY("h63484")
MCFG_H63484_ADDRESS_MAP(fashiong_h63484_map)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( funland, quickjac )
@ -713,8 +711,8 @@ static MACHINE_CONFIG_DERIVED( funland, quickjac )
MCFG_DEVICE_REMOVE("palette")
MCFG_PALETTE_ADD_INIT_BLACK("palette", 0x100)
MCFG_DEVICE_REMOVE("h63484")
MCFG_H63484_ADD("h63484", 0, adp_h63484_intf, fstation_h63484_map)
MCFG_DEVICE_MODIFY("h63484")
MCFG_H63484_ADDRESS_MAP(fstation_h63484_map)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( fstation, funland )