mirror of
https://github.com/holub/mame
synced 2025-05-22 21:58:57 +03:00
Modernized the MOS6526, MOS6560, MOS7360, MOS6581, CBM IEC, and IEEE-488 devices. [Curt Coder]
This commit is contained in:
parent
8acbf9de2c
commit
7e6fabfb9e
8
.gitattributes
vendored
8
.gitattributes
vendored
@ -1556,6 +1556,10 @@ src/emu/sound/mas3507d.c svneol=native#text/plain
|
|||||||
src/emu/sound/mas3507d.h svneol=native#text/plain
|
src/emu/sound/mas3507d.h svneol=native#text/plain
|
||||||
src/emu/sound/mos6560.c svneol=native#text/plain
|
src/emu/sound/mos6560.c svneol=native#text/plain
|
||||||
src/emu/sound/mos6560.h svneol=native#text/plain
|
src/emu/sound/mos6560.h svneol=native#text/plain
|
||||||
|
src/emu/sound/mos6581.c svneol=native#text/plain
|
||||||
|
src/emu/sound/mos6581.h svneol=native#text/plain
|
||||||
|
src/emu/sound/mos7360.c svneol=native#text/plain
|
||||||
|
src/emu/sound/mos7360.h svneol=native#text/plain
|
||||||
src/emu/sound/mpeg_audio.c svneol=native#text/plain
|
src/emu/sound/mpeg_audio.c svneol=native#text/plain
|
||||||
src/emu/sound/mpeg_audio.h svneol=native#text/plain
|
src/emu/sound/mpeg_audio.h svneol=native#text/plain
|
||||||
src/emu/sound/msm5205.c svneol=native#text/plain
|
src/emu/sound/msm5205.c svneol=native#text/plain
|
||||||
@ -1611,8 +1615,6 @@ src/emu/sound/segapcm.c svneol=native#text/plain
|
|||||||
src/emu/sound/segapcm.h svneol=native#text/plain
|
src/emu/sound/segapcm.h svneol=native#text/plain
|
||||||
src/emu/sound/sid.c svneol=native#text/plain
|
src/emu/sound/sid.c svneol=native#text/plain
|
||||||
src/emu/sound/sid.h svneol=native#text/plain
|
src/emu/sound/sid.h svneol=native#text/plain
|
||||||
src/emu/sound/sid6581.c svneol=native#text/plain
|
|
||||||
src/emu/sound/sid6581.h svneol=native#text/plain
|
|
||||||
src/emu/sound/side6581.h svneol=native#text/plain
|
src/emu/sound/side6581.h svneol=native#text/plain
|
||||||
src/emu/sound/sidenvel.c svneol=native#text/plain
|
src/emu/sound/sidenvel.c svneol=native#text/plain
|
||||||
src/emu/sound/sidenvel.h svneol=native#text/plain
|
src/emu/sound/sidenvel.h svneol=native#text/plain
|
||||||
@ -5797,8 +5799,6 @@ src/mess/audio/lynx.c svneol=native#text/plain
|
|||||||
src/mess/audio/mac.c svneol=native#text/plain
|
src/mess/audio/mac.c svneol=native#text/plain
|
||||||
src/mess/audio/mea8000.c svneol=native#text/plain
|
src/mess/audio/mea8000.c svneol=native#text/plain
|
||||||
src/mess/audio/mea8000.h svneol=native#text/plain
|
src/mess/audio/mea8000.h svneol=native#text/plain
|
||||||
src/mess/audio/mos7360.c svneol=native#text/plain
|
|
||||||
src/mess/audio/mos7360.h svneol=native#text/plain
|
|
||||||
src/mess/audio/socrates.c svneol=native#text/plain
|
src/mess/audio/socrates.c svneol=native#text/plain
|
||||||
src/mess/audio/socrates.h svneol=native#text/plain
|
src/mess/audio/socrates.h svneol=native#text/plain
|
||||||
src/mess/audio/spchroms.c svneol=native#text/plain
|
src/mess/audio/spchroms.c svneol=native#text/plain
|
||||||
|
@ -118,46 +118,6 @@ const device_type MOS8520 = &device_creator<mos8520_device>;
|
|||||||
const device_type MOS5710 = &device_creator<mos5710_device>;
|
const device_type MOS5710 = &device_creator<mos5710_device>;
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// static_set_tod_clock -
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void mos6526_device::static_set_tod_clock(device_t &device, int tod_clock)
|
|
||||||
{
|
|
||||||
mos6526_device &cia = dynamic_cast<mos6526_device &>(device);
|
|
||||||
|
|
||||||
cia.m_tod_clock = tod_clock;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_config_complete - perform any
|
|
||||||
// operations now that the configuration is
|
|
||||||
// complete
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void mos6526_device::device_config_complete()
|
|
||||||
{
|
|
||||||
// inherit a copy of the static data
|
|
||||||
const mos6526_interface *intf = reinterpret_cast<const mos6526_interface *>(static_config());
|
|
||||||
if (intf != NULL)
|
|
||||||
*static_cast<mos6526_interface *>(this) = *intf;
|
|
||||||
|
|
||||||
// or initialize to defaults if none provided
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
|
|
||||||
memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb));
|
|
||||||
memset(&m_out_cnt_cb, 0, sizeof(m_out_cnt_cb));
|
|
||||||
memset(&m_out_sp_cb, 0, sizeof(m_out_sp_cb));
|
|
||||||
memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
|
|
||||||
memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
|
|
||||||
memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
|
|
||||||
memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// INLINE HELPERS
|
// INLINE HELPERS
|
||||||
@ -174,7 +134,7 @@ inline void mos6526_device::update_pa()
|
|||||||
if (m_pa != pa)
|
if (m_pa != pa)
|
||||||
{
|
{
|
||||||
m_pa = pa;
|
m_pa = pa;
|
||||||
m_out_pa_func(0, pa);
|
m_write_pa((offs_t)0, pa);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,7 +165,7 @@ inline void mos6526_device::update_pb()
|
|||||||
|
|
||||||
if (m_pb != pb)
|
if (m_pb != pb)
|
||||||
{
|
{
|
||||||
m_out_pb_func(0, pb);
|
m_write_pb((offs_t)0, pb);
|
||||||
m_pb = pb;
|
m_pb = pb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -438,7 +398,7 @@ inline void mos6526_device::serial_output()
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_sp = BIT(m_shift, 7);
|
m_sp = BIT(m_shift, 7);
|
||||||
m_out_sp_func(m_sp);
|
m_write_sp(m_sp);
|
||||||
|
|
||||||
m_shift <<= 1;
|
m_shift <<= 1;
|
||||||
m_bits++;
|
m_bits++;
|
||||||
@ -457,7 +417,7 @@ inline void mos6526_device::serial_output()
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_cnt = !m_cnt;
|
m_cnt = !m_cnt;
|
||||||
m_out_cnt_func(m_cnt);
|
m_write_cnt(m_cnt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -505,7 +465,7 @@ inline void mos6526_device::update_interrupt()
|
|||||||
{
|
{
|
||||||
if (!m_irq && m_ir1)
|
if (!m_irq && m_ir1)
|
||||||
{
|
{
|
||||||
m_out_irq_func(ASSERT_LINE);
|
m_write_irq(ASSERT_LINE);
|
||||||
m_irq = true;
|
m_irq = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -602,7 +562,7 @@ inline void mos6526_device::synchronize()
|
|||||||
if (!m_pc)
|
if (!m_pc)
|
||||||
{
|
{
|
||||||
m_pc = 1;
|
m_pc = 1;
|
||||||
m_out_pc_func(m_pc);
|
m_write_pc(m_pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
serial_input();
|
serial_input();
|
||||||
@ -634,7 +594,15 @@ mos6526_device::mos6526_device(const machine_config &mconfig, device_type type,
|
|||||||
: device_t(mconfig, type, name, tag, owner, clock),
|
: device_t(mconfig, type, name, tag, owner, clock),
|
||||||
device_execute_interface(mconfig, *this),
|
device_execute_interface(mconfig, *this),
|
||||||
m_icount(0),
|
m_icount(0),
|
||||||
m_variant(variant)
|
m_variant(variant),
|
||||||
|
m_write_irq(*this),
|
||||||
|
m_write_pc(*this),
|
||||||
|
m_write_cnt(*this),
|
||||||
|
m_write_sp(*this),
|
||||||
|
m_read_pa(*this),
|
||||||
|
m_write_pa(*this),
|
||||||
|
m_read_pb(*this),
|
||||||
|
m_write_pb(*this)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -642,7 +610,15 @@ mos6526_device::mos6526_device(const machine_config &mconfig, const char *tag, d
|
|||||||
: device_t(mconfig, MOS6526, "MOS6526", tag, owner, clock),
|
: device_t(mconfig, MOS6526, "MOS6526", tag, owner, clock),
|
||||||
device_execute_interface(mconfig, *this),
|
device_execute_interface(mconfig, *this),
|
||||||
m_icount(0),
|
m_icount(0),
|
||||||
m_variant(TYPE_6526)
|
m_variant(TYPE_6526),
|
||||||
|
m_write_irq(*this),
|
||||||
|
m_write_pc(*this),
|
||||||
|
m_write_cnt(*this),
|
||||||
|
m_write_sp(*this),
|
||||||
|
m_read_pa(*this),
|
||||||
|
m_write_pa(*this),
|
||||||
|
m_read_pb(*this),
|
||||||
|
m_write_pb(*this)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
mos6526a_device::mos6526a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos6526a_device::mos6526a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
@ -665,14 +641,14 @@ void mos6526_device::device_start()
|
|||||||
m_icountptr = &m_icount;
|
m_icountptr = &m_icount;
|
||||||
|
|
||||||
// resolve callbacks
|
// resolve callbacks
|
||||||
m_out_irq_func.resolve(m_out_irq_cb, *this);
|
m_write_irq.resolve_safe();
|
||||||
m_out_pc_func.resolve(m_out_pc_cb, *this);
|
m_write_pc.resolve_safe();
|
||||||
m_out_cnt_func.resolve(m_out_cnt_cb, *this);
|
m_write_cnt.resolve_safe();
|
||||||
m_out_sp_func.resolve(m_out_sp_cb, *this);
|
m_write_sp.resolve_safe();
|
||||||
m_in_pa_func.resolve(m_in_pa_cb, *this);
|
m_read_pa.resolve_safe(0xff);
|
||||||
m_out_pa_func.resolve(m_out_pa_cb, *this);
|
m_write_pa.resolve_safe();
|
||||||
m_in_pb_func.resolve(m_in_pb_cb, *this);
|
m_read_pb.resolve_safe(0xff);
|
||||||
m_out_pb_func.resolve(m_out_pb_cb, *this);
|
m_write_pb.resolve_safe();
|
||||||
|
|
||||||
// allocate timer
|
// allocate timer
|
||||||
if (m_tod_clock > 0)
|
if (m_tod_clock > 0)
|
||||||
@ -782,10 +758,10 @@ void mos6526_device::device_reset()
|
|||||||
m_tod_stopped = true;
|
m_tod_stopped = true;
|
||||||
m_tod_latched = false;
|
m_tod_latched = false;
|
||||||
|
|
||||||
m_out_irq_func(CLEAR_LINE);
|
m_write_irq(CLEAR_LINE);
|
||||||
m_out_pc_func(m_pc);
|
m_write_pc(m_pc);
|
||||||
m_out_sp_func(m_sp);
|
m_write_sp(m_sp);
|
||||||
m_out_cnt_func(m_cnt);
|
m_write_cnt(m_cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -833,11 +809,11 @@ READ8_MEMBER( mos6526_device::read )
|
|||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
case PRA:
|
case PRA:
|
||||||
data = (m_in_pa_func(0) & ~m_ddra) | (m_pra & m_ddra);
|
data = (m_read_pa(0) & ~m_ddra) | (m_pra & m_ddra);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PRB:
|
case PRB:
|
||||||
data = (m_in_pb_func(0) & ~m_ddrb) | (m_prb & m_ddrb);
|
data = (m_read_pb(0) & ~m_ddrb) | (m_prb & m_ddrb);
|
||||||
|
|
||||||
if (CRA_PBON)
|
if (CRA_PBON)
|
||||||
{
|
{
|
||||||
@ -856,7 +832,7 @@ READ8_MEMBER( mos6526_device::read )
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_pc = 0;
|
m_pc = 0;
|
||||||
m_out_pc_func(m_pc);
|
m_write_pc(m_pc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DDRA:
|
case DDRA:
|
||||||
@ -920,7 +896,7 @@ READ8_MEMBER( mos6526_device::read )
|
|||||||
m_ir1 = 0;
|
m_ir1 = 0;
|
||||||
m_icr = 0;
|
m_icr = 0;
|
||||||
m_irq = false;
|
m_irq = false;
|
||||||
m_out_irq_func(CLEAR_LINE);
|
m_write_irq(CLEAR_LINE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CRA:
|
case CRA:
|
||||||
@ -980,7 +956,7 @@ WRITE8_MEMBER( mos6526_device::write )
|
|||||||
update_pb();
|
update_pb();
|
||||||
|
|
||||||
m_pc = 0;
|
m_pc = 0;
|
||||||
m_out_pc_func(m_pc);
|
m_write_pc(m_pc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DDRA:
|
case DDRA:
|
||||||
|
@ -69,32 +69,31 @@
|
|||||||
// INTERFACE CONFIGURATION MACROS
|
// INTERFACE CONFIGURATION MACROS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
#define MCFG_MOS6526_ADD(_tag, _clock, _tod_clock, _config) \
|
#define MCFG_MOS6526_ADD(_tag, _clock, _tod_clock, _irq) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS6526, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS6526, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6526_device *>(device)->set_callbacks(_tod_clock, DEVCB2_##_irq);
|
||||||
mos6526_device::static_set_tod_clock(*device, _tod_clock);
|
|
||||||
|
|
||||||
#define MCFG_MOS6526A_ADD(_tag, _clock, _tod_clock, _config) \
|
#define MCFG_MOS6526A_ADD(_tag, _clock, _tod_clock, _irq) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS6526A, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS6526A, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6526_device *>(device)->set_callbacks(_tod_clock, DEVCB2_##_irq);
|
||||||
mos6526_device::static_set_tod_clock(*device, _tod_clock);
|
|
||||||
|
|
||||||
#define MCFG_MOS8520_ADD(_tag, _clock, _tod_clock, _config) \
|
#define MCFG_MOS8520_ADD(_tag, _clock, _tod_clock, _irq) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS8520, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS8520, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6526_device *>(device)->set_callbacks(_tod_clock, DEVCB2_##_irq);
|
||||||
mos6526_device::static_set_tod_clock(*device, _tod_clock);
|
|
||||||
|
|
||||||
#define MCFG_MOS5710_ADD(_tag, _clock, _tod_clock, _config) \
|
#define MCFG_MOS5710_ADD(_tag, _clock, _tod_clock, _irq) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS5710, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS5710, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6526_device *>(device)->set_callbacks(_tod_clock, DEVCB2_##_irq);
|
||||||
mos6526_device::static_set_tod_clock(*device, _tod_clock);
|
|
||||||
|
|
||||||
|
|
||||||
#define MOS6526_INTERFACE(name) \
|
#define MCFG_MOS6526_SERIAL_CALLBACKS(_cnt, _sp) \
|
||||||
const mos6526_interface (name)=
|
downcast<mos6526_device *>(device)->set_serial_callbacks(DEVCB2_##_cnt, DEVCB2_##_sp);
|
||||||
|
|
||||||
#define MOS8520_INTERFACE(name) \
|
#define MCFG_MOS6526_PORT_A_CALLBACKS(_read, _write) \
|
||||||
const mos6526_interface (name)=
|
downcast<mos6526_device *>(device)->set_port_a_callbacks(DEVCB2_##_read, DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_MOS6526_PORT_B_CALLBACKS(_read, _write, _pc) \
|
||||||
|
downcast<mos6526_device *>(device)->set_port_b_callbacks(DEVCB2_##_read, DEVCB2_##_write, DEVCB2_##_pc);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -102,36 +101,36 @@
|
|||||||
// TYPE DEFINITIONS
|
// TYPE DEFINITIONS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
// ======================> mos6526_interface
|
|
||||||
|
|
||||||
struct mos6526_interface
|
|
||||||
{
|
|
||||||
devcb_write_line m_out_irq_cb;
|
|
||||||
devcb_write_line m_out_pc_cb;
|
|
||||||
devcb_write_line m_out_cnt_cb;
|
|
||||||
devcb_write_line m_out_sp_cb;
|
|
||||||
|
|
||||||
devcb_read8 m_in_pa_cb;
|
|
||||||
devcb_write8 m_out_pa_cb;
|
|
||||||
|
|
||||||
devcb_read8 m_in_pb_cb;
|
|
||||||
devcb_write8 m_out_pb_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> mos6526_device
|
// ======================> mos6526_device
|
||||||
|
|
||||||
class mos6526_device : public device_t,
|
class mos6526_device : public device_t,
|
||||||
public device_execute_interface,
|
public device_execute_interface
|
||||||
public mos6526_interface
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
mos6526_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
mos6526_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
||||||
mos6526_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
mos6526_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
// inline configuration
|
template<class _irq> void set_callbacks(int tod_clock, _irq irq) {
|
||||||
static void static_set_tod_clock(device_t &device, int tod_clock);
|
m_tod_clock = tod_clock;
|
||||||
|
m_write_irq.set_callback(irq);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class _cnt, class _sp> void set_serial_callbacks(_cnt cnt, _sp sp) {
|
||||||
|
m_write_cnt.set_callback(cnt);
|
||||||
|
m_write_sp.set_callback(sp);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class _read, class _write> void set_port_a_callbacks(_read rd, _write wr) {
|
||||||
|
m_read_pa.set_callback(rd);
|
||||||
|
m_write_pa.set_callback(wr);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class _read, class _write, class _pc> void set_port_b_callbacks(_read rd, _write wr, _pc pc) {
|
||||||
|
m_read_pb.set_callback(rd);
|
||||||
|
m_write_pb.set_callback(wr);
|
||||||
|
m_write_pc.set_callback(pc);
|
||||||
|
}
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER( read );
|
DECLARE_READ8_MEMBER( read );
|
||||||
DECLARE_WRITE8_MEMBER( write );
|
DECLARE_WRITE8_MEMBER( write );
|
||||||
@ -157,7 +156,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_config_complete();
|
|
||||||
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);
|
||||||
@ -183,14 +181,14 @@ protected:
|
|||||||
inline void write_tod(int offset, UINT8 data);
|
inline void write_tod(int offset, UINT8 data);
|
||||||
inline void synchronize();
|
inline void synchronize();
|
||||||
|
|
||||||
devcb_resolved_write_line m_out_irq_func;
|
devcb2_write_line m_write_irq;
|
||||||
devcb_resolved_write_line m_out_pc_func;
|
devcb2_write_line m_write_pc;
|
||||||
devcb_resolved_write_line m_out_cnt_func;
|
devcb2_write_line m_write_cnt;
|
||||||
devcb_resolved_write_line m_out_sp_func;
|
devcb2_write_line m_write_sp;
|
||||||
devcb_resolved_read8 m_in_pa_func;
|
devcb2_read8 m_read_pa;
|
||||||
devcb_resolved_write8 m_out_pa_func;
|
devcb2_write8 m_write_pa;
|
||||||
devcb_resolved_read8 m_in_pb_func;
|
devcb2_read8 m_read_pb;
|
||||||
devcb_resolved_write8 m_out_pb_func;
|
devcb2_write8 m_write_pb;
|
||||||
|
|
||||||
// interrupts
|
// interrupts
|
||||||
bool m_irq;
|
bool m_irq;
|
||||||
|
@ -435,8 +435,10 @@ READ8_MEMBER( mos6560_device::read )
|
|||||||
val = m_reg[offset];
|
val = m_reg[offset];
|
||||||
break;
|
break;
|
||||||
case 8: /* poti 1 */
|
case 8: /* poti 1 */
|
||||||
|
val = m_read_potx(0);
|
||||||
|
break;
|
||||||
case 9: /* poti 2 */
|
case 9: /* poti 2 */
|
||||||
val = (!m_paddle_cb->isnull()) ? m_paddle_cb[offset - 8](0) : m_reg[offset];
|
val = m_read_poty(0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
val = m_reg[offset];
|
val = m_reg[offset];
|
||||||
@ -684,12 +686,15 @@ static ADDRESS_MAP_START( mos6560_colorram_map, AS_1, 8, mos6560_device )
|
|||||||
AM_RANGE(0x000, 0x3ff) AM_RAM
|
AM_RANGE(0x000, 0x3ff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
mos6560_device::mos6560_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
|
mos6560_device::mos6560_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
|
||||||
: device_t(mconfig, type, name, tag, owner, clock),
|
: device_t(mconfig, type, name, tag, owner, clock),
|
||||||
device_memory_interface(mconfig, *this),
|
device_memory_interface(mconfig, *this),
|
||||||
device_sound_interface(mconfig, *this),
|
device_sound_interface(mconfig, *this),
|
||||||
|
m_variant(variant),
|
||||||
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6560_videoram_map)),
|
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6560_videoram_map)),
|
||||||
m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6560_colorram_map))
|
m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6560_colorram_map)),
|
||||||
|
m_read_potx(*this),
|
||||||
|
m_read_poty(*this)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -699,35 +704,17 @@ mos6560_device::mos6560_device(const machine_config &mconfig, const char *tag, d
|
|||||||
device_sound_interface(mconfig, *this),
|
device_sound_interface(mconfig, *this),
|
||||||
m_variant(TYPE_6560),
|
m_variant(TYPE_6560),
|
||||||
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6560_videoram_map)),
|
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6560_videoram_map)),
|
||||||
m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6560_colorram_map))
|
m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6560_colorram_map)),
|
||||||
|
m_read_potx(*this),
|
||||||
|
m_read_poty(*this)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
mos6561_device::mos6561_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos6561_device::mos6561_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
:mos6560_device(mconfig, MOS6561, "MOS6561", tag, owner, clock) { m_variant = TYPE_6561; }
|
:mos6560_device(mconfig, MOS6561, "MOS6561", tag, owner, clock, TYPE_6561) { }
|
||||||
|
|
||||||
mos656x_attack_ufo_device::mos656x_attack_ufo_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos656x_attack_ufo_device::mos656x_attack_ufo_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
:mos6560_device(mconfig, MOS656X_ATTACK_UFO, "MOS656X", tag, owner, clock) { m_variant = TYPE_ATTACK_UFO; }
|
:mos6560_device(mconfig, MOS656X_ATTACK_UFO, "MOS656X", tag, owner, clock, TYPE_ATTACK_UFO) { }
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_config_complete - perform any
|
|
||||||
// operations now that the configuration is
|
|
||||||
// complete
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void mos6560_device::device_config_complete()
|
|
||||||
{
|
|
||||||
// inherit a copy of the static data
|
|
||||||
const mos6560_interface *intf = reinterpret_cast<const mos6560_interface *>(static_config());
|
|
||||||
if (intf != NULL)
|
|
||||||
*static_cast<mos6560_interface *>(this) = *intf;
|
|
||||||
|
|
||||||
// or initialize to defaults if none provided
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -745,6 +732,7 @@ const address_space_config *mos6560_device::memory_space_config(address_spacenum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// device_start - device-specific startup
|
// device_start - device-specific startup
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -753,10 +741,11 @@ void mos6560_device::device_start()
|
|||||||
{
|
{
|
||||||
m_screen = machine().device<screen_device>(m_screen_tag);
|
m_screen = machine().device<screen_device>(m_screen_tag);
|
||||||
m_screen->register_screen_bitmap(m_bitmap);
|
m_screen->register_screen_bitmap(m_bitmap);
|
||||||
|
assert(m_screen);
|
||||||
|
|
||||||
// resolve callbacks
|
// resolve callbacks
|
||||||
m_paddle_cb[0].resolve(m_potx_cb, *this);
|
m_read_potx.resolve_safe(0xff);
|
||||||
m_paddle_cb[1].resolve(m_poty_cb, *this);
|
m_read_poty.resolve_safe(0xff);
|
||||||
|
|
||||||
switch (m_variant)
|
switch (m_variant)
|
||||||
{
|
{
|
||||||
@ -766,12 +755,14 @@ void mos6560_device::device_start()
|
|||||||
m_total_lines = MOS6560_LINES;
|
m_total_lines = MOS6560_LINES;
|
||||||
m_total_vretracerate = MOS6560_VRETRACERATE;
|
m_total_vretracerate = MOS6560_VRETRACERATE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_ATTACK_UFO:
|
case TYPE_ATTACK_UFO:
|
||||||
m_total_xsize = 23 * 8;
|
m_total_xsize = 23 * 8;
|
||||||
m_total_ysize = 22 * 8;
|
m_total_ysize = 22 * 8;
|
||||||
m_total_lines = MOS6560_LINES;
|
m_total_lines = MOS6560_LINES;
|
||||||
m_total_vretracerate = MOS6560_VRETRACERATE;
|
m_total_vretracerate = MOS6560_VRETRACERATE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TYPE_6561:
|
case TYPE_6561:
|
||||||
m_total_xsize = MOS6561_XSIZE;
|
m_total_xsize = MOS6561_XSIZE;
|
||||||
m_total_ysize = MOS6561_YSIZE;
|
m_total_ysize = MOS6561_YSIZE;
|
||||||
@ -780,8 +771,14 @@ void mos6560_device::device_start()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// allocate timers
|
||||||
|
m_line_timer = timer_alloc(TIMER_LINE);
|
||||||
|
m_line_timer->adjust(m_screen->scan_period(), 0, m_screen->scan_period());
|
||||||
|
|
||||||
|
// initialize sound
|
||||||
sound_start();
|
sound_start();
|
||||||
|
|
||||||
|
// state saving
|
||||||
save_item(NAME(m_lightpenreadtime));
|
save_item(NAME(m_lightpenreadtime));
|
||||||
save_item(NAME(m_rasterline));
|
save_item(NAME(m_rasterline));
|
||||||
save_item(NAME(m_lastline));
|
save_item(NAME(m_lastline));
|
||||||
@ -821,6 +818,7 @@ void mos6560_device::device_start()
|
|||||||
save_item(NAME(m_noisesamples));
|
save_item(NAME(m_noisesamples));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// device_reset - device-specific reset
|
// device_reset - device-specific reset
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -872,6 +870,21 @@ void mos6560_device::device_reset()
|
|||||||
m_noisesamples = 1;
|
m_noisesamples = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_timer - handler timer events
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mos6560_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||||
|
{
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case TIMER_LINE:
|
||||||
|
raster_interrupt_gen();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// sound_stream_update - handle a stream update
|
// sound_stream_update - handle a stream update
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
// DEVICE CONFIGURATION MACROS
|
// DEVICE CONFIGURATION MACROS
|
||||||
//***************************************************************************
|
//***************************************************************************
|
||||||
|
|
||||||
#define MCFG_MOS6560_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS6560_ADD(_tag, _screen_tag, _clock, _videoram_map, _colorram_map, _potx, _poty) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
MCFG_SCREEN_REFRESH_RATE(MOS6560_VRETRACERATE) \
|
MCFG_SCREEN_REFRESH_RATE(MOS6560_VRETRACERATE) \
|
||||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \
|
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \
|
||||||
@ -51,11 +51,11 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(MOS6560_MAME_XPOS, MOS6560_MAME_XPOS + MOS6560_MAME_XSIZE - 1, MOS6560_MAME_YPOS, MOS6560_MAME_YPOS + MOS6560_MAME_YSIZE - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(MOS6560_MAME_XPOS, MOS6560_MAME_XPOS + MOS6560_MAME_XSIZE - 1, MOS6560_MAME_YPOS, MOS6560_MAME_YPOS + MOS6560_MAME_YSIZE - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6560_device, screen_update) \
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6560_device, screen_update) \
|
||||||
MCFG_SOUND_ADD(_tag, MOS6560, _clock) \
|
MCFG_SOUND_ADD(_tag, MOS6560, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6560_device *>(device)->set_callbacks(_screen_tag, DEVCB2_##_potx, DEVCB2_##_poty); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map)
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map)
|
||||||
|
|
||||||
#define MCFG_MOS6561_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS6561_ADD(_tag, _screen_tag, _clock, _videoram_map, _colorram_map, _potx, _poty) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
MCFG_SCREEN_REFRESH_RATE(MOS6561_VRETRACERATE) \
|
MCFG_SCREEN_REFRESH_RATE(MOS6561_VRETRACERATE) \
|
||||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \
|
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \
|
||||||
@ -63,11 +63,11 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(MOS6561_MAME_XPOS, MOS6561_MAME_XPOS + MOS6561_MAME_XSIZE - 1, MOS6561_MAME_YPOS, MOS6561_MAME_YPOS + MOS6561_MAME_YSIZE - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(MOS6561_MAME_XPOS, MOS6561_MAME_XPOS + MOS6561_MAME_XSIZE - 1, MOS6561_MAME_YPOS, MOS6561_MAME_YPOS + MOS6561_MAME_YSIZE - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6560_device, screen_update) \
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6560_device, screen_update) \
|
||||||
MCFG_SOUND_ADD(_tag, MOS6561, _clock) \
|
MCFG_SOUND_ADD(_tag, MOS6561, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6560_device *>(device)->set_callbacks(_screen_tag, DEVCB2_##_potx, DEVCB2_##_poty); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map)
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map)
|
||||||
|
|
||||||
#define MCFG_MOS656X_ATTACK_UFO_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS656X_ATTACK_UFO_ADD(_tag, _screen_tag, _clock, _videoram_map, _colorram_map) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
MCFG_SCREEN_REFRESH_RATE(MOS6560_VRETRACERATE) \
|
MCFG_SCREEN_REFRESH_RATE(MOS6560_VRETRACERATE) \
|
||||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \
|
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \
|
||||||
@ -75,15 +75,11 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0, 23*8 - 1, 0, 22*8 - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(0, 23*8 - 1, 0, 22*8 - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6560_device, screen_update) \
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6560_device, screen_update) \
|
||||||
MCFG_SOUND_ADD(_tag, MOS656X_ATTACK_UFO, _clock) \
|
MCFG_SOUND_ADD(_tag, MOS656X_ATTACK_UFO, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6560_device *>(device)->set_callbacks(_screen_tag, DEVCB2_NULL, DEVCB2_NULL); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map)
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map)
|
||||||
|
|
||||||
|
|
||||||
#define MOS6560_INTERFACE(_name) \
|
|
||||||
const mos6560_interface (_name) =
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// MACROS / CONSTANTS
|
// MACROS / CONSTANTS
|
||||||
@ -126,28 +122,22 @@
|
|||||||
// TYPE DEFINITIONS
|
// TYPE DEFINITIONS
|
||||||
//***************************************************************************
|
//***************************************************************************
|
||||||
|
|
||||||
// ======================> mos6560_interface
|
|
||||||
|
|
||||||
struct mos6560_interface
|
|
||||||
{
|
|
||||||
const char *m_screen_tag;
|
|
||||||
|
|
||||||
devcb_read8 m_potx_cb;
|
|
||||||
devcb_read8 m_poty_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> mos6560_device
|
// ======================> mos6560_device
|
||||||
|
|
||||||
class mos6560_device : public device_t,
|
class mos6560_device : public device_t,
|
||||||
public device_memory_interface,
|
public device_memory_interface,
|
||||||
public device_sound_interface,
|
public device_sound_interface
|
||||||
public mos6560_interface
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
mos6560_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
mos6560_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
||||||
mos6560_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
mos6560_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
template<class _potx, class _poty> void set_callbacks(const char *screen_tag, _potx potx, _poty poty) {
|
||||||
|
m_screen_tag = screen_tag;
|
||||||
|
m_read_potx.set_callback(potx);
|
||||||
|
m_read_poty.set_callback(poty);
|
||||||
|
}
|
||||||
|
|
||||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
|
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER( read );
|
DECLARE_READ8_MEMBER( read );
|
||||||
@ -158,7 +148,6 @@ public:
|
|||||||
DECLARE_WRITE_LINE_MEMBER( lp_w );
|
DECLARE_WRITE_LINE_MEMBER( lp_w );
|
||||||
|
|
||||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
void raster_interrupt_gen();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum
|
enum
|
||||||
@ -168,10 +157,15 @@ protected:
|
|||||||
TYPE_ATTACK_UFO // NTSC-M, less features
|
TYPE_ATTACK_UFO // NTSC-M, less features
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
TIMER_LINE
|
||||||
|
};
|
||||||
|
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_config_complete();
|
|
||||||
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);
|
||||||
|
|
||||||
// sound stream update overrides
|
// sound stream update overrides
|
||||||
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
|
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
|
||||||
@ -184,12 +178,17 @@ protected:
|
|||||||
void drawlines( int first, int last );
|
void drawlines( int first, int last );
|
||||||
void soundport_w( int offset, int data );
|
void soundport_w( int offset, int data );
|
||||||
void sound_start();
|
void sound_start();
|
||||||
|
void raster_interrupt_gen();
|
||||||
|
|
||||||
int m_variant;
|
int m_variant;
|
||||||
|
|
||||||
const address_space_config m_videoram_space_config;
|
const address_space_config m_videoram_space_config;
|
||||||
const address_space_config m_colorram_space_config;
|
const address_space_config m_colorram_space_config;
|
||||||
|
|
||||||
|
devcb2_read8 m_read_potx;
|
||||||
|
devcb2_read8 m_read_poty;
|
||||||
|
|
||||||
|
const char *m_screen_tag;
|
||||||
screen_device *m_screen;
|
screen_device *m_screen;
|
||||||
|
|
||||||
UINT8 m_reg[16];
|
UINT8 m_reg[16];
|
||||||
@ -216,9 +215,6 @@ protected:
|
|||||||
/* DMA */
|
/* DMA */
|
||||||
UINT8 m_last_data;
|
UINT8 m_last_data;
|
||||||
|
|
||||||
/* paddles */
|
|
||||||
devcb_resolved_read8 m_paddle_cb[2];
|
|
||||||
|
|
||||||
/* sound part */
|
/* sound part */
|
||||||
int m_tone1pos, m_tone2pos, m_tone3pos,
|
int m_tone1pos, m_tone2pos, m_tone3pos,
|
||||||
m_tonesize, m_tone1samples, m_tone2samples, m_tone3samples,
|
m_tonesize, m_tone1samples, m_tone2samples, m_tone3samples,
|
||||||
@ -229,6 +225,8 @@ protected:
|
|||||||
sound_stream *m_channel;
|
sound_stream *m_channel;
|
||||||
INT16 *m_tone;
|
INT16 *m_tone;
|
||||||
INT8 *m_noise;
|
INT8 *m_noise;
|
||||||
|
|
||||||
|
emu_timer *m_line_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
137
src/emu/sound/mos6581.c
Normal file
137
src/emu/sound/mos6581.c
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/**********************************************************************
|
||||||
|
|
||||||
|
MOS 6581/8580 Sound Interface Device emulation
|
||||||
|
|
||||||
|
Copyright MESS Team.
|
||||||
|
Visit http://mamedev.org for licensing and usage restrictions.
|
||||||
|
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
#include "mos6581.h"
|
||||||
|
#include "sid.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// MACROS / CONSTANTS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
#define LOG 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// DEVICE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// device type definition
|
||||||
|
const device_type MOS6581 = &device_creator<mos6581_device>;
|
||||||
|
const device_type MOS8580 = &device_creator<mos8580_device>;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// LIVE DEVICE
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// mos6581_device - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
mos6581_device::mos6581_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
|
||||||
|
: device_t(mconfig, type, name, tag, owner, clock),
|
||||||
|
device_sound_interface(mconfig, *this),
|
||||||
|
m_read_potx(*this),
|
||||||
|
m_read_poty(*this),
|
||||||
|
m_stream(NULL),
|
||||||
|
m_variant(variant)
|
||||||
|
{
|
||||||
|
m_token = global_alloc_clear(SID6581_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
mos6581_device::mos6581_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
|
: device_t(mconfig, MOS6581, "MOS6581", tag, owner, clock),
|
||||||
|
device_sound_interface(mconfig, *this),
|
||||||
|
m_read_potx(*this),
|
||||||
|
m_read_poty(*this),
|
||||||
|
m_stream(NULL),
|
||||||
|
m_variant(TYPE_6581)
|
||||||
|
{
|
||||||
|
m_token = global_alloc_clear(SID6581_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// mos8580_device - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
mos8580_device::mos8580_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
|
: mos6581_device(mconfig, MOS8580, "MOS8580", tag, owner, clock, TYPE_8580)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_start - device-specific startup
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mos6581_device::device_start()
|
||||||
|
{
|
||||||
|
// resolve callbacks
|
||||||
|
m_read_potx.resolve_safe(0xff);
|
||||||
|
m_read_poty.resolve_safe(0xff);
|
||||||
|
|
||||||
|
// create sound stream
|
||||||
|
m_stream = machine().sound().stream_alloc(*this, 0, 1, machine().sample_rate());
|
||||||
|
|
||||||
|
// initialize SID engine
|
||||||
|
m_token->device = this;
|
||||||
|
m_token->mixer_channel = m_stream;
|
||||||
|
m_token->PCMfreq = machine().sample_rate();
|
||||||
|
m_token->clock = clock();
|
||||||
|
m_token->type = m_variant;
|
||||||
|
|
||||||
|
sid6581_init(m_token);
|
||||||
|
sidInitWaveformTables(m_variant);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_reset - device-specific reset
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mos6581_device::device_reset()
|
||||||
|
{
|
||||||
|
sidEmuReset(m_token);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// sound_stream_update - handle update requests for
|
||||||
|
// our sound stream
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void mos6581_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
|
||||||
|
{
|
||||||
|
sidEmuFillBuffer(m_token, outputs[0], samples);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// read -
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
READ8_MEMBER( mos6581_device::read )
|
||||||
|
{
|
||||||
|
return sid6581_port_r(machine(), m_token, offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// write -
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
WRITE8_MEMBER( mos6581_device::write )
|
||||||
|
{
|
||||||
|
sid6581_port_w(m_token, offset, data);
|
||||||
|
}
|
108
src/emu/sound/mos6581.h
Normal file
108
src/emu/sound/mos6581.h
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
/**********************************************************************
|
||||||
|
|
||||||
|
MOS 6581/8580 Sound Interface Device emulation
|
||||||
|
|
||||||
|
Copyright MESS Team.
|
||||||
|
Visit http://mamedev.org for licensing and usage restrictions.
|
||||||
|
|
||||||
|
**********************************************************************
|
||||||
|
_____ _____
|
||||||
|
CAP1A 1 |* \_/ | 28 Vdd
|
||||||
|
CAP1B 2 | | 27 AUDIO OUT
|
||||||
|
CAP2A 3 | | 26 EXT IN
|
||||||
|
CAP2B 4 | | 25 Vcc
|
||||||
|
_RES 5 | | 24 POTX
|
||||||
|
phi2 6 | | 23 POTY
|
||||||
|
R/_W 7 | MOS6581 | 22 D7
|
||||||
|
_CS 8 | MOS8580 | 21 D6
|
||||||
|
A0 9 | | 20 D5
|
||||||
|
A1 10 | | 19 D4
|
||||||
|
A2 11 | | 18 D3
|
||||||
|
A3 12 | | 17 D2
|
||||||
|
A4 13 | | 16 D1
|
||||||
|
GND 14 |_____________| 15 D0
|
||||||
|
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __MOS6581__
|
||||||
|
#define __MOS6581__
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// INTERFACE CONFIGURATION MACROS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
#define MCFG_MOS6581_POTXY_CALLBACKS(_potx, _poty) \
|
||||||
|
downcast<mos6581_device *>(device)->set_callbacks(DEVCB2_##_potx, DEVCB2_##_poty);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// ======================> mos6581_device
|
||||||
|
|
||||||
|
struct SID6581_t;
|
||||||
|
|
||||||
|
class mos6581_device : public device_t,
|
||||||
|
public device_sound_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
mos6581_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
||||||
|
mos6581_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
template<class _potx, class _poty> void set_callbacks(_potx potx, _poty poty) {
|
||||||
|
m_read_potx.set_callback(potx);
|
||||||
|
m_read_poty.set_callback(poty);
|
||||||
|
}
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER( read );
|
||||||
|
DECLARE_WRITE8_MEMBER( write );
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
TYPE_6581,
|
||||||
|
TYPE_8580
|
||||||
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual void device_start();
|
||||||
|
virtual void device_reset();
|
||||||
|
|
||||||
|
// device_sound_interface overrides
|
||||||
|
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
|
||||||
|
|
||||||
|
private:
|
||||||
|
devcb2_read8 m_read_potx;
|
||||||
|
devcb2_read8 m_read_poty;
|
||||||
|
|
||||||
|
sound_stream *m_stream;
|
||||||
|
|
||||||
|
int m_variant;
|
||||||
|
|
||||||
|
SID6581_t *m_token;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> mos8580_device
|
||||||
|
|
||||||
|
class mos8580_device : public mos6581_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
mos8580_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// device type definition
|
||||||
|
extern const device_type MOS6581;
|
||||||
|
extern const device_type MOS8580;
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -84,18 +84,6 @@
|
|||||||
#define TED7360_VRETRACERATE ((m_clock == TED7360PAL_CLOCK) ? TED7360PAL_VRETRACERATE : TED7360NTSC_VRETRACERATE)
|
#define TED7360_VRETRACERATE ((m_clock == TED7360PAL_CLOCK) ? TED7360PAL_VRETRACERATE : TED7360NTSC_VRETRACERATE)
|
||||||
#define TED7360_LINES ((m_clock == TED7360PAL_CLOCK) ? TED7360PAL_LINES : TED7360NTSC_LINES)
|
#define TED7360_LINES ((m_clock == TED7360PAL_CLOCK) ? TED7360PAL_LINES : TED7360NTSC_LINES)
|
||||||
|
|
||||||
static attotime TEDTIME_IN_CYCLES(int cycles)
|
|
||||||
{
|
|
||||||
double d = (double)(cycles) / clock();
|
|
||||||
return attotime::from_double(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int TEDTIME_TO_CYCLES(attotime t)
|
|
||||||
{
|
|
||||||
double d = t.as_double();
|
|
||||||
return (int)(d * clock());
|
|
||||||
}
|
|
||||||
|
|
||||||
static const rgb_t PALETTE[] =
|
static const rgb_t PALETTE[] =
|
||||||
{
|
{
|
||||||
/* black, white, red, cyan */
|
/* black, white, red, cyan */
|
||||||
@ -210,7 +198,7 @@ inline void mos7360_device::set_interrupt(int mask)
|
|||||||
{
|
{
|
||||||
//DBG_LOG(1, "ted7360", ("irq start %.2x\n", mask));
|
//DBG_LOG(1, "ted7360", ("irq start %.2x\n", mask));
|
||||||
m_reg[9] |= 0x80;
|
m_reg[9] |= 0x80;
|
||||||
m_out_irq_func(ASSERT_LINE);
|
m_write_irq(ASSERT_LINE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_reg[9] |= mask;
|
m_reg[9] |= mask;
|
||||||
@ -223,7 +211,7 @@ inline void mos7360_device::clear_interrupt(int mask)
|
|||||||
{
|
{
|
||||||
DBG_LOG(1, "ted7360", ("irq end %.2x\n", mask));
|
DBG_LOG(1, "ted7360", ("irq end %.2x\n", mask));
|
||||||
m_reg[9] &= ~0x80;
|
m_reg[9] &= ~0x80;
|
||||||
m_out_irq_func(CLEAR_LINE);
|
m_write_irq(CLEAR_LINE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,33 +259,13 @@ mos7360_device::mos7360_device(const machine_config &mconfig, const char *tag, d
|
|||||||
device_memory_interface(mconfig, *this),
|
device_memory_interface(mconfig, *this),
|
||||||
device_sound_interface(mconfig, *this),
|
device_sound_interface(mconfig, *this),
|
||||||
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 16, 0, NULL, *ADDRESS_MAP_NAME(mos7360_videoram_map)),
|
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 16, 0, NULL, *ADDRESS_MAP_NAME(mos7360_videoram_map)),
|
||||||
|
m_write_irq(*this),
|
||||||
|
m_read_k(*this),
|
||||||
m_stream(NULL)
|
m_stream(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_config_complete - perform any
|
|
||||||
// operations now that the configuration is
|
|
||||||
// complete
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void mos7360_device::device_config_complete()
|
|
||||||
{
|
|
||||||
// inherit a copy of the static data
|
|
||||||
const mos7360_interface *intf = reinterpret_cast<const mos7360_interface *>(static_config());
|
|
||||||
if (intf != NULL)
|
|
||||||
*static_cast<mos7360_interface *>(this) = *intf;
|
|
||||||
|
|
||||||
// or initialize to defaults if none provided
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
|
|
||||||
memset(&m_in_k_cb, 0, sizeof(m_in_k_cb));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// device_start - device-specific startup
|
// device_start - device-specific startup
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -313,13 +281,17 @@ void mos7360_device::device_start()
|
|||||||
assert(m_cpu != NULL);
|
assert(m_cpu != NULL);
|
||||||
|
|
||||||
// resolve callbacks
|
// resolve callbacks
|
||||||
m_out_irq_func.resolve(m_out_irq_cb, *this);
|
m_write_irq.resolve_safe();
|
||||||
m_in_k_func.resolve(m_in_k_cb, *this);
|
m_read_k.resolve_safe(0xff);
|
||||||
|
|
||||||
// allocate timers
|
// allocate timers
|
||||||
m_timer1 = timer_alloc(TIMER_ID_1);
|
m_timer1 = timer_alloc(TIMER_ID_1);
|
||||||
m_timer2 = timer_alloc(TIMER_ID_2);
|
m_timer2 = timer_alloc(TIMER_ID_2);
|
||||||
m_timer3 = timer_alloc(TIMER_ID_3);
|
m_timer3 = timer_alloc(TIMER_ID_3);
|
||||||
|
m_line_timer = timer_alloc(TIMER_LINE);
|
||||||
|
m_line_timer->adjust(m_screen->scan_period(), 0, m_screen->scan_period());
|
||||||
|
m_frame_timer = timer_alloc(TIMER_FRAME);
|
||||||
|
m_frame_timer->adjust(m_screen->frame_period(), 0, m_screen->frame_period());
|
||||||
|
|
||||||
// allocate screen bitmap
|
// allocate screen bitmap
|
||||||
m_screen->register_screen_bitmap(m_bitmap);
|
m_screen->register_screen_bitmap(m_bitmap);
|
||||||
@ -421,22 +393,30 @@ void mos7360_device::device_timer(emu_timer &timer, device_timer_id id, int para
|
|||||||
{
|
{
|
||||||
case TIMER_ID_1:
|
case TIMER_ID_1:
|
||||||
// proved by digisound of several intros like eoroidpro
|
// proved by digisound of several intros like eoroidpro
|
||||||
m_timer1->adjust(TEDTIME_IN_CYCLES(TIMER1), 1);
|
m_timer1->adjust(clocks_to_attotime(TIMER1), 1);
|
||||||
m_timer1_active = 1;
|
m_timer1_active = 1;
|
||||||
set_interrupt(0x08);
|
set_interrupt(0x08);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIMER_ID_2:
|
case TIMER_ID_2:
|
||||||
m_timer2->adjust(TEDTIME_IN_CYCLES(0x10000), 2);
|
m_timer2->adjust(clocks_to_attotime(0x10000), 2);
|
||||||
m_timer2_active = 1;
|
m_timer2_active = 1;
|
||||||
set_interrupt(0x10);
|
set_interrupt(0x10);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIMER_ID_3:
|
case TIMER_ID_3:
|
||||||
m_timer3->adjust(TEDTIME_IN_CYCLES(0x10000), 3);
|
m_timer3->adjust(clocks_to_attotime(0x10000), 3);
|
||||||
m_timer3_active = 1;
|
m_timer3_active = 1;
|
||||||
set_interrupt(0x40);
|
set_interrupt(0x40);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TIMER_LINE:
|
||||||
|
raster_interrupt_gen();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TIMER_FRAME:
|
||||||
|
frame_interrupt_gen();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -759,7 +739,7 @@ void mos7360_device::drawlines(int first, int last)
|
|||||||
|
|
||||||
void mos7360_device::soundport_w(int offset, int data)
|
void mos7360_device::soundport_w(int offset, int data)
|
||||||
{
|
{
|
||||||
// int old = m_reg[offset];
|
// int old = m_reg[offset & 0x1f];
|
||||||
m_stream->update();
|
m_stream->update();
|
||||||
|
|
||||||
switch (offset)
|
switch (offset)
|
||||||
@ -767,9 +747,9 @@ void mos7360_device::soundport_w(int offset, int data)
|
|||||||
case 0x0e:
|
case 0x0e:
|
||||||
case 0x12:
|
case 0x12:
|
||||||
if (offset == 0x12)
|
if (offset == 0x12)
|
||||||
m_reg[offset] = (m_reg[offset] & ~3) | (data & 3);
|
m_reg[offset & 0x1f] = (m_reg[offset & 0x1f] & ~3) | (data & 3);
|
||||||
else
|
else
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
|
|
||||||
m_tone1samples = machine().sample_rate() / TONE_FREQUENCY (TONE1_VALUE);
|
m_tone1samples = machine().sample_rate() / TONE_FREQUENCY (TONE1_VALUE);
|
||||||
DBG_LOG(1, "ted7360", ("tone1 %d %d sample:%d\n", TONE1_VALUE, TONE_FREQUENCY(TONE1_VALUE), m_tone1samples));
|
DBG_LOG(1, "ted7360", ("tone1 %d %d sample:%d\n", TONE1_VALUE, TONE_FREQUENCY(TONE1_VALUE), m_tone1samples));
|
||||||
@ -777,7 +757,7 @@ void mos7360_device::soundport_w(int offset, int data)
|
|||||||
|
|
||||||
case 0xf:
|
case 0xf:
|
||||||
case 0x10:
|
case 0x10:
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
|
|
||||||
m_tone2samples = machine().sample_rate() / TONE_FREQUENCY (TONE2_VALUE);
|
m_tone2samples = machine().sample_rate() / TONE_FREQUENCY (TONE2_VALUE);
|
||||||
DBG_LOG (1, "ted7360", ("tone2 %d %d sample:%d\n", TONE2_VALUE, TONE_FREQUENCY(TONE2_VALUE), m_tone2samples));
|
DBG_LOG (1, "ted7360", ("tone2 %d %d sample:%d\n", TONE2_VALUE, TONE_FREQUENCY(TONE2_VALUE), m_tone2samples));
|
||||||
@ -790,7 +770,7 @@ void mos7360_device::soundport_w(int offset, int data)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x11:
|
case 0x11:
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
DBG_LOG(1, "ted7360", ("%s volume %d, %s %s %s\n", TONE_ON?"on":"off",
|
DBG_LOG(1, "ted7360", ("%s volume %d, %s %s %s\n", TONE_ON?"on":"off",
|
||||||
VOLUME, TONE1_ON?"tone1":"", TONE2_ON?"tone2":"", NOISE_ON?"noise":""));
|
VOLUME, TONE1_ON?"tone1":"", TONE2_ON?"tone2":"", NOISE_ON?"noise":""));
|
||||||
|
|
||||||
@ -806,95 +786,82 @@ void mos7360_device::soundport_w(int offset, int data)
|
|||||||
// read - register read
|
// read - register read
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
READ8_MEMBER( mos7360_device::read )
|
UINT8 mos7360_device::read(address_space &space, offs_t offset, int &cs0, int &cs1)
|
||||||
{
|
{
|
||||||
int val = 0;
|
UINT8 val = m_last_data;
|
||||||
|
|
||||||
|
cs0 = cs0_r(offset);
|
||||||
|
cs1 = cs1_r(offset);
|
||||||
|
|
||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0xff00:
|
||||||
if (m_timer1)
|
val = attotime_to_clocks(m_timer1->remaining()) & 0xff;
|
||||||
val = TEDTIME_TO_CYCLES(m_timer1->remaining()) & 0xff;
|
|
||||||
else
|
|
||||||
val = m_reg[offset];
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 0xff01:
|
||||||
if (m_timer1)
|
val = attotime_to_clocks(m_timer1->remaining()) >> 8;
|
||||||
val = TEDTIME_TO_CYCLES(m_timer1->remaining()) >> 8;
|
|
||||||
else
|
|
||||||
val = m_reg[offset];
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 0xff02:
|
||||||
if (m_timer2)
|
val = attotime_to_clocks(m_timer2->remaining()) & 0xff;
|
||||||
val = TEDTIME_TO_CYCLES(m_timer2->remaining()) & 0xff;
|
|
||||||
else
|
|
||||||
val = m_reg[offset];
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 0xff03:
|
||||||
if (m_timer2)
|
val = attotime_to_clocks(m_timer2->remaining()) >> 8;
|
||||||
val = TEDTIME_TO_CYCLES(m_timer2->remaining()) >> 8;
|
|
||||||
else
|
|
||||||
val = m_reg[offset];
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 0xff04:
|
||||||
if (m_timer3)
|
val = attotime_to_clocks(m_timer3->remaining()) & 0xff;
|
||||||
val = TEDTIME_TO_CYCLES(m_timer3->remaining()) & 0xff;
|
|
||||||
else
|
|
||||||
val = m_reg[offset];
|
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 0xff05:
|
||||||
if (m_timer3)
|
val = attotime_to_clocks(m_timer3->remaining()) >> 8;
|
||||||
val = TEDTIME_TO_CYCLES(m_timer3->remaining()) >> 8;
|
|
||||||
else
|
|
||||||
val = m_reg[offset];
|
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 0xff07:
|
||||||
val = (m_reg[offset] & ~0x40);
|
val = (m_reg[offset & 0x1f] & ~0x40);
|
||||||
if (m_clock == TED7360NTSC_CLOCK)
|
if (m_clock == TED7360NTSC_CLOCK)
|
||||||
val |= 0x40;
|
val |= 0x40;
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 0xff13:
|
||||||
val = m_reg[offset] | 1;
|
val = m_reg[offset & 0x1f] & ~1;
|
||||||
break;
|
|
||||||
case 0xa:
|
|
||||||
val = m_reg[offset];
|
|
||||||
break;
|
|
||||||
case 0xb:
|
|
||||||
val = m_reg[offset];
|
|
||||||
break;
|
|
||||||
case 0x0c:
|
|
||||||
val = m_reg[offset] |= 0xfc;
|
|
||||||
break;
|
|
||||||
case 0x13:
|
|
||||||
val = m_reg[offset] & ~1;
|
|
||||||
if (m_rom)
|
if (m_rom)
|
||||||
val |= 1;
|
val |= 1;
|
||||||
break;
|
break;
|
||||||
case 0x1c: /*rasterline */
|
case 0xff1c: /*rasterline */
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
val = ((RASTERLINE_2_C16(m_rasterline) & 0x100) >> 8) | 0xfe; /* expected by matrix */
|
val = ((RASTERLINE_2_C16(m_rasterline) & 0x100) >> 8) | 0xfe; /* expected by matrix */
|
||||||
break;
|
break;
|
||||||
case 0x1d: /*rasterline */
|
case 0xff1d: /*rasterline */
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
val = RASTERLINE_2_C16(m_rasterline) & 0xff;
|
val = RASTERLINE_2_C16(m_rasterline) & 0xff;
|
||||||
break;
|
break;
|
||||||
case 0x1e: /*rastercolumn */
|
case 0xff1e: /*rastercolumn */
|
||||||
val = rastercolumn() / 2; /* pengo >=0x99 */
|
val = rastercolumn() / 2; /* pengo >=0x99 */
|
||||||
break;
|
break;
|
||||||
case 0x1f:
|
case 0xff1f:
|
||||||
val = ((m_rasterline & 7) << 4) | (m_reg[offset] & 0x0f);
|
val = ((m_rasterline & 7) << 4) | (m_reg[offset & 0x1f] & 0x0f);
|
||||||
DBG_LOG(1, "port_w", ("read from cursorblink %.2x\n", val));
|
DBG_LOG(1, "port_w", ("read from cursorblink %.2x\n", val));
|
||||||
break;
|
break;
|
||||||
default:
|
case 0xff06:
|
||||||
val = m_reg[offset];
|
case 0xff08:
|
||||||
|
case 0xff09:
|
||||||
|
case 0xff0a:
|
||||||
|
case 0xff0b:
|
||||||
|
case 0xff0c:
|
||||||
|
case 0xff0d:
|
||||||
|
case 0xff0e:
|
||||||
|
case 0xff0f:
|
||||||
|
case 0xff10:
|
||||||
|
case 0xff11:
|
||||||
|
case 0xff12:
|
||||||
|
case 0xff14:
|
||||||
|
case 0xff15:
|
||||||
|
case 0xff16:
|
||||||
|
case 0xff17:
|
||||||
|
case 0xff18:
|
||||||
|
case 0xff19:
|
||||||
|
case 0xff1a:
|
||||||
|
case 0xff1b:
|
||||||
|
val = m_reg[offset & 0x1f];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((offset != 8) && (offset >= 6) && (offset != 0x1c) && (offset != 0x1d) && (offset != 9) && ((offset < 0x15) || (offset > 0x19)))
|
|
||||||
{
|
|
||||||
DBG_LOG(1, "port_r", ("%.2x:%.2x\n", offset, val));
|
|
||||||
}
|
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -903,75 +870,74 @@ READ8_MEMBER( mos7360_device::read )
|
|||||||
// write - register write
|
// write - register write
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
WRITE8_MEMBER( mos7360_device::write )
|
void mos7360_device::write(address_space &space, offs_t offset, UINT8 data, int &cs0, int &cs1)
|
||||||
{
|
{
|
||||||
int old;
|
int old;
|
||||||
|
|
||||||
if ((offset != 8) && ((offset < 0x15) || (offset > 0x19)))
|
cs0 = cs0_r(offset);
|
||||||
|
cs1 = cs1_r(offset);
|
||||||
|
|
||||||
|
switch (offset)
|
||||||
{
|
{
|
||||||
DBG_LOG(1, "port_w", ("%.2x:%.2x\n", offset, data));
|
case 0xff0e:
|
||||||
|
case 0xff0f:
|
||||||
|
case 0xff10:
|
||||||
|
case 0xff11:
|
||||||
|
case 0xff12:
|
||||||
|
soundport_w(offset & 0x1f, data);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
case 0xe:
|
case 0xff00: /* stop timer 1 */
|
||||||
case 0xf:
|
m_reg[offset & 0x1f] = data;
|
||||||
case 0x10:
|
|
||||||
case 0x11:
|
|
||||||
case 0x12:
|
|
||||||
soundport_w(offset, data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
case 0: /* stop timer 1 */
|
|
||||||
m_reg[offset] = data;
|
|
||||||
|
|
||||||
if (m_timer1_active)
|
if (m_timer1_active)
|
||||||
{
|
{
|
||||||
m_reg[1] = TEDTIME_TO_CYCLES(m_timer1->remaining()) >> 8;
|
m_reg[1] = attotime_to_clocks(m_timer1->remaining()) >> 8;
|
||||||
m_timer1->reset();
|
m_timer1->reset();
|
||||||
m_timer1_active = 0;
|
m_timer1_active = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1: /* start timer 1 */
|
case 0xff01: /* start timer 1 */
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_timer1->adjust(TEDTIME_IN_CYCLES(TIMER1), 1);
|
m_timer1->adjust(clocks_to_attotime(TIMER1), 1);
|
||||||
m_timer1_active = 1;
|
m_timer1_active = 1;
|
||||||
break;
|
break;
|
||||||
case 2: /* stop timer 2 */
|
case 0xff02: /* stop timer 2 */
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
if (m_timer2_active)
|
if (m_timer2_active)
|
||||||
{
|
{
|
||||||
m_reg[3] = TEDTIME_TO_CYCLES(m_timer2->remaining()) >> 8;
|
m_reg[3] = attotime_to_clocks(m_timer2->remaining()) >> 8;
|
||||||
m_timer2->reset();
|
m_timer2->reset();
|
||||||
m_timer2_active = 0;
|
m_timer2_active = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: /* start timer 2 */
|
case 0xff03: /* start timer 2 */
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_timer2->adjust(TEDTIME_IN_CYCLES(TIMER2), 2);
|
m_timer2->adjust(clocks_to_attotime(TIMER2), 2);
|
||||||
m_timer2_active = 1;
|
m_timer2_active = 1;
|
||||||
break;
|
break;
|
||||||
case 4: /* stop timer 3 */
|
case 0xff04: /* stop timer 3 */
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
if (m_timer3_active)
|
if (m_timer3_active)
|
||||||
{
|
{
|
||||||
m_reg[5] = TEDTIME_TO_CYCLES(m_timer3->remaining()) >> 8;
|
m_reg[5] = attotime_to_clocks(m_timer3->remaining()) >> 8;
|
||||||
m_timer3->reset();
|
m_timer3->reset();
|
||||||
m_timer3_active = 0;
|
m_timer3_active = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5: /* start timer 3 */
|
case 0xff05: /* start timer 3 */
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_timer3->adjust(TEDTIME_IN_CYCLES(TIMER3), 3);
|
m_timer3->adjust(clocks_to_attotime(TIMER3), 3);
|
||||||
m_timer3_active = 1;
|
m_timer3_active = 1;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 0xff06:
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
if (LINES25)
|
if (LINES25)
|
||||||
{
|
{
|
||||||
m_y_begin = 0;
|
m_y_begin = 0;
|
||||||
@ -985,11 +951,11 @@ WRITE8_MEMBER( mos7360_device::write )
|
|||||||
m_chargenaddr = CHARGENADDR;
|
m_chargenaddr = CHARGENADDR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 0xff07:
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
if (COLUMNS40)
|
if (COLUMNS40)
|
||||||
{
|
{
|
||||||
m_x_begin = 0;
|
m_x_begin = 0;
|
||||||
@ -1004,10 +970,10 @@ WRITE8_MEMBER( mos7360_device::write )
|
|||||||
m_chargenaddr = CHARGENADDR;
|
m_chargenaddr = CHARGENADDR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 0xff08:
|
||||||
m_reg[offset] = m_in_k_func(data);
|
m_reg[offset & 0x1f] = m_read_k(data);
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 0xff09:
|
||||||
if (data & 0x08)
|
if (data & 0x08)
|
||||||
clear_interrupt(8);
|
clear_interrupt(8);
|
||||||
if (data & 0x10)
|
if (data & 0x10)
|
||||||
@ -1017,9 +983,9 @@ WRITE8_MEMBER( mos7360_device::write )
|
|||||||
if (data & 0x02)
|
if (data & 0x02)
|
||||||
clear_interrupt(2);
|
clear_interrupt(2);
|
||||||
break;
|
break;
|
||||||
case 0xa:
|
case 0xff0a:
|
||||||
old = data;
|
old = data;
|
||||||
m_reg[offset] = data | 0xa0;
|
m_reg[offset & 0x1f] = data | 0xa0;
|
||||||
#if 0
|
#if 0
|
||||||
m_reg[9] = (m_reg[9] & 0xa1) | (m_reg[9] & data & 0x5e);
|
m_reg[9] = (m_reg[9] & 0xa1) | (m_reg[9] & data & 0x5e);
|
||||||
if (m_reg[9] & 0x80)
|
if (m_reg[9] & 0x80)
|
||||||
@ -1030,101 +996,110 @@ WRITE8_MEMBER( mos7360_device::write )
|
|||||||
/* DBG_LOG(1,"set rasterline hi",("soll:%d\n",RASTERLINE)); */
|
/* DBG_LOG(1,"set rasterline hi",("soll:%d\n",RASTERLINE)); */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0xb:
|
case 0xff0b:
|
||||||
if (data != m_reg[offset])
|
if (data != m_reg[offset & 0x1f])
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
/* DBG_LOG(1,"set rasterline lo",("soll:%d\n",RASTERLINE)); */
|
/* DBG_LOG(1,"set rasterline lo",("soll:%d\n",RASTERLINE)); */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0xc:
|
case 0xff0c:
|
||||||
case 0xd:
|
case 0xff0d:
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x12:
|
case 0xff12:
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_bitmapaddr = BITMAPADDR;
|
m_bitmapaddr = BITMAPADDR;
|
||||||
m_chargenaddr = CHARGENADDR;
|
m_chargenaddr = CHARGENADDR;
|
||||||
DBG_LOG(3, "port_w", ("bitmap %.4x %s\n", BITMAPADDR, INROM ? "rom" : "ram"));
|
DBG_LOG(3, "port_w", ("bitmap %.4x %s\n", BITMAPADDR, INROM ? "rom" : "ram"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x13:
|
case 0xff13:
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_chargenaddr = CHARGENADDR;
|
m_chargenaddr = CHARGENADDR;
|
||||||
DBG_LOG(3, "port_w", ("chargen %.4x %s %d\n", CHARGENADDR, data & 2 ? "" : "doubleclock", data & 1));
|
DBG_LOG(3, "port_w", ("chargen %.4x %s %d\n", CHARGENADDR, data & 2 ? "" : "doubleclock", data & 1));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x14:
|
case 0xff14:
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_videoaddr = VIDEOADDR;
|
m_videoaddr = VIDEOADDR;
|
||||||
DBG_LOG(3, "port_w", ("videoram %.4x\n", VIDEOADDR));
|
DBG_LOG(3, "port_w", ("videoram %.4x\n", VIDEOADDR));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x15: /* backgroundcolor */
|
case 0xff15: /* backgroundcolor */
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_monoinversed[1] = m_mono[0] = m_bitmapmulti[0] = m_multi[0] = m_colors[0] = BACKGROUNDCOLOR;
|
m_monoinversed[1] = m_mono[0] = m_bitmapmulti[0] = m_multi[0] = m_colors[0] = BACKGROUNDCOLOR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x16: /* foregroundcolor */
|
case 0xff16: /* foregroundcolor */
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_bitmapmulti[3] = m_multi[1] = m_colors[1] = FOREGROUNDCOLOR;
|
m_bitmapmulti[3] = m_multi[1] = m_colors[1] = FOREGROUNDCOLOR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x17: /* multicolor 1 */
|
case 0xff17: /* multicolor 1 */
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_multi[2] = m_colors[2] = MULTICOLOR1;
|
m_multi[2] = m_colors[2] = MULTICOLOR1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x18: /* multicolor 2 */
|
case 0xff18: /* multicolor 2 */
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_colors[3] = MULTICOLOR2;
|
m_colors[3] = MULTICOLOR2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x19: /* framecolor */
|
case 0xff19: /* framecolor */
|
||||||
if (m_reg[offset] != data)
|
if (m_reg[offset & 0x1f] != data)
|
||||||
{
|
{
|
||||||
drawlines(m_lastline, m_rasterline);
|
drawlines(m_lastline, m_rasterline);
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
m_colors[4] = FRAMECOLOR;
|
m_colors[4] = FRAMECOLOR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x1c:
|
case 0xff1c:
|
||||||
m_reg[offset] = data; /*? */
|
m_reg[offset & 0x1f] = data; /*? */
|
||||||
DBG_LOG(1, "port_w", ("write to rasterline high %.2x\n",
|
DBG_LOG(1, "port_w", ("write to rasterline high %.2x\n",
|
||||||
data));
|
data));
|
||||||
break;
|
break;
|
||||||
case 0x1f:
|
case 0xff1f:
|
||||||
m_reg[offset] = data;
|
m_reg[offset & 0x1f] = data;
|
||||||
DBG_LOG(1, "port_w", ("write to cursorblink %.2x\n", data));
|
DBG_LOG(1, "port_w", ("write to cursorblink %.2x\n", data));
|
||||||
break;
|
break;
|
||||||
default:
|
case 0xff3e:
|
||||||
m_reg[offset] = data;
|
m_rom = 1;
|
||||||
|
break;
|
||||||
|
case 0xff3f:
|
||||||
|
m_rom = 0;
|
||||||
|
break;
|
||||||
|
case 0xff1a:
|
||||||
|
case 0xff1b:
|
||||||
|
case 0xff1d:
|
||||||
|
case 0xff1e:
|
||||||
|
m_reg[offset & 0x1f] = data;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1141,16 +1116,6 @@ UINT32 mos7360_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( mos7360_device::rom_switch_w )
|
|
||||||
{
|
|
||||||
m_rom = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
READ_LINE_MEMBER( mos7360_device::rom_switch_r )
|
|
||||||
{
|
|
||||||
return m_rom;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mos7360_device::frame_interrupt_gen()
|
void mos7360_device::frame_interrupt_gen()
|
||||||
{
|
{
|
||||||
if ((m_reg[0x1f] & 0xf) >= 0x0f)
|
if ((m_reg[0x1f] & 0xf) >= 0x0f)
|
||||||
@ -1183,16 +1148,6 @@ void mos7360_device::raster_interrupt_gen()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// bus_r - data bus read
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
UINT8 mos7360_device::bus_r()
|
|
||||||
{
|
|
||||||
return m_last_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// cs0_r - chip select 0 read
|
// cs0_r - chip select 0 read
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -1209,7 +1164,7 @@ int mos7360_device::cs0_r(offs_t offset)
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// cs0_r - chip select 1 read
|
// cs1_r - chip select 1 read
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
int mos7360_device::cs1_r(offs_t offset)
|
int mos7360_device::cs1_r(offs_t offset)
|
@ -43,7 +43,7 @@
|
|||||||
DEVICE CONFIGURATION MACROS
|
DEVICE CONFIGURATION MACROS
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#define MCFG_MOS7360_ADD(_tag, _screen_tag, _clock, _config, _videoram_map) \
|
#define MCFG_MOS7360_ADD(_tag, _screen_tag, _cpu_tag, _clock, _videoram_map, _irq, _k) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
MCFG_SCREEN_REFRESH_RATE(TED7360PAL_VRETRACERATE) \
|
MCFG_SCREEN_REFRESH_RATE(TED7360PAL_VRETRACERATE) \
|
||||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \
|
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \
|
||||||
@ -51,12 +51,8 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0, 336 - 1, 0, 216 - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(0, 336 - 1, 0, 216 - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos7360_device, screen_update) \
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos7360_device, screen_update) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS7360, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS7360, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map)
|
downcast<mos7360_device *>(device)->set_callbacks(_screen_tag, _cpu_tag, DEVCB2_##_irq, DEVCB2_##_k);
|
||||||
|
|
||||||
|
|
||||||
#define MOS7360_INTERFACE(_name) \
|
|
||||||
const mos7360_interface (_name) =
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -89,49 +85,31 @@
|
|||||||
TYPE DEFINITIONS
|
TYPE DEFINITIONS
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
// ======================> mos7360_interface
|
|
||||||
|
|
||||||
struct mos7360_interface
|
|
||||||
{
|
|
||||||
const char *m_screen_tag;
|
|
||||||
const char *m_cpu_tag;
|
|
||||||
|
|
||||||
devcb_write_line m_out_irq_cb;
|
|
||||||
|
|
||||||
devcb_read8 m_in_k_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> mos7360_device
|
// ======================> mos7360_device
|
||||||
|
|
||||||
class mos7360_device : public device_t,
|
class mos7360_device : public device_t,
|
||||||
public device_memory_interface,
|
public device_memory_interface,
|
||||||
public device_sound_interface,
|
public device_sound_interface
|
||||||
public mos7360_interface
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
//mos7360_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
//mos7360_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
||||||
mos7360_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
mos7360_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
template<class _irq, class _k> void set_callbacks(const char *screen_tag, const char *cpu_tag, _irq irq, _k k) {
|
||||||
|
m_screen_tag = screen_tag;
|
||||||
|
m_cpu_tag = cpu_tag;
|
||||||
|
m_write_irq.set_callback(irq);
|
||||||
|
m_read_k.set_callback(k);
|
||||||
|
}
|
||||||
|
|
||||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
|
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER( read );
|
UINT8 read(address_space &space, offs_t offset, int &cs0, int &cs1);
|
||||||
DECLARE_WRITE8_MEMBER( write );
|
void write(address_space &space, offs_t offset, UINT8 data, int &cs0, int &cs1);
|
||||||
|
|
||||||
int cs0_r(offs_t offset);
|
|
||||||
int cs1_r(offs_t offset);
|
|
||||||
|
|
||||||
UINT8 bus_r();
|
|
||||||
|
|
||||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
// horrible crap code
|
|
||||||
DECLARE_WRITE_LINE_MEMBER( rom_switch_w );
|
|
||||||
DECLARE_READ_LINE_MEMBER( rom_switch_r );
|
|
||||||
void frame_interrupt_gen();
|
|
||||||
void raster_interrupt_gen();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -142,11 +120,12 @@ protected:
|
|||||||
{
|
{
|
||||||
TIMER_ID_1,
|
TIMER_ID_1,
|
||||||
TIMER_ID_2,
|
TIMER_ID_2,
|
||||||
TIMER_ID_3
|
TIMER_ID_3,
|
||||||
|
TIMER_LINE,
|
||||||
|
TIMER_FRAME
|
||||||
};
|
};
|
||||||
|
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_config_complete();
|
|
||||||
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);
|
||||||
@ -167,12 +146,18 @@ protected:
|
|||||||
void draw_cursor(int ybegin, int yend, int yoff, int xoff, int color);
|
void draw_cursor(int ybegin, int yend, int yoff, int xoff, int color);
|
||||||
void drawlines(int first, int last);
|
void drawlines(int first, int last);
|
||||||
void soundport_w(int offset, int data);
|
void soundport_w(int offset, int data);
|
||||||
|
void frame_interrupt_gen();
|
||||||
|
void raster_interrupt_gen();
|
||||||
|
int cs0_r(offs_t offset);
|
||||||
|
int cs1_r(offs_t offset);
|
||||||
|
|
||||||
const address_space_config m_videoram_space_config;
|
const address_space_config m_videoram_space_config;
|
||||||
|
|
||||||
devcb_resolved_write_line m_out_irq_func;
|
devcb2_write_line m_write_irq;
|
||||||
devcb_resolved_read8 m_in_k_func;
|
devcb2_read8 m_read_k;
|
||||||
|
|
||||||
|
const char *m_screen_tag;
|
||||||
|
const char *m_cpu_tag;
|
||||||
screen_device *m_screen; // screen which sets bitmap properties
|
screen_device *m_screen; // screen which sets bitmap properties
|
||||||
cpu_device *m_cpu;
|
cpu_device *m_cpu;
|
||||||
sound_stream *m_stream;
|
sound_stream *m_stream;
|
||||||
@ -210,6 +195,9 @@ protected:
|
|||||||
m_noisesamples; /* count of samples to give out per tone */
|
m_noisesamples; /* count of samples to give out per tone */
|
||||||
|
|
||||||
int m_variant;
|
int m_variant;
|
||||||
|
|
||||||
|
emu_timer *m_line_timer;
|
||||||
|
emu_timer *m_frame_timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -8,7 +8,6 @@
|
|||||||
this part is for one chip,
|
this part is for one chip,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "sound/sid6581.h"
|
|
||||||
#include "sidvoice.h"
|
#include "sidvoice.h"
|
||||||
|
|
||||||
/* private area */
|
/* private area */
|
||||||
@ -20,7 +19,7 @@ struct SID6581_t
|
|||||||
devcb_resolved_read8 in_potx_func;
|
devcb_resolved_read8 in_potx_func;
|
||||||
devcb_resolved_read8 in_poty_func;
|
devcb_resolved_read8 in_poty_func;
|
||||||
|
|
||||||
SIDTYPE type;
|
int type;
|
||||||
UINT32 clock;
|
UINT32 clock;
|
||||||
|
|
||||||
UINT16 PCMfreq; // samplerate of the current systems soundcard/DAC
|
UINT16 PCMfreq; // samplerate of the current systems soundcard/DAC
|
||||||
|
@ -1,165 +0,0 @@
|
|||||||
/***************************************************************************
|
|
||||||
|
|
||||||
sid6581.c
|
|
||||||
|
|
||||||
MAME/MESS interface for SID6581 and SID8580 chips
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
#include "emu.h"
|
|
||||||
#include "sid6581.h"
|
|
||||||
#include "sid.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static SID6581_t *get_sid(device_t *device)
|
|
||||||
{
|
|
||||||
assert(device != NULL);
|
|
||||||
assert((device->type() == SID6581) || (device->type() == SID8580));
|
|
||||||
return (SID6581_t *) downcast<sid6581_device *>(device)->token();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static STREAM_UPDATE( sid_update )
|
|
||||||
{
|
|
||||||
SID6581_t *sid = (SID6581_t *) param;
|
|
||||||
sidEmuFillBuffer(sid, outputs[0], samples);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void sid_start(device_t *device, SIDTYPE sidtype)
|
|
||||||
{
|
|
||||||
SID6581_t *sid = get_sid(device);
|
|
||||||
const sid6581_interface *iface = (const sid6581_interface*) device->static_config();
|
|
||||||
assert(iface);
|
|
||||||
|
|
||||||
// resolve callbacks
|
|
||||||
sid->in_potx_func.resolve(iface->in_potx_cb, *device);
|
|
||||||
sid->in_poty_func.resolve(iface->in_poty_cb, *device);
|
|
||||||
|
|
||||||
sid->device = device;
|
|
||||||
sid->mixer_channel = device->machine().sound().stream_alloc(*device, 0, 1, device->machine().sample_rate(), (void *) sid, sid_update);
|
|
||||||
sid->PCMfreq = device->machine().sample_rate();
|
|
||||||
sid->clock = device->clock();
|
|
||||||
sid->type = sidtype;
|
|
||||||
|
|
||||||
sid6581_init(sid);
|
|
||||||
sidInitWaveformTables(sidtype);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static DEVICE_RESET( sid )
|
|
||||||
{
|
|
||||||
SID6581_t *sid = get_sid(device);
|
|
||||||
sidEmuReset(sid);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static DEVICE_START( sid6581 )
|
|
||||||
{
|
|
||||||
sid_start(device, MOS6581);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static DEVICE_START( sid8580 )
|
|
||||||
{
|
|
||||||
sid_start(device, MOS8580);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
READ8_MEMBER( sid6581_device::read )
|
|
||||||
{
|
|
||||||
return sid6581_port_r(machine(), get_sid(this), offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WRITE8_MEMBER( sid6581_device::write )
|
|
||||||
{
|
|
||||||
sid6581_port_w(get_sid(this), offset, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
const device_type SID6581 = &device_creator<sid6581_device>;
|
|
||||||
|
|
||||||
sid6581_device::sid6581_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
||||||
: device_t(mconfig, SID6581, "SID6581", tag, owner, clock),
|
|
||||||
device_sound_interface(mconfig, *this)
|
|
||||||
{
|
|
||||||
m_token = global_alloc_clear(SID6581_t);
|
|
||||||
}
|
|
||||||
sid6581_device::sid6581_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
|
|
||||||
: device_t(mconfig, type, name, tag, owner, clock),
|
|
||||||
device_sound_interface(mconfig, *this)
|
|
||||||
{
|
|
||||||
m_token = global_alloc_clear(SID6581_t);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_config_complete - perform any
|
|
||||||
// operations now that the configuration is
|
|
||||||
// complete
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void sid6581_device::device_config_complete()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_start - device-specific startup
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void sid6581_device::device_start()
|
|
||||||
{
|
|
||||||
DEVICE_START_NAME( sid6581 )(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_reset - device-specific reset
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void sid6581_device::device_reset()
|
|
||||||
{
|
|
||||||
DEVICE_RESET_NAME( sid )(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// sound_stream_update - handle a stream update
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void sid6581_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
|
|
||||||
{
|
|
||||||
// should never get here
|
|
||||||
fatalerror("sound_stream_update called; not applicable to legacy sound devices\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const device_type SID8580 = &device_creator<sid8580_device>;
|
|
||||||
|
|
||||||
sid8580_device::sid8580_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
||||||
: sid6581_device(mconfig, SID8580, "SID8580", tag, owner, clock)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_start - device-specific startup
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void sid8580_device::device_start()
|
|
||||||
{
|
|
||||||
DEVICE_START_NAME( sid8580 )(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// sound_stream_update - handle a stream update
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void sid8580_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
|
|
||||||
{
|
|
||||||
// should never get here
|
|
||||||
fatalerror("sound_stream_update called; not applicable to legacy sound devices\n");
|
|
||||||
}
|
|
@ -1,78 +0,0 @@
|
|||||||
/***************************************************************************
|
|
||||||
|
|
||||||
sid6581.h
|
|
||||||
|
|
||||||
MAME/MESS interface for SID6581 and SID8580 chips
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#ifndef __SID6581_H__
|
|
||||||
#define __SID6581_H__
|
|
||||||
|
|
||||||
#include "devlegcy.h"
|
|
||||||
|
|
||||||
|
|
||||||
enum SIDTYPE
|
|
||||||
{
|
|
||||||
MOS6581,
|
|
||||||
MOS8580
|
|
||||||
};
|
|
||||||
|
|
||||||
#define MOS6581_INTERFACE(name) \
|
|
||||||
const sid6581_interface (name) =
|
|
||||||
|
|
||||||
struct sid6581_interface
|
|
||||||
{
|
|
||||||
devcb_read8 in_potx_cb;
|
|
||||||
devcb_read8 in_poty_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SID6581_t;
|
|
||||||
|
|
||||||
class sid6581_device : public device_t,
|
|
||||||
public device_sound_interface
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
sid6581_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
||||||
sid6581_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
|
||||||
~sid6581_device() { global_free(m_token); }
|
|
||||||
|
|
||||||
// access to legacy token
|
|
||||||
void *token() const { assert(m_token != NULL); return m_token; }
|
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER( read );
|
|
||||||
DECLARE_WRITE8_MEMBER( write );
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// device-level overrides
|
|
||||||
virtual void device_config_complete();
|
|
||||||
virtual void device_start();
|
|
||||||
virtual void device_reset();
|
|
||||||
|
|
||||||
// sound stream update overrides
|
|
||||||
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
|
|
||||||
private:
|
|
||||||
// internal state
|
|
||||||
SID6581_t *m_token;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern const device_type SID6581;
|
|
||||||
|
|
||||||
class sid8580_device : public sid6581_device
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
sid8580_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
||||||
protected:
|
|
||||||
// device-level overrides
|
|
||||||
virtual void device_start();
|
|
||||||
|
|
||||||
// sound stream update overrides
|
|
||||||
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
|
|
||||||
};
|
|
||||||
|
|
||||||
extern const device_type SID8580;
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __SID6581_H__ */
|
|
@ -708,7 +708,7 @@ void sidEmuSet2(sidOperator* pVoice)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sidInitWaveformTables(SIDTYPE type)
|
void sidInitWaveformTables(int type)
|
||||||
{
|
{
|
||||||
int i,j;
|
int i,j;
|
||||||
UINT16 k;
|
UINT16 k;
|
||||||
@ -732,7 +732,7 @@ void sidInitWaveformTables(SIDTYPE type)
|
|||||||
for ( i = 0; i < 4096; i++ )
|
for ( i = 0; i < 4096; i++ )
|
||||||
squareTable[k++] = 0; //255;
|
squareTable[k++] = 0; //255;
|
||||||
|
|
||||||
if ( type==MOS8580 )
|
if ( type==mos6581_device::TYPE_8580 )
|
||||||
{
|
{
|
||||||
waveform30 = waveform30_8580;
|
waveform30 = waveform30_8580;
|
||||||
waveform50 = waveform50_8580;
|
waveform50 = waveform50_8580;
|
||||||
@ -747,7 +747,7 @@ void sidInitWaveformTables(SIDTYPE type)
|
|||||||
waveform70 = waveform70_6581; /* really audible? */
|
waveform70 = waveform70_6581; /* really audible? */
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( type==MOS8580 )
|
if ( type==mos6581_device::TYPE_8580 )
|
||||||
{
|
{
|
||||||
sidModeNormalTable[3] = sidMode30;
|
sidModeNormalTable[3] = sidMode30;
|
||||||
sidModeNormalTable[6] = sidMode60;
|
sidModeNormalTable[6] = sidMode60;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
approximation of the sid6581 chip
|
approximation of the sid6581 chip
|
||||||
this part is for 1 (of the 3) voices of a chip
|
this part is for 1 (of the 3) voices of a chip
|
||||||
*/
|
*/
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
|
|
||||||
struct sw_storage
|
struct sw_storage
|
||||||
{
|
{
|
||||||
@ -105,7 +105,7 @@ void sidEmuSet(sidOperator* pVoice);
|
|||||||
void sidEmuSet2(sidOperator* pVoice);
|
void sidEmuSet2(sidOperator* pVoice);
|
||||||
INT8 sidWaveCalcNormal(sidOperator* pVoice);
|
INT8 sidWaveCalcNormal(sidOperator* pVoice);
|
||||||
|
|
||||||
void sidInitWaveformTables(SIDTYPE type);
|
void sidInitWaveformTables(int type);
|
||||||
void sidInitMixerEngine(running_machine &machine);
|
void sidInitMixerEngine(running_machine &machine);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -323,6 +323,16 @@ endif
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------
|
||||||
|
# MOS 7360 TED
|
||||||
|
#-------------------------------------------------
|
||||||
|
|
||||||
|
ifneq ($(filter MOS7360,$(SOUNDS)),)
|
||||||
|
SOUNDOBJS += $(SOUNDOBJ)/mos7360.o
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------
|
#-------------------------------------------------
|
||||||
# Namco custom sound chips
|
# Namco custom sound chips
|
||||||
#-------------------------------------------------
|
#-------------------------------------------------
|
||||||
@ -511,11 +521,11 @@ endif
|
|||||||
#-------------------------------------------------
|
#-------------------------------------------------
|
||||||
|
|
||||||
ifneq ($(filter SID6581,$(SOUNDS)),)
|
ifneq ($(filter SID6581,$(SOUNDS)),)
|
||||||
SOUNDOBJS += $(SOUNDOBJ)/sid6581.o $(SOUNDOBJ)/sid.o $(SOUNDOBJ)/sidenvel.o $(SOUNDOBJ)/sidvoice.o
|
SOUNDOBJS += $(SOUNDOBJ)/mos6581.o $(SOUNDOBJ)/sid.o $(SOUNDOBJ)/sidenvel.o $(SOUNDOBJ)/sidvoice.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(filter SID8580,$(SOUNDS)),)
|
ifneq ($(filter SID8580,$(SOUNDS)),)
|
||||||
SOUNDOBJS += $(SOUNDOBJ)/sid6581.o $(SOUNDOBJ)/sid.o $(SOUNDOBJ)/sidenvel.o $(SOUNDOBJ)/sidvoice.o
|
SOUNDOBJS += $(SOUNDOBJ)/mos6581.o $(SOUNDOBJ)/sid.o $(SOUNDOBJ)/sidenvel.o $(SOUNDOBJ)/sidvoice.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,7 +69,6 @@ public:
|
|||||||
|
|
||||||
DECLARE_READ8_MEMBER( vic_videoram_r );
|
DECLARE_READ8_MEMBER( vic_videoram_r );
|
||||||
DECLARE_READ8_MEMBER( vic_colorram_r );
|
DECLARE_READ8_MEMBER( vic_colorram_r );
|
||||||
INTERRUPT_GEN_MEMBER(attckufo_raster_interrupt);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
READ8_MEMBER(attckufo_state::attckufo_io_r)
|
READ8_MEMBER(attckufo_state::attckufo_io_r)
|
||||||
@ -148,28 +147,13 @@ static INPUT_PORTS_START( attckufo )
|
|||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(attckufo_state::attckufo_raster_interrupt)
|
|
||||||
{
|
|
||||||
m_mos6560->raster_interrupt_gen();
|
|
||||||
}
|
|
||||||
|
|
||||||
static MOS6560_INTERFACE( vic_intf )
|
|
||||||
{
|
|
||||||
"screen",
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( attckufo, attckufo_state )
|
static MACHINE_CONFIG_START( attckufo, attckufo_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD("maincpu", M6502, 14318181/14)
|
MCFG_CPU_ADD("maincpu", M6502, 14318181/14)
|
||||||
MCFG_CPU_PROGRAM_MAP(cpu_map)
|
MCFG_CPU_PROGRAM_MAP(cpu_map)
|
||||||
MCFG_CPU_PERIODIC_INT_DRIVER(attckufo_state, attckufo_raster_interrupt, MOS656X_HRETRACERATE)
|
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MCFG_MOS656X_ATTACK_UFO_ADD("mos6560", "screen", 14318181/14, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS656X_ATTACK_UFO_ADD("mos6560", "screen", 14318181/14, vic_videoram_map, vic_colorram_map)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
ROM_START( attckufo )
|
ROM_START( attckufo )
|
||||||
|
@ -899,16 +899,6 @@ WRITE8_MEMBER( c128_state::vic_k_w )
|
|||||||
m_vic_k = data;
|
m_vic_k = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS8564_INTERFACE( vic_intf )
|
|
||||||
{
|
|
||||||
SCREEN_VIC_TAG,
|
|
||||||
M8502_TAG,
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c128_state, vic_irq_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DRIVER_MEMBER(c128_state, vic_k_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MOS6581_INTERFACE( sid_intf )
|
// MOS6581_INTERFACE( sid_intf )
|
||||||
@ -968,12 +958,6 @@ READ8_MEMBER( c128_state::sid_poty_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6581_INTERFACE( sid_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_MEMBER(c128_state, sid_potx_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(c128_state, sid_poty_r)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MOS6526_INTERFACE( cia1_intf )
|
// MOS6526_INTERFACE( cia1_intf )
|
||||||
@ -1112,18 +1096,6 @@ WRITE_LINE_MEMBER( c128_state::cia1_sp_w )
|
|||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( cia1_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c128_state, cia1_irq_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c128_state, cia1_cnt_w),
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c128_state, cia1_sp_w),
|
|
||||||
DEVCB_DRIVER_MEMBER(c128_state, cia1_pa_r),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DRIVER_MEMBER(c128_state, cia1_pb_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(c128_state, cia1_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MOS6526_INTERFACE( cia2_intf )
|
// MOS6526_INTERFACE( cia2_intf )
|
||||||
@ -1197,18 +1169,6 @@ WRITE8_MEMBER( c128_state::cia2_pa_w )
|
|||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( cia2_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c128_state, cia2_irq_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, pc2_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, sp2_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, cnt2_w),
|
|
||||||
DEVCB_DRIVER_MEMBER(c128_state, cia2_pa_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(c128_state, cia2_pa_w),
|
|
||||||
DEVCB_DEVICE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, pb_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// M6510_INTERFACE( cpu_intf )
|
// M6510_INTERFACE( cpu_intf )
|
||||||
@ -1313,15 +1273,6 @@ WRITE_LINE_MEMBER( c128_state::iec_data_w )
|
|||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
|
|
||||||
static CBM_IEC_INTERFACE( cbm_iec_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c128_state, iec_srq_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c128_state, iec_data_w),
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// C64_EXPANSION_INTERFACE( expansion_intf )
|
// C64_EXPANSION_INTERFACE( expansion_intf )
|
||||||
@ -1491,13 +1442,13 @@ static MACHINE_CONFIG_START( ntsc, c128_state )
|
|||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, VIC6567_CLOCK*2, vdc_intf, vdc_videoram_map)
|
MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, VIC6567_CLOCK*2, vdc_intf, vdc_videoram_map)
|
||||||
MCFG_MOS8564_ADD(MOS8564_TAG, SCREEN_VIC_TAG, VIC6567_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS8564_ADD(MOS8564_TAG, SCREEN_VIC_TAG, M8502_TAG, VIC6567_CLOCK, vic_videoram_map, vic_colorram_map, DEVWRITELINE(DEVICE_SELF, c128_state, vic_irq_w), DEVWRITE8(DEVICE_SELF, c128_state, vic_k_w))
|
||||||
MCFG_GFXDECODE(c128)
|
MCFG_GFXDECODE(c128)
|
||||||
|
|
||||||
// sound hardware
|
// sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS6581_TAG, SID6581, VIC6567_CLOCK)
|
MCFG_SOUND_ADD(MOS6581_TAG, MOS6581, VIC6567_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, sid_potx_r), DEVREAD8(DEVICE_SELF, c128_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||||
MCFG_SOUND_ADD("dac", DAC, 0)
|
MCFG_SOUND_ADD("dac", DAC, 0)
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
@ -1505,8 +1456,14 @@ static MACHINE_CONFIG_START( ntsc, c128_state )
|
|||||||
// devices
|
// devices
|
||||||
MCFG_MOS8722_ADD(MOS8722_TAG, mmu_intf)
|
MCFG_MOS8722_ADD(MOS8722_TAG, mmu_intf)
|
||||||
MCFG_MOS8721_ADD(MOS8721_TAG)
|
MCFG_MOS8721_ADD(MOS8721_TAG)
|
||||||
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6567_CLOCK, 60, cia1_intf)
|
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6567_CLOCK, 60, DEVWRITELINE(DEVICE_SELF, c128_state, cia1_irq_w))
|
||||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6567_CLOCK, 60, cia2_intf)
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(DEVICE_SELF, c128_state, cia1_cnt_w), DEVWRITELINE(DEVICE_SELF, c128_state, cia1_sp_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, cia1_pa_r), NULL)
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, cia1_pb_r), DEVWRITE8(DEVICE_SELF, c128_state, cia1_pb_w), NULL)
|
||||||
|
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6567_CLOCK, 60, DEVWRITELINE(DEVICE_SELF, c128_state, cia2_irq_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt2_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp2_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, cia2_pa_r), DEVWRITE8(DEVICE_SELF, c128_state, cia2_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(C64_USER_PORT_TAG, c64_user_port_device, pb_r), DEVWRITE8(C64_USER_PORT_TAG, c64_user_port_device, pb_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, pc2_w))
|
||||||
MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
@ -1547,7 +1504,9 @@ MACHINE_CONFIG_END
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED( c128, ntsc )
|
static MACHINE_CONFIG_DERIVED( c128, ntsc )
|
||||||
MCFG_CBM_IEC_ADD(cbm_iec_intf, "c1571")
|
MCFG_CBM_IEC_ADD("c1571")
|
||||||
|
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_srq_w))
|
||||||
|
MCFG_CBM_IEC_BUS_DATA_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_data_w))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
@ -1556,12 +1515,14 @@ MACHINE_CONFIG_END
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED( c128dcr, ntsc )
|
static MACHINE_CONFIG_DERIVED( c128dcr, ntsc )
|
||||||
MCFG_CBM_IEC_BUS_ADD(cbm_iec_intf)
|
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128dcr_iec_devices, "c1571", NULL) // TODO c1571cr
|
MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128dcr_iec_devices, "c1571", NULL) // TODO c1571cr
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL)
|
||||||
|
MCFG_CBM_IEC_BUS_ADD()
|
||||||
|
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_srq_w))
|
||||||
|
MCFG_CBM_IEC_BUS_DATA_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_data_w))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
@ -1570,12 +1531,14 @@ MACHINE_CONFIG_END
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED( c128d81, ntsc )
|
static MACHINE_CONFIG_DERIVED( c128d81, ntsc )
|
||||||
MCFG_CBM_IEC_BUS_ADD(cbm_iec_intf)
|
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128d81_iec_devices, "c1563", NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128d81_iec_devices, "c1563", NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL)
|
||||||
|
MCFG_CBM_IEC_BUS_ADD()
|
||||||
|
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_srq_w))
|
||||||
|
MCFG_CBM_IEC_BUS_DATA_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_data_w))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
@ -1598,13 +1561,13 @@ static MACHINE_CONFIG_START( pal, c128_state )
|
|||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, VIC6569_CLOCK*2, vdc_intf, vdc_videoram_map)
|
MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, VIC6569_CLOCK*2, vdc_intf, vdc_videoram_map)
|
||||||
MCFG_MOS8566_ADD(MOS8564_TAG, SCREEN_VIC_TAG, VIC6569_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS8566_ADD(MOS8564_TAG, SCREEN_VIC_TAG, M8502_TAG, VIC6569_CLOCK, vic_videoram_map, vic_colorram_map, DEVWRITELINE(DEVICE_SELF, c128_state, vic_irq_w), DEVWRITE8(DEVICE_SELF, c128_state, vic_k_w))
|
||||||
MCFG_GFXDECODE(c128)
|
MCFG_GFXDECODE(c128)
|
||||||
|
|
||||||
// sound hardware
|
// sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS6581_TAG, SID6581, VIC6569_CLOCK)
|
MCFG_SOUND_ADD(MOS6581_TAG, MOS6581, VIC6569_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, sid_potx_r), DEVREAD8(DEVICE_SELF, c128_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||||
MCFG_SOUND_ADD("dac", DAC, 0)
|
MCFG_SOUND_ADD("dac", DAC, 0)
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
@ -1612,8 +1575,14 @@ static MACHINE_CONFIG_START( pal, c128_state )
|
|||||||
// devices
|
// devices
|
||||||
MCFG_MOS8722_ADD(MOS8722_TAG, mmu_intf)
|
MCFG_MOS8722_ADD(MOS8722_TAG, mmu_intf)
|
||||||
MCFG_MOS8721_ADD(MOS8721_TAG)
|
MCFG_MOS8721_ADD(MOS8721_TAG)
|
||||||
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, cia1_intf)
|
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, DEVWRITELINE(DEVICE_SELF, c128_state, cia1_irq_w))
|
||||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, cia2_intf)
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(DEVICE_SELF, c128_state, cia1_cnt_w), DEVWRITELINE(DEVICE_SELF, c128_state, cia1_sp_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, cia1_pa_r), NULL)
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, cia1_pb_r), DEVWRITE8(DEVICE_SELF, c128_state, cia1_pb_w), NULL)
|
||||||
|
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, DEVWRITELINE(DEVICE_SELF, c128_state, cia2_irq_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt2_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp2_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, cia2_pa_r), DEVWRITE8(DEVICE_SELF, c128_state, cia2_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(C64_USER_PORT_TAG, c64_user_port_device, pb_r), DEVWRITE8(C64_USER_PORT_TAG, c64_user_port_device, pb_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, pc2_w))
|
||||||
MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
@ -1654,7 +1623,9 @@ MACHINE_CONFIG_END
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED( c128pal, pal )
|
static MACHINE_CONFIG_DERIVED( c128pal, pal )
|
||||||
MCFG_CBM_IEC_ADD(cbm_iec_intf, "c1571")
|
MCFG_CBM_IEC_ADD("c1571")
|
||||||
|
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_srq_w))
|
||||||
|
MCFG_CBM_IEC_BUS_DATA_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_data_w))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
@ -1663,12 +1634,14 @@ MACHINE_CONFIG_END
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED( c128dcrp, pal )
|
static MACHINE_CONFIG_DERIVED( c128dcrp, pal )
|
||||||
MCFG_CBM_IEC_BUS_ADD(cbm_iec_intf)
|
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128dcr_iec_devices, "c1571", NULL) // TODO c1571cr
|
MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128dcr_iec_devices, "c1571", NULL) // TODO c1571cr
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL)
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL)
|
||||||
|
MCFG_CBM_IEC_BUS_ADD()
|
||||||
|
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_srq_w))
|
||||||
|
MCFG_CBM_IEC_BUS_DATA_CALLBACK(DEVWRITELINE(DEVICE_SELF, c128_state, iec_data_w))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -493,16 +493,6 @@ WRITE_LINE_MEMBER( c64_state::vic_irq_w )
|
|||||||
check_interrupts();
|
check_interrupts();
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6567_INTERFACE( vic_intf )
|
|
||||||
{
|
|
||||||
SCREEN_TAG,
|
|
||||||
M6510_TAG,
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c64_state, vic_irq_w),
|
|
||||||
DEVCB_NULL, // BA -> 6502 RDY
|
|
||||||
DEVCB_NULL, // AEC -> 6502 AEC
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MOS6581_INTERFACE( sid_intf )
|
// MOS6581_INTERFACE( sid_intf )
|
||||||
@ -562,12 +552,6 @@ READ8_MEMBER( c64_state::sid_poty_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6581_INTERFACE( sid_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_MEMBER(c64_state, sid_potx_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(c64_state, sid_poty_r)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MOS6526_INTERFACE( cia1_intf )
|
// MOS6526_INTERFACE( cia1_intf )
|
||||||
@ -688,18 +672,6 @@ WRITE8_MEMBER( c64_state::cia1_pb_w )
|
|||||||
m_vic->lp_w(BIT(data, 4));
|
m_vic->lp_w(BIT(data, 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( cia1_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c64_state, cia1_irq_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, sp1_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, cnt1_w),
|
|
||||||
DEVCB_DRIVER_MEMBER(c64_state, cia1_pa_r),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DRIVER_MEMBER(c64_state, cia1_pb_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(c64_state, cia1_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
READ8_MEMBER( c64gs_state::cia1_pa_r )
|
READ8_MEMBER( c64gs_state::cia1_pa_r )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -756,18 +728,6 @@ READ8_MEMBER( c64gs_state::cia1_pb_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( c64gs_cia1_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c64_state, cia1_irq_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, sp1_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, cnt1_w),
|
|
||||||
DEVCB_DRIVER_MEMBER(c64gs_state, cia1_pa_r),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DRIVER_MEMBER(c64gs_state, cia1_pb_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(c64_state, cia1_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MOS6526_INTERFACE( cia2_intf )
|
// MOS6526_INTERFACE( cia2_intf )
|
||||||
@ -839,18 +799,6 @@ WRITE8_MEMBER( c64_state::cia2_pa_w )
|
|||||||
m_iec->data_w(!BIT(data, 5));
|
m_iec->data_w(!BIT(data, 5));
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( cia2_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(c64_state, cia2_irq_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, pc2_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, sp2_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, cnt2_w),
|
|
||||||
DEVCB_DRIVER_MEMBER(c64_state, cia2_pa_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(c64_state, cia2_pa_w),
|
|
||||||
DEVCB_DEVICE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, pb_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// M6510_INTERFACE( cpu_intf )
|
// M6510_INTERFACE( cpu_intf )
|
||||||
@ -994,20 +942,6 @@ WRITE8_MEMBER( c64gs_state::cpu_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// CBM_IEC_INTERFACE( iec_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static CBM_IEC_INTERFACE( iec_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(MOS6526_1_TAG, mos6526_device, flag_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64_USER_PORT_TAG, c64_user_port_device, atn_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// C64_EXPANSION_INTERFACE( expansion_intf )
|
// C64_EXPANSION_INTERFACE( expansion_intf )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -1152,20 +1086,28 @@ static MACHINE_CONFIG_START( ntsc, c64_state )
|
|||||||
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
|
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
MCFG_MOS6567_ADD(MOS6567_TAG, SCREEN_TAG, VIC6567_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS6567_ADD(MOS6567_TAG, SCREEN_TAG, VIC6567_CLOCK, vic_videoram_map, vic_colorram_map, DEVWRITELINE(DEVICE_SELF, c64_state, vic_irq_w))
|
||||||
|
|
||||||
// sound hardware
|
// sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS6581_TAG, SID6581, VIC6567_CLOCK)
|
MCFG_SOUND_ADD(MOS6581_TAG, MOS6581, VIC6567_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, sid_potx_r), DEVREAD8(DEVICE_SELF, c64_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
MCFG_PLS100_ADD(PLA_TAG)
|
MCFG_PLS100_ADD(PLA_TAG)
|
||||||
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6567_CLOCK, 60, cia1_intf)
|
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6567_CLOCK, 60, DEVWRITELINE(DEVICE_SELF, c64_state, cia1_irq_w))
|
||||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6567_CLOCK, 60, cia2_intf)
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt1_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp1_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, cia1_pa_r), NULL)
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, cia1_pb_r), DEVWRITE8(DEVICE_SELF, c64_state, cia1_pb_w), NULL)
|
||||||
|
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6567_CLOCK, 60, DEVWRITELINE(DEVICE_SELF, c64_state, cia2_irq_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt2_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp2_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, cia2_pa_r), DEVWRITE8(DEVICE_SELF, c64_state, cia2_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(C64_USER_PORT_TAG, c64_user_port_device, pb_r), DEVWRITE8(C64_USER_PORT_TAG, c64_user_port_device, pb_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, pc2_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
|
||||||
MCFG_CBM_IEC_ADD(iec_intf, "c1541")
|
MCFG_CBM_IEC_ADD("c1541")
|
||||||
|
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
|
||||||
|
MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, atn_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w))
|
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||||
@ -1234,8 +1176,8 @@ MACHINE_CONFIG_END
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED_CLASS( ntsc_c, ntsc, c64c_state )
|
static MACHINE_CONFIG_DERIVED_CLASS( ntsc_c, ntsc, c64c_state )
|
||||||
MCFG_SOUND_REPLACE(MOS6581_TAG, SID8580, VIC6567_CLOCK)
|
MCFG_SOUND_REPLACE(MOS6581_TAG, MOS8580, VIC6567_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, sid_potx_r), DEVREAD8(DEVICE_SELF, c64_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -1253,20 +1195,28 @@ static MACHINE_CONFIG_START( pal, c64_state )
|
|||||||
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
|
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
MCFG_MOS6569_ADD(MOS6569_TAG, SCREEN_TAG, VIC6569_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS6569_ADD(MOS6569_TAG, SCREEN_TAG, VIC6569_CLOCK, vic_videoram_map, vic_colorram_map, DEVWRITELINE(DEVICE_SELF, c64_state, vic_irq_w))
|
||||||
|
|
||||||
// sound hardware
|
// sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS6581_TAG, SID6581, VIC6569_CLOCK)
|
MCFG_SOUND_ADD(MOS6581_TAG, MOS6581, VIC6569_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, sid_potx_r), DEVREAD8(DEVICE_SELF, c64_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
MCFG_PLS100_ADD(PLA_TAG)
|
MCFG_PLS100_ADD(PLA_TAG)
|
||||||
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, cia1_intf)
|
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, DEVWRITELINE(DEVICE_SELF, c64_state, cia1_irq_w))
|
||||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, cia2_intf)
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt1_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp1_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, cia1_pa_r), NULL)
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, cia1_pb_r), DEVWRITE8(DEVICE_SELF, c64_state, cia1_pb_w), NULL)
|
||||||
|
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, DEVWRITELINE(DEVICE_SELF, c64_state, cia2_irq_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt2_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp2_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, cia2_pa_r), DEVWRITE8(DEVICE_SELF, c64_state, cia2_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(C64_USER_PORT_TAG, c64_user_port_device, pb_r), DEVWRITE8(C64_USER_PORT_TAG, c64_user_port_device, pb_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, pc2_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
|
||||||
MCFG_CBM_IEC_ADD(iec_intf, "c1541")
|
MCFG_CBM_IEC_ADD("c1541")
|
||||||
|
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
|
||||||
|
MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, atn_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
|
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||||
@ -1313,8 +1263,8 @@ MACHINE_CONFIG_END
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED_CLASS( pal_c, pal, c64c_state )
|
static MACHINE_CONFIG_DERIVED_CLASS( pal_c, pal, c64c_state )
|
||||||
MCFG_SOUND_REPLACE(MOS6581_TAG, SID8580, VIC6569_CLOCK)
|
MCFG_SOUND_REPLACE(MOS6581_TAG, MOS8580, VIC6569_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, sid_potx_r), DEVREAD8(DEVICE_SELF, c64_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -1332,19 +1282,28 @@ static MACHINE_CONFIG_START( pal_gs, c64gs_state )
|
|||||||
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
|
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
MCFG_MOS8565_ADD(MOS6569_TAG, SCREEN_TAG, VIC6569_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS8565_ADD(MOS6569_TAG, SCREEN_TAG, VIC6569_CLOCK, vic_videoram_map, vic_colorram_map, DEVWRITELINE(DEVICE_SELF, c64_state, vic_irq_w))
|
||||||
|
|
||||||
// sound hardware
|
// sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS6581_TAG, SID8580, VIC6569_CLOCK)
|
MCFG_SOUND_ADD(MOS6581_TAG, MOS8580, VIC6569_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, sid_potx_r), DEVREAD8(DEVICE_SELF, c64_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
MCFG_PLS100_ADD(PLA_TAG)
|
MCFG_PLS100_ADD(PLA_TAG)
|
||||||
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, c64gs_cia1_intf)
|
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, DEVWRITELINE(DEVICE_SELF, c64_state, cia1_irq_w))
|
||||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, cia2_intf)
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt1_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp1_w))
|
||||||
MCFG_CBM_IEC_BUS_ADD(iec_intf)
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c64gs_state, cia1_pa_r), NULL)
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, c64gs_state, cia1_pb_r), NULL, NULL)
|
||||||
|
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, DEVWRITELINE(DEVICE_SELF, c64_state, cia2_irq_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt2_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp2_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, cia2_pa_r), DEVWRITE8(DEVICE_SELF, c64_state, cia2_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(C64_USER_PORT_TAG, c64_user_port_device, pb_r), DEVWRITE8(C64_USER_PORT_TAG, c64_user_port_device, pb_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, pc2_w))
|
||||||
|
MCFG_CBM_IEC_ADD(NULL)
|
||||||
|
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
|
||||||
|
MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, atn_w))
|
||||||
|
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
|
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||||
|
@ -52,7 +52,7 @@ bus serial (available in all modes), a Fast and a Burst serial bus
|
|||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/m6502/m4510.h"
|
#include "cpu/m6502/m4510.h"
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
#include "machine/6526cia.h"
|
#include "machine/6526cia.h"
|
||||||
#include "machine/cbmipt.h"
|
#include "machine/cbmipt.h"
|
||||||
#include "video/vic4567.h"
|
#include "video/vic4567.h"
|
||||||
@ -203,28 +203,6 @@ READ8_MEMBER( c65_state::sid_poty_r )
|
|||||||
return c64_paddle_read(sid, space, 1);
|
return c64_paddle_read(sid, space, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6581_INTERFACE( sidr_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_MEMBER(c65_state, sid_potx_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(c65_state, sid_poty_r)
|
|
||||||
};
|
|
||||||
|
|
||||||
static MOS6581_INTERFACE( sidl_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static CBM_IEC_INTERFACE( cbm_iec_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
@ -326,12 +304,11 @@ static MACHINE_CONFIG_START( c65, c65_state )
|
|||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||||
MCFG_SOUND_ADD("sid_r", SID8580, 985248)
|
MCFG_SOUND_ADD("sid_r", MOS8580, 985248)
|
||||||
MCFG_SOUND_CONFIG(sidr_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, c65_state, sid_potx_r), DEVREAD8(DEVICE_SELF, c65_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
|
||||||
MCFG_SOUND_ADD("sid_l", SID8580, 985248)
|
MCFG_SOUND_ADD("sid_l", MOS8580, 985248)
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
|
||||||
MCFG_SOUND_CONFIG(sidl_intf)
|
|
||||||
|
|
||||||
/* quickload */
|
/* quickload */
|
||||||
MCFG_QUICKLOAD_ADD("quickload", cbm_c65, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
MCFG_QUICKLOAD_ADD("quickload", cbm_c65, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||||
@ -341,7 +318,7 @@ static MACHINE_CONFIG_START( c65, c65_state )
|
|||||||
MCFG_LEGACY_MOS6526R1_ADD("cia_1", 3500000, 60, c65_cia1)
|
MCFG_LEGACY_MOS6526R1_ADD("cia_1", 3500000, 60, c65_cia1)
|
||||||
|
|
||||||
/* floppy from serial bus */
|
/* floppy from serial bus */
|
||||||
MCFG_CBM_IEC_ADD(cbm_iec_intf, NULL)
|
MCFG_CBM_IEC_ADD(NULL)
|
||||||
|
|
||||||
MCFG_FRAGMENT_ADD(c64_cartslot)
|
MCFG_FRAGMENT_ADD(c64_cartslot)
|
||||||
|
|
||||||
@ -361,11 +338,10 @@ static MACHINE_CONFIG_DERIVED( c65pal, c65 )
|
|||||||
MCFG_VIC3_ADD("vic3", c65_vic3_pal_intf)
|
MCFG_VIC3_ADD("vic3", c65_vic3_pal_intf)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MCFG_SOUND_REPLACE("sid_r", SID8580, 1022727)
|
MCFG_SOUND_REPLACE("sid_r", MOS8580, 1022727)
|
||||||
MCFG_SOUND_CONFIG(sidr_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, c65_state, sid_potx_r), DEVREAD8(DEVICE_SELF, c65_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
|
||||||
MCFG_SOUND_REPLACE("sid_l", SID8580, 1022727)
|
MCFG_SOUND_REPLACE("sid_l", MOS8580, 1022727)
|
||||||
MCFG_SOUND_CONFIG(sidl_intf)
|
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
|
||||||
|
|
||||||
/* cia */
|
/* cia */
|
||||||
|
@ -1135,16 +1135,6 @@ WRITE_LINE_MEMBER( p500_state::vic_irq_w )
|
|||||||
m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq || m_user_irq);
|
m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq || m_user_irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6567_INTERFACE( vic_intf )
|
|
||||||
{
|
|
||||||
SCREEN_TAG,
|
|
||||||
M6509_TAG,
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(p500_state, vic_irq_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MOS6581_INTERFACE( sid_intf )
|
// MOS6581_INTERFACE( sid_intf )
|
||||||
@ -1204,12 +1194,6 @@ READ8_MEMBER( cbm2_state::sid_poty_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6581_INTERFACE( sid_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_MEMBER(cbm2_state, sid_potx_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(cbm2_state, sid_poty_r)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// tpi6525_interface tpi1_intf
|
// tpi6525_interface tpi1_intf
|
||||||
@ -1649,18 +1633,6 @@ READ8_MEMBER( cbm2_state::cia_pb_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( cia_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(MOS6525_1_TAG, tpi6525_device, i2_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(CBM2_USER_PORT_TAG, cbm2_user_port_device, pc_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w),
|
|
||||||
DEVCB_DRIVER_MEMBER(cbm2_state, cia_pa_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(cbm2_state, cia_pa_w),
|
|
||||||
DEVCB_DRIVER_MEMBER(cbm2_state, cia_pb_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(CBM2_USER_PORT_TAG, cbm2_user_port_device, d2_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// DS75161A_INTERFACE( ds75161a_intf )
|
// DS75161A_INTERFACE( ds75161a_intf )
|
||||||
@ -1687,23 +1659,6 @@ static DS75161A_INTERFACE( ds75161a_intf )
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(MOS6525_1_TAG, tpi6525_device, i1_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// pic8259_interface ext_pic_intf
|
// pic8259_interface ext_pic_intf
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -1888,18 +1843,6 @@ WRITE8_MEMBER( cbm2_state::ext_cia_pb_w )
|
|||||||
m_ext_pic->ir7_w(BIT(data, 7));
|
m_ext_pic->ir7_w(BIT(data, 7));
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( ext_cia_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(MOS6525_1_TAG, tpi6525_device, i3_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_HANDLER(EXT_MOS6525_TAG, tpi6525_porta_r),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DRIVER_MEMBER(cbm2_state, ext_cia_pb_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(cbm2_state, ext_cia_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// CBM2_USER_PORT_INTERFACE( user_intf )
|
// CBM2_USER_PORT_INTERFACE( user_intf )
|
||||||
@ -2187,12 +2130,12 @@ static MACHINE_CONFIG_START( p500_ntsc, p500_state )
|
|||||||
MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
|
MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
MCFG_MOS6567_ADD(MOS6567_TAG, SCREEN_TAG, VIC6567_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS6567_ADD(MOS6567_TAG, SCREEN_TAG, VIC6567_CLOCK, vic_videoram_map, vic_colorram_map, DEVWRITELINE(DEVICE_SELF, p500_state, vic_irq_w))
|
||||||
|
|
||||||
// sound hardware
|
// sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS6851_TAG, SID6581, VIC6567_CLOCK)
|
MCFG_SOUND_ADD(MOS6581_TAG, MOS6581, VIC6567_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, p500_state, sid_potx_r), DEVREAD8(DEVICE_SELF, p500_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
@ -2201,10 +2144,14 @@ static MACHINE_CONFIG_START( p500_ntsc, p500_state )
|
|||||||
MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
|
MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
|
||||||
MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
|
MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
|
||||||
MCFG_MOS6551_ADD(MOS6551A_TAG, XTAL_1_8432MHz, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
|
MCFG_MOS6551_ADD(MOS6551A_TAG, XTAL_1_8432MHz, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
|
||||||
MCFG_MOS6526_ADD(MOS6526_TAG, VIC6567_CLOCK, 60, cia_intf)
|
MCFG_MOS6526_ADD(MOS6526_TAG, VIC6567_CLOCK, 60, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, cia_pa_r), DEVWRITE8(DEVICE_SELF, cbm2_state, cia_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, cia_pb_r), DEVWRITE8(CBM2_USER_PORT_TAG, cbm2_user_port_device, d2_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, pc_w))
|
||||||
MCFG_DS75160A_ADD(DS75160A_TAG, DEVREAD8(IEEE488_TAG, ieee488_device, dio_r), DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w))
|
MCFG_DS75160A_ADD(DS75160A_TAG, DEVREAD8(IEEE488_TAG, ieee488_device, dio_r), DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w))
|
||||||
MCFG_DS75161A_ADD(DS75161A_TAG, ds75161a_intf)
|
MCFG_DS75161A_ADD(DS75161A_TAG, ds75161a_intf)
|
||||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8050")
|
MCFG_CBM_IEEE488_ADD("c8050")
|
||||||
|
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w))
|
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w))
|
||||||
@ -2239,12 +2186,12 @@ static MACHINE_CONFIG_START( p500_pal, p500_state )
|
|||||||
MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
|
MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
MCFG_MOS6569_ADD(MOS6569_TAG, SCREEN_TAG, VIC6569_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS6569_ADD(MOS6569_TAG, SCREEN_TAG, VIC6569_CLOCK, vic_videoram_map, vic_colorram_map, DEVWRITELINE(DEVICE_SELF, p500_state, vic_irq_w))
|
||||||
|
|
||||||
// sound hardware
|
// sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS6851_TAG, SID6581, VIC6569_CLOCK)
|
MCFG_SOUND_ADD(MOS6581_TAG, MOS6581, VIC6569_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, p500_state, sid_potx_r), DEVREAD8(DEVICE_SELF, p500_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
@ -2253,10 +2200,14 @@ static MACHINE_CONFIG_START( p500_pal, p500_state )
|
|||||||
MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
|
MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
|
||||||
MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
|
MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
|
||||||
MCFG_MOS6551_ADD(MOS6551A_TAG, XTAL_1_8432MHz, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
|
MCFG_MOS6551_ADD(MOS6551A_TAG, XTAL_1_8432MHz, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
|
||||||
MCFG_MOS6526_ADD(MOS6526_TAG, VIC6569_CLOCK, 50, cia_intf)
|
MCFG_MOS6526_ADD(MOS6526_TAG, VIC6569_CLOCK, 50, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, cia_pa_r), DEVWRITE8(DEVICE_SELF, cbm2_state, cia_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, cia_pb_r), DEVWRITE8(CBM2_USER_PORT_TAG, cbm2_user_port_device, d2_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, pc_w))
|
||||||
MCFG_DS75160A_ADD(DS75160A_TAG, DEVREAD8(IEEE488_TAG, ieee488_device, dio_r), DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w))
|
MCFG_DS75160A_ADD(DS75160A_TAG, DEVREAD8(IEEE488_TAG, ieee488_device, dio_r), DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w))
|
||||||
MCFG_DS75161A_ADD(DS75161A_TAG, ds75161a_intf)
|
MCFG_DS75161A_ADD(DS75161A_TAG, ds75161a_intf)
|
||||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8050")
|
MCFG_CBM_IEEE488_ADD("c8050")
|
||||||
|
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
|
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
|
||||||
@ -2303,8 +2254,8 @@ static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2_state )
|
|||||||
|
|
||||||
// sound hardware
|
// sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS6851_TAG, SID6581, XTAL_18MHz/9)
|
MCFG_SOUND_ADD(MOS6581_TAG, MOS6581, XTAL_18MHz/9)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, sid_potx_r), DEVREAD8(DEVICE_SELF, cbm2_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
@ -2312,10 +2263,14 @@ static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2_state )
|
|||||||
MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf)
|
MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf)
|
||||||
MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf)
|
MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf)
|
||||||
MCFG_MOS6551_ADD(MOS6551A_TAG, XTAL_1_8432MHz, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
|
MCFG_MOS6551_ADD(MOS6551A_TAG, XTAL_1_8432MHz, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
|
||||||
MCFG_MOS6526_ADD(MOS6526_TAG, XTAL_18MHz/9, 60, cia_intf)
|
MCFG_MOS6526_ADD(MOS6526_TAG, XTAL_18MHz/9, 60, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, cia_pa_r), DEVWRITE8(DEVICE_SELF, cbm2_state, cia_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, cia_pb_r), DEVWRITE8(CBM2_USER_PORT_TAG, cbm2_user_port_device, d2_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, pc_w))
|
||||||
MCFG_DS75160A_ADD(DS75160A_TAG, DEVREAD8(IEEE488_TAG, ieee488_device, dio_r), DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w))
|
MCFG_DS75160A_ADD(DS75160A_TAG, DEVREAD8(IEEE488_TAG, ieee488_device, dio_r), DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w))
|
||||||
MCFG_DS75161A_ADD(DS75161A_TAG, ds75161a_intf)
|
MCFG_DS75161A_ADD(DS75161A_TAG, ds75161a_intf)
|
||||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8050")
|
MCFG_CBM_IEEE488_ADD("c8050")
|
||||||
|
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
@ -2358,7 +2313,10 @@ static MACHINE_CONFIG_DERIVED( cbm2lp_pal, cbm2lp_ntsc )
|
|||||||
MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
|
MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
|
||||||
|
|
||||||
MCFG_DEVICE_REMOVE(MOS6526_TAG)
|
MCFG_DEVICE_REMOVE(MOS6526_TAG)
|
||||||
MCFG_MOS6526_ADD(MOS6526_TAG, XTAL_18MHz/9, 50, cia_intf)
|
MCFG_MOS6526_ADD(MOS6526_TAG, VIC6569_CLOCK, 50, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, cia_pa_r), DEVWRITE8(DEVICE_SELF, cbm2_state, cia_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, cia_pb_r), DEVWRITE8(CBM2_USER_PORT_TAG, cbm2_user_port_device, d2_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, pc_w))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
@ -2421,7 +2379,10 @@ static MACHINE_CONFIG_DERIVED( bx256hp, b256hp )
|
|||||||
|
|
||||||
MCFG_PIC8259_ADD(EXT_I8259A_TAG, ext_pic_intf)
|
MCFG_PIC8259_ADD(EXT_I8259A_TAG, ext_pic_intf)
|
||||||
MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf)
|
MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf)
|
||||||
MCFG_MOS6526_ADD(EXT_MOS6526_TAG, XTAL_18MHz/9, 50, ext_cia_intf)
|
MCFG_MOS6526_ADD(EXT_MOS6526_TAG, XTAL_18MHz/9, 60, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i3_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
|
||||||
|
//MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(EXT_MOS6525_TAG, tpi6525_porta_r), NULL)
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, ext_cia_pb_r), DEVWRITE8(DEVICE_SELF, cbm2_state, ext_cia_pb_w), NULL)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
@ -2437,7 +2398,10 @@ static MACHINE_CONFIG_DERIVED( cbm2hp_pal, cbm2hp_ntsc )
|
|||||||
MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
|
MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
|
||||||
|
|
||||||
MCFG_DEVICE_REMOVE(MOS6526_TAG)
|
MCFG_DEVICE_REMOVE(MOS6526_TAG)
|
||||||
MCFG_MOS6526_ADD(MOS6526_TAG, XTAL_18MHz/9, 50, cia_intf)
|
MCFG_MOS6526_ADD(EXT_MOS6526_TAG, XTAL_18MHz/9, 50, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i3_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
|
||||||
|
//MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(EXT_MOS6525_TAG, tpi6525_porta_r), NULL)
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, ext_cia_pb_r), DEVWRITE8(DEVICE_SELF, cbm2_state, ext_cia_pb_w), NULL)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
@ -2472,7 +2436,10 @@ static MACHINE_CONFIG_DERIVED( cbm730, cbm720 )
|
|||||||
|
|
||||||
MCFG_PIC8259_ADD(EXT_I8259A_TAG, ext_pic_intf)
|
MCFG_PIC8259_ADD(EXT_I8259A_TAG, ext_pic_intf)
|
||||||
MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf)
|
MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf)
|
||||||
MCFG_MOS6526_ADD(EXT_MOS6526_TAG, XTAL_18MHz/9, 60, ext_cia_intf)
|
MCFG_MOS6526_ADD(EXT_MOS6526_TAG, XTAL_18MHz/9, 50, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i3_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
|
||||||
|
//MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(EXT_MOS6525_TAG, tpi6525_porta_r), NULL)
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, ext_cia_pb_r), DEVWRITE8(DEVICE_SELF, cbm2_state, ext_cia_pb_w), NULL)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -212,18 +212,6 @@ static const floppy_interface osborne1_floppy_interface =
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER("pia_0", pia6821_device, ca2_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
/* F4 Character Displayer */
|
/* F4 Character Displayer */
|
||||||
static const gfx_layout osborne1_charlayout =
|
static const gfx_layout osborne1_charlayout =
|
||||||
{
|
{
|
||||||
@ -267,7 +255,8 @@ static MACHINE_CONFIG_START( osborne1, osborne1_state )
|
|||||||
MCFG_MB8877_ADD("mb8877", default_wd17xx_interface_2_drives )
|
MCFG_MB8877_ADD("mb8877", default_wd17xx_interface_2_drives )
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(osborne1_floppy_interface)
|
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(osborne1_floppy_interface)
|
||||||
MCFG_IEEE488_BUS_ADD(ieee488_intf)
|
MCFG_IEEE488_BUS_ADD()
|
||||||
|
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE("pia_0", pia6821_device, ca2_w))
|
||||||
MCFG_SOFTWARE_LIST_ADD("flop_list","osborne1")
|
MCFG_SOFTWARE_LIST_ADD("flop_list","osborne1")
|
||||||
|
|
||||||
/* internal ram */
|
/* internal ram */
|
||||||
|
@ -863,23 +863,6 @@ const pia6821_interface pia2_intf =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(M6520_2_TAG, pia6821_device, cb1_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(M6520_2_TAG, pia6821_device, ca1_w),
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// PET_USER_PORT_INTERFACE( user_intf )
|
// PET_USER_PORT_INTERFACE( user_intf )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -1170,7 +1153,9 @@ static MACHINE_CONFIG_START( pet, pet_state )
|
|||||||
MCFG_VIA6522_ADD(M6522_TAG, XTAL_8MHz/8, via_intf)
|
MCFG_VIA6522_ADD(M6522_TAG, XTAL_8MHz/8, via_intf)
|
||||||
MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
|
MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
|
||||||
MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
|
MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
|
||||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, "c4040")
|
MCFG_CBM_IEEE488_ADD("c4040")
|
||||||
|
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, cb1_w))
|
||||||
|
MCFG_IEEE488_ATN_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, ca1_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
|
||||||
MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_8MHz/8, pet_expansion_cards, NULL, NULL)
|
MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_8MHz/8, pet_expansion_cards, NULL, NULL)
|
||||||
@ -1447,7 +1432,9 @@ static MACHINE_CONFIG_START( pet80, pet80_state )
|
|||||||
MCFG_VIA6522_ADD(M6522_TAG, XTAL_16MHz/16, via_intf)
|
MCFG_VIA6522_ADD(M6522_TAG, XTAL_16MHz/16, via_intf)
|
||||||
MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
|
MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
|
||||||
MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
|
MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
|
||||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8050")
|
MCFG_CBM_IEEE488_ADD("c8050")
|
||||||
|
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, cb1_w))
|
||||||
|
MCFG_IEEE488_ATN_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, ca1_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
|
||||||
MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, NULL, NULL)
|
MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, NULL, NULL)
|
||||||
|
@ -52,7 +52,7 @@ void plus4_state::check_interrupts()
|
|||||||
// MEMORY MANAGEMENT
|
// MEMORY MANAGEMENT
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
void plus4_state::bankswitch(offs_t offset, int phi0, int mux, int ras, int *scs, int *phi2, int *user, int *_6551, int *addr_clk, int *keyport, int *kernal, int *cs0, int *cs1)
|
void plus4_state::bankswitch(offs_t offset, int phi0, int mux, int ras, int *scs, int *phi2, int *user, int *_6551, int *addr_clk, int *keyport, int *kernal)
|
||||||
{
|
{
|
||||||
UINT16 i = ras << 15 | BA10 << 14 | BA11 << 13 | BA13 << 12 | BA9 << 11 | BA8 << 10 | BA14 << 9 | mux << 8 | BA12 << 7 | BA7 << 6 | BA6 << 5 | BA5 << 4 | BA4 << 3 | BA15 << 2 | phi0 << 1 | 1;
|
UINT16 i = ras << 15 | BA10 << 14 | BA11 << 13 | BA13 << 12 | BA9 << 11 | BA8 << 10 | BA14 << 9 | mux << 8 | BA12 << 7 | BA7 << 6 | BA6 << 5 | BA5 << 4 | BA4 << 3 | BA15 << 2 | phi0 << 1 | 1;
|
||||||
/* UINT8 data = m_pla->read(i);
|
/* UINT8 data = m_pla->read(i);
|
||||||
@ -118,9 +118,6 @@ void plus4_state::bankswitch(offs_t offset, int phi0, int mux, int ras, int *scs
|
|||||||
*addr_clk = F4;
|
*addr_clk = F4;
|
||||||
*keyport = F5;
|
*keyport = F5;
|
||||||
*kernal = F6;
|
*kernal = F6;
|
||||||
|
|
||||||
*cs0 = m_ted->cs0_r(offset);
|
|
||||||
*cs1 = m_ted->cs1_r(offset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -128,10 +125,10 @@ void plus4_state::bankswitch(offs_t offset, int phi0, int mux, int ras, int *scs
|
|||||||
// read_memory -
|
// read_memory -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
UINT8 plus4_state::read_memory(address_space &space, offs_t offset, int ba, int scs, int phi2, int user, int _6551, int addr_clk, int keyport, int kernal, int cs0, int cs1)
|
UINT8 plus4_state::read_memory(address_space &space, offs_t offset, int ba, int scs, int phi2, int user, int _6551, int addr_clk, int keyport, int kernal)
|
||||||
{
|
{
|
||||||
UINT8 data = m_ted->bus_r();
|
int cs0 = 1, cs1 = 1, c1l = 1, c1h = 1, c2l = 1, c2h = 1;
|
||||||
int c1l = 1, c1h = 1, c2l = 1, c2h = 1;
|
UINT8 data = m_ted->read(space, offset, cs0, cs1);
|
||||||
|
|
||||||
//logerror("offset %04x user %u 6551 %u addr_clk %u keyport %u kernal %u cs0 %u cs1 %u\n", offset,user,_6551,addr_clk,keyport,kernal,cs0,cs1);
|
//logerror("offset %04x user %u 6551 %u addr_clk %u keyport %u kernal %u cs0 %u cs1 %u\n", offset,user,_6551,addr_clk,keyport,kernal,cs0,cs1);
|
||||||
|
|
||||||
@ -222,10 +219,6 @@ UINT8 plus4_state::read_memory(address_space &space, offs_t offset, int ba, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (offset >= 0xff00 && offset < 0xff20)
|
|
||||||
{
|
|
||||||
data = m_ted->read(space, offset & 0x1f);
|
|
||||||
}
|
|
||||||
else if (offset < 0xfd00 || offset >= 0xff20)
|
else if (offset < 0xfd00 || offset >= 0xff20)
|
||||||
{
|
{
|
||||||
data = m_ram->pointer()[offset & m_ram->mask()];
|
data = m_ram->pointer()[offset & m_ram->mask()];
|
||||||
@ -242,11 +235,11 @@ UINT8 plus4_state::read_memory(address_space &space, offs_t offset, int ba, int
|
|||||||
READ8_MEMBER( plus4_state::read )
|
READ8_MEMBER( plus4_state::read )
|
||||||
{
|
{
|
||||||
int phi0 = 1, mux = 0, ras = 0, ba = 1;
|
int phi0 = 1, mux = 0, ras = 0, ba = 1;
|
||||||
int scs, phi2, user, _6551, addr_clk, keyport, kernal, cs0, cs1;
|
int scs, phi2, user, _6551, addr_clk, keyport, kernal;
|
||||||
|
|
||||||
bankswitch(offset, phi0, mux, ras, &scs, &phi2, &user, &_6551, &addr_clk, &keyport, &kernal, &cs0, &cs1);
|
bankswitch(offset, phi0, mux, ras, &scs, &phi2, &user, &_6551, &addr_clk, &keyport, &kernal);
|
||||||
|
|
||||||
return read_memory(space, offset, ba, scs, phi2, user, _6551, addr_clk, keyport, kernal, cs0, cs1);
|
return read_memory(space, offset, ba, scs, phi2, user, _6551, addr_clk, keyport, kernal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -256,11 +249,13 @@ READ8_MEMBER( plus4_state::read )
|
|||||||
|
|
||||||
WRITE8_MEMBER( plus4_state::write )
|
WRITE8_MEMBER( plus4_state::write )
|
||||||
{
|
{
|
||||||
int scs, phi2, user, _6551, addr_clk, keyport, kernal, cs0, cs1;
|
int scs, phi2, user, _6551, addr_clk, keyport, kernal;
|
||||||
int phi0 = 1, mux = 0, ras = 0, ba = 1;
|
int phi0 = 1, mux = 0, ras = 0, ba = 1;
|
||||||
int c1l = 1, c1h = 1, c2l = 1, c2h = 1;
|
int cs0 = 1, cs1 = 1, c1l = 1, c1h = 1, c2l = 1, c2h = 1;
|
||||||
|
|
||||||
bankswitch(offset, phi0, mux, ras, &scs, &phi2, &user, &_6551, &addr_clk, &keyport, &kernal, &cs0, &cs1);
|
bankswitch(offset, phi0, mux, ras, &scs, &phi2, &user, &_6551, &addr_clk, &keyport, &kernal);
|
||||||
|
|
||||||
|
m_ted->write(space, offset, data, cs0, cs1);
|
||||||
|
|
||||||
//logerror("write offset %04x data %02x user %u 6551 %u addr_clk %u keyport %u kernal %u cs0 %u cs1 %u\n", offset,data,user,_6551,addr_clk,keyport,kernal,cs0,cs1);
|
//logerror("write offset %04x data %02x user %u 6551 %u addr_clk %u keyport %u kernal %u cs0 %u cs1 %u\n", offset,data,user,_6551,addr_clk,keyport,kernal,cs0,cs1);
|
||||||
|
|
||||||
@ -284,18 +279,6 @@ WRITE8_MEMBER( plus4_state::write )
|
|||||||
{
|
{
|
||||||
m_spi_kb->write(space, 0, data);
|
m_spi_kb->write(space, 0, data);
|
||||||
}
|
}
|
||||||
else if (offset >= 0xff00 && offset < 0xff20)
|
|
||||||
{
|
|
||||||
m_ted->write(space, offset & 0x1f, data);
|
|
||||||
}
|
|
||||||
else if (offset == 0xff3e)
|
|
||||||
{
|
|
||||||
m_ted->rom_switch_w(1);
|
|
||||||
}
|
|
||||||
else if (offset == 0xff3f)
|
|
||||||
{
|
|
||||||
m_ted->rom_switch_w(0);
|
|
||||||
}
|
|
||||||
else if (offset < 0xfd00 || offset >= 0xff20)
|
else if (offset < 0xfd00 || offset >= 0xff20)
|
||||||
{
|
{
|
||||||
m_ram->pointer()[offset & m_ram->mask()] = data;
|
m_ram->pointer()[offset & m_ram->mask()] = data;
|
||||||
@ -312,11 +295,11 @@ WRITE8_MEMBER( plus4_state::write )
|
|||||||
READ8_MEMBER( plus4_state::ted_videoram_r )
|
READ8_MEMBER( plus4_state::ted_videoram_r )
|
||||||
{
|
{
|
||||||
int phi0 = 1, mux = 0, ras = 1, ba = 0;
|
int phi0 = 1, mux = 0, ras = 1, ba = 0;
|
||||||
int scs, phi2, user, _6551, addr_clk, keyport, kernal, cs0, cs1;
|
int scs, phi2, user, _6551, addr_clk, keyport, kernal;
|
||||||
|
|
||||||
bankswitch(offset, phi0, mux, ras, &scs, &phi2, &user, &_6551, &addr_clk, &keyport, &kernal, &cs0, &cs1);
|
bankswitch(offset, phi0, mux, ras, &scs, &phi2, &user, &_6551, &addr_clk, &keyport, &kernal);
|
||||||
|
|
||||||
return read_memory(space, offset, ba, scs, phi2, user, _6551, addr_clk, keyport, kernal, cs0, cs1);
|
return read_memory(space, offset, ba, scs, phi2, user, _6551, addr_clk, keyport, kernal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -574,16 +557,6 @@ WRITE8_MEMBER( plus4_state::cpu_w )
|
|||||||
// ted7360_interface ted_intf
|
// ted7360_interface ted_intf
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(plus4_state::c16_raster_interrupt)
|
|
||||||
{
|
|
||||||
m_ted->raster_interrupt_gen();
|
|
||||||
}
|
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(plus4_state::c16_frame_interrupt)
|
|
||||||
{
|
|
||||||
m_ted->frame_interrupt_gen();
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( plus4_state::ted_irq_w )
|
WRITE_LINE_MEMBER( plus4_state::ted_irq_w )
|
||||||
{
|
{
|
||||||
m_ted_irq = state;
|
m_ted_irq = state;
|
||||||
@ -640,13 +613,6 @@ READ8_MEMBER( plus4_state::ted_k_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS7360_INTERFACE( ted_intf )
|
|
||||||
{
|
|
||||||
SCREEN_TAG,
|
|
||||||
MOS7501_TAG,
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(plus4_state, ted_irq_w),
|
|
||||||
DEVCB_DRIVER_MEMBER(plus4_state, ted_k_r)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -671,34 +637,6 @@ WRITE_LINE_MEMBER( plus4_state::acia_irq_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// CBM_IEC_INTERFACE( iec_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static CBM_IEC_INTERFACE( iec_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(PLUS4_USER_PORT_TAG, plus4_user_port_device, atn_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// CBM_IEC_INTERFACE( c16_iec_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static CBM_IEC_INTERFACE( c16_iec_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// PLUS4_EXPANSION_INTERFACE( expansion_intf )
|
// PLUS4_EXPANSION_INTERFACE( expansion_intf )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -799,13 +737,11 @@ static MACHINE_CONFIG_START( ntsc, plus4_state )
|
|||||||
MCFG_CPU_PROGRAM_MAP(plus4_mem)
|
MCFG_CPU_PROGRAM_MAP(plus4_mem)
|
||||||
MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, cpu_r), WRITE8(plus4_state, cpu_w))
|
MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, cpu_r), WRITE8(plus4_state, cpu_w))
|
||||||
MCFG_M7501_PORT_PULLS(0x00, 0xc0)
|
MCFG_M7501_PORT_PULLS(0x00, 0xc0)
|
||||||
MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_TAG, plus4_state, c16_frame_interrupt)
|
|
||||||
MCFG_CPU_PERIODIC_INT_DRIVER(plus4_state, c16_raster_interrupt, TED7360_HRETRACERATE)
|
|
||||||
MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG)
|
MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG)
|
||||||
|
|
||||||
// video and sound hardware
|
// video and sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_MOS7360_ADD(MOS7360_TAG, SCREEN_TAG, XTAL_14_31818MHz/4, ted_intf, ted_videoram_map)
|
MCFG_MOS7360_ADD(MOS7360_TAG, SCREEN_TAG, MOS7501_TAG, XTAL_14_31818MHz/4, ted_videoram_map, DEVWRITELINE(DEVICE_SELF, plus4_state, ted_irq_w), DEVREAD8(DEVICE_SELF, plus4_state, ted_k_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
@ -814,7 +750,8 @@ static MACHINE_CONFIG_START( ntsc, plus4_state )
|
|||||||
MCFG_MOS6529_ADD(MOS6529_USER_TAG, DEVREAD8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r), DEVWRITE8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w))
|
MCFG_MOS6529_ADD(MOS6529_USER_TAG, DEVREAD8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r), DEVWRITE8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w))
|
||||||
MCFG_MOS6529_ADD(MOS6529_KB_TAG, CONSTANT(0xff), DEVWRITE8(DEVICE_SELF, plus4_state, spi_kb_w))
|
MCFG_MOS6529_ADD(MOS6529_KB_TAG, CONSTANT(0xff), DEVWRITE8(DEVICE_SELF, plus4_state, spi_kb_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL, NULL)
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL, NULL)
|
||||||
MCFG_CBM_IEC_ADD(iec_intf, NULL)
|
MCFG_CBM_IEC_ADD(NULL)
|
||||||
|
MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, atn_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||||
MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_14_31818MHz/16, expansion_intf, plus4_expansion_cards, "c1551", NULL)
|
MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_14_31818MHz/16, expansion_intf, plus4_expansion_cards, "c1551", NULL)
|
||||||
@ -845,13 +782,11 @@ static MACHINE_CONFIG_START( pal, plus4_state )
|
|||||||
MCFG_CPU_PROGRAM_MAP(plus4_mem)
|
MCFG_CPU_PROGRAM_MAP(plus4_mem)
|
||||||
MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, cpu_r), WRITE8(plus4_state, cpu_w))
|
MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, cpu_r), WRITE8(plus4_state, cpu_w))
|
||||||
MCFG_M7501_PORT_PULLS(0x00, 0xc0)
|
MCFG_M7501_PORT_PULLS(0x00, 0xc0)
|
||||||
MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_TAG, plus4_state, c16_frame_interrupt)
|
|
||||||
MCFG_CPU_PERIODIC_INT_DRIVER(plus4_state, c16_raster_interrupt, TED7360_HRETRACERATE)
|
|
||||||
MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG)
|
MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG)
|
||||||
|
|
||||||
// video and sound hardware
|
// video and sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_MOS7360_ADD(MOS7360_TAG, SCREEN_TAG, XTAL_17_73447MHz/5, ted_intf, ted_videoram_map)
|
MCFG_MOS7360_ADD(MOS7360_TAG, SCREEN_TAG, MOS7501_TAG, XTAL_17_73447MHz/5, ted_videoram_map, DEVWRITELINE(DEVICE_SELF, plus4_state, ted_irq_w), DEVREAD8(DEVICE_SELF, plus4_state, ted_k_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
@ -860,7 +795,8 @@ static MACHINE_CONFIG_START( pal, plus4_state )
|
|||||||
MCFG_MOS6529_ADD(MOS6529_USER_TAG, DEVREAD8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r), DEVWRITE8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w))
|
MCFG_MOS6529_ADD(MOS6529_USER_TAG, DEVREAD8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r), DEVWRITE8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w))
|
||||||
MCFG_MOS6529_ADD(MOS6529_KB_TAG, CONSTANT(0xff), DEVWRITE8(DEVICE_SELF, plus4_state, spi_kb_w))
|
MCFG_MOS6529_ADD(MOS6529_KB_TAG, CONSTANT(0xff), DEVWRITE8(DEVICE_SELF, plus4_state, spi_kb_w))
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL, NULL)
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL, NULL)
|
||||||
MCFG_CBM_IEC_ADD(iec_intf, NULL)
|
MCFG_CBM_IEC_ADD(NULL)
|
||||||
|
MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, atn_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||||
MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_17_73447MHz/20, expansion_intf, plus4_expansion_cards, "c1551", NULL)
|
MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_17_73447MHz/20, expansion_intf, plus4_expansion_cards, "c1551", NULL)
|
||||||
@ -895,7 +831,7 @@ static MACHINE_CONFIG_DERIVED_CLASS( c16n, ntsc, c16_state )
|
|||||||
MCFG_DEVICE_REMOVE(PLUS4_USER_PORT_TAG)
|
MCFG_DEVICE_REMOVE(PLUS4_USER_PORT_TAG)
|
||||||
|
|
||||||
MCFG_DEVICE_MODIFY(CBM_IEC_TAG)
|
MCFG_DEVICE_MODIFY(CBM_IEC_TAG)
|
||||||
MCFG_DEVICE_CONFIG(c16_iec_intf)
|
MCFG_CBM_IEC_BUS_ATN_CALLBACK(NULL)
|
||||||
|
|
||||||
MCFG_DEVICE_MODIFY(RAM_TAG)
|
MCFG_DEVICE_MODIFY(RAM_TAG)
|
||||||
MCFG_RAM_DEFAULT_SIZE("16K")
|
MCFG_RAM_DEFAULT_SIZE("16K")
|
||||||
@ -917,7 +853,7 @@ static MACHINE_CONFIG_DERIVED_CLASS( c16p, pal, c16_state )
|
|||||||
MCFG_DEVICE_REMOVE(PLUS4_USER_PORT_TAG)
|
MCFG_DEVICE_REMOVE(PLUS4_USER_PORT_TAG)
|
||||||
|
|
||||||
MCFG_DEVICE_MODIFY(CBM_IEC_TAG)
|
MCFG_DEVICE_MODIFY(CBM_IEC_TAG)
|
||||||
MCFG_DEVICE_CONFIG(c16_iec_intf)
|
MCFG_CBM_IEC_BUS_ATN_CALLBACK(NULL)
|
||||||
|
|
||||||
MCFG_DEVICE_MODIFY(RAM_TAG)
|
MCFG_DEVICE_MODIFY(RAM_TAG)
|
||||||
MCFG_RAM_DEFAULT_SIZE("16K")
|
MCFG_RAM_DEFAULT_SIZE("16K")
|
||||||
|
@ -248,15 +248,6 @@ static const cassette_interface primo_cassette_interface =
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static CBM_IEC_INTERFACE( cbm_iec_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( primoa32, primo_state )
|
static MACHINE_CONFIG_START( primoa32, primo_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD( "maincpu", Z80, 2500000 )
|
MCFG_CPU_ADD( "maincpu", Z80, 2500000 )
|
||||||
@ -290,7 +281,7 @@ static MACHINE_CONFIG_START( primoa32, primo_state )
|
|||||||
MCFG_CASSETTE_ADD( CASSETTE_TAG, primo_cassette_interface )
|
MCFG_CASSETTE_ADD( CASSETTE_TAG, primo_cassette_interface )
|
||||||
|
|
||||||
/* floppy from serial bus */
|
/* floppy from serial bus */
|
||||||
MCFG_CBM_IEC_ADD(cbm_iec_intf, NULL)
|
MCFG_CBM_IEC_ADD(NULL)
|
||||||
|
|
||||||
/* cartridge */
|
/* cartridge */
|
||||||
MCFG_CARTSLOT_ADD("cart1")
|
MCFG_CARTSLOT_ADD("cart1")
|
||||||
|
@ -506,23 +506,6 @@ static const centronics_interface centronics_intf =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// GENERIC_TERMINAL_INTERFACE( terminal_intf )
|
// GENERIC_TERMINAL_INTERFACE( terminal_intf )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -596,7 +579,7 @@ static MACHINE_CONFIG_START( sage2, sage2_state )
|
|||||||
MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, centronics_intf)
|
MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, centronics_intf)
|
||||||
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", sage2_floppies, "525qd", 0, floppy_image_device::default_floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", sage2_floppies, "525qd", 0, floppy_image_device::default_floppy_formats)
|
||||||
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", sage2_floppies, "525qd", 0, floppy_image_device::default_floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", sage2_floppies, "525qd", 0, floppy_image_device::default_floppy_formats)
|
||||||
MCFG_IEEE488_BUS_ADD(ieee488_intf)
|
MCFG_IEEE488_BUS_ADD()
|
||||||
|
|
||||||
// internal ram
|
// internal ram
|
||||||
MCFG_RAM_ADD(RAM_TAG)
|
MCFG_RAM_ADD(RAM_TAG)
|
||||||
|
@ -1129,24 +1129,6 @@ static ACIA6850_INTERFACE( acia_intf )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// MACHINE INITIALIZATION
|
// MACHINE INITIALIZATION
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
@ -1228,7 +1210,7 @@ static MACHINE_CONFIG_START( tek4051, tek4051_state )
|
|||||||
MCFG_PIA6821_ADD(MC6820_GPIB_TAG, gpib_pia_intf)
|
MCFG_PIA6821_ADD(MC6820_GPIB_TAG, gpib_pia_intf)
|
||||||
MCFG_PIA6821_ADD(MC6820_COM_TAG, com_pia_intf)
|
MCFG_PIA6821_ADD(MC6820_COM_TAG, com_pia_intf)
|
||||||
MCFG_ACIA6850_ADD(MC6850_TAG, acia_intf)
|
MCFG_ACIA6850_ADD(MC6850_TAG, acia_intf)
|
||||||
MCFG_IEEE488_BUS_ADD(ieee488_intf)
|
MCFG_IEEE488_BUS_ADD()
|
||||||
|
|
||||||
// internal ram
|
// internal ram
|
||||||
MCFG_RAM_ADD(RAM_TAG)
|
MCFG_RAM_ADD(RAM_TAG)
|
||||||
|
@ -290,16 +290,6 @@ WRITE_LINE_MEMBER( vic10_state::vic_irq_w )
|
|||||||
check_interrupts();
|
check_interrupts();
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6566_INTERFACE( vic_intf )
|
|
||||||
{
|
|
||||||
SCREEN_TAG,
|
|
||||||
M6510_TAG,
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(vic10_state, vic_irq_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// sid6581_interface sid_intf
|
// sid6581_interface sid_intf
|
||||||
@ -359,12 +349,6 @@ READ8_MEMBER( vic10_state::sid_poty_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6581_INTERFACE( sid_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_MEMBER(vic10_state, sid_potx_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(vic10_state, sid_poty_r)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MOS6526_INTERFACE( cia_intf )
|
// MOS6526_INTERFACE( cia_intf )
|
||||||
@ -485,18 +469,6 @@ WRITE8_MEMBER( vic10_state::cia_pb_w )
|
|||||||
m_vic->lp_w(BIT(data, 4));
|
m_vic->lp_w(BIT(data, 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( cia_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(vic10_state, cia_irq_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(VIC10_EXPANSION_SLOT_TAG, vic10_expansion_slot_device, sp_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(VIC10_EXPANSION_SLOT_TAG, vic10_expansion_slot_device, cnt_w),
|
|
||||||
DEVCB_DRIVER_MEMBER(vic10_state, cia_pa_r),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DRIVER_MEMBER(vic10_state, cia_pb_r),
|
|
||||||
DEVCB_DRIVER_MEMBER(vic10_state, cia_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// M6510_INTERFACE( cpu_intf )
|
// M6510_INTERFACE( cpu_intf )
|
||||||
@ -636,16 +608,19 @@ static MACHINE_CONFIG_START( vic10, vic10_state )
|
|||||||
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
|
MCFG_QUANTUM_PERFECT_CPU(M6510_TAG)
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
MCFG_MOS6566_ADD(MOS6566_TAG, SCREEN_TAG, VIC6566_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS6566_ADD(MOS6566_TAG, SCREEN_TAG, VIC6566_CLOCK, vic_videoram_map, vic_colorram_map, DEVWRITELINE(DEVICE_SELF, vic10_state, vic_irq_w))
|
||||||
|
|
||||||
// sound hardware
|
// sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS6581_TAG, SID6581, VIC6566_CLOCK)
|
MCFG_SOUND_ADD(MOS6581_TAG, MOS6581, VIC6566_CLOCK)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
MCFG_MOS6581_POTXY_CALLBACKS(DEVREAD8(DEVICE_SELF, vic10_state, sid_potx_r), DEVREAD8(DEVICE_SELF, vic10_state, sid_poty_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
MCFG_MOS6526_ADD(MOS6526_TAG, VIC6566_CLOCK, 60, cia_intf)
|
MCFG_MOS6526_ADD(MOS6526_TAG, VIC6566_CLOCK, 60, DEVWRITELINE(DEVICE_SELF, vic10_state, cia_irq_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(VIC10_EXPANSION_SLOT_TAG, vic10_expansion_slot_device, cnt_w), DEVWRITELINE(VIC10_EXPANSION_SLOT_TAG, vic10_expansion_slot_device, sp_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, vic10_state, cia_pa_r), NULL)
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, vic10_state, cia_pb_r), DEVWRITE8(DEVICE_SELF, vic10_state, cia_pb_w), NULL)
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
|
||||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
|
||||||
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6566_TAG, mos6566_device, lp_w))
|
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6566_TAG, mos6566_device, lp_w))
|
||||||
|
@ -301,17 +301,6 @@ READ8_MEMBER( vic20_state::vic_videoram_r )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
|
||||||
// VIDEO
|
|
||||||
//**************************************************************************
|
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(vic20_state::vic20_raster_interrupt)
|
|
||||||
{
|
|
||||||
m_vic->raster_interrupt_gen();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// ADDRESS MAPS
|
// ADDRESS MAPS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
@ -701,32 +690,6 @@ static const via6522_interface via1_intf =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// CBM_IEC_INTERFACE( cbm_iec_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static CBM_IEC_INTERFACE( cbm_iec_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(M6522_1_TAG, via6522_device, write_cb1),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// mos6560_interface vic_ntsc_intf
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static MOS6560_INTERFACE( vic_intf )
|
|
||||||
{
|
|
||||||
SCREEN_TAG,
|
|
||||||
DEVCB_DEVICE_MEMBER(CONTROL1_TAG, vcs_control_port_device, pot_x_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(CONTROL1_TAG, vcs_control_port_device, pot_y_r)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// VIC20_EXPANSION_INTERFACE( expansion_intf )
|
// VIC20_EXPANSION_INTERFACE( expansion_intf )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -813,7 +776,8 @@ static MACHINE_CONFIG_START( vic20, vic20_state )
|
|||||||
MCFG_VIA6522_ADD(M6522_0_TAG, 0, via0_intf)
|
MCFG_VIA6522_ADD(M6522_0_TAG, 0, via0_intf)
|
||||||
MCFG_VIA6522_ADD(M6522_1_TAG, 0, via1_intf)
|
MCFG_VIA6522_ADD(M6522_1_TAG, 0, via1_intf)
|
||||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(M6522_1_TAG, via6522_device, write_ca1))
|
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(M6522_1_TAG, via6522_device, write_ca1))
|
||||||
MCFG_CBM_IEC_ADD(cbm_iec_intf, "c1541")
|
MCFG_CBM_IEC_ADD("c1541")
|
||||||
|
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(M6522_1_TAG, via6522_device, write_cb1))
|
||||||
MCFG_VIC20_USER_PORT_ADD(VIC20_USER_PORT_TAG, user_intf, vic20_user_port_cards, NULL, NULL)
|
MCFG_VIC20_USER_PORT_ADD(VIC20_USER_PORT_TAG, user_intf, vic20_user_port_cards, NULL, NULL)
|
||||||
MCFG_QUICKLOAD_ADD("quickload", cbm_vc20, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
MCFG_QUICKLOAD_ADD("quickload", cbm_vc20, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||||
|
|
||||||
@ -836,11 +800,10 @@ static MACHINE_CONFIG_DERIVED( ntsc, vic20 )
|
|||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
MCFG_CPU_ADD(M6502_TAG, M6502, MOS6560_CLOCK)
|
MCFG_CPU_ADD(M6502_TAG, M6502, MOS6560_CLOCK)
|
||||||
MCFG_CPU_PROGRAM_MAP(vic20_mem)
|
MCFG_CPU_PROGRAM_MAP(vic20_mem)
|
||||||
MCFG_CPU_PERIODIC_INT_DRIVER(vic20_state, vic20_raster_interrupt, MOS656X_HRETRACERATE)
|
|
||||||
|
|
||||||
// video/sound hardware
|
// video/sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_MOS6560_ADD(M6560_TAG, SCREEN_TAG, MOS6560_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS6560_ADD(M6560_TAG, SCREEN_TAG, MOS6560_CLOCK, vic_videoram_map, vic_colorram_map, DEVREAD8(CONTROL1_TAG, vcs_control_port_device, pot_x_r), DEVREAD8(CONTROL1_TAG, vcs_control_port_device, pot_y_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
@ -863,11 +826,10 @@ static MACHINE_CONFIG_DERIVED( pal, vic20 )
|
|||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
MCFG_CPU_ADD(M6502_TAG, M6502, MOS6561_CLOCK)
|
MCFG_CPU_ADD(M6502_TAG, M6502, MOS6561_CLOCK)
|
||||||
MCFG_CPU_PROGRAM_MAP(vic20_mem)
|
MCFG_CPU_PROGRAM_MAP(vic20_mem)
|
||||||
MCFG_CPU_PERIODIC_INT_DRIVER(vic20_state, vic20_raster_interrupt, MOS656X_HRETRACERATE)
|
|
||||||
|
|
||||||
// video/sound hardware
|
// video/sound hardware
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_MOS6561_ADD(M6560_TAG, SCREEN_TAG, MOS6561_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
MCFG_MOS6561_ADD(M6560_TAG, SCREEN_TAG, MOS6561_CLOCK, vic_videoram_map, vic_colorram_map, DEVREAD8(CONTROL1_TAG, vcs_control_port_device, pot_x_r), DEVREAD8(CONTROL1_TAG, vcs_control_port_device, pot_y_r))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
|
@ -884,20 +884,6 @@ static VICTOR9K_KEYBOARD_INTERFACE( kb_intf )
|
|||||||
DEVCB_DRIVER_LINE_MEMBER(victor9k_state, kbrdy_w)
|
DEVCB_DRIVER_LINE_MEMBER(victor9k_state, kbrdy_w)
|
||||||
};
|
};
|
||||||
|
|
||||||
// IEEE-488 Interface
|
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(M6522_1_TAG, via6522_device, write_ca1),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(M6522_1_TAG, via6522_device, write_ca2),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static SLOT_INTERFACE_START( victor9k_floppies )
|
static SLOT_INTERFACE_START( victor9k_floppies )
|
||||||
SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
|
SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
|
||||||
SLOT_INTERFACE_END
|
SLOT_INTERFACE_END
|
||||||
@ -948,7 +934,9 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
|
|||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
MCFG_IEEE488_BUS_ADD(ieee488_intf)
|
MCFG_IEEE488_BUS_ADD()
|
||||||
|
MCFG_IEEE488_NRFD_CALLBACK(DEVWRITELINE(M6522_1_TAG, via6522_device, write_ca1))
|
||||||
|
MCFG_IEEE488_NDAC_CALLBACK(DEVWRITELINE(M6522_1_TAG, via6522_device, write_ca2))
|
||||||
MCFG_PIC8259_ADD(I8259A_TAG, pic_intf)
|
MCFG_PIC8259_ADD(I8259A_TAG, pic_intf)
|
||||||
MCFG_PIT8253_ADD(I8253_TAG, pit_intf)
|
MCFG_PIT8253_ADD(I8253_TAG, pit_intf)
|
||||||
MCFG_UPD7201_ADD(UPD7201_TAG, XTAL_30MHz/30, mpsc_intf)
|
MCFG_UPD7201_ADD(UPD7201_TAG, XTAL_30MHz/30, mpsc_intf)
|
||||||
|
@ -698,18 +698,6 @@ WRITE_LINE_MEMBER( vixen_state::atn_w )
|
|||||||
update_interrupt();
|
update_interrupt();
|
||||||
}
|
}
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(vixen_state, srq_w),
|
|
||||||
DEVCB_DRIVER_LINE_MEMBER(vixen_state, atn_w),
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static SLOT_INTERFACE_START( vixen_floppies )
|
static SLOT_INTERFACE_START( vixen_floppies )
|
||||||
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
|
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
|
||||||
SLOT_INTERFACE_END
|
SLOT_INTERFACE_END
|
||||||
@ -831,7 +819,9 @@ static MACHINE_CONFIG_START( vixen, vixen_state )
|
|||||||
MCFG_FD1797x_ADD(FDC1797_TAG, XTAL_23_9616MHz/24)
|
MCFG_FD1797x_ADD(FDC1797_TAG, XTAL_23_9616MHz/24)
|
||||||
MCFG_FLOPPY_DRIVE_ADD(FDC1797_TAG":0", vixen_floppies, "525dd", NULL, floppy_image_device::default_floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD(FDC1797_TAG":0", vixen_floppies, "525dd", NULL, floppy_image_device::default_floppy_formats)
|
||||||
MCFG_FLOPPY_DRIVE_ADD(FDC1797_TAG":1", vixen_floppies, "525dd", NULL, floppy_image_device::default_floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD(FDC1797_TAG":1", vixen_floppies, "525dd", NULL, floppy_image_device::default_floppy_formats)
|
||||||
MCFG_IEEE488_BUS_ADD(ieee488_intf)
|
MCFG_IEEE488_BUS_ADD()
|
||||||
|
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(DEVICE_SELF, vixen_state, srq_w))
|
||||||
|
MCFG_IEEE488_ATN_CALLBACK(DEVWRITELINE(DEVICE_SELF, vixen_state, atn_w))
|
||||||
|
|
||||||
/* software lists */
|
/* software lists */
|
||||||
MCFG_SOFTWARE_LIST_ADD("disk_list", "vixen")
|
MCFG_SOFTWARE_LIST_ADD("disk_list", "vixen")
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include "machine/ram.h"
|
#include "machine/ram.h"
|
||||||
#include "machine/vcsctrl.h"
|
#include "machine/vcsctrl.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
#include "video/mos6566.h"
|
#include "video/mos6566.h"
|
||||||
|
|
||||||
#define Z80A_TAG "u10"
|
#define Z80A_TAG "u10"
|
||||||
@ -105,7 +105,7 @@ public:
|
|||||||
required_device<mos8721_device> m_pla;
|
required_device<mos8721_device> m_pla;
|
||||||
required_device<mos8563_device> m_vdc;
|
required_device<mos8563_device> m_vdc;
|
||||||
required_device<mos6566_device> m_vic;
|
required_device<mos6566_device> m_vic;
|
||||||
required_device<sid6581_device> m_sid;
|
required_device<mos6581_device> m_sid;
|
||||||
required_device<mos6526_device> m_cia1;
|
required_device<mos6526_device> m_cia1;
|
||||||
required_device<mos6526_device> m_cia2;
|
required_device<mos6526_device> m_cia2;
|
||||||
required_device<cbm_iec_device> m_iec;
|
required_device<cbm_iec_device> m_iec;
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#include "machine/ram.h"
|
#include "machine/ram.h"
|
||||||
#include "machine/vcsctrl.h"
|
#include "machine/vcsctrl.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
#include "video/mos6566.h"
|
#include "video/mos6566.h"
|
||||||
|
|
||||||
#define M6510_TAG "u7"
|
#define M6510_TAG "u7"
|
||||||
@ -77,7 +77,7 @@ public:
|
|||||||
required_device<m6510_device> m_maincpu;
|
required_device<m6510_device> m_maincpu;
|
||||||
required_device<pls100_device> m_pla;
|
required_device<pls100_device> m_pla;
|
||||||
required_device<mos6566_device> m_vic;
|
required_device<mos6566_device> m_vic;
|
||||||
required_device<sid6581_device> m_sid;
|
required_device<mos6581_device> m_sid;
|
||||||
required_device<mos6526_device> m_cia1;
|
required_device<mos6526_device> m_cia1;
|
||||||
required_device<mos6526_device> m_cia2;
|
required_device<mos6526_device> m_cia2;
|
||||||
optional_device<cbm_iec_device> m_iec;
|
optional_device<cbm_iec_device> m_iec;
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include "machine/serial.h"
|
#include "machine/serial.h"
|
||||||
#include "machine/vcsctrl.h"
|
#include "machine/vcsctrl.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
#include "video/mc6845.h"
|
#include "video/mc6845.h"
|
||||||
#include "video/mos6566.h"
|
#include "video/mos6566.h"
|
||||||
|
|
||||||
@ -34,7 +34,7 @@
|
|||||||
#define MOS6567_TAG "u23"
|
#define MOS6567_TAG "u23"
|
||||||
#define MOS6569_TAG "u23"
|
#define MOS6569_TAG "u23"
|
||||||
#define MC68B45_TAG "u10"
|
#define MC68B45_TAG "u10"
|
||||||
#define MOS6851_TAG "u4"
|
#define MOS6581_TAG "u4"
|
||||||
#define MOS6525_1_TAG "u20"
|
#define MOS6525_1_TAG "u20"
|
||||||
#define MOS6525_2_TAG "u102"
|
#define MOS6525_2_TAG "u102"
|
||||||
#define MOS6551A_TAG "u19"
|
#define MOS6551A_TAG "u19"
|
||||||
@ -60,7 +60,7 @@ public:
|
|||||||
m_maincpu(*this, M6509_TAG),
|
m_maincpu(*this, M6509_TAG),
|
||||||
m_pla1(*this, PLA1_TAG),
|
m_pla1(*this, PLA1_TAG),
|
||||||
m_crtc(*this, MC68B45_TAG),
|
m_crtc(*this, MC68B45_TAG),
|
||||||
m_sid(*this, MOS6851_TAG),
|
m_sid(*this, MOS6581_TAG),
|
||||||
m_tpi1(*this, MOS6525_1_TAG),
|
m_tpi1(*this, MOS6525_1_TAG),
|
||||||
m_tpi2(*this, MOS6525_2_TAG),
|
m_tpi2(*this, MOS6525_2_TAG),
|
||||||
m_acia(*this, MOS6551A_TAG),
|
m_acia(*this, MOS6551A_TAG),
|
||||||
@ -115,7 +115,7 @@ public:
|
|||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<pls100_device> m_pla1;
|
required_device<pls100_device> m_pla1;
|
||||||
optional_device<mc6845_device> m_crtc;
|
optional_device<mc6845_device> m_crtc;
|
||||||
required_device<sid6581_device> m_sid;
|
required_device<mos6581_device> m_sid;
|
||||||
required_device<tpi6525_device> m_tpi1;
|
required_device<tpi6525_device> m_tpi1;
|
||||||
required_device<tpi6525_device> m_tpi2;
|
required_device<tpi6525_device> m_tpi2;
|
||||||
required_device<mos6551_device> m_acia;
|
required_device<mos6551_device> m_acia;
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
#define __PLUS4__
|
#define __PLUS4__
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "audio/mos7360.h"
|
|
||||||
#include "cpu/m6502/m7501.h"
|
#include "cpu/m6502/m7501.h"
|
||||||
#include "formats/cbm_snqk.h"
|
#include "formats/cbm_snqk.h"
|
||||||
#include "machine/cbmiec.h"
|
#include "machine/cbmiec.h"
|
||||||
@ -17,6 +16,7 @@
|
|||||||
#include "machine/plus4exp.h"
|
#include "machine/plus4exp.h"
|
||||||
#include "machine/plus4user.h"
|
#include "machine/plus4user.h"
|
||||||
#include "machine/ram.h"
|
#include "machine/ram.h"
|
||||||
|
#include "sound/mos7360.h"
|
||||||
#include "sound/t6721a.h"
|
#include "sound/t6721a.h"
|
||||||
|
|
||||||
#define MOS7501_TAG "u2"
|
#define MOS7501_TAG "u2"
|
||||||
@ -99,8 +99,8 @@ public:
|
|||||||
virtual void machine_reset();
|
virtual void machine_reset();
|
||||||
|
|
||||||
void check_interrupts();
|
void check_interrupts();
|
||||||
void bankswitch(offs_t offset, int phi0, int mux, int ras, int *scs, int *phi2, int *user, int *_6551, int *addr_clk, int *keyport, int *kernal, int *cs0, int *cs1);
|
void bankswitch(offs_t offset, int phi0, int mux, int ras, int *scs, int *phi2, int *user, int *_6551, int *addr_clk, int *keyport, int *kernal);
|
||||||
UINT8 read_memory(address_space &space, offs_t offset, int ba, int scs, int phi2, int user, int _6551, int addr_clk, int keyport, int kernal, int cs0, int cs1);
|
UINT8 read_memory(address_space &space, offs_t offset, int ba, int scs, int phi2, int user, int _6551, int addr_clk, int keyport, int kernal);
|
||||||
UINT8 read_keyboard(UINT8 databus);
|
UINT8 read_keyboard(UINT8 databus);
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER( read );
|
DECLARE_READ8_MEMBER( read );
|
||||||
@ -149,9 +149,6 @@ public:
|
|||||||
|
|
||||||
// keyboard state
|
// keyboard state
|
||||||
UINT8 m_kb;
|
UINT8 m_kb;
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(c16_raster_interrupt);
|
|
||||||
INTERRUPT_GEN_MEMBER(c16_frame_interrupt);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include "machine/ram.h"
|
#include "machine/ram.h"
|
||||||
#include "machine/vcsctrl.h"
|
#include "machine/vcsctrl.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
#include "video/mos6566.h"
|
#include "video/mos6566.h"
|
||||||
|
|
||||||
#define M6510_TAG "u3"
|
#define M6510_TAG "u3"
|
||||||
@ -55,7 +55,7 @@ public:
|
|||||||
|
|
||||||
required_device<m6510_device> m_maincpu;
|
required_device<m6510_device> m_maincpu;
|
||||||
required_device<mos6566_device> m_vic;
|
required_device<mos6566_device> m_vic;
|
||||||
required_device<sid6581_device> m_sid;
|
required_device<mos6581_device> m_sid;
|
||||||
required_device<mos6526_device> m_cia;
|
required_device<mos6526_device> m_cia;
|
||||||
required_device<vcs_control_port_device> m_joy1;
|
required_device<vcs_control_port_device> m_joy1;
|
||||||
required_device<vcs_control_port_device> m_joy2;
|
required_device<vcs_control_port_device> m_joy2;
|
||||||
|
@ -113,7 +113,6 @@ public:
|
|||||||
|
|
||||||
// keyboard state
|
// keyboard state
|
||||||
int m_key_col;
|
int m_key_col;
|
||||||
INTERRUPT_GEN_MEMBER(vic20_raster_interrupt);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -67,7 +67,7 @@ const device_type MINI_CHIEF = &device_creator<mini_chief_device>;
|
|||||||
// complete
|
// complete
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::device_config_complete()
|
void c1571_device::device_config_complete()
|
||||||
{
|
{
|
||||||
switch (m_variant)
|
switch (m_variant)
|
||||||
{
|
{
|
||||||
@ -148,7 +148,7 @@ ROM_END
|
|||||||
// rom_region - device-specific ROM region
|
// rom_region - device-specific ROM region
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
const rom_entry *base_c1571_device::device_rom_region() const
|
const rom_entry *c1571_device::device_rom_region() const
|
||||||
{
|
{
|
||||||
switch (m_variant)
|
switch (m_variant)
|
||||||
{
|
{
|
||||||
@ -172,7 +172,7 @@ const rom_entry *base_c1571_device::device_rom_region() const
|
|||||||
// ADDRESS_MAP( c1571_mem )
|
// ADDRESS_MAP( c1571_mem )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static ADDRESS_MAP_START( c1571_mem, AS_PROGRAM, 8, base_c1571_device )
|
static ADDRESS_MAP_START( c1571_mem, AS_PROGRAM, 8, c1571_device )
|
||||||
AM_RANGE(0x0000, 0x07ff) AM_RAM
|
AM_RANGE(0x0000, 0x07ff) AM_RAM
|
||||||
AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x03f0) AM_DEVREADWRITE(M6522_0_TAG, via6522_device, read, write)
|
AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x03f0) AM_DEVREADWRITE(M6522_0_TAG, via6522_device, read, write)
|
||||||
AM_RANGE(0x1c00, 0x1c0f) AM_MIRROR(0x03f0) AM_READWRITE(via1_r, via1_w)
|
AM_RANGE(0x1c00, 0x1c0f) AM_MIRROR(0x03f0) AM_READWRITE(via1_r, via1_w)
|
||||||
@ -202,14 +202,14 @@ ADDRESS_MAP_END
|
|||||||
// via6522_interface via0_intf
|
// via6522_interface via0_intf
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1571_device::via0_irq_w )
|
WRITE_LINE_MEMBER( c1571_device::via0_irq_w )
|
||||||
{
|
{
|
||||||
m_via0_irq = state;
|
m_via0_irq = state;
|
||||||
|
|
||||||
m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq || m_cia_irq) ? ASSERT_LINE : CLEAR_LINE);
|
m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq || m_cia_irq) ? ASSERT_LINE : CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( base_c1571_device::via0_pa_r )
|
READ8_MEMBER( c1571_device::via0_pa_r )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ READ8_MEMBER( base_c1571_device::via0_pa_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( base_c1571_device::via0_pa_w )
|
WRITE8_MEMBER( c1571_device::via0_pa_w )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -319,7 +319,7 @@ WRITE8_MEMBER( c1571cr_device::via0_pa_w )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( base_c1571_device::via0_pb_r )
|
READ8_MEMBER( c1571_device::via0_pb_r )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -353,7 +353,7 @@ READ8_MEMBER( base_c1571_device::via0_pb_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( base_c1571_device::via0_pb_w )
|
WRITE8_MEMBER( c1571_device::via0_pb_w )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -411,42 +411,42 @@ WRITE8_MEMBER( c1571cr_device::via0_pb_w )
|
|||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
|
|
||||||
READ_LINE_MEMBER( base_c1571_device::atn_in_r )
|
READ_LINE_MEMBER( c1571_device::atn_in_r )
|
||||||
{
|
{
|
||||||
return !m_bus->atn_r();
|
return !m_bus->atn_r();
|
||||||
}
|
}
|
||||||
|
|
||||||
READ_LINE_MEMBER( base_c1571_device::wprt_r )
|
READ_LINE_MEMBER( c1571_device::wprt_r )
|
||||||
{
|
{
|
||||||
return !floppy_wpt_r(m_image);
|
return !floppy_wpt_r(m_image);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const via6522_interface via0_intf =
|
static const via6522_interface via0_intf =
|
||||||
{
|
{
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_pa_r),
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via0_pa_r),
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_pb_r),
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via0_pb_r),
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, atn_in_r),
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, atn_in_r),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, wprt_r),
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, wprt_r),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_pa_w),
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via0_pa_w),
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_pb_w),
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via0_pb_w),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_irq_w)
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via0_irq_w)
|
||||||
};
|
};
|
||||||
|
|
||||||
static const via6522_interface c1571cr_via0_intf =
|
static const via6522_interface c1571cr_via0_intf =
|
||||||
{
|
{
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_pa_r),
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via0_pa_r),
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_pb_r),
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via0_pb_r),
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, atn_in_r),
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, atn_in_r),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, wprt_r),
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, wprt_r),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571cr_device, via0_pa_w),
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571cr_device, via0_pa_w),
|
||||||
@ -456,7 +456,7 @@ static const via6522_interface c1571cr_via0_intf =
|
|||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_irq_w)
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via0_irq_w)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -464,7 +464,7 @@ static const via6522_interface c1571cr_via0_intf =
|
|||||||
// via6522_interface via1_intf
|
// via6522_interface via1_intf
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
READ8_MEMBER( base_c1571_device::via1_r )
|
READ8_MEMBER( c1571_device::via1_r )
|
||||||
{
|
{
|
||||||
UINT8 data = m_via1->read(space, offset);
|
UINT8 data = m_via1->read(space, offset);
|
||||||
|
|
||||||
@ -474,7 +474,7 @@ READ8_MEMBER( base_c1571_device::via1_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( base_c1571_device::via1_w )
|
WRITE8_MEMBER( c1571_device::via1_w )
|
||||||
{
|
{
|
||||||
m_via1->write(space, offset, data);
|
m_via1->write(space, offset, data);
|
||||||
|
|
||||||
@ -482,14 +482,14 @@ WRITE8_MEMBER( base_c1571_device::via1_w )
|
|||||||
m_ga->ted_w(1);
|
m_ga->ted_w(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1571_device::via1_irq_w )
|
WRITE_LINE_MEMBER( c1571_device::via1_irq_w )
|
||||||
{
|
{
|
||||||
m_via1_irq = state;
|
m_via1_irq = state;
|
||||||
|
|
||||||
m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq || m_cia_irq) ? ASSERT_LINE : CLEAR_LINE);
|
m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq || m_cia_irq) ? ASSERT_LINE : CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( base_c1571_device::via1_pb_r )
|
READ8_MEMBER( c1571_device::via1_pb_r )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -517,7 +517,7 @@ READ8_MEMBER( base_c1571_device::via1_pb_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( base_c1571_device::via1_pb_w )
|
WRITE8_MEMBER( c1571_device::via1_pb_w )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -550,20 +550,20 @@ WRITE8_MEMBER( base_c1571_device::via1_pb_w )
|
|||||||
static const via6522_interface via1_intf =
|
static const via6522_interface via1_intf =
|
||||||
{
|
{
|
||||||
DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_r),
|
DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_r),
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via1_pb_r),
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via1_pb_r),
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64H156_TAG, c64h156_device, byte_r),
|
DEVCB_DEVICE_LINE_MEMBER(C64H156_TAG, c64h156_device, byte_r),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
|
|
||||||
DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_w),
|
DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_w),
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via1_pb_w),
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via1_pb_w),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64H156_TAG, c64h156_device, soe_w),
|
DEVCB_DEVICE_LINE_MEMBER(C64H156_TAG, c64h156_device, soe_w),
|
||||||
DEVCB_DEVICE_LINE_MEMBER(C64H156_TAG, c64h156_device, oe_w),
|
DEVCB_DEVICE_LINE_MEMBER(C64H156_TAG, c64h156_device, oe_w),
|
||||||
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via1_irq_w)
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, via1_irq_w)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -571,14 +571,14 @@ static const via6522_interface via1_intf =
|
|||||||
// MOS6526_INTERFACE( cia_intf )
|
// MOS6526_INTERFACE( cia_intf )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1571_device::cia_irq_w )
|
WRITE_LINE_MEMBER( c1571_device::cia_irq_w )
|
||||||
{
|
{
|
||||||
m_cia_irq = state;
|
m_cia_irq = state;
|
||||||
|
|
||||||
m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq || m_cia_irq) ? ASSERT_LINE : CLEAR_LINE);
|
m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq || m_cia_irq) ? ASSERT_LINE : CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1571_device::cia_pc_w )
|
WRITE_LINE_MEMBER( c1571_device::cia_pc_w )
|
||||||
{
|
{
|
||||||
if (m_other != NULL)
|
if (m_other != NULL)
|
||||||
{
|
{
|
||||||
@ -586,24 +586,24 @@ WRITE_LINE_MEMBER( base_c1571_device::cia_pc_w )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1571_device::cia_cnt_w )
|
WRITE_LINE_MEMBER( c1571_device::cia_cnt_w )
|
||||||
{
|
{
|
||||||
m_cnt_out = state;
|
m_cnt_out = state;
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1571_device::cia_sp_w )
|
WRITE_LINE_MEMBER( c1571_device::cia_sp_w )
|
||||||
{
|
{
|
||||||
m_sp_out = state;
|
m_sp_out = state;
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( base_c1571_device::cia_pb_r )
|
READ8_MEMBER( c1571_device::cia_pb_r )
|
||||||
{
|
{
|
||||||
return m_parallel_data;
|
return m_parallel_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( base_c1571_device::cia_pb_w )
|
WRITE8_MEMBER( c1571_device::cia_pb_w )
|
||||||
{
|
{
|
||||||
if (m_other != NULL)
|
if (m_other != NULL)
|
||||||
{
|
{
|
||||||
@ -611,17 +611,6 @@ WRITE8_MEMBER( base_c1571_device::cia_pb_w )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( cia_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_irq_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_pc_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_cnt_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_sp_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_pb_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MOS6526_INTERFACE( mini_chief_cia_intf )
|
// MOS6526_INTERFACE( mini_chief_cia_intf )
|
||||||
@ -657,24 +646,12 @@ WRITE8_MEMBER( mini_chief_device::cia_pb_w )
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS6526_INTERFACE( mini_chief_cia_intf )
|
|
||||||
{
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_irq_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_pc_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_cnt_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_sp_w),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, mini_chief_device, cia_pa_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, mini_chief_device, cia_pa_w),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, mini_chief_device, cia_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// C64H156_INTERFACE( ga_intf )
|
// C64H156_INTERFACE( ga_intf )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1571_device::byte_w )
|
WRITE_LINE_MEMBER( c1571_device::byte_w )
|
||||||
{
|
{
|
||||||
m_via1->write_ca1(state);
|
m_via1->write_ca1(state);
|
||||||
m_maincpu->set_input_line(M6502_SET_OVERFLOW, state);
|
m_maincpu->set_input_line(M6502_SET_OVERFLOW, state);
|
||||||
@ -684,7 +661,7 @@ static C64H156_INTERFACE( ga_intf )
|
|||||||
{
|
{
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, byte_w)
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, byte_w)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -721,7 +698,7 @@ LEGACY_FLOPPY_OPTIONS_END
|
|||||||
// floppy_interface c1571_floppy_interface
|
// floppy_interface c1571_floppy_interface
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1571_device::wpt_w )
|
WRITE_LINE_MEMBER( c1571_device::wpt_w )
|
||||||
{
|
{
|
||||||
m_via0->write_ca2(!state);
|
m_via0->write_ca2(!state);
|
||||||
}
|
}
|
||||||
@ -731,7 +708,7 @@ static const floppy_interface c1571_floppy_interface =
|
|||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, wpt_w),
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, wpt_w),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
FLOPPY_STANDARD_5_25_DSDD,
|
FLOPPY_STANDARD_5_25_DSDD,
|
||||||
LEGACY_FLOPPY_OPTIONS_NAME(c1571),
|
LEGACY_FLOPPY_OPTIONS_NAME(c1571),
|
||||||
@ -749,7 +726,7 @@ static const floppy_interface c1570_floppy_interface =
|
|||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, wpt_w),
|
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c1571_device, wpt_w),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
FLOPPY_STANDARD_5_25_SSDD,
|
FLOPPY_STANDARD_5_25_SSDD,
|
||||||
LEGACY_FLOPPY_OPTIONS_NAME(c1541),
|
LEGACY_FLOPPY_OPTIONS_NAME(c1541),
|
||||||
@ -794,11 +771,13 @@ static MACHINE_CONFIG_FRAGMENT( c1570 )
|
|||||||
|
|
||||||
MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
|
MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
|
||||||
MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
|
MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
|
||||||
MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, cia_intf)
|
MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_irq_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_cnt_w), DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_sp_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF_OWNER, c1571_device, cia_pb_r), DEVWRITE8(DEVICE_SELF_OWNER, c1571_device, cia_pb_w), DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_pc_w))
|
||||||
MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
|
MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1570_floppy_interface)
|
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1570_floppy_interface)
|
||||||
//MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1570_floppies, "525ssdd", 0, base_c1571_device::floppy_formats)
|
//MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1570_floppies, "525ssdd", 0, c1571_device::floppy_formats)
|
||||||
MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
|
MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -814,11 +793,15 @@ static MACHINE_CONFIG_FRAGMENT( c1571 )
|
|||||||
|
|
||||||
MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
|
MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
|
||||||
MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
|
MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
|
||||||
MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, cia_intf)
|
|
||||||
|
MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_irq_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_cnt_w), DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_sp_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF_OWNER, c1571_device, cia_pb_r), DEVWRITE8(DEVICE_SELF_OWNER, c1571_device, cia_pb_w), DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_pc_w))
|
||||||
|
|
||||||
MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
|
MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1571_floppy_interface)
|
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1571_floppy_interface)
|
||||||
//MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1571_floppies, "525dd", 0, base_c1571_device::floppy_formats)
|
//MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1571_floppies, "525dd", 0, c1571_device::floppy_formats)
|
||||||
MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
|
MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -834,11 +817,13 @@ static MACHINE_CONFIG_FRAGMENT( c1571cr )
|
|||||||
|
|
||||||
MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, c1571cr_via0_intf)
|
MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, c1571cr_via0_intf)
|
||||||
MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
|
MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
|
||||||
MCFG_MOS5710_ADD(M5710_TAG, XTAL_16MHz/16, 0, cia_intf)
|
|
||||||
|
//MCFG_MOS5710_ADD(M5710_TAG, XTAL_16MHz/16, 0)
|
||||||
|
|
||||||
MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
|
MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1571_floppy_interface)
|
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1571_floppy_interface)
|
||||||
//MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1571_floppies, "525dd", 0, base_c1571_device::floppy_formats)
|
//MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1571_floppies, "525dd", 0, c1571_device::floppy_formats)
|
||||||
MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
|
MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -854,11 +839,16 @@ static MACHINE_CONFIG_FRAGMENT( mini_chief )
|
|||||||
|
|
||||||
MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
|
MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
|
||||||
MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
|
MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
|
||||||
MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, mini_chief_cia_intf)
|
|
||||||
|
MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_irq_w))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_cnt_w), DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_sp_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF_OWNER, mini_chief_device, cia_pa_r), DEVWRITE8(DEVICE_SELF_OWNER, mini_chief_device, cia_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(NULL, DEVWRITE8(DEVICE_SELF_OWNER, c1571_device, cia_pb_w), DEVWRITELINE(DEVICE_SELF_OWNER, c1571_device, cia_pc_w))
|
||||||
|
|
||||||
MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
|
MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1571_floppy_interface)
|
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1571_floppy_interface)
|
||||||
//MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1571_floppies, "525dd", 0, base_c1571_device::floppy_formats)
|
//MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1571_floppies, "525dd", 0, c1571_device::floppy_formats)
|
||||||
MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
|
MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
|
||||||
|
|
||||||
MCFG_ISA8_BUS_ADD(ISA_BUS_TAG, M6502_TAG, isabus_intf)
|
MCFG_ISA8_BUS_ADD(ISA_BUS_TAG, M6502_TAG, isabus_intf)
|
||||||
@ -871,7 +861,7 @@ MACHINE_CONFIG_END
|
|||||||
// machine configurations
|
// machine configurations
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
machine_config_constructor base_c1571_device::device_mconfig_additions() const
|
machine_config_constructor c1571_device::device_mconfig_additions() const
|
||||||
{
|
{
|
||||||
switch (m_variant)
|
switch (m_variant)
|
||||||
{
|
{
|
||||||
@ -897,10 +887,10 @@ machine_config_constructor base_c1571_device::device_mconfig_additions() const
|
|||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// base_c1571_device - constructor
|
// c1571_device - constructor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
base_c1571_device::base_c1571_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
|
c1571_device::c1571_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
|
||||||
: device_t(mconfig, type, name, tag, owner, clock),
|
: device_t(mconfig, type, name, tag, owner, clock),
|
||||||
device_cbm_iec_interface(mconfig, *this),
|
device_cbm_iec_interface(mconfig, *this),
|
||||||
device_c64_floppy_parallel_interface(mconfig, *this),
|
device_c64_floppy_parallel_interface(mconfig, *this),
|
||||||
@ -923,35 +913,48 @@ base_c1571_device::base_c1571_device(const machine_config &mconfig, device_type
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c1571_device::c1571_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
|
: device_t(mconfig, C1571, "C1571", tag, owner, clock),
|
||||||
|
device_cbm_iec_interface(mconfig, *this),
|
||||||
|
device_c64_floppy_parallel_interface(mconfig, *this),
|
||||||
|
m_maincpu(*this, M6502_TAG),
|
||||||
|
m_via0(*this, M6522_0_TAG),
|
||||||
|
m_via1(*this, M6522_1_TAG),
|
||||||
|
m_cia(*this, M6526_TAG),
|
||||||
|
m_fdc(*this, WD1770_TAG),
|
||||||
|
m_ga(*this, C64H156_TAG),
|
||||||
|
m_image(*this, FLOPPY_0),
|
||||||
|
m_1_2mhz(0),
|
||||||
|
m_data_out(1),
|
||||||
|
m_ser_dir(0),
|
||||||
|
m_sp_out(1),
|
||||||
|
m_cnt_out(1),
|
||||||
|
m_via0_irq(CLEAR_LINE),
|
||||||
|
m_via1_irq(CLEAR_LINE),
|
||||||
|
m_cia_irq(CLEAR_LINE),
|
||||||
|
m_variant(TYPE_1571)
|
||||||
|
//m_floppy(*this, WD1770_TAG":0:525dd")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// c1570_device - constructor
|
// c1570_device - constructor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
c1570_device::c1570_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
c1570_device::c1570_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
: base_c1571_device(mconfig, C1570, "C1570", tag, owner, clock, TYPE_1570)
|
: c1571_device(mconfig, C1570, "C1570", tag, owner, clock, TYPE_1570)
|
||||||
//m_floppy(*this, WD1770_TAG":0:525ssdd")
|
//m_floppy(*this, WD1770_TAG":0:525ssdd")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// c1571_device - constructor
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
c1571_device::c1571_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
||||||
: base_c1571_device(mconfig, C1571, "C1571", tag, owner, clock, TYPE_1571)
|
|
||||||
//m_floppy(*this, WD1770_TAG":0:525dd")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// c1571cr_device - constructor
|
// c1571cr_device - constructor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
c1571cr_device::c1571cr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
c1571cr_device::c1571cr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
: base_c1571_device(mconfig, C1571CR, "C1571CR", tag, owner, clock, TYPE_1571CR)
|
: c1571_device(mconfig, C1571CR, "C1571CR", tag, owner, clock, TYPE_1571CR)
|
||||||
//m_floppy(*this, WD1770_TAG":0:525dd")
|
//m_floppy(*this, WD1770_TAG":0:525dd")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -962,7 +965,7 @@ c1571cr_device::c1571cr_device(const machine_config &mconfig, const char *tag, d
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
mini_chief_device::mini_chief_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mini_chief_device::mini_chief_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
: base_c1571_device(mconfig, MINI_CHIEF, "ICT Mini Chief", tag, owner, clock, TYPE_MINI_CHIEF)
|
: c1571_device(mconfig, MINI_CHIEF, "ICT Mini Chief", tag, owner, clock, TYPE_MINI_CHIEF)
|
||||||
//m_floppy(*this, WD1770_TAG":0:525dd")
|
//m_floppy(*this, WD1770_TAG":0:525dd")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -972,7 +975,7 @@ mini_chief_device::mini_chief_device(const machine_config &mconfig, const char *
|
|||||||
// device_start - device-specific startup
|
// device_start - device-specific startup
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::device_start()
|
void c1571_device::device_start()
|
||||||
{
|
{
|
||||||
// install image callbacks
|
// install image callbacks
|
||||||
m_ga->set_floppy(m_image);
|
m_ga->set_floppy(m_image);
|
||||||
@ -994,7 +997,7 @@ void base_c1571_device::device_start()
|
|||||||
// device_reset - device-specific reset
|
// device_reset - device-specific reset
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::device_reset()
|
void c1571_device::device_reset()
|
||||||
{
|
{
|
||||||
m_maincpu->reset();
|
m_maincpu->reset();
|
||||||
|
|
||||||
@ -1016,7 +1019,7 @@ void base_c1571_device::device_reset()
|
|||||||
// cbm_iec_srq -
|
// cbm_iec_srq -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::cbm_iec_srq(int state)
|
void c1571_device::cbm_iec_srq(int state)
|
||||||
{
|
{
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
@ -1026,7 +1029,7 @@ void base_c1571_device::cbm_iec_srq(int state)
|
|||||||
// cbm_iec_atn -
|
// cbm_iec_atn -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::cbm_iec_atn(int state)
|
void c1571_device::cbm_iec_atn(int state)
|
||||||
{
|
{
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
@ -1036,7 +1039,7 @@ void base_c1571_device::cbm_iec_atn(int state)
|
|||||||
// cbm_iec_data -
|
// cbm_iec_data -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::cbm_iec_data(int state)
|
void c1571_device::cbm_iec_data(int state)
|
||||||
{
|
{
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
@ -1046,7 +1049,7 @@ void base_c1571_device::cbm_iec_data(int state)
|
|||||||
// cbm_iec_reset -
|
// cbm_iec_reset -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::cbm_iec_reset(int state)
|
void c1571_device::cbm_iec_reset(int state)
|
||||||
{
|
{
|
||||||
if (!state)
|
if (!state)
|
||||||
{
|
{
|
||||||
@ -1059,7 +1062,7 @@ void base_c1571_device::cbm_iec_reset(int state)
|
|||||||
// parallel_data_w -
|
// parallel_data_w -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::parallel_data_w(UINT8 data)
|
void c1571_device::parallel_data_w(UINT8 data)
|
||||||
{
|
{
|
||||||
m_parallel_data = data;
|
m_parallel_data = data;
|
||||||
}
|
}
|
||||||
@ -1069,7 +1072,7 @@ void base_c1571_device::parallel_data_w(UINT8 data)
|
|||||||
// parallel_strobe_w -
|
// parallel_strobe_w -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::parallel_strobe_w(int state)
|
void c1571_device::parallel_strobe_w(int state)
|
||||||
{
|
{
|
||||||
m_cia->flag_w(state);
|
m_cia->flag_w(state);
|
||||||
}
|
}
|
||||||
@ -1079,7 +1082,7 @@ void base_c1571_device::parallel_strobe_w(int state)
|
|||||||
// update_iec -
|
// update_iec -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1571_device::update_iec()
|
void c1571_device::update_iec()
|
||||||
{
|
{
|
||||||
m_cia->cnt_w(m_ser_dir || m_bus->srq_r());
|
m_cia->cnt_w(m_ser_dir || m_bus->srq_r());
|
||||||
m_cia->sp_w(m_ser_dir || m_bus->data_r());
|
m_cia->sp_w(m_ser_dir || m_bus->data_r());
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
// ======================> c1571_device
|
// ======================> c1571_device
|
||||||
|
|
||||||
class base_c1571_device : public device_t,
|
class c1571_device : public device_t,
|
||||||
public device_cbm_iec_interface,
|
public device_cbm_iec_interface,
|
||||||
public device_c64_floppy_parallel_interface
|
public device_c64_floppy_parallel_interface
|
||||||
{
|
{
|
||||||
@ -55,7 +55,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
base_c1571_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
c1571_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
||||||
|
c1571_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
// optional information overrides
|
// optional information overrides
|
||||||
virtual const rom_entry *device_rom_region() const;
|
virtual const rom_entry *device_rom_region() const;
|
||||||
@ -133,7 +134,7 @@ protected:
|
|||||||
|
|
||||||
// ======================> c1570_device
|
// ======================> c1570_device
|
||||||
|
|
||||||
class c1570_device : public base_c1571_device
|
class c1570_device : public c1571_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
@ -141,19 +142,9 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// ======================> c1571_device
|
|
||||||
|
|
||||||
class c1571_device : public base_c1571_device
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// construction/destruction
|
|
||||||
c1571_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> c1571cr_device
|
// ======================> c1571cr_device
|
||||||
|
|
||||||
class c1571cr_device : public base_c1571_device
|
class c1571cr_device : public c1571_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
@ -166,7 +157,7 @@ public:
|
|||||||
|
|
||||||
// ======================> mini_chief_device
|
// ======================> mini_chief_device
|
||||||
|
|
||||||
class mini_chief_device : public base_c1571_device
|
class mini_chief_device : public c1571_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
|
@ -52,7 +52,7 @@ const device_type C1581 = &device_creator<c1581_device>;
|
|||||||
// complete
|
// complete
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1581_device::device_config_complete()
|
void c1581_device::device_config_complete()
|
||||||
{
|
{
|
||||||
switch (m_variant)
|
switch (m_variant)
|
||||||
{
|
{
|
||||||
@ -100,7 +100,7 @@ ROM_END
|
|||||||
// rom_region - device-specific ROM region
|
// rom_region - device-specific ROM region
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
const rom_entry *base_c1581_device::device_rom_region() const
|
const rom_entry *c1581_device::device_rom_region() const
|
||||||
{
|
{
|
||||||
switch (m_variant)
|
switch (m_variant)
|
||||||
{
|
{
|
||||||
@ -118,7 +118,7 @@ const rom_entry *base_c1581_device::device_rom_region() const
|
|||||||
// ADDRESS_MAP( c1581_mem )
|
// ADDRESS_MAP( c1581_mem )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static ADDRESS_MAP_START( c1581_mem, AS_PROGRAM, 8, base_c1581_device )
|
static ADDRESS_MAP_START( c1581_mem, AS_PROGRAM, 8, c1581_device )
|
||||||
AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x2000) AM_RAM
|
AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x2000) AM_RAM
|
||||||
AM_RANGE(0x4000, 0x400f) AM_MIRROR(0x1ff0) AM_DEVREADWRITE(M8520_TAG, mos8520_device, read, write)
|
AM_RANGE(0x4000, 0x400f) AM_MIRROR(0x1ff0) AM_DEVREADWRITE(M8520_TAG, mos8520_device, read, write)
|
||||||
AM_RANGE(0x6000, 0x6003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE(WD1772_TAG, wd1772_t, read, write)
|
AM_RANGE(0x6000, 0x6003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE(WD1772_TAG, wd1772_t, read, write)
|
||||||
@ -130,21 +130,21 @@ ADDRESS_MAP_END
|
|||||||
// MOS8520_INTERFACE( cia_intf )
|
// MOS8520_INTERFACE( cia_intf )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1581_device::cnt_w )
|
WRITE_LINE_MEMBER( c1581_device::cnt_w )
|
||||||
{
|
{
|
||||||
m_cnt_out = state;
|
m_cnt_out = state;
|
||||||
|
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( base_c1581_device::sp_w )
|
WRITE_LINE_MEMBER( c1581_device::sp_w )
|
||||||
{
|
{
|
||||||
m_sp_out = state;
|
m_sp_out = state;
|
||||||
|
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( base_c1581_device::cia_pa_r )
|
READ8_MEMBER( c1581_device::cia_pa_r )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ READ8_MEMBER( base_c1581_device::cia_pa_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( base_c1581_device::cia_pa_w )
|
WRITE8_MEMBER( c1581_device::cia_pa_w )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -205,7 +205,7 @@ WRITE8_MEMBER( base_c1581_device::cia_pa_w )
|
|||||||
output_set_led_value(LED_ACT, BIT(data, 6));
|
output_set_led_value(LED_ACT, BIT(data, 6));
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( base_c1581_device::cia_pb_r )
|
READ8_MEMBER( c1581_device::cia_pb_r )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -239,7 +239,7 @@ READ8_MEMBER( base_c1581_device::cia_pb_r )
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( base_c1581_device::cia_pb_w )
|
WRITE8_MEMBER( c1581_device::cia_pb_w )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -271,18 +271,6 @@ WRITE8_MEMBER( base_c1581_device::cia_pb_w )
|
|||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
|
|
||||||
static MOS8520_INTERFACE( cia_intf )
|
|
||||||
{
|
|
||||||
DEVCB_CPU_INPUT_LINE(M6502_TAG, INPUT_LINE_IRQ0),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1581_device, cnt_w),
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1581_device, sp_w),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1581_device, cia_pa_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1581_device, cia_pa_w),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1581_device, cia_pb_r),
|
|
||||||
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1581_device, cia_pb_w)
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// SLOT_INTERFACE( c1581_floppies )
|
// SLOT_INTERFACE( c1581_floppies )
|
||||||
@ -297,7 +285,7 @@ SLOT_INTERFACE_END
|
|||||||
// FLOPPY_FORMATS( c1581_device::floppy_formats )
|
// FLOPPY_FORMATS( c1581_device::floppy_formats )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
FLOPPY_FORMATS_MEMBER( base_c1581_device::floppy_formats )
|
FLOPPY_FORMATS_MEMBER( c1581_device::floppy_formats )
|
||||||
FLOPPY_D81_FORMAT
|
FLOPPY_D81_FORMAT
|
||||||
FLOPPY_FORMATS_END
|
FLOPPY_FORMATS_END
|
||||||
|
|
||||||
@ -310,10 +298,14 @@ static MACHINE_CONFIG_FRAGMENT( c1581 )
|
|||||||
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/8)
|
MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/8)
|
||||||
MCFG_CPU_PROGRAM_MAP(c1581_mem)
|
MCFG_CPU_PROGRAM_MAP(c1581_mem)
|
||||||
|
|
||||||
MCFG_MOS8520_ADD(M8520_TAG, XTAL_16MHz/8, 0, cia_intf)
|
MCFG_MOS6526_ADD(M8520_TAG, XTAL_16MHz/8, 0, INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
|
||||||
|
MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(DEVICE_SELF_OWNER, c1581_device, cnt_w), DEVWRITELINE(DEVICE_SELF_OWNER, c1581_device, sp_w))
|
||||||
|
MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF_OWNER, c1581_device, cia_pa_r), DEVWRITE8(DEVICE_SELF_OWNER, c1581_device, cia_pa_w))
|
||||||
|
MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF_OWNER, c1581_device, cia_pb_r), DEVWRITE8(DEVICE_SELF_OWNER, c1581_device, cia_pb_w), NULL)
|
||||||
|
|
||||||
MCFG_WD1772x_ADD(WD1772_TAG, XTAL_16MHz/2)
|
MCFG_WD1772x_ADD(WD1772_TAG, XTAL_16MHz/2)
|
||||||
|
|
||||||
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", c1581_floppies, "35dd", 0, base_c1581_device::floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", c1581_floppies, "35dd", 0, c1581_device::floppy_formats)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
@ -322,7 +314,7 @@ MACHINE_CONFIG_END
|
|||||||
// machine configurations
|
// machine configurations
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
machine_config_constructor base_c1581_device::device_mconfig_additions() const
|
machine_config_constructor c1581_device::device_mconfig_additions() const
|
||||||
{
|
{
|
||||||
return MACHINE_CONFIG_NAME( c1581 );
|
return MACHINE_CONFIG_NAME( c1581 );
|
||||||
}
|
}
|
||||||
@ -334,10 +326,10 @@ machine_config_constructor base_c1581_device::device_mconfig_additions() const
|
|||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// base_c1581_device - constructor
|
// c1581_device - constructor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
base_c1581_device::base_c1581_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
|
c1581_device::c1581_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
|
||||||
: device_t(mconfig, type, name, tag, owner, clock),
|
: device_t(mconfig, type, name, tag, owner, clock),
|
||||||
device_cbm_iec_interface(mconfig, *this),
|
device_cbm_iec_interface(mconfig, *this),
|
||||||
m_maincpu(*this, M6502_TAG),
|
m_maincpu(*this, M6502_TAG),
|
||||||
@ -353,28 +345,36 @@ base_c1581_device::base_c1581_device(const machine_config &mconfig, device_type
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c1581_device::c1581_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
|
: device_t(mconfig, C1581, "C1581", tag, owner, clock),
|
||||||
|
device_cbm_iec_interface(mconfig, *this),
|
||||||
|
m_maincpu(*this, M6502_TAG),
|
||||||
|
m_cia(*this, M8520_TAG),
|
||||||
|
m_fdc(*this, WD1772_TAG),
|
||||||
|
m_floppy(*this, WD1772_TAG":0:35dd"),
|
||||||
|
m_data_out(0),
|
||||||
|
m_atn_ack(0),
|
||||||
|
m_fast_ser_dir(0),
|
||||||
|
m_sp_out(1),
|
||||||
|
m_cnt_out(1),
|
||||||
|
m_variant(TYPE_1581)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// c1563_device - constructor
|
// c1563_device - constructor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
c1563_device::c1563_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
c1563_device::c1563_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
: base_c1581_device(mconfig, C1563, "C1563", tag, owner, clock, TYPE_1563) { }
|
: c1581_device(mconfig, C1563, "C1563", tag, owner, clock, TYPE_1563) { }
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// c1581_device - constructor
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
c1581_device::c1581_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
||||||
: base_c1581_device(mconfig, C1581, "C1581", tag, owner, clock, TYPE_1581) { }
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// device_start - device-specific startup
|
// device_start - device-specific startup
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1581_device::device_start()
|
void c1581_device::device_start()
|
||||||
{
|
{
|
||||||
// state saving
|
// state saving
|
||||||
save_item(NAME(m_data_out));
|
save_item(NAME(m_data_out));
|
||||||
@ -389,7 +389,7 @@ void base_c1581_device::device_start()
|
|||||||
// device_reset - device-specific reset
|
// device_reset - device-specific reset
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1581_device::device_reset()
|
void c1581_device::device_reset()
|
||||||
{
|
{
|
||||||
m_maincpu->reset();
|
m_maincpu->reset();
|
||||||
|
|
||||||
@ -410,7 +410,7 @@ void base_c1581_device::device_reset()
|
|||||||
// cbm_iec_srq -
|
// cbm_iec_srq -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1581_device::cbm_iec_srq(int state)
|
void c1581_device::cbm_iec_srq(int state)
|
||||||
{
|
{
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
@ -420,7 +420,7 @@ void base_c1581_device::cbm_iec_srq(int state)
|
|||||||
// cbm_iec_atn -
|
// cbm_iec_atn -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1581_device::cbm_iec_atn(int state)
|
void c1581_device::cbm_iec_atn(int state)
|
||||||
{
|
{
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
@ -430,7 +430,7 @@ void base_c1581_device::cbm_iec_atn(int state)
|
|||||||
// cbm_iec_data -
|
// cbm_iec_data -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1581_device::cbm_iec_data(int state)
|
void c1581_device::cbm_iec_data(int state)
|
||||||
{
|
{
|
||||||
update_iec();
|
update_iec();
|
||||||
}
|
}
|
||||||
@ -440,7 +440,7 @@ void base_c1581_device::cbm_iec_data(int state)
|
|||||||
// cbm_iec_reset -
|
// cbm_iec_reset -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1581_device::cbm_iec_reset(int state)
|
void c1581_device::cbm_iec_reset(int state)
|
||||||
{
|
{
|
||||||
if (!state)
|
if (!state)
|
||||||
{
|
{
|
||||||
@ -453,7 +453,7 @@ void base_c1581_device::cbm_iec_reset(int state)
|
|||||||
// update_iec -
|
// update_iec -
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void base_c1581_device::update_iec()
|
void c1581_device::update_iec()
|
||||||
{
|
{
|
||||||
m_cia->cnt_w(m_fast_ser_dir || m_bus->srq_r());
|
m_cia->cnt_w(m_fast_ser_dir || m_bus->srq_r());
|
||||||
m_cia->sp_w(m_fast_ser_dir || m_bus->data_r());
|
m_cia->sp_w(m_fast_ser_dir || m_bus->data_r());
|
||||||
|
@ -34,14 +34,15 @@
|
|||||||
// TYPE DEFINITIONS
|
// TYPE DEFINITIONS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
// ======================> base_c1581_device
|
// ======================> c1581_device
|
||||||
|
|
||||||
class base_c1581_device : public device_t,
|
class c1581_device : public device_t,
|
||||||
public device_cbm_iec_interface
|
public device_cbm_iec_interface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
base_c1581_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
c1581_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
||||||
|
c1581_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -94,7 +95,7 @@ protected:
|
|||||||
|
|
||||||
// ======================> c1563_device
|
// ======================> c1563_device
|
||||||
|
|
||||||
class c1563_device : public base_c1581_device
|
class c1563_device : public c1581_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
@ -102,16 +103,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// ======================> c1581_device
|
|
||||||
|
|
||||||
class c1581_device : public base_c1581_device
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// construction/destruction
|
|
||||||
c1581_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// device type definition
|
// device type definition
|
||||||
extern const device_type C1563;
|
extern const device_type C1563;
|
||||||
extern const device_type C1581;
|
extern const device_type C1581;
|
||||||
|
@ -150,23 +150,6 @@ static const tpi6525_interface tpi_intf =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// C64_EXPANSION_INTERFACE( expansion_intf )
|
// C64_EXPANSION_INTERFACE( expansion_intf )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -218,7 +201,7 @@ static C64_EXPANSION_INTERFACE( expansion_intf )
|
|||||||
|
|
||||||
static MACHINE_CONFIG_FRAGMENT( c64_ieee488 )
|
static MACHINE_CONFIG_FRAGMENT( c64_ieee488 )
|
||||||
MCFG_TPI6525_ADD(MOS6525_TAG, tpi_intf)
|
MCFG_TPI6525_ADD(MOS6525_TAG, tpi_intf)
|
||||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, NULL)
|
MCFG_CBM_IEEE488_ADD(NULL)
|
||||||
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, 0, expansion_intf, c64_expansion_cards, NULL, NULL)
|
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, 0, expansion_intf, c64_expansion_cards, NULL, NULL)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
#include "cpu/m6502/m6510.h"
|
#include "cpu/m6502/m6510.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
#include "machine/6526cia.h"
|
#include "machine/6526cia.h"
|
||||||
#include "machine/cbmiec.h"
|
#include "machine/cbmiec.h"
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include "includes/c65.h"
|
#include "includes/c65.h"
|
||||||
#include "includes/c64_legacy.h"
|
#include "includes/c64_legacy.h"
|
||||||
#include "cpu/m6502/m4510.h"
|
#include "cpu/m6502/m4510.h"
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
#include "machine/6526cia.h"
|
#include "machine/6526cia.h"
|
||||||
#include "machine/cbmiec.h"
|
#include "machine/cbmiec.h"
|
||||||
#include "machine/ram.h"
|
#include "machine/ram.h"
|
||||||
@ -645,8 +645,8 @@ static WRITE8_HANDLER( c65_ram_expansion_w )
|
|||||||
|
|
||||||
static WRITE8_HANDLER( c65_write_io )
|
static WRITE8_HANDLER( c65_write_io )
|
||||||
{
|
{
|
||||||
sid6581_device *sid_0 = space.machine().device<sid6581_device>("sid_r");
|
mos6581_device *sid_0 = space.machine().device<mos6581_device>("sid_r");
|
||||||
sid6581_device *sid_1 = space.machine().device<sid6581_device>("sid_l");
|
mos6581_device *sid_1 = space.machine().device<mos6581_device>("sid_l");
|
||||||
device_t *vic3 = space.machine().device("vic3");
|
device_t *vic3 = space.machine().device("vic3");
|
||||||
|
|
||||||
switch (offset & 0xf00)
|
switch (offset & 0xf00)
|
||||||
@ -709,8 +709,8 @@ static WRITE8_HANDLER( c65_write_io_dc00 )
|
|||||||
|
|
||||||
static READ8_HANDLER( c65_read_io )
|
static READ8_HANDLER( c65_read_io )
|
||||||
{
|
{
|
||||||
sid6581_device *sid_0 = space.machine().device<sid6581_device>("sid_r");
|
mos6581_device *sid_0 = space.machine().device<mos6581_device>("sid_r");
|
||||||
sid6581_device *sid_1 = space.machine().device<sid6581_device>("sid_l");
|
mos6581_device *sid_1 = space.machine().device<mos6581_device>("sid_l");
|
||||||
device_t *vic3 = space.machine().device("vic3");
|
device_t *vic3 = space.machine().device("vic3");
|
||||||
|
|
||||||
switch (offset & 0xf00)
|
switch (offset & 0xf00)
|
||||||
|
@ -285,36 +285,6 @@ void cbm_iec_slot_device::device_start()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
|
||||||
// DEVICE CONFIGURATION
|
|
||||||
//**************************************************************************
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_config_complete - perform any
|
|
||||||
// operations now that the configuration is
|
|
||||||
// complete
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void cbm_iec_device::device_config_complete()
|
|
||||||
{
|
|
||||||
// inherit a copy of the static data
|
|
||||||
const cbm_iec_interface *intf = reinterpret_cast<const cbm_iec_interface *>(static_config());
|
|
||||||
if (intf != NULL)
|
|
||||||
*static_cast<cbm_iec_interface *>(this) = *intf;
|
|
||||||
|
|
||||||
// or initialize to defaults if none provided
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memset(&m_out_srq_cb, 0, sizeof(m_out_srq_cb));
|
|
||||||
memset(&m_out_atn_cb, 0, sizeof(m_out_atn_cb));
|
|
||||||
memset(&m_out_clk_cb, 0, sizeof(m_out_clk_cb));
|
|
||||||
memset(&m_out_data_cb, 0, sizeof(m_out_data_cb));
|
|
||||||
memset(&m_out_reset_cb, 0, sizeof(m_out_reset_cb));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// INLINE HELPERS
|
// INLINE HELPERS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
@ -360,11 +330,11 @@ inline void cbm_iec_device::set_signal(device_t *device, int signal, int state)
|
|||||||
{
|
{
|
||||||
switch (signal)
|
switch (signal)
|
||||||
{
|
{
|
||||||
case SRQ: m_out_srq_func(state); break;
|
case SRQ: m_write_srq(state); break;
|
||||||
case ATN: m_out_atn_func(state); break;
|
case ATN: m_write_atn(state); break;
|
||||||
case CLK: m_out_clk_func(state); break;
|
case CLK: m_write_clk(state); break;
|
||||||
case DATA: m_out_data_func(state); break;
|
case DATA: m_write_data(state); break;
|
||||||
case RESET: m_out_reset_func(state);break;
|
case RESET: m_write_reset(state);break;
|
||||||
}
|
}
|
||||||
|
|
||||||
daisy_entry *entry = m_device_list.first();
|
daisy_entry *entry = m_device_list.first();
|
||||||
@ -441,7 +411,12 @@ inline int cbm_iec_device::get_signal(int signal)
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
cbm_iec_device::cbm_iec_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
cbm_iec_device::cbm_iec_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
: device_t(mconfig, CBM_IEC, "CBM IEC bus", tag, owner, clock)
|
: device_t(mconfig, CBM_IEC, "CBM IEC bus", tag, owner, clock),
|
||||||
|
m_write_srq(*this),
|
||||||
|
m_write_atn(*this),
|
||||||
|
m_write_clk(*this),
|
||||||
|
m_write_data(*this),
|
||||||
|
m_write_reset(*this)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < SIGNAL_COUNT; i++)
|
for (int i = 0; i < SIGNAL_COUNT; i++)
|
||||||
{
|
{
|
||||||
@ -457,11 +432,11 @@ cbm_iec_device::cbm_iec_device(const machine_config &mconfig, const char *tag, d
|
|||||||
void cbm_iec_device::device_start()
|
void cbm_iec_device::device_start()
|
||||||
{
|
{
|
||||||
// resolve callbacks
|
// resolve callbacks
|
||||||
m_out_srq_func.resolve(m_out_srq_cb, *this);
|
m_write_srq.resolve_safe();
|
||||||
m_out_atn_func.resolve(m_out_atn_cb, *this);
|
m_write_atn.resolve_safe();
|
||||||
m_out_clk_func.resolve(m_out_clk_cb, *this);
|
m_write_clk.resolve_safe();
|
||||||
m_out_data_func.resolve(m_out_data_cb, *this);
|
m_write_data.resolve_safe();
|
||||||
m_out_reset_func.resolve(m_out_reset_cb, *this);
|
m_write_reset.resolve_safe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,13 +28,24 @@
|
|||||||
// INTERFACE CONFIGURATION MACROS
|
// INTERFACE CONFIGURATION MACROS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
#define MCFG_CBM_IEC_BUS_ADD(_config) \
|
#define MCFG_CBM_IEC_BUS_ADD() \
|
||||||
MCFG_DEVICE_ADD(CBM_IEC_TAG, CBM_IEC, 0) \
|
MCFG_DEVICE_ADD(CBM_IEC_TAG, CBM_IEC, 0)
|
||||||
MCFG_DEVICE_CONFIG(_config)
|
|
||||||
|
|
||||||
|
|
||||||
#define CBM_IEC_INTERFACE(_name) \
|
#define MCFG_CBM_IEC_BUS_SRQ_CALLBACK(_write) \
|
||||||
const cbm_iec_interface (_name) =
|
downcast<cbm_iec_device *>(device)->set_srq_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_CBM_IEC_BUS_ATN_CALLBACK(_write) \
|
||||||
|
downcast<cbm_iec_device *>(device)->set_atn_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_CBM_IEC_BUS_CLK_CALLBACK(_write) \
|
||||||
|
downcast<cbm_iec_device *>(device)->set_clk_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_CBM_IEC_BUS_DATA_CALLBACK(_write) \
|
||||||
|
downcast<cbm_iec_device *>(device)->set_data_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_CBM_IEC_BUS_RESET_CALLBACK(_write) \
|
||||||
|
downcast<cbm_iec_device *>(device)->set_reset_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
|
||||||
#define MCFG_CBM_IEC_SLOT_ADD(_tag, _num, _slot_intf, _def_slot, _def_inp) \
|
#define MCFG_CBM_IEC_SLOT_ADD(_tag, _num, _slot_intf, _def_slot, _def_inp) \
|
||||||
@ -48,29 +59,22 @@
|
|||||||
// TYPE DEFINITIONS
|
// TYPE DEFINITIONS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
// ======================> cbm_iec_interface
|
|
||||||
|
|
||||||
struct cbm_iec_interface
|
|
||||||
{
|
|
||||||
devcb_write_line m_out_srq_cb;
|
|
||||||
devcb_write_line m_out_atn_cb;
|
|
||||||
devcb_write_line m_out_clk_cb;
|
|
||||||
devcb_write_line m_out_data_cb;
|
|
||||||
devcb_write_line m_out_reset_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> cbm_iec_device
|
// ======================> cbm_iec_device
|
||||||
|
|
||||||
class device_cbm_iec_interface;
|
class device_cbm_iec_interface;
|
||||||
|
|
||||||
class cbm_iec_device : public device_t,
|
class cbm_iec_device : public device_t
|
||||||
public cbm_iec_interface
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
cbm_iec_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
cbm_iec_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
template<class _write> void set_srq_callback(_write wr) { m_write_srq.set_callback(wr); }
|
||||||
|
template<class _write> void set_atn_callback(_write wr) { m_write_atn.set_callback(wr); }
|
||||||
|
template<class _write> void set_clk_callback(_write wr) { m_write_clk.set_callback(wr); }
|
||||||
|
template<class _write> void set_data_callback(_write wr) { m_write_data.set_callback(wr); }
|
||||||
|
template<class _write> void set_reset_callback(_write wr) { m_write_reset.set_callback(wr); }
|
||||||
|
|
||||||
void add_device(device_t *target, int address);
|
void add_device(device_t *target, int address);
|
||||||
|
|
||||||
// reads for both host and peripherals
|
// reads for both host and peripherals
|
||||||
@ -108,7 +112,6 @@ protected:
|
|||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_start();
|
virtual void device_start();
|
||||||
virtual void device_reset();
|
virtual void device_reset();
|
||||||
virtual void device_config_complete();
|
|
||||||
virtual void device_stop();
|
virtual void device_stop();
|
||||||
|
|
||||||
class daisy_entry
|
class daisy_entry
|
||||||
@ -127,11 +130,11 @@ protected:
|
|||||||
simple_list<daisy_entry> m_device_list;
|
simple_list<daisy_entry> m_device_list;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
devcb_resolved_write_line m_out_atn_func;
|
devcb2_write_line m_write_srq;
|
||||||
devcb_resolved_write_line m_out_clk_func;
|
devcb2_write_line m_write_atn;
|
||||||
devcb_resolved_write_line m_out_data_func;
|
devcb2_write_line m_write_clk;
|
||||||
devcb_resolved_write_line m_out_srq_func;
|
devcb2_write_line m_write_data;
|
||||||
devcb_resolved_write_line m_out_reset_func;
|
devcb2_write_line m_write_reset;
|
||||||
|
|
||||||
inline void set_signal(device_t *device, int signal, int state);
|
inline void set_signal(device_t *device, int signal, int state);
|
||||||
inline int get_signal(int signal);
|
inline int get_signal(int signal);
|
||||||
@ -177,10 +180,10 @@ public:
|
|||||||
device_cbm_iec_interface *m_next;
|
device_cbm_iec_interface *m_next;
|
||||||
|
|
||||||
// optional operation overrides
|
// optional operation overrides
|
||||||
|
virtual void cbm_iec_srq(int state) { };
|
||||||
virtual void cbm_iec_atn(int state) { };
|
virtual void cbm_iec_atn(int state) { };
|
||||||
virtual void cbm_iec_clk(int state) { };
|
virtual void cbm_iec_clk(int state) { };
|
||||||
virtual void cbm_iec_data(int state) { };
|
virtual void cbm_iec_data(int state) { };
|
||||||
virtual void cbm_iec_srq(int state) { };
|
|
||||||
virtual void cbm_iec_reset(int state) { };
|
virtual void cbm_iec_reset(int state) { };
|
||||||
|
|
||||||
cbm_iec_device *m_bus;
|
cbm_iec_device *m_bus;
|
||||||
|
@ -104,21 +104,21 @@
|
|||||||
#include "machine/vic20_megacart.h"
|
#include "machine/vic20_megacart.h"
|
||||||
|
|
||||||
|
|
||||||
#define MCFG_CBM_IEC_ADD(_intf, _default_drive) \
|
#define MCFG_CBM_IEC_ADD(_default_drive) \
|
||||||
MCFG_CBM_IEC_BUS_ADD(_intf) \
|
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL) \
|
MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL) \
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec8", 8, cbm_iec_devices, _default_drive, NULL) \
|
MCFG_CBM_IEC_SLOT_ADD("iec8", 8, cbm_iec_devices, _default_drive, NULL) \
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL) \
|
MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL) \
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL) \
|
MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL) \
|
||||||
MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL)
|
MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL) \
|
||||||
|
MCFG_CBM_IEC_BUS_ADD()
|
||||||
|
|
||||||
|
|
||||||
#define MCFG_CBM_IEEE488_ADD(_intf, _default_drive) \
|
#define MCFG_CBM_IEEE488_ADD(_default_drive) \
|
||||||
MCFG_IEEE488_BUS_ADD(_intf) \
|
|
||||||
MCFG_IEEE488_SLOT_ADD("ieee8", 8, cbm_ieee488_devices, _default_drive, NULL) \
|
MCFG_IEEE488_SLOT_ADD("ieee8", 8, cbm_ieee488_devices, _default_drive, NULL) \
|
||||||
MCFG_IEEE488_SLOT_ADD("ieee9", 9, cbm_ieee488_devices, NULL, NULL) \
|
MCFG_IEEE488_SLOT_ADD("ieee9", 9, cbm_ieee488_devices, NULL, NULL) \
|
||||||
MCFG_IEEE488_SLOT_ADD("ieee10", 10, cbm_ieee488_devices, NULL, NULL) \
|
MCFG_IEEE488_SLOT_ADD("ieee10", 10, cbm_ieee488_devices, NULL, NULL) \
|
||||||
MCFG_IEEE488_SLOT_ADD("ieee11", 11, cbm_ieee488_devices, NULL, NULL)
|
MCFG_IEEE488_SLOT_ADD("ieee11", 11, cbm_ieee488_devices, NULL, NULL) \
|
||||||
|
MCFG_IEEE488_BUS_ADD()
|
||||||
|
|
||||||
|
|
||||||
/* Commodore 64 */
|
/* Commodore 64 */
|
||||||
|
@ -95,39 +95,6 @@ void ieee488_slot_device::device_start()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
|
||||||
// DEVICE CONFIGURATION
|
|
||||||
//**************************************************************************
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_config_complete - perform any
|
|
||||||
// operations now that the configuration is
|
|
||||||
// complete
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void ieee488_device::device_config_complete()
|
|
||||||
{
|
|
||||||
// inherit a copy of the static data
|
|
||||||
const ieee488_interface *intf = reinterpret_cast<const ieee488_interface *>(static_config());
|
|
||||||
if (intf != NULL)
|
|
||||||
*static_cast<ieee488_interface *>(this) = *intf;
|
|
||||||
|
|
||||||
// or initialize to defaults if none provided
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memset(&m_out_eoi_cb, 0, sizeof(m_out_eoi_cb));
|
|
||||||
memset(&m_out_dav_cb, 0, sizeof(m_out_dav_cb));
|
|
||||||
memset(&m_out_nrfd_cb, 0, sizeof(m_out_nrfd_cb));
|
|
||||||
memset(&m_out_ndac_cb, 0, sizeof(m_out_ndac_cb));
|
|
||||||
memset(&m_out_ifc_cb, 0, sizeof(m_out_ifc_cb));
|
|
||||||
memset(&m_out_srq_cb, 0, sizeof(m_out_srq_cb));
|
|
||||||
memset(&m_out_atn_cb, 0, sizeof(m_out_atn_cb));
|
|
||||||
memset(&m_out_ren_cb, 0, sizeof(m_out_ren_cb));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// INLINE HELPERS
|
// INLINE HELPERS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
@ -173,14 +140,14 @@ inline void ieee488_device::set_signal(device_t *device, int signal, int state)
|
|||||||
{
|
{
|
||||||
switch (signal)
|
switch (signal)
|
||||||
{
|
{
|
||||||
case EOI: m_out_eoi_func(state); break;
|
case EOI: m_write_eoi(state); break;
|
||||||
case DAV: m_out_dav_func(state); break;
|
case DAV: m_write_dav(state); break;
|
||||||
case NRFD: m_out_nrfd_func(state); break;
|
case NRFD: m_write_nrfd(state); break;
|
||||||
case NDAC: m_out_ndac_func(state); break;
|
case NDAC: m_write_ndac(state); break;
|
||||||
case IFC: m_out_ifc_func(state); break;
|
case IFC: m_write_ifc(state); break;
|
||||||
case SRQ: m_out_srq_func(state); break;
|
case SRQ: m_write_srq(state); break;
|
||||||
case ATN: m_out_atn_func(state); break;
|
case ATN: m_write_atn(state); break;
|
||||||
case REN: m_out_ren_func(state); break;
|
case REN: m_write_ren(state); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
daisy_entry *entry = m_device_list.first();
|
daisy_entry *entry = m_device_list.first();
|
||||||
@ -325,6 +292,14 @@ inline UINT8 ieee488_device::get_data()
|
|||||||
|
|
||||||
ieee488_device::ieee488_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
ieee488_device::ieee488_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
: device_t(mconfig, IEEE488, "IEEE488 bus", tag, owner, clock),
|
: device_t(mconfig, IEEE488, "IEEE488 bus", tag, owner, clock),
|
||||||
|
m_write_eoi(*this),
|
||||||
|
m_write_dav(*this),
|
||||||
|
m_write_nrfd(*this),
|
||||||
|
m_write_ndac(*this),
|
||||||
|
m_write_ifc(*this),
|
||||||
|
m_write_srq(*this),
|
||||||
|
m_write_atn(*this),
|
||||||
|
m_write_ren(*this),
|
||||||
m_dio(0xff)
|
m_dio(0xff)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < SIGNAL_COUNT; i++)
|
for (int i = 0; i < SIGNAL_COUNT; i++)
|
||||||
@ -341,16 +316,17 @@ ieee488_device::ieee488_device(const machine_config &mconfig, const char *tag, d
|
|||||||
void ieee488_device::device_start()
|
void ieee488_device::device_start()
|
||||||
{
|
{
|
||||||
// resolve callbacks
|
// resolve callbacks
|
||||||
m_out_eoi_func.resolve(m_out_eoi_cb, *this);
|
m_write_eoi.resolve_safe();
|
||||||
m_out_dav_func.resolve(m_out_dav_cb, *this);
|
m_write_dav.resolve_safe();
|
||||||
m_out_nrfd_func.resolve(m_out_nrfd_cb, *this);
|
m_write_nrfd.resolve_safe();
|
||||||
m_out_ndac_func.resolve(m_out_ndac_cb, *this);
|
m_write_ndac.resolve_safe();
|
||||||
m_out_ifc_func.resolve(m_out_ifc_cb, *this);
|
m_write_ifc.resolve_safe();
|
||||||
m_out_srq_func.resolve(m_out_srq_cb, *this);
|
m_write_srq.resolve_safe();
|
||||||
m_out_atn_func.resolve(m_out_atn_cb, *this);
|
m_write_atn.resolve_safe();
|
||||||
m_out_ren_func.resolve(m_out_ren_cb, *this);
|
m_write_ren.resolve_safe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// device_stop - device-specific stop
|
// device_stop - device-specific stop
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
@ -29,13 +29,33 @@
|
|||||||
// INTERFACE CONFIGURATION MACROS
|
// INTERFACE CONFIGURATION MACROS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
#define MCFG_IEEE488_BUS_ADD(_config) \
|
#define MCFG_IEEE488_BUS_ADD() \
|
||||||
MCFG_DEVICE_ADD(IEEE488_TAG, IEEE488, 0) \
|
MCFG_DEVICE_ADD(IEEE488_TAG, IEEE488, 0)
|
||||||
MCFG_DEVICE_CONFIG(_config)
|
|
||||||
|
|
||||||
|
|
||||||
#define IEEE488_INTERFACE(_name) \
|
#define MCFG_IEEE488_EOI_CALLBACK(_write) \
|
||||||
const ieee488_interface (_name) =
|
downcast<ieee488_device *>(device)->set_eoi_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_IEEE488_DAV_CALLBACK(_write) \
|
||||||
|
downcast<ieee488_device *>(device)->set_dav_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_IEEE488_NRFD_CALLBACK(_write) \
|
||||||
|
downcast<ieee488_device *>(device)->set_nrfd_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_IEEE488_NDAC_CALLBACK(_write) \
|
||||||
|
downcast<ieee488_device *>(device)->set_ndac_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_IEEE488_IFC_CALLBACK(_write) \
|
||||||
|
downcast<ieee488_device *>(device)->set_ifc_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_IEEE488_SRQ_CALLBACK(_write) \
|
||||||
|
downcast<ieee488_device *>(device)->set_srq_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_IEEE488_ATN_CALLBACK(_write) \
|
||||||
|
downcast<ieee488_device *>(device)->set_atn_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
#define MCFG_IEEE488_REN_CALLBACK(_write) \
|
||||||
|
downcast<ieee488_device *>(device)->set_ren_callback(DEVCB2_##_write);
|
||||||
|
|
||||||
|
|
||||||
#define MCFG_IEEE488_SLOT_ADD(_tag, _num, _slot_intf, _def_slot, _def_inp) \
|
#define MCFG_IEEE488_SLOT_ADD(_tag, _num, _slot_intf, _def_slot, _def_inp) \
|
||||||
@ -49,32 +69,25 @@
|
|||||||
// TYPE DEFINITIONS
|
// TYPE DEFINITIONS
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
// ======================> ieee488_interface
|
|
||||||
|
|
||||||
struct ieee488_interface
|
|
||||||
{
|
|
||||||
devcb_write_line m_out_eoi_cb;
|
|
||||||
devcb_write_line m_out_dav_cb;
|
|
||||||
devcb_write_line m_out_nrfd_cb;
|
|
||||||
devcb_write_line m_out_ndac_cb;
|
|
||||||
devcb_write_line m_out_ifc_cb;
|
|
||||||
devcb_write_line m_out_srq_cb;
|
|
||||||
devcb_write_line m_out_atn_cb;
|
|
||||||
devcb_write_line m_out_ren_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> ieee488_device
|
// ======================> ieee488_device
|
||||||
|
|
||||||
class device_ieee488_interface;
|
class device_ieee488_interface;
|
||||||
|
|
||||||
class ieee488_device : public device_t,
|
class ieee488_device : public device_t
|
||||||
public ieee488_interface
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
ieee488_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
ieee488_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
template<class _write> void set_eoi_callback(_write wr) { m_write_eoi.set_callback(wr); }
|
||||||
|
template<class _write> void set_dav_callback(_write wr) { m_write_dav.set_callback(wr); }
|
||||||
|
template<class _write> void set_nrfd_callback(_write wr) { m_write_nrfd.set_callback(wr); }
|
||||||
|
template<class _write> void set_ndac_callback(_write wr) { m_write_ndac.set_callback(wr); }
|
||||||
|
template<class _write> void set_ifc_callback(_write wr) { m_write_ifc.set_callback(wr); }
|
||||||
|
template<class _write> void set_srq_callback(_write wr) { m_write_srq.set_callback(wr); }
|
||||||
|
template<class _write> void set_atn_callback(_write wr) { m_write_atn.set_callback(wr); }
|
||||||
|
template<class _write> void set_ren_callback(_write wr) { m_write_ren.set_callback(wr); }
|
||||||
|
|
||||||
void add_device(device_t *target, int address);
|
void add_device(device_t *target, int address);
|
||||||
|
|
||||||
// reads for both host and peripherals
|
// reads for both host and peripherals
|
||||||
@ -128,7 +141,6 @@ protected:
|
|||||||
|
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_start();
|
virtual void device_start();
|
||||||
virtual void device_config_complete();
|
|
||||||
virtual void device_stop();
|
virtual void device_stop();
|
||||||
|
|
||||||
class daisy_entry
|
class daisy_entry
|
||||||
@ -148,14 +160,14 @@ protected:
|
|||||||
simple_list<daisy_entry> m_device_list;
|
simple_list<daisy_entry> m_device_list;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
devcb_resolved_write_line m_out_eoi_func;
|
devcb2_write_line m_write_eoi;
|
||||||
devcb_resolved_write_line m_out_dav_func;
|
devcb2_write_line m_write_dav;
|
||||||
devcb_resolved_write_line m_out_nrfd_func;
|
devcb2_write_line m_write_nrfd;
|
||||||
devcb_resolved_write_line m_out_ndac_func;
|
devcb2_write_line m_write_ndac;
|
||||||
devcb_resolved_write_line m_out_ifc_func;
|
devcb2_write_line m_write_ifc;
|
||||||
devcb_resolved_write_line m_out_srq_func;
|
devcb2_write_line m_write_srq;
|
||||||
devcb_resolved_write_line m_out_atn_func;
|
devcb2_write_line m_write_atn;
|
||||||
devcb_resolved_write_line m_out_ren_func;
|
devcb2_write_line m_write_ren;
|
||||||
|
|
||||||
inline void set_signal(device_t *device, int signal, int state);
|
inline void set_signal(device_t *device, int signal, int state);
|
||||||
inline int get_signal(int signal);
|
inline int get_signal(int signal);
|
||||||
|
@ -84,23 +84,6 @@ const device_type INTERPOD = &device_creator<interpod_device>;
|
|||||||
// DEVICE CONFIGURATION
|
// DEVICE CONFIGURATION
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// ROM( interpod )
|
// ROM( interpod )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -203,7 +186,7 @@ static MACHINE_CONFIG_FRAGMENT( interpod )
|
|||||||
MCFG_RIOT6532_ADD(R6532_TAG, 1000000, riot_intf)
|
MCFG_RIOT6532_ADD(R6532_TAG, 1000000, riot_intf)
|
||||||
MCFG_ACIA6850_ADD(MC6850_TAG, acia_intf)
|
MCFG_ACIA6850_ADD(MC6850_TAG, acia_intf)
|
||||||
|
|
||||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, NULL)
|
MCFG_CBM_IEEE488_ADD(NULL)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,16 +4,9 @@
|
|||||||
|
|
||||||
const device_type ISA8_SSI2001 = &device_creator<ssi2001_device>;
|
const device_type ISA8_SSI2001 = &device_creator<ssi2001_device>;
|
||||||
|
|
||||||
static const sid6581_interface ssi_sid6581_interface =
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_FRAGMENT( ssi2001 )
|
static MACHINE_CONFIG_FRAGMENT( ssi2001 )
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD("sid6581", SID6581, XTAL_14_31818MHz/16)
|
MCFG_SOUND_ADD("sid6581", MOS6581, XTAL_14_31818MHz/16)
|
||||||
MCFG_SOUND_CONFIG(ssi_sid6581_interface)
|
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
MCFG_PC_JOY_ADD("joy")
|
MCFG_PC_JOY_ADD("joy")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
@ -40,7 +33,7 @@ void ssi2001_device::device_start()
|
|||||||
{
|
{
|
||||||
set_isa_device();
|
set_isa_device();
|
||||||
m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("joy")));
|
m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice<pc_joy_device>("joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice<pc_joy_device>("joy")));
|
||||||
m_isa->install_device(0x0280, 0x029F, 0, 0, read8_delegate(FUNC(sid6581_device::read), subdevice<sid6581_device>("sid6581")), write8_delegate(FUNC(sid6581_device::write), subdevice<sid6581_device>("sid6581")));
|
m_isa->install_device(0x0280, 0x029F, 0, 0, read8_delegate(FUNC(mos6581_device::read), subdevice<mos6581_device>("sid6581")), write8_delegate(FUNC(mos6581_device::write), subdevice<mos6581_device>("sid6581")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "machine/isa.h"
|
#include "machine/isa.h"
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
#include "machine/pc_joy.h"
|
#include "machine/pc_joy.h"
|
||||||
|
|
||||||
//*********************************************************************
|
//*********************************************************************
|
||||||
@ -23,7 +23,7 @@ public:
|
|||||||
virtual machine_config_constructor device_mconfig_additions() const;
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
|
|
||||||
required_device<pc_joy_device> m_joy;
|
required_device<pc_joy_device> m_joy;
|
||||||
required_device<sid6581_device> m_sid;
|
required_device<mos6581_device> m_sid;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
|
@ -58,25 +58,13 @@ const rom_entry *plus4_sid_cartridge_device::device_rom_region() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// sid6581_interface sid_intf
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static MOS6581_INTERFACE( sid_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// MACHINE_CONFIG_FRAGMENT( plus4_sid )
|
// MACHINE_CONFIG_FRAGMENT( plus4_sid )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
static MACHINE_CONFIG_FRAGMENT( plus4_sid )
|
static MACHINE_CONFIG_FRAGMENT( plus4_sid )
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD(MOS8580_TAG, SID8580, XTAL_17_73447MHz/20)
|
MCFG_SOUND_ADD(MOS8580_TAG, MOS8580, XTAL_17_73447MHz/20)
|
||||||
MCFG_SOUND_CONFIG(sid_intf)
|
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
MCFG_SOUND_ADD("dac", DAC, 0)
|
MCFG_SOUND_ADD("dac", DAC, 0)
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "machine/plus4exp.h"
|
#include "machine/plus4exp.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
#include "sound/sid6581.h"
|
#include "sound/mos6581.h"
|
||||||
#include "machine/cbmipt.h"
|
#include "machine/cbmipt.h"
|
||||||
#include "machine/vcsctrl.h"
|
#include "machine/vcsctrl.h"
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ protected:
|
|||||||
virtual void plus4_breset_w(int state);
|
virtual void plus4_breset_w(int state);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
required_device<sid6581_device> m_sid;
|
required_device<mos6581_device> m_sid;
|
||||||
required_device<vcs_control_port_device> m_joy;
|
required_device<vcs_control_port_device> m_joy;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -27,23 +27,6 @@
|
|||||||
const device_type VIC1112 = &device_creator<vic1112_device>;
|
const device_type VIC1112 = &device_creator<vic1112_device>;
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
static IEEE488_INTERFACE( ieee488_intf )
|
|
||||||
{
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_DEVICE_LINE_MEMBER(M6522_1_TAG, via6522_device, write_cb1),
|
|
||||||
DEVCB_NULL,
|
|
||||||
DEVCB_NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// via6522_interface via0_intf
|
// via6522_interface via0_intf
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -164,7 +147,8 @@ static MACHINE_CONFIG_FRAGMENT( vic1112 )
|
|||||||
MCFG_VIA6522_ADD(M6522_0_TAG, 0, via0_intf)
|
MCFG_VIA6522_ADD(M6522_0_TAG, 0, via0_intf)
|
||||||
MCFG_VIA6522_ADD(M6522_1_TAG, 0, via1_intf)
|
MCFG_VIA6522_ADD(M6522_1_TAG, 0, via1_intf)
|
||||||
|
|
||||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, NULL)
|
MCFG_CBM_IEEE488_ADD(NULL)
|
||||||
|
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(M6522_1_TAG, via6522_device, write_cb1))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -238,6 +238,7 @@ SOUNDS += TMS5200
|
|||||||
SOUNDS += LMC1992
|
SOUNDS += LMC1992
|
||||||
SOUNDS += AWACS
|
SOUNDS += AWACS
|
||||||
SOUNDS += T6721A
|
SOUNDS += T6721A
|
||||||
|
SOUNDS += MOS7360
|
||||||
|
|
||||||
#-------------------------------------------------
|
#-------------------------------------------------
|
||||||
# this is the list of driver libraries that
|
# this is the list of driver libraries that
|
||||||
@ -914,7 +915,6 @@ $(MESSOBJ)/cbm.a: \
|
|||||||
$(MESS_MACHINE)/vic1111.o \
|
$(MESS_MACHINE)/vic1111.o \
|
||||||
$(MESS_MACHINE)/vic1112.o \
|
$(MESS_MACHINE)/vic1112.o \
|
||||||
$(MESS_MACHINE)/vic1210.o \
|
$(MESS_MACHINE)/vic1210.o \
|
||||||
$(MESS_AUDIO)/mos7360.o \
|
|
||||||
$(MESS_DRIVERS)/plus4.o \
|
$(MESS_DRIVERS)/plus4.o \
|
||||||
$(MESS_MACHINE)/plus4exp.o \
|
$(MESS_MACHINE)/plus4exp.o \
|
||||||
$(MESS_MACHINE)/plus4user.o \
|
$(MESS_MACHINE)/plus4user.o \
|
||||||
|
@ -267,7 +267,7 @@ inline void mos6566_device::set_interrupt( int mask )
|
|||||||
{
|
{
|
||||||
DBG_LOG(2, "vic2", ("irq start %.2x\n", mask));
|
DBG_LOG(2, "vic2", ("irq start %.2x\n", mask));
|
||||||
m_reg[0x19] |= 0x80;
|
m_reg[0x19] |= 0x80;
|
||||||
m_out_irq_func(ASSERT_LINE);
|
m_write_irq(ASSERT_LINE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_reg[0x19] |= mask;
|
m_reg[0x19] |= mask;
|
||||||
@ -280,7 +280,7 @@ inline void mos6566_device::clear_interrupt( int mask )
|
|||||||
{
|
{
|
||||||
DBG_LOG(2, "vic2", ("irq end %.2x\n", mask));
|
DBG_LOG(2, "vic2", ("irq end %.2x\n", mask));
|
||||||
m_reg[0x19] &= ~0x80;
|
m_reg[0x19] &= ~0x80;
|
||||||
m_out_irq_func(CLEAR_LINE);
|
m_write_irq(CLEAR_LINE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -586,17 +586,26 @@ mos6566_device::mos6566_device(const machine_config &mconfig, const char *tag, d
|
|||||||
m_icount(0),
|
m_icount(0),
|
||||||
m_variant(TYPE_6566),
|
m_variant(TYPE_6566),
|
||||||
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6566_videoram_map)),
|
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6566_videoram_map)),
|
||||||
m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6566_colorram_map))
|
m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6566_colorram_map)),
|
||||||
|
m_write_irq(*this),
|
||||||
|
m_write_ba(*this),
|
||||||
|
m_write_aec(*this),
|
||||||
|
m_write_k(*this)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
mos6566_device::mos6566_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
|
mos6566_device::mos6566_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
|
||||||
: device_t(mconfig, type, name, tag, owner, clock),
|
: device_t(mconfig, type, name, tag, owner, clock),
|
||||||
device_memory_interface(mconfig, *this),
|
device_memory_interface(mconfig, *this),
|
||||||
device_execute_interface(mconfig, *this),
|
device_execute_interface(mconfig, *this),
|
||||||
m_icount(0),
|
m_icount(0),
|
||||||
|
m_variant(variant),
|
||||||
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6566_videoram_map)),
|
m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(mos6566_videoram_map)),
|
||||||
m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6566_colorram_map)),
|
m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, NULL, *ADDRESS_MAP_NAME(mos6566_colorram_map)),
|
||||||
|
m_write_irq(*this),
|
||||||
|
m_write_ba(*this),
|
||||||
|
m_write_aec(*this),
|
||||||
|
m_write_k(*this),
|
||||||
m_phi0(1),
|
m_phi0(1),
|
||||||
m_ba(ASSERT_LINE),
|
m_ba(ASSERT_LINE),
|
||||||
m_aec(ASSERT_LINE)
|
m_aec(ASSERT_LINE)
|
||||||
@ -604,52 +613,28 @@ mos6566_device::mos6566_device(const machine_config &mconfig, device_type type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
mos6567_device::mos6567_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos6567_device::mos6567_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
:mos6566_device(mconfig, MOS6567, "MOS6567", tag, owner, clock) { m_variant = TYPE_6567; }
|
:mos6566_device(mconfig, MOS6567, "MOS6567", tag, owner, clock, TYPE_6567) { }
|
||||||
|
|
||||||
mos6567_device::mos6567_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
|
mos6567_device::mos6567_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
|
||||||
:mos6566_device(mconfig, type, name, tag, owner, clock) { }
|
:mos6566_device(mconfig, type, name, tag, owner, clock, TYPE_6567) { }
|
||||||
|
|
||||||
mos8562_device::mos8562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos8562_device::mos8562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
:mos6567_device(mconfig, MOS8562, "MOS8562", tag, owner, clock) { m_variant = TYPE_8562; }
|
:mos6567_device(mconfig, MOS8562, "MOS8562", tag, owner, clock, TYPE_8562) { }
|
||||||
|
|
||||||
mos8564_device::mos8564_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos8564_device::mos8564_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
:mos6567_device(mconfig, MOS8564, "MOS8564", tag, owner, clock) { m_variant = TYPE_8564; }
|
:mos6567_device(mconfig, MOS8564, "MOS8564", tag, owner, clock, TYPE_8564) { }
|
||||||
|
|
||||||
mos6569_device::mos6569_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos6569_device::mos6569_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
:mos6566_device(mconfig, MOS6566, "MOS6569", tag, owner, clock) { m_variant = TYPE_6569; }
|
:mos6566_device(mconfig, MOS6566, "MOS6569", tag, owner, clock, TYPE_6569) { }
|
||||||
|
|
||||||
mos6569_device::mos6569_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
|
mos6569_device::mos6569_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
|
||||||
:mos6566_device(mconfig, type, name, tag, owner, clock) { }
|
:mos6566_device(mconfig, type, name, tag, owner, clock, TYPE_6569) { }
|
||||||
|
|
||||||
mos8565_device::mos8565_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos8565_device::mos8565_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
:mos6569_device(mconfig, MOS8565, "MOS8565", tag, owner, clock) { m_variant = TYPE_8565; }
|
:mos6569_device(mconfig, MOS8565, "MOS8565", tag, owner, clock, TYPE_8565) { }
|
||||||
|
|
||||||
mos8566_device::mos8566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
mos8566_device::mos8566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
:mos6569_device(mconfig, MOS8566, "MOS8566", tag, owner, clock) { m_variant = TYPE_8566; }
|
:mos6569_device(mconfig, MOS8566, "MOS8566", tag, owner, clock, TYPE_8566) { }
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// device_config_complete - perform any
|
|
||||||
// operations now that the configuration is
|
|
||||||
// complete
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void mos6566_device::device_config_complete()
|
|
||||||
{
|
|
||||||
// inherit a copy of the static data
|
|
||||||
const mos6566_interface *intf = reinterpret_cast<const mos6566_interface *>(static_config());
|
|
||||||
if (intf != NULL)
|
|
||||||
*static_cast<mos6566_interface *>(this) = *intf;
|
|
||||||
|
|
||||||
// or initialize to defaults if none provided
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
|
|
||||||
memset(&m_out_ba_cb, 0, sizeof(m_out_ba_cb));
|
|
||||||
memset(&m_out_aec_cb, 0, sizeof(m_out_aec_cb));
|
|
||||||
memset(&m_out_k_cb, 0, sizeof(m_out_k_cb));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -662,12 +647,15 @@ void mos6566_device::device_start()
|
|||||||
m_icountptr = &m_icount;
|
m_icountptr = &m_icount;
|
||||||
|
|
||||||
// resolve callbacks
|
// resolve callbacks
|
||||||
m_out_irq_func.resolve(m_out_irq_cb, *this);
|
m_write_irq.resolve_safe();
|
||||||
m_out_ba_func.resolve(m_out_ba_cb, *this);
|
m_write_ba.resolve_safe();
|
||||||
m_out_aec_func.resolve(m_out_aec_cb, *this);
|
m_write_aec.resolve_safe();
|
||||||
m_out_k_func.resolve(m_out_k_cb, *this);
|
m_write_k.resolve_safe();
|
||||||
|
|
||||||
|
if (m_cpu_tag != NULL)
|
||||||
m_cpu = machine().device<cpu_device>(m_cpu_tag);
|
m_cpu = machine().device<cpu_device>(m_cpu_tag);
|
||||||
|
else
|
||||||
|
m_cpu = machine().firstcpu;
|
||||||
|
|
||||||
m_screen = machine().device<screen_device>(m_screen_tag);
|
m_screen = machine().device<screen_device>(m_screen_tag);
|
||||||
m_screen->register_screen_bitmap(m_bitmap);
|
m_screen->register_screen_bitmap(m_bitmap);
|
||||||
@ -1439,8 +1427,8 @@ void mos6566_device::execute_run()
|
|||||||
m_phi0 = 1;
|
m_phi0 = 1;
|
||||||
set_aec(BIT(m_aec_delay, 2));
|
set_aec(BIT(m_aec_delay, 2));
|
||||||
|
|
||||||
m_out_ba_func(m_ba);
|
m_write_ba(m_ba);
|
||||||
m_out_aec_func(m_aec);
|
m_write_aec(m_aec);
|
||||||
|
|
||||||
m_raster_x += 8;
|
m_raster_x += 8;
|
||||||
if (m_raster_x == 0x1fc) m_raster_x = 0x004;
|
if (m_raster_x == 0x1fc) m_raster_x = 0x004;
|
||||||
@ -2008,8 +1996,8 @@ void mos6569_device::execute_run()
|
|||||||
m_phi0 = 1;
|
m_phi0 = 1;
|
||||||
set_aec(BIT(m_aec_delay, 2));
|
set_aec(BIT(m_aec_delay, 2));
|
||||||
|
|
||||||
m_out_ba_func(m_ba);
|
m_write_ba(m_ba);
|
||||||
m_out_aec_func(m_aec);
|
m_write_aec(m_aec);
|
||||||
|
|
||||||
m_raster_x += 8;
|
m_raster_x += 8;
|
||||||
if (m_raster_x == 0x1fc) m_raster_x = 0x004;
|
if (m_raster_x == 0x1fc) m_raster_x = 0x004;
|
||||||
@ -2789,7 +2777,7 @@ WRITE8_MEMBER( mos6566_device::write )
|
|||||||
{
|
{
|
||||||
m_reg[offset] = data | 0xf8;
|
m_reg[offset] = data | 0xf8;
|
||||||
|
|
||||||
m_out_k_func(0, data & 0x07);
|
m_write_k((offs_t)0, data & 0x07);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -91,9 +91,9 @@
|
|||||||
// DEVICE CONFIGURATION MACROS
|
// DEVICE CONFIGURATION MACROS
|
||||||
//***************************************************************************
|
//***************************************************************************
|
||||||
|
|
||||||
#define MCFG_MOS6566_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS6566_ADD(_tag, _screen_tag, _clock, _videoram_map, _colorram_map, _irq) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS6566, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS6566, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6566_device *>(device)->set_callbacks(_screen_tag, NULL, DEVCB2_##_irq, DEVCB2_NULL); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
@ -102,9 +102,9 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6566_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6566_device, screen_update)
|
||||||
|
|
||||||
#define MCFG_MOS6567_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS6567_ADD(_tag, _screen_tag, _clock, _videoram_map, _colorram_map, _irq) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS6567, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS6567, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6566_device *>(device)->set_callbacks(_screen_tag, NULL, DEVCB2_##_irq, DEVCB2_NULL); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
@ -113,9 +113,9 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6567_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6567_device, screen_update)
|
||||||
|
|
||||||
#define MCFG_MOS8562_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS8562_ADD(_tag, _screen_tag, _clock, _videoram_map, _colorram_map, _irq) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS8562, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS8562, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6566_device *>(device)->set_callbacks(_screen_tag, NULL, DEVCB2_##_irq, DEVCB2_NULL); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
@ -124,9 +124,9 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8562_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8562_device, screen_update)
|
||||||
|
|
||||||
#define MCFG_MOS8564_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS8564_ADD(_tag, _screen_tag, _cpu_tag, _clock, _videoram_map, _colorram_map, _irq, _k) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS8564, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS8564, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6566_device *>(device)->set_callbacks(_screen_tag, _cpu_tag, DEVCB2_##_irq, DEVCB2_##_k); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
@ -135,9 +135,9 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8564_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8564_device, screen_update)
|
||||||
|
|
||||||
#define MCFG_MOS6569_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS6569_ADD(_tag, _screen_tag, _clock, _videoram_map, _colorram_map, _irq) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS6569, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS6569, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6566_device *>(device)->set_callbacks(_screen_tag, NULL, DEVCB2_##_irq, DEVCB2_NULL); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
@ -146,9 +146,9 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6569_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos6569_device, screen_update)
|
||||||
|
|
||||||
#define MCFG_MOS8565_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS8565_ADD(_tag, _screen_tag, _clock, _videoram_map, _colorram_map, _irq) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS8565, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS8565, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6566_device *>(device)->set_callbacks(_screen_tag, NULL, DEVCB2_##_irq, DEVCB2_NULL); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
@ -157,9 +157,9 @@
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) \
|
MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) \
|
||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8565_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8565_device, screen_update)
|
||||||
|
|
||||||
#define MCFG_MOS8566_ADD(_tag, _screen_tag, _clock, _config, _videoram_map, _colorram_map) \
|
#define MCFG_MOS8566_ADD(_tag, _screen_tag, _cpu_tag, _clock, _videoram_map, _colorram_map, _irq, _k) \
|
||||||
MCFG_DEVICE_ADD(_tag, MOS8566, _clock) \
|
MCFG_DEVICE_ADD(_tag, MOS8566, _clock) \
|
||||||
MCFG_DEVICE_CONFIG(_config) \
|
downcast<mos6566_device *>(device)->set_callbacks(_screen_tag, _cpu_tag, DEVCB2_##_irq, DEVCB2_##_k); \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_0, _videoram_map) \
|
||||||
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
MCFG_DEVICE_ADDRESS_MAP(AS_1, _colorram_map) \
|
||||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||||
@ -169,22 +169,6 @@
|
|||||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8566_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8566_device, screen_update)
|
||||||
|
|
||||||
|
|
||||||
#define MOS6566_INTERFACE(_name) \
|
|
||||||
const mos6566_interface (_name) =
|
|
||||||
|
|
||||||
#define MOS6567_INTERFACE(_name) \
|
|
||||||
const mos6566_interface (_name) =
|
|
||||||
|
|
||||||
#define MOS8564_INTERFACE(_name) \
|
|
||||||
const mos6566_interface (_name) =
|
|
||||||
|
|
||||||
#define MOS6569_INTERFACE(_name) \
|
|
||||||
const mos6566_interface (_name) =
|
|
||||||
|
|
||||||
#define MOS8566_INTERFACE(_name) \
|
|
||||||
const mos6566_interface (_name) =
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// MACROS / CONSTANTS
|
// MACROS / CONSTANTS
|
||||||
@ -281,33 +265,24 @@
|
|||||||
// TYPE DEFINITIONS
|
// TYPE DEFINITIONS
|
||||||
//***************************************************************************
|
//***************************************************************************
|
||||||
|
|
||||||
// ======================> mos6566_interface
|
|
||||||
|
|
||||||
struct mos6566_interface
|
|
||||||
{
|
|
||||||
const char *m_screen_tag;
|
|
||||||
const char *m_cpu_tag;
|
|
||||||
|
|
||||||
devcb_write_line m_out_irq_cb;
|
|
||||||
devcb_write_line m_out_ba_cb;
|
|
||||||
devcb_write_line m_out_aec_cb;
|
|
||||||
|
|
||||||
devcb_write8 m_out_k_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> mos6566_device
|
// ======================> mos6566_device
|
||||||
|
|
||||||
class mos6566_device : public device_t,
|
class mos6566_device : public device_t,
|
||||||
public device_memory_interface,
|
public device_memory_interface,
|
||||||
public device_execute_interface,
|
public device_execute_interface
|
||||||
public mos6566_interface
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
mos6566_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
mos6566_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
||||||
mos6566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
mos6566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
template<class _irq, class _k> void set_callbacks(const char *screen_tag, const char *cpu_tag, _irq irq, _k k) {
|
||||||
|
m_screen_tag = screen_tag;
|
||||||
|
m_cpu_tag = cpu_tag;
|
||||||
|
m_write_irq.set_callback(irq);
|
||||||
|
m_write_k.set_callback(k);
|
||||||
|
}
|
||||||
|
|
||||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
|
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER( read );
|
DECLARE_READ8_MEMBER( read );
|
||||||
@ -340,7 +315,6 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_config_complete();
|
|
||||||
virtual void device_start();
|
virtual void device_start();
|
||||||
virtual void device_reset();
|
virtual void device_reset();
|
||||||
virtual void execute_run();
|
virtual void execute_run();
|
||||||
@ -376,6 +350,13 @@ protected:
|
|||||||
void draw_graphics();
|
void draw_graphics();
|
||||||
void draw_sprites();
|
void draw_sprites();
|
||||||
|
|
||||||
|
devcb2_write_line m_write_irq;
|
||||||
|
devcb2_write_line m_write_ba;
|
||||||
|
devcb2_write_line m_write_aec;
|
||||||
|
devcb2_write8 m_write_k;
|
||||||
|
|
||||||
|
const char *m_screen_tag;
|
||||||
|
const char *m_cpu_tag;
|
||||||
screen_device *m_screen; // screen which sets bitmap properties
|
screen_device *m_screen; // screen which sets bitmap properties
|
||||||
cpu_device *m_cpu;
|
cpu_device *m_cpu;
|
||||||
|
|
||||||
@ -450,11 +431,6 @@ protected:
|
|||||||
/* Cycles */
|
/* Cycles */
|
||||||
UINT64 m_first_ba_cycle;
|
UINT64 m_first_ba_cycle;
|
||||||
UINT8 m_device_suspended;
|
UINT8 m_device_suspended;
|
||||||
|
|
||||||
devcb_resolved_write_line m_out_irq_func;
|
|
||||||
devcb_resolved_write_line m_out_ba_func;
|
|
||||||
devcb_resolved_write_line m_out_aec_func;
|
|
||||||
devcb_resolved_write8 m_out_k_func;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -465,7 +441,7 @@ class mos6567_device : public mos6566_device
|
|||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
mos6567_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
mos6567_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
mos6567_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
mos6567_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -496,7 +472,7 @@ class mos6569_device : public mos6566_device
|
|||||||
public:
|
public:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
mos6569_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
mos6569_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
mos6569_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
mos6569_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
|
||||||
|
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void execute_run();
|
virtual void execute_run();
|
||||||
|
Loading…
Reference in New Issue
Block a user