; --------------------------------------------------------------------------- ; Semantic zero-page aliases (Pass 3) ; ; Every alias below was read out of this dump's own code. The neutral ZpXX ; name stays on the same line in locals.inc so the file keeps both readings. ; ; The game's vocabulary: the player is Mario, the moving enemies are the ; turtles, beetles, paratroopa and piranha plants, and the score and timer ; live in the $0500 page. ; ; $20 the frame-pending flag: the NMI sets it and the main loop ; spends it ($C0A7 sets it, $C06A tests it) ; $22 the NMI phase flag: the NMI handler sets it while it is running ; so the per-frame work happens once per frame ($C08C tests it) ; $26 the mode index, tested by the state dispatcher ; $28 the "an actor action is running" flag ($C56C sets it, $C054F ; tests it) ; $2A the frame countdown: it is decremented once a frame and reloaded ; with 10 when it underflows ($CD88); the same slot is the first ; byte of the six-byte actor parameter block ; $2C the actor type, set when an actor is spawned ($D2F3) ; $2D the index of the actor the code is working on ($C540) ; $2F the frame counter: it is incremented once per frame and its low ; bit is the frame parity the animation uses ($C06E, $CA06) ; $30 the "the game is running" flag ($C03D sets it, $C4B8 tests it) ; $33 the script step counter: the actor scripts count down through ; their steps with it ($C5E5, $C660) ; $34 the parameter the next script step is called with ($D6A2) ; $35 the script command byte, compared against $AA and $BB to pick ; the command's meaning ($C764, $CF04) ; $3F the player slot the code is working on ($CA66) ; $45 the actor's Y position, counted down as it falls ($C66F, $C68D) ; $46 the actor's X position ($C711, $D3B4) ; $4A the Y position the actor animation counts towards ($D35E, $E042) ; $A0/$A1 the low and high bytes of the pointer to the actor script block ; ($C5DD, $CB85) ; $A2 the byte offset inside the actor script block ($C677) ; $B4 the four palette bytes copied to the PPU ($C2A5, $C355) ; $B8 the actor's tile index ($C1A9, $C1CE) ; $B9 the horizontal scroll position the code is working against ; ($C424, $C489) ; $BB the number of actors in use ($C260, $C3B3) ; $BF the actor command byte: the code switches on its high and low ; nibbles to decide what the actor does ($C6A7, $C715) ; $C4 the actor's state byte, compared against the byte at $0334 ; ($C133, $C185) ; ; The slots that keep their neutral ZpXX name, and why: ; ; $00-$0F the general-purpose working slots: the code uses them for ; intermediate values, and the same slot serves different ; purposes in different routines, so no single role is provable. ; $10/$11 the Mario sprite state: $10 holds the sprite flags the NMI ; handler tests and $11 a copy of them, but the code also writes ; them from several unrelated places. ; $12/$13 a scratch 16-bit pair used by the tile and the score helpers. ; $16/$17 the "the player is on the ground" pair, written by the physics ; code and read by the collision code; the two are not ; separated by the code. ; $18 a bit mask the game state is tested against. ; $19 a counter with no fixed unit. ; $1A-$1F the remaining per-actor scratch slots; each is read and ; written from more than one routine. ; $21 the "the HUD must be redrawn" flag. ; $23/$25 a counter each, used by the NMI phase dispatch. ; $27 a counter, decremented by the frame code. ; $29 a counter incremented by the round code. ; $31/$32 counters incremented by the actor and the score code. ; $36-$38 counters in the actor script code. ; $39 a flag tested by the enemy spawn code. ; $3A a counter in the enemy spawn code. ; $3B the actor state the stage script leaves behind. ; $3C/$3D scratch slots in the NMI phase dispatch. ; $3E a counter. ; $40 a counter incremented by the actor update. ; $41 a counter incremented by the score code. ; $42 a flag the actor code tests. ; $43/$44 the actor's fall counters. ; $48 the sprite slot the actor is drawn into. ; $49 a counter. ; $4B a counter in the enemy movement code. ; $4C an actor field the stage script writes. ; $4D a counter. ; $4E a timer. ; $4F a counter. ; $50-$58 counters in the enemy movement and spawn code. ; $59 a counter. ; $5A a counter. ; $5B-$5F the actor's timers; each is read in more than one context. ; $60-$6F never referenced. ; $70-$75 the stage counters the timer code counts down. ; $76-$7F never referenced. ; $80 the actor's animation state. ; $81/$82 never referenced. ; $83 a flag the actor code tests. ; $84 a flag the actor code tests. ; $85 a counter. ; $86 a counter. ; $87-$8A the actor's remaining animation fields. ; $8B-$8F the actor's remaining animation fields. ; $90-$99 the actor state block: the code reads and writes the bytes ; through different indices, so the individual fields are not ; separated. ; $9A-$9C never referenced. ; $9D a counter. ; $9E a counter. ; $9F the index of the actor currently being drawn. ; $A3-$A9 the actor's remaining script fields. ; $AA-$AF counters in the actor movement code. ; $B0-$B3 counters in the actor list code. ; $B5 a flag the actor code clears. ; $B6 the actor's speed value. ; $B7 the actor's flag byte. ; $BA a counter. ; $BB see the alias above. ; $BC/$BD the 16-bit pointer the actor code walks the sprite table with. ; $BE a counter. ; $BF see the alias above. ; $C0-$C3 the actor's state flags: each bit is tested separately, so the ; code does not separate the individual flags. ; $C4 see the alias above. ; $C5 a counter. ; $C6-$CB counters and flags in the actor collision code. ; $CC never referenced. ; $CD a value the actor code compares against a range. ; $CE/$CF never referenced. ; $D0-$D3 the sound engine's per-note state. ; $D4 the sound engine's per-note counter. ; $D5-$D7 the sound engine's per-note state. ; $D8-$DE the sound engine's per-note counters. ; $DF never referenced. ; $E0 the sound engine's envelope counter. ; $E1-$E3 never referenced. ; $E4 the sound engine's envelope value. ; $E5 the sound engine's note table index. ; $E6 the note index the current note was read for. ; $E7 never referenced. ; $E8 never referenced. ; $E9/$EA the two values the APU sweep registers are loaded with. ; $EB/$EC the sound engine's envelope state. ; $ED/$EE the sound engine's envelope state. ; $EF the sound engine's envelope state. ; $F0/$F1 the sound engine's volume table indices. ; $F2 the sound engine's channel state. ; $F3 the sound engine's main state byte, read and written by ; thirty different sites; the layout is not separated by the code. ; $F4/$F5 the sound engine's note table base and offset. ; $F6/$F7 the sound engine's note table pointer. ; $F8-$FF the eight note parameters the sound engine reads from the ; table at $FCC8. ; --------------------------------------------------------------------------- FramePendingFlag = $20 ; semantic alias for Zp20 (the frame-pending flag) NmiPhaseFlag = $22 ; semantic alias for Zp22 (the NMI phase flag) ModeIndex = $26 ; semantic alias for Zp26 (the mode index) ActorActionFlag = $28 ; semantic alias for Zp28 (the actor-action-running flag) FrameCountdown = $2A ; semantic alias for Zp2A (the frame countdown) ActorType = $2C ; semantic alias for Zp2C (the actor type) ActorIndex = $2D ; semantic alias for Zp2D (the actor being worked on) FrameCounter = $2F ; semantic alias for Zp2F (the frame counter) GameRunningFlag = $30 ; semantic alias for Zp30 (the game-running flag) ScriptStepCounter = $33 ; semantic alias for Zp33 (the script step counter) ScriptParam = $34 ; semantic alias for Zp34 (the script step parameter) ScriptCommand = $35 ; semantic alias for Zp35 (the script command byte) PlayerSlot = $3F ; semantic alias for Zp3F (the player slot) ActorYPosition = $45 ; semantic alias for Zp45 (the actor's Y position) ActorXPosition = $46 ; semantic alias for Zp46 (the actor's X position) ActorYTarget = $4A ; semantic alias for Zp4A (the Y position the animation counts towards) ScriptPtrLo = $A0 ; semantic alias for ZpA0 (the low byte of the actor-script pointer) ScriptPtrHi = $A1 ; semantic alias for ZpA1 (the high byte of the actor-script pointer) ScriptStep = $A2 ; semantic alias for ZpA2 (the byte offset in the actor script block) ActorPalette = $B4 ; semantic alias for ZpB4 (the four palette bytes) ActorTileIndex = $B8 ; semantic alias for ZpB8 (the actor's tile index) ScrollX = $B9 ; semantic alias for ZpB9 (the horizontal scroll position) ActorCount = $BB ; semantic alias for ZpBB (the number of actors in use) ActorCommand = $BF ; semantic alias for ZpBF (the actor command byte) ActorState = $C4 ; semantic alias for ZpC4 (the actor's state byte)