Starting last year I contemplated building my own ETA-3400 Memory I/O Accessory unit for the ET-3400 microprocessor trainer.
By January 2022 I had a prototype built on strip board and plugged in rats nest style on top of my ET-3400. The expansion unit is a clone of the original unit but with a few modern RAM and ROM chips to save space and add a lot more memory and a GAL to do the memory decoding.
This is a photo of the first prototype. The RAM, ROM and GAL are located on the breadboard section of the ET-3400. The PIA on the top of the picture is the bit-banged serial I/O. The VT-132 is a VT-100+ clone kit manufactured by The High Nibble in Australia. I have a LCD monitor and PS/2 keyboard plugged into that.
The strange characters were due to the ETA-3400 only wanting low ASCII, but my VT-100 terminal could only do 8 bit and there was no way to change the VT-100. Eventually I patched the Tiny BASIC ROM to mask off the 8th bit.
This problem was not evident in the monitor, only in Tiny BASIC.
By late January I added the Cassette port to the PIA. It was ugly but it worked.
This is what I was using as my cassette deck. It’s a Sony digital mp3 recorder. I wasn’t sure if it would work because of compression and decompression of the audio, however its worked perfectly and reliably almost every single time. The times it hasn’t worked is possibly when I was moving things around while it was recording. also this was still on breadboard, which is not the most reliable for connections.
The way I had the GAL programmed allowed me to alter the memory mapping by just altering a jumper. What that effectively did was enable 48K of contiguous RAM and moved the ROM and PIA into high memory above $C000. In the default configuration it replicates the memory map of the original ETA-3400 where it only has 4K RAM and PIA and ROMs occupy $1000…$23FF.
However in my alternate mapping I also had to patch the ROMs so that it had the correct jump and branch locations and new PIA address. Luckily the ROM disassembly was available and easy to find the relevant locations to change. One I got that working I was able to get 48K RAM for Tiny BASIC, which is way more than you would ever need.
What to do with all that new RAM… write Star Trek in Tiny BASIC of course. Someone posted a version in Tiny BASIC, but unfortunately it was for a different dialect of Tiny BASIC and needed a lot of patching. Eventually with a lot of USR() instruction patches to call built in ROM routines to emulate PEEK, POKE and INCH (Reads a key from keyboard) and @ ARRAY commands, I was able to produce a 14K version of Star Trek.
here are a few screen shots:
oops, we died.
I had this finished by mid March 2022. Time to move on…
It was late February 2022 when I first considered porting ALTARI 680 BASIC to my memory expanded ETA-3400, however I was still in the prototype and testing phase and I didn’t have pcb’s made yet.
After having the prototype run fairly flawlessly for a couple of months I decided to layout and order pcbs. I received those in early May 2022. At this stage I had decided to call my boards the ETA-3400X (X for eXpanded) to differentiate them from other makers and the original.
Meanwhile I had started to port ALTAIR 680 BASIC to the ETA-3400X on my prototype rats nest. Having never in my life ported anything I never expected to be able to do it myself. I thought perhaps I would just create the hardware to make it happen, and do some proof-of-concept tests, and let the programming gurus do the rest. But before you know it I was porting it somewhat successfully myself.
here is an early progress screen shot of ALTAIR 680 BASIC starting up.
You might note that I ran into the 7 bit vs. 8 bit problem again, but I’ll worry about that later as it isn’t a priority yet.
In Late May 2022 I finally had all the parts to build up my first pcb from the production boards. I built my first one and connected it up. Had a few blonde moments with incorrect jumper setting and wrong monitor calls, but I eventually got it to run, or so I thought.
I could get it to run, but then while loading or saving to cassette or even just typing ‘R’ to list the registers in the monitor, it would just crash or freeze. So something intermittent was happening, that wasn’t happening on the prototype rats nest. I was confused because it had all the original parts from the prototype (except some resistors and capacitors) on the new pcb.
I started to swap things one by one and eventually suspected the 70ns RAM to be the issue. I swapped in a smaller and slower 100ns RAM and then it started working fine. However I had lost a month finding that. I ordered some new 100ns 128KB SRAMs and continued work on the ALTAIR 680 BASIC port with the smaller 32K SRAM.
Annoyingly the other makers of the ETA-3400 clones used 70ns RAMs, so I suspect that my GAL equations being larger had something to do with the intermittent failure.
By mid July I had enough of the interpreter in that I could test out some floating point and trig routines. This was one of the major reasons that I wanted to do the port in the first place. The Heath Tiny BASIC was only integer math, and a lot of the BASIC programs I wanted to run needed floating point, arrays, for/next loops etc. which ALTAIR 680 BASIC has. I forgot to mention this is the 8K version of BASIC, there was also a 4K version.
For most of the port I had to patch over 100 location in the 7.5K ROM manually. In fact I typed in the whole interpreter in manually in hexadecimal using the Fantom (serial) monitor on the ETA-3400X.
I also had to relocate a lot of the code in zero page due to conflicts with the Fantom serial monitor, and had to manually assemble a few patches. This took a long time and as you might expect and led to a few typos. I only found about 2 dyslexic typos in all, but I did have about 20-30 other errors in BASIC that I had to find one at a time using the Fantom monitor for the majority. Most of those were routines that I had missed when I was patching the ROM.
Once I had the majority of the interpreter working of course it was time to test Super Star Trek, however I wasn’t about to type that all in until I had a serial connection to my PC, and that’s because the version of ALTAIR 680 BASIC I had disassembled was not the cassette version. oops, I’ll have to add those routines later.
I purchased and wired up an FTDI-USB adapter and figured out where to connect it to the 6821 PIA on the ETA-3400X, then setup Tera Term on my PC and now I was able to type, copy and paste programs from my PC. I tried 9600 baud at first however it occasionally dropped characters so I changed it to 4800 baud. The baud didn’t alter the speed much as the bigger delays were line delays of 750ms needed so that ALTAIR 680 BASIC could tokenise input lines. There is no handshaking lines so the only way is to add a big enough delay so it doesn’t miss characters.
The last bug in ALTAIR 680 BASIC took me about 2 weeks to find because I was using breakpoints in the Fantom monitor as I had for the other bugs. However ALTAIR 680 BASIC uses the Stack Pointer for some of it’s routines and restored it at the end. Unfortunately the breakpoints overwrote parts of the interpreter or certain zero page locations hiding this particular bug.
I finished off the port on 8th August, with only a few mods required to be added later. One mod was to add a Break (ctrl-C) key so program execution could be interrupted. Since the original ALTAIR 680 used a 6850 ACIA and a different monitor PROM, I had to re-write how to detect a key and interrupt program execution on my port. I finally added that on 12th August 2022.