From 8519af54deb499aacf904794cf0250b31567fa21 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sat, 12 Jun 2021 18:14:26 +1000 Subject: meritum2: added centronics printer from PR #5854. --- src/mame/drivers/meritum.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/meritum.cpp b/src/mame/drivers/meritum.cpp index 259b3415a93..2fa3ff09bf6 100644 --- a/src/mame/drivers/meritum.cpp +++ b/src/mame/drivers/meritum.cpp @@ -56,6 +56,7 @@ For Model III: #include "emu.h" #include "includes/trs80.h" +#include "bus/centronics/ctronics.h" #include "machine/input_merger.h" #include "machine/i8251.h" #include "machine/i8255.h" @@ -68,6 +69,8 @@ public: meritum_state(const machine_config &mconfig, device_type type, const char *tag) : trs80_state(mconfig, type, tag) , m_screen(*this, "screen") + , m_centronics(*this, "centronics") + , m_nmigate(*this, "nmigate") { } void meritum1(machine_config &config); @@ -83,10 +86,32 @@ private: void io_map(address_map &map); void mem_map2(address_map &map); void io_map2(address_map &map); + void mainppi_portb_w(u8); + void mainppi_portc_w(u8); required_device m_screen; + optional_device m_centronics; + required_device m_nmigate; }; +void meritum_state::mainppi_portc_w(u8 data) +{ + m_nmigate->in_w<0>(!BIT(data, 7)); // negated PC7 => NMI + m_centronics->write_strobe(BIT(data, 1)); // PC1 = STROBE (centronics) +} + +void meritum_state::mainppi_portb_w(u8 data) +{ + m_centronics->write_data0(BIT(data, 0)); + m_centronics->write_data1(BIT(data, 1)); + m_centronics->write_data2(BIT(data, 2)); + m_centronics->write_data3(BIT(data, 3)); + m_centronics->write_data4(BIT(data, 4)); + m_centronics->write_data5(BIT(data, 5)); + m_centronics->write_data6(BIT(data, 6)); + m_centronics->write_data7(BIT(data, 7)); +} + void meritum_state::mem_map(address_map &map) { map(0x0000, 0x37ff).rom(); @@ -332,7 +357,17 @@ void meritum_state::meritum1(machine_config &config) pit.out_handler<2>().set_inputline(m_maincpu, INPUT_LINE_NMI); i8255_device &mainppi(I8255(config, "mainppi")); // parallel interface - mainppi.out_pc_callback().set("nmigate", FUNC(input_merger_device::in_w<0>)).bit(7).invert(); + mainppi.out_pc_callback().set(FUNC(meritum_state::mainppi_portc_w)); + mainppi.out_pb_callback().set(FUNC(meritum_state::mainppi_portb_w)); + +/* parallel printer */ + CENTRONICS(config, m_centronics, centronics_devices, "printer"); + m_centronics->set_data_input_buffer("cent_data_in"); + m_centronics->ack_handler().set("mainppi", FUNC(i8255_device::pc2_w)); + + INPUT_BUFFER(config, "cent_data_in"); + output_latch_device ¢_data_out(OUTPUT_LATCH(config, "cent_data_out")); + m_centronics->set_output_latch(cent_data_out); PIT8253(config, "audiopit", 0); // optional audio interface -- cgit v1.2.3