After bringing home an IMSAI with a JAIR 8080 board from VCF West it didn't take long before I wanted to get it connected to something else. As always, my go-to communications program is Kermit.

Since the JAIR 8080 board is a little bit different than other S100 or CP/M computers, I wasn't sure if there would be support for the serial ports in Kermit already. After trying out a generic Kermit build I discovered that it was going to require actually modifying Kermit to add support for the JAIR 8080.

Digging through the sources it looked like the only other computer family that used the 8250 UART was Heathkit. That seemed like a good place to start so I added a "jair" conditional and went through the cpxhea.asm code and started enabling sections of code that looked like they should apply.

The code assembled fine, but would it work? I transferred the cpsker.hex and cpvjai.hex to one of the CP/M disk images on the SD card that the JAIR 8080 uses and used mload to combine them. When I started up Kermit it printed the initial banner and hung. I guess it wasn't going to be so simple.

To try to figure out where things were going wrong I added some debug messages to print at various spots during initialization. This time when I fired it up it worked fine! I got to the Kermit command prompt and I could go online and communicate with the modem. That's great, but that doesn't help narrow down why the debug messages made it work.

Jeff Albrecht pointed me to the CP/M debugger DDT. I skimmed through the manual to see how breakpoints worked and started tracing through execution to see exactly where Kermit hangs. I was able to narrow it down to a single OUT instruction during the initialization in cpxhea.asm. I discovered that if I added a NOP to shift the OUT instruction down by one byte then it worked fine! I also could remove a byte from somewhere else to shift the OUT instruction up by one byte and that worked too!

Seeking an expert on the situation I got in contact with Josh Bensadon, the creator of the JAIR 8080. He patiently worked with me while I explained what I was doing and tried to repeat the problem on his system. Everything worked fine for him and at that point he told me that there had been some corrections made to the early versions of the board to fix a few problems. After sending him pictures of my board he quickly identified that one of the fixes had not been made to it.

I soldered the two missing jumpers in place and fired up Kermit again. This time the version that used to hang worked perfectly!

I've put my changes up on Github along with a Makefile to make it easier to assemble using my LASM compatible cross-assembler.