From 950e3c4bd942ea2cfcefeb1de8c04c6ce40bfef2 Mon Sep 17 00:00:00 2001 From: hap Date: Tue, 19 Jan 2016 13:52:00 +0100 Subject: [PATCH] s14001a_new: documentation header, copypasted pinout info from s14001a(_old) --- src/devices/sound/s14001a_new.cpp | 111 ++++++++++++++++++++++++++++-- src/devices/sound/s14001a_new.h | 10 ++- 2 files changed, 112 insertions(+), 9 deletions(-) diff --git a/src/devices/sound/s14001a_new.cpp b/src/devices/sound/s14001a_new.cpp index efe9eb14892..b6f9e889e84 100644 --- a/src/devices/sound/s14001a_new.cpp +++ b/src/devices/sound/s14001a_new.cpp @@ -1,13 +1,112 @@ // license:BSD-3-Clause -// copyright-holders:Ed Bernard +// copyright-holders:Ed Bernard, Jonathan Gevaryahu, hap +// thanks-to:Kevin Horton +/* + SSi TSI S14001A speech IC emulator + aka CRC: Custom ROM Controller, designed in 1975, first usage in 1976 on TSI Speech+ calculator + Originally written for MAME by Jonathan Gevaryahu(Lord Nightmare) 2006-2013, + replaced with near-complete rewrite by Ed Bernard in 2016 -// http://www.vintagecalculators.com/html/speech-.html + TODO: + - nothing at the moment? + + Further reading: + - http://www.vintagecalculators.com/html/speech-.html + - http://www.vintagecalculators.com/html/development_of_the_tsi_speech-.html + - http://www.vintagecalculators.com/html/speech-_state_machine.html + - https://archive.org/stream/pdfy-QPCSwTWiFz1u9WU_/david_djvu.txt +*/ + +/* Chip Pinout: +The original datasheet (which is lost as far as I know) clearly called the +s14001a chip the 'CRC chip', or 'Custom Rom Controller', as it appears with +this name on the Stern and Canon schematics, as well as on some TSI speech +print advertisements. +Labels are not based on the labels used by the Atari wolf pack and Stern +schematics, as these are inconsistent. Atari calls the word select/speech address +input pins SAx while Stern calls them Cx. Also Atari and Canon both have the bit +ordering for the word select/speech address bus backwards, which may indicate it +was so on the original datasheet. Stern has it correct, and I've used their Cx +labeling. + + ______ ______ + _|o \__/ |_ + +5V -- |_|1 40|_| -> /BUSY* + _| |_ + ?TEST ?? |_|2 39|_| <- ROM D7 + _| |_ + XTAL CLOCK/CKC -> |_|3 38|_| -> ROM A11 + _| |_ + ROM CLOCK/CKR <- |_|4 37|_| <- ROM D6 + _| |_ + DIGITAL OUT 0 <- |_|5 36|_| -> ROM A10 + _| |_ + DIGITAL OUT 1 <- |_|6 35|_| -> ROM A9 + _| |_ + DIGITAL OUT 2 <- |_|7 34|_| <- ROM D5 + _| |_ + DIGITAL OUT 3 <- |_|8 33|_| -> ROM A8 + _| |_ + ROM /EN <- |_|9 32|_| <- ROM D4 + _| S |_ + START -> |_|10 7 1 T 31|_| -> ROM A7 + _| 7 4 S |_ + AUDIO OUT <- |_|11 3 0 I 30|_| <- ROM D3 + _| 7 0 |_ + ROM A0 <- |_|12 1 29|_| -> ROM A6 + _| A |_ +SPCH ADR BUS C0 -> |_|13 28|_| <- SPCH ADR BUS C5 + _| |_ + ROM A1 <- |_|14 27|_| <- ROM D2 + _| |_ +SPCH ADR BUS C1 -> |_|15 26|_| <- SPCH ADR BUS C4 + _| |_ + ROM A2 <- |_|16 25|_| <- ROM D1 + _| |_ +SPCH ADR BUS C2 -> |_|17 24|_| <- SPCH ADR BUS C3 + _| |_ + ROM A3 <- |_|18 23|_| <- ROM D0 + _| |_ + ROM A4 <- |_|19 22|_| -> ROM A5 + _| |_ + GND -- |_|20 21|_| -- -10V + |________________| + +*Note from Kevin Horton when testing the hookup of the S14001A: the /BUSY line +is not a standard voltage line: when it is in its HIGH state (i.e. not busy) it +puts out a voltage of -10 volts, so it needs to be dropped back to a sane +voltage level before it can be passed to any sort of modern IC. The address +lines for the speech rom (A0-A11) do not have this problem, they output at a +TTL/CMOS compatible voltage. The AUDIO OUT pin also outputs a voltage below GND, +and the TEST pins may do so too. + +START is pulled high when a word is to be said and the word number is on the +word select/speech address input lines. The Canon 'Canola' uses a separate 'rom +strobe' signal independent of the chip to either enable or clock the speech rom. +It's likely that they did this to be able to force the speech chip to stop talking, +which is normally impossible. The later 'version 3' TSI speech board as featured in +an advertisement in the John Cater book probably also has this feature, in addition +to external speech rom banking. + +The Digital out pins supply a copy of the 4-bit waveform which also goes to the +internal DAC. They are only valid every other clock cycle. It is possible that +on 'invalid' cycles they act as a 4 bit input to drive the dac. + +Because it requires -10V to operate, the chip manufacturing process must be PMOS. + +* Operation: +Put the 6-bit address of the word to be said onto the C0-C5 word select/speech +address bus lines. Next, clock the START line low-high-low. As long as the START +line is held high, the first address byte of the first word will be read repeatedly +every clock, with the rom enable line enabled constantly (i.e. it doesn't toggle on +and off as it normally does during speech). Once START has gone low-high-low, the +/BUSY line will go low until 3 clocks after the chip is done speaking. +*/ #include "emu.h" #include "s14001a_new.h" - - +// device definition const device_type S14001A_NEW = &device_creator; s14001a_new_device::s14001a_new_device(const machine_config &mconfig, std::string tag, device_t *owner, UINT32 clock) @@ -64,8 +163,8 @@ void s14001a_new_device::device_start() save_item(NAME(m_uOutputP1)); save_item(NAME(m_bDAR04To00CarryP2)); - save_item(NAME(m_bPPQCarryP2)); - save_item(NAME(m_bRepeatCarryP2)); + save_item(NAME(m_bPPQCarryP2)); + save_item(NAME(m_bRepeatCarryP2)); save_item(NAME(m_bLengthCarryP2)); save_item(NAME(m_RomAddrP1)); diff --git a/src/devices/sound/s14001a_new.h b/src/devices/sound/s14001a_new.h index 0860e34571b..dc5c001b01c 100644 --- a/src/devices/sound/s14001a_new.h +++ b/src/devices/sound/s14001a_new.h @@ -1,5 +1,9 @@ // license:BSD-3-Clause -// copyright-holders:Ed Bernard +// copyright-holders:Ed Bernard, Jonathan Gevaryahu, hap +// thanks-to:Kevin Horton +/* + SSi TSI S14001A speech IC emulator +*/ #ifndef __S14001A_H__ #define __S14001A_H__ @@ -104,8 +108,8 @@ private: // derived signals bool m_bDAR04To00CarryP2; - bool m_bPPQCarryP2; - bool m_bRepeatCarryP2; + bool m_bPPQCarryP2; + bool m_bRepeatCarryP2; bool m_bLengthCarryP2; UINT16 m_RomAddrP1; // rom address