One-Line C64 BASIC Music
Local sound artist/electronic musician Keith Fullerton Whitman released an extraordinary piece on the b-side of his November 2009 cassette hallicrafters, inc. The piece is called 10 poke 54272+int(rnd(1)*25),int(rnd(1)*256) : goto 10 and is 18 minutes of sound produced by a Commodore 64 emulator running the BASIC program that is the title of the piece.
The memory locations beginning at 54272 are mapped on the Commodore 64 to the registers of the SID (Sound Interface Device). By POKEing random values into them, the SID, although it is a musical chip, is stimulated to produce sounds in what probably seems like a non-musical way: based on the effect of register settings and the sequence produced by the system’s random number generator, a polynomial counter.
I’m listening to the piece running on a hardware C64 now, which is soothing, although it seems like it shouldn’t be. Looking at the code, I note that the program
10 poke 54272+rnd(1)*25,rnd(1)*256 : goto 10
will put the same values into the same memory locations (and therefore SID registers) in the same order. The INT function is unnecessary because all arithmetic in C64 BASIC is done in floating point and then cast to integer whenever necessary. It’s possible that removing these functions will cause the piece to speed up, however, and I suspect it will, even though a BASIC interpreter could skip the unnecessary INT calls to begin with. There would be various ways of determining this, but the one I’d like to try involves getting two C64s, each with one version of the program, and seeing if they go out of phase.
By the way, I say that these two programs will put the same values in the same order because RND(1) returns a deterministic sequence. Any time either of these programs is invoked before other calls to RND are made, they will produce the same sequence. Using RND(0) would seed the random number generator on the jiffy clock, so would do different things depending upon how long the computer had been on before startup.
Thanks to sound artist and digital media scholar Kevin Driscoll, a.k.a. Lone Wolf, for letting me know about this.
Update: Hilariously, I overlooked that Whitman is not the author of this program – he credits Noah Vawter, a.k.a. Shifty, who is currently collaborating with me on a project about a one-line Commodore 64 BASIC program. I guess I was too distracted by that picture of an iPhone running a C64 emulator.

Love the detail about seeding the RND function to generate a predictable sequence of pseudorandom integers! Does this make the distinction between “song” and “song-making machine”?
Random numbers also play an interesting role in your thread demo. Pulling a value off of the SID is an elegant shortcut to randomness.
I’d love to see a historical look at randomness in the history of computing. e.g. I’ve seen some programs use the milliseconds digit from the UNIX time function.
My fave reflection on randomness is Tom Jenning’s review of a Rand Corp book titled, “A Million Random Digits with 100,000 Normal Deviates” (nice beach reading): http://www.wps.com/J/million/index.html
Incidentally, it’s the same random technology used in the Lone Wolf playable book series! http://www.projectaon.org/en/ReadersHandbook/ExampleRandomNumberTable
Jen Bervin, the author of Nets and The Desert (books created by erasure), is working on a book based on A Million Random Digits with 100,000 Normal Deviates.
Also, check out the more than 100 reviews of that book on Amazon.
That’s pretty awesome. It amazes me what people can still do with a C=64.
I came across a web server running on a C64 some time ago it was slow but worked. Its amazing that these old machines still work.