Topic: Bronze age Atari games

A while back I did a number of 1970s Atari/Kee Games arcade games in VHDL, I finally got around to posting the code in one central place where I can update it as needed. These are not targeted to the Replay but porting them should be fairly trivial, I have kept them as platform agnostic as possible. Recently I pulled this stuff out again and started playing with it some more.

I have a couple more than I'm working on, Sprint 4 and Subs, which I've gotten as far as getting the attract mode running however I'm running into some issues that I suspect are related to timing. I'm finding that making unrelated changes to the code breaks things, Subs for example currently runs fine *if* I have the SignalTap logic analyzer enabled and set to look at some specific signals, but otherwise it doesn't work at all unless I comment out the input code. When it does work, the player start LEDs just flicker randomly, along with all the other signals that come from that decoder. I had a similar issue with Ultra Tank but then it "magically" was fixed when I made some other tweaks. I'd like to refine my technique so that I'm writing better code and spending less time chasing down weird random issues like this. I suspect most of the trouble comes down to clocking, and using various signals as clocks instead of making everything truly synchronous, but I've had limited success trying to figure this out. Is anyone interested in looking over any of my code to help me clean it up a bit? I've released it all as open source with hopes that others will enjoy it. If I can get these cleaned up nicely then there are several more games I can do fairly easily as they share a lot of similar hardware.

Re: Bronze age Atari games

Nice work. Hopefully someone can find time to port some of these over smile

As for timing issues, I don't have enough experience to advise on that, but I will pass on the same advice I received when I had weird timing issues. Which from your post it sounds like you're already aware of, switch everything over to using clock enables based on a master clock, rather than deriving new clocks. It helps avoid a host of subtle timing issues.

Re: Bronze age Atari games

I actually figured out the timing issues, at least I think I did. I sat down and had a good think about how the circuit actually works and then I changed the clocking to follow Mike's style of using the master clock with a separate clock enable for the CPU and that seems to have fixed that up. I've also had issues with the address decoder modeled as it is in the code I posted. I was working on Subs (very similar hardware to Ultra Tank) and the start LEDs and other signals from that decoder were just flickering randomly. I had the same issue with Ultra Tank at one point then it "magically" corrected itself. Well after banging my head against the wall, I just rewrote that part of the address decoder as a black box based on the memory map in the manual rather than going by the original circuit and that part is working perfectly now. I even added the watchdog timer, something I had neglected to do with the others so I've been going back and adding it to those games too.

At this point Subs seems to be working perfectly, it's quite a rare game and as far as I know it's the first arcade game to use two monitors. Unfortunately I have not yet modeled the sound circuits, that's the area where I'm least competent. I've made progress on the launch, crash and explosion sounds since they essentially add an envelope to the hiss from a LFSR but the sonar pings are going to take some more work. The circuit is a bit unusual and I don't even fully understand how it works however I did model it in a circuit simulator and it does in fact function as drawn. It produces a 1kHz sine wave that fades down to silence. This is also partially modulated by the LFSR which gives it a slightly "gritty" sound. A friend of mine has the real deal so at least I have something to compare it to.

Re: Bronze age Atari games

well done!

5 (edited by james_s 2018-06-15 17:36:50)

Re: Bronze age Atari games

I worked on Subs more last night and got all the sounds done except for the sonar ping. I think the LFSR in the manual is either drawn incorrectly in error or it is deliberate obfuscation to thwart copycats because when I code it as the schematic is drawn it sounds terrible. Instead I ended up doing it the same as the Sprint games and Ultra Tank which I already knew sound good and that seems to have done the trick. The next time I go to my friend's place I think I'll bring along a scope and an audio probe and have a poke around the board in his Subs to see.

So now the ping I'm going to have to think about. It produces a 1kHz sine wave that starts at full volume then decays linearly to silence over a period of about 1 second, with the envelope modulated by the random noise signal. I haven't quite decided how to go about this, I'm leaning towards synthesizing a pure sine wave and then work out a way to control the envelope.

It will be cool to get this game done as it's one that isn't emulated properly by MAME. It really needs two separate monitors otherwise you can just look at where your opponent is at any time and it takes away the fun. It also needs the overlays on the screens or it looks rather bland.

Post's attachments

ping sound.jpg 124.55 kb, file has never been downloaded. 

ping.wav 212.09 kb, 2 downloads since 2018-06-15 

Subs audio.jpg 119 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.