Jump to content





AtariVox

Posted by cd-w, 11 March 2008 · 3,592 views

Atari Programming
When I first heard about the AtariVox I wasn't too impressed with the sound quality, and decided not to bother getting one. However, I changed my mind after seeing a demo of Man Goes Down at the vgXpo a few years ago. I realised that the sound quality was a perfect match for the Atari, being broadly equivalent to the quality of speech chips back in the day. I now think it would sound "wrong" if the Atari were to produce high-quality speech, just as it would sound unnatural if Stephen Hawking were to upgrade his speech unit.

I bought an AtariVox when they became available again (in the new casing), but didn't actually use it until today. The main reason being that my Atari gear has been in storage since I last moved, and I'm about to move again. I was able to use the AtariVox now due to the acquisition of the handy AtariVox USB adapter, pictured below:

Attached Image

The USB adapter enables the AtariVox to be used from a normal PC, without the need for an Atari console. This might seem rather pointless, but the main reason for using this adaptor is that it makes AtariVox development much easier. Since the AtariVox is not (yet) supported by any of the emulators, it was previously necessary to write a test program and then upload it to the Atari, e.g. using the Krokodile cart. With the USB adapter, the AtariVox can be programmed directly from the PC. Incidentally, I was grateful for Nathan's review of the AtariVox, since my unit was indeed set to maximum volume. Using the USB adapter is simple - just plug it into the PC, and Windows recognises it as a serial USB device (Mac and Linux users will not be so lucky). The AtariVox can then be programmed using the hacked PhraseALator software or VoxPlay.

It turns out that the AtariVox is not particularly easy to program. It is capable of making a wide range of sounds, but assembling these sounds into recognisable speech can take a lot of trial and error. Fortunately the PhraseALator software has a reasonably large dictionary that can be used in many cases. I also found that I got rapidly better at figuring out the necessary sounds after a bit of practise. Here is a reasonable approximation to "Juno First":

\JH \UW \NO \OWWW \P1 \FF \AXRR \SE \TT

I now think that the AtariVox is quite a cool bit of hardware, and the USB interface makes it much easier to develop for. I'm planning to use it in my future software projects, though I'm not sure I will be able to use it in Juno First, since it requires rather a lot of cycles - perhaps just a few bits of speech during the title screen. Now, if only it was as easy to develop for the Savekey ...

Chris




it works fine on the Mac, I just need to make the program do more than say SpiceWare :lolblue:
  • Report
I'm wondering... now that there's a USB interface for it, could support be added to Stella to drive the AtariVox through the interface? So rather than emulating the AtariVox itself, it's just sending out the serial commands through the USB bus?
  • Report
If Stephen Anthony (or who ever) wants to put support into Stella, I'll gladly send them a complimentary interface. Don't forget it can be made to work with the AVox's EEPROM memory (and SaveKey) too, there's some programming docs on the FTDI site to access the chip ports (which are already connected to the memory).
  • Report

If Stephen Anthony (or who ever) wants to put support into Stella, I'll gladly send them a complimentary interface. Don't forget it can be made to work with the AVox's EEPROM memory (and SaveKey) too, there's some programming docs on the FTDI site to access the chip ports (which are already connected to the memory).


This would be great to have, and should speed up the adoption of the ATariVox/SaveKey (since they are a bit of a pain to develop for at the moment).
In principle, it would seem that supporting the AtariVox USB adaptor should be very similar to supporting the Stelladaptor, but I don't have enough knowledge of C++ or Stella to do it myself.

Chris
  • Report
I posted in the emulation forum about it.
  • Report

If Stephen Anthony (or who ever) wants to put support into Stella, I'll gladly send them a complimentary interface. Don't forget it can be made to work with the AVox's EEPROM memory (and SaveKey) too, there's some programming docs on the FTDI site to access the chip ports (which are already connected to the memory).

I'd be willing to take a stab at adding this to Stella. However, I need to wrap my head around what's going on. First thing, what hardware do I need? I know you're willing to send a complimentary interface, and I gladly accept that (please send me a PM to make arrangements). However, what other hardware do I need? Do I still need to buy an AtariVox (hint, hint!)?

We actually attempted to add software emulation of the AtariVox device to Stella, but it didn't work out. Some of the framework may still be useful, though. And Supercat recently sent me EEPROM emulation code, so it seems I have (or will soon have) most of the pieces. I just need to figure out how they all fit together.

