Thursday, December 29, 2005

Abort, Retry, Ignore, Fail?

I hope you all are having a good holiday season! I've been blessed with the chance for an extended stay with my family. My vacation has been front-loaded with lots of busy, traditional Christmastime activities, some of which I may later describe in excruciating detail. The last few days, though, has been a lot of conversation, eating, mini-outings, and odd projects. The one that's most exciting and frustrating is my big archival project.

For years I've forbidden my parents to throw out our first computer, an Epson 8088 running DOS 5.0. Partly because the computer itself has a lot of meaning to me (it's where I played my first text adventures, where I learned to program, where I first encountered Sierra games), but even more because it was the only location with a lot of my earliest games, from my 5th through 8th grade period. I'd never backed any of it up, of course, and wanted to capture some of it before it was too late.

I've already lost the very earliest games forever. After my family got a 286 I'd copied over my earliest games, Adventure I and Adventure II and Big Business and more that I don't even remember any more, and then erased them from the 8088 because, well, I needed the space. (The 8088's hard drive holds a whopping 20 megabytes of data; the 286, if I remember right, had 40). Unfortunately, the 286's hard drive had crashed, hard, a little after we got the Acer, and of course I hadn't backed up that data, either. It makes me a little sad that I'll never get back those really old games, but I wanted to have a crack at retrieving what was left.

The difficulty, of course, was how to get the files off. The 8088 only has a 5.25" floppy drive - no 3.5", no ethernet card, nothing modern. In my first crack at this problem, over Thanksgiving, I'd bought a new 5.25" floppy drive from Ebay and installed it in my brother's PC. The drive turned out to be bad, though, so while I could copy a lot of data to my floppy disks, I couldn't pull it back off again.

I debated trying again over Christmas with another drive, but decided to try another solution instead. The 8088 did have a serial port, which meant I should be able to use a null modem cable. This is a simple connection that allows two computers to directly exchange data without a network. The cable was only a few bucks at Fry's so I picked it up. However, it turns out that the software I wanted to use (INTRSRVR) didn't ship with DOS until 6.2, so the elegant solution I wanted (drag and drop entire files across the cable) wouldn't work.

On Monday I spent a fair amount of time online, searching around for other options. I ended up deciding that, in a bizarre but somehow appropriate solution, the best answer would be for me to program my own data transfer program using, of course, QBasic. I'd never done anything like this in the old days, but with the online help I found the commands I needed to open up the COM port and put data on the wire.

I first wrote a very simple program to test the connection itself; whatever you typed in one computer would appear on the screen of the other. This worked fine so I adapted the program into a classic client/server application. The 8088's program ("NULLSEND.BAS") would prompt for a filename, then send that filename and the file contents across the COM port. The other program ("NULLSRVR.BAS") listened on the COM port, would read in the file name, create the file, and dump all the data out.

All in all, an elegant solution, and while it took me far too long to write, I was happy to have it working. However, there was another wrinkle to the story. The bits on the 8088 are decaying before my eyes. None of my larger programs (School Simulator 1000, The Project Game) can be read in their entirety because some of their sectors are bad. So I've been spending the last two days poking around and trying to reconstruct them as much as I can. My current approach is to copy the files onto a floppy disk (which, ironically, is far more stable now than the hard drive is), use an editor to snip out the trash copied from bad sectors, and then use NULLSEND to rescue the damaged file.

Using this strategy I've been able to retrieve about 80% of my files intact; unfortunately, these are all the small, unfinished programs. I still haven't gotten good copies of SS1k, TPG, or Thieves' World (which is incomplete but still quite large). This is because the 8088 is dying every second I leave it on. As I write this I am no longer able to run Edit (to trim files) or QBasic (to send them). I've gotten PART of every file off, but only about 10-50% of the larger games. I want to tinker with this some more before I give up for good.

Right now this feels kind of frustrating, and I'm really wishing I would have done this a while ago. The bit rot had taken hold by Thanksgiving, but just a year ago Andrew was able to play the games without any problems. Still, I'm delighted that now I'll have at least SOMETHING to show from this early period in my programming career.

In other news, Pat got Civ IV for Christmas (congratulations, bro!) and has already discovered Flight and Radio and a bunch of other stuff by the year 1860. Keep up the good work! Vicariously living through his Civ experiences has helped me avoid painful withdrawal symptoms this week. When not lying on the floor desperately typing at the 8088, much of my time has been spent talking with my family, playing with our new dog Truman, reading some really cool books Pat gave me, and watching movies with my folks. Special activities post-Christmas included a trip to the Brookfield Zoo, a particularly nostalgic location for the King household.

Anyways, I'm off to jigger some more bits. Hope all is well with you, and be sure to have fun on Saturday!

No comments:

Post a Comment