Jump to content
IGNORED

AtariVox+ Few oddities


-^CrossBow^-

Recommended Posts

Hmm...so I put this on my Mateos 16 in 1 last night. But this test rom doesn't really work well at all.

 

first, it doesn't matter what phrase I chose, it only plays the phrase "Dungeon Stalker" and nothing else. I did noticed that all the old phrases related to berzerk/frenzy had been removed as it only showed a bunch of Blanks on that area. But either way, if I just keep pressing to activate a phrase, it will still after about a half dozen times or so, the AVox+ will reset itself in the same manner.

 

Would be interesting to have a 2600 compatible version that I can test between my 2600s and my 7800s to see if it still does it. If it does, that would indicate an inherit issue within the AVox+ itself or specifically the SpeakJet chip?

  • Like 1
Link to comment
Share on other sites

This may not be related at all...but in looking over the speakjet specs on its manual, it stated it can only handle up to 3 layers of commands at once. I'm sure that my activating a phrase before the current one finishes would exceed that.

 

Also I know you stated it does it eventually on Dungeon Stalker regardless of the Watch Out phrase or not, but again while playing some Dungeon Stalker it always causes a reset on the AVox+ when the wizard shows up and immediately after the Watch Out phrase is uttered.

 

I would be curious to know if it happens when Watch Out is spoken outside of the wizards presence on the screen during normal maze running baddie hunting mode?

Link to comment
Share on other sites

This may not be related at all...but in looking over the speakjet specs on its manual, it stated it can only handle up to 3 layers of commands at once.

The "phrases may call other phrases, sounds, or controls, with nesting up to 3 levels deep" comment is meant to refer to EEPROM stored "complex phrases".

 

Ad-hoc speech data doesn't/can't call other ad-hoc speech data. Instead you just send more data. So Dungeon Stalker uses 0 levels deep.

 

They repeat the caution again on page 15, for the "call phrase" command, and explicitly mention EEPROM phrases.

Link to comment
Share on other sites

The "phrases may call other phrases, sounds, or controls, with nesting up to 3 levels deep" comment is meant to refer to EEPROM stored "complex phrases".

 

Ad-hoc speech data doesn't/can't call other ad-hoc speech data. Instead you just send more data. So Dungeon Stalker uses 0 levels deep.

 

They repeat the caution again on page 15, for the "call phrase" command, and explicitly mention EEPROM phrases.

 