Basically, can you outline for me what this functionality is for (ie, what's the use case)? Am I right in thinking you want to have Stella support the AtariVox so that supported ROMs will send data directly to the device, just as if it was plugged into a real machine? So this support would be used to speed up development?? If so, I'd need access to some of those ROMs as well.

Or is there some other reason for adding this to Stella? I'd just like to get as much feedback as possible and make sure our goals are the same. Anyway, it all sounds quite exciting :lolblue:

One other thing I just noticed; Linux support is iffy. That could cause a problem, since Linux is my main development platform. I also maintain the Win32 and OSX ports, and can access those systems when necessary. But Linux is normally what I use. Is there some reason why the hardware won't work in Linux? Is it something with the hardware, or is support just not there in the Linux kernel??
  • Report

And Supercat recently sent me EEPROM emulation code, so it seems I have (or will soon have) most of the pieces. I just need to figure out how they all fit together.


Does Stella have some sort of cycle counter or ability to easily insert code to be executed periodically (say once per scan line)? How is the port I/O handled? What's required to compile it? I could give a stab at doing the serial emulation.
  • Report

I'd be willing to take a stab at adding this to Stella. However, I need to wrap my head around what's going on. First thing, what hardware do I need? I know you're willing to send a complimentary interface, and I gladly accept that (please send me a PM to make arrangements). However, what other hardware do I need? Do I still need to buy an AtariVox (hint, hint!)?

We actually attempted to add software emulation of the AtariVox device to Stella, but it didn't work out. Some of the framework may still be useful, though. And Supercat recently sent me EEPROM emulation code, so it seems I have (or will soon have) most of the pieces. I just need to figure out how they all fit together.

Basically, can you outline for me what this functionality is for (ie, what's the use case)? Am I right in thinking you want to have Stella support the AtariVox so that supported ROMs will send data directly to the device, just as if it was plugged into a real machine? So this support would be used to speed up development?? If so, I'd need access to some of those ROMs as well.

Or is there some other reason for adding this to Stella? I'd just like to get as much feedback as possible and make sure our goals are the same. Anyway, it all sounds quite exciting :lolblue:

One other thing I just noticed; Linux support is iffy. That could cause a problem, since Linux is my main development platform. I also maintain the Win32 and OSX ports, and can access those systems when necessary. But Linux is normally what I use. Is there some reason why the hardware won't work in Linux? Is it something with the hardware, or is support just not there in the Linux kernel??


Richard H. will be able to answer you properly, but here are some answers to your questions:
  • The AtariVox USB adapter is just a USB->Serial convertor. The only difference (I think) between this and a regular USB->Serial adapter is that it supplies the correct power to the AtariVox. You still need an AtariVox unit in addition to this interface.
  • I don't think Linux support will be a problem. The current tools don't work with Linux, but the USB adapter should. It is based on a FTDI FT232R chip. A driver for the chip is included in the latest 2.6 kernels and also on the FTDI website. There was a discussion on programming the chip here.
  • The intention is to allow Stella to use the real AtariVox hardware for games that support this unit, and to make development of new AtariVox games easy. The ROMS for these games should be availbable here, e.g. Go Fish, and Strat-O-Gems. I think Richard also has some AtariVox demos that will be useful.

CHris
  • Report
Chris has pretty much covered your answers. The FTDI site has everything you need, VCP (Virtual Com Port) and direct i/o control drivers (D2XX) of the chip (for accessing the EEPROM). BTW the AVox (and SaveKey) EEPROM SCL is connected to CBUS0, and SDA to CBUS1. The i2c protocol is documented in the driver code.

The AVox speech / sound works on 19200 baud 8n1 serial. It's actually inverted, but that's done through an option in the FTDI chip's firmware.

I can send you an interface, but I don't have any AVox's here as they're all built by Albert now. Perhaps he could loan you one or something.
  • Report

I can send you an interface, but I don't have any AVox's here as they're all built by Albert now. Perhaps he could loan you one or something.

Stephen - if Albert can't loan you one, have him send you one on me. I've got some store credit coming, and it would be worth it to me for this to work with Stella.
  • Report

I can send you an interface, but I don't have any AVox's here as they're all built by Albert now. Perhaps he could loan you one or something.

Stephen - if Albert can't loan you one, have him send you one on me. I've got some store credit coming, and it would be worth it to me for this to work with Stella.

Many thanks for the offer, but I've already made arrangements with both Richard and Al for the required hardware. Note that this support won't be in the next release, which I hope to do in the next 2-3 weeks. But I'm aiming for having it in the release after that. My job has severe downtime from May to August, so I should have enough time to get this done over the coming months. Other than that, I won't make an estimate on when it will be completed (since my estimates are always off anyway).
  • Report

Note that this support won't be in the next release, which I hope to do in the next 2-3 weeks.

Will this release fix the graphic glitches I reported a while ago?
  • Report

Many thanks for the offer, but I've already made arrangements with both Richard and Al for the required hardware. Note that this support won't be in the next release, which I hope to do in the next 2-3 weeks. But I'm aiming for having it in the release after that. My job has severe downtime from May to August, so I should have enough time to get this done over the coming months. Other than that, I won't make an estimate on when it will be completed (since my estimates are always off anyway).


OK, that is great news - it will certainly make AtariVox development much easier. Would be great if it also supported the SaveKey part of the AtariVox.

Chris
  • Report

Note that this support won't be in the next release, which I hope to do in the next 2-3 weeks.

Will this release fix the graphic glitches I reported a while ago?

Speaking of my estimates always being off; unfortunately, no, those graphical glitches have not been fixed yet. :lolblue: I'm basically depending on Brad Mott (original Stella author) to fix those, and his schedule is even worse than mine. However, if we don't have something done over the next several months, I'm going to take a stab at it myself. This is one area I'd like to get nailed for good.
  • Report
You can get this list from the AA store but here are the games that use the AtariVox:


Fall Down (speech and EEPROM)
Go Fish! (speech and EEPROM)
Strat-O-Gems Deluxe (speech and EEPROM)
Elevators Amiss (EEPROM only)
AStar (EEPROM only?)
Sync (speech only?)

Plus the WIP: Man Goes Down (WIP) (speech and EEPROM)
  • Report

If Stephen Anthony (or who ever) wants to put support into Stella, I'll gladly send them a complimentary interface. Don't forget it can be made to work with the AVox's EEPROM memory (and SaveKey) too, there's some programming docs on the FTDI site to access the chip ports (which are already connected to the memory).


This would be great to have, and should speed up the adoption of the ATariVox/SaveKey (since they are a bit of a pain to develop for at the moment).
In principle, it would seem that supporting the AtariVox USB adaptor should be very similar to supporting the Stelladaptor, but I don't have enough knowledge of C++ or Stella to do it myself.

Chris

OK, just a quick update on this. I received the AVox USB adapter, but I'm still waiting for an actual AVox. However, I've dived into 'documentation mode', and read everything I could find related to this. This is what I've found:

1) Thanks to our original attempt to add AtariVox emulation to Stella, we already had the 'bit-banging' part for SpeakJet data complete. That is, SpeakJet bytes are being correctly created and output (to an emulated SpeakJet for now).

2) Accessing the EEPROM portion of the AVox can't be done in virtual serial port mode (AFAICT).

