Space Invaders
Taito's 1978 arcade fixed shooter, read through Computer Archeology's disassembly of Midway's release.
On this page
The atlas reads Space Invaders through Christopher Cantrell’s Computer Archeology disassembly of the 8080 code, which disassembles MAME’s invaders set, Midway’s release1. Labels and comments cited here are his.
The aliens march one at a time. Each frame moves one live alien, and the rack takes a step only after every live alien has moved, so the step rate rises as the rack thins1. The rack steps 2 px per step, 3 px rightward for the last alien2,2.
Mechanics
| Mechanic | Kind | How |
|---|---|---|
| Remaining-enemy speed-up | Draw-bound | one alien moves per frame, so a step of the rack takes one frame per live alien |
| Enemy formation | Marching rack | 55 aliens drawn from one reference alien move as a single block |
| Difficulty ramp | Start position | each new rack starts lower, from an 8-entry table |
| Extra life | Once | one ship at 1,500 points, or 1,000 by DIP switch |
| High score | Single | one four-digit high score, updated when a player's game ends |
| Destructible terrain | Erodes | the shields are screen pixels; a shot's explosion pattern is erased from them, and aliens drawn over them overwrite them |
Every claim about this game, by concept (12)
References
- ^ abSpace Invaders moves its rack of aliens one alien per frame. The interrupt at scanline 96 calls
CursorNextAlien, which skips dead aliens to the next live one and waits until the end-of-screen interrupt'sDrawAlienhas drawn it. Only when the cursor passes the last of the 55 slots doesMoveRefAlienstep the reference alien, from which every other alien is drawn. A step of the rack therefore takes one 60 Hz frame per live alien: 55 frames at the start, 1 for the last alien. The listing reads MAME'sinvadersset, Midway's release.CodeComputer Archeology, Space InvadersHow we know
7>>> binary 0000:roms/invaders.h + roms/invaders.g + roms/invaders.f.diag + roms/invaders.econtent/Arcade/SpaceInvaders/Code.md line 7 at 1adc2a7 · upstream ↗ 28If I understand this right then the system gets RST 8 when the beam is *near* the middle of the screen and RST 10content/Arcade/SpaceInvaders/Hardware.md lines 28–33 at 1adc2a7 · upstream ↗ 120; Main game-play timing loop ⋮ 1240078: CD 00 01 CALL $0100 ; {code.DrawAlien} Draw the current alien (or exploding alien)
content/Arcade/SpaceInvaders/Code.md lines 120–124 at 1adc2a7 · upstream ↗ 138; Continues here at scanline 96 ⋮ 15400AB: CD 41 01 CALL $0141 ; {code.CursorNextAlien} Advance cursor to next alien (move the alien if it is last one)
content/Arcade/SpaceInvaders/Code.md lines 138–155 at 1adc2a7 · upstream ↗ 248CursorNextAlien: ⋮ 2600146: 3A 00 20 LD A,($2000) ; {ram.waitOnDraw} Still waiting on ... 2610149: A7 AND A ; ... this alien to be drawn? 262014A: C0 RET NZ ; Yes ... leave cursor in place ⋮ 2670154: 3C INC A ; Have we drawn all aliens ... 2680155: FE 37 CP $37 ; ... at last position? 2690157: CC A1 01 CALL Z,$01A1 ; {code.MoveRefAlien} Yes ... move the bottom/right alien and reset index to 0 270015A: 6F LD L,A ; HL now points to alien flag 271015B: 46 LD B,(HL) ; Is alien ... 272015C: 05 DEC B ; ... alive? 273015D: C2 54 01 JP NZ,$0154 ; {} No ... skip to next alien
content/Arcade/SpaceInvaders/Code.md lines 248–273 at 1adc2a7 · upstream ↗ 319MoveRefAlien: 320; The "reference alien" is the bottom left. All other aliens are drawn relative to this 321; reference. This routine moves the reference alien (the delta is set elsewhere) and toggles ⋮ 32601A5: 21 06 20 LD HL,$2006 ; Set current alien ... 32701A8: 36 00 LD (HL),$00 ; ... index to 0 ⋮ 33101AE: CD D9 01 CALL $01D9 ; {code.AddDelta} Move alien
content/Arcade/SpaceInvaders/Code.md lines 319–331 at 1adc2a7 · upstream ↗ 3910; The game starts with 55 aliens. The aliens are move/drawn one per interrupt which means itcontent/Arcade/SpaceInvaders/Code.md lines 3909–3911 at 1adc2a7 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-25.
- ^ abWhen the rack bumps an edge,
RackBumpreverses it and drops it 8 px: it sets the next step's drop from$200E, which the game's RAM copy fills with$F8(-8), andMoveRefAlienclears the drop after one step. Its step to the right is 2 px, or 3 px when one alien is left; its step to the left is always 2 px.CodeComputer Archeology, Space InvadersHow we know
31631597: 3A 0D 20 LD A,($200D) ; {ram.rackDirection} Get rack direction 3164159A: A7 AND A ; Moving right? 3165159B: C2 B7 15 JP NZ,$15B7 ; {} No ... handle moving left ⋮ 317015A5: 06 FE LD B,$FE ; Delta X of -2 317115A7: 3E 01 LD A,$01 ; Rack now moving right ⋮ 317315A9: 32 0D 20 LD ($200D),A ; {ram.rackDirection} Set new rack direction 317415AC: 78 LD A,B ; B has delta X 317515AD: 32 08 20 LD ($2008),A ; {ram.refAlienDXr} Set new delta X 317615B0: 3A 0E 20 LD A,($200E) ; {ram.rackDownDelta} Set delta Y ... 317715B3: 32 07 20 LD ($2007),A ; {ram.refAlienDYr} ... to drop rack by 8 ⋮ 318315BE: CD F1 18 CALL $18F1 ; {} Get moving-right delta X value of 2 (3 if just one alien left) 318415C1: AF XOR A ; Rack now moving left ⋮
content/Arcade/SpaceInvaders/Code.md lines 3163–3185 at 1adc2a7 · upstream ↗ 368418F1: 06 02 LD B,$02 ; Rack moving right delta X 368518F3: 3A 82 20 LD A,($2082) ; {ram.numAliens} Number of aliens on screen 368618F6: 3D DEC A ; Just one left? 368718F7: C0 RET NZ ; No ... use right delta X of 2 368818F8: 04 INC B ; Just one alien ... move right at 3 instead of 2
content/Arcade/SpaceInvaders/Code.md lines 3684–3689 at 1adc2a7 · upstream ↗ 39301E4: 06 C0 LD B,$C0 ; Number of bytes 39401E6: 11 00 1B LD DE,$1B00 ; RAM mirror in ROM 39501E9: 21 00 20 LD HL,$2000 ; Start of RAM 39601EC: C3 32 1A JP $1A32 ; {code.BlockCopy} Copy [DE]->[HL] and return
content/Arcade/SpaceInvaders/Code.md lines 393–396 at 1adc2a7 · upstream ↗ 40721B00: 01 00 00 10 00 00 00 00 02 78 38 78 38 00 F8 00content/Arcade/SpaceInvaders/Code.md line 4072 at 1adc2a7 · upstream ↗ 32601A5: 21 06 20 LD HL,$2006 ; Set current alien ... ⋮ 32801AA: 23 INC HL ; Point to DeltaX 32901AB: 4E LD C,(HL) ; Load DX into C 33001AC: 36 00 LD (HL),$00 ; Set DX to 0 33101AE: CD D9 01 CALL $01D9 ; {code.AddDelta} Move alien
content/Arcade/SpaceInvaders/Code.md lines 326–331 at 1adc2a7 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-25.
Sources
Code
- Cantrell, Christopher. 2026. “Computer Archeology: Space Invaders.” Commit 1adc2a7. topherCantrell/computerarcheology @ 1adc2a7 · licence, all uses