// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************
Oxford Computer Systems Interpod IEC to IEEE interface emulation
*********************************************************************/
/*
PCB Layout
----------
INTERPOD 1000 ISS.3
|---------------------------------------|
| |
| ACIA ROM CPU |
| |
|CN1 75188 LS73 LS04 RIOT |
| 75189 |
| 7417 VIA |
|CN2 |
| 3446 3446 3446 |
| CN3 CN4 LD1 |
|---------------------------| CN5 |-|
|---------|
Notes:
All IC's shown.
ROM - 2716 "1.4"
CPU - Rockwell R6502P
RIOT - Rockwell R6532AP
VIA - Rockwell R6522P
ACIA - Thomson-CSF EF6850P
3446 - Motorola MC3446AP
CN1 - DB25 serial connector
CN2 - power connector
CN3 - DIN5 IEC connector
CN4 - DIN5 IEC connector
CN5 - 2x12 PCB edge IEEE-488 connector
LD1 - LED
*/
/*
TODO:
- everything
0 OPEN 2,4,31 : INPUT #2, A$ : CLOSE #2
1 PRINT A$
http://mikenaberezny.com/hardware/c64-128/interpod-ieee-488-interface/
*/
#include "emu.h"
#include "interpod.h"
//**************************************************************************
// MACROS / CONSTANTS
//**************************************************************************
#define R6502_TAG "u1"
#define R6532_TAG "u3"
#define R6522_TAG "u4"
#define MC6850_TAG "u5"
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE(INTERPOD, interpod_device, "interpod", "Interpod")
//**************************************************************************
// DEVICE CONFIGURATION
//**************************************************************************
//-------------------------------------------------
// ROM( interpod )
//-------------------------------------------------
ROM_START( interpod )
ROM_REGION( 0x800, R6502_TAG, 0 )
ROM_LOAD( "1.4.u2", 0x000, 0x800, CRC(c5b71982) SHA1(614d677b7c6273f6b84fa61affaf91cfdaeed6a6) )
ROM_LOAD( "1.6.u2", 0x000, 0x800, CRC(67bb0436) SHA1(7659c45b73f577233f7657c4da9141dcfe8b6d97) )
ROM_END
//-------------------------------------------------
// rom_region - device-specific ROM region
//-------------------------------------------------
const tiny_rom_entry *interpod_device::device_rom_region() const
{
return ROM_NAME( interpod );
}
//-------------------------------------------------
// ADDRESS_MAP( interpod_mem )
//-------------------------------------------------
void interpod_device::interpod_mem(address_map &map)
{
map(0x0000, 0x007f).mirror(0x3b80).m(R6532_TAG, FUNC(mos6532_new_device::ram_map));
map(0x0400, 0x041f).mirror(0x3be0).m(R6532_TAG, FUNC(mos6532_new_device::io_map));
map(0x2000, 0x2001).mirror(0x9ffe).rw(MC6850_TAG, FUNC(acia6850_device::read), FUNC(acia6850_device::write));
map(0x4000, 0x47ff).mirror(0xb800).rom().region(R6502_TAG, 0);
map(0x8000, 0x800f).mirror(0x5ff0).rw(R6522_TAG, FUNC(via6522_device::read), FUNC(via6522_device::write));
}
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
MACHINE_CONFIG_START(interpod_device::device_add_mconfig)
MCFG_DEVICE_ADD(R6502_TAG, M6502, 1000000)
MCFG_DEVICE_PROGRAM_MAP(interpod_mem)
MCFG_DEVICE_ADD(R6522_TAG, VIA6522, 1000000)
MCFG_DEVICE_ADD(R6532_TAG, MOS6532_NEW, 1000000)
MCFG_DEVICE_ADD(MC6850_TAG, ACIA6850, 0)
MCFG_CBM_IEEE488_ADD(nullptr)
MACHINE_CONFIG_END
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// interpod_device - constructor
//-------------------------------------------------
interpod_device::interpod_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, INTERPOD, tag, owner, clock),
device_cbm_iec_interface(mconfig, *this),
m_maincpu(*this, R6502_TAG),
m_via(*this, R6522_TAG),
m_riot(*this, R6532_TAG),
m_acia(*this, MC6850_TAG),
m_ieee(*this, IEEE488_TAG)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void interpod_device::device_start()
{
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void interpod_device::device_reset()
{
}