; World Class Track Meet (U) application-specific RAM aliases - Pass 3 ; Generated from every direct zero-page operand in reachable code: ; ref counts are reads/writes, `where` lists the referencing addresses. ; Names below are behavioral names derived from observed ROM behavior. ; ; Semantic aliases (single, unambiguous role): ; $0C SlotState - per-object/task state slot; tested for zero (=inactive) ; $18 PpuCtrlMirror - PPUCTRL mirror written by NMI before $2000 ; $19 PpuMaskMirror - PPUMASK mirror written by NMI before $2001 ; $1D TaskCount - main-loop: number of active task slots (cmp #$05) ; $1E TaskSlotOffset- main-loop: per-slot base offset, advances by $10 ; $1A TaskFrameTimer- task frame wait: counts down to zero ; $1B TaskFrameCounter - task frame wait: increments each frame ; $27 ScrollX - horizontal scroll, written to PPUSCROLL by NMI ; $28 ScrollY - vertical scroll, written to PPUSCROLL by NMI ; $2E VblankFlag - set to #$80 during init, polled across game logic ; $2F OlympicsFrameCounter - Olympics scheduler frame counter (inc Zp2F) ; $80 OlympicsEventIndex - Olympics scheduler current event index (inc Zp80) ; $8C GameMode - current game mode, compared against #$02 in GameModeTask ; ; Neutral ZpXX entries - role genuinely undetermined after tracing. Each byte ; is reused across subsystems and/or indexed into an attribute array, so no ; single behavioral name is defensible. Kept as ZpXX per the "do not speculate" ; convention; each carries a recorded reason. SlotState = $0C ; 45 refs; reads=9 writes=36; used at $803C, 8040, 8152, 8180, +38 more PpuCtrlMirror = $18 ; 18 refs; reads=10 writes=8; used at $96D4, D33B, D33F, E61C, +14 more PpuMaskMirror = $19 ; 11 refs; reads=6 writes=5; used at $A079, A07D, A0F1, A0F5, +7 more TaskCount = $1D ; 5 refs; reads=3 writes=2; used at $F755, F75F, F761, F76B TaskSlotOffset = $1E ; 3 refs; reads=1 writes=2; used at $F751, F757, F75C TaskFrameTimer = $1A ; 4 refs; reads=2 writes=2; used at $F7EC, F7F2, F8AB TaskFrameCounter = $1B ; 2 refs; reads=1 writes=1; used at $F7EA ScrollX = $27 ; 4 refs; reads=1 writes=3; used at $D361, E620, F828, F8CF ScrollY = $28 ; 4 refs; reads=1 writes=3; used at $D363, E622, F82D, F8D4 VblankFlag = $2E ; 19 refs; reads=14 writes=5; used at $8160, 81DE, 824F, 8485, +15 more OlympicsFrameCounter = $2F ; 11 refs; reads=5 writes=6; used at $E0D7, E0EF, E119, E17F, +3 more OlympicsEventIndex = $80 ; 15 refs; reads=11 writes=4; used at $E0D5, E0F6, E16D, E1C4, +10 more GameMode = $8C ; 75 refs; reads=69 writes=6; used at $806C, 807D, 80B9, 80F3, +71 more Zp00 = $00 ; 50 refs; reads=27 writes=23; used at $C202, C21F, C224, C23C, +43 more ; REASON: reused as both the ClearRam indirect pointer ((Zp00),y) and a plain temp across game logic; no single role Zp01 = $01 ; 19 refs; reads=7 writes=12; used at $C20B, C21B, F70F, F71E, +12 more ; REASON: reused as ClearRam pointer high byte and as an indexed attribute (Zp01,x) Zp02 = $02 ; 25 refs; reads=12 writes=13; used at $C103, C105, C219, C222, +19 more ; REASON: reused across ClearRam, object math and controller shift code; no single role Zp03 = $03 ; 30 refs; reads=13 writes=17; used at $C1A2, C1B8, C1E5, C1EB, +24 more ; REASON: reused as an X/Y temp and indexed attribute; role not unique Zp04 = $04 ; 38 refs; reads=15 writes=23; used at $805F, 80CB, 811D, 814E, +34 more ; REASON: indexed object attribute array byte (Zp04,x); individual field role not determined Zp05 = $05 ; 31 refs; reads=19 writes=12; used at $88E8, 88F4, 8924, 8B14, +26 more ; REASON: indexed object/sound attribute byte (Zp05,x) and indirect pointer base; role not unique Zp06 = $06 ; 44 refs; reads=28 writes=16; used at $8012, 8016, 80D1, 843A, +40 more ; REASON: indexed object attribute byte (Zp06,x); aliases Zp51 storage when slot=$4B; role not unique Zp07 = $07 ; 26 refs; reads=7 writes=19; used at $8106, 841D, 885B, 889B, +22 more ; REASON: indexed object attribute byte (Zp07,x); role not determined Zp08 = $08 ; 129 refs; reads=62 writes=67; used at $8045, 8091, 81CC, 8216, +115 more ; REASON: both indexed object attribute (Zp08,x) and plain drawing temp (ObjectDraw); no single role Zp09 = $09 ; 63 refs; reads=33 writes=30; used at $80D3, 84D4, 84F8, 8681, +53 more ; REASON: indexed object attribute byte (Zp09,x) and plain temp; role not unique Zp0A = $0A ; 47 refs; reads=20 writes=27; used at $8436, 8965, 8B4D, 91A7, +40 more ; REASON: indexed object/sound attribute byte (Zp0A,x); role not determined Zp0B = $0B ; 30 refs; reads=8 writes=22; used at $8433, 8969, 8A0A, 8B51, +25 more ; REASON: indexed object attribute byte (Zp0B,x); role not determined Zp0D = $0D ; 43 refs; reads=11 writes=32; used at $8142, 8200, 822E, 8284, +39 more ; REASON: indexed object attribute byte (Zp0D,x); role not determined Zp0E = $0E ; 53 refs; reads=42 writes=11; used at $80CD, 813B, 81B0, 81F9, +45 more ; REASON: indexed object attribute byte (Zp0E,x); role not determined Zp0F = $0F ; 34 refs; reads=21 writes=13; used at $8110, 825C, 825E, 8375, +28 more ; REASON: indexed object attribute byte (Zp0F,x); role not determined Zp10 = $10 ; 126 refs; reads=64 writes=62; used at $83EF, 83FF, 9544, 956C, +114 more ; REASON: reused as plain temp across game logic and NMI; no single role Zp11 = $11 ; 78 refs; reads=22 writes=56; used at $9947, 9955, A59E, A5A7, +73 more ; REASON: reused across object drawing and sound code; role not unique Zp12 = $12 ; 46 refs; reads=18 writes=28; used at $A5A2, A7F7, A831, D575, +41 more ; REASON: reused across subsystems; role not determined Zp13 = $13 ; 30 refs; reads=7 writes=23; used at $A5A9, A810, A836, D579, +24 more ; REASON: reused across subsystems; role not determined Zp14 = $14 ; 50 refs; reads=20 writes=30; used at $A5B3, A5B8, A5BA, D57D, +43 more ; REASON: reused across subsystems; role not determined Zp15 = $15 ; 31 refs; reads=10 writes=21; used at $A5AD, A5BC, A5C0, D581, +24 more ; REASON: reused across subsystems; role not determined Zp16 = $16 ; 33 refs; reads=13 writes=20; used at $D586, D5B9, D5DF, D612, +27 more ; REASON: reused across subsystems; role not determined Zp17 = $17 ; 54 refs; reads=19 writes=35; used at $9550, 955A, 9561, 9563, +46 more ; REASON: reused across subsystems; role not determined Zp1F = $1F ; 11 refs; reads=6 writes=5; used at $F783, F7A0, F7A4, F7B0, +6 more ; REASON: multi-role: TaskDispatch indirect-jump pointer, TaskSlotStart slot index, DelayFrames frame count Zp20 = $20 ; 1 refs; reads=0 writes=1; used at $F788 ; REASON: single write only (TaskDispatch hi byte of indirect vector); role not determined Zp23 = $23 ; 4 refs; reads=1 writes=3; used at $D61C, D67E, F939, F93F ; REASON: few writes across NMI palette and Olympics code; role not determined Zp25 = $25 ; 4 refs; reads=1 writes=3; used at $F8E8, F8EF, F9AA, F9B0 ; REASON: few writes, FrameDelay parameter; role not determined Zp26 = $26 ; 2 refs; reads=1 writes=1; used at $D379, F87B ; REASON: single read/write pair; role not determined Zp29 = $29 ; 18 refs; reads=1 writes=17; used at $99B4, 9A15, 9A3E, 9A78, +14 more ; REASON: mostly-written sound/Olympics sequencing byte; role not determined Zp2B = $2B ; 5 refs; reads=2 writes=3; used at $EFA2, EFAA, EFC8, F8F5 ; REASON: sound/NMI palette sequencing; role not determined Zp2C = $2C ; 13 refs; reads=1 writes=12; used at $A173, A1E7, D372, D421, +9 more ; REASON: few reads, many writes across subsystems; role not determined Zp2D = $2D ; 1 refs; reads=0 writes=1; used at $F847 ; REASON: single write only; role not determined Zp32 = $32 ; 14 refs; reads=8 writes=6; used at $CF54, CF68, CFA3, CFA5, +9 more ; REASON: object/sound table indexing; role not determined Zp33 = $33 ; 6 refs; reads=4 writes=2; used at $CF5A, CF6A, CFBE, CFDC, +2 more ; REASON: few references; role not determined Zp34 = $34 ; 6 refs; reads=4 writes=2; used at $CF60, CF7D, CFC0, CFE2, +2 more ; REASON: few references; role not determined Zp35 = $35 ; 7 refs; reads=4 writes=3; used at $CF66, CF7F, CFFB, D005, +3 more ; REASON: few references; role not determined Zp37 = $37 ; 18 refs; reads=14 writes=4; used at $8166, 81E4, 825A, 849B, +14 more ; REASON: mostly-read sprite/object field; role not determined Zp38 = $38 ; 5 refs; reads=4 writes=1; used at $8564, 8677, CF4B, CF56, +1 more ; REASON: mostly-read field; role not determined Zp39 = $39 ; 13 refs; reads=2 writes=11; used at $A939, A978, A981, A9C0, +9 more ; REASON: reused across GameModeTask drawing code; role not determined Zp3A = $3A ; 11 refs; reads=0 writes=11; used at $A93D, A97C, A985, A9C4, +7 more ; REASON: write-only across GameModeTask; role not determined Zp3B = $3B ; 3 refs; reads=1 writes=2; used at $F7AC, F7B4, F7D7 ; REASON: TaskSlotStart slot-state byte; role not determined beyond that Zp3C = $3C ; 1 refs; reads=0 writes=1; used at $F7BC ; REASON: single write only; role not determined Zp3D = $3D ; 2 refs; reads=0 writes=2; used at $F7B6, F7BF ; REASON: two writes only; role not determined Zp45 = $45 ; 1 refs; reads=1 writes=0; used at $D507 ; REASON: single read as indirect pointer ((Zp45),y); target not determined Zp4F = $4F ; 5 refs; reads=3 writes=2; used at $9379, 942D, A448, A961, +1 more ; REASON: reused across object/sound code; role not determined Zp51 = $51 ; 11 refs; reads=7 writes=4; used at $8059, 8509, 851F, 97EE, +7 more ; REASON: aliases Zp06,x storage when slot=$4B; role not unique Zp57 = $57 ; 1 refs; reads=0 writes=1; used at $93FE ; REASON: single write only; role not determined Zp59 = $59 ; 1 refs; reads=1 writes=0; used at $9434 ; REASON: single read only; role not determined Zp5F = $5F ; 4 refs; reads=2 writes=2; used at $827A, 8325, A453, A9A9 ; REASON: few references across subsystems; role not determined Zp61 = $61 ; 10 refs; reads=7 writes=3; used at $852B, 8539, 927E, 97F4, +6 more ; REASON: aliases object-table storage; role not unique Zp67 = $67 ; 1 refs; reads=0 writes=1; used at $82F6 ; REASON: single write only; role not determined Zp69 = $69 ; 1 refs; reads=1 writes=0; used at $8327 ; REASON: single read only; role not determined Zp6F = $6F ; 6 refs; reads=4 writes=2; used at $A8CE, A8D2, AD0C, AD10 ; REASON: GameModeTask sound/event sequencing; role not determined Zp71 = $71 ; 11 refs; reads=9 writes=2; used at $AE3D, AE3F, AE47, AE8F, +6 more ; REASON: mostly-read Olympics field; role not determined Zp72 = $72 ; 9 refs; reads=7 writes=2; used at $AD31, AE4A, AE4F, AE58, +4 more ; REASON: shifted (rol) Olympics bit field; role not determined Zp74 = $74 ; 3 refs; reads=1 writes=2; used at $A9F8, AA4E, AA5B ; REASON: few references; role not determined Zp75 = $75 ; 3 refs; reads=1 writes=2; used at $AACD, AB25, AB32 ; REASON: few references; role not determined Zp76 = $76 ; 13 refs; reads=11 writes=2; used at $A31A, A384, A8E8, A918, +8 more ; REASON: mostly-read counter (dec Zp76; ldy Zp76); role not determined Zp77 = $77 ; 13 refs; reads=11 writes=2; used at $A342, A3C2, A8EC, A92F, +8 more ; REASON: mostly-read counter (dec Zp77; ldy Zp77); role not determined Zp79 = $79 ; 5 refs; reads=3 writes=2; used at $A900, A911, A944, A952 ; REASON: decremented counter across GameModeTask; role not determined Zp7A = $7A ; 10 refs; reads=6 writes=4; used at $A902, A928, A98C, A99A, +4 more ; REASON: decremented counter across GameModeTask; role not determined Zp7D = $7D ; 3 refs; reads=1 writes=2; used at $E43C, E459, E66D ; REASON: few references in Olympics code; role not determined Zp7E = $7E ; 4 refs; reads=1 writes=3; used at $E130, E1F0, E4C7, EF55 ; REASON: few references across subsystems; role not determined Zp81 = $81 ; 17 refs; reads=6 writes=11; used at $E132, E18E, E1CA, E1CC, +10 more ; REASON: Olympics event parameter block; role not determined Zp82 = $82 ; 18 refs; reads=10 writes=8; used at $E0F8, E110, E181, E190, +13 more ; REASON: Olympics event parameter block; role not determined Zp83 = $83 ; 11 refs; reads=10 writes=1; used at $9995, 99FC, 9A5F, 9AA5, +7 more ; REASON: mostly-read (sbc Zp83 borrow) 16-bit math byte; role not determined Zp84 = $84 ; 5 refs; reads=3 writes=2; used at $E134, E2EA, E321, E323 ; REASON: few references in Olympics code; role not determined Zp85 = $85 ; 9 refs; reads=2 writes=7; used at $E0EA, E136, E253, E256, +4 more ; REASON: Olympics event parameter; role not determined Zp86 = $86 ; 11 refs; reads=4 writes=7; used at $E0EC, E138, E2D1, E37D, +5 more ; REASON: Olympics event parameter; role not determined Zp87 = $87 ; 18 refs; reads=11 writes=7; used at $E11F, E4E9, E4EE, E52C, +13 more ; REASON: Olympics event parameter block; role not determined Zp88 = $88 ; 5 refs; reads=3 writes=2; used at $98DB, 9910, E2B8, E2BA ; REASON: few references; role not determined Zp89 = $89 ; 12 refs; reads=8 writes=4; used at $E4D6, E554, E56F, E575, +7 more ; REASON: Olympics sound/event sequencing; role not determined Zp8A = $8A ; 5 refs; reads=2 writes=3; used at $E4BA, E53A, E53E, E54F, +1 more ; REASON: few references; role not determined Zp8B = $8B ; 11 refs; reads=2 writes=9; used at $A081, A094, A0F9, A133, +7 more ; REASON: NMI/flag byte (EventTaskInit writes Zp8B); role not determined Zp8D = $8D ; 1 refs; reads=0 writes=1; used at $9A20 ; REASON: single write only; role not determined Zp8F = $8F ; 11 refs; reads=5 writes=6; used at $C3CE, C3F5, C3F7, C3F9, +2 more ; REASON: sound driver counter (inc Zp8F x5); role not determined Zp92 = $92 ; 42 refs; reads=24 writes=18; used at $BE7A, BE80, BEB5, BEB9, +38 more ; REASON: sound channel state byte (Zp92,x) cleared by ClearObjectSlot; field role not determined Zp9A = $9A ; 8 refs; reads=4 writes=4; used at $BE96, BF70, BF74, BF7B, +3 more ; REASON: sound channel state byte (Zp9A,x); role not determined ZpA2 = $A2 ; 9 refs; reads=6 writes=3; used at $BE98, BF77, C08C, C092, +5 more ; REASON: sound channel state byte (ZpA2,x); role not determined ZpAA = $AA ; 13 refs; reads=7 writes=6; used at $BE9C, C09A, C0B6, C0BC, +9 more ; REASON: sound channel state byte (ZpAA,x); role not determined ZpB2 = $B2 ; 5 refs; reads=2 writes=3; used at $BE9A, BF7D, BF81, C2CF ; REASON: sound channel state byte (ZpB2,x); role not determined ZpBA = $BA ; 5 refs; reads=2 writes=3; used at $C1DE, C274, C320, C325, +1 more ; REASON: few references; role not determined ZpC2 = $C2 ; 9 refs; reads=6 writes=3; used at $C1E7, C1EF, C27C, C282, +5 more ; REASON: sound channel state byte (ZpC2,x); role not determined ZpCA = $CA ; 10 refs; reads=4 writes=6; used at $BE85, BF8B, C0C6, C0EE, +6 more ; REASON: sound driver state byte (ZpCA,x); role not determined ZpD2 = $D2 ; 10 refs; reads=4 writes=6; used at $BE8C, BF8F, C0CA, C0F3, +5 more ; REASON: sound driver state byte (ZpD2,x); role not determined ZpDA = $DA ; 3 refs; reads=1 writes=2; used at $BE87, C0C8, C129 ; REASON: sound driver state byte (ZpDA,x); role not determined ZpE2 = $E2 ; 3 refs; reads=1 writes=2; used at $BE8E, C0CC, C12D ; REASON: sound driver state byte (ZpE2,x); role not determined ZpEA = $EA ; 11 refs; reads=5 writes=6; used at $C070, C2A4, C33A, C340, +6 more ; REASON: sound channel state byte (ZpEA,x); role not determined ZpF2 = $F2 ; 3 refs; reads=2 writes=1; used at $BF33, C040, C303 ; REASON: sound channel state byte (ZpF2,x); role not determined