fidelity: add printer port [hap, Golden Child]

This commit is contained in:
hap 2025-05-29 22:34:20 +02:00
parent e53572e70b
commit ead01ec367
5 changed files with 49 additions and 16 deletions

View File

@ -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));

View File

@ -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<rs232_port_device> m_rs232;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
required_device<dac_1bit_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));

View File

@ -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<i8255_device> m_ppi8255;
optional_memory_bank m_rombank;
required_device<rs232_port_device> m_rs232;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
required_device<dac_1bit_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));

View File

@ -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<rs232_port_device> m_rs232;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
required_device<dac_1bit_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));

View File

@ -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<cpu_device> m_maincpu;
required_device<z80pio_device> m_z80pio;
required_device<i8255_device> m_ppi8255;
required_device<rs232_port_device> m_rs232;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
required_device<s14001a_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));