diff options
author | Robbbert <Robbbert@users.noreply.github.com> | 2021-06-12 18:14:26 +1000 |
---|---|---|
committer | Robbbert <Robbbert@users.noreply.github.com> | 2021-06-12 18:14:26 +1000 |
commit | 8519af54deb499aacf904794cf0250b31567fa21 (patch) | |
tree | 2089ae0f95d13d70c3efbb994ef40ce168846886 | |
parent | 4ca10ad80ba9a52d4cd658814dc8f135d07aec10 (diff) |
meritum2: added centronics printer from PR #5854.
-rw-r--r-- | src/mame/drivers/meritum.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
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<screen_device> m_screen; + optional_device<centronics_device> m_centronics; + required_device<input_merger_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 |