summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/microdec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/microdec.cpp')
-rw-r--r--src/mame/drivers/microdec.cpp267
1 files changed, 0 insertions, 267 deletions
diff --git a/src/mame/drivers/microdec.cpp b/src/mame/drivers/microdec.cpp
deleted file mode 100644
index 2e2cccb2c39..00000000000
--- a/src/mame/drivers/microdec.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Miodrag Milanovic, Robbbert
-/**********************************************************************************************
-
-Morrow Designs Micro Decision
-
-2009-12-10 Skeleton driver.
-
-Although it looks like an ordinary CP/M computer, the monitor and keyboard are actually a
-dumb terminal plugged into the base unit. Therefore the roms and details of the terminal are
-needed.
-
-Board design changes depending on bios version of base unit:
-In earliest design, F7 sets up VFO and F8 selects motor on, while fdc does drive select.
-Later version gets rid of these, and F7 now does motor on and drive select; also addition of
-i8253 timer, a centronics port, and a diagnostic jumper. F8 is unused.
-
-Currently (as at 2016-07-17), memory test works, rom banking works, disk does NOT boot.
-Ver 1 roms say "Not found", Ver 2 roms hang after pressing enter, Ver 3 rom hangs after memory test.
-
-ToDo:
-- Make the floppy boot
-- Add i8253 timer chip
-- Add centronics parts
-- Different hardware for different bios versions (only earliest design is coded)
-
-***********************************************************************************************/
-
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "imagedev/floppy.h"
-#include "machine/upd765.h"
-#include "machine/clock.h"
-#include "machine/i8251.h"
-#include "bus/rs232/rs232.h"
-#include "softlist.h"
-
-
-class microdec_state : public driver_device
-{
-public:
- microdec_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_fdc(*this, "fdc")
- , m_floppy0(*this, "fdc:0")
- , m_floppy(nullptr)
- { }
-
- void microdec(machine_config &config);
-
- void init_microdec();
-
-private:
- DECLARE_READ8_MEMBER(portf5_r);
- DECLARE_READ8_MEMBER(portf6_r);
- DECLARE_WRITE8_MEMBER(portf6_w);
- DECLARE_READ8_MEMBER(portf7_r);
- DECLARE_WRITE8_MEMBER(portf7_w);
- DECLARE_WRITE8_MEMBER(portf8_w);
-
- void microdec_io(address_map &map);
- void microdec_mem(address_map &map);
-
- uint8_t m_portf8;
- bool m_fdc_rdy;
- virtual void machine_reset() override;
- virtual void machine_start() override;
- required_device<cpu_device> m_maincpu;
- required_device<upd765a_device> m_fdc;
- required_device<floppy_connector> m_floppy0;
- floppy_image_device *m_floppy;
-};
-
-
-/*
-d0-2 : motor on signals from f8
-d3 : ack (cent)
-d4 : ready (fdd)
-d5 : diag jumper (md3 only) */
-READ8_MEMBER( microdec_state::portf5_r )
-{
- m_fdc->set_ready_line_connected(m_fdc_rdy);
-
- uint8_t data = m_portf8 | ioport("DIAG")->read() | 0xc0;
- return data;
-}
-
-// disable eprom
-READ8_MEMBER( microdec_state::portf6_r )
-{
- membank("bankr0")->set_entry(0); // point at ram
- return 0xff;
-}
-
-// TC pin on fdc
-READ8_MEMBER( microdec_state::portf7_r )
-{
- m_fdc->tc_w(1);
- m_fdc->tc_w(0);
- return 0xff;
-}
-
-// enable eprom
-WRITE8_MEMBER( microdec_state::portf6_w )
-{
- membank("bankr0")->set_entry(1); // point at rom
-}
-
-// sets up VFO stuff
-WRITE8_MEMBER( microdec_state::portf7_w )
-{
- m_fdc_rdy = BIT(data,2);
-}
-
-/*
-d0-2 : motor on for drive sockets
-d3 : precomp */
-WRITE8_MEMBER( microdec_state::portf8_w )
-{
- m_portf8 = data & 7;
- /* code for motor on per drive goes here */
- m_floppy = m_floppy0->get_device();
- m_fdc->set_floppy(m_floppy);
-
- if (m_floppy)
- m_floppy->mon_w(0);
-}
-
-void microdec_state::microdec_mem(address_map &map)
-{
- map.unmap_value_high();
- map(0x0000, 0x0fff).bankr("bankr0").bankw("bankw0");
- map(0x1000, 0xffff).ram();
-}
-
-void microdec_state::microdec_io(address_map &map)
-{
- map.unmap_value_high();
- map.global_mask(0xff);
- map(0xf5, 0xf5).r(FUNC(microdec_state::portf5_r));
- map(0xf6, 0xf6).rw(FUNC(microdec_state::portf6_r), FUNC(microdec_state::portf6_w));
- map(0xf7, 0xf7).rw(FUNC(microdec_state::portf7_r), FUNC(microdec_state::portf7_w));
- map(0xf8, 0xf8).w(FUNC(microdec_state::portf8_w));
- map(0xfa, 0xfb).m(m_fdc, FUNC(upd765a_device::map));
- map(0xfc, 0xfd).rw("uart1", FUNC(i8251_device::read), FUNC(i8251_device::write));
- map(0xfe, 0xff).rw("uart2", FUNC(i8251_device::read), FUNC(i8251_device::write));
- // map(0xf0, 0xf3) 8253 PIT (md3 only) used as a baud rate generator for serial ports
- // map(0xf4, 0xf4) Centronics data
- // map(0xf5, 0xf5) motor check (md1/2)
- // map(0xf5, 0xf5) Centronics status (md3) read bit 3 (ack=1); read bit 4 (busy=1); write bit 7 (stb=0)
- // map(0xf6, 0xf6) rom enable (w=enable; r=disable)
- // map(0xf7, 0xf7) VFO Count set
- // map(0xf8, 0xf8) Motor and Shift control
- // map(0xfa, 0xfb) uPD765C fdc FA=status; FB=data
- // map(0xfc, 0xfd) Serial Port 1 (terminal) FC=data FD=status
- // map(0xfe, 0xff) Serial Port 2 (printer) FE=data FF=status
-}
-
-/* Input ports */
-static INPUT_PORTS_START( microdec )
- PORT_START("DIAG")
- PORT_DIPNAME( 0x20, 0x20, "Diagnostics" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-INPUT_PORTS_END
-
-void microdec_state::machine_start()
-{
-}
-
-void microdec_state::machine_reset()
-{
- membank("bankr0")->set_entry(1); // point at rom
- membank("bankw0")->set_entry(0); // always write to ram
- m_maincpu->set_input_line_vector(0, 0x7f); // Z80
-}
-
-static void microdec_floppies(device_slot_interface &device)
-{
- device.option_add("525hd", FLOPPY_525_HD);
-}
-
-void microdec_state::init_microdec()
-{
- uint8_t *main = memregion("maincpu")->base();
-
- membank("bankr0")->configure_entry(1, &main[0x0000]);
- membank("bankr0")->configure_entry(0, &main[0x1000]);
- membank("bankw0")->configure_entry(0, &main[0x1000]);
- m_fdc->set_ready_line_connected(1);
- m_fdc->set_unscaled_clock(4000000); // 4MHz for minifloppy
-}
-
-void microdec_state::microdec(machine_config &config)
-{
- /* basic machine hardware */
- Z80(config, m_maincpu, 16_MHz_XTAL / 4);
- m_maincpu->set_addrmap(AS_PROGRAM, &microdec_state::microdec_mem);
- m_maincpu->set_addrmap(AS_IO, &microdec_state::microdec_io);
-
- /* video hardware */
- clock_device &uart_clock(CLOCK(config, "uart_clock", 153600));
- uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc));
- uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc));
- uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc));
- uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc));
-
- i8251_device &uart1(I8251(config, "uart1", 0));
- uart1.txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd));
- uart1.dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr));
- uart1.rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts));
-
- rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal"));
- rs232a.rxd_handler().set("uart1", FUNC(i8251_device::write_rxd));
- rs232a.dsr_handler().set("uart1", FUNC(i8251_device::write_dsr));
- rs232a.cts_handler().set("uart1", FUNC(i8251_device::write_cts));
-
- i8251_device &uart2(I8251(config, "uart2", 0));
- uart2.txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd));
- uart2.dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr));
- uart2.rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts));
-
- rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr));
- rs232b.rxd_handler().set("uart2", FUNC(i8251_device::write_rxd));
- rs232b.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr));
- rs232b.cts_handler().set("uart2", FUNC(i8251_device::write_cts));
-
- UPD765A(config, m_fdc, 8'000'000, true, true);
- m_fdc->intrq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- FLOPPY_CONNECTOR(config, "fdc:0", microdec_floppies, "525hd", floppy_image_device::default_floppy_formats).enable_sound(true);
- //FLOPPY_CONNECTOR(config, "fdc:1", microdec_floppies, "525hd", floppy_image_device::default_floppy_formats).enable_sound(true);
-
- // software lists
- SOFTWARE_LIST(config, "flop_list").set_original("md2_flop");
-}
-
-/* ROM definition */
-ROM_START( md2 )
- ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASEFF )
- ROM_SYSTEM_BIOS( 0, "v13", "v1.3" )
- ROMX_LOAD("md2-13.bin", 0x0000, 0x0800, CRC(43f4c9ab) SHA1(48a35cbee4f341310e9cba5178c3fd6e74ef9748), ROM_BIOS(0))
- ROM_SYSTEM_BIOS( 1, "v13a", "v1.3a" )
- ROMX_LOAD("md2-13a.bin", 0x0000, 0x0800, CRC(d7fcddfd) SHA1(cae29232b737ebb36a27b8ad17bc69e9968f1309), ROM_BIOS(1))
- ROM_SYSTEM_BIOS( 2, "v13b", "v1.3b" )
- ROMX_LOAD("md2-13b.bin", 0x0000, 0x1000, CRC(a8b96835) SHA1(c6b111939aa7e725da507da1915604656540b24e), ROM_BIOS(2))
- ROM_SYSTEM_BIOS( 3, "v20", "v2.0" )
- ROMX_LOAD("md2-20.bin", 0x0000, 0x1000, CRC(a604735c) SHA1(db6e6e82a803f5cbf4f628f5778a93ae3e211fe1), ROM_BIOS(3))
- ROM_SYSTEM_BIOS( 4, "v23", "v2.3" )
- ROMX_LOAD("md2-23.bin", 0x0000, 0x1000, CRC(49bae273) SHA1(00381a226fe250aa3636b0b740df0af63efb0d18), ROM_BIOS(4))
-ROM_END
-
-ROM_START( md3 )
- ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASEFF )
- ROM_SYSTEM_BIOS( 0, "v23a", "v2.3a" )
- ROMX_LOAD("md3-23a.bin", 0x0000, 0x1000, CRC(95d59980) SHA1(ae65a8e8e2823cf4cf6b1d74c0996248e290e9f1), ROM_BIOS(0))
- ROM_SYSTEM_BIOS( 1, "v25", "v2.5" )
- ROMX_LOAD("md3-25.bin", 0x0000, 0x1000, CRC(14f86bc5) SHA1(82fe022c85f678744bb0340ca3f88b18901fdfcb), ROM_BIOS(1))
- ROM_SYSTEM_BIOS( 2, "v31", "v3.1" )
- ROMX_LOAD("md3-31.bin", 0x0000, 0x1000, CRC(bd4014f6) SHA1(5b33220af34c64676756177db4915f97840b2996), ROM_BIOS(2))
-ROM_END
-
-/* Driver */
-
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1982, md2, 0, 0, microdec, microdec, microdec_state, init_microdec, "Morrow Designs", "Micro Decision MD-2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
-COMP( 1982, md3, md2, 0, microdec, microdec, microdec_state, init_microdec, "Morrow Designs", "Micro Decision MD-3", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )