Thursday, 13 March 2008

Night of the living Beebs

I've just had a funny few days (well, nights really - but they're logical days to me, even if they're physical nights to the rest of this timezone). It all started with a box of Beeb Micros that were gathering dust (and worse...) in a friend's place, so were offered to me since it's well known that I just can't get enough of 'em.

So, Job no.1 was to find out what exactly what I'd just been given. Looked like a 128K B+ (yay! I didn't have one of these before) that was in very good condition, a couple of filthy Bs (issues 3 and 7, one with 8271 DFS) and a couple of Master 128s that were positively vile. When I said that these machines were gathering dust, and worse, the worse consisted mainly of dead insects, cocoons, insect droppings and so on. Keyboards full of gunk, with some keys barely readable through the grime. Filthy to vile, in other words. The good news was that all the machines with the exception of one of the Masters actually powered up OK, or with a bare minimum of the laying on of hands (i.e. reseating ICs) in the case of one Model-B. That's pretty amazing, really. There was also a couple of (mostly working) disc drives and a (dead) monitor.

On to Job no.2 then: cleaning. I'm fairly sure that it's not abnormal to be in the shower at 5am clutching a sponge and a 23-year old, muttering words of filth and tenderness. OK, so maybe it is abnormal when the 23-year old is a lump of beige plastic in two halves. Still, TLC gradually overcame the filth and that left me with some nice clean cases. Cleaning the PCBs was fairly easy - just dust them down, for the most part. No sexual innuendo required. That just left... the keyboards. A few hours' work ripping them apart, dunking things in soapy water, rinsing and drying them, and then reassembly and I was good to go.

Sadly, although I was good to go, two of the machines weren't really interested in getting with the program.

The previously working Master was now being intermittent. Maybe it wasn't working well before either - I did nothing more than power it on and type a *command or two - or maybe some piece of vital dirt was now missing. Either way, given the lack of socketed components in the machine, it was beyond the critical "worth the effort" point. As luck would have it, the problem with the other Master was in the PSU, so I had an entire spare Master transplant... and \o/ all was well. Having a dead Master wasn't the end of the world, either - I already had a sickly machine that it could donate some parts to.

Since I was putting so much effort into these beasties, I replaced the CMOS battery pack in the good Master, and used the dead one's pack to make a new one for my existing machine. Great fun there - leaking Duracell AAs aren't overly nice.

Final score on the Masters: I started the day with one damaged Master and ended it with two working ones in excellent condition (and some spare parts). Win.

I didn't do so well with the Beebs, when it came time to give them a more thorough test. One died fairly soon - and resisted all my efforts to bring it back. Again, it was past the effort/worthwhile horizon, so I let it go to be spare parts and/or wallpaper.

The second B seemed OK, and I went to the effort of fitting a disc interface to it before I noticed that it had some interesting problems - the screen display would (after a while) start to corrupt itself in interesting ways. Some letters (MODE 7 FTW) would change, others wouldn't. Given the characters that were affected, it was obvious that bit 3 of something was being lost. Not all instances of the characters were affected - it was dependent on screen position too. Worst of all, using the cursor/copy keys reproduced the bit3-deficient characters so that meant that the problem was in the CPU/RAM side of things, not the SAA5050 side. "Ah well," I thought, "this might make for a fun one to fix."... and then I noticed that after a time the corruption got much worse, and that moved it into the effort side of the effort/worthwhile balance.

Final score on the Beebs: gained a 128K B+ and a fair few spare parts, including an 8271 upgrade I didn't have before.

So, disc drives... One was fine, but only a SS 40T drive. Not the best news, but functional. A second SS 80T drive didn't seem at all happy, so I ditched it. That left a dual drive with one DS 80T and one SS 80T drive. The SS 80T drive wasn't happy, so out it went to be replaced by one of my spare DS 80T drives... once I'd dealt with the remaining drive. It worked, but only if I held the disc in the drive and pressed down on the clamp. Looking at it, it was pretty obvious why: the clamp mechanism was bent. A bit of fun and games stripping the drive down to fix that and I was good to go, so in went my existing drive alongside the new one... and failed to work. Seems that my existing drive's head-load solenoid was sticking. On the bright side, it was the same model as the new one, so I'd just had a crash course in stripping that type of drive down.

Final score: gained a SS 40T drive I'll probably never use, and a dual DS 80T drive that I will.

With my Beeb nostalgia freshly stirred, I figured it was about time to play with some of my existing machines a bit. "It's been a while since I played Exile!" I thought, and then on a whim read a little online about it. And now I have to play Exile - this year marks its 20th anniversary! And what better machine to play it on than the Master Compact... can't be beaten in terms of Beeb keyboard quality and comes-with-a-monitor-stand-ness.

New problem: transferring Exile from a 5.25" DFS disc to 3.5" one (maybe ADFS, maybe DFS - I can be flexible with these things having fitted a 1770DFS ROM to the Compact), or hooking up a 5.25" drive to the Compact... although the way I saw it, if I was going to go to the effort of hooking up a 5.25" drive, I might as well do it properly and transfer stuff to 3.5".

You might wonder why adding a drive to a BBC machine would be anything other than a doddle, but you see the Compact has a non-standard connector - it's a 25D that I (eventually) found corresponds to pins 8-32 of the normal 34 pin connector. Luckily, I just happen to have things like IDC 25D plugs and sockets lying around the house, and even a spare 'normal' beeb drive cable to cannibalise. So now my Compact has an external 5.25" drive as well... and I could copy Exile across to the 3.5" drive. Excellent. (I went with DFS in the end - ADFS would have offered me more space for savegames, but I would have had to disable the 1770DFS (and supply some 'placeholder' *DRIVE, etc. commands - hardly a big problem) to make it work and that seemed like more faff than it was worth).

