Writing Victor 9000 Variable Speed Disks with a Fixed Speed 1.2MB Drive
A little over a year since I started down this road, I've finally managed to do it. There were definitely some unexpected twists and turns along the way. But yes, that's right, it's now possible to write out Victor 9000 / Sirius 1 floppy disks without having to use an actual Victor machine.
As with everything, one project leads to another. There is an annual BBS Week contest on RetroBattlestations that happens in the middle of February. With my success of getting my Victor to boot over the RS-232 serial port, I decided there had to be some way to get it to act as a crude terminal so that I could show it off for the BBS Week contest.
I contemplated several possible ways to get the Victor to act as a terminal. One option was to write my own terminal program and send it over the serial port with no operating system and simply have it read from the keyboard directly. This seemed like a huge hurdle though as the Victor has no built-in character set. I would have to get a font loaded onto it, and I would have to find a way to talk directly to the keyboard myself. The ROM does not do any keyboard I/O and there aren't any assembly source examples that I could find.
Another possibility was to find a way to get an OS to boot over the serial port and run a single program. While I'm now able to send DOS over the serial port, it would require a lot of modification to DOS to make it work without a floppy.
The third choice was to see if I could get the Victor to boot from disk. Even though I had original disks, I had never been able to get booting from a floppy to work. I wasn't sure if the floppies were damaged, both floppy controllers were damaged, or the Victors themselves were damaged. I also considered trying to find a way to hack the Victor's ROM to avoid using SASI commands that the scsi2sd doesn't yet support.
Thinking about it more, I wondered what MSDOS might do if there happened to be a disk in the drive after it was booted over serial. Oddly that didn't do anything, there was no disk activity at all. I then tried booting a floppy normally and I noticed I wasn't getting the activity or read errors that I had seen months ago when trying to boot the originals. Turns out the switch to tell the Victor that the drive door was closed wasn't working. I took the drive out and after clicking the switch a whole lot it there was disk activity again. But even with the Victor knowing there's a disk in the drive, the MSDOS loaded over serial still didn't try to read from the floppy.
And then a random stroke of luck! While the disk was in the drive and I was tinkering around with serial loading, I reset the Victor and it BOOTED FROM THE FLOPPY! IT BOOTED! IT ACTUALLY BOOTED!
Once.
I reset it to try the CP/M disk and I couldn't get it to boot anything again. It was like that time when I was a kid and I was clicking the TV off and on really fast and suddenly the picture was IN COLOR instead of black and white. But I turned the TV off after I was done watching my shows and it never did it again, and I was never able to show anyone how I had "fixed" the TV. (Oh and before you start thinking I'm crazy that I made a black and white TV turn into a color TV, it was a color TV, but something had broken long ago and it only displayed in black and white.)
After many, many attempts I was finally able to repeat getting a disk to boot. But of course the keyboard didn't work. Was the keyboard actually broken? Something in the Victor that prevented it from talking to the keyboard? Nope, it was just the foam pads in the capacitive circuitry had gone bad. Tedious, but easy fix.
My Drive Works
Suddenly having a working floppy drive in the Victor 9000 changed everything! It meant that instead of having to write something in assembly, I now had access to BASIC. In theory I could type something in to get a terminal, or possibly type in a program that would transfer another program. I was determined to get Kermit onto the system.
I found an example BASIC terminal program in one of the scanned manuals. It worked, but dropped characters like crazy, even at 300bps. It wasn’t really going to be usable. A little bit of hacking later and I had turned it into a 9 character per second file transfer program. Slower than reading in paper type on a Teletype 33 ASR! But it was good enough to get a small copy of Kermit moved over and I was able to use it for the BBS Week contest.
Of course the very next thing to do was to use Kermit to transfer files. Unfortunately the version of Kermit that I had (painfully) copied over absolutely refused to transfer files. An hour and a half later I had transferred a slightly later and larger version over, but it too couldn’t transfer files. It would crash the computer as soon as a file transfer started. The next version of Kermit I wanted to try was 170k, and I wasn’t going to do move it onto the Victor at 9cps. Time to find a way to write floppies from Linux.
The Victor 9000 uses a rather unique variable speed 5.25" floppy drive controller. It works sort of like CLV LaserDiscs, where more information is stored on the outer tracks. This allows the Victor to jam 600k on a single side of an ordinary double density disk, and 1.2MB on a double sided disk. Long before the 1.2MB HD drives that shipped in IBM AT computers. Of course this also means that being a strange non-standard variable speed system it's not possible for ordinary MFM controllers to read or write Victor disks.
The 5.25" HD 1.2MB drive that I'm using to write out Victor disks is fixed speed, 360 RPM. In order to simulate the variable speed of the Victor, the bit cells on the outer tracks will be smaller than the ones on the inner tracks. For a long time it has been unclear if making the bit timing smaller would cause a need for write precompensation. Many people have looked at the Victor's floppy hardware, firmware, and software, and no-one ever found anything in it to do precomp. Now that I have writing working, I can confirm that no precomp is needed, the bits aren't packed that tight.
It didn’t take long to get floppur creating Victor disks again since that was where it had started. First I was able to get the ROM to see that there was a disk in the drive and read the header but complain there were errors. Next I was able to get it to read a few sectors, but then error out. More fiddling and I managed to get it to read a couple of tracks before giving up. Finally I was able to get it to load all of MSDOS.SYS from a disk and then start it, giving me the Victor DOS splash screen. But then DOS would print non-stop errors because it couldn’t read COMMAND.COM from disk.
The very next morning I was finally able to write out a floppy that would boot MSDOS.SYS and then load COMMAND.COM. The trick was the length of the sync mark. The ROM on the Victor was happy with a short sync mark as specified in the technical manual, but DOS wanted a sync mark of at least 150 bits. Without the long sync mark DOS refused to read any sectors at all. It was definitely unexpected, I thought for sure that the Victor DOS routines would have used the same floppy source code that the ROM did, but apparently not.
At last! I could now write a floppy from Linux using a SuperCard Pro! I put together some tools a few months ago that would let me move files on and off of Victor sector images. I quickly shoved the 170k Kermit onto a DOS 3.1 floppy, booted it up, and I was able to transfer files!
Now You Can Do It Too
I have pushed updates to floppur, and also put up a new vtools repository with my Victor disk tools. I hope to add CP/M support as well as support for hard drive images, but currently only DOS floppy images are supported, and both single sided and double sided images work. I’ve also put together a minimal boot disk that will work on a 128k Victor and includes Kermit. Thanks to @Devilish_Design for the tip on how to get that version of Kermit to not hang when transferring files. This boot disk should be enough to get a Victor going without having any other good bootable media. Now, finally, the two or three remaining people that have a Victor that didn’t come with any bootable disks can do something with their machines without needing someone to snail mail around some floppies!
An interesting side note: because of the way the Victor handles the second side of a disk and logically numbers all of the tracks on side 2 as 81-160, a double sided disk can be booted on a single sided drive. At least as long as all the boot files are on side 1.