As I said...it may not ( and turns out isn't) related. Thanks for the explanation!

Link to comment
Share on other sites

Wow..okay so i put this on my harmony and loaded it up on my 7800 last night. I'm not sure how it works exactly as I can move the controller to get different phrases? But pushing the button will produce the Dungeon Stalker phrase.

 

anyway, pushing the button more than a few times will cause the reset condition same as the 7800 test and Dungeon Stalker.

 

If I use the joystick to actually select a direction like say Right for instance and hold it down for more than like a second or two, that will instantly cause it to reset in the same manner.

 

I will fire up an actual 2600 tonight and test it then to see if the same happens.

  • Like 1
Link to comment
Share on other sites

Thanks for doing that. Reproducing the problem outside of 7800-mode is great progress. The pure 2600 test will narrow it down even further, letting us know if the issue is with some atarivox, or with some 7800s.

 

FYI, the driver I used for the test is the original 2600 atarivox driver by Alex Herbert, and is in use by many homebrews. (And yes, the utility has a different speech sample assigned to each joystick cardinal direction and the fire button)

Link to comment
Share on other sites

Okay, in that case...pressing the controller to pretty much any direction just caused it to crash out and reset about %50 of the time. Sometimes I can press it in a direction and it will sound normal and then I can play another phrase. But often I could press a direction and it would start to say something and then sound garbled and reset.

 

It is much much worse in this 2600 test program than it was with the 7800.

 

Again when I get home this evening from work, i will hook it up to a 2600 or 3 and see if the same happens. if it does, that pretty much confirms it to be an issue with the AVox+ itself. If not, then the 7800 is obviously somehow to blame.

 

More an more this is really looking to be some sort of buffering issue with the AVox+ or with the speakjet itself?

Edited by -^Cro§Bow^-
Link to comment
Share on other sites

 

It is much much worse in this 2600 test program than it was with the 7800.

 

It looks like the 7800 version has a debounce routine, and my 2600 one didn't. So the 2600 sends more bytes per press.

 

I still can't trigger a reset or reset-like symptoms using the 2600 utility on my 7800.

Link to comment
Share on other sites

So it could be an isolated issue with either my 7800 or the AVox+ itself? Not sure how old yours is, but I just bought mine maybe a year ago...not quite a year?

 

I wish it were just my 7800, but I was able to reproduce the issue on my other 7800 that is an '84 made unit (Refubished by Atari in the late 80s). Just find it odd that two different models would do the same thing. Still the 2600 console test will be the deciding factor on whether it is the AVox+ that is actually the issue.

 

Wonder if there is a speech test rom for the Vectrex? Be interesting to see if something similar can be done in VecVoice mode too?

Edited by -^Cro§Bow^-
Link to comment
Share on other sites

So it could be an isolated issue with either my 7800 or the AVox+ itself? Not sure how old yours is, but I just bought mine maybe a year ago...not quite a year?

Mine is a few years older, from the first AtariVox+ units, soldered by Glenn Saunders and distributed by the.golden.ax. I believe the AA units are pretty much the same.

 

Another tester has an AA unit like yours, and can't reproduce the issue either. So I don't think the problem is the whole vox unit, but possibly a problem with certain speakjet chips.

 

If your 2600 testing is able to reproduce the problem, then I think the problem might be a bug in the speakjet reset-pitch+speed command. We'll try a version that skips the command and just queues everything, to confirm.

 

If your 2600 testing isn't able to reproduce the problem, I think it must be some sort of combined issues with both the 7800 and the speakjet contributing. This might be a bit harder to isolate.

Link to comment
Share on other sites

Okay..so I just tested this on my Sunnyvale H6. I'm able to reproduce the same thing..though it is harder to do it. Here is an example...

 

On the 7800..just a few button presses would reset it while it was trying to say dungeon stalker.

 

On the 2600...I wasn't able to make it fail using the button...

 

On the 7800 it would reset about 50% of the time when I moved the joystick in any direction or multiples quickly

 

On the 2600 it take several more tries..but it will eventually do the reset.

 

I could video showing the difference if that would help?

 

Also worth noting that sometimes on the 2600 when the reset tune would play, it was still able to produce speech. That happen about 3 times in my testing to force it to reset. The 7800 has never been able to produce speech again after the reset, without a hard power reset of the console.

  • Like 1
Link to comment
Share on other sites

I don't believe we need video. Your description is pretty clear.

 

Interesting that it's better on the 2600. That would be suggestive that the console contributes at least something too it.

 

Here's the 2600 version with debounce added (so holding the stick or fire won't continually send data) and I've removed the reset command. The commands will queue up - ie. pressing fire 3 times quickly will make it say "Dungeon Stalker" 3 times.

 

If you can reset it easily with this, it would be pretty suggestive it's a buffer overflow. If not, then the reset command is the ultimate trigger.

dstalk.bas.bin

  • Like 1
Link to comment
Share on other sites

Okay...results are in..

 

It still does it. The debounce is working because I can move the controller up several times and here it play the Entering the Dungeon phrase a few times..then at some point it will stop midway in the phrase and then sound like gibberish and then might work again or what I made happen twice..

 

Was after it did the gibberish and played the reset tone. It still played speech..but at a lower octave or pitch. So the pitch might be where to start?

 

If anything it is easier to make it happen including with the button presses on this version. Fun to press the button about 6 times and hear it in succession to only then stop...gibberish...reset tune...nothing.

 

So I would say that yes, it is a buffer overflow issue on the speakjet at this point. Why it only affects certain ones..I couldn't tell you that. Do you need me to take a pic of the AVox+ pcb? I don't believe the speakjets have any other markings on them to indicate lot #..etc?

Link to comment
Share on other sites

Yeah, I would agree with your assessment that it appears to be an overflow. I guess my earlier attempts at a software buffer didn't protect the hardware buffer enough.

 

I'm not sure a picture of the PCB would reveal a problem, even if there is one.

 

If you'll humor me with one more test, it would be greatly appreciated. The attached binary makes the screen turn red every time the AtariVox raises it's "buffer full" line (confirming the Atari skipped processing to avoid overflowing it). On my unit it flashes red every time I try to stuff the buffer, as expected. If it doesn't turn red at all on yours, it seems the line is somehow disconnected. (either through speakjet or between it and the atari) If it turns red sometimes, we may have some kind of intermittent issue.

 

I changed the speech back to using reset, just to ensure the pitch shift doesn't make it hard to hear a reset.

dstalk.bas.bin

Link to comment
Share on other sites

Okay... here are the results

 

Pressing the button quickly after about the 4 or 5th time will cause the screen to turn red and eventually settle back to black and it still works.

 