3) Accessing the EEPROM requires talking directly to the AVox USB adaptor using an API defined by FTDI (the guys who created the FT232R UART), and this API is closed source (D2XX drivers).

4) Linking the closed source code into Stella is impossible, since Stella is under the GPL.

5) There is code to directly access the FT232R in Linux under the GPL, but that only helps Linux.

So as it stands, I can't integrate this directly into Stella. However, Eckhard Stolberg suggested that we just go with talking to the SpeakJet (ie, serial port stuff) and not the EEPROM (D2XX/direct access stuff). We can still emulate the EEPROM, but it would be to a file, not to the actual hardware EEPROM chip.

This has several advantages. Serial port programming is well documented on all platforms, bypasses the closed source API, and also allows users with the older serial adaptor to use this feature as well. And support could be added very fast.

Opinions, questions, etc? Actually, now that I think of it, how did the old serial port adaptor access the EEPROM stuff? Because maybe it can be done through the serial port??
  • Report

now that I think of it, how did the old serial port adaptor access the EEPROM stuff? Because maybe it can be done through the serial port??

The old serial adaptor used a microcontroller attached to the EEPROM and a separate utility to access it (via serial at a lower baud rate). The new one has the EEPROM connected directly to two of the FT232R's i/o ports (and can't be accessed through the VCP).

IMHO it would definitely be best to simulate the EEPROM in Stella as multiple writes (e.g. during testing) to the actual chip would eventually wear it out.

I'll try and write a separate utility for accessing the EEPROM, perhaps just a simple backup or something.
  • Report

now that I think of it, how did the old serial port adaptor access the EEPROM stuff? Because maybe it can be done through the serial port??

The old serial adaptor used a microcontroller attached to the EEPROM and a separate utility to access it (via serial at a lower baud rate). The new one has the EEPROM connected directly to two of the FT232R's i/o ports (and can't be accessed through the VCP).

IMHO it would definitely be best to simulate the EEPROM in Stella as multiple writes (e.g. during testing) to the actual chip would eventually wear it out.

I'll try and write a separate utility for accessing the EEPROM, perhaps just a simple backup or something.

OK, then serial mode only for the SpeakJet seems the best way to go. So from that POV, the support I'm adding to Stella will work with any serial converter, not the the AVox USB one.
  • Report

OK, then serial mode only for the SpeakJet seems the best way to go. So from that POV, the support I'm adding to Stella will work with any serial converter, not the the AVox USB one.

That's right :cool:

Just been doing a bit of coding and I have managed to read / write the CBUS pins (using the D2XX DLL). So it should just be a matter of incorporating the i2c protocol for me to get access to the EEPROM.
  • Report
Just an update concerning Stella support for this: I have the Linux and Win32 ports correctly outputing data to a virtual serial port, and it sounds great! Still todo is OSX support, which is proving to be more difficult since the VCP drivers don't seem to recognize the AVox USB adaptor.

Also todo before the next release is the EEPROM emulation. This will be to a file (perhaps named 'atarivox_eeprom.dat') and not directly to the AVox device. But that will still be very useful for testing and debugging, and will save wear and tear on the actual EEPROM.
  • Report

May 2019

S M T W T F S
   1234
567891011
12131415161718
1920212223 24 25
262728293031 

Recent Entries

Recent Comments

Search My Blog