diff options
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 |
commit | e147f99abe9806bfaf24db85838cc5ca99161b6a (patch) | |
tree | fd8baab7727a68288ab269493464bab8e217144b /src/emu/machine | |
parent | 4cb49c86e40adf9ca02779a4c29717ad3d13fb32 (diff) | |
parent | bb9f5a3e15d01669f118803023d739fc3d040d62 (diff) |
Merge pull request #264 from JoakimLarsson/force68k
Force68k
Diffstat (limited to 'src/emu/machine')
-rw-r--r-- | src/emu/machine/68230pit.c | 175 | ||||
-rw-r--r-- | src/emu/machine/68230pit.h | 75 |
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__ |