However, pressing the controllers for other phrases is a different story. Just pressing down for the Watch Out phrase, the screen turns red after the third press down quickly. It will then stay red while the AVox+ will either stay a few syllables of gibberish or what I think is the phrase but broken up a bit? It does similar for all others. The odd thing is that I will hear the reset tune, but the screen just stays red and never goes back to black when this occurs. If I unplug the AVox+ then the screen turns back to black instantly. But again a few presses in one direction or another and it will go goofy again with a solid red screen background.

 

Does that help at all? Again I'm happy to film the process if that would explain it better?

 

Okay...decided to test this BIN with the red screen effect on my 7800.

 

If I press the button 4 times in about 1 second, it will red screen..reset and play the Avox+ startup tune. Screen stays red until I power cycle or unplug and plug back in the AVox+

If I press a controller direction it actually takes a little longer to get a red screen as compared to the 2600 testing. I can press in the same direction about 5 or 6 times within a second to two second timeframe and it will cause the red screen and AVox+ reset. Red Screen stays on the screen until power cycle or unplug/plug in the AVox+

 

But if I move the controller say up, down, left or any three different directions, this will cause the red screen and reset of the AVox+. Again unlike the button presses on the 2600 which will cause the red to come up and then clear back to black, the red screen stays constant on the 7800.

 

So in summary:

On the 2600 only the fire button method doesn't cause a complete failure of the AVox+ as it will red screen and then go back to black. I will frequently hear the reset tune on the AVox+ using the button presses on the 2600 including gibberish speech, bit it clears up and works normally afterward or so far it is. Pressing the controller in a single direction about 4 times in about a 2 second timeframe will cause the red screen to appear, gibberish or reset tune of the AVox+ and nothing more with a static red screen.

 

On the 7800 the button press takes about 4 presses quickly and will cause gibberish, reset tune, and static red screen afterward. Controller movements take a few more like 5 or 6 to cause this in a single direction and only about 3 or 4 if I use different directions to cause the red screen to come up...reset tune, or gibberish then silence...etc.. and still a red screen.

Edited by -^Cro§Bow^-
Link to comment
Share on other sites

Since we don't have access to the actual code used in the Speakjet micros, is it possible the creators revised the code somehow and didn't tell us? Especially sice some of us (including myself) have old run AVoxes assembled by The.Golden.Ax.

 

If it's failing on both 2600 and 7800 consoles, I think the buffer overrun theory may be valid. I need to try this on my 4-switch...

Link to comment
Share on other sites

Does the speakjet have internal memory for processing the commands sent to it? I will apologize ahead of time, but when we have something like a buffer overflow happen with the equipment we work with at my job, we have to change settings on the equipment to usually increase the amount of ram for the buffer to prevent problems. Course this is just a matter of flipping some dip switches on the equipment to change the buffer size, but still. So the speakjet only contains a 64byte input buffer? That seems small to me considering we have printers we work with that have input buffers of 4k that must be enabled to prevent overflow issues with them.

 

The speakjet also communicates via serial rs-232 internally to process the commands. Defaults to 9600 baud. What about slowing down the baud rate communicating to the speakjet if that is possible to set?

 

If it is a buffer overflow taking place and causing the speakjet to reset, then limiting how much data at once is sent to the speakjet is the path to look to?

Link to comment
Share on other sites

The PIC that I believe the speakjet is based on (the PIC18F1320) has 256 bytes of RAM, so 64 bytes would be a fair chunk of that. Adding an external memory would be expensive and move it away from a single-chip solution. 64 bytes of phoneme data is enough when combined with a working buffer-full line.

 

Sending the bytes slower without relying on the buffer-full line is tricky, because we need to know what's "too fast". That speed line will be variable depending on what kind of bytes have been sent, and how long each will take. (taking into account modifiers too). A simple "skip every frame" of voice data approach failed to fix the issue in previous tests, as did a more complicated software buffer.

 

While it's possible in theory to lower the baud rate, in practice it would be reprogramming all of the games that use AtariVox, and also reprogramming the speakjet itself with a jumper (not sure if this can be done in it's current circuit). IIRC the speakjet is set to 19200 baud for AtariVox, which is achievable in software with only a bit of wasted CPU time.

 

I think there are a few key findings you've made, which make it pretty clear to me what is happening here:

  • The problem happens on both the 2600 and 7800, with ordinary phoneme data being sent.
  • The 2600 is a bit more resistant to encountering the issue.
  • On the 2600 the joystick button can't trigger the problem at all, but the joystick directions do.
Some key info - TIA is connected to the joystick buttons, and RIOT is connected to the joystick directions. When you push a joystick direction, you're completing a circuit and drawing power from RIOT. This seems to be intermittently impacting it's ability to correctly read the buffer full line on the 2600. (on some RIOTs) The 7800 tested seems permanently crippled in this regard.

 

