As I slowly near completion of my timing circuit board, I’ve been adding components to their sockets and testing the different signals they produce. The basic signals (14MHz, 7MHz, 3.5MHz, etc.) seem to be clocking correctly. Having the quartz oscillator socketed allows me to remove it and replace it with a simple 1kHz 555 timer-based asynchronous clock which allows me to read the traces on my not-so-great oscilloscope and compare each signal and its reverse counterpart.
But I’ve run into a snag. There are three chips I cannot find on my spare parts board: two 74LS161s and the 341-0030 video scan decoding chip. I’d pulled them off a while back when I was yet again trying to reassemble things on breadboards. But I’ll be danged if I can find them now.
The 74LS161s (synchronous 4-bit counters) are used in the video horizontal and vertical state counters section of the timing schematic. This circuit forms the x and y position of each addressable byte on the screen. This video-related circuit is here because of the critical relationship between system timing and how data is read from RAM and displayed on the video screen.
There are four of these counters, and I’ve located two of them. But the other two I’ll have to replace by ordering new ones online. A nuisance, but not difficult.
On the other hand, the 341-0030 IC is not as easily replaced. Generally these are custom programmable logic chips that handle special logic flows. After looking through the Apple /// Service Reference Manual, I found this is actually a 2316 2k programmable ROM which were common during this era. A more modern equivalent is the 2716 EPROM which is a pin-equivalent user-programmable EPROM. I am using a 28c256 EEPROM as my system’s ROM which I can program with my Arduino. However, these modern EEPROMS are sometimes not pin-compatible with the older ROMs. This means either some rewiring is necessary on my board or I will need to build some kind of custom adapter to fit a 28c16 EEPROM into the board’s socket which is wired for the 2316.
However, looking at the datasheets for both the 2316 and the 28c16, the pins look electrically the same. So I should be good popping the new EEPROM in as-is.
In this situation, half the battle is to find a modern equivalent to the missing chip. The other, more difficult half is getting the code to burn into the EEPROM. Without my spare-parts board ROM, I’m out of luck since this particular chip’s data isn’t documented anywhere I could find.
My only saving grace is using the same chip within my working Apple ///. I can pull it from the board, read its data, then save it for later burning onto the replacement chip.
To do this, I’ll use my trusty Arduino Mega 2650. I have the pin diagram for the 2316 ROM so it shouldn’t be much trouble running 11 address lines and 8 data lines from my Arduino to a breadboard into which I can plug the 2316. I’ll just need to be extra careful that I don’t somehow fry the 2316. If I do, I’m out of luck until I can somehow source another 341-0030 part.
My Arduino sketch is pretty straightforward. I set up the 11 address lines as outputs, the 8 data lines as inputs and create an array of 2047 bytes to hold the ROM’s data. As the Arduino loops sequentially though each address, it will read the byte of data held in that spot and save it to my array. Once saved, I can export the array of bytes it to a text file.
Once in a text file, I’ll be able to copy/paste the bytes into my EEPROM writing program. It’s not the most efficient way, but it will work.
My replacement parts will arrive today, so hopefully tomorrow I can make a new EEPROM to replace the missing one. Once I have those items, I will start building my video board. Unfortunately, each board requires some functionality of another in order to operate correctly. So I’m in that situation of not being able to test one board until most of the system is completed.