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() inline void h63484_device::fifo_w_clear()
{ {
int i; int i;
@ -1974,7 +1954,7 @@ WRITE16_MEMBER( h63484_device::data_w )
void h63484_device::device_start() 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++) for (int b=0; b<ppw; b++)
{ {
int x = sx + g * ppw + b; int x = sx + g * ppw + b;
if (cliprect.contains(x, y)) if (!m_display_cb.isnull())
{ m_display_cb(bitmap, cliprect, y, x, data & mask);
if (m_display_cb) else if (cliprect.contains(x, y))
m_display_cb(this, bitmap, y, x, data & mask);
else
bitmap.pix16(y, x) = data & mask; bitmap.pix16(y, x) = data & mask;
}
data >>= bpp; data >>= bpp;
} }

View File

@ -14,39 +14,38 @@
#include "emu.h" #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 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_ADD(_tag, H63484, _clock) \
MCFG_DEVICE_CONFIG(_config) \
MCFG_DEVICE_ADDRESS_MAP(AS_0, _map) MCFG_DEVICE_ADDRESS_MAP(AS_0, _map)
#define H63484_INTERFACE(name) \ #define MCFG_H63484_ADDRESS_MAP(_map) \
const h63484_interface (name) = 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 MCFG_H63484_DISPLAY_CALLBACK_OWNER(_class, _method) \
#define H63484_DISPLAY_PIXELS(name) void name(device_t *device, bitmap_ind16 &bitmap, int y, int x, UINT16 data) 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 // ======================> h63484_device
class h63484_device : public device_t, class h63484_device : public device_t,
public device_memory_interface, public device_memory_interface,
public device_video_interface, public device_video_interface
public h63484_interface
{ {
public: public:
// construction/destruction // construction/destruction
h63484_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); 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( address_w );
DECLARE_WRITE16_MEMBER( data_w ); DECLARE_WRITE16_MEMBER( data_w );
@ -62,7 +61,6 @@ protected:
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
//virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); //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 UINT16 readword(offs_t address);
inline void writeword(offs_t address, UINT16 data); inline void writeword(offs_t address, UINT16 data);
@ -105,6 +103,7 @@ private:
int translate_command(UINT16 data); 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); 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_ar;
UINT8 m_vreg[0x100]; UINT8 m_vreg[0x100];

View File

@ -196,13 +196,15 @@ public:
DECLARE_PALETTE_INIT(adp); DECLARE_PALETTE_INIT(adp);
DECLARE_WRITE_LINE_MEMBER(duart_irq_handler); DECLARE_WRITE_LINE_MEMBER(duart_irq_handler);
UINT32 screen_update_adp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 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); //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) 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 AM_RANGE(0x80000, 0xfffff) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
static H63484_INTERFACE( adp_h63484_intf )
{
acrtc_display_pixels
};
static MACHINE_CONFIG_START( quickjac, adp_state ) static MACHINE_CONFIG_START( quickjac, adp_state )
MCFG_CPU_ADD("maincpu", M68000, 8000000) 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_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_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("aysnd", AY8910, 3686400/2) MCFG_SOUND_ADD("aysnd", AY8910, 3686400/2)
@ -702,8 +700,8 @@ static MACHINE_CONFIG_DERIVED( backgamn, skattv )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( fashiong, skattv ) static MACHINE_CONFIG_DERIVED( fashiong, skattv )
MCFG_DEVICE_REMOVE("h63484") MCFG_DEVICE_MODIFY("h63484")
MCFG_H63484_ADD("h63484", 0, adp_h63484_intf, fashiong_h63484_map) MCFG_H63484_ADDRESS_MAP(fashiong_h63484_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( funland, quickjac ) static MACHINE_CONFIG_DERIVED( funland, quickjac )
@ -713,8 +711,8 @@ static MACHINE_CONFIG_DERIVED( funland, quickjac )
MCFG_DEVICE_REMOVE("palette") MCFG_DEVICE_REMOVE("palette")
MCFG_PALETTE_ADD_INIT_BLACK("palette", 0x100) MCFG_PALETTE_ADD_INIT_BLACK("palette", 0x100)
MCFG_DEVICE_REMOVE("h63484") MCFG_DEVICE_MODIFY("h63484")
MCFG_H63484_ADD("h63484", 0, adp_h63484_intf, fstation_h63484_map) MCFG_H63484_ADDRESS_MAP(fstation_h63484_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( fstation, funland ) static MACHINE_CONFIG_DERIVED( fstation, funland )