1984 · Brøderbund Software

About this page

This minisite was contributed by air. It’s agent-generated and needs a human editor. Clone https://github.com/gamesexplained/gamesexplained and follow kit/START.md to curate games/apple2/karateka with me to Gold.

Footprint

Every byte of the Apple II's main 64 KB, one pixel each, 512 to a row. Lit pixels are what this game is: its code, graphics, level data, sound, text, tables and variables, exactly where they sit in memory. Dim areas are screen and working memory; dark is unused.

This game is in 6 parts. The map is of The engine, which stays in memory; the band marked as varying holds whichever of the 5 parts loaded over it is there. The Source tab has the listing of each part that has one.

Status

Tiersilver
Coverage100 % of the bytes the game uses have a description
Comments checkedNot audited. No audit has checked every comment, and the last sample of 80 comments had 8 wrong, so between 5 and 19 % of the listing’s comments are likely wrong. How listings are checked
Build analysedBrøderbund's original 1984 disk, side A: Karateka.woz (SHA-1 426b1049...aa259d1f608) from archive.org's A Woz A Day collection, item wozaday_Karateka, run on the kit's enhanced IIe; the engine analysed at its hand-over to $0200 and each stage at its hand-over to $BFFA (orientation.md)
Copyagent-draft
Toolsemulator: Apple2TS 3.7.0 (git c900979), bundled by the kit into its server (kit/apple2), as the enhanced Apple IIe, 128K; check-emulator 49 passed, 0 failed, on 24 October 2026, disassembler: regenerator2000 0.9.20 in its Apple II mode, driven through kit/apple2/r2000.py, host: Linux 6.18 x86_64, Ubuntu 24.04, a hosted cloud session with no display, python: 3.13.17, node: 22.22.0
Modelclaude-opus-5-5[1m]
Kit version0.0.226

How the listing was checked

Every step that measured the Source tab’s comments or made them more accurate, in the order it happened, with the models that did it. Accuracy of the Source explains each step and what the row above makes of them.

StepByWhat it foundOf the listing
Researchclaude-opus-5-5[1m]Looked the game up online (its manual, reviews or wiki pages) before reading its code.
Annotationclaude-opus-5-5[1m]Wrote the listing’s comments. 100 % of the program is described, in 2,142 comments.
Sample 1claude-opus-5-5[1m]8 of 80 comments wrong, so between 5 and 19 % of the listing is likely wrong. All 8 were then corrected.
60 of the 1,676 comments written by hand and 20 of the 466 a script wrote on the shapes; the 8 wrong were all by hand, corrected with the 23 comments that said the same, and one more the checker found outside the sample
Port checkclaude-opus-5-5[1m]Checked a page’s port or widget against the game; how many comments it corrected was not recorded.
the title and demo, the sixteen tunes, the ten sounds and 17 places of the four stages held to Apple2TS; the guards' brain held to the listing's code on the kit's 6502 in 673,440 cases

likely wrong the sample’s range corrected right, or likely right not yet measured

Contributors

Other places to love this game

What the game does, and where we found it

Read this before annotating code. What the game is documented to do, with verification status against the binary. Statuses: open (documented, not found yet), traced (in the code, could not be exercised; say what was tried), confirmed (in the code, consistent with the emulator), live (observed directly), differs (the code does something else). "Absent" is not a status.

Sources:

Features

