Another One!

IMG_3096Remember those memory cards that I  acquired from a local source? Well, that same local source thought that I seemed like the best home for his NorthStar Horizon.

Apparently this machine was running well into the beginning of this century as part of the production process for a company that resurfaces laser printer drums. There’s several wire wrapped boards with analog to digital converters and other digital and analog I/O, with quite a few connectors on the back panel.

IMG_3093So, it begins again. Just from a cursory view, it’s obvious that this machine (serial number 10-16945) has several differences from my first one (serial number 10-01882). Without the pressure of a Retrochallenge deadline, I can take my time lovingly bringing this one back to tip-top condition.


IMG_3038Time to clean up after RetroChallenge. The pressure is off – I’ve written my last post. But I was still bothered by the second memory board that wasn’t working. This was the reason that I wasn’t able to get everything done that I wanted to get done. Maybe just an hour or two looking at the board and I might be able to track down the problem.

Electrically, all of the power rails were good. However, no memory banks were showing up no matter what dip switch settings I chose. If you recall, I had a problem with dirty dip switch contacts on the first memory board. Initially, I didn’t even suspect a bad switch on this one because there was nothing showing up. But I pulled out the meter anyway, and checked the dip switch. All 8 switches were either open or very high resistance. That’s why nothing was showing up – the machine thought I had disabled all of the banks. A few sprays with contact cleaner (still can’t find my non-lubricated can), and some vigorous switching, and now the contact resistance was down to almost zero.

Back into the machine. Much better. Four banks detected. However, two of the banks failed a memory test. From the results of the memory test, I was able to determine that there was two stuck bits in one bank, and one stuck bit in the other bank. Without any spare DRAM chips, I decided to sacrifice one bank and make three good banks on the board. A visit to the schematic showed me which chip was which bit, and I was able to swap out a few chips. Another memory test, and I had 3 good banks for 24k of good RAM. I put both memory boards back in to the machine, and let it run a memory test for the full 56k of RAM overnight.

IMG_3032Now that I’ve got an almost-full compliment of RAM, I wondered if I could get KERMIT to build successfully. I still had the HEX files sitting on a data floppy, so I booted up and gave MLOAD a try. It worked! I was able to build a KERMIT binary. This is the point that I wasted several more hours trying to get KERMIT to actually transfer files, however. I was completely unsuccessful getting a file to move over, which was a bit disappointing. The whole reason I wanted KERMIT on the Horizon was to make moving binaries over to it much simpler. I had a binary for CLINK, a terminal program that works with the Hayes Micromodem 100, that I wanted to move over. It wasn’t going to happen with KERMIT, however.

On the NorthStar, I was getting quite proficient using “PIP file.HEX=CON:” to copy a text file over the serial link. This does;t work with binaries because PIP is waiting for an end-of-file ^Z which may appear in the binary.

A different approach was needed. Maybe I could turn CLINK.COM into a HEX file first, then move it over, and convert it back once it was on the Horizon. What file formats was I working with? The CP/M .COM file format is very simple. It’s just pure binary data that gets loaded into memory location 0x0100 onwards. There’s no file headers or anything to worry about (at least in CP/M 2 – there is in CP/M 3). The .HEX file is just an Intel hex file – very common for burring EPROMs, etc. Could I find something that I could run on my Mac that could convert for me? Yes.

If you’re following along at home, you need the ‘srecord’ package that is available under brew. The syntax you need is:

srec_cat -binary -offset=0x0100 -o clink.hex -intel -address-length=2

Once I had clink.hex, I used the PIP trick to move it over, then used MLOAD to turn it back into a COM file.

IMG_2761Now that I had the software, I needed to make sure the modem was working. Everything checked out electrically (250mA draw on the 5v rail), so I plugged it in to the backplane. A quick test with CLINK made the modem click away the number I entered (pulse dialling). A quick rummage around found a telephone extension cable, and I plugged the modem in to the phone line.

IMG_3045All hooked up. Can it make a call? For some reason, there aren’t that many BBSs around any more 🙂  @retrocosm was kind enough to furnish me with the (UK) phone number to his BBS that was born during his 2011 RetroChallenge entry.

8 data bits, no parity, 1 stop bit, 300 baud. Time to call. No speaker on this modem, so I don’t get to hear the heart-warming sound of modems connecting, but a few seconds later, and I’m connected!

IMG_3051Ending RetroChallenge by dialling into a BBS created for a RetroChallenge using my RetroChallenge entry was somehow very satisfying. I’m glad I spent the extra couple of days to tie up the loose ends.