summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine
diff options
context:
space:
mode:
author David Haywood <mamehaze@users.noreply.github.com>2015-07-22 02:15:33 +0100
committer David Haywood <mamehaze@users.noreply.github.com>2015-07-22 02:15:33 +0100
commite147f99abe9806bfaf24db85838cc5ca99161b6a (patch)
treefd8baab7727a68288ab269493464bab8e217144b /src/emu/machine
parent4cb49c86e40adf9ca02779a4c29717ad3d13fb32 (diff)
parentbb9f5a3e15d01669f118803023d739fc3d040d62 (diff)
Merge pull request #264 from JoakimLarsson/force68k
Force68k
Diffstat (limited to 'src/emu/machine')
-rw-r--r--src/emu/machine/68230pit.c175
-rw-r--r--src/emu/machine/68230pit.h75
2 files changed, 250 insertions, 0 deletions
diff --git a/src/emu/machine/68230pit.c b/src/emu/machine/68230pit.c
new file mode 100644
index 00000000000..9c99baa4f16
--- /dev/null
+++ b/src/emu/machine/68230pit.c
@@ -0,0 +1,175 @@
+// license:BSD-3-Clause
+// copyright-holders:Joakim Larsson Edström
+/**********************************************************************
+
+ Motorola MC68230 PI/T Parallell Interface and Timer
+
+Revisions
+ 2015-07-15 JLE initial
+
+Todo
+ - Add clock and timers
+ - Add all missing registers
+ - Add configuration
+**********************************************************************/
+
+/*
+Force CPU-1 init sequence
+0801EA 0E0000 W 0000 PGCR data_w: 0000 -> 0000 & 00ff
+0801EA 0E0002 W 0000 PSRR data_w: 0000 -> 0001 & 00ff
+0801EA 0E0004 W FFFF PADDR data_w: 00ff -> 0002 & 00ff
+0801EA 0E0006 W 0000 PBDDR data_w: 0000 -> 0003 & 00ff
+0801F0 0E000C W 6060 PACR data_w: 0060 -> 0006 & 00ff
+0801F6 0E000E W A0A0 PBCR data_w: 00a0 -> 0007 & 00ff
+0801FC 0E0000 W 3030 PGCR data_w: 0030 -> 0000 & 00ff
+080202 0E000E W A8A8 PBCR data_w: 00a8 -> 0007 & 00ff
+080210 0E000E W A0A0 PBCR data_w: 00a0 -> 0007 & 00ff
+
+Force CPU-1 after one keypress in terminal
+081DC0 0E000C W 6868 PACR
+081DC8 0E000C W 6060 PACR
+*/
+
+
+#include "emu.h"
+#include "68230pit.h"
+
+/***************************************************************************
+ IMPLEMENTATION
+***************************************************************************/
+
+// device type definition
+const device_type PIT68230 = &device_creator<pit68230_device>;
+
+//-------------------------------------------------
+// pit68230_device - constructor
+//-------------------------------------------------
+
+pit68230_device::pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, PIT68230, "Motorola 68230 PI/T", tag, owner, clock, "pit68230", __FILE__)
+{
+}
+
+void pit68230_device::device_start()
+{
+ printf("PIT68230 device started\n");
+}
+
+void pit68230_device::device_reset()
+{
+ printf("PIT68230 device reseted\n");
+ m_pgcr = 0;
+ m_psrr = 0;
+ m_paddr = 0;
+ m_pbddr = 0;
+ m_pcddr = 0;
+ m_pacr = 0;
+ m_pbcr = 0;
+ m_padr = 0;
+ m_pbdr = 0;
+ m_psr = 0;
+}
+
+WRITE8_MEMBER( pit68230_device::data_w )
+{
+ printf("data_w: %04x -> ", data);
+ switch (offset)
+ {
+ case PIT_68230_PGCR:
+ printf("PGCR");
+ m_pgcr = data;
+ break;
+ case PIT_68230_PSRR:
+ printf("PSRR");
+ m_psrr = data;
+ break;
+ case PIT_68230_PADDR:
+ printf("PADDR");
+ m_paddr = data;
+ break;
+ case PIT_68230_PBDDR:
+ printf("PBDDR");
+ m_pbddr = data;
+ break;
+ case PIT_68230_PACR:
+ printf("PACR");
+ m_pacr = data;
+ break;
+ case PIT_68230_PBCR:
+ printf("PBCR");
+ m_pbcr = data;
+ break;
+ case PIT_68230_PADR:
+ printf("PADR");
+ m_padr = data;
+ break;
+ case PIT_68230_PSR:
+ printf("PSR");
+ m_padr = data;
+ break;
+ default:
+ printf("unhandled register %02x", offset);
+ }
+ printf("\n");
+}
+
+READ8_MEMBER( pit68230_device::data_r )
+{
+ UINT8 data = 0;
+
+ printf("data_r: ");
+ switch (offset)
+ {
+ case PIT_68230_PGCR:
+ printf("PGCR");
+ data = m_pgcr;
+ break;
+ case PIT_68230_PSRR:
+ printf("PSRR");
+ data = m_psrr;
+ break;
+ case PIT_68230_PADDR:
+ printf("PADDR");
+ data = m_paddr;
+ break;
+ case PIT_68230_PBDDR:
+ printf("PBDDR");
+ data = m_pbddr;
+ break;
+ case PIT_68230_PACR:
+ printf("PACR");
+ data = m_pacr;
+ break;
+ case PIT_68230_PBCR:
+ printf("PBCR");
+ data = m_pbcr;
+ break;
+ case PIT_68230_PADR:
+ printf("PADR");
+ data = m_padr;
+ break;
+ case PIT_68230_PBDR:
+ /* 4.6.2. PORT B DATA REGISTER (PBDR). The port B data register is a holding register for moving data
+to and from port B pins. The port B data direction register determines whether each pin is an input (zero)
+or an output (one). This register is readable and writable at all times. Depending on the chosen mode/submode,
+reading or writing may affect the double-buffered handshake mechanism. The port B data register is not affected
+by the assertion of the RESET pin. PB0-PB7 sits on pins 17-24 on a 48 pin DIP package */
+ printf("PBDR");
+ data = m_pbdr;
+ // data = (m_pbdr & 0xfc) | 1; // CPU-1 centronics interface expects to see 2 lowest bits equal 1 for printer
+ break;
+ case PIT_68230_PSR:
+ printf("PSR");
+ data = m_psr;
+ // data = m_psr | 1; // CPU-1 centronics interface expects status to be non zero
+ break;
+ default:
+ printf("unhandled register %02x", offset);
+ data = 0;
+ }
+ printf("\n");
+
+ return data;
+}
+
+
diff --git a/src/emu/machine/68230pit.h b/src/emu/machine/68230pit.h
new file mode 100644
index 00000000000..b299ca868f9
--- /dev/null
+++ b/src/emu/machine/68230pit.h
@@ -0,0 +1,75 @@
+// license:BSD-3-Clause
+// copyright-holders:Joakim Larsson Edström
+/**********************************************************************
+
+ Motorola MC68230 PI/T Parallell Interface and Timer
+
+**********************************************************************/
+#pragma once
+
+#ifndef __68230PIT_H__
+#define __68230PIT_H__
+
+#include "emu.h"
+
+/*-----------------------------------------------------------------------
+ Registers RS1-RS5 R/W Description
+-------------------------------------------------------------------------*/
+#define PIT_68230_PGCR 0x00 /* RW Port General Control register */
+#define PIT_68230_PSRR 0x01 /* RW Port Service Request register */
+#define PIT_68230_PADDR 0x02 /* RW Port A Data Direction register */
+#define PIT_68230_PBDDR 0x03 /* RW Port B Data Direction register */
+#define PIT_68230_PCDDR 0x04 /* RW Port C Data Direction register */
+#define PIT_68230_PIVR 0x05 /* RW Port Interrupt vector register */
+#define PIT_68230_PACR 0x06 /* RW Port A Control register */
+#define PIT_68230_PBCR 0x07 /* RW Port B Control register */
+#define PIT_68230_PADR 0x08 /* RW Port A Data register */
+#define PIT_68230_PBDR 0x09 /* RW Port B Data register */
+#define PIT_68230_PAAR 0x0a /* RO Port A Alternate register */
+#define PIT_68230_PBAR 0x0b /* RO Port B Alternate register */
+#define PIT_68230_PCDR 0x0c /* RW Port C Data register */
+#define PIT_68230_PSR 0x0d /* RW Port Status register */
+#define PIT_68230_TCR 0x10 /* RW Timer Control Register */
+#define PIT_68230_TIVR 0x11 /* RW Timer Interrupt Vector Register */
+#define PIT_68230_CPRH 0x13 /* RW Counter Preload Register High */
+#define PIT_68230_CPRM 0x14 /* RW Counter Preload Register Middle */
+#define PIT_68230_CPRL 0x15 /* RW Counter Preload Register Low */
+#define PIT_68230_CNTRH 0x17 /* RO Counter Register High */
+#define PIT_68230_CNTRM 0x18 /* RO Counter Register Middle */
+#define PIT_68230_CNTRL 0x19 /* RO Counter Register Low */
+#define PIT_68230_TSR 0x1A /* RW Timer Status Register */
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+class pit68230_device : public device_t
+{
+public:
+ // construction/destruction
+ pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ DECLARE_WRITE8_MEMBER( data_w );
+ DECLARE_READ8_MEMBER( data_r );
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ UINT8 m_pgcr; // Port General Control register
+ UINT8 m_psrr; // Port Service Request register
+ UINT8 m_paddr; // Port A Data Direction register
+ UINT8 m_pbddr; // Port B Data Direction register
+ UINT8 m_pcddr; // Port C Data Direction register
+ UINT8 m_pacr; // Port A Control register
+ UINT8 m_pbcr; // Port B Control register
+ UINT8 m_padr; // Port A Data register
+ UINT8 m_pbdr; // Port B Data register
+ UINT8 m_psr; // Port Status Register
+};
+
+
+// device type definition
+extern const device_type PIT68230;
+
+#endif // __68230PIT__