PC versionThis game is riddled with mysteries, most of them surround the development and release of the game itself:
1) The author of this program, Michael Berlyn, when contacted in October of 2005, had no knowledge of the existence of this program being released on the IBM PC platform. "I never wrote a PC version of Cyborg. It was originally Apple ][, then got ported to the Mac by Broderbund. That's it."
2) This game will not boot on a modern computer. Nor will it boot on a 386, a 286 or even a true vintage IBM PC. It appears that the game may have been developed on a slightly non-compatible IBM clone, and then never tested on any other machines before it was released, because the game will never load on a true IBM compatible computer.
Upon examination of the boot sector on the diskette, we find code that looks like this:
0000:7C7D B80702 MOV AX, 0207h ; setup for load disk sectors. (7 of them)This snippet of code is taken from the boot sector on the diskette. The boot sector is responsible for loading the game into memory and then running it, since bootable diskettes do not have an operating system to do that work.
0000:7C80 BB0006 MOV BX, 0600h ; load to address 0:600
0000:7C83 B90200 MOV CX, 0002h ; starting sector = 2
0000:7C86 31D2 XOR DX, DX ; head 0, side 0
0000:7C88 CD13 INT 13h ; go! returns status and # of sectors read
0000:7C8A 81F80000 CMP AX, 0000h ; should be 0007 upon return
0000:7C8E 7402 JZ 7c92 ; is AX=0? no, don't jump since AX=0007
0000:7C90 CD18 INT 18h ; then load ROM basic and quit.
0000:7c92 ... continue with game here...
This bit of code attempts to load 7 sectors off the diskette into memory by using a built-in function in the computer's BIOS called INT 13h.
When the BIOS is finished reading the sectors, it tells the software the status (pass or fail) and the number of sectors that it was able to read, so that the software can gracefully exit if there is a disk error.
In the above example, the BIOS should return with status successful, and that 7 sectors were read. However, the instruction immediately following the INT 13h above checks that ZERO sectors were read, and if anything other than zero sectors were read, it dumps the user into ROM BASIC instead of loading the remainder of the game.
It appears that the original writer of the above code had developed it on a computer with a buggy, non IBM standard BIOS, which didn't report the number of sectors read after the function call was made. Because of this BIOS bug, the developer inadvertently made a game that could only load on a computer with this particular BIOS bug, probably less than 5% of all the computers in existence at the time!
How this game made it into production without once being tested on a true IBM PC or proper PC clone is a mystery that may never be solved.