diff options
Diffstat (limited to 'src/devices/bus/mpf1/prt.cpp')
-rw-r--r-- | src/devices/bus/mpf1/prt.cpp | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/devices/bus/mpf1/prt.cpp b/src/devices/bus/mpf1/prt.cpp new file mode 100644 index 00000000000..1962d2dcad9 --- /dev/null +++ b/src/devices/bus/mpf1/prt.cpp @@ -0,0 +1,138 @@ +// license:BSD-3-Clause +// copyright-holders:Nigel Barnes +/*************************************************************************** + + Multitech Printer + + PRT-MPF : + Printer driver utility : ADDR 65AC GO + Z80-Disassembler listing utility : ADDR 6000 GO + Memory dump utility : ADDR 6300 GO + BASIC program listing utility : ADDR 6400 GO + Printer line feed : ADDR 6500 GO + + PRT-MPF-IP : Address Mnemonic Function + 6A00 SHIFT Drive the thermal head shift right + 6A10 PLINEFD Line feed + 6A30 PLINE Drive the paper vertically by two lines + 6A40 MTPPRT Print out the contents of the line buffer + +***************************************************************************/ + +#include "emu.h" +#include "prt.h" +#include "bus/generic/carts.h" +#include "bus/generic/slot.h" + + +namespace { + +//------------------------------------------------- +// rom_region - device-specific ROM region +//------------------------------------------------- + +ROM_START( mpf_prt ) + ROM_REGION(0x1000, "u5", 0) + ROM_LOAD("prt-ib.u5", 0x0000, 0x1000, CRC(730f2fb0) SHA1(f31536ee9dbb9babb9ce16a7490db654ca0b5749)) +ROM_END + +ROM_START( mpf_prt_ip ) + ROM_REGION(0x1000, "u5", 0) + ROM_LOAD("prt-ip_v1.1.u5", 0x0000, 0x1000, CRC(4dd2a4eb) SHA1(6a3e7daa7834d67fd572261ed4a9a62c4594fe3f)) +ROM_END + + +//------------------------------------------------- +// mpf_prt_device - constructor +//------------------------------------------------- + +class mpf_prt_device : public device_t, public device_mpf1_exp_interface +{ +public: + static constexpr feature_type unemulated_features() { return feature::PRINTER; } + + mpf_prt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : mpf_prt_device(mconfig, MPF_PRT, tag, owner, clock) + { + } + +protected: + mpf_prt_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) + , device_mpf1_exp_interface(mconfig, *this) + , m_rom_u5(*this, "u5") + , m_rom_u6(*this, "u6") + { + } + + virtual void device_add_mconfig(machine_config &config) override + { + // TODO: Seikosha MTP201A thermal printer + + GENERIC_SOCKET(config, "u6", generic_linear_slot, nullptr, "bin,rom"); + } + + virtual const tiny_rom_entry *device_rom_region() const override + { + return ROM_NAME( mpf_prt ); + } + + virtual void device_start() override { } + virtual void device_reset() override + { + program_space().install_rom(0x6000, 0x6fff, m_rom_u5->base()); + program_space().install_read_handler(0x7000, 0x7fff, emu::rw_delegate(*m_rom_u6, FUNC(generic_slot_device::read_rom))); + + io_space().install_write_handler(0xca, 0xca, emu::rw_delegate(*this, FUNC(mpf_prt_device::prt_w))); + io_space().install_read_handler(0xcb, 0xcb, emu::rw_delegate(*this, FUNC(mpf_prt_device::prt_r))); + } + +private: + required_memory_region m_rom_u5; + required_device<generic_slot_device> m_rom_u6; + + uint8_t prt_r() + { + uint8_t data = 0x00; + + // bit 0 TGP + // bit 1 HP + + return data; + } + + void prt_w(uint8_t data) + { + // bit 0 TH7 + // bit 1 TH6 + // bit 2 TH5 + // bit 3 TH4 + // bit 4 TH3 + // bit 5 TH2 + // bit 6 TH1 + // bit 7 MOTOR + } +}; + + +class mpf_prt_ip_device : public mpf_prt_device +{ +public: + mpf_prt_ip_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : mpf_prt_device(mconfig, MPF_PRT_IP, tag, owner, clock) + { + } + +protected: + virtual const tiny_rom_entry *device_rom_region() const override + { + return ROM_NAME( mpf_prt_ip ); + } + +}; + +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(MPF_PRT, device_mpf1_exp_interface, mpf_prt_device, "mpf1_prt", "Multitech PRT-MPF (Printer)") +DEFINE_DEVICE_TYPE_PRIVATE(MPF_PRT_IP, device_mpf1_exp_interface, mpf_prt_ip_device, "mpf1_prt_ip", "Multitech PRT-MPF-IP (Printer)") |