mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
(MESS) devcb2 conversions. (nw)
This commit is contained in:
parent
5948ae0893
commit
5f9462af07
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1271,6 +1271,8 @@ src/emu/machine/mos6526.c svneol=native#text/plain
|
||||
src/emu/machine/mos6526.h svneol=native#text/plain
|
||||
src/emu/machine/mos6529.c svneol=native#text/plain
|
||||
src/emu/machine/mos6529.h svneol=native#text/plain
|
||||
src/emu/machine/mos6551.c svneol=native#text/plain
|
||||
src/emu/machine/mos6551.h svneol=native#text/plain
|
||||
src/emu/machine/msm5832.c svneol=native#text/plain
|
||||
src/emu/machine/msm5832.h svneol=native#text/plain
|
||||
src/emu/machine/msm58321.c svneol=native#text/plain
|
||||
|
@ -226,6 +226,7 @@ EMUMACHINEOBJS = \
|
||||
$(EMUMACHINE)/microtch.o \
|
||||
$(EMUMACHINE)/mos6526.o \
|
||||
$(EMUMACHINE)/mos6529.o \
|
||||
$(EMUMACHINE)/mos6551.o \
|
||||
$(EMUMACHINE)/msm5832.o \
|
||||
$(EMUMACHINE)/msm58321.o \
|
||||
$(EMUMACHINE)/msm6242.o \
|
||||
|
@ -29,6 +29,8 @@ const device_type DS75160A = &device_creator<ds75160a_device>;
|
||||
|
||||
ds75160a_device::ds75160a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, DS75160A, "DS75160A", tag, owner, clock),
|
||||
m_read(*this),
|
||||
m_write(*this),
|
||||
m_data(0xff),
|
||||
m_te(0),
|
||||
m_pe(0)
|
||||
@ -36,28 +38,6 @@ ds75160a_device::ds75160a_device(const machine_config &mconfig, const char *tag,
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void ds75160a_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const ds75160a_interface *intf = reinterpret_cast<const ds75160a_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<ds75160a_interface *>(this) = *intf;
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_in_bus_cb, 0, sizeof(m_in_bus_cb));
|
||||
memset(&m_out_bus_cb, 0, sizeof(m_out_bus_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
@ -65,8 +45,8 @@ void ds75160a_device::device_config_complete()
|
||||
void ds75160a_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_in_bus_func.resolve(m_in_bus_cb, *this);
|
||||
m_out_bus_func.resolve(m_out_bus_cb, *this);
|
||||
m_read.resolve_safe(0);
|
||||
m_write.resolve_safe();
|
||||
|
||||
// register for state saving
|
||||
save_item(NAME(m_data));
|
||||
@ -85,7 +65,7 @@ READ8_MEMBER( ds75160a_device::read )
|
||||
|
||||
if (!m_te)
|
||||
{
|
||||
data = m_in_bus_func(0);
|
||||
data = m_read(0);
|
||||
}
|
||||
|
||||
return data;
|
||||
@ -102,7 +82,7 @@ WRITE8_MEMBER( ds75160a_device::write )
|
||||
|
||||
if (m_te)
|
||||
{
|
||||
m_out_bus_func(0, m_data);
|
||||
m_write((offs_t)0, m_data);
|
||||
}
|
||||
}
|
||||
|
||||
@ -115,7 +95,7 @@ WRITE_LINE_MEMBER( ds75160a_device::te_w )
|
||||
{
|
||||
if (m_te != state)
|
||||
{
|
||||
m_out_bus_func(0, m_te ? m_data : 0xff);
|
||||
m_write((offs_t)0, m_te ? m_data : 0xff);
|
||||
}
|
||||
|
||||
m_te = state;
|
||||
|
@ -33,13 +33,9 @@
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
///*************************************************************************
|
||||
|
||||
#define MCFG_DS75160A_ADD(_tag, _config) \
|
||||
#define MCFG_DS75160A_ADD(_tag, _read, _write) \
|
||||
MCFG_DEVICE_ADD(_tag, DS75160A, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
|
||||
#define DS75160A_INTERFACE(name) \
|
||||
const ds75160a_interface (name) =
|
||||
downcast<ds75160a_device *>(device)->set_callbacks(DEVCB2_##_read, DEVCB2_##_write);
|
||||
|
||||
|
||||
|
||||
@ -47,24 +43,19 @@
|
||||
// TYPE DEFINITIONS
|
||||
///*************************************************************************
|
||||
|
||||
// ======================> ds75160a_interface
|
||||
|
||||
struct ds75160a_interface
|
||||
{
|
||||
devcb_read8 m_in_bus_cb;
|
||||
devcb_write8 m_out_bus_cb;
|
||||
};
|
||||
|
||||
|
||||
// ======================> ds75160a_device
|
||||
|
||||
class ds75160a_device : public device_t,
|
||||
public ds75160a_interface
|
||||
class ds75160a_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
ds75160a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
template<class _read, class _write> void set_callbacks(_read rd, _write wr) {
|
||||
m_read.set_callback(rd);
|
||||
m_write.set_callback(wr);
|
||||
}
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
@ -73,12 +64,11 @@ public:
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
|
||||
private:
|
||||
devcb_resolved_read8 m_in_bus_func;
|
||||
devcb_resolved_write8 m_out_bus_func;
|
||||
devcb2_read8 m_read;
|
||||
devcb2_write8 m_write;
|
||||
|
||||
UINT8 m_data;
|
||||
|
||||
|
@ -20,44 +20,30 @@
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// device type definition
|
||||
const device_type MOS6529 = &device_creator<mos6529_device>;
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// mos6529_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
mos6529_device::mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, MOS6529, "MOS6529", tag, owner, clock)
|
||||
: device_t(mconfig, MOS6529, "MOS6529", tag, owner, clock),
|
||||
m_read_port(*this),
|
||||
m_write_port(*this)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void mos6529_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const mos6529_interface *intf = reinterpret_cast<const mos6529_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<mos6529_interface *>(this) = *intf;
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_in_p_cb, 0, sizeof(m_in_p_cb));
|
||||
memset(&m_out_p_cb, 0, sizeof(m_out_p_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
@ -65,8 +51,8 @@ void mos6529_device::device_config_complete()
|
||||
void mos6529_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_in_p_func.resolve(m_in_p_cb, *this);
|
||||
m_out_p_func.resolve(m_out_p_cb, *this);
|
||||
m_read_port.resolve_safe(0);
|
||||
m_write_port.resolve_safe();
|
||||
}
|
||||
|
||||
|
||||
@ -76,7 +62,7 @@ void mos6529_device::device_start()
|
||||
|
||||
READ8_MEMBER( mos6529_device::read )
|
||||
{
|
||||
return m_in_p_func(0);
|
||||
return m_read_port(0);
|
||||
}
|
||||
|
||||
|
||||
@ -86,5 +72,5 @@ READ8_MEMBER( mos6529_device::read )
|
||||
|
||||
WRITE8_MEMBER( mos6529_device::write )
|
||||
{
|
||||
m_out_p_func(0, data);
|
||||
m_write_port((offs_t)0, data);
|
||||
}
|
||||
|
@ -33,12 +33,9 @@
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_MOS6529_ADD(_tag, _config) \
|
||||
MCFG_DEVICE_ADD(_tag, MOS6529, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
#define MOS6529_INTERFACE(name) \
|
||||
const mos6529_interface (name) =
|
||||
#define MCFG_MOS6529_ADD(_tag, _read, _write) \
|
||||
MCFG_DEVICE_ADD(_tag, MOS6529, 0) \
|
||||
downcast<mos6529_device *>(device)->set_callbacks(DEVCB2_##_read, DEVCB2_##_write);
|
||||
|
||||
|
||||
|
||||
@ -46,35 +43,29 @@
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> mos6529_interface
|
||||
|
||||
struct mos6529_interface
|
||||
{
|
||||
devcb_read8 m_in_p_cb;
|
||||
devcb_write8 m_out_p_cb;
|
||||
};
|
||||
|
||||
|
||||
// ======================> mos6529_device
|
||||
|
||||
class mos6529_device : public device_t,
|
||||
public mos6529_interface
|
||||
class mos6529_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
template<class _read, class _write> void set_callbacks(_read rd, _write wr) {
|
||||
m_read_port.set_callback(rd);
|
||||
m_write_port.set_callback(wr);
|
||||
}
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
|
||||
private:
|
||||
devcb_resolved_read8 m_in_p_func;
|
||||
devcb_resolved_write8 m_out_p_func;
|
||||
devcb2_read8 m_read_port;
|
||||
devcb2_write8 m_write_port;
|
||||
};
|
||||
|
||||
|
||||
|
277
src/emu/machine/mos6551.c
Normal file
277
src/emu/machine/mos6551.c
Normal file
@ -0,0 +1,277 @@
|
||||
/**********************************************************************
|
||||
|
||||
MOS Technology 6551 Asynchronous Communication Interface Adapter
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "mos6551.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define LOG 0
|
||||
|
||||
|
||||
const int mos6551_device::brg_divider[] = {
|
||||
0, 2304, 1536, 1048, 856, 768, 384, 192, 96, 64, 48, 32, 24, 16, 12, 6
|
||||
};
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// device type definition
|
||||
const device_type MOS6551 = &device_creator<mos6551_device>;
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// mos6551_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
mos6551_device::mos6551_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, MOS6551, "MOS6551", tag, owner, clock),
|
||||
device_serial_interface(mconfig, *this),
|
||||
m_irq_handler(*this),
|
||||
m_ctrl(0),
|
||||
m_cmd(CMD_RIE),
|
||||
m_st(ST_TDRE),
|
||||
m_ext_rxc(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void mos6551_device::device_start()
|
||||
{
|
||||
m_irq_handler.resolve_safe();
|
||||
|
||||
transmit_register_reset();
|
||||
receive_register_reset();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void mos6551_device::device_reset()
|
||||
{
|
||||
m_ctrl = 0;
|
||||
m_cmd = CMD_RIE;
|
||||
|
||||
update_serial();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// tra_complete -
|
||||
//-------------------------------------------------
|
||||
|
||||
void mos6551_device::tra_complete()
|
||||
{
|
||||
if ((m_cmd & CMD_TC_MASK) == CMD_TC_TIE_RTS_LO)
|
||||
{
|
||||
m_st |= ST_IRQ;
|
||||
m_irq_handler(ASSERT_LINE);
|
||||
}
|
||||
|
||||
if (!(m_st & ST_TDRE))
|
||||
{
|
||||
transmit_register_setup(m_tdr);
|
||||
m_st |= ST_TDRE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rcv_complete -
|
||||
//-------------------------------------------------
|
||||
|
||||
void mos6551_device::rcv_complete()
|
||||
{
|
||||
if (m_st & ST_RDRF)
|
||||
{
|
||||
m_st |= ST_OR;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_st |= ST_RDRF;
|
||||
|
||||
if (!(m_cmd & CMD_RIE))
|
||||
{
|
||||
m_st |= ST_IRQ;
|
||||
m_irq_handler(ASSERT_LINE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_callback -
|
||||
//-------------------------------------------------
|
||||
|
||||
void mos6551_device::input_callback(UINT8 state)
|
||||
{
|
||||
m_input_state = state;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// update_serial -
|
||||
//-------------------------------------------------
|
||||
|
||||
void mos6551_device::update_serial()
|
||||
{
|
||||
int brg = m_ctrl & CTRL_BRG_MASK;
|
||||
|
||||
if (brg == CTRL_BRG_16X_EXTCLK)
|
||||
{
|
||||
set_rcv_rate(m_ext_rxc / 16);
|
||||
set_tra_rate(m_ext_rxc / 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
int baud = clock() / brg_divider[brg] / 16;
|
||||
|
||||
set_tra_rate(baud);
|
||||
|
||||
if (m_ctrl & CTRL_RXC_BRG)
|
||||
{
|
||||
set_rcv_rate(baud);
|
||||
}
|
||||
else
|
||||
{
|
||||
set_rcv_rate(m_ext_rxc / 16);
|
||||
}
|
||||
|
||||
int num_data_bits = 8;
|
||||
int stop_bit_count = 1;
|
||||
int parity_code = SERIAL_PARITY_NONE;
|
||||
|
||||
switch (m_ctrl & CTRL_WL_MASK)
|
||||
{
|
||||
case CTRL_WL_8: num_data_bits = 8; break;
|
||||
case CTRL_WL_7: num_data_bits = 7; break;
|
||||
case CTRL_WL_6: num_data_bits = 6; break;
|
||||
case CTRL_WL_5: num_data_bits = 5; break;
|
||||
}
|
||||
|
||||
set_data_frame(num_data_bits, stop_bit_count, parity_code);
|
||||
}
|
||||
|
||||
if (m_cmd & CMD_DTR)
|
||||
m_connection_state |= SERIAL_STATE_DTR;
|
||||
else
|
||||
m_connection_state &= ~SERIAL_STATE_DTR;
|
||||
|
||||
if ((m_cmd & CMD_TC_MASK) == CMD_TC_RTS_HI)
|
||||
m_connection_state &= ~SERIAL_STATE_RTS;
|
||||
else
|
||||
m_connection_state |= SERIAL_STATE_RTS;
|
||||
|
||||
serial_connection_out();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( mos6551_device::read )
|
||||
{
|
||||
UINT8 data = 0;
|
||||
|
||||
switch (offset & 0x03)
|
||||
{
|
||||
case 0:
|
||||
if (is_receive_register_full())
|
||||
{
|
||||
receive_register_extract();
|
||||
data = get_received_char();
|
||||
}
|
||||
|
||||
m_st &= ~(ST_RDRF | ST_OR | ST_FE | ST_PE);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
data = m_st;
|
||||
m_st &= ~ST_IRQ;
|
||||
m_irq_handler(CLEAR_LINE);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
data = m_cmd;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
data = m_ctrl;
|
||||
break;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// write -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( mos6551_device::write )
|
||||
{
|
||||
switch (offset & 0x03)
|
||||
{
|
||||
case 0:
|
||||
m_tdr = data;
|
||||
m_st &= ~ST_TDRE;
|
||||
|
||||
if (is_transmit_register_empty())
|
||||
{
|
||||
transmit_register_setup(m_tdr);
|
||||
m_st |= ST_TDRE;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
// programmed reset
|
||||
m_cmd = (m_cmd & 0xe0) | CMD_RIE;
|
||||
m_st &= ~ST_OR;
|
||||
update_serial();
|
||||
break;
|
||||
|
||||
case 2:
|
||||
m_cmd = data;
|
||||
update_serial();
|
||||
break;
|
||||
|
||||
case 3:
|
||||
m_ctrl = data;
|
||||
update_serial();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// set_rxc - set external receiver clock
|
||||
//-------------------------------------------------
|
||||
|
||||
void mos6551_device::set_rxc(int clock)
|
||||
{
|
||||
m_ext_rxc = clock;
|
||||
}
|
166
src/emu/machine/mos6551.h
Normal file
166
src/emu/machine/mos6551.h
Normal file
@ -0,0 +1,166 @@
|
||||
/**********************************************************************
|
||||
|
||||
MOS Technology 6551 Asynchronous Communication Interface Adapter
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************
|
||||
_____ _____
|
||||
GND 1 |* \_/ | 28 R/_W
|
||||
CS0 2 | | 27 phi2
|
||||
_CS1 3 | | 26 _IRQ
|
||||
_RES 4 | | 25 DB7
|
||||
RxC 5 | | 24 DB6
|
||||
XTAL1 6 | | 23 DB5
|
||||
XTAL2 7 | MOS6551 | 22 DB4
|
||||
_RTS 8 | | 21 DB3
|
||||
_CTS 9 | | 20 DB2
|
||||
TxD 10 | | 19 DB1
|
||||
_DTR 11 | | 18 DB0
|
||||
RxD 12 | | 17 _DBR
|
||||
RS0 13 | | 16 _DCD
|
||||
RS1 14 |_____________| 15 Vcc
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __MOS6551__
|
||||
#define __MOS6551__
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_MOS6551_ADD(_tag, _clock, _irq) \
|
||||
MCFG_DEVICE_ADD(_tag, MOS6551, _clock) \
|
||||
devcb = &mos6551_device::set_irq_handler(*device, DEVCB2_##_irq);
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> mos6551_device
|
||||
|
||||
class mos6551_device : public device_t,
|
||||
public device_serial_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
mos6551_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// static configuration helpers
|
||||
template<class _Object> static devcb2_base &set_irq_handler(device_t &device, _Object object) { return downcast<mos6551_device &>(device).m_irq_handler.set_callback(object); }
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
void set_rxc(int clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
// device_serial_interface overrides
|
||||
virtual void tra_complete();
|
||||
virtual void rcv_complete();
|
||||
virtual void input_callback(UINT8 state);
|
||||
|
||||
enum
|
||||
{
|
||||
CTRL_BRG_16X_EXTCLK = 0,
|
||||
CTRL_BRG_50,
|
||||
CTRL_BRG_75,
|
||||
CTRL_BRG_109_92,
|
||||
CTRL_BRG_134_58,
|
||||
CTRL_BRG_150,
|
||||
CTRL_BRG_300,
|
||||
CTRL_BRG_600,
|
||||
CTRL_BRG_1200,
|
||||
CTRL_BRG_1800,
|
||||
CTRL_BRG_2400,
|
||||
CTRL_BRG_3600,
|
||||
CTRL_BRG_4800,
|
||||
CTRL_BRG_7200,
|
||||
CTRL_BRG_9600,
|
||||
CTRL_BRG_19200,
|
||||
CTRL_BRG_MASK = 0x0f,
|
||||
|
||||
CTRL_RXC_EXT = 0x00,
|
||||
CTRL_RXC_BRG = 0x10,
|
||||
CTRL_RXC_MASK = 0x10,
|
||||
|
||||
CTRL_WL_8 = 0x00,
|
||||
CTRL_WL_7 = 0x20,
|
||||
CTRL_WL_6 = 0x40,
|
||||
CTRL_WL_5 = 0x60,
|
||||
CTRL_WL_MASK = 0x60,
|
||||
|
||||
CTRL_SB_1 = 0x00,
|
||||
CTRL_SB_2 = 0x80,
|
||||
CTRL_SB_MASK = 0x80
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CMD_DTR = 0x01,
|
||||
|
||||
CMD_RIE = 0x02,
|
||||
|
||||
CMD_TC_RTS_HI = 0x00,
|
||||
CMD_TC_TIE_RTS_LO = 0x04,
|
||||
CMD_TC_RTS_LO = 0x08,
|
||||
CMD_TC_BRK = 0x0c,
|
||||
CMD_TC_MASK = 0x0c,
|
||||
|
||||
CMD_ECHO = 0x10,
|
||||
|
||||
CMD_PARITY = 0x20,
|
||||
CMD_PARITY_ODD = 0x00,
|
||||
CMD_PARITY_EVEN = 0x40,
|
||||
CMD_PARITY_MARK = 0x80,
|
||||
CMD_PARITY_SPACE = 0xc0,
|
||||
CMD_PARITY_MASK = 0xc0
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ST_PE = 0x01,
|
||||
ST_FE = 0x02,
|
||||
ST_OR = 0x04,
|
||||
ST_RDRF = 0x08,
|
||||
ST_TDRE = 0x10,
|
||||
ST_DCD = 0x20,
|
||||
ST_DSR = 0x40,
|
||||
ST_IRQ = 0x80
|
||||
};
|
||||
|
||||
void update_serial();
|
||||
|
||||
devcb2_write_line m_irq_handler;
|
||||
|
||||
UINT8 m_ctrl;
|
||||
UINT8 m_cmd;
|
||||
UINT8 m_st;
|
||||
UINT8 m_tdr;
|
||||
|
||||
int m_ext_rxc;
|
||||
|
||||
static const int brg_divider[16];
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type MOS6551;
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -50,10 +50,6 @@ inline void c128_state::check_interrupts()
|
||||
|
||||
m_subcpu->set_input_line(M8502_IRQ_LINE, irq);
|
||||
m_subcpu->set_input_line(INPUT_LINE_NMI, nmi);
|
||||
|
||||
int flag = m_cass_rd && m_iec_srq;
|
||||
|
||||
m_cia1->flag_w(flag);
|
||||
}
|
||||
|
||||
|
||||
@ -1327,23 +1323,6 @@ static CBM_IEC_INTERFACE( cbm_iec_intf )
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( c128_state::tape_read_w )
|
||||
{
|
||||
m_cass_rd = state;
|
||||
|
||||
check_interrupts();
|
||||
}
|
||||
|
||||
static PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(c128_state, tape_read_w),
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// C64_EXPANSION_INTERFACE( expansion_intf )
|
||||
//-------------------------------------------------
|
||||
@ -1462,8 +1441,6 @@ void c128_state::machine_start()
|
||||
save_item(NAME(m_exp_irq));
|
||||
save_item(NAME(m_exp_nmi));
|
||||
save_item(NAME(m_exp_dma));
|
||||
save_item(NAME(m_cass_rd));
|
||||
save_item(NAME(m_iec_srq));
|
||||
save_item(NAME(m_vic_k));
|
||||
save_item(NAME(m_caps_lock));
|
||||
}
|
||||
@ -1531,24 +1508,27 @@ static MACHINE_CONFIG_START( ntsc, c128_state )
|
||||
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6567_CLOCK, 60, cia1_intf)
|
||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6567_CLOCK, 60, cia2_intf)
|
||||
MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL)
|
||||
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_TRIGGER_HANDLER(DEVWRITELINE(MOS8564_TAG, mos8564_device, lp_w))
|
||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6567_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL)
|
||||
MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
|
||||
|
||||
// software list
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list_c128", "c128_cart")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_c128", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_ADD("disk_list_c64", "c64_flop")
|
||||
MCFG_SOFTWARE_LIST_FILTER("disk_list_c64", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_ADD("disk_list_c128", "c128_flop")
|
||||
MCFG_SOFTWARE_LIST_FILTER("disk_list_c128", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list", "c128_cart")
|
||||
MCFG_SOFTWARE_LIST_ADD("cass_list_c64", "c64_cass")
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list_c64", "c64_flop")
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list", "c128_flop")
|
||||
MCFG_SOFTWARE_LIST_ADD("from_list", "c128_rom")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cass_list_c64", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_FILTER("flop_list_c64", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC")
|
||||
MCFG_SOFTWARE_LIST_FILTER("from_list", "NTSC")
|
||||
|
||||
// function ROM
|
||||
@ -1635,24 +1615,27 @@ static MACHINE_CONFIG_START( pal, c128_state )
|
||||
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, cia1_intf)
|
||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, cia2_intf)
|
||||
MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL)
|
||||
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_TRIGGER_HANDLER(DEVWRITELINE(MOS8566_TAG, mos8566_device, lp_w))
|
||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL)
|
||||
MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
|
||||
|
||||
// software list
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "PAL")
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "PAL")
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list_c128", "c128_cart")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_c128", "PAL")
|
||||
MCFG_SOFTWARE_LIST_ADD("disk_list_c64", "c64_flop")
|
||||
MCFG_SOFTWARE_LIST_FILTER("disk_list_c64", "PAL")
|
||||
MCFG_SOFTWARE_LIST_ADD("disk_list_c128", "c128_flop")
|
||||
MCFG_SOFTWARE_LIST_FILTER("disk_list_c128", "PAL")
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list", "c128_cart")
|
||||
MCFG_SOFTWARE_LIST_ADD("cass_list_c64", "c64_cass")
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list_c64", "c64_flop")
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list", "c128_flop")
|
||||
MCFG_SOFTWARE_LIST_ADD("from_list", "c128_rom")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "PAL")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "PAL")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL")
|
||||
MCFG_SOFTWARE_LIST_FILTER("cass_list_c64", "PAL")
|
||||
MCFG_SOFTWARE_LIST_FILTER("flop_list_c64", "PAL")
|
||||
MCFG_SOFTWARE_LIST_FILTER("flop_list", "PAL")
|
||||
MCFG_SOFTWARE_LIST_FILTER("from_list", "PAL")
|
||||
|
||||
// function ROM
|
||||
|
@ -48,10 +48,6 @@ void c64_state::check_interrupts()
|
||||
|
||||
m_maincpu->set_input_line(M6510_IRQ_LINE, irq);
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, nmi);
|
||||
|
||||
int flag = m_cass_rd && m_iec_srq;
|
||||
|
||||
m_cia1->flag_w(flag);
|
||||
}
|
||||
|
||||
|
||||
@ -998,37 +994,13 @@ WRITE8_MEMBER( c64gs_state::cpu_w )
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( c64_state::tape_read_w )
|
||||
{
|
||||
m_cass_rd = state;
|
||||
|
||||
check_interrupts();
|
||||
}
|
||||
|
||||
static PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(c64_state, tape_read_w),
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// CBM_IEC_INTERFACE( iec_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( c64_state::iec_srq_w )
|
||||
{
|
||||
m_iec_srq = state;
|
||||
|
||||
check_interrupts();
|
||||
}
|
||||
|
||||
static CBM_IEC_INTERFACE( iec_intf )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(c64_state, iec_srq_w),
|
||||
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,
|
||||
@ -1143,8 +1115,6 @@ void c64_state::machine_start()
|
||||
save_item(NAME(m_exp_irq));
|
||||
save_item(NAME(m_exp_nmi));
|
||||
save_item(NAME(m_exp_dma));
|
||||
save_item(NAME(m_cass_rd));
|
||||
save_item(NAME(m_iec_srq));
|
||||
}
|
||||
|
||||
|
||||
@ -1194,9 +1164,10 @@ static MACHINE_CONFIG_START( ntsc, c64_state )
|
||||
MCFG_PLS100_ADD(PLA_TAG)
|
||||
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6567_CLOCK, 60, cia1_intf)
|
||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6567_CLOCK, 60, cia2_intf)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL)
|
||||
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_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_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6567_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL)
|
||||
MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
|
||||
@ -1294,9 +1265,10 @@ static MACHINE_CONFIG_START( pal, c64_state )
|
||||
MCFG_PLS100_ADD(PLA_TAG)
|
||||
MCFG_MOS6526_ADD(MOS6526_1_TAG, VIC6569_CLOCK, 50, cia1_intf)
|
||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, cia2_intf)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL)
|
||||
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_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_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL)
|
||||
MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
|
||||
@ -1374,6 +1346,7 @@ static MACHINE_CONFIG_START( pal_gs, c64gs_state )
|
||||
MCFG_MOS6526_ADD(MOS6526_2_TAG, VIC6569_CLOCK, 50, cia2_intf)
|
||||
MCFG_CBM_IEC_BUS_ADD(iec_intf)
|
||||
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_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, expansion_intf, c64_expansion_cards, NULL, NULL)
|
||||
MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
|
||||
|
@ -1662,34 +1662,6 @@ static MOS6526_INTERFACE( cia_intf )
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( cbm2_state::tape_read_w )
|
||||
{
|
||||
m_cass_rd = state;
|
||||
|
||||
m_cia->flag_w(m_cass_rd && m_user_flag);
|
||||
}
|
||||
|
||||
static PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tape_read_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// DS75160A_INTERFACE( ds75160a_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static DS75160A_INTERFACE( ds75160a_intf )
|
||||
{
|
||||
DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_r),
|
||||
DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// DS75161A_INTERFACE( ds75161a_intf )
|
||||
//-------------------------------------------------
|
||||
@ -2012,8 +1984,6 @@ MACHINE_START_MEMBER( cbm2_state, cbm2 )
|
||||
save_item(NAME(m_ntsc));
|
||||
save_item(NAME(m_todclk));
|
||||
save_item(NAME(m_tpi1_irq));
|
||||
save_item(NAME(m_cass_rd));
|
||||
save_item(NAME(m_user_flag));
|
||||
save_item(NAME(m_tpi2_pa));
|
||||
save_item(NAME(m_tpi2_pb));
|
||||
save_item(NAME(m_cia_pa));
|
||||
@ -2132,7 +2102,6 @@ MACHINE_RESET_MEMBER( cbm2_state, cbm2 )
|
||||
m_busy2 = 1;
|
||||
m_graphics = 1;
|
||||
m_tpi1_irq = CLEAR_LINE;
|
||||
m_cass_rd = 1;
|
||||
m_user_irq = CLEAR_LINE;
|
||||
|
||||
m_maincpu->reset();
|
||||
@ -2214,13 +2183,14 @@ static MACHINE_CONFIG_START( p500_ntsc, p500_state )
|
||||
MCFG_PLS100_ADD(PLA2_TAG)
|
||||
MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
|
||||
MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
|
||||
MCFG_ACIA6551_ADD(MOS6551A_TAG)
|
||||
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_DS75160A_ADD(DS75160A_TAG, ds75160a_intf)
|
||||
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_CBM_IEEE488_ADD(ieee488_intf, "c8050")
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL)
|
||||
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_TRIGGER_HANDLER(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w))
|
||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL)
|
||||
MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, VIC6567_CLOCK, cbm2_expansion_cards, NULL, NULL)
|
||||
MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, p500_user_intf, cbm2_user_port_cards, NULL, NULL)
|
||||
@ -2264,13 +2234,14 @@ static MACHINE_CONFIG_START( p500_pal, p500_state )
|
||||
MCFG_PLS100_ADD(PLA2_TAG)
|
||||
MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
|
||||
MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
|
||||
MCFG_ACIA6551_ADD(MOS6551A_TAG)
|
||||
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_DS75160A_ADD(DS75160A_TAG, ds75160a_intf)
|
||||
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_CBM_IEEE488_ADD(ieee488_intf, "c8050")
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL)
|
||||
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_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
|
||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL)
|
||||
MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, VIC6569_CLOCK, cbm2_expansion_cards, NULL, NULL)
|
||||
MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, p500_user_intf, cbm2_user_port_cards, NULL, NULL)
|
||||
@ -2321,12 +2292,12 @@ static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2_state )
|
||||
MCFG_PLS100_ADD(PLA1_TAG)
|
||||
MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf)
|
||||
MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf)
|
||||
MCFG_ACIA6551_ADD(MOS6551A_TAG)
|
||||
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_DS75160A_ADD(DS75160A_TAG, ds75160a_intf)
|
||||
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_CBM_IEEE488_ADD(ieee488_intf, "c8050")
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL)
|
||||
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(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL)
|
||||
MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL_18MHz/9, cbm2_expansion_cards, NULL, NULL)
|
||||
@ -2345,8 +2316,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( b128 )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( b128, cbm2_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
|
||||
static MACHINE_CONFIG_DERIVED( b128, cbm2lp_ntsc )
|
||||
MCFG_FRAGMENT_ADD(128k)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -2355,8 +2325,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( b256 )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( b256, cbm2_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
|
||||
static MACHINE_CONFIG_DERIVED( b256, cbm2lp_ntsc )
|
||||
MCFG_FRAGMENT_ADD(256k)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -2365,9 +2334,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( cbm2lp_pal )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( cbm2lp_pal, cbm2_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( cbm2lp_pal, cbm2lp_ntsc )
|
||||
MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
|
||||
|
||||
MCFG_DEVICE_REMOVE(MOS6526_TAG)
|
||||
@ -2379,8 +2346,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( cbm610 )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( cbm610, cbm2_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2lp_pal)
|
||||
static MACHINE_CONFIG_DERIVED( cbm610, cbm2lp_pal )
|
||||
MCFG_FRAGMENT_ADD(128k)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -2389,8 +2355,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( cbm620 )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( cbm620, cbm2_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2lp_pal)
|
||||
static MACHINE_CONFIG_DERIVED( cbm620, cbm2lp_pal )
|
||||
MCFG_FRAGMENT_ADD(256k)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -2399,10 +2364,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( cbm2hp_ntsc )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( cbm2hp_ntsc, cbm2hp_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
|
||||
|
||||
// devices
|
||||
static MACHINE_CONFIG_DERIVED_CLASS( cbm2hp_ntsc, cbm2lp_ntsc, cbm2hp_state )
|
||||
MCFG_DEVICE_REMOVE(MOS6525_2_TAG)
|
||||
MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
|
||||
MACHINE_CONFIG_END
|
||||
@ -2412,8 +2374,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( b128hp )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( b128hp, cbm2hp_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2hp_ntsc)
|
||||
static MACHINE_CONFIG_DERIVED( b128hp, cbm2hp_ntsc )
|
||||
MCFG_FRAGMENT_ADD(128k)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -2422,8 +2383,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( b256hp )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( b256hp, cbm2hp_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2hp_ntsc)
|
||||
static MACHINE_CONFIG_DERIVED( b256hp, cbm2hp_ntsc )
|
||||
MCFG_FRAGMENT_ADD(256k)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -2432,9 +2392,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( bx256hp )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( bx256hp, cbm2hp_state )
|
||||
MCFG_FRAGMENT_ADD(b256hp)
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( bx256hp, b256hp )
|
||||
MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2x_ntsc)
|
||||
|
||||
MCFG_CPU_ADD(EXT_I8088_TAG, I8088, XTAL_12MHz)
|
||||
@ -2451,9 +2409,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( cbm2hp_pal )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( cbm2hp_pal, cbm2hp_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2hp_ntsc)
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( cbm2hp_pal, cbm2hp_ntsc )
|
||||
MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
|
||||
|
||||
// devices
|
||||
@ -2469,8 +2425,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( cbm710 )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( cbm710, cbm2hp_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2hp_pal)
|
||||
static MACHINE_CONFIG_DERIVED( cbm710, cbm2hp_pal )
|
||||
MCFG_FRAGMENT_ADD(128k)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -2479,8 +2434,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( cbm720 )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( cbm720, cbm2hp_state )
|
||||
MCFG_FRAGMENT_ADD(cbm2hp_pal)
|
||||
static MACHINE_CONFIG_DERIVED( cbm720, cbm2hp_pal )
|
||||
MCFG_FRAGMENT_ADD(256k)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -2489,9 +2443,7 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( cbm730 )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_START( cbm730, cbm2hp_state )
|
||||
MCFG_FRAGMENT_ADD(cbm720)
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( cbm730, cbm720 )
|
||||
MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2x_pal)
|
||||
|
||||
MCFG_CPU_ADD(EXT_I8088_TAG, I8088, XTAL_12MHz)
|
||||
@ -2537,11 +2489,6 @@ ROM_START( p500 )
|
||||
ROM_LOAD( "906114-03.u88", 0x00, 0xf5, CRC(668c073e) SHA1(1115858bb2dc91ea9e2016ba2e23ec94239358b4) )
|
||||
ROM_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( p500p )
|
||||
//-------------------------------------------------
|
||||
|
||||
#define rom_p500p rom_p500
|
||||
|
||||
|
||||
@ -2590,6 +2537,9 @@ ROM_START( b128 )
|
||||
ROM_LOAD( "906114-04.u18", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
|
||||
ROM_END
|
||||
|
||||
#define rom_cbm610 rom_b128
|
||||
#define rom_cbm620 rom_b256
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( b256 )
|
||||
@ -2615,20 +2565,6 @@ ROM_START( b256 )
|
||||
ROM_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( cbm610 )
|
||||
//-------------------------------------------------
|
||||
|
||||
#define rom_cbm610 rom_b128
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( cbm620 )
|
||||
//-------------------------------------------------
|
||||
|
||||
#define rom_cbm620 rom_b256
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( cbm620_hu )
|
||||
//-------------------------------------------------
|
||||
@ -2673,6 +2609,8 @@ ROM_START( b128hp )
|
||||
ROM_LOAD( "906114-05.u75", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
|
||||
ROM_END
|
||||
|
||||
#define rom_cbm710 rom_b128hp
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( b256hp )
|
||||
@ -2697,6 +2635,8 @@ ROM_START( b256hp )
|
||||
ROM_LOAD( "906114-05.u75", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
|
||||
ROM_END
|
||||
|
||||
#define rom_cbm720 rom_b256hp
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( bx256hp )
|
||||
@ -2724,25 +2664,6 @@ ROM_START( bx256hp )
|
||||
ROM_LOAD( "906114-05.u75", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
|
||||
ROM_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( cbm710 )
|
||||
//-------------------------------------------------
|
||||
|
||||
#define rom_cbm710 rom_b128hp
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( cbm720 )
|
||||
//-------------------------------------------------
|
||||
|
||||
#define rom_cbm720 rom_b256hp
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( cbm730 )
|
||||
//-------------------------------------------------
|
||||
|
||||
#define rom_cbm730 rom_bx256hp
|
||||
|
||||
|
||||
|
@ -880,37 +880,6 @@ static IEEE488_INTERFACE( ieee488_intf )
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER(M6520_1_TAG, pia6821_device, ca1_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_DATASSETTE_PORT_INTERFACE( datassette2_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static PET_DATASSETTE_PORT_INTERFACE( datassette2_intf )
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER(M6522_TAG, via6522_device, write_cb1)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_EXPANSION_INTERFACE( exp_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static PET_EXPANSION_INTERFACE( exp_intf )
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER(pet_state, read),
|
||||
DEVCB_DRIVER_MEMBER(pet_state, write)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_USER_PORT_INTERFACE( user_intf )
|
||||
//-------------------------------------------------
|
||||
@ -1202,9 +1171,10 @@ static MACHINE_CONFIG_START( pet, pet_state )
|
||||
MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
|
||||
MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
|
||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, "c4040")
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c2n", NULL)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, datassette2_intf, cbm_datassette_devices, NULL, NULL)
|
||||
MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_8MHz/8, exp_intf, pet_expansion_cards, NULL, NULL)
|
||||
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_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_8MHz/8, pet_expansion_cards, NULL, NULL)
|
||||
MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
|
||||
MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, user_intf, pet_user_port_cards, NULL, NULL)
|
||||
MCFG_QUICKLOAD_ADD("quickload", cbm_pet, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||
|
||||
@ -1478,9 +1448,10 @@ static MACHINE_CONFIG_START( pet80, pet80_state )
|
||||
MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
|
||||
MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
|
||||
MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8050")
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c2n", NULL)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, datassette2_intf, cbm_datassette_devices, NULL, NULL)
|
||||
MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, exp_intf, pet_expansion_cards, NULL, NULL)
|
||||
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_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, NULL, NULL)
|
||||
MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
|
||||
MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, user_intf, pet_user_port_cards, NULL, NULL)
|
||||
MCFG_QUICKLOAD_ADD("quickload", cbm_pet, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||
|
||||
@ -1505,7 +1476,8 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED_CLASS( superpet, pet8032, superpet_state )
|
||||
MCFG_DEVICE_REMOVE(PET_EXPANSION_SLOT_TAG)
|
||||
MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, exp_intf, pet_expansion_cards, "superpet", NULL)
|
||||
MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, "superpet", NULL)
|
||||
MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
|
||||
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list2", "superpet_flop")
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -503,7 +503,7 @@ READ8_MEMBER( plus4_state::cpu_r )
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER( plus4_state::c16_cpu_r )
|
||||
READ8_MEMBER( c16_state::cpu_r )
|
||||
{
|
||||
/*
|
||||
|
||||
@ -649,46 +649,26 @@ static MOS7360_INTERFACE( ted_intf )
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// MOS6529_INTERFACE( spi_user_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MOS6529_INTERFACE( spi_user_intf )
|
||||
{
|
||||
DEVCB_DEVICE_MEMBER(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r),
|
||||
DEVCB_DEVICE_MEMBER(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// MOS6529_INTERFACE( spi_kb_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( plus4_state::spi_kb_r )
|
||||
{
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( plus4_state::spi_kb_w )
|
||||
{
|
||||
m_kb = data;
|
||||
}
|
||||
|
||||
static MOS6529_INTERFACE( spi_kb_intf )
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER(plus4_state, spi_kb_r),
|
||||
DEVCB_DRIVER_MEMBER(plus4_state, spi_kb_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
// MOS6551_INTERFACE( acia_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
WRITE_LINE_MEMBER( plus4_state::acia_irq_w )
|
||||
{
|
||||
DEVCB_NULL
|
||||
};
|
||||
m_acia_irq = state;
|
||||
|
||||
check_interrupts();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -821,7 +801,7 @@ static MACHINE_CONFIG_START( ntsc, plus4_state )
|
||||
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_TIME(attotime::from_hz(60))
|
||||
MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG)
|
||||
|
||||
// video and sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -830,10 +810,10 @@ static MACHINE_CONFIG_START( ntsc, plus4_state )
|
||||
|
||||
// devices
|
||||
MCFG_PLS100_ADD(PLA_TAG)
|
||||
MCFG_ACIA6551_ADD(MOS6551_TAG)
|
||||
MCFG_MOS6529_ADD(MOS6529_USER_TAG, spi_user_intf)
|
||||
MCFG_MOS6529_ADD(MOS6529_KB_TAG, spi_kb_intf)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, plus4_datassette_devices, "c1531", NULL)
|
||||
MCFG_MOS6551_ADD(MOS6551_TAG, XTAL_1_8432MHz, DEVWRITELINE(DEVICE_SELF, plus4_state, acia_irq_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_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL, NULL)
|
||||
MCFG_CBM_IEC_ADD(iec_intf, 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)
|
||||
@ -867,7 +847,7 @@ static MACHINE_CONFIG_START( pal, plus4_state )
|
||||
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_TIME(attotime::from_hz(60))
|
||||
MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG)
|
||||
|
||||
// video and sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -876,16 +856,16 @@ static MACHINE_CONFIG_START( pal, plus4_state )
|
||||
|
||||
// devices
|
||||
MCFG_PLS100_ADD(PLA_TAG)
|
||||
MCFG_ACIA6551_ADD(MOS6551_TAG)
|
||||
MCFG_MOS6529_ADD(MOS6529_USER_TAG, spi_user_intf)
|
||||
MCFG_MOS6529_ADD(MOS6529_KB_TAG, spi_kb_intf)
|
||||
MCFG_QUICKLOAD_ADD("quickload", cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, plus4_datassette_devices, "c1531", NULL)
|
||||
MCFG_MOS6551_ADD(MOS6551_TAG, XTAL_1_8432MHz, DEVWRITELINE(DEVICE_SELF, plus4_state, acia_irq_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_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL, NULL)
|
||||
MCFG_CBM_IEC_ADD(iec_intf, 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_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_17_73447MHz/20, expansion_intf, plus4_expansion_cards, "c1551", NULL)
|
||||
MCFG_PLUS4_USER_PORT_ADD(PLUS4_USER_PORT_TAG, plus4_user_port_cards, NULL, NULL)
|
||||
MCFG_QUICKLOAD_ADD("quickload", cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
|
||||
|
||||
// internal ram
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
@ -905,9 +885,9 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( c16n )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( c16n, ntsc )
|
||||
static MACHINE_CONFIG_DERIVED_CLASS( c16n, ntsc, c16_state )
|
||||
MCFG_CPU_MODIFY(MOS7501_TAG)
|
||||
MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, c16_cpu_r), WRITE8(plus4_state, cpu_w))
|
||||
MCFG_M7501_PORT_CALLBACKS(READ8(c16_state, cpu_r), WRITE8(plus4_state, cpu_w))
|
||||
MCFG_M7501_PORT_PULLS(0x00, 0xc0)
|
||||
|
||||
MCFG_DEVICE_REMOVE(MOS6551_TAG)
|
||||
@ -927,9 +907,9 @@ MACHINE_CONFIG_END
|
||||
// MACHINE_CONFIG( c16p )
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( c16p, pal )
|
||||
static MACHINE_CONFIG_DERIVED_CLASS( c16p, pal, c16_state )
|
||||
MCFG_CPU_MODIFY(MOS7501_TAG)
|
||||
MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, c16_cpu_r), WRITE8(plus4_state, cpu_w))
|
||||
MCFG_M7501_PORT_CALLBACKS(READ8(c16_state, cpu_r), WRITE8(plus4_state, cpu_w))
|
||||
MCFG_M7501_PORT_PULLS(0x00, 0xc0)
|
||||
|
||||
MCFG_DEVICE_REMOVE(MOS6551_TAG)
|
||||
|
@ -555,15 +555,6 @@ WRITE8_MEMBER( vic10_state::cpu_w )
|
||||
m_cassette->motor_w(BIT(data, 5));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER(MOS6526_TAG, mos6526_device, flag_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// C64_EXPANSION_INTERFACE( expansion_intf )
|
||||
@ -652,13 +643,12 @@ static MACHINE_CONFIG_START( vic10, vic10_state )
|
||||
MCFG_SOUND_ADD(MOS6581_TAG, SID6581, VIC6566_CLOCK)
|
||||
MCFG_SOUND_CONFIG(sid_intf)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||
MCFG_SOUND_ADD("dac", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
// devices
|
||||
MCFG_MOS6526_ADD(MOS6526_TAG, VIC6566_CLOCK, 60, cia_intf)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL)
|
||||
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_TRIGGER_HANDLER(DEVWRITELINE(MOS6566_TAG, mos6566_device, lp_w))
|
||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy", NULL)
|
||||
MCFG_VIC10_EXPANSION_SLOT_ADD(VIC10_EXPANSION_SLOT_TAG, VIC6566_CLOCK, expansion_intf, vic10_expansion_cards, NULL, NULL)
|
||||
|
||||
|
@ -701,16 +701,6 @@ static const via6522_interface via1_intf =
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER(M6522_1_TAG, via6522_device, write_ca1),
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// CBM_IEC_INTERFACE( cbm_iec_intf )
|
||||
//-------------------------------------------------
|
||||
@ -822,9 +812,8 @@ static MACHINE_CONFIG_START( vic20, vic20_state )
|
||||
// devices
|
||||
MCFG_VIA6522_ADD(M6522_0_TAG, 0, via0_intf)
|
||||
MCFG_VIA6522_ADD(M6522_1_TAG, 0, via1_intf)
|
||||
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, "c1530", NULL)
|
||||
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_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy", 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)
|
||||
|
||||
@ -853,11 +842,11 @@ static MACHINE_CONFIG_DERIVED( ntsc, vic20 )
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_MOS6560_ADD(M6560_TAG, SCREEN_TAG, MOS6560_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MCFG_SOUND_ADD("dac", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
// devices
|
||||
MCFG_VIC20_EXPANSION_SLOT_ADD(VIC20_EXPANSION_SLOT_TAG, MOS6560_CLOCK, expansion_intf, vic20_expansion_cards, NULL, NULL)
|
||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy", NULL)
|
||||
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(M6560_TAG, mos6560_device, lp_w))
|
||||
|
||||
// software lists
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC")
|
||||
@ -880,11 +869,11 @@ static MACHINE_CONFIG_DERIVED( pal, vic20 )
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_MOS6561_ADD(M6560_TAG, SCREEN_TAG, MOS6561_CLOCK, vic_intf, vic_videoram_map, vic_colorram_map)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MCFG_SOUND_ADD("dac", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
// devices
|
||||
MCFG_VIC20_EXPANSION_SLOT_ADD(VIC20_EXPANSION_SLOT_TAG, MOS6561_CLOCK, expansion_intf, vic20_expansion_cards, NULL, NULL)
|
||||
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy", NULL)
|
||||
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(M6561_TAG, mos6561_device, lp_w))
|
||||
|
||||
// software lists
|
||||
MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL")
|
||||
|
@ -181,8 +181,6 @@ public:
|
||||
DECLARE_READ8_MEMBER( cpu_r );
|
||||
DECLARE_WRITE8_MEMBER( cpu_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( tape_read_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( iec_srq_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( iec_data_w );
|
||||
|
||||
|
@ -71,9 +71,7 @@ public:
|
||||
m_cia2_irq(CLEAR_LINE),
|
||||
m_vic_irq(CLEAR_LINE),
|
||||
m_exp_irq(CLEAR_LINE),
|
||||
m_exp_nmi(CLEAR_LINE),
|
||||
m_cass_rd(1),
|
||||
m_iec_srq(1)
|
||||
m_exp_nmi(CLEAR_LINE)
|
||||
{ }
|
||||
|
||||
required_device<m6510_device> m_maincpu;
|
||||
@ -134,10 +132,6 @@ public:
|
||||
DECLARE_READ8_MEMBER( cpu_r );
|
||||
DECLARE_WRITE8_MEMBER( cpu_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( tape_read_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( iec_srq_w );
|
||||
|
||||
DECLARE_READ8_MEMBER( exp_dma_r );
|
||||
DECLARE_WRITE8_MEMBER( exp_dma_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( exp_irq_w );
|
||||
@ -161,8 +155,6 @@ public:
|
||||
int m_exp_irq;
|
||||
int m_exp_nmi;
|
||||
int m_exp_dma;
|
||||
int m_cass_rd;
|
||||
int m_iec_srq;
|
||||
};
|
||||
|
||||
|
||||
|
@ -9,7 +9,6 @@
|
||||
#include "formats/cbm_snqk.h"
|
||||
#include "includes/cbm.h"
|
||||
#include "machine/6525tpi.h"
|
||||
#include "machine/6551acia.h"
|
||||
#include "machine/cbm2exp.h"
|
||||
#include "machine/cbm2user.h"
|
||||
#include "machine/cbmipt.h"
|
||||
@ -17,6 +16,7 @@
|
||||
#include "machine/ds75161a.h"
|
||||
#include "machine/ieee488.h"
|
||||
#include "machine/mos6526.h"
|
||||
#include "machine/mos6551.h"
|
||||
#include "machine/petcass.h"
|
||||
#include "machine/pic8259.h"
|
||||
#include "machine/pla.h"
|
||||
@ -104,8 +104,7 @@ public:
|
||||
m_graphics(1),
|
||||
m_todclk(0),
|
||||
m_tpi1_irq(CLEAR_LINE),
|
||||
m_cass_rd(1),
|
||||
m_user_flag(0),
|
||||
m_acia_irq(CLEAR_LINE),
|
||||
m_user_irq(CLEAR_LINE),
|
||||
m_tpi2_pa(0),
|
||||
m_tpi2_pb(0)
|
||||
@ -117,7 +116,7 @@ public:
|
||||
required_device<sid6581_device> m_sid;
|
||||
required_device<tpi6525_device> m_tpi1;
|
||||
required_device<tpi6525_device> m_tpi2;
|
||||
required_device<acia6551_device> m_acia;
|
||||
required_device<mos6551_device> m_acia;
|
||||
required_device<mos6526_device> m_cia;
|
||||
required_device<ds75160a_device> m_ieee1;
|
||||
required_device<ds75161a_device> m_ieee2;
|
||||
@ -225,8 +224,7 @@ public:
|
||||
// interrupt state
|
||||
int m_todclk;
|
||||
int m_tpi1_irq;
|
||||
int m_cass_rd;
|
||||
int m_user_flag;
|
||||
int m_acia_irq;
|
||||
int m_user_irq;
|
||||
|
||||
// keyboard state;
|
||||
|
@ -69,7 +69,7 @@ public:
|
||||
required_device<m7501_device> m_maincpu;
|
||||
required_device<pls100_device> m_pla;
|
||||
required_device<mos7360_device> m_ted;
|
||||
optional_device<acia6551_device> m_acia;
|
||||
optional_device<mos6551_device> m_acia;
|
||||
optional_device<mos6529_device> m_spi_user;
|
||||
required_device<mos6529_device> m_spi_kb;
|
||||
optional_device<t6721_device> m_t6721;
|
||||
@ -106,7 +106,6 @@ public:
|
||||
DECLARE_READ8_MEMBER( ted_videoram_r );
|
||||
|
||||
DECLARE_READ8_MEMBER( cpu_r );
|
||||
DECLARE_READ8_MEMBER( c16_cpu_r );
|
||||
DECLARE_WRITE8_MEMBER( cpu_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( ted_irq_w );
|
||||
@ -114,9 +113,10 @@ public:
|
||||
DECLARE_READ8_MEMBER( ted_rom_r );
|
||||
DECLARE_READ8_MEMBER( ted_k_r );
|
||||
|
||||
DECLARE_READ8_MEMBER( spi_kb_r );
|
||||
DECLARE_WRITE8_MEMBER( spi_kb_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
|
||||
|
||||
DECLARE_READ8_MEMBER( exp_dma_r );
|
||||
DECLARE_WRITE8_MEMBER( exp_dma_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( exp_irq_w );
|
||||
@ -153,5 +153,16 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class c16_state : public plus4_state
|
||||
{
|
||||
public:
|
||||
c16_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: plus4_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
DECLARE_READ8_MEMBER( cpu_r );
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -53,8 +53,9 @@ device_pet_datassette_port_interface::~device_pet_datassette_port_interface()
|
||||
//-------------------------------------------------
|
||||
|
||||
pet_datassette_port_device::pet_datassette_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, PET_DATASSETTE_PORT, "Datassette Port", tag, owner, clock),
|
||||
device_slot_interface(mconfig, *this)
|
||||
device_t(mconfig, PET_DATASSETTE_PORT, "Datassette Port", tag, owner, clock),
|
||||
device_slot_interface(mconfig, *this),
|
||||
m_read_handler(*this)
|
||||
{
|
||||
}
|
||||
|
||||
@ -68,29 +69,6 @@ pet_datassette_port_device::~pet_datassette_port_device()
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void pet_datassette_port_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const pet_datassette_port_interface *intf = reinterpret_cast<const pet_datassette_port_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
{
|
||||
*static_cast<pet_datassette_port_interface *>(this) = *intf;
|
||||
}
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_out_read_cb, 0, sizeof(m_out_read_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
@ -100,7 +78,7 @@ void pet_datassette_port_device::device_start()
|
||||
m_cart = dynamic_cast<device_pet_datassette_port_interface *>(get_card_device());
|
||||
|
||||
// resolve callbacks
|
||||
m_out_read_func.resolve(m_out_read_cb, *this);
|
||||
m_read_handler.resolve_safe();
|
||||
}
|
||||
|
||||
|
||||
@ -109,4 +87,4 @@ WRITE_LINE_MEMBER( pet_datassette_port_device::write ) { if (m_cart != NULL) m_c
|
||||
READ_LINE_MEMBER( pet_datassette_port_device::sense_r ) { int state = 1; if (m_cart != NULL) state = m_cart->datassette_sense(); return state; }
|
||||
WRITE_LINE_MEMBER( pet_datassette_port_device::motor_w ) { if (m_cart != NULL) m_cart->datassette_motor(state); }
|
||||
|
||||
WRITE_LINE_MEMBER( pet_datassette_port_device::read_w ) { m_out_read_func(state); }
|
||||
WRITE_LINE_MEMBER( pet_datassette_port_device::read_w ) { m_read_handler(state); }
|
||||
|
@ -38,14 +38,10 @@
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define PET_DATASSETTE_PORT_INTERFACE(_name) \
|
||||
const pet_datassette_port_interface (_name) =
|
||||
|
||||
|
||||
#define MCFG_PET_DATASSETTE_PORT_ADD(_tag, _config, _slot_intf, _def_slot, _def_inp) \
|
||||
#define MCFG_PET_DATASSETTE_PORT_ADD(_tag, _slot_intf, _def_slot, _def_inp, _devcb) \
|
||||
MCFG_DEVICE_ADD(_tag, PET_DATASSETTE_PORT, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false) \
|
||||
devcb = &pet_datassette_port_device::set_read_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
|
||||
|
||||
@ -53,20 +49,11 @@
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> pet_datassette_port_interface
|
||||
|
||||
struct pet_datassette_port_interface
|
||||
{
|
||||
devcb_write_line m_out_read_cb;
|
||||
};
|
||||
|
||||
|
||||
// ======================> pet_datassette_port_device
|
||||
|
||||
class device_pet_datassette_port_interface;
|
||||
|
||||
class pet_datassette_port_device : public device_t,
|
||||
public pet_datassette_port_interface,
|
||||
public device_slot_interface
|
||||
{
|
||||
public:
|
||||
@ -74,6 +61,9 @@ public:
|
||||
pet_datassette_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
virtual ~pet_datassette_port_device();
|
||||
|
||||
// static configuration helpers
|
||||
template<class _Object> static devcb2_base &set_read_handler(device_t &device, _Object object) { return downcast<pet_datassette_port_device &>(device).m_read_handler.set_callback(object); }
|
||||
|
||||
// computer interface
|
||||
DECLARE_READ_LINE_MEMBER( read );
|
||||
DECLARE_WRITE_LINE_MEMBER( write );
|
||||
@ -85,10 +75,9 @@ public:
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
|
||||
devcb_resolved_write_line m_out_read_func;
|
||||
devcb2_write_line m_read_handler;
|
||||
|
||||
device_pet_datassette_port_interface *m_cart;
|
||||
};
|
||||
|
@ -37,7 +37,9 @@ const device_type PET_EXPANSION_SLOT = &device_creator<pet_expansion_slot_device
|
||||
|
||||
pet_expansion_slot_device::pet_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, PET_EXPANSION_SLOT, "PET memory expansion port", tag, owner, clock),
|
||||
device_slot_interface(mconfig, *this)
|
||||
device_slot_interface(mconfig, *this),
|
||||
m_read_dma(*this),
|
||||
m_write_dma(*this)
|
||||
{
|
||||
}
|
||||
|
||||
@ -71,30 +73,6 @@ device_pet_expansion_card_interface::~device_pet_expansion_card_interface()
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void pet_expansion_slot_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const pet_expansion_slot_interface *intf = reinterpret_cast<const pet_expansion_slot_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
{
|
||||
*static_cast<pet_expansion_slot_interface *>(this) = *intf;
|
||||
}
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_in_dma_bd_cb, 0, sizeof(m_in_dma_bd_cb));
|
||||
memset(&m_out_dma_bd_cb, 0, sizeof(m_out_dma_bd_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
@ -104,8 +82,8 @@ void pet_expansion_slot_device::device_start()
|
||||
m_card = dynamic_cast<device_pet_expansion_card_interface *>(get_card_device());
|
||||
|
||||
// resolve callbacks
|
||||
m_in_dma_bd_func.resolve(m_in_dma_bd_cb, *this);
|
||||
m_out_dma_bd_func.resolve(m_out_dma_bd_cb, *this);
|
||||
m_read_dma.resolve_safe(0);
|
||||
m_write_dma.resolve_safe();
|
||||
}
|
||||
|
||||
|
||||
@ -186,7 +164,7 @@ WRITE_LINE_MEMBER( pet_expansion_slot_device::irq_w )
|
||||
|
||||
UINT8 pet_expansion_slot_device::dma_bd_r(offs_t offset)
|
||||
{
|
||||
return m_in_dma_bd_func(offset);
|
||||
return m_read_dma(offset);
|
||||
}
|
||||
|
||||
|
||||
@ -196,7 +174,7 @@ UINT8 pet_expansion_slot_device::dma_bd_r(offs_t offset)
|
||||
|
||||
void pet_expansion_slot_device::dma_bd_w(offs_t offset, UINT8 data)
|
||||
{
|
||||
m_out_dma_bd_func(offset, data);
|
||||
m_write_dma(offset, data);
|
||||
}
|
||||
|
||||
|
||||
|
@ -30,43 +30,37 @@
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define PET_EXPANSION_INTERFACE(_name) \
|
||||
const pet_expansion_slot_interface (_name) =
|
||||
|
||||
|
||||
#define MCFG_PET_EXPANSION_SLOT_ADD(_tag, _clock, _config, _slot_intf, _def_slot, _def_inp) \
|
||||
#define MCFG_PET_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot, _def_inp) \
|
||||
MCFG_DEVICE_ADD(_tag, PET_EXPANSION_SLOT, _clock) \
|
||||
MCFG_DEVICE_CONFIG(_config) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
|
||||
|
||||
|
||||
#define MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(_read, _write) \
|
||||
downcast<pet_expansion_slot_device *>(device)->set_callbacks(DEVCB2_##_read, DEVCB2_##_write);
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> pet_expansion_slot_interface
|
||||
|
||||
struct pet_expansion_slot_interface
|
||||
{
|
||||
devcb_read8 m_in_dma_bd_cb;
|
||||
devcb_write8 m_out_dma_bd_cb;
|
||||
};
|
||||
|
||||
|
||||
// ======================> pet_expansion_slot_device
|
||||
|
||||
class device_pet_expansion_card_interface;
|
||||
|
||||
class pet_expansion_slot_device : public device_t,
|
||||
public device_slot_interface,
|
||||
public pet_expansion_slot_interface
|
||||
public device_slot_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
pet_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
virtual ~pet_expansion_slot_device();
|
||||
|
||||
template<class _read, class _write> void set_callbacks(_read rd, _write wr) {
|
||||
m_read_dma.set_callback(rd);
|
||||
m_write_dma.set_callback(wr);
|
||||
}
|
||||
|
||||
// computer interface
|
||||
int norom_r(address_space &space, offs_t offset, int sel);
|
||||
UINT8 read(address_space &space, offs_t offset, UINT8 data, int sel);
|
||||
@ -81,14 +75,13 @@ public:
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
device_pet_expansion_card_interface *m_card;
|
||||
|
||||
devcb_resolved_read8 m_in_dma_bd_func;
|
||||
devcb_resolved_write8 m_out_dma_bd_func;
|
||||
devcb2_read8 m_read_dma;
|
||||
devcb2_write8 m_write_dma;
|
||||
};
|
||||
|
||||
|
||||
|
@ -70,7 +70,7 @@ static MACHINE_CONFIG_FRAGMENT( superpet )
|
||||
MCFG_CPU_ADD(M6809_TAG, M6809, XTAL_16MHz/16)
|
||||
MCFG_CPU_PROGRAM_MAP(superpet_mem)
|
||||
|
||||
MCFG_ACIA6551_ADD(M6551_TAG) // XTAL_1_8432MHz
|
||||
MCFG_MOS6551_ADD(M6551_TAG, XTAL_1_8432MHz, DEVWRITELINE(DEVICE_SELF, superpet_device, acia_irq_w))
|
||||
MCFG_MOS6702_ADD(MOS6702_TAG, XTAL_16MHz/16)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -384,3 +384,15 @@ WRITE8_MEMBER( superpet_device::write )
|
||||
{
|
||||
m_slot->dma_bd_w(offset, data);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// acia_irq_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( superpet_device::acia_irq_w )
|
||||
{
|
||||
m_acia_irq = state;
|
||||
|
||||
//m_maincpu->set_input_line(M6809_IRQ_LINE, m_pet_irq || m_acia_irq);
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "machine/6551acia.h"
|
||||
#include "machine/mos6551.h"
|
||||
#include "machine/mos6702.h"
|
||||
#include "machine/petexp.h"
|
||||
|
||||
@ -41,6 +41,7 @@ public:
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
@ -77,7 +78,7 @@ protected:
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<acia6551_device> m_acia;
|
||||
required_device<mos6551_device> m_acia;
|
||||
required_device<mos6702_device> m_dongle;
|
||||
required_memory_region m_rom;
|
||||
optional_shared_ptr<UINT8> m_ram;
|
||||
|
@ -21,6 +21,7 @@ const device_type VCS_LIGHTPEN = &device_creator<vcs_lightpen_device>;
|
||||
INPUT_CHANGED_MEMBER( vcs_lightpen_device::trigger )
|
||||
{
|
||||
// TODO trigger timer at correct screen position
|
||||
m_port->trigger_w(newval);
|
||||
}
|
||||
|
||||
|
||||
@ -30,10 +31,10 @@ static INPUT_PORTS_START( vcs_lightpen )
|
||||
PORT_BIT( 0xdf, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("LIGHTX")
|
||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X) PORT_NAME("Lightpen X Axis") PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_PLAYER(1)
|
||||
PORT_BIT( 0xff, 0x00, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
|
||||
|
||||
PORT_START("LIGHTY")
|
||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y) PORT_NAME("Lightpen Y Axis") PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_PLAYER(1)
|
||||
PORT_BIT( 0xff, 0x00, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
@ -54,7 +54,8 @@ device_vcs_control_port_interface::~device_vcs_control_port_interface()
|
||||
|
||||
vcs_control_port_device::vcs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, VCS_CONTROL_PORT, "Atari VCS control port", tag, owner, clock),
|
||||
device_slot_interface(mconfig, *this)
|
||||
device_slot_interface(mconfig, *this),
|
||||
m_trigger_handler(*this)
|
||||
{
|
||||
}
|
||||
|
||||
@ -75,6 +76,8 @@ vcs_control_port_device::~vcs_control_port_device()
|
||||
void vcs_control_port_device::device_start()
|
||||
{
|
||||
m_device = dynamic_cast<device_vcs_control_port_interface *>(get_card_device());
|
||||
|
||||
m_trigger_handler.resolve_safe();
|
||||
}
|
||||
|
||||
|
||||
@ -90,6 +93,11 @@ bool vcs_control_port_device::exists() { return m_device != NULL; }
|
||||
bool vcs_control_port_device::has_pot_x() { return exists() && m_device->has_pot_x(); }
|
||||
bool vcs_control_port_device::has_pot_y() { return exists() && m_device->has_pot_y(); }
|
||||
|
||||
void vcs_control_port_device::trigger_w(int state)
|
||||
{
|
||||
m_trigger_handler(state);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( vcs_control_port_devices )
|
||||
//-------------------------------------------------
|
||||
|
@ -28,6 +28,10 @@
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
|
||||
|
||||
|
||||
#define MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(_devcb) \
|
||||
devcb = &vcs_control_port_device::set_trigger_handler(*device, DEVCB2_##_devcb);
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
@ -45,6 +49,9 @@ public:
|
||||
vcs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
virtual ~vcs_control_port_device();
|
||||
|
||||
// static configuration helpers
|
||||
template<class _Object> static devcb2_base &set_trigger_handler(device_t &device, _Object object) { return downcast<vcs_control_port_device &>(device).m_trigger_handler.set_callback(object); }
|
||||
|
||||
// computer interface
|
||||
|
||||
// Data returned by the joy_r methods:
|
||||
@ -72,11 +79,16 @@ public:
|
||||
bool has_pot_x();
|
||||
bool has_pot_y();
|
||||
|
||||
void trigger_w(int state);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
|
||||
device_vcs_control_port_interface *m_device;
|
||||
|
||||
private:
|
||||
devcb2_write_line m_trigger_handler;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user