diff --git a/src/mame/fidelity/csc.cpp b/src/mame/fidelity/csc.cpp index 068bc37c986..847d30bd543 100644 --- a/src/mame/fidelity/csc.cpp +++ b/src/mame/fidelity/csc.cpp @@ -158,6 +158,11 @@ The lone LED is connected to digit 1 common All three of the above are called "segment H". +Printer: +-------- +It's the same printer port as VSC. It expects a baud rate of 600, 7 data bits, +1 stop bit, and no parity. + ================================================================================ Elite Champion Challenger (ELITE) @@ -210,6 +215,7 @@ that are on the board by clicking while holding ALT. #include "emu.h" +#include "bus/rs232/rs232.h" #include "cpu/m6502/m6502.h" #include "machine/6821pia.h" #include "machine/clock.h" @@ -295,7 +301,6 @@ protected: void pia1_pa_w(u8 data); void pia1_pb_w(u8 data); u8 pia1_pb_r(); - void pia1_ca2_w(int state); }; void csc_state::machine_start() @@ -488,7 +493,7 @@ void csc_state::pia1_pb_w(u8 data) u8 csc_state::pia1_pb_r() { - // d2: printer? + // d2: printer busy? u8 data = 0x04; // d3: S14001A busy pin @@ -502,11 +507,6 @@ u8 csc_state::pia1_pb_r() return data | (*m_language << 6 & 0xc0); } -void csc_state::pia1_ca2_w(int state) -{ - // printer? -} - /******************************************************************************* @@ -641,7 +641,9 @@ void csc_state::csc(machine_config &config) m_pia[1]->readpb_handler().set(FUNC(csc_state::pia1_pb_r)); m_pia[1]->writepa_handler().set(FUNC(csc_state::pia1_pa_w)); m_pia[1]->writepb_handler().set(FUNC(csc_state::pia1_pb_w)); - m_pia[1]->ca2_handler().set(FUNC(csc_state::pia1_ca2_w)); + m_pia[1]->ca2_handler().set("rs232", FUNC(rs232_port_device::write_txd)).invert(); + + RS232_PORT(config, "rs232", default_rs232_devices, nullptr); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); diff --git a/src/mame/fidelity/elegance.cpp b/src/mame/fidelity/elegance.cpp index 7aa7297dbc0..3d78b11cda5 100644 --- a/src/mame/fidelity/elegance.cpp +++ b/src/mame/fidelity/elegance.cpp @@ -17,6 +17,7 @@ Hardware notes (6085): This is on the SC12B board, with enough modifications to support more leds and magnetic chess board sensors. See sc12.cpp for a more technical description. +Like SC12, the printer expects a baud rate of 600, and 7 data bits. The first RAM chip is low-power, and battery-backed with a capacitor. This is also mentioned in the manual. Maybe it does not apply to older PCBs. @@ -35,6 +36,7 @@ TODO: #include "bus/generic/carts.h" #include "bus/generic/slot.h" +#include "bus/rs232/rs232.h" #include "cpu/m6502/r65c02.h" #include "machine/clock.h" #include "machine/nvram.h" @@ -58,6 +60,7 @@ class elegance_state : public fidel_clockdiv_state public: elegance_state(const machine_config &mconfig, device_type type, const char *tag) : fidel_clockdiv_state(mconfig, type, tag), + m_rs232(*this, "rs232"), m_board(*this, "board"), m_display(*this, "display"), m_dac(*this, "dac"), @@ -75,6 +78,7 @@ protected: private: // devices/pointers + required_device m_rs232; required_device m_board; required_device m_display; required_device m_dac; @@ -132,7 +136,10 @@ void elegance_state::control_w(u8 data) // 74245 Q9: speaker out m_dac->write(BIT(sel, 9)); - // d4,d5: printer? + // d4: set when reading printer busy flag from 0xa000 + // d5: printer port data + m_rs232->write_txd(BIT(~data, 5)); + // d6,d7: N/C? } @@ -235,6 +242,8 @@ void elegance_state::feleg(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + RS232_PORT(config, m_rs232, default_rs232_devices, nullptr); + SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(150)); diff --git a/src/mame/fidelity/elite.cpp b/src/mame/fidelity/elite.cpp index e9a40adf9d1..a789c0f5439 100644 --- a/src/mame/fidelity/elite.cpp +++ b/src/mame/fidelity/elite.cpp @@ -40,7 +40,7 @@ Hardware notes: - TSI S14001A + speech ROM - I/O with 8255 PPI and bunch of TTL - 8*8 magnet sensors, 11 buttons, 8*(8+1) LEDs + 4*7seg LEDs -- module slot and printer port +- module slot and printer port (600 baud, 7 data bits, 1 stop bit, no parity) *: In West Germany, some distributors released it with overclocked CPUs, advertised as 3.2, 3.6, or 4MHz. Unmodified EAS PCB photos show only a 3MHz XTAL. @@ -99,6 +99,7 @@ version of Prestige, it only works on level A3 or higher. #include "bus/generic/carts.h" #include "bus/generic/slot.h" +#include "bus/rs232/rs232.h" #include "cpu/m6502/r65c02.h" #include "machine/clock.h" #include "machine/i8255.h" @@ -129,6 +130,7 @@ public: fidel_clockdiv_state(mconfig, type, tag), m_ppi8255(*this, "ppi8255"), m_rombank(*this, "rombank"), + m_rs232(*this, "rs232"), m_board(*this, "board"), m_display(*this, "display"), m_dac(*this, "dac"), @@ -158,6 +160,7 @@ protected: // devices/pointers optional_device m_ppi8255; optional_memory_bank m_rombank; + required_device m_rs232; required_device m_board; required_device m_display; required_device m_dac; @@ -282,7 +285,8 @@ void elite_state::ppi_porta_w(u8 data) m_speech->data_w(data & 0x3f); m_speech->start_w(BIT(data, 6)); - // d7: printer? (black wire to LED pcb) + // d7: printer port data + m_rs232->write_txd(BIT(~data, 7)); } void elite_state::ppi_portc_w(u8 data) @@ -308,7 +312,7 @@ void elite_state::ppi_portc_w(u8 data) u8 elite_state::ppi_portb_r() { - // d0: printer? white wire from LED pcb + // d0: printer busy? u8 data = 1; // d1: S14001A busy pin @@ -483,6 +487,8 @@ void elite_state::pc(machine_config &config) irq_clock.set_pulse_width(attotime::from_nsec(13700)); // active for 13.7us irq_clock.signal_handler().set_inputline(m_maincpu, M6502_IRQ_LINE); + RS232_PORT(config, m_rs232, default_rs232_devices, nullptr); + SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(100)); diff --git a/src/mame/fidelity/sc12.cpp b/src/mame/fidelity/sc12.cpp index 547259f1e55..77a2d86e0a7 100644 --- a/src/mame/fidelity/sc12.cpp +++ b/src/mame/fidelity/sc12.cpp @@ -8,7 +8,7 @@ Fidelity Sensory 12 Chess Challenger (SC12, SE12, 6086) RE information from netlist by Berger 8*(8+1) buttons, 8+8+2 red LEDs -DIN 41524C printer port +DIN 41524C printer port (600 baud, 7 data bits, 1 stop bit, no parity) 36-pin edge connector CPU is a R65C02P4, running at 4MHz* @@ -60,6 +60,7 @@ TODO: #include "bus/generic/carts.h" #include "bus/generic/slot.h" +#include "bus/rs232/rs232.h" #include "cpu/m6502/r65c02.h" #include "machine/clock.h" #include "machine/sensorboard.h" @@ -82,6 +83,7 @@ class sc12_state : public fidel_clockdiv_state public: sc12_state(const machine_config &mconfig, device_type type, const char *tag) : fidel_clockdiv_state(mconfig, type, tag), + m_rs232(*this, "rs232"), m_board(*this, "board"), m_display(*this, "display"), m_dac(*this, "dac"), @@ -99,6 +101,7 @@ protected: private: // devices/pointers + required_device m_rs232; required_device m_board; required_device m_display; required_device m_dac; @@ -148,8 +151,9 @@ void sc12_state::control_w(u8 data) // d6,d7: led select (active low) m_display->matrix(~data >> 6 & 3, sel & 0x1ff); - // d4,d5: printer - //.. + // d4: set when reading printer busy flag from 0xa000 + // d5: printer port data + m_rs232->write_txd(BIT(~data, 5)); } u8 sc12_state::input_r(offs_t offset) @@ -242,6 +246,8 @@ void sc12_state::sc12(machine_config &config) irq_clock.set_pulse_width(attotime::from_nsec(15250)); // active for 15.25us irq_clock.signal_handler().set_inputline(m_maincpu, M6502_IRQ_LINE); + RS232_PORT(config, m_rs232, default_rs232_devices, nullptr); + SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(200)); diff --git a/src/mame/fidelity/vsc.cpp b/src/mame/fidelity/vsc.cpp index 8de87a4354e..e0cc5de4c66 100644 --- a/src/mame/fidelity/vsc.cpp +++ b/src/mame/fidelity/vsc.cpp @@ -145,10 +145,13 @@ chess computers also have support for it. Two models were released: FP: Challenger Printer - thermal printer, MCU=D8048C243 IFP: Impact Printer - also compatible with C64 apparently. +The printer expects a baud rate of 600, 7 data bits, 1 stop bit, and no parity. + *******************************************************************************/ #include "emu.h" +#include "bus/rs232/rs232.h" #include "cpu/z80/z80.h" #include "machine/i8255.h" #include "machine/clock.h" @@ -173,6 +176,7 @@ public: m_maincpu(*this, "maincpu"), m_z80pio(*this, "z80pio"), m_ppi8255(*this, "ppi8255"), + m_rs232(*this, "rs232"), m_board(*this, "board"), m_display(*this, "display"), m_speech(*this, "speech"), @@ -191,6 +195,7 @@ private: required_device m_maincpu; required_device m_z80pio; required_device m_ppi8255; + required_device m_rs232; required_device m_board; required_device m_display; required_device m_speech; @@ -293,7 +298,7 @@ u8 vsc_state::pio_porta_r() u8 vsc_state::pio_portb_r() { - // d4: S14001A busy pin + // d4: S14001A busy pin / printer busy return (m_speech->busy_r()) ? 0 : 0x10; } @@ -303,6 +308,9 @@ void vsc_state::pio_portb_w(u8 data) // d5: enable language jumpers m_kp_mux = data; + // d3: printer port data + m_rs232->write_txd(BIT(~data, 3)); + // d7: speech ROM A12 m_speech->set_rom_bank(BIT(data, 7)); @@ -407,6 +415,8 @@ void vsc_state::vsc(machine_config &config) m_z80pio->in_pb_callback().set(FUNC(vsc_state::pio_portb_r)); m_z80pio->out_pb_callback().set(FUNC(vsc_state::pio_portb_w)); + RS232_PORT(config, m_rs232, default_rs232_devices, nullptr); + SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(250));