mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
6526cia: devcb2 temporarily until mos6526 works with amiga. (nw)
amigafdc: devcb2. (nw)
This commit is contained in:
parent
83f923e463
commit
00580e6211
@ -77,15 +77,24 @@ inline attotime legacy_mos6526_device::cycles_to_time(int c)
|
||||
//-------------------------------------------------
|
||||
|
||||
legacy_mos6526_device::legacy_mos6526_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
|
||||
: device_t(mconfig, type, name, tag, owner, clock, shortname, source)
|
||||
: device_t(mconfig, type, name, tag, owner, clock, shortname, source),
|
||||
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),
|
||||
m_tod_clock(0)
|
||||
{
|
||||
}
|
||||
|
||||
legacy_mos6526r1_device::legacy_mos6526r1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: legacy_mos6526_device(mconfig, LEGACY_MOS6526R1, "MOS6526r1", tag, owner, clock, "legacy_mos6526r1", __FILE__) { }
|
||||
: legacy_mos6526_device(mconfig, LEGACY_MOS6526R1, "LEGACY_MOS6526R1", tag, owner, clock, "legacy_mos6526r1", __FILE__) { }
|
||||
|
||||
legacy_mos6526r2_device::legacy_mos6526r2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: legacy_mos6526_device(mconfig, LEGACY_MOS6526R2, "MOS6526r2", tag, owner, clock, "legacy_mos6526r2", __FILE__) { }
|
||||
: legacy_mos6526_device(mconfig, LEGACY_MOS6526R2, "LEGACY_MOS6526R2", tag, owner, clock, "legacy_mos6526r2", __FILE__) { }
|
||||
|
||||
legacy_mos8520_device::legacy_mos8520_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: legacy_mos6526_device(mconfig, LEGACY_MOS8520, "LEGACY_MOS8520", tag, owner, clock, "legacy_mos8520", __FILE__) { }
|
||||
@ -94,14 +103,6 @@ legacy_mos5710_device::legacy_mos5710_device(const machine_config &mconfig, cons
|
||||
: legacy_mos6526_device(mconfig, LEGACY_MOS5710, "LEGACY_MOS5710", tag, owner, clock, "legacy_mos5710", __FILE__) { }
|
||||
|
||||
|
||||
void legacy_mos6526_device::static_set_tod_clock(device_t &device, int tod_clock)
|
||||
{
|
||||
legacy_mos6526_device &cia = dynamic_cast<legacy_mos6526_device &>(device);
|
||||
|
||||
cia.m_tod_clock = tod_clock;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
@ -148,53 +149,26 @@ void legacy_mos6526_device::device_reset()
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void legacy_mos6526_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const legacy_mos6526_interface *intf = reinterpret_cast<const legacy_mos6526_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<legacy_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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void legacy_mos6526_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_write_irq.resolve_safe();
|
||||
m_write_pc.resolve_safe();
|
||||
m_write_cnt.resolve_safe();
|
||||
m_write_sp.resolve_safe();
|
||||
m_read_pa.resolve_safe(0xff);
|
||||
m_write_pa.resolve_safe();
|
||||
m_read_pb.resolve_safe(0xff);
|
||||
m_write_pb.resolve_safe();
|
||||
|
||||
/* clear out CIA structure, and copy the interface */
|
||||
m_out_irq_func.resolve(m_out_irq_cb, *this);
|
||||
m_out_pc_func.resolve(m_out_pc_cb, *this);
|
||||
m_out_cnt_func.resolve(m_out_cnt_cb, *this);
|
||||
m_out_sp_func.resolve(m_out_sp_cb, *this);
|
||||
m_flag = 1;
|
||||
|
||||
/* setup ports */
|
||||
m_port[0].m_read.resolve(m_in_pa_cb, *this);
|
||||
m_port[0].m_write.resolve(m_out_pa_cb, *this);
|
||||
m_port[1].m_read.resolve(m_in_pb_cb, *this);
|
||||
m_port[1].m_write.resolve(m_out_pb_cb, *this);
|
||||
|
||||
for (int p = 0; p < (sizeof(m_port) / sizeof(m_port[0])); p++)
|
||||
{
|
||||
m_port[p].m_mask_value = 0xff;
|
||||
@ -263,7 +237,7 @@ void legacy_mos6526_device::device_timer(emu_timer &timer, device_timer_id id, i
|
||||
switch (id)
|
||||
{
|
||||
case TIMER_PC:
|
||||
m_out_pc_func(1);
|
||||
m_write_pc(1);
|
||||
break;
|
||||
|
||||
case TIMER_TOD:
|
||||
@ -288,7 +262,7 @@ void legacy_mos6526_device::set_port_mask_value(int port, int data)
|
||||
|
||||
void legacy_mos6526_device::update_pc()
|
||||
{
|
||||
m_out_pc_func(0);
|
||||
m_write_pc(0);
|
||||
|
||||
m_pc_timer->adjust(cycles_to_time(1));
|
||||
}
|
||||
@ -316,7 +290,7 @@ void legacy_mos6526_device::update_interrupts()
|
||||
if (m_irq != new_irq)
|
||||
{
|
||||
m_irq = new_irq;
|
||||
m_out_irq_func(m_irq);
|
||||
m_write_irq(m_irq);
|
||||
}
|
||||
}
|
||||
|
||||
@ -389,11 +363,11 @@ void legacy_mos6526_device::timer_underflow(int timer)
|
||||
|
||||
/* transmit MSB */
|
||||
m_sp = BIT(m_serial, 7);
|
||||
m_out_sp_func(m_sp);
|
||||
m_write_sp(m_sp);
|
||||
|
||||
/* toggle CNT */
|
||||
m_cnt = !m_cnt;
|
||||
m_out_cnt_func(m_cnt);
|
||||
m_write_cnt(m_cnt);
|
||||
|
||||
/* shift data */
|
||||
m_serial <<= 1;
|
||||
@ -410,7 +384,7 @@ void legacy_mos6526_device::timer_underflow(int timer)
|
||||
{
|
||||
/* toggle CNT */
|
||||
m_cnt = !m_cnt;
|
||||
m_out_cnt_func(m_cnt);
|
||||
m_write_cnt(m_cnt);
|
||||
|
||||
if (m_shift == 8)
|
||||
{
|
||||
@ -609,7 +583,7 @@ UINT8 legacy_mos6526_device::reg_r(UINT8 offset)
|
||||
case CIA_PRA:
|
||||
case CIA_PRB:
|
||||
port = &m_port[offset & 1];
|
||||
data = port->m_read(0);
|
||||
data = (offset & 1) ? m_read_pb(0) : m_read_pa(0);
|
||||
data = ((data & ~port->m_ddr) | (port->m_latch & port->m_ddr)) & port->m_mask_value;
|
||||
|
||||
port->m_in = data;
|
||||
@ -749,7 +723,10 @@ void legacy_mos6526_device::reg_w(UINT8 offset, UINT8 data)
|
||||
port = &m_port[offset & 1];
|
||||
port->m_latch = data;
|
||||
port->m_out = (data & port->m_ddr) | (port->m_in & ~port->m_ddr);
|
||||
port->m_write(0, port->m_out);
|
||||
if (offset & 1)
|
||||
m_write_pb((offs_t)0, port->m_out);
|
||||
else
|
||||
m_write_pa((offs_t)0, port->m_out);
|
||||
|
||||
/* pulse /PC following the write */
|
||||
if (offset == CIA_PRB)
|
||||
|
@ -1,4 +1,8 @@
|
||||
/**********************************************************************
|
||||
|
||||
WARNING: DO NOT USE! WILL BE REMOVED IN FAVOR OF machine/mos6526.h
|
||||
|
||||
**********************************************************************
|
||||
|
||||
MOS 6526/8520 Complex Interface Adapter emulation
|
||||
|
||||
@ -43,32 +47,32 @@
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_LEGACY_MOS6526R1_ADD(_tag, _clock, _tod_clock, _config) \
|
||||
MCFG_DEVICE_ADD(_tag, LEGACY_MOS6526R1, _clock) \
|
||||
MCFG_DEVICE_CONFIG(_config) \
|
||||
legacy_mos6526_device::static_set_tod_clock(*device, _tod_clock);
|
||||
#define MCFG_MOS6526_TOD(_clock) \
|
||||
legacy_mos6526_device::static_set_tod_clock(*device, _clock);
|
||||
|
||||
#define MCFG_LEGACY_MOS6526R2_ADD(_tag, _clock, _tod_clock, _config) \
|
||||
MCFG_DEVICE_ADD(_tag, LEGACY_MOS6526R2, _clock) \
|
||||
MCFG_DEVICE_CONFIG(_config) \
|
||||
legacy_mos6526_device::static_set_tod_clock(*device, _tod_clock);
|
||||
#define MCFG_MOS6526_IRQ_CALLBACK(_write) \
|
||||
devcb = &legacy_mos6526_device::set_irq_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_LEGACY_MOS8520_ADD(_tag, _clock, _tod_clock, _config) \
|
||||
MCFG_DEVICE_ADD(_tag, LEGACY_MOS8520, _clock) \
|
||||
MCFG_DEVICE_CONFIG(_config) \
|
||||
legacy_mos6526_device::static_set_tod_clock(*device, _tod_clock);
|
||||
#define MCFG_MOS6526_CNT_CALLBACK(_write) \
|
||||
devcb = &legacy_mos6526_device::set_cnt_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_LEGACY_MOS5710_ADD(_tag, _clock, _tod_clock, _config) \
|
||||
MCFG_DEVICE_ADD(_tag, LEGACY_MOS5710, _clock) \
|
||||
MCFG_DEVICE_CONFIG(_config) \
|
||||
legacy_mos6526_device::static_set_tod_clock(*device, _tod_clock);
|
||||
#define MCFG_MOS6526_SP_CALLBACK(_write) \
|
||||
devcb = &legacy_mos6526_device::set_sp_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_MOS6526_PA_INPUT_CALLBACK(_read) \
|
||||
devcb = &legacy_mos6526_device::set_pa_rd_callback(*device, DEVCB2_##_read);
|
||||
|
||||
#define LEGACY_MOS6526_INTERFACE(name) \
|
||||
const legacy_mos6526_interface (name)=
|
||||
#define MCFG_MOS6526_PA_OUTPUT_CALLBACK(_write) \
|
||||
devcb = &legacy_mos6526_device::set_pa_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define LEGACY_MOS8520_INTERFACE(name) \
|
||||
const legacy_mos6526_interface (name)=
|
||||
#define MCFG_MOS6526_PB_INPUT_CALLBACK(_read) \
|
||||
devcb = &legacy_mos6526_device::set_pb_rd_callback(*device, DEVCB2_##_read);
|
||||
|
||||
#define MCFG_MOS6526_PB_OUTPUT_CALLBACK(_write) \
|
||||
devcb = &legacy_mos6526_device::set_pb_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_MOS6526_PC_CALLBACK(_write) \
|
||||
devcb = &legacy_mos6526_device::set_pc_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
|
||||
|
||||
@ -76,37 +80,24 @@
|
||||
TYPE DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
// ======================> legacy_mos6526_interface
|
||||
|
||||
struct legacy_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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// ======================> legacy_mos6526_device
|
||||
|
||||
class legacy_mos6526_device : public device_t,
|
||||
public legacy_mos6526_interface
|
||||
class legacy_mos6526_device : public device_t
|
||||
{
|
||||
protected:
|
||||
public:
|
||||
// construction/destruction
|
||||
legacy_mos6526_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
|
||||
public:
|
||||
// inline configuration
|
||||
static void static_set_tod_clock(device_t &device, int tod_clock);
|
||||
static void static_set_tod_clock(device_t &device, int clock) { downcast<legacy_mos6526_device &>(device).m_tod_clock = clock; }
|
||||
|
||||
template<class _Object> static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<legacy_mos6526_device &>(device).m_write_irq.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_cnt_wr_callback(device_t &device, _Object object) { return downcast<legacy_mos6526_device &>(device).m_write_sp.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_sp_wr_callback(device_t &device, _Object object) { return downcast<legacy_mos6526_device &>(device).m_write_cnt.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_pa_rd_callback(device_t &device, _Object object) { return downcast<legacy_mos6526_device &>(device).m_read_pa.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_pa_wr_callback(device_t &device, _Object object) { return downcast<legacy_mos6526_device &>(device).m_write_pa.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_pb_rd_callback(device_t &device, _Object object) { return downcast<legacy_mos6526_device &>(device).m_read_pb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_pb_wr_callback(device_t &device, _Object object) { return downcast<legacy_mos6526_device &>(device).m_write_pb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_pc_wr_callback(device_t &device, _Object object) { return downcast<legacy_mos6526_device &>(device).m_write_pc.set_callback(object); }
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
@ -119,30 +110,29 @@ public:
|
||||
UINT8 pb_r(UINT8 offset) { return (m_port[1].m_latch | ~m_port[1].m_ddr); }
|
||||
|
||||
/* interrupt request */
|
||||
UINT8 irq_r() { return m_irq; }
|
||||
DECLARE_READ_LINE_MEMBER( irq_r ) { return m_irq; }
|
||||
|
||||
/* time of day clock */
|
||||
void tod_w(UINT8 state) { if(state) clock_tod(); }
|
||||
DECLARE_WRITE_LINE_MEMBER( tod_w ) { if(state) clock_tod(); }
|
||||
|
||||
/* serial counter */
|
||||
UINT8 cnt_r() { return m_cnt; }
|
||||
DECLARE_READ_LINE_MEMBER( cnt_r ) { return m_cnt; }
|
||||
void cnt_w(UINT8 state);
|
||||
DECLARE_WRITE_LINE_MEMBER( cnt_w ) { cnt_w(state); }
|
||||
|
||||
/* serial port */
|
||||
UINT8 sp_r() { return m_sp; }
|
||||
void sp_w(UINT8 state) { m_sp = state; }
|
||||
DECLARE_WRITE_LINE_MEMBER( sp_w ) { sp_w(state); }
|
||||
DECLARE_READ_LINE_MEMBER( sp_r ) { return m_sp; }
|
||||
DECLARE_WRITE_LINE_MEMBER( sp_w ) { m_sp = state; }
|
||||
|
||||
/* flag */
|
||||
void flag_w(UINT8 state);
|
||||
DECLARE_WRITE_LINE_MEMBER( flag_w ) { flag_w(state); }
|
||||
|
||||
/* port mask */
|
||||
void set_port_mask_value(int port, int data);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_post_load() { }
|
||||
@ -186,19 +176,22 @@ private:
|
||||
|
||||
struct cia_port
|
||||
{
|
||||
public:
|
||||
UINT8 m_ddr;
|
||||
UINT8 m_latch;
|
||||
UINT8 m_in;
|
||||
UINT8 m_out;
|
||||
devcb_resolved_read8 m_read;
|
||||
devcb_resolved_write8 m_write;
|
||||
UINT8 m_mask_value; /* in READ operation the value can be forced by a extern electric circuit */
|
||||
};
|
||||
|
||||
devcb_resolved_write_line m_out_irq_func;
|
||||
devcb_resolved_write_line m_out_pc_func;
|
||||
devcb_resolved_write_line m_out_cnt_func;
|
||||
devcb_resolved_write_line m_out_sp_func;
|
||||
devcb2_write_line m_write_irq;
|
||||
devcb2_write_line m_write_pc;
|
||||
devcb2_write_line m_write_cnt;
|
||||
devcb2_write_line m_write_sp;
|
||||
devcb2_read8 m_read_pa;
|
||||
devcb2_write8 m_write_pa;
|
||||
devcb2_read8 m_read_pb;
|
||||
devcb2_write8 m_write_pb;
|
||||
|
||||
cia_port m_port[2];
|
||||
cia_timer m_timer[2];
|
||||
@ -255,10 +248,10 @@ public:
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type LEGACY_MOS6526R1;
|
||||
extern const device_type LEGACY_MOS6526R2;
|
||||
extern const device_type LEGACY_MOS8520;
|
||||
extern const device_type LEGACY_MOS5710;
|
||||
extern const ATTR_DEPRECATED device_type LEGACY_MOS6526R1;
|
||||
extern const ATTR_DEPRECATED device_type LEGACY_MOS6526R2;
|
||||
extern const ATTR_DEPRECATED device_type LEGACY_MOS8520;
|
||||
extern const ATTR_DEPRECATED device_type LEGACY_MOS5710;
|
||||
|
||||
|
||||
|
||||
@ -266,28 +259,6 @@ extern const device_type LEGACY_MOS5710;
|
||||
FUNCTION PROTOTYPES
|
||||
***************************************************************************/
|
||||
|
||||
/* register access */
|
||||
DECLARE_READ8_DEVICE_HANDLER( mos6526_r );
|
||||
DECLARE_WRITE8_DEVICE_HANDLER( mos6526_w );
|
||||
|
||||
/* port access */
|
||||
DECLARE_READ8_DEVICE_HANDLER( mos6526_pa_r );
|
||||
DECLARE_READ8_DEVICE_HANDLER( mos6526_pb_r );
|
||||
|
||||
/* interrupt request */
|
||||
READ_LINE_DEVICE_HANDLER( mos6526_irq_r );
|
||||
|
||||
/* time of day clock */
|
||||
WRITE_LINE_DEVICE_HANDLER( mos6526_tod_w );
|
||||
|
||||
/* serial counter */
|
||||
READ_LINE_DEVICE_HANDLER( mos6526_cnt_r );
|
||||
WRITE_LINE_DEVICE_HANDLER( mos6526_cnt_w );
|
||||
|
||||
/* serial port */
|
||||
READ_LINE_DEVICE_HANDLER( mos6526_sp_r );
|
||||
WRITE_LINE_DEVICE_HANDLER( mos6526_sp_w );
|
||||
|
||||
/* port mask */
|
||||
void cia_set_port_mask_value(device_t *device, int port, int data);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Olivier Galibert
|
||||
/****************************************************f***********************
|
||||
/***************************************************************************
|
||||
|
||||
Amiga floppy disk controller emulation
|
||||
|
||||
@ -19,12 +19,15 @@ FLOPPY_FORMATS_MEMBER( amiga_fdc::floppy_formats )
|
||||
FLOPPY_FORMATS_END
|
||||
|
||||
amiga_fdc::amiga_fdc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, AMIGA_FDC, "Amiga FDC", tag, owner, clock, "amiga_fdc", __FILE__)
|
||||
device_t(mconfig, AMIGA_FDC, "Amiga FDC", tag, owner, clock, "amiga_fdc", __FILE__),
|
||||
m_write_index(*this)
|
||||
{
|
||||
}
|
||||
|
||||
void amiga_fdc::device_start()
|
||||
{
|
||||
m_write_index.resolve_safe();
|
||||
|
||||
static const char *names[] = { "0", "1", "2", "3" };
|
||||
for(int i=0; i != 4; i++) {
|
||||
floppy_connector *con = subdevice<floppy_connector>(names[i]);
|
||||
@ -415,8 +418,7 @@ UINT8 amiga_fdc::ciaapra_r()
|
||||
void amiga_fdc::index_callback(floppy_image_device *floppy, int state)
|
||||
{
|
||||
/* Issue a index pulse when a disk revolution completes */
|
||||
legacy_mos6526_device *cia = machine().device<legacy_mos6526_device>("cia_1");
|
||||
cia->flag_w(!state);
|
||||
m_write_index(!state);
|
||||
}
|
||||
|
||||
void amiga_fdc::pll_t::set_clock(attotime period)
|
||||
|
@ -4,13 +4,15 @@
|
||||
#include "emu.h"
|
||||
#include "imagedev/floppy.h"
|
||||
|
||||
#define MCFG_AMIGA_FDC_ADD(_tag, _clock) \
|
||||
MCFG_DEVICE_ADD(_tag, AMIGA_FDC, _clock)
|
||||
#define MCFG_AMIGA_FDC_INDEX_CALLBACK(_write) \
|
||||
devcb = &amiga_fdc::set_index_wr_callback(*device, DEVCB2_##_write);
|
||||
|
||||
class amiga_fdc : public device_t {
|
||||
public:
|
||||
amiga_fdc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
template<class _Object> static devcb2_base &set_index_wr_callback(device_t &device, _Object object) { return downcast<amiga_fdc &>(device).m_write_index.set_callback(object); }
|
||||
|
||||
DECLARE_WRITE8_MEMBER(ciaaprb_w);
|
||||
|
||||
UINT8 ciaapra_r();
|
||||
@ -73,6 +75,8 @@ private:
|
||||
pll_t pll;
|
||||
};
|
||||
|
||||
devcb2_write_line m_write_index;
|
||||
|
||||
floppy_image_device *floppy;
|
||||
floppy_image_device *floppy_devices[4];
|
||||
|
||||
|
@ -413,30 +413,6 @@ INPUT_PORTS_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const legacy_mos6526_interface cia_0_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(alg_state,alg_cia_0_porta_r),
|
||||
DEVCB_DRIVER_MEMBER(alg_state,alg_cia_0_porta_w), /* port A */
|
||||
DEVCB_DRIVER_MEMBER(alg_state,alg_cia_0_portb_r),
|
||||
DEVCB_DRIVER_MEMBER(alg_state,alg_cia_0_portb_w) /* port B */
|
||||
};
|
||||
|
||||
static const legacy_mos6526_interface cia_1_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(alg_state,alg_cia_1_porta_r),
|
||||
DEVCB_DRIVER_MEMBER(alg_state,alg_cia_1_porta_w), /* port A */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL /* port B */
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( alg_r1, alg_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -477,11 +453,20 @@ static MACHINE_CONFIG_START( alg_r1, alg_state )
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
|
||||
/* cia */
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_0_intf)
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(alg_state,alg_cia_0_porta_r))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(alg_state,alg_cia_0_porta_w))
|
||||
MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(alg_state,alg_cia_0_portb_r))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(alg_state,alg_cia_0_portb_w))
|
||||
MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(alg_state,alg_cia_1_porta_r))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(alg_state,alg_cia_1_porta_w))
|
||||
|
||||
/* fdc */
|
||||
MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -302,30 +302,6 @@ INPUT_PORTS_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const legacy_mos6526_interface cia_0_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_INPUT_PORT("CIA0PORTA"),
|
||||
DEVCB_DRIVER_MEMBER(arcadia_amiga_state,arcadia_cia_0_porta_w), /* port A */
|
||||
DEVCB_INPUT_PORT("CIA0PORTB"),
|
||||
DEVCB_DRIVER_MEMBER(arcadia_amiga_state,arcadia_cia_0_portb_w) /* port B */
|
||||
};
|
||||
|
||||
static const legacy_mos6526_interface cia_1_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( arcadia, arcadia_amiga_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -361,11 +337,18 @@ static MACHINE_CONFIG_START( arcadia, arcadia_amiga_state )
|
||||
MCFG_SOUND_ROUTE(3, "lspeaker", 0.50)
|
||||
|
||||
/* cia */
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_0_intf)
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(IOPORT("CIA0PORTA"))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(arcadia_amiga_state,arcadia_cia_0_porta_w))
|
||||
MCFG_MOS6526_PB_INPUT_CALLBACK(IOPORT("CIA0PORTB"))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(arcadia_amiga_state,arcadia_cia_0_portb_w))
|
||||
MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq))
|
||||
|
||||
/* fdc */
|
||||
MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( argh, arcadia )
|
||||
|
@ -89,7 +89,7 @@ WRITE8_MEMBER(cd32_state::cd32_cia_0_porta_w)
|
||||
/* bit 2 = Power Led on Amiga */
|
||||
set_led_status(machine(), 0, (data & 2) ? 0 : 1);
|
||||
|
||||
handle_cd32_joystick_cia(machine(), data, mos6526_r(m_cia_0, space, 2));
|
||||
handle_cd32_joystick_cia(machine(), data, m_cia_0->read(space, 2));
|
||||
}
|
||||
|
||||
/*************************************
|
||||
@ -736,30 +736,6 @@ INPUT_PORTS_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const legacy_mos6526_interface cia_0_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_INPUT_PORT("CIA0PORTA"),
|
||||
DEVCB_DRIVER_MEMBER(cd32_state,cd32_cia_0_porta_w), /* port A */
|
||||
DEVCB_DRIVER_MEMBER(cd32_state,cd32_cia_0_portb_r),
|
||||
DEVCB_DRIVER_MEMBER(cd32_state,cd32_cia_0_portb_w) /* port B */
|
||||
};
|
||||
|
||||
static const legacy_mos6526_interface cia_1_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
#define NVRAM_SIZE 1024
|
||||
#define NVRAM_PAGE_SIZE 16 /* max size of one write request */
|
||||
|
||||
@ -803,13 +779,20 @@ static MACHINE_CONFIG_START( cd32base, cd32_state )
|
||||
|
||||
/* cia */
|
||||
// these are setup differently on other amiga drivers (needed for floppy to work) which is correct / why?
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68EC020_PAL_CLOCK / 10, 0, cia_0_intf)
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68EC020_PAL_CLOCK / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68EC020_PAL_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(IOPORT("CIA0PORTA"))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(cd32_state,cd32_cia_0_porta_w))
|
||||
MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(cd32_state,cd32_cia_0_portb_r))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(cd32_state,cd32_cia_0_portb_w))
|
||||
MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68EC020_PAL_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq))
|
||||
|
||||
MCFG_MICROTOUCH_ADD( "microtouch", WRITE8(cd32_state, microtouch_tx) )
|
||||
|
||||
/* fdc */
|
||||
MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
struct cdrom_interface cd32_cdrom =
|
||||
|
@ -353,30 +353,6 @@ MACHINE_RESET_MEMBER(mquake_state,mquake)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const legacy_mos6526_interface cia_0_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_INPUT_PORT("CIA0PORTA"),
|
||||
DEVCB_DRIVER_MEMBER(mquake_state,mquake_cia_0_porta_w), /* port A */
|
||||
DEVCB_DRIVER_MEMBER(mquake_state,mquake_cia_0_portb_r),
|
||||
DEVCB_DRIVER_MEMBER(mquake_state,mquake_cia_0_portb_w) /* port B */
|
||||
};
|
||||
|
||||
static const legacy_mos6526_interface cia_1_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( mquake, mquake_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -418,11 +394,18 @@ static MACHINE_CONFIG_START( mquake, mquake_state )
|
||||
MCFG_SOUND_ROUTE(0, "rspeaker", 0.50)
|
||||
|
||||
/* cia */
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_0_intf)
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(IOPORT("CIA0PORTA"))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(mquake_state,mquake_cia_0_porta_w))
|
||||
MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(mquake_state,mquake_cia_0_portb_r))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(mquake_state,mquake_cia_0_portb_w))
|
||||
MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq))
|
||||
|
||||
/* fdc */
|
||||
MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -283,30 +283,6 @@ INPUT_PORTS_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const legacy_mos6526_interface cia_0_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_0_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_0_porta_w), /* port A */
|
||||
DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_0_portb_r),
|
||||
DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_0_portb_w) /* port B */
|
||||
};
|
||||
|
||||
static const legacy_mos6526_interface cia_1_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state,amiga_cia_1_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_1_porta_r),
|
||||
DEVCB_DRIVER_MEMBER(upscope_state,upscope_cia_1_porta_w), /* port A */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( upscope, upscope_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -342,11 +318,19 @@ static MACHINE_CONFIG_START( upscope, upscope_state )
|
||||
MCFG_SOUND_ROUTE(3, "rspeaker", 0.50)
|
||||
|
||||
/* cia */
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_0_intf)
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(upscope_state,upscope_cia_0_porta_w))
|
||||
MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(upscope_state,upscope_cia_0_portb_r))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(upscope_state,upscope_cia_0_portb_w))
|
||||
MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(upscope_state,upscope_cia_1_porta_r))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(upscope_state,upscope_cia_1_porta_w))
|
||||
|
||||
/* fdc */
|
||||
MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -498,7 +498,6 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(amiga_cia_0_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(amiga_cia_1_irq);
|
||||
DECLARE_READ8_MEMBER( amiga_cia_0_portA_r );
|
||||
DECLARE_READ8_MEMBER( amiga_cia_0_cdtv_portA_r );
|
||||
DECLARE_WRITE8_MEMBER( amiga_cia_0_portA_w );
|
||||
|
||||
DECLARE_READ16_MEMBER( amiga_clock_r );
|
||||
|
@ -340,7 +340,8 @@ TIMER_CALLBACK_MEMBER(amiga_state::scanline_callback)
|
||||
amiga_custom_w(m_maincpu->space(AS_PROGRAM), REG_INTREQ, 0x8000 | INTENA_VERTB, 0xffff);
|
||||
|
||||
/* clock the first CIA TOD */
|
||||
mos6526_tod_w(m_cia_0, 1);
|
||||
m_cia_0->tod_w(1);
|
||||
m_cia_0->tod_w(0);
|
||||
|
||||
/* call the system-specific callback */
|
||||
if (m_intf->scanline0_callback != NULL)
|
||||
@ -348,7 +349,8 @@ TIMER_CALLBACK_MEMBER(amiga_state::scanline_callback)
|
||||
}
|
||||
|
||||
/* on every scanline, clock the second CIA TOD */
|
||||
mos6526_tod_w(m_cia_1, 1);
|
||||
m_cia_1->tod_w(1);
|
||||
m_cia_1->tod_w(0);
|
||||
|
||||
/* render up to this scanline */
|
||||
if (!m_screen->update_partial(scanline))
|
||||
@ -1044,7 +1046,7 @@ READ16_MEMBER( amiga_state::amiga_cia_r )
|
||||
amiga_state *state = space.machine().driver_data<amiga_state>();
|
||||
UINT8 data;
|
||||
int shift;
|
||||
device_t *cia;
|
||||
legacy_mos6526_device *cia;
|
||||
|
||||
/* offsets 0000-07ff reference CIA B, and are accessed via the MSB */
|
||||
if ((offset & 0x0800) == 0)
|
||||
@ -1061,7 +1063,7 @@ READ16_MEMBER( amiga_state::amiga_cia_r )
|
||||
}
|
||||
|
||||
/* handle the reads */
|
||||
data = mos6526_r(cia, space, offset >> 7);
|
||||
data = cia->read(space, offset >> 7);
|
||||
|
||||
if (LOG_CIA)
|
||||
logerror("%06x:cia_%c_read(%03x) = %04x & %04x\n", space.device().safe_pc(), 'A' + ((~offset & 0x0800) >> 11), offset * 2, data << shift, mem_mask);
|
||||
@ -1080,7 +1082,7 @@ READ16_MEMBER( amiga_state::amiga_cia_r )
|
||||
WRITE16_MEMBER( amiga_state::amiga_cia_w )
|
||||
{
|
||||
amiga_state *state = space.machine().driver_data<amiga_state>();
|
||||
device_t *cia;
|
||||
legacy_mos6526_device *cia;
|
||||
|
||||
if (LOG_CIA)
|
||||
logerror("%06x:cia_%c_write(%03x) = %04x & %04x\n", space.device().safe_pc(), 'A' + ((~offset & 0x0800) >> 11), offset * 2, data, mem_mask);
|
||||
@ -1104,7 +1106,7 @@ WRITE16_MEMBER( amiga_state::amiga_cia_w )
|
||||
}
|
||||
|
||||
/* handle the writes */
|
||||
mos6526_w(cia, space, offset >> 7, (UINT8) data);
|
||||
cia->write(space, offset >> 7, (UINT8) data);
|
||||
}
|
||||
|
||||
|
||||
@ -1458,8 +1460,8 @@ WRITE16_MEMBER( amiga_state::amiga_custom_w )
|
||||
CUSTOM_REG(REG_SERDATR) &= ~0x8000;
|
||||
|
||||
data = (data & 0x8000) ? (CUSTOM_REG(offset) | (data & 0x7fff)) : (CUSTOM_REG(offset) & ~(data & 0x7fff));
|
||||
if ( mos6526_irq_r( state->m_cia_0 ) ) data |= INTENA_PORTS;
|
||||
if ( mos6526_irq_r( state->m_cia_1 ) ) data |= INTENA_EXTER;
|
||||
if ( state->m_cia_0->irq_r() ) data |= INTENA_PORTS;
|
||||
if ( state->m_cia_1->irq_r() ) data |= INTENA_EXTER;
|
||||
CUSTOM_REG(offset) = data;
|
||||
|
||||
if ( temp & 0x8000 ) /* if we're generating irq's, delay a bit */
|
||||
|
@ -390,12 +390,10 @@ WRITE32_MEMBER(a1200_state::aga_overlay_w)
|
||||
|
||||
WRITE8_MEMBER(a1200_state::ami1200_cia_0_porta_w)
|
||||
{
|
||||
device_t *device = machine().device("cia_0");
|
||||
|
||||
/* bit 2 = Power Led on Amiga */
|
||||
output_set_value("audio_led", !BIT(data, 1));
|
||||
|
||||
handle_cd32_joystick_cia(this, data, mos6526_r(device, space, 2));
|
||||
handle_cd32_joystick_cia(this, data, m_cia_0->read(space, 2));
|
||||
}
|
||||
|
||||
/*************************************
|
||||
@ -504,66 +502,6 @@ MACHINE_RESET_MEMBER(cdtv_state,cdtv)
|
||||
MACHINE_RESET_CALL_LEGACY( amigacd );
|
||||
}
|
||||
|
||||
static const legacy_mos6526_interface cia_0_ntsc_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_0_irq), /* irq_func */
|
||||
DEVCB_DEVICE_LINE_MEMBER("centronics", centronics_device, write_strobe), /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_r),
|
||||
DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_w), /* port A */
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write) /* port B */
|
||||
};
|
||||
|
||||
static const legacy_mos6526_interface cia_0_pal_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_0_irq), /* irq_func */
|
||||
DEVCB_DEVICE_LINE_MEMBER("centronics", centronics_device, write_strobe), /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_r),
|
||||
DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_w), /* port A */
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write) /* port B */
|
||||
};
|
||||
|
||||
static const legacy_mos6526_interface cia_1_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_1_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_1_porta_r),
|
||||
DEVCB_NULL, /* port A */
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_MEMBER("fdc", amiga_fdc, ciaaprb_w) /* port B */
|
||||
};
|
||||
|
||||
static const legacy_mos6526_interface cia_0_cdtv_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_0_irq), /* irq_func */
|
||||
DEVCB_DEVICE_LINE_MEMBER("centronics", centronics_device, write_strobe), /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_cdtv_portA_r),
|
||||
DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_0_portA_w), /* port A */
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write) /* port B */
|
||||
};
|
||||
|
||||
static const legacy_mos6526_interface cia_1_cdtv_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state, amiga_cia_1_irq), /* irq_func */
|
||||
DEVCB_NULL, /* pc_func */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(amiga_state, amiga_cia_1_porta_r),
|
||||
DEVCB_NULL, /* port A */
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL /* port B */
|
||||
};
|
||||
|
||||
static const tpi6525_interface cdtv_tpi_intf =
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(amiga_state, amigacd_tpi6525_irq),
|
||||
@ -673,11 +611,21 @@ static MACHINE_CONFIG_START( ntsc, amiga_state )
|
||||
MCFG_SOUND_ROUTE(3, "lspeaker", 0.50)
|
||||
|
||||
/* cia */
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 60, cia_0_ntsc_intf)
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_TOD(60)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq))
|
||||
MCFG_MOS6526_PC_CALLBACK(DEVWRITELINE("centronics", centronics_device, write_strobe))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_0_portA_r))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(amiga_state, amiga_cia_0_portA_w))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("cent_data_out", output_latch_device, write))
|
||||
MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_1_porta_r))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("fdc", amiga_fdc, ciaaprb_w))
|
||||
|
||||
/* fdc */
|
||||
MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w))
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", amiga_fdc::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, amiga_fdc::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, amiga_fdc::floppy_formats)
|
||||
@ -694,6 +642,9 @@ static MACHINE_CONFIG_DERIVED( a1000ntsc, ntsc )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( a500ntsc, ntsc )
|
||||
MCFG_DEVICE_MODIFY("cia_0")
|
||||
MCFG_MOS6526_TOD(0)
|
||||
|
||||
MCFG_FRAGMENT_ADD(amiga_cartslot)
|
||||
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_misc","amiga_flop")
|
||||
@ -735,15 +686,8 @@ static MACHINE_CONFIG_DERIVED_CLASS( cdtv, ntsc, cdtv_state)
|
||||
|
||||
MCFG_TPI6525_ADD("tpi6525", cdtv_tpi_intf)
|
||||
|
||||
/* cia */
|
||||
MCFG_DEVICE_REMOVE("cia_0")
|
||||
MCFG_DEVICE_REMOVE("cia_1")
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", CDTV_CLOCK_X1 / 4 / 40, 0, cia_0_cdtv_intf)
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", CDTV_CLOCK_X1 / 4 / 40, 0, cia_1_cdtv_intf)
|
||||
|
||||
/* fdc */
|
||||
MCFG_DEVICE_MODIFY("fdc")
|
||||
MCFG_DEVICE_CLOCK(CDTV_CLOCK_X1 / 4)
|
||||
MCFG_DEVICE_MODIFY("cia_0")
|
||||
MCFG_MOS6526_TOD(0) // connected to vsync
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -762,10 +706,11 @@ static MACHINE_CONFIG_DERIVED( pal, ntsc )
|
||||
// MCFG_SCREEN_VISIBLE_AREA(214, (228*4)-1, 34, 312-1)
|
||||
|
||||
/* cia */
|
||||
MCFG_DEVICE_REMOVE("cia_0")
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_PAL_CLOCK / 10, 50, cia_0_pal_intf)
|
||||
MCFG_DEVICE_REMOVE("cia_1")
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_PAL_CLOCK / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_MODIFY("cia_0")
|
||||
MCFG_DEVICE_CLOCK(AMIGA_68000_PAL_CLOCK / 10)
|
||||
MCFG_MOS6526_TOD(50)
|
||||
MCFG_DEVICE_MODIFY("cia_1")
|
||||
MCFG_DEVICE_CLOCK(AMIGA_68000_PAL_CLOCK / 10)
|
||||
|
||||
/* fdc */
|
||||
MCFG_DEVICE_MODIFY("fdc")
|
||||
@ -773,6 +718,9 @@ static MACHINE_CONFIG_DERIVED( pal, ntsc )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( a500p, pal )
|
||||
MCFG_DEVICE_MODIFY("cia_0")
|
||||
MCFG_MOS6526_TOD(0) // connected to vsync
|
||||
|
||||
MCFG_FRAGMENT_ADD(amiga_cartslot)
|
||||
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_misc","amiga_flop")
|
||||
@ -882,11 +830,20 @@ static MACHINE_CONFIG_START( a1200n, a1200_state )
|
||||
MCFG_SOUND_ROUTE(3, "lspeaker", 0.50)
|
||||
|
||||
/* cia */
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68EC020_NTSC_CLOCK /2 / 10, 60, cia_0_ntsc_intf)
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68EC020_NTSC_CLOCK /2 / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68EC020_NTSC_CLOCK /2 / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq))
|
||||
MCFG_MOS6526_PC_CALLBACK(DEVWRITELINE("centronics", centronics_device, write_strobe))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_0_portA_r))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(amiga_state, amiga_cia_0_portA_w))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("cent_data_out", output_latch_device, write))
|
||||
MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68EC020_NTSC_CLOCK /2 / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_1_porta_r))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("fdc", amiga_fdc, ciaaprb_w))
|
||||
|
||||
/* fdc */
|
||||
MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68EC020_NTSC_CLOCK / 2)
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68EC020_NTSC_CLOCK / 2)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w))
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", amiga_fdc::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, amiga_fdc::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, amiga_fdc::floppy_formats)
|
||||
@ -992,11 +949,21 @@ static MACHINE_CONFIG_START( a3000n, amiga_state )
|
||||
MCFG_SOUND_ROUTE(3, "lspeaker", 0.50)
|
||||
|
||||
/* cia */
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_NTSC_CLOCK / 10, 60, cia_0_ntsc_intf)
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_NTSC_CLOCK / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_ADD("cia_0", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_TOD(60) // jumper selectable TICK or VSYNC
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_0_irq))
|
||||
MCFG_MOS6526_PC_CALLBACK(DEVWRITELINE("centronics", centronics_device, write_strobe))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_0_portA_r))
|
||||
MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(amiga_state, amiga_cia_0_portA_w))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("cent_data_out", output_latch_device, write))
|
||||
MCFG_DEVICE_ADD("cia_1", LEGACY_MOS8520, AMIGA_68000_NTSC_CLOCK / 10)
|
||||
MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(amiga_state, amiga_cia_1_irq))
|
||||
MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(amiga_state, amiga_cia_1_porta_r))
|
||||
MCFG_MOS6526_PB_OUTPUT_CALLBACK(DEVWRITE8("fdc", amiga_fdc, ciaaprb_w))
|
||||
|
||||
/* fdc */
|
||||
MCFG_AMIGA_FDC_ADD("fdc", AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_DEVICE_ADD("fdc", AMIGA_FDC, AMIGA_68000_NTSC_CLOCK)
|
||||
MCFG_AMIGA_FDC_INDEX_CALLBACK(DEVWRITELINE("cia_1", legacy_mos6526_device, flag_w))
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:0", amiga_floppies, "35dd", amiga_fdc::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:1", amiga_floppies, 0, amiga_fdc::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:2", amiga_floppies, 0, amiga_fdc::floppy_formats)
|
||||
@ -1021,10 +988,11 @@ static MACHINE_CONFIG_DERIVED( a3000, a3000n )
|
||||
// MCFG_SCREEN_VISIBLE_AREA(214, (228*4)-1, 34, 312-1)
|
||||
|
||||
/* cia */
|
||||
MCFG_DEVICE_REMOVE("cia_0")
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68000_PAL_CLOCK / 10, 50, cia_0_pal_intf)
|
||||
MCFG_DEVICE_REMOVE("cia_1")
|
||||
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68000_PAL_CLOCK / 10, 0, cia_1_intf)
|
||||
MCFG_DEVICE_MODIFY("cia_0")
|
||||
MCFG_DEVICE_CLOCK(AMIGA_68000_PAL_CLOCK / 10)
|
||||
MCFG_MOS6526_TOD(50) // jumper selectable TICK or VSYNC
|
||||
MCFG_DEVICE_MODIFY("cia_1")
|
||||
MCFG_DEVICE_CLOCK(AMIGA_68000_PAL_CLOCK / 10)
|
||||
|
||||
/* fdc */
|
||||
MCFG_DEVICE_MODIFY("fdc")
|
||||
@ -1046,11 +1014,6 @@ READ8_MEMBER( amiga_state::amiga_cia_0_portA_r )
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER( amiga_state::amiga_cia_0_cdtv_portA_r )
|
||||
{
|
||||
return space.machine().root_device().ioport("CIA0PORTA")->read() & 0xc0; /* Gameport 1 and 0 buttons */
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( amiga_state::amiga_cia_0_portA_w )
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user