This doesn't seem to be problematic in other homebrews because they don't send as much voice data at any given time as Dungeon Stalker, and the speakjet buffer drains out.

 

I'm not 100% sure how to proceed here, in software. I could block AtariVox byte transfers when the joystick direction is pressed, but that would mean voice data would be silent if the player holds the stick constantly in a direction. And that wouldn't fix your 7800.

 

@KS: possible, but given an inability to trigger with the joystick button, it seems less likely now.

  • Like 1
Link to comment
Share on other sites

According to the docs, the speakjet is default to run at 9600 baud. That I would think should be plenty fast enough, so if the software is written to run it at 19.2k then it is running at its fastest speed. I apologize I can't code myself, but would be curious to see a speech demo that only ran at 9600 and see if there was much of a difference?

 

It also begins to make sense now about Dungeon Stalker and what I've witnessed on the AVox+ resets. You have to nearly always be on the move in that game, especially when the wizard shows up. So it explains why with all that is happening on the screen that it is at the wizard appearance to it always resetting.

 

Last...Rev's explanation about what is handled via the TIA vs the RIOT brings up something interesting. In regards to the 7800...could it actually be differences or issues between the RIOTs/TIAs in the consoles causing the intermittent compatibility issues with some homebrews and possibly the concerto now?

 

And several have stated they don't have these issues occuring with their AVox+ on their 7800s. So besides differences in the timing circuits, we have to look at revisions of the ICs now. We know that many Vader and Jr 2600s have TIAs that work for most of the games but do cause problems with others like Kool-Aid Man. Makes sense that some 7800s would also have differences in these chip revisions along with everything else.

Link to comment
Share on other sites

The PIC that I believe the speakjet is based on (the PIC18F1320) has 256 bytes of RAM, so 64 bytes would be a fair chunk of that. Adding an external memory would be expensive and move it away from a single-chip solution. 64 bytes of phoneme data is enough when combined with a working buffer-full line.

 

Sending the bytes slower without relying on the buffer-full line is tricky, because we need to know what's "too fast". That speed line will be variable depending on what kind of bytes have been sent, and how long each will take. (taking into account modifiers too). A simple "skip every frame" of voice data approach failed to fix the issue in previous tests, as did a more complicated software buffer.

 

While it's possible in theory to lower the baud rate, in practice it would be reprogramming all of the games that use AtariVox, and also reprogramming the speakjet itself with a jumper (not sure if this can be done in it's current circuit). IIRC the speakjet is set to 19200 baud for AtariVox, which is achievable in software with only a bit of wasted CPU time.

 

I think there are a few key findings you've made, which make it pretty clear to me what is happening here:

  • The problem happens on both the 2600 and 7800, with ordinary phoneme data being sent.
  • The 2600 is a bit more resistant to encountering the issue.
  • On the 2600 the joystick button can't trigger the problem at all, but the joystick directions do.
Some key info - TIA is connected to the joystick buttons, and RIOT is connected to the joystick directions. When you push a joystick direction, you're completing a circuit and drawing power from RIOT. This seems to be intermittently impacting it's ability to correctly read the buffer full line on the 2600. (on some RIOTs) The 7800 seems permanently crippled in this regard.

 

This doesn't seem to be problematic in other homebrews because they don't send as much voice data at any given time as Dungeon Stalker, and the speakjet buffer drains out.

 

I'm not 100% sure how to proceed here, in software. I could block AtariVox byte transfers when the joystick direction is pressed, but that would mean voice data would be silent if the player holds the stick constantly in a direction. And that wouldn't fix your 7800.

 

@KS: possible, but given an inability to trigger with the joystick button, it seems less likely now.

 

Quick question: Since there are 8 bits between Player 1 and Player 2 controller ports, 4 bits to Player 1 UDLR and 4 bits to Player 2 UDLR, the RIOT must be placed into write mode in order to send 4-bit data commands to the AtariVox on the Player 2 port, if I'm understanding how this works. Does this also mean the RIOT is "sending" empty data to the Player 1 controller port as well, or is it possible to only set "write" mode for bits 4-7 on the Player 2 port? If simultaneous read/write mode is not possible, actuating the joystick (bits 0-3) in any direction would drain current from RIOT during a write event (bits 4-7). I understand the currents are low enough such that damage is unlikely to occur, but would sinking bits 0-3 of the RIOT while it is communicating with the AtariVox interfere with the outputs on bits 4-7? If so this a hardware issue with the Atari console itself, and likely cannot be solved in software, and possible not all RIOTs are the same between 2600 and 7800 Atari consoles.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...