Could Bill Gates write code?
Yes. And then some, Altair BASIC dis-assemblers reckon
Was it any good?
Reuben Harris has been disassembling a binary with some help from Monte Davidoff, the third author of Altair BASIC (along with Gates and Paul Allen) and who we interviewed here last week. He has the same question in mind:
"'Could Bill Gates Write Code?' Or was he merely the luckiest man alive," before concluding... "Yes He Bloody Could!"
Although Reuben's analysis is not quite complete, he tells us that Gates, Allen and Davidoff threw every trick at the book to squeeze the interpreter into 4 kilobytes. They succeeded and left some headroom for the programs themselves - without which it would have been pretty useless, of course.
"It was pretty incredible - they were pretty good at what they were doing," he tells us.
Reuben draws out attention to a particularly Mel-like feat.
" I found a jump instruction that jumped to the middle of another instruction. Why was this extraordinary? Well, on the 8080, instructions were 1, 2, or 3 bytes in size. Since instructions could be more than one byte in length a programmer had to be careful that he didn't jump to, say, the second or third byte of a three-byte instruction; since he'd be executing arbitrary instructions that would almost certainly crash the whole program. What was going on??"
Reuben concludes this was entirely intentional. "Rather than skip over some small bit of conditionally-executed code that we don't want to execute, if that bit of code was small enough (ie one or two bytes) you could simply encode those one or two bytes inside a two or three byte instruction thus saving the three-byte instruction needed to jump over it. The best example of this technique is in BASIC's error message code "
All that... for three bytes.
You can play with Altair BASIC online, if you have a telnet client. It's at the splendid Online Software Museum here and a selection of "mindbendingly dumb" games are included.
Reuben has also pointed out the similarities between the Altair BASIC's error codes and the error codes returned by modern Microsoft Basics. Plus ca change.
Of course Monte Davidoff, who worked on two BASICs for Micro-Soft in all, tells us that the better algorithms could be used when the developers had more memory space. And we know from Bill Gates' foreword to Gordon Letwin's Inside OS/2 (Microsoft Press, 1988) that Letwin ripped up the designs for the earlier interpreters when he arrived at Microsoft. But that isn't really the point - the Altair BASIC is rightly feted not for being the most elegant, but for being the first and the smallest. And that's enough. ?