mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
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
This commit is contained in:
parent
fa63ba7f87
commit
c23094f582
@ -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())
|
||||
|
Loading…
Reference in New Issue
Block a user