summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Sergey Svishchev <shattered@users.noreply.github.com>2018-05-26 20:02:29 +0300
committer Vas Crabb <cuavas@users.noreply.github.com>2018-05-27 03:02:29 +1000
commitc23094f582088368076ea0d828764741e6900f31 (patch)
tree33f943b3503096cdccef40b2201b42b01c63707c
parentfa63ba7f87f6b6e571d6d30532e206cdf85f368f (diff)
a7150: pass usart/timer and graphics board tests; hook up 8087 (nw) (#3556)
* a7150: pass usart/timer and graphics board tests; hook up 8087 (nw) * a7150: follow-up on PR#3556
-rw-r--r--src/mame/drivers/a7150.cpp62
1 files changed, 52 insertions, 10 deletions
diff --git a/src/mame/drivers/a7150.cpp b/src/mame/drivers/a7150.cpp
index e131c8fc68f..bf2344c299d 100644
--- a/src/mame/drivers/a7150.cpp
+++ b/src/mame/drivers/a7150.cpp
@@ -22,6 +22,7 @@
#include "emu.h"
#include "cpu/i86/i86.h"
+#include "machine/i8087.h"
#include "machine/i8251.h"
#include "machine/i8255.h"
#include "machine/pit8253.h"
@@ -29,6 +30,7 @@
#include "machine/bankdev.h"
#include "cpu/z80/z80.h"
+#include "machine/clock.h"
#include "machine/z80ctc.h"
#include "machine/z80sio.h"
@@ -58,6 +60,7 @@ public:
, m_pic8259(*this, "pic8259")
, m_gfxcpu(*this, "gfxcpu")
, m_ctc(*this, Z80CTC_TAG)
+ , m_rs232(*this, "rs232")
, m_video_ram(*this, "video_ram")
, m_video_bankdev(*this, "video_bankdev")
, m_palette(*this, "palette")
@@ -72,14 +75,19 @@ public:
DECLARE_WRITE_LINE_MEMBER(a7150_tmr2_w);
DECLARE_WRITE8_MEMBER(ppi_c_w);
+ DECLARE_WRITE_LINE_MEMBER(ifss_write_txd);
+ DECLARE_WRITE_LINE_MEMBER(ifss_write_dtr);
+
DECLARE_READ8_MEMBER(kgs_host_r);
DECLARE_WRITE8_MEMBER(kgs_host_w);
DECLARE_WRITE_LINE_MEMBER(kgs_iml_w);
+ DECLARE_WRITE_LINE_MEMBER(ifss_loopback_w);
DECLARE_WRITE8_MEMBER(kbd_put);
void kgs_memory_remap();
bool m_kgs_msel, m_kgs_iml;
uint8_t m_kgs_datao, m_kgs_datai, m_kgs_ctrl;
+ bool m_ifss_loopback;
uint32_t screen_update_k7072(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void screen_eof(screen_device &screen, bool state);
@@ -91,6 +99,7 @@ public:
required_device<z80_device> m_gfxcpu;
required_device<z80ctc_device> m_ctc;
+ required_device<rs232_port_device> m_rs232;
required_shared_ptr<uint8_t> m_video_ram;
required_device<address_map_bank_device> m_video_bankdev;
required_device<palette_device> m_palette;
@@ -136,15 +145,33 @@ WRITE_LINE_MEMBER(a7150_state::a7150_tmr2_w)
m_uart8251->write_txc(state);
}
+WRITE_LINE_MEMBER(a7150_state::ifss_loopback_w)
+{
+ m_ifss_loopback = !state;
+}
+
+WRITE_LINE_MEMBER(a7150_state::ifss_write_txd)
+{
+ if (m_ifss_loopback)
+ m_uart8251->write_rxd(state);
+ else
+ m_rs232->write_txd(state);
+}
+
+WRITE_LINE_MEMBER(a7150_state::ifss_write_dtr)
+{
+ if (m_ifss_loopback)
+ m_uart8251->write_dsr(state);
+ else
+ m_rs232->write_dtr(state);
+}
+
WRITE8_MEMBER(a7150_state::ppi_c_w)
{
// b0 -- INTR(B)
// b1 -- /OBF(B)
// m_centronics->write_ack(BIT(data, 2));
// m_centronics->write_strobe(BIT(data, 3));
- // b4 -- serial loopback?
- // b6
- // b7
}
#define KGS_ST_OBF 0x01
@@ -411,6 +438,7 @@ void a7150_state::machine_reset()
m_kgs_ctrl = 3;
m_kgs_datao = m_kgs_datai = 0;
m_kgs_iml = m_kgs_msel = 0;
+ m_ifss_loopback = false;
kgs_memory_remap();
}
@@ -439,6 +467,14 @@ MACHINE_CONFIG_START(a7150_state::a7150)
MCFG_DEVICE_PROGRAM_MAP(a7150_mem)
MCFG_DEVICE_IO_MAP(a7150_io)
MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
+ MCFG_I8086_ESC_OPCODE_HANDLER(WRITE32("i8087", i8087_device, insn_w))
+ MCFG_I8086_ESC_DATA_HANDLER(WRITE32("i8087", i8087_device, addr_w))
+
+ MCFG_DEVICE_ADD("i8087", I8087, XTAL(9'832'000)/2)
+ MCFG_DEVICE_PROGRAM_MAP(a7150_mem)
+ MCFG_I8087_DATA_WIDTH(16)
+ MCFG_I8087_INT_HANDLER(WRITELINE("pic8259", pic8259_device, ir0_w))
+ MCFG_I8087_BUSY_HANDLER(INPUTLINE("maincpu", INPUT_LINE_TEST))
MCFG_DEVICE_ADD("pic8259", PIC8259, 0)
MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0))
@@ -457,14 +493,14 @@ MACHINE_CONFIG_START(a7150_state::a7150)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(*this, a7150_state, a7150_tmr2_w))
MCFG_DEVICE_ADD("uart8251", I8251, 0)
- MCFG_I8251_TXD_HANDLER(WRITELINE("rs232", rs232_port_device, write_txd))
- MCFG_I8251_DTR_HANDLER(WRITELINE("rs232", rs232_port_device, write_dtr))
- MCFG_I8251_RTS_HANDLER(WRITELINE("rs232", rs232_port_device, write_rts))
+ MCFG_I8251_TXD_HANDLER(WRITELINE(*this, a7150_state, ifss_write_txd))
+ MCFG_I8251_DTR_HANDLER(WRITELINE(*this, a7150_state, ifss_write_dtr))
+ MCFG_I8251_RTS_HANDLER(WRITELINE(*this, a7150_state, ifss_loopback_w))
MCFG_I8251_RXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir4_w))
MCFG_I8251_TXRDY_HANDLER(WRITELINE("pic8259", pic8259_device, ir4_w))
// IFSS port on processor card -- keyboard runs at 28800 8N2
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "keyboard") // "loopback" allows ACT to pass
+ MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, "keyboard")
MCFG_RS232_RXD_HANDLER(WRITELINE("uart8251", i8251_device, write_rxd))
MCFG_RS232_CTS_HANDLER(WRITELINE("uart8251", i8251_device, write_cts))
MCFG_RS232_DSR_HANDLER(WRITELINE("uart8251", i8251_device, write_dsr))
@@ -486,13 +522,19 @@ MACHINE_CONFIG_START(a7150_state::a7150)
MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000)
+ MCFG_DEVICE_ADD("ctc_clock", CLOCK, 1230750)
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(Z80CTC_TAG, z80ctc_device, trg0))
+ MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80CTC_TAG, z80ctc_device, trg1))
+ MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80CTC_TAG, z80ctc_device, trg2))
+ MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80CTC_TAG, z80ctc_device, trg3))
+
MCFG_DEVICE_ADD(Z80CTC_TAG, Z80CTC, XTAL(16'000'000)/3)
MCFG_Z80CTC_INTR_CB(INPUTLINE("gfxcpu", INPUT_LINE_IRQ0))
MCFG_Z80CTC_ZC0_CB(WRITELINE(Z80SIO_TAG, z80sio_device, rxca_w))
MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(Z80SIO_TAG, z80sio_device, txca_w))
MCFG_Z80CTC_ZC1_CB(WRITELINE(Z80SIO_TAG, z80sio_device, rxtxcb_w))
- MCFG_DEVICE_ADD(Z80SIO_TAG, Z80SIO, 4800)
+ MCFG_DEVICE_ADD(Z80SIO_TAG, Z80SIO, XTAL(16'000'000)/4)
MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("gfxcpu", INPUT_LINE_IRQ0))
MCFG_Z80SIO_OUT_TXDA_CB(WRITELINE(RS232_A_TAG, rs232_port_device, write_txd))
MCFG_Z80SIO_OUT_DTRA_CB(WRITELINE(RS232_A_TAG, rs232_port_device, write_dtr))
@@ -502,13 +544,13 @@ MACHINE_CONFIG_START(a7150_state::a7150)
// MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE(*this, a7150_state, kgs_ifss_loopback_w))
// V.24 port (graphics tablet)
- MCFG_DEVICE_ADD(RS232_A_TAG, RS232_PORT, default_rs232_devices, nullptr)
+ MCFG_DEVICE_ADD(RS232_A_TAG, RS232_PORT, default_rs232_devices, "loopback")
MCFG_RS232_RXD_HANDLER(WRITELINE(Z80SIO_TAG, z80sio_device, rxa_w))
MCFG_RS232_DCD_HANDLER(WRITELINE(Z80SIO_TAG, z80sio_device, dcda_w))
MCFG_RS232_CTS_HANDLER(WRITELINE(Z80SIO_TAG, z80sio_device, ctsa_w))
// IFSS (current loop) port (keyboard)
- MCFG_DEVICE_ADD(RS232_B_TAG, RS232_PORT, default_rs232_devices, nullptr)
+ MCFG_DEVICE_ADD(RS232_B_TAG, RS232_PORT, default_rs232_devices, "loopback")
MCFG_RS232_RXD_HANDLER(WRITELINE(Z80SIO_TAG, z80sio_device, rxb_w))
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())