summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mccpm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mccpm.cpp')
-rw-r--r--src/mame/drivers/mccpm.cpp103
1 files changed, 37 insertions, 66 deletions
diff --git a/src/mame/drivers/mccpm.cpp b/src/mame/drivers/mccpm.cpp
index 03003623456..a56ba8a2002 100644
--- a/src/mame/drivers/mccpm.cpp
+++ b/src/mame/drivers/mccpm.cpp
@@ -19,93 +19,51 @@ Z - print 'EFFF'
URL for v3.4: http://www.hanshehl.de/mc-prog.htm (German language)
-I/O ports (my guess)
+unknown I/O ports (my guess)
30 - fdc (1st drive)
40 - fdc (2nd drive)
-F0 - terminal in/out
-F1 - terminal status
-
-SIO? - F0 to F3
-PIO A-Data 0F4h, A-Command 0F5h, B-Data 0F6h, B-Command 0F7h
-
-'maincpu' (F59C): unmapped i/o memory write to 00F1 = 01 & FF
-'maincpu' (F59C): unmapped i/o memory write to 00F1 = 00 & FF
-'maincpu' (F59C): unmapped i/o memory write to 00F1 = 03 & FF
-'maincpu' (F59C): unmapped i/o memory write to 00F1 = E1 & FF
-'maincpu' (F59C): unmapped i/o memory write to 00F1 = 04 & FF
-'maincpu' (F59C): unmapped i/o memory write to 00F1 = 4C & FF
-'maincpu' (F59C): unmapped i/o memory write to 00F1 = 05 & FF
-'maincpu' (F59C): unmapped i/o memory write to 00F1 = EA & FF
-'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 01 & FF
-'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 00 & FF
-'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 03 & FF
-'maincpu' (F5A5): unmapped i/o memory write to 00F3 = E1 & FF
-'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 04 & FF
-'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 4C & FF
-'maincpu' (F5A5): unmapped i/o memory write to 00F3 = 05 & FF
-'maincpu' (F5A5): unmapped i/o memory write to 00F3 = EA & FF
-'maincpu' (F5A9): unmapped i/o memory write to 00F5 = CF & FF
-'maincpu' (F5AD): unmapped i/o memory write to 00F5 = 7F & FF
-'maincpu' (F5B1): unmapped i/o memory write to 00F7 = CF & FF
-'maincpu' (F5B4): unmapped i/o memory write to 00F7 = 00 & FF
-'maincpu' (F149): unmapped i/o memory write to 0040 = D0 & FF
-'maincpu' (F14B): unmapped i/o memory write to 0030 = D0 & FF
+
****************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "machine/terminal.h"
+#include "machine/z80pio.h"
+#include "machine/z80sio.h"
+#include "machine/clock.h"
+#include "bus/rs232/rs232.h"
-#define TERMINAL_TAG "terminal"
class mccpm_state : public driver_device
{
public:
mccpm_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_terminal(*this, TERMINAL_TAG),
- m_p_ram(*this, "p_ram")
- {
- }
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_p_ram(*this, "ram")
+ , m_sio(*this, "sio")
+ { }
+
+ DECLARE_WRITE_LINE_MEMBER(clock_tick);
+private:
+ virtual void machine_reset() override;
required_device<cpu_device> m_maincpu;
- required_device<generic_terminal_device> m_terminal;
- DECLARE_READ8_MEMBER(mccpm_f0_r);
- DECLARE_READ8_MEMBER(mccpm_f1_r);
- void kbd_put(u8 data);
required_shared_ptr<uint8_t> m_p_ram;
- uint8_t m_term_data;
- virtual void machine_reset() override;
+ required_device<z80sio_device> m_sio;
};
-
-READ8_MEMBER( mccpm_state::mccpm_f0_r )
-{
- uint8_t ret = m_term_data;
- m_term_data = 0;
- return ret;
-}
-
-// bit 0 - key pressed
-// bit 2 - ready to send to terminal
-READ8_MEMBER( mccpm_state::mccpm_f1_r )
-{
- return (m_term_data) ? 5 : 4;
-}
-
static ADDRESS_MAP_START(mccpm_mem, AS_PROGRAM, 8, mccpm_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0xffff) AM_RAM AM_SHARE("p_ram")
+ AM_RANGE(0x0000, 0xffff) AM_RAM AM_SHARE("ram")
ADDRESS_MAP_END
static ADDRESS_MAP_START( mccpm_io, AS_IO, 8, mccpm_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0xf0, 0xf0) AM_READ(mccpm_f0_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write)
- AM_RANGE(0xf1, 0xf1) AM_READ(mccpm_f1_r)
+ AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE("sio", z80sio_device, ba_cd_r, ba_cd_w)
+ AM_RANGE(0xf4, 0xf7) AM_DEVREADWRITE("pio", z80pio_device, read_alt, write_alt) // init bytes look like those for a Z80PIO
ADDRESS_MAP_END
/* Input ports */
@@ -119,9 +77,10 @@ void mccpm_state::machine_reset()
memcpy(m_p_ram, bios, 0x1000);
}
-void mccpm_state::kbd_put(u8 data)
+WRITE_LINE_MEMBER( mccpm_state::clock_tick )
{
- m_term_data = data;
+ m_sio->txca_w(state);
+ m_sio->rxca_w(state);
}
static MACHINE_CONFIG_START( mccpm )
@@ -130,9 +89,21 @@ static MACHINE_CONFIG_START( mccpm )
MCFG_CPU_PROGRAM_MAP(mccpm_mem)
MCFG_CPU_IO_MAP(mccpm_io)
- /* video hardware */
- MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
- MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(mccpm_state, kbd_put))
+ /* Devices */
+ MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600)
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(mccpm_state, clock_tick))
+
+ MCFG_Z80SIO_ADD("sio", XTAL_4MHz, 0, 0, 0, 0)
+ MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+ MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd))
+ MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr))
+ MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts))
+
+ MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio", z80sio_device, rxa_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsa_w))
+
+ MCFG_DEVICE_ADD("pio", Z80PIO, XTAL_4MHz)
MACHINE_CONFIG_END
/* ROM definition */