So I dumped the SC-01 phonemes from 7 phrases from 4 games (The Spy
Strikes Back, Crime Wave, Crypt of Medea & Berzap!), and then wrote some
code to play them back using the SSI263.
The use-case for this would be to patch old SC-01-only games to work with the SSI263.
TomCh wrote:
So I dumped the SC-01 phonemes from 7 phrases from 4 games (The Spy Strikes Back, Crime Wave, Crypt of Medea & Berzap!), and then wrote some code to play them back using the SSI263.Hi Tom,
Very interesting. Thank you for investigating and making some code available.
I am interested in identifying all the phrases that are used and the location(s) in memory within the games.
Do you have any notes you can pass on about where the phrases you’ve found are in memory?
The use-case for this would be to patch old SC-01-only games to work with the SSI263.As you know, but others may not,
I have another goal which is to convert all TotalReplay games that use speech to use software SAM instead. This takes a bit of RAM and will therefore require Apple //e 128k aux memory but is plausible so people without Mockingboard speech can hear the speech in game.
I’d happily receive any help in this direction from anyone with a desire to
contribute. Here’s where progress is being tracked: https://github.com/a2-4am/4cade/issues/272
Thanks!
Andrew
btw. Does anyone even have an old SC-01-based Mockingboard?
Looks like it might be triggering an NMI as these cards have one via hooked to irq and one to nmi. If I hack the nmi vector at 3fb with an rti ($40) and then run the program again it looks like it works ok.
I made a recording of the speech and added them to an existing dropbox folder (with card pics) I had if you are interested to have a listen. They are the sc01_speech files. (wav and mp3 versions)
Hi Rob,I forgot to mention in the first reply, thanks for putting this together. Nice to have a good way to test and compare. And it is interesting to see them mapped from the SC01 to SSI263 and see how they come out.
Looks like it might be triggering an NMI as these cards have one via hooked to irq and one to nmi. If I hack the nmi vector at 3fb with an rti ($40) and then run the program again it looks like it works ok.Ah, interesting - I see this is the same fix that you submitted to Total Replay. Now I understand why that fix was added.
Still it'd be interesting to see under what conditions the NMI is triggering, eg. Is it: 6522 interrupt or SC01 interrupt or both?
I made a recording of the speech and added them to an existing dropbox folder (with card pics) I had if you are interested to have a listen. They are the sc01_speech files. (wav and mp3 versions)This is interesting, as your real SC01 speech is much slower than MAME's emulated SC01 speech. It is great to now be able to compare the two. I'll raise a bug against MAME asking them to look at this.
OK, I'm going to fix my code to hook NMI (+add some debug code to identify the NMI source), and then I'll probably ask for your help in running it.
Thanks,
Tom
I forgot to mention in the first reply, thanks for putting this together. Nice to have a good way to test and compare. And it is interesting to see them mapped from the SC01 to SSI263 and see how they come out.
There is a trimpot on the board that sets the pitch/speed of the SC01. I think I had it set quite slow. I did a couple more recordings with it set faster, there in the same folder, so i think the previous link should work. Have a listen, i think itdoes sound better set a bit faster.
v0.2 available here: https://github.com/tomcw/play-sc01-using-ssi263/releases/tag/v0.2
Hi Rob,Hi Tom,
v0.2 available here: https://github.com/tomcw/play-sc01-using-ssi263/releases/tag/v0.2Have you had a chance to test this newer version yet?
Thanks,
Tom
Slot #4: Mockingboard failed test: 6522I can't fully explain this failure: perhaps an issue with the card (which is what it's designed to detect), or a bug in my code.
When I run the 2nd entry point, I get:OK, so the 6522A (at $C400) doesn't generate NMI, nor does the SC01 (which is connected to that 6522A VIA).
Slot #4: NMI: 6522A=0 6522B=1 SC01=0 AY=0
If possible, can you retry by power-cycling and running the same tests (CALL 8192, then CALL 8196) to see if you can repeat this 6522 test failure?I did a few times and I always get the error for the first run, and then the second one works ok. If i remove the run from the hello program, then run the second test first after boot, then it gets the error. If I then run the second test again, it works
This is a bit of a shame, as it limits the real h/w testing that can be done from code... and this works for the newer Mockingboard-C variants.I double checked the wiring of the AY to the via, and it looks exactly like the later C rev. So its puzzling why its getting an error when trying to read back. I'll try and just run that part separately to see if its one register it cannot read, or some
Although if there is a h/w issue (as suggested above) then this may explain why the AY8913 can't be written/read back.
works without the error. So something odd going on.If possible, can you retry by power-cycling and running the same tests (CALL 8192, then CALL 8196) to see if you can repeat this 6522 test failure?I did a few times and I always get the error for the first run, and then the second one works ok. If i remove the run from the hello program, then run the second test first after boot, then it gets the error. If I then run the second test again, it
Hi Rob,I tried that but it did not make any difference :-(
I noticed an off-by-one buffer-overrun error (when saving/restoring the 3-byte NMI vector), so here's a fixed version:
https://github.com/tomcw/play-sc01-using-ssi263/releases/tag/v0.3
(Tested on real h/w & emulator)
I hope this fixes the error (although I can't reason why yet).
Tom
Hi Rob,
Thanks for digging into this... I understand my mistake now. Try this one: https://github.com/tomcw/play-sc01-using-ssi263/releases/tag/v0.4
My main misunderstanding was to think that the 2nd 6522 (at $Cn80) was connected to both IRQ & NMI. Whereas obviously(!) the S/S card is wired like this:
- 1st 6522/VIA at $Cn00 (for the SC-01) is wired to IRQ
- 2nd 6522/VIA at $Cn80 (for the AY-3-8913) is wired to NMI
So in the 2nd part of that test (for the 6522 at $Cn80) it wasn't seeing an IRQ, and hence the failure.
Then when you re-ran the test, because I wasn't zeroing the variable isrIFR_B, then the IRQ was still pending from the first run, so in the earlier CLI/SEI code the IRQ would fire and set this flag.
Anyway, hopefully all understood now & fixed.
Let me know!
Tom
Hi Rob,
Thanks for digging into this... I understand my mistake now. Try this one: https://github.com/tomcw/play-sc01-using-ssi263/releases/tag/v0.4
My main misunderstanding was to think that the 2nd 6522 (at $Cn80) was connected to both IRQ & NMI. Whereas obviously(!) the S/S card is wired like this:
- 1st 6522/VIA at $Cn00 (for the SC-01) is wired to IRQ
- 2nd 6522/VIA at $Cn80 (for the AY-3-8913) is wired to NMI
So in the 2nd part of that test (for the 6522 at $Cn80) it wasn't seeing
an IRQ, and hence the failure.
Then when you re-ran the test, because I wasn't zeroing the variable isrIFR_B, then the IRQ was still pending from the first run, so in the earlier CLI/SEI code the IRQ would fire and set this flag.
Anyway, hopefully all understood now & fixed.
Let me know!
Tom
I hacked AppleWin to support the S/S card, complete with NMI for the 2nd 6522... and hit another bug in my code :-/
So here's v0.6: https://github.com/tomcw/play-sc01-using-ssi263/releases/tag/v0.6
The new version v0.6 works great. I did test with both SoundSpeech I and a Mockingboard C clone I have with a SSI263 and it works great with either. Nice work hacking that in to test and debug.
And this is timely too, as I'm working on a Mockingboard/Phasor "audit" to test real h/w and also emulators (a release is imminent!). I will fold in these fixes so that your S/S card is better supported. NB. Since I can't read back the AY-3-8913registers after writing them, then if I detect an S/S card I will just hardcode the number of AY's to be 1.
btw, if I add you SC-01 recording to my "play-sc01-using-ssi263" GitHub page + credit you... I assume that's OK?Yes, sure, happy for you to add that in your github page.
Sounds interesting, will keep an eye out for the release.
I'd forgotten about that reading issue from the AY. It seems another odd behavior, i did check the wiring and it looks the same as the other cards. So maybe some timing issue. I'll try to have a play with that and see if i can see why.
I'd forgotten about that reading issue from the AY. It seems another odd behavior, i did check the wiring and it looks the same as the other cards. So maybe some timing issue. I'll try to have a play with that and see if i can see why.
I'd forgotten about that reading issue from the AY. It seems another odd behavior, i did check the wiring and it looks the same as the other cards. So maybe some timing issue. I'll try to have a play with that and see if i can see why.
Here's a fixed version that should now read the AY registers on both of your cards:I tested with my S/S and get that result now.
https://github.com/tomcw/play-sc01-using-ssi263/releases/tag/v0.7
Use the 2nd entrypoint at $2004, eg. CALL 8196 to check reading the AY registers. For your S/S you should see:
Slot #4: NMI: 6522A=0 6522B=1 SC01=0 AY=2
Slot #4: NMI: 6522A=0 6522B=1 SC01=0 AY=2I tested with my S/S and get that result now.
And I get AY=3 on my MB-C card ok.
All working nicely now!
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 294 |
Nodes: | 16 (2 / 14) |
Uptime: | 245:25:05 |
Calls: | 6,626 |
Calls today: | 2 |
Files: | 12,175 |
Messages: | 5,320,562 |