mirror of
https://github.com/holub/mame
synced 2025-04-28 19:14:55 +03:00
More meat to SCI
This commit is contained in:
parent
1c12f1f20d
commit
c8b7b13ca5
@ -7,7 +7,6 @@
|
|||||||
Lies at 0xffffffe0-0xffffffff
|
Lies at 0xffffffe0-0xffffffff
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- Host CPU setter (is_slave and clock are needed);
|
- Host CPU setter (is_slave and clock are needed);
|
||||||
- timer clock emulation;
|
- timer clock emulation;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:<author_name>
|
// copyright-holders:Angelo Salese
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Template for skeleton device
|
SH7604 BUS Controller
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:<author_name>
|
// copyright-holders:Angelo Salese
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Template for skeleton device
|
SH7604 SCI Controller
|
||||||
|
|
||||||
|
Lies at 0xfffffe00-0xfffffe0f
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
- diserial;
|
||||||
|
- CPU callbacks for RX and TX;
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -23,8 +29,83 @@ const device_type SH7604_SCI = &device_creator<sh7604_sci_device>;
|
|||||||
// LIVE DEVICE
|
// LIVE DEVICE
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
static ADDRESS_MAP_START( sci_regs, AS_0, 8, sh7604_sci_device )
|
READ8_MEMBER(sh7604_sci_device::serial_mode_r)
|
||||||
|
{
|
||||||
|
return m_smr;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(sh7604_sci_device::serial_mode_w)
|
||||||
|
{
|
||||||
|
m_smr = data;
|
||||||
|
|
||||||
|
logerror("%s: serial mode set:\n",tag());
|
||||||
|
logerror("\tCommunication Mode: %s mode\n",data & 0x80 ? "clocked synchronous" : "asynchronous");
|
||||||
|
logerror("\tCharacter Length: %s mode\n",data & 0x40 ? "7-bit" : "8-bit");
|
||||||
|
logerror("\tParity Enable: %s\n",data & 0x20 ? "yes" : "no");
|
||||||
|
logerror("\tParity Mode: %s\n",data & 0x10 ? "Odd" : "Even");
|
||||||
|
logerror("\tStop bits: %s\n",data & 0x08 ? "2" : "1");
|
||||||
|
logerror("\tMultiprocessor mode: %s\n",data & 0x04 ? "yes" : "no");
|
||||||
|
logerror("\tClock select: clock/%d\n",4 << ((data & 0x03)*2));
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(sh7604_sci_device::serial_control_r)
|
||||||
|
{
|
||||||
|
return m_scr;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(sh7604_sci_device::serial_control_w)
|
||||||
|
{
|
||||||
|
m_scr = data;
|
||||||
|
|
||||||
|
if(data & 0x30)
|
||||||
|
throw emu_fatalerror("%s: enabled serial control %02x\n", tag(),data);
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(sh7604_sci_device::serial_status_r)
|
||||||
|
{
|
||||||
|
return m_ssr;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(sh7604_sci_device::serial_ack_w)
|
||||||
|
{
|
||||||
|
// TODO: verify this
|
||||||
|
m_ssr = (m_ssr & 0x06) | (m_ssr & data & 0xf9);
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(sh7604_sci_device::bitrate_r )
|
||||||
|
{
|
||||||
|
return m_brr;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(sh7604_sci_device::bitrate_w )
|
||||||
|
{
|
||||||
|
m_brr = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(sh7604_sci_device::transmit_data_r)
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(sh7604_sci_device::transmit_data_w)
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(sh7604_sci_device::receive_data_r)
|
||||||
|
{
|
||||||
|
// ...
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ADDRESS_MAP_START( sci_regs, AS_0, 8, sh7604_sci_device )
|
||||||
|
AM_RANGE(0x00, 0x00) AM_READWRITE(serial_mode_r, serial_mode_w)
|
||||||
|
AM_RANGE(0x01, 0x01) AM_READWRITE(bitrate_r, bitrate_w)
|
||||||
|
AM_RANGE(0x02, 0x02) AM_READWRITE(serial_control_r,serial_control_w)
|
||||||
|
AM_RANGE(0x03, 0x03) AM_READWRITE(transmit_data_r, transmit_data_w)
|
||||||
|
AM_RANGE(0x04, 0x04) AM_READWRITE(serial_status_r, serial_ack_w)
|
||||||
|
AM_RANGE(0x05, 0x05) AM_READ(receive_data_r)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -60,6 +141,10 @@ void sh7604_sci_device::device_start()
|
|||||||
|
|
||||||
void sh7604_sci_device::device_reset()
|
void sh7604_sci_device::device_reset()
|
||||||
{
|
{
|
||||||
|
m_smr = 0;
|
||||||
|
m_scr = 0;
|
||||||
|
m_ssr = STATUS_TDRE|STATUS_TEND; //0x84;
|
||||||
|
m_brr = 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:<author_name>
|
// copyright-holders:Angelo Salese
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Template for skeleton device
|
SH7604 SCI Controller
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -11,6 +11,17 @@ Template for skeleton device
|
|||||||
#ifndef __SH7604_SCIDEV_H__
|
#ifndef __SH7604_SCIDEV_H__
|
||||||
#define __SH7604_SCIDEV_H__
|
#define __SH7604_SCIDEV_H__
|
||||||
|
|
||||||
|
enum {
|
||||||
|
STATUS_MPBT = 1 << 0,
|
||||||
|
STATUS_MPB = 1 << 1,
|
||||||
|
STATUS_TEND = 1 << 2,
|
||||||
|
STATUS_PER = 1 << 3,
|
||||||
|
STATUS_FER = 1 << 4,
|
||||||
|
STATUS_ORER = 1 << 5,
|
||||||
|
STATUS_RDRF = 1 << 6,
|
||||||
|
STATUS_TDRE = 1 << 7
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
@ -37,6 +48,19 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER( write );
|
DECLARE_WRITE8_MEMBER( write );
|
||||||
DECLARE_READ8_MEMBER( read );
|
DECLARE_READ8_MEMBER( read );
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER( serial_mode_r );
|
||||||
|
DECLARE_WRITE8_MEMBER( serial_mode_w );
|
||||||
|
DECLARE_READ8_MEMBER( bitrate_r );
|
||||||
|
DECLARE_WRITE8_MEMBER( bitrate_w );
|
||||||
|
DECLARE_READ8_MEMBER( serial_control_r );
|
||||||
|
DECLARE_WRITE8_MEMBER( serial_control_w );
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER( transmit_data_r );
|
||||||
|
DECLARE_WRITE8_MEMBER( transmit_data_w );
|
||||||
|
DECLARE_READ8_MEMBER( serial_status_r );
|
||||||
|
DECLARE_WRITE8_MEMBER( serial_ack_w );
|
||||||
|
DECLARE_READ8_MEMBER( receive_data_r );
|
||||||
|
|
||||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
|
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
|
||||||
protected:
|
protected:
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
@ -45,6 +69,10 @@ protected:
|
|||||||
virtual void device_reset() override;
|
virtual void device_reset() override;
|
||||||
private:
|
private:
|
||||||
const address_space_config m_space_config;
|
const address_space_config m_space_config;
|
||||||
|
UINT8 m_smr;
|
||||||
|
UINT8 m_scr;
|
||||||
|
UINT8 m_ssr;
|
||||||
|
UINT8 m_brr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user