Kill the Bit (Personified)
Jesse Downing 08 Oct 2019 (Rev 11 Oct 2019)
Explanation
The code here represents the code for the popular game "Kill the Bit" written
for the Altair 8800 on May 15, 1975 by Dean McDaniel. This code would be flipped
in in binary using switches on the front of the machine, and then once the
program is run, would cause the 8 LEDs representing the accumulator (CPU
register A) to have a "bit" rotate across them. The user would then try to "kill
the bit" by flipping the switch underneath the LED at the correct time. If the
wrong switch is flipped, bits would be added. The game is over when the final
bit is killed. This was one of many such popular demos on the Altair 8800
microcomputer - the first widely available personal computer, and arguably one
of the most important personal computers in all of computing history (as it was
the machine on which Microsoft got its start).
The narrator of this play (if it can be called that) is the personified version
of an Intel 8080 CPU. The format is as follows:
Code (in Octal) Assembly Code English Explanation
NARRATION
This might make zero sense to anyone who's not obsessed with computers or
programming (and might quite frankly make zero sense to many of them), but it's
something I was interested in exploring, as I'm planning on trying to build my
own Altair 8800 from (mostly) new parts once I return to the US.
Program
org 0
PROGRAM INITIALIZED AT LOCATION ZERO
041 000 000 lxi h,0 initialize counter
COUNTER IS SET TO ZERO
026 200 mvi d,080h set up initial display bit
REGISTER D IS SET TO HEXADECIMAL 80, OCTAL 200, DECIMAL 128,
BINARY 10 00 00 00
001 016 000 lxi b,0eh higher value = faster
REGISTER B IS SET TO HEXADECIMAL 0E, OCTAL 037, DECIMAL 15,
BINARY 00 01 11 11
032 beg: ldax d display bit pattern on
032 ldax d upper 8 address lights
032 ldax d
032 ldax d
LOAD THE ACCUMULATOR FROM THE ADDRESS IN D
LOAD THE ACCUMULATOR FROM THE ADDRESS IN D
LOAD THE ACCUMULATOR FROM THE ADDRESS IN D
LOAD THE ACCUMULATOR FROM THE ADDRESS IN D
(THE BITS HAVE BEEN DISPLAYED)
011 dad b increment display counter
WHAT'S IN REGISTER B?
WHAT'S IN REGISTER C?
ADD B TO H AND C TO L AND MARK THE BIT IF IT BREAKS 16
322 010 000 jnc beg
IF IT DOESN'T CARRY, JUMP TO LOCATION 08.
IF IT CARRIES, CONTINUE.
333 377 in 0ffh input data from sense switches
GET THE INPUT OF DEVICE FF.
LOAD IT INTO REGISTER A.
(WHAT DO THE SWITCHES SAY?)
252 xra d exclusive or with A
XOR OF REGISTERS D AND A.
IF A BIT IN ONE IS ONE THEY BOTH ARE ONE,
BUT IF THE BITS IN TWO ARE ONE THEY'RE NONE.
THIS IS XOR. LOAD REGISTER A
017 rrc rotate display right one bit
AND NOW SHIFT THE ACCUMULATOR ONCE.
MOVES THE ZEROS, MOVE THE ONES.