Claim set · data/claims/asteroids.yaml

Asteroids (Computer Archeology's annotated disassembly)

Game: Asteroids.

Asteroids paces its main loop by its 250 Hz NMI: every fourth NMI increments a counter, and the main loop waits on that counter before each pass, so the loop runs at most 62.5 times a second (computed: 250 / 4). The atlas calls one pass a frame. The listing reads Atari's revision 2 program ROMs. asteroids/frame

About: Asteroids Inertia

Value: 62.5 main-loop passes per second, at most (computed)

CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L7-L23>>> binary 6800:roms/035145.02 + roms/035144.02 + roms/035143.02 … ; 6800~035145.02+035144.02+035143.02 (Rev 2)Computer Archeology: Asteroids · content/Arcade/Asteroids/Hardware.md#L9The MMI interrupt is clocked at 250Hz.Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L2556-L2563INC $5E ; {ram.$5E} LDA $5E ; {ram.$5E} AND #$03 BNE $7B83 ; {} INC $5B ; {ram.??timeout??}Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L35-L36LSR $5B ; {ram.??timeout??} Code check. This value is incremented by one each BCC $680C ; {}Checked by claude, 2026-10-22 — read the NMI at 7B65-7B81 ($5E counts NMIs, $5B steps when its low two bits are 0) and the main loop's wait at 680C-6813: LSR $5B passes only when a count has come in, so two pending counts still give one pass

The loop also waits for the vector generator to halt (6815), so a pass can take longer than four NMIs; 62.5 is a ceiling.

Cited by: Asteroids

While the ship is in play, a held rotate button turns it 3 of its 256 directions per frame. On every other frame (when the fast timer's low bit is clear), a held thrust button adds twice the cosine of the direction to the horizontal velocity and twice the sine to the vertical, read from a 65-entry sine table for a quarter turn, 0 to 127, which the lookup folds for the other quarters. Velocities carry 8 fraction bits, so one thrust step adds at most 254/256 of a position unit per frame to an axis's speed (computed). asteroids/thrust

About: Asteroids Inertia

Value
{
 "turn": 3,
 "thrustMax": 254
}
CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1054-L1099LDA $2407 ; {hard.SWROTLEFT} Rotate Left Switch … LDA #$03 … LDA #$FD CLC ADC $61 ; {ram.direction} Current Ship Direction STA $61 ; {ram.direction} LDA $5C ; {ram.fastTimer} Fast Timer LSR A BCS $7085 ; {} LDA $2405 ; {hard.SWTHRUST} Thrust Switch …Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1992-L2004ADC #$40 ; A holds current ship direction BPL $77DF ; {} A holds current ship direction … CMP #$41 … EOR #$7F … LDA $57B9,X ; Vector ROMComputer Archeology: Asteroids · content/Arcade/Asteroids/VectorROM.md#L1158-L1178# Sine lookup table … ; Used for vertical thrust (offset by 64 to get cosine for horizontal thrust)Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1030-L1053LDY $59 ; {ram.hyperSpaceFlag} Hyperspace Flag … RTSChecked by claude, 2026-10-22 — read 703F-70E0: rotation (±3 to $61) runs whenever the routine gets past the explosion and spawn-timer tests, and the thrust branch returns on odd fast-timer values; the direction's sine is sign-extended into Y, doubled, and added as a 16-bit value to ship_thrust_dH:horzVelShip (cosine through 77D2's +$40) and ship_thrust_dV:vertVelShip (sine through 77D5). The table at 57B9 (vector ROM 17B9) has 65 entries from 0 to $7F; 77DF mirrors past $40 and 77D5 negates the lower half

The ship's position moves by the velocity's whole part each frame (asteroids/wrap), so a position unit per frame is the velocity's unit.

Cited by: Asteroids, Inertia

On the same every-other frames, when thrust isn't held, each axis of the ship's velocity loses 2/256 of its whole-unit part (and 1/256 more when moving right or up), about 1/128 of itself per step, until it reaches zero. With the thrust off, the ship's speed so halves in about 88 steps, 176 frames, about 2.8 seconds at 62.5 frames a second (computed). asteroids/drag

About: Asteroids Inertia

Value
{
 "fractionPerStep": 0.0078125,
 "halfLifeFrames": 176
}
CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1100-L1134LDA #$00 STA $3C03 ; {hard.SNDTHRUST} Ship Thrust Sound LDA $023E ; {ram.horzVelShip} ORA $64 ; {ram.ship_thrust_dH} BEQ $7105 ; {} LDA $023E ; {ram.horzVelShip} ASL A LDX #$FF CLC EOR #$FF BMI $70FA ; {} INX …Computer Archeology: Asteroids · content/Arcade/Asteroids/RAMUse.md#L1050223 - 0245 Horizontal Velocity 0-255, (255-192) = Left, 1-63 = RightChecked by claude, 2026-10-22 — traced 70E1-7124 for both signs: with whole part v ≥ 0 the 16-bit sum adds $FF:~(2v), that is −(2v + 1)/256; with v < 0 it adds 0:~(2v) plus the set carry, +(−2v)/256. The vertical half (7105-7124) is the same with SEC and INX swapped. The half-life is ln 2 / −ln(1 − 1/128) ≈ 88.4 steps, two frames each

The decay is proportional to speed, so the ship coasts a long way from top speed and stops quickly from a crawl.

Cited by: Asteroids, Inertia

Thrust holds each axis of the ship's velocity to its own limit: at most 63 255/256 position units per frame right or up, and 63 255/256 left or down (computed from $3F.FF and $C0.01). Because the axes are clamped apart, a diagonal can reach about 1.41 times the top speed along one axis (computed). asteroids/top-speed

About: Asteroids Inertia

Value: 63.996 position units per frame, per axis (computed)

CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1135-L1145BMI $7130 ; {} CMP #$40 BCC $7138 ; {} LDX #$FF LDA #$3F RTS CMP #$C0 BCS $7138 ; {} LDX #$01 LDA #$C0Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1076-L1084ADC $023E ; {ram.horzVelShip} JSR $7125 ; {} STA $023E ; {ram.horzVelShip} STX $64 ; {ram.ship_thrust_dH}Checked by claude, 2026-10-22 — read 7125-7138, which both thrust halves call with the new whole part in A and the fraction in X: positive whole parts of $40 or more become $3F with fraction $FF, negative ones below $C0 become $C0 with fraction $01

Drag (asteroids/drag) runs only when thrust is off, so the limit applies while thrusting.

Cited by: Asteroids, Inertia

Each frame, Asteroids adds the velocity of every object that isn't exploding (rocks, ship, saucer, and shots) to its position, on a playfield of 32 by 24 units of 256 (8,192 by 6,144 position units, computed). An object that crosses the left or right edge comes back on the other side, except the saucer, which is removed instead; one that crosses the top or bottom comes back at the other edge, the saucer included. asteroids/wrap

About: Asteroids Screen wrap

Value
[
 8192,
 6144
]
CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L67JSR $6F57 ; {}Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L915-L921LDX #$22 LDA $0200,X ; {ram.statusAsteroids} BNE $6F62 ; {} DEX BPL $6F59 ; {} RTS BPL $6FC7 ; {}Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L968-L1016LDA $0223,X ; {ram.horzVelAsteroids} … ADC $0269,X ; {ram.hposhAsteroids} CMP #$20 BCC $6FEC ; {} AND #$1F CPX #$1C BNE $6FEC ; {} JSR $702D ; {} … ADC $028C,X ; {ram.vposhAsteroids} CMP #$18 …Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1015-L1021LDA #$00 STA $021C ; {ram.statusSaucer} Saucer FlagComputer Archeology: Asteroids · content/Arcade/Asteroids/RAMUse.md#L99-L101| 0200:021A | statusAsteroids | Asteroids 27-1 | | 021B | statusShip | | 021C | statusSaucer | Saucer, 0 = No Saucer, 1 = Small Saucer, 2 = Large Saucer |Computer Archeology: Asteroids · content/Arcade/Asteroids/RAMUse.md#L129-L1410269 - 028B Horizontal Position High (0-31), 0 = Left, 31 = Right … 028C - 02AE Vertical Position High (0-23), 0 = Bottom, 23 = TopChecked by claude, 2026-10-22 — read the object loop 6F57-6F62 (35 slots from $22 down, positive status moves at 6FC7, negative explodes at 6F64), the move at 6FC7-7016 (sign-extended velocity added to the low then high byte; horizontal high byte masked to 0-31 unless slot $1C, the saucer, which goes to 702D; vertical 24 becomes 0 and a borrow past 0 becomes 23), and 702D, which clears the saucer flag and velocity

A velocity is below 64 units per frame, so a high byte changes by at most 1 per frame and the tests above catch every crossing.

Cited by: Asteroids, Screen wrap

Hyperspace works while the ship is in play (not exploding and not waiting to return): it removes the ship, zeroes the whole parts of its velocity (the fractions in $64 and $65 stay), and sets a 48-frame return timer. The new horizontal position is a random whole unit from 3 to 28. A further random number r from 0 to 31 decides the jump: it fails when r is 24 or more and 2 × (r − 24) + 4 is at least the current rock count, so with 4 or fewer rocks 8 of the 32 values fail, and with 19 or more none do (computed). The vertical position is r below 24 and 2 × (r − 24) + 4 (4 to 18) from 24, held to 3 to 20. When the timer runs out the ship returns, or, if the jump failed, explodes and costs a ship. asteroids/hyperspace

About: Asteroids Hyperspace

Value
{
 "returnFrames": 48,
 "failValuesMax": 8,
 "values": 32
}
CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L812-L857LDA $021B ; {ram.statusShip} Player Flag BMI $6ED7 ; {} Branch If Currently Exploding LDA $02FA ; {ram.shipSpawnTimer} BNE $6ED7 ; {} LDA $2003 ; {hard.SWHYPER} Hyperspace Switch BPL $6ED7 ; {} Branch If NOT Pressed LDA #$00 STA $021B ; {ram.statusShip} STA $023E ; {ram.horzVelShip} STA $0261 ; {ram.vertVelShip} LDA #$30 STA $02FA ; {ram.shipSpawnTimer} …Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1022-L1052LDA $02FA ; {ram.shipSpawnTimer} BEQ $7086 ; {} DEC $02FA ; {ram.shipSpawnTimer} BNE $7085 ; {} LDY $59 ; {ram.hyperSpaceFlag} Hyperspace Flag BMI $706F ; {} Gonna Die From Hyperspace, Branch BNE $7068 ; {} Successful Hyperspace, Branch … LDA #$01 ; Flag Ship OK … LDA #$A0 ; Switch To Explosion Timer … …Computer Archeology: Asteroids · content/Arcade/Asteroids/RAMUse.md#L177| 02F6 | curAsteroidCount | Current Amount Of Asteroids |Checked by claude, 2026-10-22 — read 6E74-6ED7 and 703F-7083 (both called from the main loop every frame while play is on). After five more calls of 77B5 the X loop leaves X = 0, INX makes it 1, and the second test runs on 2 × (r AND 7) + 4 with the carry clear after ASL; that value (or r itself on the first branch) is clamped into vposhShip. The failure count: r = 24 + k fails when 2k + 4 ≥ the count, so all k from 0 to 7 with a count of 4 or less, none with 19 or more

The chance per jump equals the share of failing values only if 77B5's low five bits are evenly spread (asteroids/rng).

Cited by: Asteroids, Hyperspace

Each player's saucer reload value starts at 146 when a game starts and drops by 6 each time a saucer appears, as long as the result stays 32 or more. While it is 128 or more, every saucer is the large one. Below 128, a player with 30,000 points or more always gets the small saucer; under 30,000 a random byte decides, giving the small saucer when the byte is more than half the reload value: about 3 in 4 at the first chance (122) and about 15 in 16 at the floor of 32 (computed, for evenly spread bytes). asteroids/saucer-size

About: Asteroids Rank

Value
{
 "reloadStart": 146,
 "step": 6,
 "floor": 32,
 "alwaysLargeFrom": 128,
 "alwaysSmallScore": 30000
}
CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L136-L140LDA #$92 STA $02F8 ; {ram.saucerTimeReload} … STA $02F7 ; {ram.saucerTimer} Countdown Timer For When Saucer AppearsComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L483-L488LDA $02F8 ; {ram.saucerTimeReload} SEC SBC #$06 ; Shorten Time Between Saucer Appearence CMP #$20 ; At Lowest Value? BCC $6BDD ; {} Yes, Branch STA $02F8 ; {ram.saucerTimeReload} Make The UpdateComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L512-L527LDX #$02 ; Start With Large Saucer LDA $02F8 ; {ram.saucerTimeReload} Start Checking Score When @ #$7F And Below BMI $6C30 ; {} Not There Yet, Branch Around Score Check … CMP #$30 ; 30,000 Points Or More? BCS $6C2F ; {} Yes, Branch JSR $77B5 ; {} STA $08 ; {ram.$08} LDA $02F8 ; {ram.saucerTimeReload} LSR A CMP $08 ; {ram.$08} BCS $6C30 ; {} Going To Be A large Saucer, Branch …Checked by claude, 2026-10-22 — read the start-of-game setup at 68F8-6903 (both players' $x2F8 set to $92), the appearance path 6BB7-6C33 (the decrement at 6BD0 runs once per appearance, after the timer and rock-count tests), and the size choice. 146 − 6k reaches 122 after four appearances, so the fourth saucer is the first that can be small; small when the byte exceeds 61 (194 of 256) there, and 16 at the floor (239 of 256)

The score test reads the thousands byte in BCD, so $30 is 30,000. The reload value also sets the time between saucers (6B73, 6F99), which this claim doesn't measure.

Cited by: Asteroids, Rank

Between shots, a live saucer counts down 10 runs of its routine, which runs every fourth frame (40 frames, computed), and the count pauses while the player's ship is waiting to return. The large saucer fires in a random direction, any of 256. The small saucer aims: it takes the ship's position minus its own on each axis, subtracts half the saucer's velocity, turns the pair into a direction with an arctangent routine, and adds a random error of −16 to +15 directions while the player has under 35,000 points, and −7 to +8 from 35,000. asteroids/saucer-aim

About: Asteroids Rank

Value
{
 "shotFrames": 40,
 "errorBelow35000": [
  -16,
  15
 ],
 "errorFrom35000": [
  -7,
  8
 ]
}
CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L457-L460LDA $5C ; {ram.fastTimer} AND #$03 BEQ $6B9A ; {} RTSComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L536-L604LDA $1C ; {ram.numPlayers} Number Of Players In Current Game BEQ $6C4E ; {} None, Branch LDA $02FA ; {ram.shipSpawnTimer} BNE $6C53 ; {} DEC $02F7 ; {ram.saucerTimer} Time for saucer to shoot? BEQ $6C54 ; {} Yes, branch? RTS LDA #$0A ; Time Between Saucer Shots STA $02F7 ; {ram.saucerTimer} Reset for next shot LDA $021C ; {ram.statusSaucer} Saucer Flag LSR A ; Check Saucer Size BEQ $6C65 ; {} Branch If Small One …Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1867-L1898TYA BPL $76FC ; {} … EOR #$80 EOR #$FF … LDA #$20 RTS JSR $776C ; {} LDA $772F,X ; {}Checked by claude, 2026-10-22 — read 6B93-6B9A and 6C34-6CCC; the mask bytes at 6CCF-6CD0 are $8F and $87 and the fill bytes at 6CD1-6CD2 are $70 and $78, so the error is −16..15 (bit 7 kept, sign-filled) or −8..7, and the carry from CPY #$35 is still set at ADC $62 at 35,000 or more, making it −7..8. 76F0-772E folds the signs and the larger axis into one octant, returns $20 for equal axes, and reads an angle table: an arctangent

Each difference keeps its top bits (two shifts into the high byte), units of 64. Whether a shot leaves also depends on a free saucer-shot slot (6CF2), not read here.

Cited by: Asteroids, Rank

A rock that is hit, by the ship, the saucer, or either's shots, halves its size code (large 4, medium 2, small 1): a large rock leaves two medium rocks, a medium rock two small ones, and a small rock none. Each piece takes its parent's position and velocity, adds a random −16 to +15 to each axis, and holds each axis to a speed of 6 to 31. The first piece's horizontal position and the second's vertical one are changed by XOR with twice the low five bits of that piece's velocity. The hit rock becomes an explosion. A piece needs a free slot of the 27, so a full field gives fewer. During a game, a hit by the ship or its shots scores 20 for a large rock, 50 for a medium one, and 100 for a small one. asteroids/split

About: Asteroids Enemy splitting

Value
{
 "pieces": 2,
 "slots": 27,
 "points": [
  20,
  50,
  100
 ]
}
CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L421-L435JSR $75EC ; {} … LDA #$A0 STA $0200,Y ; {ram.statusAsteroids}Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1740-L1788LDA $0200,Y ; {ram.statusAsteroids} AND #$07 LSR A TAX BEQ $7605 ; {} ORA $0E ; {ram.$0E} STA $0200,Y ; {ram.statusAsteroids} LDA $1C ; {ram.numPlayers} Number Of Players In Current Game BEQ $761D ; {} None, Branch LDA $0D ; {ram.$0D} BEQ $7614 ; {} CMP #$04 …Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1236-L1270JSR $77B5 ; {} AND #$8F BPL $720C ; {} ORA #$F0 CLC ADC $0223,Y ; {ram.horzVelAsteroids} JSR $7233 ; {} … CMP #$E1 … CMP #$FB … …Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1531-L1536LDX #$1A LDA $0200,X ; {ram.statusAsteroids} BEQ $7464 ; {} DEX BPL $745C ; {}Checked by claude, 2026-10-22 — read the collision handler 6B0F-6B65 (any collider against a rock slot below $1B reaches 6B47), the split at 75EC-7658, the copy at 6A9D-6AD2 (size bits from the parent, a random shape, position and velocity), the velocity jitter and clamp at 7203-724E, and the free-slot search at 745A. The score bytes at 7659-765B are $10, $05, $02 (BCD tens), indexed by the new size code: 0 after a small rock, 1 after a medium, 2 after a large. $0D is the collider: 0 the ship, 1 the saucer, 2-3 its shots, 4-7 the ship's shots

The parent's slot is freed when its explosion ends (6F82), which also lowers the rock count.

Cited by: Asteroids, Enemy splitting

A new wave starts once no rocks are left and a 127-frame wave timer, set when the last rock goes, has run out. Each wave has two more large rocks than the one before, up to 11; the count starts at 2 when a game starts, so the waves run 4, 6, 8, 10, 11, 11 (computed). asteroids/waves

About: Asteroids Difficulty ramp

Value
[
 4,
 6,
 8,
 10,
 11
]
CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L29-L31JSR $6EFA ; {} Reset Sound, Zero Out Sound Timers JSR $6ED8 ; {} Number Of Starting Ships To $56 And Zero JSR $7168 ; {} Start of main game loop???Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L54-L55JSR $6885 ; {} BCS $6803 ; {}Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L150-L152ASL A ; Zero A, And Set Carry FlagComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L858-L859LDA #$02 STA $02F5 ; {ram.asteroidsPerWave}Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L76-L81LDA $02FB ; {ram.astdWaveTimer} BEQ $687E ; {} DEC $02FB ; {ram.astdWaveTimer} ORA $02F6 ; {ram.curAsteroidCount} BNE $680C ; {} BEQ $6809 ; {}Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L939-L942DEC $02F6 ; {ram.curAsteroidCount} BNE $6F8C ; {} LDY #$7F STY $02FB ; {ram.astdWaveTimer}Computer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1182-L1197LDA $02F5 ; {ram.asteroidsPerWave} CLC ADC #$02 CMP #$0B BCC $7193 ; {} Branch if smaller??? LDA #$0B STA $02F6 ; {ram.curAsteroidCount} STA $02F5 ; {ram.asteroidsPerWave} … AND #$18 ORA #$04 STA $0200,X ; {ram.statusAsteroids}Checked by claude, 2026-10-22 — read the main loop's end (6876-6883: decrement the wave timer, then a new wave through 6809 when both it and the rock count are 0), the timer set at 6F82-6F89, and the wave builder 716A-71D3. A start (6885 returning with the carry ASL set at 6920) goes back to 6803, which runs 6ED8 (asteroidsPerWave = 2) and then 7168 while the wave timer just set to $7F makes it clear the field; 127 frames later the first wave is built with 2 + 2 = 4

The two-player start also swaps in the second player's RAM page and runs the same setup there (68C4-68D3); the atlas hasn't traced which wave count player 2 starts from.

Cited by: Asteroids, Difficulty ramp

Asteroids gives a ship each time a player's score passes a multiple of 10,000: the score is two BCD bytes, and when an addition carries into the thousands byte and leaves its low digit 0, the player gains a ship. asteroids/extra-ship

About: Asteroids Extra life

Value: 10000 points per extra ship

CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1430-L1444SED ; Set Decimal Mode ADC $52,X ; {ram.ply1ScoreTens} Add To Current Players Score, Tens STA $52,X ; {ram.ply1ScoreTens} BCC $73B0 ; {} Increase In Thousands?, No, Branch LDA $53,X ; {ram.ply1ScoreThous} Current Players Score, Thousands ADC #$00 ; Add In The Carry STA $53,X ; {ram.ply1ScoreThous} AND #$0F ; Will Be 0 If Another 10,000 Points Reached BNE $73B0 ; {} Branch If Not Enough Points For Bonus Ship … INC $57,X ; {ram.ply1CurShips} Award Bonus ShipChecked by claude, 2026-10-22 — read the score adder at 7397-73B1; no DIP switch is read on this path

The thousands byte holds two BCD digits, so the score rolls over at 100,000 (computed), and the rollover's 00 also gives a ship.

Cited by: Extra life

Asteroids keeps a table of ten high scores, two BCD bytes each, with three initials apiece (computed from the 20-byte and 30-byte tables), and tells a player who makes it "YOUR SCORE IS ONE OF THE TEN BEST". asteroids/high-score

About: Asteroids High score

Value: 10 scores in the table

CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/RAMUse.md#L38-L42| 1D:30 | highScores | High Score Table (Scores) 2 Byte Format In Decimal. Byte 1 Tens, Byte 2 Thousands (In Decimal) | … | 34:51 | highScoresInitials | High Score Table (Initials) 3 Byte FormatComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L721-L723LDY #$02 ; Offset For "YOUR SCORE IS ONE OF THE TEN BEST" … LDY #$03 ; Offset For "PLEASE ENTER YOUR INITIALS"Checked by claude, 2026-10-22 — read the RAM map ($1D-$30 is 20 bytes, $34-$51 is 30) and the entry messages at 6DB9-6DBE

Cited by: High score

Asteroids' random routine (77B5) shifts a 16-bit register left one bit and sets the new low bit to the old bit 14 exclusive-or the old bit 0, turning an all-zero register into 1; it returns the low byte. asteroids/rng

About: Asteroids Random number generator

CodeComputer Archeology: Asteroids · content/Arcade/Asteroids/Code.md#L1977-L1991ASL $5F ; {ram.rndValue} ROL $60 ; {ram.$60} BPL $77BD ; {} INC $5F ; {ram.rndValue} LDA $5F ; {ram.rndValue} BIT $77D1 ; {} BEQ $77C8 ; {} EOR #$01 STA $5F ; {ram.rndValue} ORA $60 ; {ram.$60} BNE $77CE ; {} INC $5F ; {ram.rndValue} …Checked by claude, 2026-10-22 — traced 77B5-77D0: after ASL/ROL the N flag is the new bit 15 (old bit 14), which INC copies into bit 0; the byte at 77D1 is $02, so BIT tests the new bit 1 (old bit 0) and EOR #$01 folds it in

A shift register with that feedback; the atlas hasn't worked out its period.