farewell devcb (nw)

This commit is contained in:
Miodrag Milanovic 2014-05-13 17:05:43 +00:00
parent f5d20c6850
commit 55bf85dc99
5 changed files with 0 additions and 2084 deletions

2
.gitattributes vendored
View File

@ -2166,8 +2166,6 @@ src/emu/debug/textbuf.c svneol=native#text/plain
src/emu/debug/textbuf.h svneol=native#text/plain src/emu/debug/textbuf.h svneol=native#text/plain
src/emu/debugger.c svneol=native#text/plain src/emu/debugger.c svneol=native#text/plain
src/emu/debugger.h svneol=native#text/plain src/emu/debugger.h svneol=native#text/plain
src/emu/devcb.c svneol=native#text/plain
src/emu/devcb.h svneol=native#text/plain
src/emu/devcb2.c svneol=native#text/plain src/emu/devcb2.c svneol=native#text/plain
src/emu/devcb2.h svneol=native#text/plain src/emu/devcb2.h svneol=native#text/plain
src/emu/devcpu.c svneol=native#text/plain src/emu/devcpu.c svneol=native#text/plain

File diff suppressed because it is too large Load Diff

View File

@ -1,770 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
/***************************************************************************
devcb.h
Device callback interface helpers.
****************************************************************************
These functions are used to adapt multiple read/write handler types
to be used with device I/O. In general, a device is expected to
declare its desired callback type, and these functions allow other
callback types to be adapted appropriately.
The desired callback types currently supported include:
read_line_device_func: (device)
write_line_device_func: (device, data)
read8_device_func: (device, offset)
write8_device_func: (device, offset, data)
read16_device_func: (device, offset)
write16_device_func: (device, offset, data)
read32_device_func: (device, offset)
write32_device_func: (device, offset, data)
read64_device_func: (device, offset)
write64_device_func: (device, offset, data)
The adapted callback types supported are:
input port (port)
cpu input line (cpu input line)
read_line_device_func: (device)
write_line_device_func: (device, data)
read8_device_func: (device, offset)
write8_device_func: (device, offset, data)
read16_device_func: (device, offset)
write16_device_func: (device, offset, data)
read32_device_func: (device, offset)
write32_device_func: (device, offset, data)
read64_device_func: (device, offset)
write64_device_func: (device, offset, data)
***************************************************************************/
#pragma once
#ifndef __EMU_H__
#error Dont include this file directly; include emu.h instead.
#endif
#ifndef __DEVCB_H__
#define __DEVCB_H__
//**************************************************************************
// CONSTANTS
//**************************************************************************
// callback types
enum
{
DEVCB_TYPE_NULL = 0, // NULL callback
DEVCB_TYPE_IOPORT, // I/O port read/write
DEVCB_TYPE_DEVICE, // device read/write
DEVCB_TYPE_INPUT_LINE, // device input line write
DEVCB_TYPE_CONSTANT, // constant value read
DEVCB_TYPE_UNMAP // unmapped line
};
//**************************************************************************
// MACROS
//**************************************************************************
// static template for a read_line stub function that calls through a given READ_LINE_MEMBER
template<class _Class, int (_Class::*_Function)()>
int devcb_line_stub(device_t *device)
{
_Class *target = downcast<_Class *>(device);
return (target->*_Function)();
}
// static template for a read8 stub function that calls through a given READ8_MEMBER
template<class _Class, UINT8 (_Class::*_Function)(address_space &, offs_t, UINT8)>
UINT8 devcb_stub(device_t *device, address_space &space, offs_t offset, UINT8 mem_mask)
{
_Class *target = downcast<_Class *>(device);
return (target->*_Function)(space, offset, mem_mask);
}
// static template for a read16 stub function that calls through a given READ16_MEMBER
template<class _Class, UINT16 (_Class::*_Function)(address_space &, offs_t, UINT16)>
UINT16 devcb_stub16(device_t *device, address_space &space, offs_t offset, UINT16 mem_mask)
{
_Class *target = downcast<_Class *>(device);
return (target->*_Function)(space, offset, mem_mask);
}
// static template for a read32 stub function that calls through a given READ32_MEMBER
template<class _Class, UINT32 (_Class::*_Function)(address_space &, offs_t, UINT32)>
UINT32 devcb_stub32(device_t *device, address_space &space, offs_t offset, UINT32 mem_mask)
{
_Class *target = downcast<_Class *>(device);
return (target->*_Function)(space, offset, mem_mask);
}
// static template for a read64 stub function that calls through a given READ64_MEMBER
template<class _Class, UINT64 (_Class::*_Function)(address_space &, offs_t, UINT64)>
UINT64 devcb_stub64(device_t *device, address_space &space, offs_t offset, UINT64 mem_mask)
{
_Class *target = downcast<_Class *>(device);
return (target->*_Function)(space, offset, mem_mask);
}
// static template for a write_line stub function that calls through a given WRITE_LINE_MEMBER
template<class _Class, void (_Class::*_Function)(int state)>
void devcb_line_stub(device_t *device, int state)
{
_Class *target = downcast<_Class *>(device);
(target->*_Function)(state);
}
// static template for a write8 stub function that calls through a given WRITE8_MEMBER
template<class _Class, void (_Class::*_Function)(address_space &, offs_t, UINT8, UINT8)>
void devcb_stub(device_t *device, address_space &space, offs_t offset, UINT8 data, UINT8 mem_mask)
{
_Class *target = downcast<_Class *>(device);
(target->*_Function)(space, offset, data, mem_mask);
}
// static template for a write16 stub function that calls through a given WRITE16_MEMBER
template<class _Class, void (_Class::*_Function)(address_space &, offs_t, UINT16, UINT16)>
void devcb_stub16(device_t *device, address_space &space, offs_t offset, UINT16 data, UINT16 mem_mask)
{
_Class *target = downcast<_Class *>(device);
(target->*_Function)(space, offset, data, mem_mask);
}
// static template for a write32 stub function that calls through a given WRITE32_MEMBER
template<class _Class, void (_Class::*_Function)(address_space &, offs_t, UINT32, UINT32)>
void devcb_stub32(device_t *device, address_space &space, offs_t offset, UINT32 data, UINT32 mem_mask)
{
_Class *target = downcast<_Class *>(device);
(target->*_Function)(space, offset, data, mem_mask);
}
// static template for a write64 stub function that calls through a given WRITE64_MEMBER
template<class _Class, void (_Class::*_Function)(address_space &, offs_t, UINT64, UINT64)>
void devcb_stub64(device_t *device, address_space &space, offs_t offset, UINT64 data, UINT64 mem_mask)
{
_Class *target = downcast<_Class *>(device);
(target->*_Function)(space, offset, data, mem_mask);
}
#define DEVCB_NULL { DEVCB_TYPE_NULL }
// line or read/write handlers for the driver device
#define DEVCB_DRIVER_LINE_MEMBER(cls,memb) { DEVCB_TYPE_DEVICE, 0, ":", #cls "::" #memb, &devcb_line_stub<cls, &cls::memb>, NULL }
#define DEVCB_DRIVER_MEMBER(cls,memb) { DEVCB_TYPE_DEVICE, 0, ":", #cls "::" #memb, NULL, &devcb_stub<cls, &cls::memb> }
#define DEVCB_DRIVER_MEMBER16(cls,memb) { DEVCB_TYPE_DEVICE, 0, ":", #cls "::" #memb, NULL, &devcb_stub16<cls, &cls::memb> }
#define DEVCB_DRIVER_MEMBER32(cls,memb) { DEVCB_TYPE_DEVICE, 0, ":", #cls "::" #memb, NULL, &devcb_stub32<cls, &cls::memb> }
//#define DEVCB_DRIVER_MEMBER64(cls,memb) { DEVCB_TYPE_DEVICE, 0, ":", #cls "::" #memb, NULL, &devcb_stub64<cls, &cls::memb> }
// line or read/write handlers for another device
#define DEVCB_DEVICE_LINE_MEMBER(tag,cls,memb) { DEVCB_TYPE_DEVICE, 0, tag, #cls "::" #memb, &devcb_line_stub<cls, &cls::memb>, NULL }
#define DEVCB_DEVICE_MEMBER(tag,cls,memb) { DEVCB_TYPE_DEVICE, 0, tag, #cls "::" #memb, NULL, &devcb_stub<cls, &cls::memb> }
#define DEVCB_DEVICE_MEMBER16(tag,cls,memb) { DEVCB_TYPE_DEVICE, 0, tag, #cls "::" #memb, NULL, &devcb_stub16<cls, &cls::memb> }
#define DEVCB_DEVICE_MEMBER32(tag,cls,memb) { DEVCB_TYPE_DEVICE, 0, tag, #cls "::" #memb, NULL, &devcb_stub32<cls, &cls::memb> }
//#define DEVCB_DEVICE_MEMBER64(tag,cls,memb) { DEVCB_TYPE_DEVICE, 0, tag, #cls "::" #memb, NULL, &devcb_stub64<cls, &cls::memb> }
// constant values
#define DEVCB_CONSTANT(value) { DEVCB_TYPE_CONSTANT, value, NULL, NULL, NULL }
#define DEVCB_LINE_GND DEVCB_CONSTANT(0)
#define DEVCB_LINE_VCC DEVCB_CONSTANT(1)
#define DEVCB_UNMAPPED { DEVCB_TYPE_UNMAP, 0, NULL, NULL, NULL }
// read handlers for an I/O port by tag
#define DEVCB_INPUT_PORT(tag) { DEVCB_TYPE_IOPORT, 0, (tag), NULL, NULL, NULL }
// write handlers for a CPU input line
#define DEVCB_CPU_INPUT_LINE(tag,line) { DEVCB_TYPE_INPUT_LINE, (line), (tag), NULL, NULL, NULL }
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// read/write types for I/O lines (similar to read/write handlers but no offset)
typedef int (*read_line_device_func)(device_t *device);
typedef void (*write_line_device_func)(device_t *device, int state);
// legacy device read/write handlers
typedef UINT8 (*read8_device_func) (ATTR_UNUSED device_t *device, ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 mem_mask);
typedef void (*write8_device_func) (ATTR_UNUSED device_t *device, ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT8 data, ATTR_UNUSED UINT8 mem_mask);
typedef UINT16 (*read16_device_func) (ATTR_UNUSED device_t *device, ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 mem_mask);
typedef void (*write16_device_func)(ATTR_UNUSED device_t *device, ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 data, ATTR_UNUSED UINT16 mem_mask);
typedef UINT32 (*read32_device_func) (ATTR_UNUSED device_t *device, ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT32 mem_mask);
typedef void (*write32_device_func)(ATTR_UNUSED device_t *device, ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT32 data, ATTR_UNUSED UINT32 mem_mask);
typedef UINT64 (*read64_device_func) (ATTR_UNUSED device_t *device, ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT64 mem_mask);
typedef void (*write64_device_func)(ATTR_UNUSED device_t *device, ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT64 data, ATTR_UNUSED UINT64 mem_mask);
// ======================> devcb_resolved_objects
// resolving a devcb may produce one of the following object types
union devcb_resolved_objects
{
ioport_port * port;
address_space * space;
device_t * device;
device_execute_interface * execute;
UINT32 constant;
};
// ======================> devcb_resolved_helpers
// resolving a devcb may produce one of the following helper functions/additional info
union devcb_resolved_read_helpers
{
UINT8 * null_indicator;
read_line_device_func read_line;
read8_device_func read8_device;
read16_device_func read16_device;
read32_device_func read32_device;
read64_device_func read64_device;
};
union devcb_resolved_write_helpers
{
UINT8 * null_indicator;
write_line_device_func write_line;
write8_device_func write8_device;
write16_device_func write16_device;
write32_device_func write32_device;
write64_device_func write64_device;
int input_line;
};
// ======================> devcb_read_line
// static structure used for device configuration when the desired callback type is a read_line_device_func
struct devcb_read_line
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
read_line_device_func readline; // read line function
read8_device_func readdevice; // read device function
};
// ======================> devcb_resolved_read_line
// base delegate type for a read_line
typedef delegate<int ()> devcb_read_line_delegate;
// class which wraps resolving a devcb_read_line into a delegate
class devcb_resolved_read_line : public devcb_read_line_delegate
{
DISABLE_COPYING(devcb_resolved_read_line);
public:
// construction/destruction
devcb_resolved_read_line();
devcb_resolved_read_line(const devcb_read_line &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_read_line &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
private:
// internal helpers
int from_port();
int from_read8();
int from_constant();
int from_unmap();
// internal state
devcb_resolved_objects m_object;
devcb_resolved_read_helpers m_helper;
static UINT8 s_null;
};
// ======================> devcb_write_line
// static structure used for device configuration when the desired callback type is a write_line_device_func
struct devcb_write_line
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
write_line_device_func writeline; // write line function
write8_device_func writedevice; // write device function
};
// ======================> devcb_resolved_write_line
// base delegate type for a write_line
typedef delegate<void (int)> devcb_write_line_delegate;
// class which wraps resolving a devcb_write_line into a delegate
class devcb_resolved_write_line : public devcb_write_line_delegate
{
DISABLE_COPYING(devcb_resolved_write_line);
public:
// construction/destruction
devcb_resolved_write_line();
devcb_resolved_write_line(const devcb_write_line &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_write_line &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
private:
// internal helpers
void to_null(int state);
void to_port(int state);
void to_write8(int state);
void to_input(int state);
void to_unmap(int state);
// internal state
devcb_resolved_objects m_object;
devcb_resolved_write_helpers m_helper;
static UINT8 s_null;
};
// ======================> devcb_read8
// static structure used for device configuration when the desired callback type is a read8_device_func
struct devcb_read8
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
read_line_device_func readline; // read line function
read8_device_func readdevice; // read device function
};
// ======================> devcb_resolved_read8
// base delegate type for a read8
typedef delegate<UINT8 (offs_t, UINT8)> devcb_read8_delegate;
// class which wraps resolving a devcb_read8 into a delegate
class devcb_resolved_read8 : public devcb_read8_delegate
{
DISABLE_COPYING(devcb_resolved_read8);
public:
// construction/destruction
devcb_resolved_read8();
devcb_resolved_read8(const devcb_read8 &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_read8 &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
// provide default for mem_mask
UINT8 operator()(offs_t offset, UINT8 mem_mask = 0xff) const { return devcb_read8_delegate::operator()(offset, mem_mask); }
private:
// internal helpers
UINT8 from_port(offs_t offset, UINT8 mem_mask);
UINT8 from_read8device(offs_t offset, UINT8 mem_mask);
UINT8 from_readline(offs_t offset, UINT8 mem_mask);
UINT8 from_constant(offs_t offset, UINT8 mem_mask);
UINT8 from_unmap(offs_t offset, UINT8 mem_mask);
// internal state
devcb_resolved_objects m_object;
devcb_resolved_read_helpers m_helper;
static UINT8 s_null;
};
// ======================> devcb_write8
// static structure used for device configuration when the desired callback type is a write8_device_func
struct devcb_write8
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
write_line_device_func writeline; // write line function
write8_device_func writedevice; // write device function
};
// ======================> devcb_resolved_write8
// base delegate type for a write8
typedef delegate<void (offs_t, UINT8, UINT8)> devcb_write8_delegate;
// class which wraps resolving a devcb_write8 into a delegate
class devcb_resolved_write8 : public devcb_write8_delegate
{
DISABLE_COPYING(devcb_resolved_write8);
public:
// construction/destruction
devcb_resolved_write8();
devcb_resolved_write8(const devcb_write8 &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_write8 &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
// provide default for mem_mask
void operator()(offs_t offset, UINT8 data, UINT8 mem_mask = 0xff) const { devcb_write8_delegate::operator()(offset, data, mem_mask); }
private:
// internal helpers
void to_null(offs_t offset, UINT8 data, UINT8 mem_mask);
void to_port(offs_t offset, UINT8 data, UINT8 mem_mask);
void to_write8device(offs_t offset, UINT8 data, UINT8 mem_mask);
void to_writeline(offs_t offset, UINT8 data, UINT8 mem_mask);
void to_input(offs_t offset, UINT8 data, UINT8 mem_mask);
void to_unmap(offs_t offset, UINT8 data, UINT8 mem_mask);
// internal state
devcb_resolved_objects m_object;
devcb_resolved_write_helpers m_helper;
static UINT8 s_null;
};
// ======================> devcb_read16
// static structure used for device configuration when the desired callback type is a read16_device_func
struct devcb_read16
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
read_line_device_func readline; // read line function
read16_device_func readdevice; // read device function
};
// ======================> devcb_resolved_read16
// base delegate type for a write16
typedef delegate<UINT16 (offs_t, UINT16)> devcb_read16_delegate;
// class which wraps resolving a devcb_read16 into a delegate
class devcb_resolved_read16 : public devcb_read16_delegate
{
DISABLE_COPYING(devcb_resolved_read16);
public:
// construction/destruction
devcb_resolved_read16();
devcb_resolved_read16(const devcb_read16 &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_read16 &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
// provide default for mem_mask
UINT16 operator()(offs_t offset, UINT16 mem_mask = 0xffff) const { return devcb_read16_delegate::operator()(offset, mem_mask); }
private:
// internal helpers
UINT16 from_port(offs_t offset, UINT16 mask);
UINT16 from_read16(offs_t offset, UINT16 mask);
UINT16 from_readline(offs_t offset, UINT16 mask);
UINT16 from_constant(offs_t offset, UINT16 mask);
UINT16 from_unmap(offs_t offset, UINT16 mask);
// internal state
devcb_resolved_objects m_object;
devcb_resolved_read_helpers m_helper;
static UINT8 s_null;
};
// ======================> devcb_write16
// static structure used for device configuration when the desired callback type is a write16_device_func
struct devcb_write16
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
write_line_device_func writeline; // write line function
write16_device_func writedevice; // write device function
};
// ======================> devcb_resolved_write16
// base delegate type for a write16
typedef delegate<void (offs_t, UINT16, UINT16)> devcb_write16_delegate;
// class which wraps resolving a devcb_write16 into a delegate
class devcb_resolved_write16 : public devcb_write16_delegate
{
DISABLE_COPYING(devcb_resolved_write16);
public:
// construction/destruction
devcb_resolved_write16();
devcb_resolved_write16(const devcb_write16 &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_write16 &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
// provide default for mem_mask
void operator()(offs_t offset, UINT16 data, UINT16 mem_mask = 0xffff) const { devcb_write16_delegate::operator()(offset, data, mem_mask); }
private:
// internal helpers
void to_null(offs_t offset, UINT16 data, UINT16 mask);
void to_port(offs_t offset, UINT16 data, UINT16 mask);
void to_write16(offs_t offset, UINT16 data, UINT16 mask);
void to_writeline(offs_t offset, UINT16 data, UINT16 mask);
void to_input(offs_t offset, UINT16 data, UINT16 mask);
void to_unmap(offs_t offset, UINT16 data, UINT16 mask);
// internal state
devcb_resolved_objects m_object;
devcb_resolved_write_helpers m_helper;
static UINT8 s_null;
};
// ======================> devcb_read32
// static structure used for device configuration when the desired callback type is a read32_device_func
struct devcb_read32
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
read_line_device_func readline; // read line function
read32_device_func readdevice; // read device function
};
// ======================> devcb_resolved_read32
// base delegate type for a write32
typedef delegate<UINT32 (offs_t, UINT32)> devcb_read32_delegate;
// class which wraps resolving a devcb_read32 into a delegate
class devcb_resolved_read32 : public devcb_read32_delegate
{
DISABLE_COPYING(devcb_resolved_read32);
public:
// construction/destruction
devcb_resolved_read32();
devcb_resolved_read32(const devcb_read32 &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_read32 &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
// provide default for mem_mask
UINT32 operator()(offs_t offset, UINT32 mem_mask = 0xffff) const { return devcb_read32_delegate::operator()(offset, mem_mask); }
private:
// internal helpers
UINT32 from_port(offs_t offset, UINT32 mask);
UINT32 from_read32(offs_t offset, UINT32 mask);
UINT32 from_readline(offs_t offset, UINT32 mask);
UINT32 from_constant(offs_t offset, UINT32 mask);
UINT32 from_unmap(offs_t offset, UINT32 mask);
// internal state
devcb_resolved_objects m_object;
devcb_resolved_read_helpers m_helper;
static UINT8 s_null;
};
// ======================> devcb_write32
// static structure used for device configuration when the desired callback type is a write32_device_func
struct devcb_write32
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
write_line_device_func writeline; // write line function
write32_device_func writedevice; // write device function
};
// ======================> devcb_resolved_write32
// base delegate type for a write32
typedef delegate<void (offs_t, UINT32, UINT32)> devcb_write32_delegate;
// class which wraps resolving a devcb_write32 into a delegate
class devcb_resolved_write32 : public devcb_write32_delegate
{
DISABLE_COPYING(devcb_resolved_write32);
public:
// construction/destruction
devcb_resolved_write32();
devcb_resolved_write32(const devcb_write32 &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_write32 &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
// provide default for mem_mask
void operator()(offs_t offset, UINT32 data, UINT32 mem_mask = 0xffff) const { devcb_write32_delegate::operator()(offset, data, mem_mask); }
private:
// internal helpers
void to_null(offs_t offset, UINT32 data, UINT32 mask);
void to_port(offs_t offset, UINT32 data, UINT32 mask);
void to_write32(offs_t offset, UINT32 data, UINT32 mask);
void to_writeline(offs_t offset, UINT32 data, UINT32 mask);
void to_input(offs_t offset, UINT32 data, UINT32 mask);
void to_unmap(offs_t offset, UINT32 data, UINT32 mask);
// internal state
devcb_resolved_objects m_object;
devcb_resolved_write_helpers m_helper;
static UINT8 s_null;
};
// ======================> devcb_read64
// static structure used for device configuration when the desired callback type is a read64_device_func
struct devcb_read64
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
read_line_device_func readline; // read line function
read64_device_func readdevice; // read device function
};
// ======================> devcb_resolved_read64
// base delegate type for a write64
typedef delegate<UINT64 (offs_t, UINT64)> devcb_read64_delegate;
// class which wraps resolving a devcb_read64 into a delegate
class devcb_resolved_read64 : public devcb_read64_delegate
{
DISABLE_COPYING(devcb_resolved_read64);
public:
// construction/destruction
devcb_resolved_read64();
devcb_resolved_read64(const devcb_read64 &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_read64 &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
// provide default for mem_mask
UINT64 operator()(offs_t offset, UINT64 mem_mask = 0xffff) const { return devcb_read64_delegate::operator()(offset, mem_mask); }
private:
// internal helpers
UINT64 from_port(offs_t offset, UINT64 mask);
UINT64 from_read64(offs_t offset, UINT64 mask);
UINT64 from_readline(offs_t offset, UINT64 mask);
UINT64 from_constant(offs_t offset, UINT64 mask);
UINT64 from_unmap(offs_t offset, UINT64 mask);
// internal state
devcb_resolved_objects m_object;
devcb_resolved_read_helpers m_helper;
static UINT8 s_null;
};
// ======================> devcb_write64
// static structure used for device configuration when the desired callback type is a write64_device_func
struct devcb_write64
{
UINT16 type; // one of the special DEVCB_TYPE values
UINT16 index; // index related to the above types
const char * tag; // tag of target, where appropriate
const char * name; // name of the target function
write_line_device_func writeline; // write line function
write64_device_func writedevice; // write device function
};
// ======================> devcb_resolved_write64
// base delegate type for a write64
typedef delegate<void (offs_t, UINT64, UINT64)> devcb_write64_delegate;
// class which wraps resolving a devcb_write64 into a delegate
class devcb_resolved_write64 : public devcb_write64_delegate
{
DISABLE_COPYING(devcb_resolved_write64);
public:
// construction/destruction
devcb_resolved_write64();
devcb_resolved_write64(const devcb_write64 &desc, device_t &device) { resolve(desc, device); }
// resolution
void resolve(const devcb_write64 &desc, device_t &device);
// override parent class' notion of NULL
bool isnull() const { return m_helper.null_indicator == &s_null; }
// provide default for mem_mask
void operator()(offs_t offset, UINT64 data, UINT64 mem_mask = 0xffff) const { devcb_write64_delegate::operator()(offset, data, mem_mask); }
private:
// internal helpers
void to_null(offs_t offset, UINT64 data, UINT64 mask);
void to_port(offs_t offset, UINT64 data, UINT64 mask);
void to_write64(offs_t offset, UINT64 data, UINT64 mask);
void to_writeline(offs_t offset, UINT64 data, UINT64 mask);
void to_input(offs_t offset, UINT64 data, UINT64 mask);
void to_unmap(offs_t offset, UINT64 data, UINT64 mask);
// internal state
devcb_resolved_objects m_object;
devcb_resolved_write_helpers m_helper;
static UINT8 s_null;
};
#endif // __DEVCB_H__

View File

@ -113,7 +113,6 @@ typedef device_t * (*machine_config_constructor)(machine_config &config, device_
#include "speaker.h" #include "speaker.h"
// generic helpers // generic helpers
#include "devcb.h"
#include "devcb2.h" #include "devcb2.h"
#include "dispatch.h" #include "dispatch.h"
#include "drivers/xtal.h" #include "drivers/xtal.h"

View File

@ -59,7 +59,6 @@ EMUOBJS = \
$(EMUOBJ)/crsshair.o \ $(EMUOBJ)/crsshair.o \
$(EMUOBJ)/debugger.o \ $(EMUOBJ)/debugger.o \
$(EMUOBJ)/devdelegate.o \ $(EMUOBJ)/devdelegate.o \
$(EMUOBJ)/devcb.o \
$(EMUOBJ)/devcb2.o \ $(EMUOBJ)/devcb2.o \
$(EMUOBJ)/devcpu.o \ $(EMUOBJ)/devcpu.o \
$(EMUOBJ)/devfind.o \ $(EMUOBJ)/devfind.o \