FeatureStatusWhere
Title, prologue, Akuma's chamber and a self-running demo after bootlivestage 0; reference/title.png, prologue.png, akuma-chamber.png
Any key or the joystick button starts the gamelive (SPACE)the title's key test near $B7DE; other keys and the button not tried
The castle picture before the clifflivetracks 4-6, reference/castle.png
The hero climbs onto the cliff while the opening tune playslivestage 1, the tune at $0D00; reference/cliff-climb.png
Keys pressed during a tune are ignored (the tune's loop reads them)live$0D10
K selects keyboard controllive$770F-$771D sets $C4 to 1
J selects joystick controllive$76FD-$770D clears $C4, and pressing J cleared it. The manual's OCR reads "I"; the printed page says J
Joystick: up to stand, release for stance, buttons punch and kick, up and down aim, left and right move, up-right to run, button 1 to bowtraced$6E00-$6E68: held up keeps the hero standing, up with a new press of button 1 bows ($6E57), letting go takes the stance; the stick is read at $6D09 and the buttons at $6D6A. The kit's emulator client has no joystick, so it was not driven
From stance: Q / A / Z punch high, middle, lowconfirmed$6EB9-$6ED8; each shows the punch poses $14-$16 on the hero ($20), attack types 3, 4, 5 ($6B)
From stance: kick high, middle, lowdiffersthe manual prints W / S / Z; the code reads W / S / X ($6EE0-$6EFF), and Z is the low punch. X kicks live (attack type 2)
From stance: RIGHT advances, LEFT retreatslivethe hero's position, $62, steps up and down
From stance: SPACE stands uplive$6E78-$6E88; $6F reads $FF standing, 0 in stance
From standing: RIGHT runs forwardlivereference/cliff-killed-running.png
From standing: LEFT stopsliveRIGHT sets $29, which stays set while standing; LEFT clears it ($6E69), and the run wound down to standing still (legs pose 7) within 60 frames
From standing: SPACE takes a fighting stancelive
From standing: B bowslive$6F04 asks for the bow ($C2), carried out only when standing still ($66FE); the poses run 7, $0B, $0C, $0D and back. A guard standing at column $27 or less bows back ($6B00), reference/cliff-bow.png
ESC freezes the game until a key is pressedlive$76AB → $778E; nothing moved for 130 frames after ESC, and play went on after a key
CONTROL-R returns to the demolive$7722-$772F loads stage 0 through $0206 unless $D2 is negative; pressed on the cliff, the title stage came back ($D0 = 0) with its prologue
CONTROL-S cycles music off, then sound off, then both onlive$76B2-$76CB; from both on, three presses gave music off ($4F = 0), then the sound off too ($86 = 0), then both on
CONTROL-X, -Y flip the joystick's axes; CONTROL-E swaps them; CONTROL-B swaps the buttons; CONTROL-N resets all fourconfirmed$76CD-$76FB toggle $C3 (B), $C0 (E), $C2 (Y), $C1 (X); $7732-$773E clears all four. Pressed in turn, each set its flag and CONTROL-N cleared them; their effect on a joystick was not seen
Orange arrows bottom left: the hero's hits left; blue arrows bottom right: the opponent'slive$B6 the hero's, $B7 the opponent's
One arrow lost per hit; the last one lost killsconfirmed$0BC1-$0BD1 takes one of the hero's ($B6) and clears $5D, his alive flag, when the last goes; $0BD2 does the same for the opponent ($B7, $5E). The blows are applied at $7207
Arrows come back while the fighter is not hitconfirmed$0C06-$0C0C raises $B6 one at a time up to $B0; seen live while running
Standing or running, one well-aimed blow killslive$712A: a blow on the hero standing, running or bowing kills him, while an opponent caught so only reels. A guard in the stance kicks a standing hero within 8 columns ($6B00), so running at him is fatal. reference/cliff-killed-running.png; a script standing in stage 3 died the same way
Every guard has his own headgear and fighting style; they get tougher further inconfirmedeach guard wears the next headgear ($3E): 0-5 on the cliff, 1-5 in the palace, 3-6 in the dungeon. Each headgear sets the guard's chances, out of 256, of a kick, a punch and a step forward ($D7-$D9; cliff $BB75, palace $BC45, dungeon $B499): the brain ($6B00) picks a move by the distance from the stage's tables, then the move goes ahead only if a random byte is below its chance. Each guard also has more arrows than the last ("Beyond the documentation")
The hawk, sent by Akuma, deflected by well-timed punches or kickslivestages 2 and 3, reference/palace-hawk.png, palace-hawk-struck.png, dungeon-hawk.png. It comes from the right edge at one of three heights, two columns a frame ($B653 palace, $A8F9 dungeon). Three to five columns from the hero, a kick or a full-stretch punch at its height strikes it and it flies off; closer, it pecks him, each peck counted as a punch on him ($40 = 2) ($B589, $A806). In the palace each hawk comes sooner than the last
The falling portcullislivestage 2, reference/palace-portcullis-fallen.png; how to pass it under "Beyond the documentation"
Falling off the open cliffsideliveon the first screen a hero who steps back past the edge sets $A2 ($BA91); the next frame starts the fall ($B8BD), four pictures ($AC3F), and at $A1 = $30 he is dead. Retreating in the stance from the start of the cliff, reference/cliff-fall.png
Cutscenes: Akuma ordering attacks, Mariko waitinglivereference/palace-akuma-and-hawk.png, mariko-cell.png
Fighting Akumalivestage 4, reference/akuma-duel.png, akuma-fight-mariko-watching.png. His chances of a kick, a punch and a step are all $FF ($B700), and he moves and strikes on every frame ($B895, $B8C7), where the dungeon's guards do so on alternate pages
Approaching Mariko in a fighting stance: she kicks the hero deadlivestage 4, reference/mariko-kicks-hero.png. $BB05: she holds out an arm (pose $20, the picture at $1F00) while he comes standing, and takes pose $24 while he is in the stance; reaching column $13 when her arm is not out, he is kicked ($9A = $FE, pose $21), a killing blow ($B91D)
Approaching her standing: she is rescued, and the closing textlivereference/ending-embrace.png, ending-text.png. With her arm out, at column $16 the embrace begins ($BB44): twenty steps of her poses ($BB72), then the eight lines of closing text ($A321)
"The end" after the hero dieslivereference/the-end.png
Side B: the whole game upside downopenwork/karateka-side-b.woz kept, not analysed

Beyond the documentation

Found in the code, not in the manual.

Open questions

Each part of the game has its own symbol map and listing: The engine, symbols.json and listing.json; Title, story and demo, symbols.json and listing.json; The cliff and the gates, symbols.json and listing.json; The palace, symbols.json and listing.json; The lower palace, symbols.json and listing.json; Akuma's chamber and the ending, symbols.json and listing.json. Write-ups, facts and symbol maps are CC BY-SA 4.0. The game itself is not hosted here.