Saturday, December 01, 2007

Double-checking Dawkins

I've been reading through Richard Dawkins' books and am currently half way through The Blind Watchmaker (2006 paperback edition) and on page 119 he writes:

In my computer's ROM, location numbers 64489, 64490 and 64491, taken together, contain a particular pattern of contents---1s and 0s which---when interpreted as instructions, result in the computer's little loudspeaker uttering a blip sound. This bit pattern is 10101101 00110000 11000000.

Of course, this piqued my curiosity. Did Dawkins just make that up, or is this really the contents of a specific bit of memory on a specific computer?

The book was first published in 1986, so I just had to figure out what it was. Starting with the instructions and converting to hex we have AD 30 C0. Now, considering the main processors around at the time there are three possible interpretations of these three bytes:

Z-80/8080 XOR L ; JR NC C0

6502: LDA C030

6809: JSR 30C0

The first didn't look at all plausible, but both the other two do. The 6809 looks like it could be calling a sub-routine at location 30C0 and the 6502 would work if C030 were actually memory-mapped I/O and a read was necessary to cause the blip.

I couldn't find any machine with a meaningful interpretation of the 30C0 location on a 6809 machine, but 6502 turned out to be a different story.

On an Apple ][ memory in the range C000-C0FF is mapped to various bits of I/O:

The memory space on the Apple II between $C000 and $CFFF was assigned to handle input and output. From $C000 to $C0FF the space was reserved for various soft-switches used to control the display, and various built-in I/O devices, such as the keyboard, paddles, annunciators, and the cassette port.

Poking around further I discovered that a read from C030 (known as SPKR) will blip the speaker on an Apple ][. So Dawkins is telling the truth and he's using an Apple ][.

So returning to the memory locations what program is he talking about? The three memory locations are FBE9, FBEA and FBEB. That turns out to be inside the Monitor ROM on an Apple ][ (the stuff that Woz wrote) and happily a complete ROM listing was provided with the Apple ][.

So looking in a scanned Apple ][ manual we find that those locations are inside the BELL2 routine. Specifically on page 163 of the manual we find the following:

FBE4: A9 0C 597 BELL2 LDA #$0C TOGGLE SPEAKER AT
FBE6: 20 A8 FC 598 JSR WAIT 1 KHZ FOR .1 SEC
FBE9: AD 30 C0 599 LDA SPKR
FBEC: 88 600 DEY
FBED: D0 F5 601 BNE BELL2
FBEF: 60 602 RTS2B RTS

The line in bold is exactly the code that Dawkins is referrring to.

So, while writing this famous text on evolution, Dawkins had time to poke around inside the Apple ][ ROM and write about it in his book.

Respect.

15 comments:

Eli Bendersky said...

Nice post. Kudos on your research into this subject.

: Joseph j7uy5 said...

That's a nice bit of detective work. BTW I seem to recall that the NEC V20 also was in use around then...just a bit of trivia, your analysis is entirely correct.

Benanas said...

Respect.

Jean Hugues said...

Amazing. Bravo !

BTW: I knew it. R. Dawkins is a God.

Phil said...

Big deal. Back in '86, if you were writing anything for Apple, Commodore, Atari, Trash 80...take your pick, the only way you could really do anything was to know what happened at every memory address. And since you were only working on 64K (or try the VIC-20 with about 3.5K usable RAM), you really didn't have to know that a whole lot. Don't get me wrong, I loved working on all of them, but it didn't take a Dawkins to get the speaker to chirp on any of them. Sorry.

Phil said...

Sorry, but back in '86, if you were writing anything for Apple, Commodore, Atari, Trash 80...take your pick, the only way you could really do anything was to know what happened at every memory address. And since you were only working on 64K (or try the VIC-20 with about 3.5K usable RAM), you really didn't have to know that a whole lot. Don't get me wrong, I loved working on all of them, but it didn't take a Dawkins to get the speaker to chirp. It was just a way of life back then.

Tristram said...

Back in the early '80s I bought a Sharp MZ-80B microcomputer which came with a listing of its whole operating system in a little booklet. As phil says, this sort of detailed knowledge was common back then.

WWWWolf said...

Okay, one could say that Dawkins is wrong: The three bytes they refer to don't "cause" a "blip", they change memory contents which is a *part* of the blip-sounding process. But that's just technical hair-splitting. =)

Hmm, seems that Apple was a weird system if you have to *read* memory (LDA) to make things happen - on C64 you, like, *write* to memory (STA) to make stuff happen.

Howard said...

Dude are you sure he represented it from the MSB and not as a bit sequence sent out of the low order bits first (B5 0C 03)?

Hell of an analysis regardless

Howard said...

Please disregard the above, it doesn't get more certain than finding it addresses the speaker port. Very very nice

John Smith said...

now i know i'm old. i used to program my apple ][e in assembler. 6502 assembly language is one of the easier ones to learn, and this was true for me even as a geeky grade-schooler.

how did i get into it? my older sister had just moved to cupertino to work for apple, and one of the first gifts she gave me was my apple ][e.

and yes, she was also the one who showed me the section of the dawkins book when it came out in 86. i thought it was pretty cool at that time that he was also into assembly programming, but then my sister reminded me that it was really easy to use the PEEK and POKE instructions in basic to manipulate memory contents, so he may not have been as cool as all that.

it took me a few more years to read dawkins on my own. thanks for the memories.

Ray said...

god didn't make little green apples or pc's
~RT

Queen of everything said...

Mad Respect.

Slrman said...

If Dawkins went to this much trouble on a totally trivial point, it seems reasonable that he could be creditable on other points, too.

Obviously, the man does his homework.

Rafael Quintana said...

Bottom Line: never doubt Dawkins.

Even if he had invented that stuff, the main point remains valid.

Now, on the other hand, what would have Richard written if the book's title were the "The Blind Assembler Language Coder" instead?