mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
fidelity: add printer port [hap, Golden Child]
This commit is contained in:
parent
e53572e70b
commit
ead01ec367
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user