That then lead to a bit of a head-scratch... did I want to stick with my legally purchased Exile (I bought a second copy direct from Superior about 12 years ago, shortly after buying a Master 128 to play it on), or skip all that "type this annoyingly located word in from the novella" malarky and use a version downloaded from the interwebs. In the end, I gave my genuine Exile disc a loving stroke (in its envelope, of course) and put my working copy back alongside it. Haxx it was, even if it did involve using a RiscPC to transfer the downloaded data to the Compact via an L-format ADFS disc.

Actually, I used two RiscPCs since my main one decided that then was a good time to die. It's most likely a problem I've seen before with the PSU, but I put all of that to one side because, quite frankly, I was fed up with b0rked machines and just wanted my Exile fix.

Then I had some fun with Exile's save game facility - it was often ignoring the filenames I gave and using the drive number instead. Freaky (and not something I remember seeing happen before). Worst of all, it was often doing it, not always. I.e. it was going to be a bitch to figure out/fix. I dunno, maybe it has something to do with using the normal version on a Compact (the Compact had its own version, necessary since the Compact has no DFS by default and the 'normal' Exile uses DFS commands). That doesn't explain the problems I had reproducing the glitch, but hey: I don't need to use the game's own load/save routines at all.

I really wish that I'd known just how optional the game's own load/save feature is back when I was first playing (and hooked on) Exile.

You see, Exile is such a big game that it uses damn near every scrap of memory that a Beeb has available... and that means that there's no room left for the filing system, so no built in load/save. The way that Exile solves this little conundrum (and believe me, Exile with no load/save option would be exceedingly cruel) is by having the load/save functionality in the loading program. The game itself, upon a particular keypress, squirrels all the necessary data away in safe spot in memory, corrupts the rest, and then hangs. You then hit ctrl-break to restart the machine, and run the loading program which allows you to save your game, etc.

Sounds a bit convoluted, but not necessarily all that bad, huh? Well, when I was first playing Exile, it was the tape version. So "quickly" saving my game actually took about twenty minutes. Really. No hyperbole used, because none is required. Ah, but I digress. So let's get back to my filename mangling problem and the hint as to not needing to use the game's own load/save features.

Since the savegame data is squirrelled away safely in memory, all I actually have to do is to save that block of memory to disc, and a simple *SAVE command will do just fine. (In case you're wondering, or have stumbled across this entry whilst actually looking for such info and made it past the showering with a filthy 23-year old scene, the command is: *SAVE filename 2C00 +400). Better yet, I knocked up a couple of quick programs in assembly to function as *QSAVE (to quickly save the game as Q.SAVE) and *QLOAD to load Q.SAVE into memory at &2C00 and then run the game. I still gots me some beeb-smarts after all :)

Naturally, something that was by this point going so well had so have a problem. And sure enough, this evening my Compact started doing something strange. Every now and again when I was playing Exile, the screen would corrupt - and then recover. I was a bit surprised that the game didn't crash, but screen corruption isn't necessarily that fatal for beebs. Master series machines have even more scope for "screen goes screwed but nothing crashes" since there's the possibility of shadow RAM involved.

And then things got annoyingly familiar. Every now and again, when I reset the machine in order to load/save, the normal "Acorn MOS / Acorn 1770 DFS / BASIC" messages would flicker into lowercase. A little (literal) prodding revealed that the issue was brought on by holding the ctrl key down which pushing the machine down onto the table. Pressing the underside of the case also caused the lowercase thing, and it would last as long as I pressed in a certain area. It was annoyingly familiar because, just like my dead beeb, it's a 1-bit difference (bit 5, if you care). On the bright side, there wasn't the extra "and if I wait a few more minutes, it craps itself all over the memory anyway" problem that the beeb had. On the other hand, the Compact would hang hard if I tried to do anything with it whilst the text was in lowercase.

So there I was, at "bedtime", with a machine that had a problem. A machine, furthermore, that I was very much looking forward to enjoying the fruits of my Exile-related labours with. So that most definitely lands on the worthwhile side of the effort/worthwhile balance. Just to force my hand in the issue, I'd actually downloaded the Master Compact service manual a few days beforehand.

Who needs sleep when you have a malfunctioning computer and a circuit diagram?

Long story short (cries of "too late" from the Airplane! fans), there are some plastic "support" thingies moulded into the bottom tray of the Compact's case. One of these had pressed a leg from IC14's socket (which is where the Acorn specific serial chip would be fitted if I had it) into the track that ran next to it and over time the nice green coating had worn away leaving a little patch of exposed metal. Once that had happened, all it took was a little pressure to make a connection and presto: the system VIA's PB5 was pulled to logic 1 in step with the SERPROC's ¬CS signal. Ouch.

I guess that when they said "THIS PRODUCT MUST STAND ON A HARD FLAT SURFACE" they really meant it. That alone would have prevented this issue, or at least massively reduced the chance of it happening.

And the moral of this rather long and mixed up story? Frankly, I have no idea. I was going to make some off-colour joke about fiddling with 20-year olds, but now I've forgotten it. Maybe I'd have done better if I'd gotten any sleep... Oh, wait, I have Exile and a Master Compact to play it on instead...

You gon' git yours, Triax...

Oh, and I guess I should fix my RiscPC, too :(

No comments: