RetroBrew Computers Forum
Discussion forum for the RetroBrew Computers community.

Home » RBC Forums » General Discussion » General Instrument CTS256A-AL2 vs. Microchip CTS256AL2
Re: Reverse-Engineering the Speech Processor ROM [message #10689 is a reply to message #10688] Tue, 09 April 2024 04:22 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi Jay
Maybe another way to look at the SPR016 emulation is the cycle time. The SP0256 is sending the ROM clock at 1.56 MHz so it has a cycle time of ~640ns. For an MCU to respond fast enough, assuming 20 instructions necessary to meet worst case SP0256 command, would be 32ns instruction time. That would translate to an MCU instruction clock of >31 MHz or approximately twice as fast as the fastest 8-bit PIC. Maybe the MSP430 can go faster or do it in fewer instructions but it will really have to be going very fast to keep up. I am thinking 64MHz or 128MHz oscillator clock speeds to really have a chance of succeeding.

I think a CPLD to parallel EPROM would have a decent chance of working. Of course, there is no harm in trying the MCU approach. Maybe there is something out there that might work. Regarding the MPS430, I just don't know because I am not familiar with it. However, to be useful it also has to be at least 5V tolerant and some form of hobbyist friendly packaging. Some SMT are OK like SSOP and SOIC but others like BGA require special tools and techniques. Maybe the MCU is available on a DIP type module which might work too.

I am really looking forward to the DAISY256 PCBs arriving though. Can't wait to see if this idea of emulating the CTS256 even works! Thanks, Andrew Lynch
Re: Reverse-Engineering the Speech Processor ROM [message #10691 is a reply to message #10689] Tue, 09 April 2024 09:49 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Yeah, maybe the Raspberry Pi Pico is the way to go. they come in DIP-40 like packages and are fairly cheap. Plus, they are 133 MHz. Not really 5V tolerant but I think that's fixable with a diode and a pull up resistor on each RPIP input. We really only need 6 of the 7 connections (SP0256 outputs) converted from 5V to 3.3V. The remaining one is an input to the SP0256 and should not be an issue.
Re: Reverse-Engineering the Speech Processor ROM [message #10692 is a reply to message #10691] Tue, 09 April 2024 10:50 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi
Good news, my parts have started arriving. I have already made a kit for DAISY256 with the parts I have in stock already. Today the TMS7001NL-4s arrived. Still need the PCBs and several parts from AliExpress & Mouser. Once the PCBs arrive though, I can start assembly of the base unit.
Re: Reverse-Engineering the Speech Processor ROM [message #10696 is a reply to message #10692] Wed, 10 April 2024 20:40 Go to previous messageGo to next message
jayindallas is currently offline  jayindallas
Messages: 110
Registered: June 2021
Senior Member
As you will be working on a 70x1 first, I'll post the timing information and the mapping modes as they apply to the 70x1. The information is awkwardly available in the the TMS7000 Family Data manual. You have to look in the 5 page Appendix C and then flip back to an applicable table from the 70x0 or 70x2 sections. I'll unravel the page-flipping nonsense and type up a complete 70x1 listing. Later I'll use that to do one for the 70x0 and 70x2.

I've got the 70x2 Microprocessor Interface Mode spreadsheet mostly done. I'll quickly make a 70x1 version since you'll be using that soon. Later I'll make a 70x2 version also.

The spreadsheet allows you to enter a crystal frequency and recalculate for parameter timings (all the formulas are based on the crystal frequency after the 7000 series Divide-By-Two oscillator input circuit.

I'll be busy for about a week and a half, but I'll generate and post this stuff in parts, when I need a distraction from everything else.

Anything involving the TSM7000 I'll post on the CTS titled discussion thread. Any SP & SPR will be on the thread about reverse engineering the SPO...

[Updated on: Thu, 11 April 2024 00:44]

Report message to a moderator

Re: Reverse-Engineering the Speech Processor ROM [message #10699 is a reply to message #10696] Thu, 11 April 2024 09:56 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi Jay
Which TMS7000 family data manual are you using? I am using the 1983 edition and Appendix C is something completely different (TMS7500 encryption module?)

Would like to follow along on the timing discussion. I fear there is something about the conversion from internal ROM to external ROM that I do not understand.

Is this related to the divide-by-4 vs. divide-by-2 external crystal? Aren't all the calculations done based on the normalized clock_out signal?

[Updated on: Fri, 12 April 2024 04:36]

Report message to a moderator

Re:TMS700x Memory Interface Mode Timing Spreadsheet UPDATE [message #10706 is a reply to message #10699] Fri, 12 April 2024 08:16 Go to previous messageGo to next message
jayindallas is currently offline  jayindallas
Messages: 110
Registered: June 2021
Senior Member
Re: ...to follow along on the timing discussion...
I understand what you're talking about... the databook documentation is a bit contorted in the area of various modes and resulting memory maps etc.
However I found a section of the '86 databook that puts that into good diagrams. If I can find sections for the x0,x1,x2 then I'll sort it out and post it as 70xx notes.


Spreadsheet for Micrprocessor Interface Mode - Memory Interface Timing:
Below, is a screen capture and I'll add some comments will appear below it on how it operates and some enhancements I'm considering.
/forum/index.php?t=getfile&id=3034&private=0
The errors in the spreadsheet above will soon be corrected. Symbol #16 had an "EL" for Enable# LOW with a description "Enable# rise" that was corrented in the '89 Manual. Also in some of the lower formulas the multiplier is 1.5 x Tc(C) and not 0.5 x Tc(C).
This spreadsheet is based on a section about Microprocessor Interface Mode (external Memory), "Table 9-2. Memory Interface Timing" that appears on Page 9-5 in the 1986 TMS 7000 Series Databook.

For the 70x1 in Microprocessor Interface Mode -- Memory Interface Timing, Appendix C refers using the timing for the 70x0. That chart is not consistent with the 70x2 so I'll have to make a separate spreadsheet for the combined 70x0/70x1.


The Data Book I'm Using (reference to Appendix C)
I have the TMS7000 series documents listed below. I'm using a paperback version I used at Tandy Electronic Design (TED) back around '86 to '89.
ITEM-1 :: "TMS7000 Family Data Manual" | publication ID "SND001B" | version "June 1986, Revision B"
Updated these bitsavers.org links 2024/04/19:
https://bitsavers.org/components/ti/TMS7000/SPND001B_TMS7000 _Family_Data_Manual_1986.pdf
NOTE: The Link/URL above is a PDF of the same paperback databook I'm using; you should find the Appendix C with the TMS70x1 references I've mentioned.
I'm going to look at this 1989 databook to look for corrections or improved data:
https://bitsavers.org/components/ti/TMS7000/SPND001C_TMS7000 _Family_Data_Manual_1989.pdf


I've reconstructed part of a lost message here from a few days ago...
Its an index of all relevant SP & SPR pages in the GI 1982 Microelectronics PDF.
PAGE        DOCUMENT     PART            COMMENTS OR
OFFSETS     PAGE ID      NUMBER          DESCRIPTION
-------     --------     -----------     -------------------------
 76         2-63         INDEX           AUDIO :: Speech ROMs
 77         2-64         SPR016          2Kx8 Serial Read Only Memory (ROM)
 83         2-70         SPR032          4Kx8 Serial Read Only Memory (ROM)
 86         2-73         SPR128          16K Serial Read Only Memory (ROM) [i]Preliminary[/i]

284         5-3          INDEX           AUDIO :: Speech Synthesis
286         5-5          SP0256          Narrator(tm) Speech Processor
290         5-9          SP0256-AL2      Allophone Based Speech Processor
290         5-9          SP0232          32K Speech Processor [i]For future release[/i]
290         5-9          SPR000          Speech Interface Chip
                                         ...designed to interface a standard ROM, PROM, or EPROM
                                         to the SPO256 Speech Processor...
291         5-10         VSM2032         ...eight TTL compatible signals are used to select the 
                                         spoken phrase. Once selected, the VSM2032 requires no 
                                         support from the user's circuit...
293         5-12         SP0250          Speech Synthesizer
296         5-15         SFD2000         Speech Field Development Board
                                         ...Its is used to demonstrate and test synthetic speech 
                                         or complex sounds before they are committed to masked Rom.
NOTE: The "Field Development Board uses the SPR000 as an interface to memory.
Its proof that your Daisy256 concept can work after finding all hurdles.

[Updated on: Tue, 23 April 2024 18:03]

Report message to a moderator

Re: What TMS7000 Family Data Manual Version Am I Using? [message #10709 is a reply to message #10706] Fri, 12 April 2024 13:54 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi Jay
Holy Mackerel! The SPR000 is *exactly* what's needed to add custom firmware to the SPR0256! It is a hardware chip to do exactly that! No MCU or CPLD needed.

eBay has some and there are some being sold by other vendors. However, I can't find a real datasheet so I don't have a pinout. Do you have or know where to get a datasheet or excerpt from a data book on the SPR000? My goodness, I had no idea such a thing existed.

Wow!

Also, a scan of the "Speech Field Development Data Manual" would probably be sufficient as well

It would be ironic if I can find the hardware but not the datasheet. Usually it is the other way around.

[Updated on: Fri, 12 April 2024 14:32]

Report message to a moderator

Re: What TMS7000 Family Data Manual Version Am I Using? [message #10721 is a reply to message #10709] Fri, 19 April 2024 03:37 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi
The DAISY256 PCBs arrived yesterday and I will start building probably tomorrow morning. I would like to get it assembled and test out the control case (CTS256 + SP0256).

Assuming that works, I'll move on to experimenting with the TMS7001 & 2732 EPROM. Let's hope this works.

I think it will open a whole new chapter in CTS256 by allowing custom firmware and also bringing long needed new parts into availability. Maybe a CTS256 renaissance?

Let me know if you're interested in building your own board. The default build is essentially a mecparts Talker text-to-speech so even if the experiment fails, you still have a TTS board.

Thanks, Andrew Lynch

[Updated on: Fri, 19 April 2024 03:38]

Report message to a moderator

DAISY256 works [message #10722 is a reply to message #10721] Mon, 22 April 2024 03:36 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi
Now we know DAISY256 works. I tested initially with CTS256 and SP0256 in a traditional TTS configuration and it works fine. Then I tested it with the CTS256 using external firmware and that also works well. I verified the external firmware EPROM is being accessed with my logic probe.

Finally, I tested the TMS7001 plus external EPROM and that works fairly well too. Probably not quite as reliable as the CTS256, but after reset seems to be just fine. I suspect there may be some timing issues with the reset circuit being slightly too long in TMS7001 mode. The time constant on the reset circuit is about 1 second which seems like a really long time to me. Not sure the reasoning on it.

I have some TMS70C02 and TMS77C82 chips on the way. The major differences are the CMOS chips are only clock doubled as opposed to the TMS7001 derivatives being clock quadrupled. My plan is to use a 5 MHz clock instead. Also, it appears the UART uses half the clock cycles per bit on the CMOS TMS7xCx2 versions so may either need custom firmware or possibly live with twice the speed (19200 baud vs. 9600 baud). We'll see once those parts arrive.

I did have a bad 10 MHz crystal that took a while to find but not a show stopper. I've not had a crystal go bad on me before so that was a first. Oh well, another permanent resident for the "bad parts" box.

I have a video of the test, but it won't let me upload it because it is too big (~19MB)

Thanks, Andrew Lynch

PS, I still have 4 PCBs left over since I only needed one. The build worked the first time with no bodges, cuts & jumpers, etc. If you want one of the left over PCBs please let me know and I'll send you one (US only). I would love to get some other feedback for the upcoming V1.1 version.

[Updated on: Mon, 22 April 2024 03:45]

Report message to a moderator

Re: DAISY256 works [message #10723 is a reply to message #10722] Mon, 22 April 2024 12:57 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi Jay
Well, it appears you are correct on the timing issue with regards to the TMS7xCx2 chips. When I use a TMS7001NL-4, it is practically a drop in replacement with a 10 MHz clock for the CTS256.

Today I tried a TMS70C02 and the results were partially encouraging but still there is a problem. With a 5 MHz clock and a TMS70C02, the DAISY256 starts up like normal and says "O-K" on boot or after reset so that's good news but doesn't respond to text I send it over the serial port. The TMS7000 data book in appendix C says that the asynchronous serial configuration is different and takes only half as many clock cycles. I was hoping that would translate into just doubling the baud rate but no luck there either.

So it looks like we're going to need a custom firmware boot ROM for TMS7xCx2 devices. I think it will be worthwhile because the TMS7xCx2 chips are super cheap and plentiful even compared to the TMS7001s and especially compared to the CTS256s.

Thoughts? Thanks, Andrew Lynch
Re: DAISY256 works [message #10724 is a reply to message #10723] Mon, 22 April 2024 15:10 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi Jay
Thankfully, we have the disassembled CTS256 source code which can be found her: https://github.com/GmEsoft/CTS256A-AL2/blob/main/CTS256A.ASM

Looking over the code, I think this is the region which determines input mode (serial or parallel) and then configures the serial port based various parameters.

We'll update the values in SCT1TB and T3DATB to account for the faster UART cycle clock and burn a new firmware boot EPROM.

Also, it looks like TI changed the serial port register locations from TMS7xx1 to TMS7xCx2 so they'll need to be updated too.

Maybe other things but most of the functionality should be unchanged. Just dropping in the TMS70C02 it boots using the legacy CTS256 firmware and gets as far as saying "O-K" so most of it seems to be fine. Although the serial ports are screwed up.

START	MOV	%>3A,B
	LDSP			; Init stack pointer 3B-XX
	MOVD	%>2000,R45	; R45 := $2000
	MOVP	%>AA,P0		; P0 = IOCNT0 := 1010 1010
				; 	Full Expansion;
				;	Clear INT1, INT2 and INT3 flags
	MOVP	%>0A,P16	; P16 = IOCNT1 := 0000 1010
				;	Clear INT4 and INT5 flags
	MOVP	P4,B		; Read P4 = APORT
	AND	%>07,B		; Get Serial mode
	CMP	%>00,B		; Is it Parallel mode ?
				; useful ?
	; Jump if yes
	JZ	PARALL		; Start in parallel mode
	AND	%>7F,R10	; Clear R10.7, indicating serial mode
	MOVP	P4,A		; Read P4 = APORT
	AND	%>08,A		; Get Selectable Serial Config flag
	CMP	%>00,A		; Is it set ?
				; useful ?
	; Jump if not
	JZ	SER7N2		; Serial fixed 7N2 config
	LDA	@>1000		; Read serial config from $1000
	MOVP	A,P17		; Init P17 = SMODE with seria config
	JMP	SERSEL		; Serial selectable config

SER7N2	MOVP	%>CB,P17	; P17 = SMODE := Fixed Serial 7N2 config
SERSEL	MOVP	%>15,P17	; P17 = SCTL0 := OOO1 O1O1
				; Reset error flags; enable RX & TX
	; A := value for SCTL1 (prescaler)
	LDA	@SCT1TB(B)	; Table of values for SCTL1
	PUSH	A
	; A := value for T3DATA (timer3 reload)
	LDA	@T3DATB(B)	; Table of timer3 reload values T3DATA
	POP	B
	MOVP	B,P21		; set SCTL1
	MOVP	A,P20		; set T3DATA
	ORP	%>01,P16	; enable T4
	; proceed with RAM setup
	JMP	INIRAM		; Init RAM config

	; Table of values for SCTL1
SCT1TB	BYTE	>FF,>40,>43,>40,>43,>40,>40,>40

	; Table of timer3 reload values T3DATA
T3DATB	BYTE	>FF,>20,>57,>07,>C2,>0F,>81,>03

[Updated on: Mon, 22 April 2024 15:21]

Report message to a moderator

Re: DAISY256 works [message #10725 is a reply to message #10724] Tue, 23 April 2024 03:54 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi
Yesterday evening, I tested the TMS77C82 and it doesn't seem to work at all. I suspect it is just too different from the TMS7000 style chips to make the leap even partially.

It might be usable but would require a rework of the CTS256 firmware. It may be possible but probably a lot more effort than getting the TMS70C02 working.
Re: DAISY256 works [message #10726 is a reply to message #10725] Tue, 23 April 2024 12:02 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Video of DAISY256 test with TMS7001. Press reset, says "O-K", type "retrobrewcomputers.org" on serial port

https://github.com/lynchaj/duodyne/tree/main/!Initial%20Buil d%20and%20Test

Please let me know if you cannot see the video
Re: DAISY256 works [message #10727 is a reply to message #10725] Tue, 23 April 2024 12:31 Go to previous messageGo to next message
jayindallas is currently offline  jayindallas
Messages: 110
Registered: June 2021
Senior Member
Daisy256
The 7000 series processors tested above, are three different processor sets so three similar code sets are likely needed:
Note that there is a divide-by-2 and a divide-by-4 option on one of the processors. I think its a rom purchase, not a register settings. So be aware that some vintage 7000 series chips may require a different crystal just because its original circuit was designed with a divide-by-4.

TESTING THE TMS7041 NMOS DEVICES (all using the 70x1 serial clock rate)
Processor Set #1 The 70x1 NMOS or GI CTS running the original CTS/SP0 code.
Use '89 TMS7000 Family Data Manual, Appendix C: TMS 70x1 Devices
Testing Processor Set #1
10Mhz PIC/TMS7041 aka CTS256 and SP0256 initial test: SUCCESSFUL. Was that the Radio Shack Recommended Circuit?
10Mhz PIC/TMS7041 aka CTS256+External ROM and SP0256 test: SUCCESSFUL. That's a great indicator!
10Mhz TMS7001+External ROM and SP0256 test: SEEMS FINE AFTER RESET.


TESTING THE TMS70x2 DEVICES
Processor Set #2 The 70x2 NMOS Architecture improvements over the 70x1
Less changes between the NMOS 70x1 and the 70x2. It should be easier to convert than the conversion to CMOS; This is the way to start.
Testing Processor Set #2
5MHz TMS7002+External ROM and SP0256 test: DAISY256 SAYS "OK" BUT NOTHING AFTER THAT.

Probably needs code adjustments with timers, uart initialization, maybe interrupt detection and reset state.

Since there are many vintage 70xx chips that might be used in a board like the Daisy 256, it might be advantageous to add a trace connecting the SP0256 clock back to the 70nx so it can identify if its running at 2.5Mhz or 1.25Mhz internal clock. Firmware inside the 7xxx can do a lot to self-identify the chip and make the configuration choices without requiring a different Rom image for each possible 70nx processor. Bitsavers.org has an '83 (focus 70x1), '86 (focus 70x2) and '89 (corrections) Data Books. There are more chip numbers in the '83 Data Book that might be used to find new/old inventory. '83 had some CMOS and some 12K ROM sizes too.

TESTING THE TMS77C82 DEVICE
Processor Set #3 The 70Cx2 CMOS has many architecture improvements and changes over NMOS.
AJL is correct on CMOS requiring many more code changes. A lot of pin behavior is different of the CMOS devices; it looks like the CMOS line was following the new release market, whereas NMOS was mostly supporting existing designs.
See the '89 TMS7000 Family Data Manual, Appendix B: TMS 7000 NMOS to CMOS Conversion Guide to see how much changed and has to be reviewed to convert the code... but it would be worth the effort, as you wrote, to run it on less expensive vintage parts. Probably best to convert the NMOS x1 to the NMOS x2 first for learning-curve reasons.

Testing Processor Set #3
??MHz TMS77C82+Windowed-EProm and SP0256 test: NOTHING

Your 10Mhz to 5Mhz was clever, but CMOS versions seemed to be chasing new release markets so it was freely upgraded in contrast to NMOS devices which seemed to support existing applications.


TMS70{0,1,2} Spreadsheets
bitsavers.org has the '89 TMS 7000 Family Data Manual which is much better than the '86 manual. '89 consolidates various separate reference manuals together into one more useful manual. It also describes how to read the internal masked ROM from a TMS70xx, more clearly. The error I found in the '86 manual was corrected in the '89 manual. That involved the 70x2 spreadsheet about Microprocessor Interface Mode (aka "MIM").

The 70x2 has the best timing data in regard to MIM as its a function of Tc(C) whereas the 70x0 and 70x1 and only listed for some clock rates; however they add a TYP column for typical timing, which is useful. I've added a "TYP" typical timing field on the 70x2 MIM Spreadsheet as I'm looking for a spreadsheet construct to use that page to post the MIM Timing any 70x{0,1,2} selected. from tables on another sheet.


Efficiency by Combining Several RAM Testing, ROM Imaging and ROM Interfacing Tasks
My Read-Only Memory imaging and interfacing tasks can be efficiently combined with one Arduino setup:
(1) I have old some Random-Access Memory chips to test and validate.
(2) I have a lot of vintage system ROMs I'd like to archive into .BIN and or .HEX files and post-process some into disassembly files.
(3) I'd like to verify the GI SPRxxx serial ROMs interface, if any vintage SPR016/32 are still functional.

That's three good reasons to get an Arduino out and program it to test RAM, and read ROM chips.

I think confirming the GI SP025x-SPRxxx interface is clear enough and my arduino ROM archiving code could quickly be adapted to the emulate a SP025x-SPRxxx interface and even read any ROM code that may have been used in my TMS7000 designs. I think I have some old listings somewhere in storage that could make a quick determination which design project an EPROM was used on.

[Updated on: Thu, 23 May 2024 07:09]

Report message to a moderator

Re: DAISY256 works [message #10734 is a reply to message #10727] Sat, 27 April 2024 12:12 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi
Did some more testing with DAISY256. I added a jumper to allow for default serial port configuration. Also removed the Talker expansion ROM. It works fine with no expansion ROM which is nice and it can use the default serial port 9600, 7N2 settings. I swapped in the CTS256 debug monitor from Jim's circuit and when the debug monitor jumper it installed, it boots normally and works fine.

Thanks, Andrew Lynch
Baud Rate Tables for 70x1, 70x2, 70Cx2 [message #10736 is a reply to message #10734] Sun, 28 April 2024 21:43 Go to previous messageGo to next message
jayindallas is currently offline  jayindallas
Messages: 110
Registered: June 2021
Senior Member
; NOTE:	Some of the 70x2 and 70Cx2 could not do 50 and 110 baud. 
;	When a baud cannot be rendered, it is replaced with the lowest render baud rate.
;	Replaced baud rates are denoted in the right margin of the baud calculation block.
;
;  ____ ____ ____ ________ _______ ________ ______ ____ _____ __________ ________
; | A0 | A1 | A2 | offset | SCTL1 | T3DATA | Baud | PL | TL  |  Actual  | Error  |		(Baud Table #01)
; |____|____|____|________|_______|________|______|____|_____|__________|________|
; |  0 |  0 |  0 |   +0   |  FFh  |   FFh  |  - - - - - Parallel Mode - - - - -  |  Baud Rates for:
; |  0 |  0 |  1 |   +1   |  40h  |   20h  | 1200 |  0 |  32 |  1183.71 | -1.36% |  (1)  CTS256A-AL2 & 70x1 with
; |  0 |  1 |  0 |   +2   |  41h  |   B1h  |  110 |  1 | 177 |   109.73 | -0.25% |  (2)  divide-by-4 CLK option
; |  0 |  1 |  1 |   +3   |  40h  |   07h  | 4800 |  0 |   7 |  4882.81 |  1.73% |  (3)  plus a 10 Mhz crystal
; |  1 |  0 |  0 |   +4   |  43h  |   C2h  |   50 |  3 | 194 |    50.08 |  0.16% |  (4)  for a 2.5 Mhz internal CLK
; |  1 |  0 |  1 |   +5   |  40h  |   0Fh  | 2400 |  0 |  15 |  2441.41 |  1.73% |
; |  1 |  1 |  0 |   +6   |  40h  |   81h  |  300 |  0 | 129 |   300.48 |  0.16% |
; |  1 |  1 |  1 |   +7   |  40h  |   03h  | 9600 |  0 |   3 |  9765.63 |  1.73% |
; |____|____|____|________|_______|________|______|____|_____|__________|________|
;SCTL1 values:    +0  +1  +2  +3  +4  +5  +6  +7        ;  (1)  CTS256A-AL2 & 70x1 with		(Baud Table #01)
SCT1TB  BYTE     >FF,>40,>41,>40,>43,>40,>40,>40        ;  (2)  divide-by-4 CLK option
;T3DATA values:   +0  +1  +2  +3  +4  +5  +6  +7        ;  (3)  plus a 10 Mhz crystal
T3DATA  BYTE     >FF,>20,>B1,>07,>C2,>0F,>81,>03        ;  (4)  for a 2.5 Mhz internal CLK

;  ____ ____ ____ ________ _______ ________ ______ ____ _____ __________ ________
; | A0 | A1 | A2 | offset | SCTL1 | T3DATA | Baud | PL | TL  |  Actual  | Error  |		(Baud Table #02)
; |____|____|____|________|_______|________|______|____|_____|__________|________|
; |  0 |  0 |  0 |   +0   |  FFh  |   FFh  |  - - - - - Parallel Mode - - - - -  |  Baud Rates for:
; |  0 |  0 |  1 |   +1   |  40h  |   0Fh  | 1200 |  0 |  15 |  1220.70 |  1.73% |  (1)  70x1 with
; |  0 |  1 |  0 |   +2   |  40h  |   B1h  |  110 |  0 | 177 |   109.73 | -0.25% |  (2)  divide-by-4 CLK option
; |  0 |  1 |  1 |   +3   |  40h  |   03h  | 4800 |  0 |   3 |  4882.81 |  1.73% |  (3)  plus a 5 Mhz crystal
; |  1 |  0 |  0 |   +4   |  41h  |   C2h  |   50 |  1 | 194 |    50.08 |  0.16% |  (4)  for a 1.25 Mhz internal CLK
; |  1 |  0 |  1 |   +5   |  40h  |   07h  | 2400 |  0 |   7 |  2441.41 |  1.73% |
; |  1 |  1 |  0 |   +6   |  40h  |   40h  |  300 |  0 |  64 |   300.48 |  0.16% |
; |  1 |  1 |  1 |   +7   |  40h  |   01h  | 9600 |  0 |   1 |  9765.63 |  1.73% |
; |____|____|____|________|_______|________|______|____|_____|__________|________|
;SCTL1 values:    +0  +1  +2  +3  +4  +5  +6  +7        ;  (1)  70x1 with			(Baud Table #02)
SCT1TB  BYTE     >FF,>40,>40,>40,>41,>40,>40,>40        ;  (2)  divide-by-4 CLK option
;T3DATA values:   +0  +1  +2  +3  +4  +5  +6  +7        ;  (3)  plus a 5 Mhz crystal
T3DATA  BYTE     >FF,>0F,>B1,>03,>C2,>07,>40,>01        ;  (4)  for a 1.25 Mhz internal CLK

;  ____ ____ ____ ________ _______ ________ ______ ____ _____ __________ ________
; | A0 | A1 | A2 | offset | SCTL1 | T3DATA | Baud | PL | TL  |  Actual  | Error  |		(Baud Table #03)
; |____|____|____|________|_______|________|______|____|_____|__________|________|
; |  0 |  0 |  0 |   +0   |  FFh  |   FFh  |  - - - - - Parallel Mode - - - - -  |  Baud Rates for:
; |  0 |  0 |  1 |   +1   |  40h  |   67h  | 1200 |  0 | 103 |  1201.92 |  0.16% |  (1)  70x2 & 70Cx2  with
; |  0 |  1 |  0 |   +2   |  42h  |   8Ah  |  300 |  2 | 138 |   299.76 | -0.08% |  (2)  divide-by-2 CLK option
; |  0 |  1 |  1 |   +3   |  40h  |   19h  | 4800 |  0 |  25 |  4807.69 |  0.16% |  (3)  plus a 8 Mhz crystal
; |  1 |  0 |  0 |   +4   |  42h  |   8Ah  |  300 |  2 | 138 |   299.76 | -0.08% |  (4)  for a 4 Mhz internal CLK
; |  1 |  0 |  1 |   +5   |  40h  |   33h  | 2400 |  0 |  51 |  2403.85 |  0.16% |
; |  1 |  1 |  0 |   +6   |  42h  |   8Ah  |  300 |  2 | 138 |   299.76 | -0.08% |   50 baud replaced with 300 baud
; |  1 |  1 |  1 |   +7   |  40h  |   0Ch  | 9600 |  0 |  12 |  9615.38 |  0.16% |  110 baud replaced with 300 baud
; |____|____|____|________|_______|________|______|____|_____|__________|________|
;SCTL1 values:    +0  +1  +2  +3  +4  +5  +6  +7        ;  (1)  70x2 & 70Cx2  with		(Baud Table #03)
SCT1TB  BYTE     >FF,>40,>42,>40,>42,>40,>42,>40        ;  (2)  divide-by-2 CLK option
;T3DATA values:   +0  +1  +2  +3  +4  +5  +6  +7        ;  (3)  plus a 8 Mhz crystal
T3DATA  BYTE     >FF,>67,>8A,>19,>8A,>33,>8A,>0C        ;  (4)  for a 4 Mhz internal CLK

;  ____ ____ ____ ________ _______ ________ ______ ____ _____ __________ ________
; | A0 | A1 | A2 | offset | SCTL1 | T3DATA | Baud | PL | TL  |  Actual  | Error  |		(Baud Table #04)
; |____|____|____|________|_______|________|______|____|_____|__________|________|
; |  0 |  0 |  0 |   +0   |  FFh  |   FFh  |  - - - - - Parallel Mode - - - - -  |  Baud Rates for:
; |  0 |  0 |  1 |   +1   |  40h  |   5Ch  | 1200 |  0 |  92 |  1202.77 |  0.23% |  (1)  70x2 & 70Cx2  with
; |  0 |  1 |  0 |   +2   |  43h  |   FDh  |  110 |  3 | 253 |   110.10 |  0.09% |  (2)  divide-by-2 CLK option
; |  0 |  1 |  1 |   +3   |  40h  |   16h  | 4800 |  0 |  22 |  4863.39 |  1.32% |  (3)  plus a 7.158908 Mhz crystal
; |  1 |  0 |  0 |   +4   |  43h  |   FDh  |  110 |  3 | 253 |   110.10 |  0.09% |  (4)  for a 3.579454 Mhz internal CLK
; |  1 |  0 |  1 |   +5   |  40h  |   2Eh  | 2400 |  0 |  46 |  2379.96 | -0.83% |
; |  1 |  1 |  0 |   +6   |  41h  |   B9h  |  300 |  1 | 185 |   300.69 |  0.23% |   50 baud replaced with 110 baud
; |  1 |  1 |  1 |   +7   |  40h  |   0Bh  | 9600 |  0 |  11 |  9321.49 | -2.90% |
; |____|____|____|________|_______|________|______|____|_____|__________|________|
;SCTL1 values:    +0  +1  +2  +3  +4  +5  +6  +7        ;  (1)  70x2 & 70Cx2  with		(Baud Table #04)
SCT1TB  BYTE     >FF,>40,>43,>40,>43,>40,>41,>40        ;  (2)  divide-by-2 CLK option
;T3DATA values:   +0  +1  +2  +3  +4  +5  +6  +7        ;  (3)  plus a 7.158908 Mhz crystal
T3DATA  BYTE     >FF,>5C,>FD,>16,>FD,>2E,>B9,>0B        ;  (4)  for a 3.579454 Mhz internal CLK

;  ____ ____ ____ ________ _______ ________ ______ ____ _____ __________ ________
; | A0 | A1 | A2 | offset | SCTL1 | T3DATA | Baud | PL | TL  |  Actual  | Error  |		(Baud Table #05)
; |____|____|____|________|_______|________|______|____|_____|__________|________|
; |  0 |  0 |  0 |   +0   |  FFh  |   FFh  |  - - - - - Parallel Mode - - - - -  |  Baud Rates for:
; |  0 |  0 |  1 |   +1   |  40h  |   40h  | 1200 |  0 |  64 |  1201.92 |  0.16% |  (1)  70x2 & 70Cx2  with
; |  0 |  1 |  0 |   +2   |  43h  |   B1h  |  110 |  3 | 177 |   109.73 | -0.25% |  (2)  divide-by-2 CLK option
; |  0 |  1 |  1 |   +3   |  40h  |   0Fh  | 4800 |  0 |  15 |  4882.81 |  1.73% |  (3)  plus a 5 Mhz crystal
; |  1 |  0 |  0 |   +4   |  43h  |   B1h  |  110 |  3 | 177 |   109.73 | -0.25% |  (4)  for a 2.5 Mhz internal CLK
; |  1 |  0 |  1 |   +5   |  40h  |   20h  | 2400 |  0 |  32 |  2367.42 | -1.36% |
; |  1 |  1 |  0 |   +6   |  41h  |   81h  |  300 |  1 | 129 |   300.48 |  0.16% |   50 baud replaced with 110 baud
; |  1 |  1 |  1 |   +7   |  40h  |   07h  | 9600 |  0 |   7 |  9765.63 |  1.73% |
; |____|____|____|________|_______|________|______|____|_____|__________|________|
;SCTL1 values:    +0  +1  +2  +3  +4  +5  +6  +7        ;  (1)  70x2 & 70Cx2  with		(Baud Table #05)
SCT1TB  BYTE     >FF,>40,>43,>40,>43,>40,>41,>40        ;  (2)  divide-by-2 CLK option
;T3DATA values:   +0  +1  +2  +3  +4  +5  +6  +7        ;  (3)  plus a 5 Mhz crystal
T3DATA  BYTE     >FF,>40,>B1,>0F,>B1,>20,>81,>07        ;  (4)  for a 2.5 Mhz internal CLK

;  ____ ____ ____ ________ _______ ________ ______ ____ _____ __________ ________
; | A0 | A1 | A2 | offset | SCTL1 | T3DATA | Baud | PL | TL  |  Actual  | Error  |		(Baud Table #06)
; |____|____|____|________|_______|________|______|____|_____|__________|________|
; |  0 |  0 |  0 |   +0   |  FFh  |   FFh  |  - - - - - Parallel Mode - - - - -  |  Baud Rates for:
; |  0 |  0 |  1 |   +1   |  40h  |   3Fh  | 1200 |  0 |  63 |  1200.00 |  0.00% |  (1)  70x2 & 70Cx2  with
; |  0 |  1 |  0 |   +2   |  42h  |   E8h  |  110 |  2 | 232 |   109.87 | -0.12% |  (2)  divide-by-2 CLK option
; |  0 |  1 |  1 |   +3   |  40h  |   0Fh  | 4800 |  0 |  15 |  4800.00 |  0.00% |  (3)  plus a 4.9152 Mhz crystal
; |  1 |  0 |  0 |   +4   |  42h  |   E8h  |  110 |  2 | 232 |   109.87 | -0.12% |  (4)  for a 2.4576 Mhz internal CLK
; |  1 |  0 |  1 |   +5   |  40h  |   1Fh  | 2400 |  0 |  31 |  2400.00 |  0.00% |
; |  1 |  1 |  0 |   +6   |  40h  |   FFh  |  300 |  0 | 255 |   300.00 |  0.00% |   50 baud replaced with 110 baud
; |  1 |  1 |  1 |   +7   |  40h  |   07h  | 9600 |  0 |   7 |  9600.00 |  0.00% |
; |____|____|____|________|_______|________|______|____|_____|__________|________|
;SCTL1 values:    +0  +1  +2  +3  +4  +5  +6  +7        ;  (1)  70x2 & 70Cx2  with		(Baud Table #06)
SCT1TB  BYTE     >FF,>40,>42,>40,>42,>40,>40,>40        ;  (2)  divide-by-2 CLK option
;T3DATA values:   +0  +1  +2  +3  +4  +5  +6  +7        ;  (3)  plus a 4.9152 Mhz crystal
T3DATA  BYTE     >FF,>3F,>E8,>0F,>E8,>1F,>FF,>07        ;  (4)  for a 2.4576 Mhz internal CLK

;  ____ ____ ____ ________ _______ ________ ______ ____ _____ __________ ________
; | A0 | A1 | A2 | offset | SCTL1 | T3DATA | Baud | PL | TL  |  Actual  | Error  |		(Baud Table #07)
; |____|____|____|________|_______|________|______|____|_____|__________|________|
; |  0 |  0 |  0 |   +0   |  FFh  |   FFh  |  - - - - - Parallel Mode - - - - -  |  Baud Rates for:
; |  0 |  0 |  1 |   +1   |  40h  |   2Eh  | 1200 |  0 |  46 |  1189.98 | -0.83% |  (1)  70x2 & 70Cx2  with
; |  0 |  1 |  0 |   +2   |  41h  |   FDh  |  110 |  1 | 253 |   110.10 |  0.09% |  (2)  divide-by-2 CLK option
; |  0 |  1 |  1 |   +3   |  40h  |   0Bh  | 4800 |  0 |  11 |  4660.75 | -2.90% |  (3)  plus a 3.579454 Mhz crystal
; |  1 |  0 |  0 |   +4   |  41h  |   FDh  |  110 |  1 | 253 |   110.10 |  0.09% |  (4)  for a 1.789727 Mhz internal CLK
; |  1 |  0 |  1 |   +5   |  40h  |   16h  | 2400 |  0 |  22 |  2431.69 |  1.32% |
; |  1 |  1 |  0 |   +6   |  40h  |   B9h  |  300 |  0 | 185 |   300.69 |  0.23% |   50 baud replaced with 110 baud
; |  1 |  1 |  1 |   +7   |  40h  |   05h  | 9600 |  0 |   5 |  9321.49 | -2.90% |
; |____|____|____|________|_______|________|______|____|_____|__________|________|
;SCTL1 values:    +0  +1  +2  +3  +4  +5  +6  +7        ;  (1)  70x2 & 70Cx2  with		(Baud Table #07)
SCT1TB  BYTE     >FF,>40,>41,>40,>41,>40,>40,>40        ;  (2)  divide-by-2 CLK option
;T3DATA values:   +0  +1  +2  +3  +4  +5  +6  +7        ;  (3)  plus a 3.579454 Mhz crystal
T3DATA  BYTE     >FF,>2E,>FD,>0B,>FD,>16,>B9,>05        ;  (4)  for a 1.789727 Mhz internal CLK

[Updated on: Thu, 23 May 2024 07:11]

Report message to a moderator

Re: DAISY256 works [message #10737 is a reply to message #10736] Mon, 29 April 2024 04:16 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi Jay
Yes, if we could get the TMS70C02 to work with some custom CTS256 firmware that would solve the limited availability of hardware issue. TMS70C02 are really common and inexpensive.

TMS7001, TMS7041, PIC7001, PIC7041, I think they all work fine but aren't nearly as common as TMS70C02. I think TMS77C82 would be even better yet although would require more extensive changes.

Thanks, Andrew Lynch
Re: DAISY256 works [message #10738 is a reply to message #10737] Mon, 29 April 2024 05:52 Go to previous messageGo to next message
plasmo is currently offline  plasmo
Messages: 916
Registered: March 2017
Location: New Mexico, USA
Senior Member
Are there reasons to use TMS70xx processor? It seems to me Z80 can do the job adequately to avoid learning another computer tool chain and inventory of parts.
Bill
Re: DAISY256 works [message #10739 is a reply to message #10738] Mon, 29 April 2024 15:09 Go to previous messageGo to next message
jayindallas is currently offline  jayindallas
Messages: 110
Registered: June 2021
Senior Member
Bill, aka Plasmo wrote:
"...Are there reasons to use TMS70xx processor? It seems to me Z80 can do the job adequately..."

Your suggestion that a Z80 could do this is certainly true... You can do this with ANY processor, or even a RPi Pico or Zero.
There are no limits for any design anyone wants to create.

The 7000 series make it a little closer to original-art. But reasons you asked about, are in the following:

Radio Shack's Two-Chip, Text-to-Speech & Voice Synthesizer
- - - - - - - - - - - - - - - - - - - - - -
Archer Catalog # 276-1786 . . . $16.95
CTS256A-AL2
Text-To-Speech Controller Chip
Companion to SP0256-AL2 Voice Synthesizer
- - - - - - - - - - - - - - - - - - - - - -
Archer Catalog # 276-1784 . . . $12.95
SP9256-AL2
Voice Synthesizer IC
Allophone Speech Set
- - - - - - - - - - - - - - - - - - - - - -
The original General Instrument CTS256A-AL2 Text-To-Speech Controller Chip, that Radio Shack/Archer later sold in their stores, was actually a PIC7041 microprocessor. The PIC7041 was a second source microprocessor for the Texas Instrument TMS7041. Someone a few years back read the internal ROM of the CTS256A-AL2 and published it on GITHUB and some new work he did on it. Various legacy projects on the CTS and associated SP0256-AL2 Voice Synthesizer IC, makes it easy to grab old, original code with no modifications for 70x1s in external EPROM mode, few modifications for 70x2s (same mode) and more modifications for a 70Cx2 (same mode) or 77C42 with windowed EPROM instead of internal masked ROM.

Instead of being unobtainium micros, Andrew J. Lynch realized that the 7000 Family could utilize external EPROM (mode option) and led that keen observation with his research.

That is why the TMS/PIC 7041 is the focus instead of other possibilities.
Advantages:
(1) You have the original PIC7041 code (was masked ROM in the CTS256A-AL2).
(2) You can add an external EPROM on a new PCB and use cheaper vintage surplus 7041s, or likely parallel interface mode only with 7001s.
(3) With few modifications to the original code, you can run EPROM for NMOS 7042s, likely parallel interface with 7002s.
(4) With more modifications, you can run EPROM for CMOS 70C42, and likely parallel interface with 70C02s.
(5) Even a TMS77C82 or TMS77C42 windowed EPROM processor.
Lots of options, very little new code changes.

[Updated on: Thu, 02 May 2024 11:30]

Report message to a moderator

Re: DAISY256 works [message #10740 is a reply to message #10739] Mon, 29 April 2024 20:25 Go to previous messageGo to next message
plasmo is currently offline  plasmo
Messages: 916
Registered: March 2017
Location: New Mexico, USA
Senior Member
Thanks for the detailed explanation of the relationship between TMS70xx and SP0256. I'm working with Andrew to look into replacing SP0256-AL2 with a generic SP0256 + external ROM + CPLD glue logic. I've ordered two SP0256-AL2 from a reputable seller as well as few cheap SP0256-AL2 from China (probably non-AL2). I plan to first breadboard the good SP0256-AL2 using a CPLD protoboard which is designed to plug into RC2014 backplane and driven with Z80. The CPLD protoboard has lots of spare I/O, so I can also use it to interface to external ROM if the SP0256AL2 from China turned out to be non-AL2 parts. I don't have lots of time to learn another processor, so I thought using Z80 may be an easier way to explore SP0256AL2, it is something I can easily pick up when I have time and put away when I'm busy.
Bill
Re: DAISY256 works [message #10741 is a reply to message #10740] Tue, 30 April 2024 04:44 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi Bill
Yes, there are two separate things happening at once. First, is the CTS256 replacement with common off-the-shelf parts (TMS7001 + 2732) to solve the limited availability of CTS256 chips. That's already done with DAISY256 and all that's left is writing custom firmware to support more TMS7xxx type chips.

Second in the modification to SP0256 to use external ROM and re-utilize non-AL2 SP0256s in a speech synthesis roll like the Radio Shack Text-to-speech circuit. That's where the CPLD project comes in.

I agree that you don't necessarily need a CTS256 or TMS7001 type processor to drive the SP0256. There are RC2014 board with only the SP0256 chip driven by the Z80 (or whatever) processor.

However, if you use the bare SP0256, the host processor has to drive it using the 59 allophones not regular English text. The CTS256 employs the Naval Research Lab text-to-speech algorithm so you can feed it regular English text over the serial port and it drives the SP0256. Or if you want, you can re-implement the NRL TTS algorithm on any other CPU and drive the SP0256 directly.

What I'd like to do with the SP0256 is get a CPLD to interface it to a parallel EPROM like 2732. Then push the SP0256 into one of its test modes and force it to use the external serial ROM instead of its internal mask ROM. Then all those re-marked fake non-AL2 SP0256 chips can now be used to do speech synthesis like the SP0256A-AL2. This should dramatically increase the supply of usable SP0256 chips so people can do Radio Shack style TTS projects without getting fleeced on eBay buying parts (and hoping they are not fake).

Thanks, Andrew Lynch

PS, I think you're CPLD protoboard should work just fine. Assuming it has enough space for a SP0256 circuit with audio amplifier (LM386) plus 2732. It should work fine and just drive it using the Z80 like Scott Baker does with the RC2014 SP0256 board. As I recall, it is just sending a number to the SP0256 using an IO port to get it to speak an allophone. I wouldn't want to write a sentence that way but certainly enough to show the SP0256 is working.

https://www.youtube.com/watch?v=nAmyPuC4WSk

[Updated on: Tue, 30 April 2024 04:56]

Report message to a moderator

Re: DAISY256 works [message #10751 is a reply to message #10741] Mon, 06 May 2024 19:31 Go to previous messageGo to next message
berzerkula is currently offline  berzerkula
Messages: 21
Registered: May 2020
Location: Arkansas, USA
Junior Member
Greetings,

As far as the PIC7041 goes, I have PIC7041-014 and PIC7041-025. I figure they are different masks. Anyone have insight about these two variants?

Thanks,

William


You feel a whole lot more like you do now than you did when you used to.
Re: DAISY256 works [message #10752 is a reply to message #10751] Tue, 07 May 2024 04:50 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
Hi
In terms of what those PIC7041 variants do? Don't know, but there might be some clues in the mask ROMs if you search using a debugger or ROM dump.

I suspect they'll work in a DAISY256 board though. If you send them to me, I'll run a check in mine or if you want, I'll send you a PCB so you can check yourself.

The DAISY256 sets the PIC7041 to ignore it's internal mask ROM and execute from external ROM. So it will act like a CTS256. The only question is whether it is divide-by-2 or divide-by-4

Thanks, Andrew Lynch
Re: DAISY256 works [message #10764 is a reply to message #10752] Tue, 14 May 2024 22:37 Go to previous messageGo to next message
berzerkula is currently offline  berzerkula
Messages: 21
Registered: May 2020
Location: Arkansas, USA
Junior Member
Hello Andrew,

I do have the Talker PCB and Scott Baker's PCB, is the Daisy256 much different from them? If you desire, I could work with your Daisy256 design if it is quite different.

-William


You feel a whole lot more like you do now than you did when you used to.
Re: DAISY256 works [message #10765 is a reply to message #10764] Wed, 15 May 2024 03:38 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
berzerkula wrote on Wed, 15 May 2024 01:37
Hello Andrew,

I do have the Talker PCB and Scott Baker's PCB, is the Daisy256 much different from them? If you desire, I could work with your Daisy256 design if it is quite different.

-William
Hi
The purpose of DAISY256 is/was to test my theory that you could replace the CTS256 with a TMS7001/TMS7041/PIC7001/PIC7041 and an external 2732 EPROM. That turned out to be true, so I think the board was a success. It is based on the mecparts Talker (roughly) with my modifications to for the CTS256 replacement.

You could use DAISY256 as a regular CTS256/SP0256 Radio Shack text-to-speech board and it certainly works fine in that role. Really the only major differences from the Scott Baker PCB and/or mecparts Talker is the extra components for the TMS7001 support.

CTS256 costs $100 plus on eBay if you can find one. A TMS7001 is like $5-$10 and will do nearly the same thing.

If you would like a DAISY256 board, I have some extras and you can have one. I'll ship it to you assuming you are in the US. International shipping has gotten very expensive lately, so I won't be doing that until the rates come back down.

I am planning a second version of DAISY256 but this time will include circuitry to allow usage of non-AL2 SP0256 chips. It should greatly increase the supply of usable SP0256 type chips available. Many (not all) of the fake SP0256A-AL2s are actually remarked SP0256A-xxx for dedicated applications. They'll sort of work but not like you would expect. With the new configuration, I am hoping to disable the internal mask ROM and use an external EPROM instead for the 59 allophone information.

Thanks, Andrew Lynch
Re: DAISY256 works [message #10794 is a reply to message #10737] Sun, 16 June 2024 11:21 Go to previous messageGo to next message
lynchaj is currently offline  lynchaj
Messages: 1080
Registered: June 2016
Senior Member
lynchaj wrote on Mon, 29 April 2024 07:16
Hi Jay
Yes, if we could get the TMS70C02 to work with some custom CTS256 firmware that would solve the limited availability of hardware issue. TMS70C02 are really common and inexpensive.

TMS7001, TMS7041, PIC7001, PIC7041, I think they all work fine but aren't nearly as common as TMS70C02. I think TMS77C82 would be even better yet although would require more extensive changes.

Thanks, Andrew Lynch
Hi
Thanks to some help from Fred, I have CTS256A custom firmware for the TMS70C02 with 5 MHz crystal (important, the default 10 MHz crystal will not work!Wink

With this custom firmware, the DAISY256 can use a TMS70C02 to receive serial text and speak just like a CTS256A

Thanks, Andrew Lynch
Re: DAISY256 works [message #10823 is a reply to message #10794] Mon, 15 July 2024 23:57 Go to previous messageGo to next message
berzerkula is currently offline  berzerkula
Messages: 21
Registered: May 2020
Location: Arkansas, USA
Junior Member
There is a book which may help us, and it has a diagram 1.10

Designing With Speech Processing Chips book by Ricardo Jiménez. He did reference Microchip publication DS5007A-1 1984 but can't find that document anywhere.

  • Attachment: image.png
    (Size: 94.12KB, Downloaded 51 times)


You feel a whole lot more like you do now than you did when you used to.

[Updated on: Wed, 17 July 2024 07:11]

Report message to a moderator

Re: DAISY256 works [message #10828 is a reply to message #10765] Wed, 24 July 2024 15:46 Go to previous messageGo to next message
scruss is currently offline  scruss
Messages: 62
Registered: December 2015
Location: Toronto, Canada
Member

lynchaj wrote on Wed, 15 May 2024 06:38
... Many (not all) of the fake SP0256A-AL2s are actually remarked SP0256A-xxx for dedicated applications.
I'd be interested in this. I have a whole tube of the automotive SP0256A chips. I suspect that the surplus place I got it from has several tubes more


> Does anyone know what each of the pins on the 6502 CPU chip in the Apple II Plus does?
They all plug into the socket on the motherboard to keep the chip from drifting away. - c.s.a2 FAQ of yore
Re: DAISY256 works [message #10855 is a reply to message #10828] Tue, 26 November 2024 17:17 Go to previous message
berzerkula is currently offline  berzerkula
Messages: 21
Registered: May 2020
Location: Arkansas, USA
Junior Member
Unsure if there is still interest in this project, but here is some info that may help us with creating our own exception ROM's.

https://github.com/mecparts/CTS256-exceptions

I never was able to find the document discussed, but I'm glad they found some form of a document and then were able to disassemble the machine code.
However, if the document they mention is the Application Note AN-0505 Revision D, then it does give some info about the exception and user ROM's.

Right now, I'm using Scott Baker's board, which I assembled a few years ago, and have recreated the exception hex and wrote the ROM to an M2732AF1 200nS EPROM.
I used a jumper at 74138 Y4 for address $4000. The system uses the exception ROM.

While playing the Daisy song, some words popped out, which needed some work. I worked out the allophones required to make them sound correct. They still may need some tweaking.
Also some when saying phrases for time like quarter. Some numbers may need some help.

<[BICYCLE]<=[BB2 AA AY SS SS IH IH PA3 KK1 EL] ; BICYCLE
<[CARRIAGE]=[KK1 EH XR EY PA2 JH] ; CARRIAGE
<[FLOWER]<=[FF LL AW ER1] ; FLOWER
<[HEART]<=[HH2 AR TT2] ; HEART
<[MARRIAGE]<=[MM EH XR EY PA2 JH] ; MARRIAGE
<[PEDALING]<=[PP EH EH PA2 DD2 EL IH NG] ; PEDALING
<[POLICEMAN]<=[PP AX AX LL IY SS PA1 MM EH EH NN1] ; POLICEMAN
<[QUARTER]<=[KK3 WW OR PA2 TT2 ER1] ; QUARTER
<[SOMETIMES]<=[SS SS AX AX PA2 MM TT2 AA AY MM ZZ] ; SOMETIMES


I found a document titled "pl02_56_release_notes.pdf" which gives some great knowledge about allophone speech synthesis. It gives good information of which allophones to use in many situations.

This in conjunction with the Emulator at https://github.com/GmEsoft/SP0256_CTS256A-AL2 helps me test before writing the EPROM.

-William


You feel a whole lot more like you do now than you did when you used to.

[Updated on: Wed, 27 November 2024 17:44]

Report message to a moderator

Previous Topic: Dave Runkle's front panel for the SBC6120-RBC
Next Topic: Resurrecting EaZy80, a forgotten glue-less 22MHz Z80 SBC.


Current Time: Sat Feb 08 21:00:42 PST 2025

Total time taken to generate the page: 0.00985 seconds