summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/codata.c
diff options
context:
space:
mode:
author Robbbert <robbbert@users.noreply.github.com>2013-08-26 12:22:26 +0000
committer Robbbert <robbbert@users.noreply.github.com>2013-08-26 12:22:26 +0000
commita6d78334e983afa1b550d8c36ea40dd4f06abf0b (patch)
treec0e4e833f25cc9afb63533fcecaada979dbbc34b /src/mess/drivers/codata.c
parentd39c370c7e84a6f5264f439cc28159fa3b674849 (diff)
(MESS) codata : added a terminal, system responds to commands. [Robbbert]
Diffstat (limited to 'src/mess/drivers/codata.c')
-rw-r--r--src/mess/drivers/codata.c79
1 files changed, 48 insertions, 31 deletions
diff --git a/src/mess/drivers/codata.c b/src/mess/drivers/codata.c
index ce7ee692c73..938a282b4e0 100644
--- a/src/mess/drivers/codata.c
+++ b/src/mess/drivers/codata.c
@@ -2,38 +2,51 @@
Contel Codata Corporation Codata
- 11/01/2010 Skeleton driver.
+ 2010-01-11 Skeleton driver.
+ 2013-08-26 Connected to a terminal.
+
+ Chips: uPD7201C, AM9513, SCN68000. Crystal: 16 MHz
****************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
+#include "machine/terminal.h"
class codata_state : public driver_device
{
public:
codata_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_p_base(*this, "p_base"),
- m_maincpu(*this, "maincpu") { }
-
- required_shared_ptr<UINT16> m_p_base;
+ : driver_device(mconfig, type, tag)
+ , m_p_base(*this, "rambase")
+ , m_terminal(*this, TERMINAL_TAG)
+ , m_maincpu(*this, "maincpu")
+ { }
+
+ DECLARE_READ16_MEMBER(keyin_r);
+ DECLARE_READ16_MEMBER(status_r);
+ DECLARE_WRITE8_MEMBER(kbd_put);
+private:
+ UINT8 m_term_data;
virtual void machine_reset();
- virtual void video_start();
- UINT32 screen_update_codata(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ required_shared_ptr<UINT16> m_p_base;
+ required_device<generic_terminal_device> m_terminal;
required_device<cpu_device> m_maincpu;
};
-
-
static ADDRESS_MAP_START(codata_mem, AS_PROGRAM, 16, codata_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x000000, 0x0fffff) AM_RAM AM_SHARE("p_base")
+ AM_RANGE(0x000000, 0x0fffff) AM_RAM AM_SHARE("rambase")
AM_RANGE(0x200000, 0x203fff) AM_ROM AM_REGION("user1", 0);
AM_RANGE(0x400000, 0x403fff) AM_ROM AM_REGION("user1", 0x4000);
- //AM_RANGE(0x600000, 0x600003) some device
- //AM_RANGE(0x800000, 0x800003) another device
+ AM_RANGE(0x600000, 0x600001) AM_READ(keyin_r) AM_DEVWRITE8(TERMINAL_TAG, generic_terminal_device, write, 0xff00)
+ AM_RANGE(0x600002, 0x600003) AM_READ(status_r)
+ //AM_RANGE(0x600000, 0x600003) uPD7201 SIO
+ //AM_RANGE(0x800000, 0x800003) AM9513 5 channel timer
+ //AM_RANGE(0xa00000, 0xbfffff) page map (rw)
+ //AM_RANGE(0xc00000, 0xdfffff) segment map (rw), context register (r)
+ //AM_RANGE(0xe00000, 0xffffff) context register (w), 16-bit parallel input port (r)
ADDRESS_MAP_END
/* Input ports */
@@ -41,20 +54,34 @@ static INPUT_PORTS_START( codata )
INPUT_PORTS_END
-void codata_state::machine_reset()
+READ16_MEMBER( codata_state::keyin_r )
{
- UINT8* RAM = memregion("user1")->base();
- memcpy(m_p_base, RAM, 16);
- m_maincpu->reset();
+ UINT16 ret = m_term_data;
+ m_term_data = 0;
+ return ret << 8;
}
-void codata_state::video_start()
+READ16_MEMBER( codata_state::status_r )
{
+ return (m_term_data) ? 0x500 : 0x400;
}
-UINT32 codata_state::screen_update_codata(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+WRITE8_MEMBER( codata_state::kbd_put )
{
- return 0;
+ m_term_data = data;
+}
+
+static GENERIC_TERMINAL_INTERFACE( terminal_intf )
+{
+ DEVCB_DRIVER_MEMBER(codata_state, kbd_put)
+};
+
+void codata_state::machine_reset()
+{
+ UINT8* RAM = memregion("user1")->base();
+ memcpy(m_p_base, RAM, 16);
+ m_term_data = 0;
+ m_maincpu->reset();
}
static MACHINE_CONFIG_START( codata, codata_state )
@@ -62,18 +89,8 @@ static MACHINE_CONFIG_START( codata, codata_state )
MCFG_CPU_ADD("maincpu",M68000, XTAL_16MHz / 2)
MCFG_CPU_PROGRAM_MAP(codata_mem)
-
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(640, 480)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
- MCFG_SCREEN_UPDATE_DRIVER(codata_state, screen_update_codata)
-
- MCFG_PALETTE_LENGTH(2)
- MCFG_PALETTE_INIT_OVERRIDE(driver_device, black_and_white)
-
+ MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
MACHINE_CONFIG_END
/* ROM definition */