mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
agat7: add serial/parallel interface card, hardcoded into Agat-Author configuration for now.
This commit is contained in:
parent
3456ca9a63
commit
8fef96dbd9
@ -1830,6 +1830,8 @@ if (BUSES["A2BUS"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/a2bus/pc_xporter.h",
|
||||
MAME_DIR .. "src/devices/bus/a2bus/agat7langcard.cpp",
|
||||
MAME_DIR .. "src/devices/bus/a2bus/agat7langcard.h",
|
||||
MAME_DIR .. "src/devices/bus/a2bus/agat7ports.cpp",
|
||||
MAME_DIR .. "src/devices/bus/a2bus/agat7ports.h",
|
||||
MAME_DIR .. "src/devices/bus/a2bus/agat7ram.cpp",
|
||||
MAME_DIR .. "src/devices/bus/a2bus/agat7ram.h",
|
||||
MAME_DIR .. "src/devices/bus/a2bus/agat840k_hle.cpp",
|
||||
|
194
src/devices/bus/a2bus/agat7ports.cpp
Normal file
194
src/devices/bus/a2bus/agat7ports.cpp
Normal file
@ -0,0 +1,194 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/*********************************************************************
|
||||
|
||||
agat7_ports.c
|
||||
|
||||
Implementation of the Agat-7 ports card (part number 3.089.106),
|
||||
configured as a printer port for Agat-Author text editor.
|
||||
|
||||
To do: other configurations, if any.
|
||||
|
||||
References:
|
||||
http://agatcomp.ru/Reading/ebooks-IKP-KPON/KPON.9/V1/AGAWT/SPT:prilojenie2.shtml
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
#include "agat7ports.h"
|
||||
|
||||
//#define VERBOSE 1
|
||||
#include "logmacro.h"
|
||||
|
||||
/***************************************************************************
|
||||
PARAMETERS
|
||||
***************************************************************************/
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(A2BUS_AGAT7_PORTS, a2bus_agat7_ports_device, "a7ports", "Agat-7 Ports Card")
|
||||
|
||||
static INPUT_PORTS_START( agat_author )
|
||||
PORT_START("PRINTER_CFG")
|
||||
PORT_BIT( 0xd9, 0x00, IPT_UNUSED )
|
||||
PORT_DIPNAME( 0x02, 0x00, "Printer command set")
|
||||
PORT_DIPSETTING( 0x00, "CPA-80/FX-85/Gemini" )
|
||||
PORT_DIPSETTING( 0x02, "Mera D100" )
|
||||
PORT_DIPNAME( 0x24, 0x00, "Printer character set")
|
||||
PORT_DIPSETTING( 0x00, "KOI-8" )
|
||||
PORT_DIPSETTING( 0x04, "GOST" )
|
||||
PORT_DIPSETTING( 0x20, "CPA-80" )
|
||||
PORT_DIPSETTING( 0x24, "FX-85" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
/***************************************************************************
|
||||
FUNCTION PROTOTYPES
|
||||
***************************************************************************/
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
//-------------------------------------------------
|
||||
|
||||
MACHINE_CONFIG_START(a2bus_agat7_ports_device::device_add_mconfig)
|
||||
MCFG_DEVICE_ADD("d9", I8255, 0)
|
||||
MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(a2bus_agat7_ports_device, write_portb))
|
||||
MCFG_I8255_IN_PORTC_CB(READ8(a2bus_agat7_ports_device, read_portc))
|
||||
|
||||
MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
|
||||
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(a2bus_agat7_ports_device, write_centronics_busy))
|
||||
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
|
||||
|
||||
MCFG_DEVICE_ADD("d10", I8251, 0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_ports - device-specific input ports
|
||||
//-------------------------------------------------
|
||||
|
||||
ioport_constructor a2bus_agat7_ports_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME(agat_author);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
a2bus_agat7_ports_device::a2bus_agat7_ports_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_a2bus_card_interface(mconfig, *this)
|
||||
, m_d9(*this, "d9")
|
||||
, m_d10(*this, "d10")
|
||||
, m_centronics(*this, "centronics")
|
||||
{
|
||||
}
|
||||
|
||||
a2bus_agat7_ports_device::a2bus_agat7_ports_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
a2bus_agat7_ports_device(mconfig, A2BUS_AGAT7_PORTS, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void a2bus_agat7_ports_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_centronics_busy));
|
||||
}
|
||||
|
||||
void a2bus_agat7_ports_device::device_reset()
|
||||
{
|
||||
m_centronics_busy = false;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
read_c0nx - called for reads from this card's c0nx space
|
||||
-------------------------------------------------*/
|
||||
|
||||
uint8_t a2bus_agat7_ports_device::read_c0nx(uint8_t offset)
|
||||
{
|
||||
u8 data = 0xff;
|
||||
|
||||
switch (offset & 8)
|
||||
{
|
||||
case 0:
|
||||
data = m_d9->read(machine().dummy_space(), offset & 3);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
if (offset & 1)
|
||||
{
|
||||
data = m_d10->status_r(machine().dummy_space(), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
data = m_d10->data_r(machine().dummy_space(), 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
write_c0nx - called for writes to this card's c0nx space
|
||||
-------------------------------------------------*/
|
||||
|
||||
void a2bus_agat7_ports_device::write_c0nx(uint8_t offset, uint8_t data)
|
||||
{
|
||||
switch (offset & 8)
|
||||
{
|
||||
case 0:
|
||||
m_d9->write(machine().dummy_space(), offset & 3, data);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
if (offset & 1)
|
||||
{
|
||||
m_d10->control_w(machine().dummy_space(), 0, data);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_d10->data_w(machine().dummy_space(), 0, data);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 0 ODD
|
||||
* 1 EVEN
|
||||
* 4 INIT
|
||||
* 5 STROBE
|
||||
* 6 /INIT
|
||||
* 7 /STROBE
|
||||
*/
|
||||
WRITE8_MEMBER(a2bus_agat7_ports_device::write_portb)
|
||||
{
|
||||
m_centronics->write_strobe(BIT(data, 5));
|
||||
m_centronics->write_init(BIT(data, 4));
|
||||
}
|
||||
|
||||
/*
|
||||
* 1 dip CNTRLESC (0: CPA-80, FX-85, Gemini. 1: D100)
|
||||
* 2 dip ALF0
|
||||
* 3 dip A/BR (0: level, BUSY/READY. 1: edge, ACK)
|
||||
* 4 dip INVD (1: data are sent inverted)
|
||||
* 5 dip ALF1 (00: KOI-8, 01: GOST, 10: CPA-80, 11: FX-85)
|
||||
* 6 dip ABRLEV (0: BUSY, /ACK. 1: READY, ACK)
|
||||
* 7 ready signal from device
|
||||
*/
|
||||
READ8_MEMBER(a2bus_agat7_ports_device::read_portc)
|
||||
{
|
||||
return (m_centronics_busy << 7) | ioport("PRINTER_CFG")->read();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(a2bus_agat7_ports_device::write_centronics_busy)
|
||||
{
|
||||
m_centronics_busy = state;
|
||||
}
|
64
src/devices/bus/a2bus/agat7ports.h
Normal file
64
src/devices/bus/a2bus/agat7ports.h
Normal file
@ -0,0 +1,64 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/*********************************************************************
|
||||
|
||||
agat7_ports.h
|
||||
|
||||
Implementation of the Agat-7 ports card (decimal 3.089.106)
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_A2BUS_AGAT7_PORTS_H
|
||||
#define MAME_BUS_A2BUS_AGAT7_PORTS_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "emu.h"
|
||||
#include "a2bus.h"
|
||||
|
||||
#include "bus/centronics/ctronics.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "machine/i8251.h"
|
||||
#include "machine/i8255.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class a2bus_agat7_ports_device:
|
||||
public device_t,
|
||||
public device_a2bus_card_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
a2bus_agat7_ports_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
a2bus_agat7_ports_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
// overrides of standard a2bus slot functions
|
||||
virtual uint8_t read_c0nx(uint8_t offset) override;
|
||||
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
|
||||
|
||||
required_device<i8255_device> m_d9;
|
||||
required_device<i8251_device> m_d10;
|
||||
required_device<centronics_device> m_centronics;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(write_portb);
|
||||
DECLARE_READ8_MEMBER(read_portc);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
|
||||
|
||||
private:
|
||||
bool m_centronics_busy;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
extern const device_type A2BUS_AGAT7_PORTS;
|
||||
DECLARE_DEVICE_TYPE(A2BUS_AGAT7_PORTS, a2bus_agat7_ports_device)
|
||||
|
||||
#endif // MAME_BUS_A2BUS_AGAT7_PORTS_H
|
@ -59,6 +59,7 @@
|
||||
|
||||
#include "bus/a2bus/a2diskii.h"
|
||||
#include "bus/a2bus/agat7langcard.h"
|
||||
#include "bus/a2bus/agat7ports.h"
|
||||
#include "bus/a2bus/agat7ram.h"
|
||||
#include "bus/a2bus/agat840k_hle.h"
|
||||
|
||||
@ -1060,7 +1061,7 @@ static SLOT_INTERFACE_START(agat7_cards)
|
||||
SLOT_INTERFACE("a7ram", A2BUS_AGAT7RAM) // Agat-7 32K RAM Card -- decimal 3.089.119-01, KR565RU6D chips
|
||||
SLOT_INTERFACE("a7fdc", A2BUS_AGAT7_FDC) // Disk II clone -- decimal 3.089.105
|
||||
SLOT_INTERFACE("a7fdc840", A2BUS_AGAT840K_HLE) // 840K floppy controller -- decimal 7.104.351 or 3.089.023?
|
||||
// Serial-parallel card -- decimal 3.089.106
|
||||
SLOT_INTERFACE("a7ports", A2BUS_AGAT7_PORTS) // Serial-parallel card -- decimal 3.089.106
|
||||
// Printer card (agat9) -- decimal 3.089.174
|
||||
|
||||
// 3rd party cards
|
||||
@ -1128,7 +1129,7 @@ MACHINE_CONFIG_START(agat7_state::agat7)
|
||||
MCFG_A2BUS_OUT_INH_CB(WRITELINE(agat7_state, a2bus_inh_w))
|
||||
MCFG_A2BUS_SLOT_ADD(A7_BUS_TAG, "sl2", agat7_cards, "a7lang")
|
||||
MCFG_A2BUS_SLOT_ADD(A7_BUS_TAG, "sl3", agat7_cards, "a7fdc")
|
||||
MCFG_A2BUS_SLOT_ADD(A7_BUS_TAG, "sl4", agat7_cards, nullptr)
|
||||
MCFG_A2BUS_SLOT_ADD(A7_BUS_TAG, "sl4", agat7_cards, "a7ports")
|
||||
MCFG_A2BUS_SLOT_ADD(A7_BUS_TAG, "sl5", agat7_cards, nullptr)
|
||||
MCFG_A2BUS_SLOT_ADD(A7_BUS_TAG, "sl6", agat7_cards, "a7ram")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user