Although the ATF22V10B was programming correctly, a couple of bits in the UES (User electronic signature) seemed to be stuck high on read. This also occured with ATFblast. UES contents have no affect on logical operation so I could have ignored it, but I wanted to know why it was happening. So I built a simple parallel port logic analyzer (
Elmuesoft 17 Channel Logic Analyzer) to monitor my VS4800 while it was programming GALs. This revealed some interesting things:-
1. The 'stuck' bits do exist, but are
not part of the UES. The UES fuse line has a total og 132 bits. On a normal GAL22V10 the first 64 bits are the UES, and the rest are blank. In the ATF22V10 it's the other way around - the last 64 bits are the UES.
2. On the ATF22V10C, data is
not transferred on clock rising edges as
suggested elsewhere, but on falling edges just like other GALs. However only 5 clocks are used to transfer the 6 address bits at the end of each row, the last bit being input directly without being clocked in. If you try to clock in 6 bits then it 'works' with rising edges because the last rising edge doesn't do anything, but data may be corrupted if falling edges occur at the wrong time.
3. The VS4800 always writes a blank user signature even when a 'UES' chip is selected. It also disables the power-down feature when programming the ATF22V10CQZ, even when enabled in the JEDEC file (probably a good thing since power-down, which is enabled by default, makes pin 4 unavailable for logic input).
4. Delays of several milliseconds between most operations are not necessary. Programming any GAL should only take a few seconds at most.
5. My theory that (on the 22V10) P/V- should be set high only when pulsing /STB is
confirmed.
With my current code I have successfully programmed an ATF16V8B, ATF22V10B and ATF22V10CQZ, and read various GAL16V8s and 22V210s. I have yet to confirm that standard GALs can still be programmed (maybe I have somehow broken that code) but since the original GALBlast already does them I am not overly concerned. I have also simplified the hardware a bit by removing the pull-down resistors and changing the ATF's programming voltage from 11V to 12V.
The attached zip file includes preliminary source code and executable for my version of 'ATFBlast'. As well as ATF chips it should also do the GAL16V8, GAL20V8, and GAL22V10. I removed some less popular GALs that were cluttering up the menu.
Next I want to port my code to an MCU so it can be used on modern PCs that don't have a parallel port. Thinking of modifying
this project which uses an Atmega644 (but probably only needs an Atmega328).