mirror of
https://github.com/holub/mame
synced 2025-07-06 18:39:28 +03:00
sol20: Add RS232 port
This commit is contained in:
parent
897f3c82f2
commit
2b59d06fb1
@ -113,6 +113,7 @@
|
||||
#include "emu.h"
|
||||
|
||||
#include "cpu/i8085/i8085.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
//#include "bus/s100/s100.h"
|
||||
#include "imagedev/cassette.h"
|
||||
#include "machine/ay31015.h"
|
||||
@ -156,6 +157,7 @@ public:
|
||||
, m_cass2(*this, "cassette2")
|
||||
, m_uart(*this, "uart")
|
||||
, m_uart_s(*this, "uart_s")
|
||||
, m_rs232(*this, "rs232")
|
||||
, m_p_videoram(*this, "videoram")
|
||||
, m_p_chargen(*this, "chargen")
|
||||
, m_iop_arrows(*this, "ARROWS")
|
||||
@ -167,15 +169,11 @@ public:
|
||||
{ }
|
||||
|
||||
DECLARE_READ8_MEMBER( sol20_f8_r );
|
||||
DECLARE_READ8_MEMBER( sol20_f9_r );
|
||||
DECLARE_READ8_MEMBER( sol20_fa_r );
|
||||
DECLARE_READ8_MEMBER( sol20_fb_r );
|
||||
DECLARE_READ8_MEMBER( sol20_fc_r );
|
||||
DECLARE_READ8_MEMBER( sol20_fd_r );
|
||||
DECLARE_WRITE8_MEMBER( sol20_f8_w );
|
||||
DECLARE_WRITE8_MEMBER( sol20_f9_w );
|
||||
DECLARE_WRITE8_MEMBER( sol20_fa_w );
|
||||
DECLARE_WRITE8_MEMBER( sol20_fb_w );
|
||||
DECLARE_WRITE8_MEMBER( sol20_fd_w );
|
||||
DECLARE_WRITE8_MEMBER( sol20_fe_w );
|
||||
void kbd_put(u8 data);
|
||||
@ -203,6 +201,7 @@ private:
|
||||
required_device<cassette_image_device> m_cass2;
|
||||
required_device<ay31015_device> m_uart;
|
||||
required_device<ay31015_device> m_uart_s;
|
||||
required_device<rs232_port_device> m_rs232;
|
||||
required_shared_ptr<uint8_t> m_p_videoram;
|
||||
required_region_ptr<u8> m_p_chargen;
|
||||
required_ioport m_iop_arrows;
|
||||
@ -334,28 +333,22 @@ TIMER_CALLBACK_MEMBER(sol20_state::sol20_cassette_tc)
|
||||
READ8_MEMBER( sol20_state::sol20_f8_r )
|
||||
{
|
||||
// d7 - TBMT; d6 - DAV; d5 - CTS; d4 - OE; d3 - PE; d2 - FE; d1 - DSR; d0 - CD
|
||||
/* set unemulated bits (CTS/DSR/CD) high */
|
||||
uint8_t data = 0x23;
|
||||
uint8_t data = 0;
|
||||
|
||||
m_uart_s->write_swe(0);
|
||||
data |= m_uart_s->tbmt_r() ? 0x80 : 0;
|
||||
data |= m_uart_s->dav_r( ) ? 0x40 : 0;
|
||||
data |= m_rs232->cts_r( ) ? 0x20 : 0;
|
||||
data |= m_uart_s->or_r( ) ? 0x10 : 0;
|
||||
data |= m_uart_s->pe_r( ) ? 0x08 : 0;
|
||||
data |= m_uart_s->fe_r( ) ? 0x04 : 0;
|
||||
data |= m_rs232->dsr_r( ) ? 0x02 : 0;
|
||||
data |= m_rs232->dcd_r( ) ? 0x01 : 0;
|
||||
m_uart_s->write_swe(1);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER( sol20_state::sol20_f9_r)
|
||||
{
|
||||
uint8_t data = m_uart_s->get_received_data();
|
||||
m_uart_s->write_rdav(0);
|
||||
m_uart_s->write_rdav(1);
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER( sol20_state::sol20_fa_r )
|
||||
{
|
||||
/* set unused bits high */
|
||||
@ -374,14 +367,6 @@ READ8_MEMBER( sol20_state::sol20_fa_r )
|
||||
return data | (arrowkey & keydown);
|
||||
}
|
||||
|
||||
READ8_MEMBER( sol20_state::sol20_fb_r)
|
||||
{
|
||||
uint8_t data = m_uart->get_received_data();
|
||||
m_uart->write_rdav(0);
|
||||
m_uart->write_rdav(1);
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER( sol20_state::sol20_fc_r )
|
||||
{
|
||||
uint8_t data = m_iop_arrows->read();
|
||||
@ -403,11 +388,7 @@ READ8_MEMBER( sol20_state::sol20_fd_r )
|
||||
WRITE8_MEMBER( sol20_state::sol20_f8_w )
|
||||
{
|
||||
// The only function seems to be to send RTS from bit 4
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( sol20_state::sol20_f9_w )
|
||||
{
|
||||
m_uart_s->set_transmit_data(data);
|
||||
m_rs232->write_rts(BIT(data, 4));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( sol20_state::sol20_fa_w )
|
||||
@ -433,11 +414,6 @@ WRITE8_MEMBER( sol20_state::sol20_fa_w )
|
||||
m_uart->set_transmitter_clock((BIT(data, 5)) ? 4800.0 : 19200.0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( sol20_state::sol20_fb_w )
|
||||
{
|
||||
m_uart->set_transmit_data(data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( sol20_state::sol20_fd_w )
|
||||
{
|
||||
// Output a byte to parallel interface
|
||||
@ -460,12 +436,12 @@ ADDRESS_MAP_END
|
||||
ADDRESS_MAP_START(sol20_state::sol20_io)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0xf8, 0xf8) AM_READWRITE(sol20_f8_r,sol20_f8_w)
|
||||
AM_RANGE(0xf9, 0xf9) AM_READWRITE(sol20_f9_r,sol20_f9_w)
|
||||
AM_RANGE(0xfa, 0xfa) AM_READWRITE(sol20_fa_r,sol20_fa_w)
|
||||
AM_RANGE(0xfb, 0xfb) AM_READWRITE(sol20_fb_r,sol20_fb_w)
|
||||
AM_RANGE(0xf8, 0xf8) AM_READWRITE(sol20_f8_r, sol20_f8_w)
|
||||
AM_RANGE(0xf9, 0xf9) AM_DEVREADWRITE("uart", ay51013_device, receive, transmit)
|
||||
AM_RANGE(0xfa, 0xfa) AM_READWRITE(sol20_fa_r, sol20_fa_w)
|
||||
AM_RANGE(0xfb, 0xfb) AM_DEVREADWRITE("uart_s", ay51013_device, receive, transmit)
|
||||
AM_RANGE(0xfc, 0xfc) AM_READ(sol20_fc_r)
|
||||
AM_RANGE(0xfd, 0xfd) AM_READWRITE(sol20_fd_r,sol20_fd_w)
|
||||
AM_RANGE(0xfd, 0xfd) AM_READWRITE(sol20_fd_r, sol20_fd_w)
|
||||
AM_RANGE(0xfe, 0xfe) AM_WRITE(sol20_fe_w)
|
||||
AM_RANGE(0xff, 0xff) AM_READ_PORT("S2")
|
||||
/* AM_RANGE(0xf8, 0xf8) serial status in (bit 6=data av, bit 7=tmbe)
|
||||
@ -624,6 +600,8 @@ void sol20_state::machine_reset()
|
||||
// boot-bank
|
||||
membank("boot")->set_entry(1);
|
||||
timer_set(attotime::from_usec(9), TIMER_SOL20_BOOT);
|
||||
|
||||
m_rs232->write_rts(1);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(sol20_state,sol20)
|
||||
@ -770,12 +748,20 @@ MACHINE_CONFIG_START(sol20_state::sol20)
|
||||
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
|
||||
MCFG_CASSETTE_INTERFACE("sol20_cass")
|
||||
|
||||
MCFG_DEVICE_ADD("uart", AY31015, 0)
|
||||
MCFG_AY31015_TX_CLOCK(4800.0)
|
||||
MCFG_AY31015_RX_CLOCK(4800.0)
|
||||
MCFG_DEVICE_ADD("uart_s", AY31015, 0)
|
||||
MCFG_AY31015_TX_CLOCK(4800.0)
|
||||
MCFG_AY31015_RX_CLOCK(4800.0)
|
||||
MCFG_DEVICE_ADD("uart", AY51013, 0) // TMS6011NC
|
||||
MCFG_AY51013_READ_SI_CB(DEVREADLINE("rs232", rs232_port_device, rxd_r))
|
||||
MCFG_AY51013_WRITE_SO_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd))
|
||||
MCFG_AY51013_TX_CLOCK(4800.0)
|
||||
MCFG_AY51013_RX_CLOCK(4800.0)
|
||||
MCFG_AY51013_AUTO_RDAV(true) // ROD (pin 4) tied to RDD (pin 18)
|
||||
|
||||
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, nullptr)
|
||||
|
||||
MCFG_DEVICE_ADD("uart_s", AY51013, 0) // TMS6011NC
|
||||
MCFG_AY51013_TX_CLOCK(4800.0)
|
||||
MCFG_AY51013_RX_CLOCK(4800.0)
|
||||
MCFG_AY51013_AUTO_RDAV(true) // ROD (pin 4) tied to RDD (pin 18)
|
||||
|
||||
MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0)
|
||||
MCFG_GENERIC_KEYBOARD_CB(PUT(sol20_state, kbd_put))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user