diff --git a/src/mame/drivers/pk8020.cpp b/src/mame/drivers/pk8020.cpp index b15af81b4ec..1f5fcf5e20d 100644 --- a/src/mame/drivers/pk8020.cpp +++ b/src/mame/drivers/pk8020.cpp @@ -249,6 +249,14 @@ void pk8020_state::pk8020(machine_config &config) iop1.out_pc_callback().set(FUNC(pk8020_state::video_page_w)); i8255_device &iop2(I8255(config, "iop2")); // КР580ВВ55А (D16) + iop2.out_pa_callback().set(m_printer, FUNC(centronics_device::write_data0)).bit(0).invert(); + iop2.out_pa_callback().append(m_printer, FUNC(centronics_device::write_data1)).bit(1).invert(); + iop2.out_pa_callback().append(m_printer, FUNC(centronics_device::write_data2)).bit(2).invert(); + iop2.out_pa_callback().append(m_printer, FUNC(centronics_device::write_data3)).bit(3).invert(); + iop2.out_pa_callback().append(m_printer, FUNC(centronics_device::write_data4)).bit(4).invert(); + iop2.out_pa_callback().append(m_printer, FUNC(centronics_device::write_data5)).bit(5).invert(); + iop2.out_pa_callback().append(m_printer, FUNC(centronics_device::write_data6)).bit(6).invert(); + iop2.out_pa_callback().append(m_printer, FUNC(centronics_device::write_data7)).bit(7).invert(); iop2.out_pc_callback().set(FUNC(pk8020_state::ppi_2_portc_w)); I8255(config, "iop3"); // КР580ВВ55А (D2) @@ -301,6 +309,9 @@ void pk8020_state::pk8020(machine_config &config) CASSETTE(config, "cassette").set_default_state(CASSETTE_PLAY); + CENTRONICS(config, m_printer, centronics_devices, nullptr); + m_printer->busy_handler().set(m_inr, FUNC(pic8259_device::ir6_w)).invert(); + /* internal ram */ RAM(config, RAM_TAG).set_default_size("258K").set_default_value(0x00); // 64 + 4*48 + 2 = 258 } diff --git a/src/mame/includes/pk8020.h b/src/mame/includes/pk8020.h index ac1036b11c9..dd81db6fef7 100644 --- a/src/mame/includes/pk8020.h +++ b/src/mame/includes/pk8020.h @@ -10,6 +10,7 @@ #pragma once +#include "bus/centronics/ctronics.h" #include "imagedev/cassette.h" #include "imagedev/floppy.h" #include "machine/bankdev.h" @@ -37,6 +38,7 @@ public: m_floppy(*this, "fdc:%u", 0U), m_inr(*this, "inr"), m_speaker(*this, "speaker"), + m_printer(*this, "printer"), m_region_maincpu(*this, "maincpu"), m_region_gfx1(*this, "gfx1"), m_io_port(*this, "LINE%u", 0U), @@ -102,6 +104,7 @@ private: required_device_array m_floppy; required_device m_inr; required_device m_speaker; + required_device m_printer; required_memory_region m_region_maincpu; required_region_ptr m_region_gfx1; required_ioport_array<16> m_io_port; diff --git a/src/mame/machine/pk8020.cpp b/src/mame/machine/pk8020.cpp index ba719d13f0d..e81857cd095 100644 --- a/src/mame/machine/pk8020.cpp +++ b/src/mame/machine/pk8020.cpp @@ -126,8 +126,10 @@ void pk8020_state::floppy_control_w(uint8_t data) void pk8020_state::ppi_2_portc_w(uint8_t data) { m_sound_gate = BIT(data,3); - m_speaker->level_w(m_sound_gate ? m_sound_level : 0); + + m_printer->write_select(!BIT(data, 4)); + m_printer->write_strobe(!BIT(data, 5)); } WRITE_LINE_MEMBER(pk8020_state::pit_out0)