Booting a Victor 9000 with Cereal
In February of 2021, with a brand new standing desk completely devoid of clutter, I polled Twitter to ask what retro computing project I should attempt. Trying to get my Victor 9000 to boot was the most popular, and so off I went to attempt it, knowing in advance that it was likely to be an extremely difficult challenge, because not only does the Victor use a rather unusual floppy encoding system, I wasn't even sure if my Victor was completely working.
The Victor 9000 (renamed as the Sirius 1 outside of the US) comes from the early days of computing, when things were a Wild West where everyone had their own ideas of how to build a better computer and there was little desire to be compatible with anything else already on the market. It was unlikely that a customer would already have their own computer, or even know someone else with a computer and want to exchange information with them, so incompatibility wasn't really a concern. To make the Victor 9000 stand out, it was designed to use a variable speed floppy format which would allow it to store four times as much data on a disk compared with many other machines of the time.
My Victor is a dual floppy system and didn't come with any disks, however there were a couple of images on the internet that could possibly be used to master my own. Whether or not they contained good data though was questionable because of the method used for archiving them, and because no-one had ever tried to use those images to reconstruct a physical disk. With enough searching though, I was able to hunt down a procedure for decoding the archived images and I was able to get MAME to recognize them.
With what appeared to be good sector data, I set about writing a program to convert the sector data into a form that could be written to a physical floppy with a SuperCard Pro. Unfortunately I was not able to get the disks to boot since it seems that my Victor isn't quite working. When the floppy door is closed (whether there's a disk in the drive or not) the Victor completely hangs. The program for creating floppy images wasn't a complete waste though, I later re-used it to create the multi-boot floppy for 5.25" Floppy Day and released the program as floppur.
At this point it was clear that in order to troubleshoot what was wrong with the floppies I was going to need to be able to load some kind of program on it to communicate with the overly complex floppy controller. That meant finding out if it was really possible to boot over serial.
Getting to the Truth of the Serial Boot Myth
At some point in my searches, I managed to stumble upon a copy of the assembly source to the Victor 9000 ROM. Going through the listings I found a section that talked about booting over serial and provided a little information on how the serial port was configured and what signals it was expecting. But the question now was, is this the same version of the source that was used to create the ROM in my Victor?
It seemed like the best way to determine if the serial boot routines were in my ROM was to get the original source code to assemble. I found an assembler that I could run on Linux that was mostly compatible with the syntax of the source, and with a few minor tweaks I was able to build binaries. After comparing the output to the ROM in my machine, it turned out to be identical. This was great news because it meant that the serial routines were there! But would they work?
After much trial and error with figuring out exactly when the serial boot routines would be triggered and managing to configure the serial port on my Linux box to use the unusual 9-bit bytes, I saw a response from the Victor! I quickly cobbled together a Hello World program only to be disappointed that just garbage printed. Turns out the Victor ROM contains a very limited character set which includes only the digits 0-9, characters A-F, and a couple of icons. Some tweaking of the strings I was printing to try to display my name to use only the available characters and success!
Second Stage Bootstrap
With the simple Hello World under my belt, I set about converting it into a second stage bootloader which would pull a larger binary down over serial. The ROM configures the serial controller to 1200 bps, which is quite slow. More digging around through the Victor ROM source and the documentation for the NEC 7201 and Intel 8253 and I was able to reconfigure the RS-232 port to use 8 bits no parity at 19200 bps. A little more work and I could send over a length and destination address followed by a large binary which can be over 64k in size.
I tried sending over MS-DOS but haven't been able to get it to work. The way that disks are booted is the ROM reads sector 0 from the floppy and looks at some fields to determine what to load. It then reads in all the sectors sequentially and jumps to the newly loaded binary. I thought I could do the same thing by sending MS-DOS over serial, but instead of getting the initial splash screen, it just hangs. If I try with MS-DOS 1.25 the screen gets put into a funky mode with a nice vertical line down the center and making an awful out of sync noise. With any other version of MS-DOS the screen just turns black.
It seemed like the next thing to do would be to put together some kind of very simple monitor/debugger that would let me interact over serial and allow me to examine memory and registers, modify memory, and try to execute from a specified address. Hunting around I came across the Seattle Computer Products MON-86 which was perfect because it had all the commands I needed, and it was designed to fit in 2k so it would be very quick to send over the serial.
For MON-86 I opted to convert the source to nasm syntax, to reduce the number of hoops someone else would need to jump through to get it assembled. To make sure my syntax changes were correct, I found a binary dump of MON-86 and used that to compare with the nasm output and verify that the syntax changes I was making still assembled correctly. After that I swapped the old I/O routines for ones that were compatible with the Victor. A few fixes that were missing from the original source, and I had the monitor running on the Victor over serial!
Got the SCP monitor running on the #Victor9000! Took a bit of fighting with converting the code to nasm syntax and debugging the original code, but now I can send simple commands over serial to examine registers, change RAM, and mess with I/O. pic.twitter.com/XVtwiTjPOt— FozzTexx (@FozzTexx) January 26, 2022
At this point there is enough infrastructure to load more sophisticated diagnostic tools onto the Victor. Whether or not those tools already exist though is another question. I also think it would be nice to add keyboard & video support to the Victor port of the SCP MON-86. To get the screen working means I need to include a more complete font as part of MON-86. And I haven't yet figured out how to communicate with the keyboard. I also suspect that I will need to repair my keyboard since it is a capacitive keyboard with the foam disks. Luckily I have experience fixing those!
I'd also like to figure out why MS-DOS doesn't seem to want to start when sent over serial. It seems like it should display the splash screen before it dies because of the lack of a floppy.
Once I know the floppy drives are working, a useful program that will need to be written is something similar to ADTPro. A Victor version of such a program could be used to format blank disks and load them with data, allowing people to bring up a Victor system from bare metal without needing to have another working Victor system, some kind of exotic floppy hardware that interfaces to a modern computer, or someone mail out pre-formatted floppies.
Another thing I'd like to explore is making a very simple terminal program that can be sent over to the Victor to turn it into a simple dumb terminal. Would it be possible to fit such a thing in a mere 512 bytes, considering that some of that space would need to be used for a font?
If you have a Victor 9000 and you'd like to try any of this out for yourself, here's links to my projects: