mirror of
https://github.com/holub/mame
synced 2025-06-06 12:53:46 +03:00
(MESS) compis: Added MPSC and RS-232 ports. [Curt Coder]
This commit is contained in:
parent
fd77a104f5
commit
dfadf49eba
@ -99,7 +99,7 @@ static ADDRESS_MAP_START( compis_io, AS_IO, 16, compis_state )
|
||||
//AM_RANGE(0x0310, 0x0311) /* PCS6:2 0x00ff */ AM_MIRROR(0xe) // 8274 INTERRUPT ACKNOWLEDGE
|
||||
AM_RANGE(0x0310, 0x0311) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8("uart", i8251_device, data_r, data_w, 0xff00)
|
||||
AM_RANGE(0x0312, 0x0313) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8("uart", i8251_device, status_r, control_w, 0xff00)
|
||||
//AM_RANGE(0x0320, 0x0321) /* PCS6:4 0x00ff */ AM_MIRROR(0xe) // 8274
|
||||
AM_RANGE(0x0320, 0x0323) /* PCS6:4 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8274_TAG, z80dart_device, cd_ba_r, cd_ba_w, 0x00ff)
|
||||
//AM_RANGE(0x0320, 0x0321) /* PCS6:5 0xff00 */ AM_MIRROR(0xe) // DMA-TERMINATE J8 (iSBX0)
|
||||
AM_RANGE(0x0330, 0x0333) /* PCS6:6 */ AM_DEVREADWRITE8("upd7220", upd7220_device, read, write, 0x00ff)
|
||||
//AM_RANGE(0x0330, 0x0331) /* PCS6:7 0xff00 */ AM_MIRROR(0xe) // DMA-TERMINATE J9 (iSBX1)
|
||||
@ -149,6 +149,60 @@ static const cassette_interface compis_cassette_interface =
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// I8274_INTERFACE( mpsc_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static I8274_INTERFACE( mpsc_intf )
|
||||
{
|
||||
0, 0, 0, 0,
|
||||
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_DEVICE_LINE_MEMBER("maincpu", i80186_cpu_device, int3_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rs232_port_interface rs232a_intf
|
||||
//-------------------------------------------------
|
||||
|
||||
static const rs232_port_interface rs232a_intf =
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(I8274_TAG, z80dart_device, dcda_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(I8274_TAG, z80dart_device, ctsa_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rs232_port_interface rs232b_intf
|
||||
//-------------------------------------------------
|
||||
|
||||
static const rs232_port_interface rs232b_intf =
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(I8274_TAG, z80dart_device, dcdb_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(I8274_TAG, z80dart_device, ctsb_w)
|
||||
};
|
||||
|
||||
const floppy_format_type compis_floppy_formats[] = {
|
||||
FLOPPY_D88_FORMAT,
|
||||
FLOPPY_DFI_FORMAT,
|
||||
@ -200,6 +254,10 @@ static MACHINE_CONFIG_START( compis, compis_state )
|
||||
MCFG_FLOPPY_DRIVE_ADD("i8272a:0", compis_floppies, "525qd", compis_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("i8272a:1", compis_floppies, "525qd", compis_floppy_formats)
|
||||
MCFG_CASSETTE_ADD(CASSETTE_TAG, compis_cassette_interface)
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("tape", compis_state, tape_tick, attotime::from_hz(44100))
|
||||
MCFG_I8274_ADD(I8274_TAG, XTAL_16MHz/4, mpsc_intf)
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL)
|
||||
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL)
|
||||
MCFG_COMPIS_KEYBOARD_ADD(NULL)
|
||||
|
||||
/* software lists */
|
||||
@ -237,6 +295,10 @@ static MACHINE_CONFIG_START( compis2, compis_state )
|
||||
MCFG_FLOPPY_DRIVE_ADD("i8272a:0", compis_floppies, "525qd", compis_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("i8272a:1", compis_floppies, "525qd", compis_floppy_formats)
|
||||
MCFG_CASSETTE_ADD(CASSETTE_TAG, compis_cassette_interface)
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("tape", compis_state, tape_tick, attotime::from_hz(44100))
|
||||
MCFG_I8274_ADD(I8274_TAG, XTAL_16MHz/4, mpsc_intf)
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL)
|
||||
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL)
|
||||
MCFG_COMPIS_KEYBOARD_ADD(NULL)
|
||||
|
||||
/* software lists */
|
||||
|
@ -24,9 +24,14 @@
|
||||
#include "machine/mm58274c.h"
|
||||
#include "machine/pic8259.h"
|
||||
#include "machine/pit8253.h"
|
||||
#include "machine/serial.h"
|
||||
#include "machine/upd765.h"
|
||||
#include "machine/z80dart.h"
|
||||
#include "video/upd7220.h"
|
||||
|
||||
#define I8274_TAG "ic65"
|
||||
#define RS232_A_TAG "rs232a"
|
||||
#define RS232_B_TAG "rs232b"
|
||||
#define CASSETTE_TAG "cassette"
|
||||
|
||||
class compis_state : public driver_device
|
||||
@ -39,6 +44,7 @@ public:
|
||||
m_8254(*this, "pit8254"),
|
||||
m_8259m(*this, "pic8259_master"),
|
||||
m_8255(*this, "ppi8255"),
|
||||
m_mpsc(*this, I8274_TAG),
|
||||
m_centronics(*this, "centronics"),
|
||||
m_uart(*this, "uart"),
|
||||
m_rtc(*this, "mm58274c"),
|
||||
@ -48,11 +54,12 @@ public:
|
||||
m_video_ram(*this, "video_ram")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<i80186_cpu_device> m_maincpu;
|
||||
required_device<pit8253_device> m_8253;
|
||||
required_device<pit8254_device> m_8254;
|
||||
required_device<pic8259_device> m_8259m;
|
||||
required_device<i8255_device> m_8255;
|
||||
required_device<i8274_device> m_mpsc;
|
||||
required_device<centronics_device> m_centronics;
|
||||
required_device<i8251_device> m_uart;
|
||||
required_device<mm58274c_device> m_rtc;
|
||||
@ -70,7 +77,11 @@ public:
|
||||
bool m_mon;
|
||||
DECLARE_WRITE_LINE_MEMBER(tmr0_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(tmr2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(tmr3_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(tmr4_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(tmr5_w);
|
||||
DECLARE_WRITE8_MEMBER(tape_mon_w);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(tape_tick);
|
||||
|
||||
void fdc_irq(bool state);
|
||||
void fdc_drq(bool state);
|
||||
|
@ -154,15 +154,30 @@ I8255A_INTERFACE( compis_ppi_interface )
|
||||
/* PIT 8253 */
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
WRITE_LINE_MEMBER( compis_state::tmr3_w )
|
||||
{
|
||||
m_mpsc->rxtxcb_w(state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( compis_state::tmr4_w )
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( compis_state::tmr5_w )
|
||||
{
|
||||
m_mpsc->rxca_w(state);
|
||||
m_mpsc->txca_w(state);
|
||||
}
|
||||
|
||||
const struct pit8253_interface compis_pit8253_config =
|
||||
{
|
||||
{
|
||||
/* Timer0 */
|
||||
{XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_NULL }, // TMR3
|
||||
{XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(compis_state, tmr3_w) },
|
||||
/* Timer1 */
|
||||
{XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_NULL }, // TMR4
|
||||
{XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(compis_state, tmr4_w) },
|
||||
/* Timer2 */
|
||||
{XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_NULL } // TMR5
|
||||
{XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(compis_state, tmr5_w) }
|
||||
}
|
||||
};
|
||||
|
||||
@ -231,6 +246,11 @@ WRITE8_MEMBER( compis_state::tape_mon_w )
|
||||
m_cassette->change_state(state, CASSETTE_MASK_MOTOR);
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER( compis_state::tape_tick )
|
||||
{
|
||||
m_maincpu->tmrin0_w(m_cassette->input() > 0.0);
|
||||
}
|
||||
|
||||
void compis_state::machine_start()
|
||||
{
|
||||
m_fdc->setup_intrq_cb(i8272a_device::line_cb(FUNC(compis_state::fdc_irq), this));
|
||||
|
Loading…
Reference in New Issue
Block a user