summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2017-11-16 23:18:29 +1100
committer Robbbert <Robbbert@users.noreply.github.com>2017-11-16 23:18:29 +1100
commit8b12ffdb4ffa38f3f086c240e075bfacc5708a54 (patch)
tree2033851986024716a493ac370e85de1d058458f5
parent46c4dfb5f91509491306e9d502eea3a290ba951b (diff)
(nw) cb308, mcb216, cm1800 : added uart. cb308 & mcb216 marked as working.
-rw-r--r--src/mame/drivers/cm1800.cpp78
-rw-r--r--src/mame/drivers/mcb216.cpp118
-rw-r--r--src/mame/drivers/micral.cpp6
-rw-r--r--src/mame/drivers/octopus.cpp2
-rw-r--r--src/mame/drivers/univac.cpp10
5 files changed, 126 insertions, 88 deletions
diff --git a/src/mame/drivers/cm1800.cpp b/src/mame/drivers/cm1800.cpp
index 10d8b700a24..b4d294bccdd 100644
--- a/src/mame/drivers/cm1800.cpp
+++ b/src/mame/drivers/cm1800.cpp
@@ -2,15 +2,15 @@
// copyright-holders:Miodrag Milanovic, Robbbert
/***************************************************************************
- CM-1800
- (note name is in cyrilic letters)
+CM-1800
+(note name is in cyrilic letters)
- more info at http://ru.wikipedia.org/wiki/%D0%A1%D0%9C_%D0%AD%D0%92%D0%9C
- and http://sapr.lti-gti.ru/index.php?id=66
+more info at http://ru.wikipedia.org/wiki/%D0%A1%D0%9C_%D0%AD%D0%92%D0%9C
+ and http://www.computer-museum.ru/histussr/sm1800.htm
- 26/04/2011 Skeleton driver.
+2011-04-26 Skeleton driver.
-Commands:
+Commands to be in uppercase:
C Compare
D Dump
F Fill
@@ -35,7 +35,8 @@ to be a save command.
#include "emu.h"
#include "cpu/i8085/i8085.h"
-#include "machine/terminal.h"
+#include "machine/ay31015.h"
+#include "bus/rs232/rs232.h"
class cm1800_state : public driver_device
@@ -43,51 +44,48 @@ class cm1800_state : public driver_device
public:
cm1800_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_terminal(*this, "terminal")
, m_maincpu(*this, "maincpu")
+ , m_uart(*this, "uart")
{ }
- DECLARE_READ8_MEMBER( term_status_r );
- DECLARE_READ8_MEMBER( term_r );
- void kbd_put(u8 data);
+ DECLARE_READ8_MEMBER(port00_r);
+ DECLARE_READ8_MEMBER(port01_r);
+ DECLARE_WRITE8_MEMBER(port00_w);
private:
virtual void machine_reset() override;
-
- uint8_t m_term_data;
-
- required_device<generic_terminal_device> m_terminal;
required_device<cpu_device> m_maincpu;
+ required_device<ay31015_device> m_uart;
};
-READ8_MEMBER( cm1800_state::term_status_r )
+WRITE8_MEMBER( cm1800_state::port00_w )
{
- return (m_term_data) ? 5 : 4;
+ m_uart->set_transmit_data(data);
}
-READ8_MEMBER( cm1800_state::term_r )
+READ8_MEMBER( cm1800_state::port01_r )
{
- uint8_t ret = m_term_data;
- m_term_data = 0;
- return ret;
+ return (m_uart->get_output_pin(AY31015_DAV)) | (m_uart->get_output_pin(AY31015_TBMT) << 2);
}
-void cm1800_state::kbd_put(u8 data)
+READ8_MEMBER( cm1800_state::port00_r )
{
- m_term_data = data;
+ m_uart->set_input_pin(AY31015_RDAV, 0);
+ u8 result = m_uart->get_received_data();
+ m_uart->set_input_pin(AY31015_RDAV, 1);
+ return result;
}
-static ADDRESS_MAP_START(cm1800_mem, AS_PROGRAM, 8, cm1800_state)
+static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, cm1800_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE( 0x0000, 0x07ff ) AM_ROM AM_REGION("roms", 0)
AM_RANGE( 0x0800, 0xffff ) AM_RAM
ADDRESS_MAP_END
-static ADDRESS_MAP_START( cm1800_io , AS_IO, 8, cm1800_state)
+static ADDRESS_MAP_START( io_map, AS_IO, 8, cm1800_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00, 0x00) AM_READ(term_r) AM_DEVWRITE("terminal", generic_terminal_device, write)
- AM_RANGE(0x01, 0x01) AM_READ(term_status_r)
- AM_RANGE(0x03, 0x03) // unknown uart, initialisation bytes 08 then 48, so not 6551.
+ AM_RANGE(0x00, 0x00) AM_READWRITE(port00_r,port00_w)
+ AM_RANGE(0x01, 0x01) AM_READ(port01_r)
ADDRESS_MAP_END
/* Input ports */
@@ -97,17 +95,31 @@ INPUT_PORTS_END
void cm1800_state::machine_reset()
{
+ m_uart->set_input_pin(AY31015_XR, 0);
+ m_uart->set_input_pin(AY31015_XR, 1);
+ m_uart->set_input_pin(AY31015_SWE, 0);
+ m_uart->set_input_pin(AY31015_NP, 1);
+ m_uart->set_input_pin(AY31015_TSB, 0);
+ m_uart->set_input_pin(AY31015_NB1, 1);
+ m_uart->set_input_pin(AY31015_NB2, 1);
+ m_uart->set_input_pin(AY31015_EPS, 1);
+ m_uart->set_input_pin(AY31015_CS, 1);
+ m_uart->set_input_pin(AY31015_CS, 0);
}
static MACHINE_CONFIG_START( cm1800 )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",I8080, XTAL_2MHz)
- MCFG_CPU_PROGRAM_MAP(cm1800_mem)
- MCFG_CPU_IO_MAP(cm1800_io)
+ MCFG_CPU_ADD("maincpu", I8080, XTAL_2MHz)
+ MCFG_CPU_PROGRAM_MAP(mem_map)
+ MCFG_CPU_IO_MAP(io_map)
/* video hardware */
- MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0)
- MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(cm1800_state, kbd_put))
+ MCFG_DEVICE_ADD("uart", AY51013, 0) // exact uart type is unknown
+ MCFG_AY51013_TX_CLOCK(153600)
+ MCFG_AY51013_RX_CLOCK(153600)
+ 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_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/drivers/mcb216.cpp b/src/mame/drivers/mcb216.cpp
index ded1dc04ba9..b8eac5475fe 100644
--- a/src/mame/drivers/mcb216.cpp
+++ b/src/mame/drivers/mcb216.cpp
@@ -2,39 +2,39 @@
// copyright-holders:Robbbert
/***************************************************************************
- 2013-12-01 Driver for Cromemco MCB-216 SCC (Single Card Computer),
- and also the earlier CB-308.
+2013-12-01 Driver for Cromemco MCB-216 SCC (Single Card Computer),
+and also the earlier CB-308.
- The driver is working, just missing some hardware info (see ToDo).
+TODO:
+- Confirm cpu clock speed
- TODO:
- - Find out cpu clock speed
- - Find out what UART type is used (init byte = 94)
+Memory allocation
+- 0000 to 0FFF - standard roms
+- 1000 to 1FFF - optional roms or ram (expect roms)
+- 2000 to 23FF - standard ram
+- 2400 to FFFF - optional whatever the user wants (expect ram)
- Memory allocation
- - 0000 to 0FFF - standard roms
- - 1000 to 1FFF - optional roms or ram (expect roms)
- - 2000 to 23FF - standard ram
- - 2400 to FFFF - optional whatever the user wants (expect ram)
+All commands to be in uppercase.
- MCB-216:
- Press Enter twice. You will see the Basic OK prompt. To get into the
- monitor, use the QUIT command, and to return use the B command.
+MCB-216:
+Press Enter twice. You will see the Basic OK prompt. To get into the
+monitor, use the QUIT command, and to return use the B command.
- The mcb216 can use an optional floppy-disk-drive unit. The only other
- storage is paper-tape, which is expected to be attached to the terminal.
+The mcb216 can use an optional floppy-disk-drive unit. The only other
+storage is paper-tape, which is expected to be attached to the terminal.
- CB-308:
- Press Enter twice. You will see the Monitor logo. To get into the BASIC,
- enter GE400. To return to the monitor, use the QUIT command followed by
- pressing Enter twice. All monitor commands must be in uppercase. The
- only storage is paper-tape.
+CB-308:
+Press Enter twice. You will see the Monitor logo. To get into the BASIC,
+enter GE400. To return to the monitor, use the QUIT command followed by
+pressing Enter twice. All monitor commands must be in uppercase. The
+only storage is paper-tape.
****************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "machine/terminal.h"
+#include "machine/ay31015.h"
+#include "bus/rs232/rs232.h"
class mcb216_state : public driver_device
@@ -43,19 +43,18 @@ public:
mcb216_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
- , m_terminal(*this, "terminal")
+ , m_uart(*this, "uart")
{ }
- void kbd_put(u8 data);
- DECLARE_READ8_MEMBER(keyin_r);
- DECLARE_READ8_MEMBER(status_r);
+ DECLARE_READ8_MEMBER(port00_r);
+ DECLARE_READ8_MEMBER(port01_r);
+ DECLARE_WRITE8_MEMBER(port01_w);
DECLARE_MACHINE_RESET(mcb216);
DECLARE_MACHINE_RESET(cb308);
private:
- uint8_t m_term_data;
required_device<cpu_device> m_maincpu;
- required_device<generic_terminal_device> m_terminal;
+ required_device<ay31015_device> m_uart;
};
static ADDRESS_MAP_START(mcb216_mem, AS_PROGRAM, 8, mcb216_state)
@@ -67,8 +66,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START(mcb216_io, AS_IO, 8, mcb216_state)
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ(status_r)
- AM_RANGE(0x01, 0x01) AM_READ(keyin_r) AM_DEVWRITE("terminal", generic_terminal_device, write)
+ AM_RANGE(0x00, 0x00) AM_READ(port00_r)
+ AM_RANGE(0x01, 0x01) AM_READWRITE(port01_r,port01_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START(cb308_mem, AS_PROGRAM, 8, mcb216_state)
@@ -83,33 +82,52 @@ static INPUT_PORTS_START( mcb216 )
INPUT_PORTS_END
-READ8_MEMBER( mcb216_state::keyin_r )
+READ8_MEMBER( mcb216_state::port01_r )
{
- uint8_t ret = m_term_data;
- m_term_data = 0;
- return ret;
+ m_uart->set_input_pin(AY31015_RDAV, 0);
+ u8 result = m_uart->get_received_data();
+ m_uart->set_input_pin(AY31015_RDAV, 1);
+ return result;
}
// 0x40 - a keystroke is available
// 0x80 - ok to send to terminal
-READ8_MEMBER( mcb216_state::status_r )
+READ8_MEMBER( mcb216_state::port00_r )
{
- return (m_term_data) ? 0xc0 : 0x80;
+ return (m_uart->get_output_pin(AY31015_DAV) << 6) | (m_uart->get_output_pin(AY31015_TBMT) << 7);
}
-void mcb216_state::kbd_put(u8 data)
+WRITE8_MEMBER( mcb216_state::port01_w )
{
- m_term_data = data;
+ m_uart->set_transmit_data(data);
}
MACHINE_RESET_MEMBER( mcb216_state, mcb216 )
{
- m_term_data = 0;
+ m_uart->set_input_pin(AY31015_XR, 0);
+ m_uart->set_input_pin(AY31015_XR, 1);
+ m_uart->set_input_pin(AY31015_SWE, 0);
+ m_uart->set_input_pin(AY31015_NP, 1);
+ m_uart->set_input_pin(AY31015_TSB, 0);
+ m_uart->set_input_pin(AY31015_NB1, 1);
+ m_uart->set_input_pin(AY31015_NB2, 1);
+ m_uart->set_input_pin(AY31015_EPS, 1);
+ m_uart->set_input_pin(AY31015_CS, 1);
+ m_uart->set_input_pin(AY31015_CS, 0);
}
MACHINE_RESET_MEMBER( mcb216_state, cb308 )
{
- m_term_data = 0;
+ m_uart->set_input_pin(AY31015_XR, 0);
+ m_uart->set_input_pin(AY31015_XR, 1);
+ m_uart->set_input_pin(AY31015_SWE, 0);
+ m_uart->set_input_pin(AY31015_NP, 1);
+ m_uart->set_input_pin(AY31015_TSB, 0);
+ m_uart->set_input_pin(AY31015_NB1, 1);
+ m_uart->set_input_pin(AY31015_NB2, 1);
+ m_uart->set_input_pin(AY31015_EPS, 1);
+ m_uart->set_input_pin(AY31015_CS, 1);
+ m_uart->set_input_pin(AY31015_CS, 0);
m_maincpu->set_state_int(Z80_PC, 0xe000);
}
@@ -121,8 +139,12 @@ static MACHINE_CONFIG_START( mcb216 )
MCFG_MACHINE_RESET_OVERRIDE(mcb216_state, mcb216)
/* video hardware */
- MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0)
- MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(mcb216_state, kbd_put))
+ MCFG_DEVICE_ADD("uart", AY51013, 0) // exact uart type is unknown
+ MCFG_AY51013_TX_CLOCK(153600)
+ MCFG_AY51013_RX_CLOCK(153600)
+ 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_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( cb308 )
@@ -133,8 +155,12 @@ static MACHINE_CONFIG_START( cb308 )
MCFG_MACHINE_RESET_OVERRIDE(mcb216_state, cb308)
/* video hardware */
- MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0)
- MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(mcb216_state, kbd_put))
+ MCFG_DEVICE_ADD("uart", AY51013, 0) // exact uart type is unknown
+ MCFG_AY51013_TX_CLOCK(153600)
+ MCFG_AY51013_RX_CLOCK(153600)
+ 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_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
MACHINE_CONFIG_END
/* ROM definition */
@@ -155,5 +181,5 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 1979, mcb216, 0, 0, mcb216, mcb216, mcb216_state, 0, "Cromemco", "MCB-216", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
-COMP( 1977, cb308, mcb216, 0, cb308, mcb216, mcb216_state, 0, "Cromemco", "CB-308", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
+COMP( 1979, mcb216, 0, 0, mcb216, mcb216, mcb216_state, 0, "Cromemco", "MCB-216", MACHINE_NO_SOUND_HW )
+COMP( 1977, cb308, mcb216, 0, cb308, mcb216, mcb216_state, 0, "Cromemco", "CB-308", MACHINE_NO_SOUND_HW )
diff --git a/src/mame/drivers/micral.cpp b/src/mame/drivers/micral.cpp
index 8bdbf298539..8d7f448c906 100644
--- a/src/mame/drivers/micral.cpp
+++ b/src/mame/drivers/micral.cpp
@@ -401,9 +401,9 @@ static MACHINE_CONFIG_START( micral )
MCFG_DEVICE_ADD("uart", AY51013, 0) // CDP6402
MCFG_AY51013_TX_CLOCK(153600)
MCFG_AY51013_RX_CLOCK(153600)
- MCFG_AY51013_READ_SI_CB(DEVREADLINE("rs232a", rs232_port_device, rxd_r))
- MCFG_AY51013_WRITE_SO_CB(DEVWRITELINE("rs232a", rs232_port_device, write_txd))
- MCFG_RS232_PORT_ADD("rs232a", default_rs232_devices, "keyboard")
+ 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_RS232_PORT_ADD("rs232", default_rs232_devices, "keyboard")
MACHINE_CONFIG_END
ROM_START( micral )
diff --git a/src/mame/drivers/octopus.cpp b/src/mame/drivers/octopus.cpp
index 3d2a2d1d436..32ee708fd26 100644
--- a/src/mame/drivers/octopus.cpp
+++ b/src/mame/drivers/octopus.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Barry Rodewald, Robbbert
+// copyright-holders:Barry Rodewald
/***************************************************************************
Hilger Analytical AB6089 Mk. 1 (LSI Octopus)
diff --git a/src/mame/drivers/univac.cpp b/src/mame/drivers/univac.cpp
index 1055248b75b..7a00216b9f0 100644
--- a/src/mame/drivers/univac.cpp
+++ b/src/mame/drivers/univac.cpp
@@ -103,14 +103,14 @@ WRITE8_MEMBER( univac_state::vram_w )
}
-static ADDRESS_MAP_START(uts20_mem, AS_PROGRAM, 8, univac_state)
+static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, univac_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE( 0x0000, 0x4fff ) AM_ROM AM_REGION("roms", 0)
AM_RANGE( 0x8000, 0xbfff ) AM_READWRITE(vram_r,vram_w)
AM_RANGE( 0xc000, 0xffff ) AM_RAM AM_SHARE("videoram")
ADDRESS_MAP_END
-static ADDRESS_MAP_START( uts20_io, AS_IO, 8, univac_state)
+static ADDRESS_MAP_START( io_map, AS_IO, 8, univac_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("uart", z80sio_device, cd_ba_r, cd_ba_w)
@@ -185,9 +185,9 @@ static const z80_daisy_config daisy_chain[] =
static MACHINE_CONFIG_START( uts20 )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz) // unknown clock
- MCFG_CPU_PROGRAM_MAP(uts20_mem)
- MCFG_CPU_IO_MAP(uts20_io)
+ MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz) // unknown clock
+ MCFG_CPU_PROGRAM_MAP(mem_map)
+ MCFG_CPU_IO_MAP(io_map)
MCFG_Z80_DAISY_CHAIN(daisy_chain)
/* video hardware */