.include "symbols.inc" .include "locals.inc" .segment "PRG" ;------------------------------------------------------------ ; Initial PRG data ; CPU $C000-$C195 ; PRG $0000-$0195 ; ; Pointer tables, title/credit text, resource descriptors, and ; startup lookup data. Boundaries below are conservative Pass-1 ; classifications; uncertain structures remain explicit bytes. ;------------------------------------------------------------ ; Embedded developer credit: "T.SAWANO". DeveloperCreditText: .byte $54, $2E, $53, $41, $57, $41, $4E, $4F ; CPU:$C000 PRG:0000 0B ; Pointers into the upper-PRG resource/script area. ResourceScriptPointerTable: .word $E75D, $E79A, $E7E1, $E826 ; CPU:$C008 PRG:0008 0B .word $E869, $E8A6, $E8DF, $E916 ; CPU:$C010 PRG:0010 0B .word $E949, $E988, $E9CD, $EA10 ; CPU:$C018 PRG:0018 0B .word $EA4F, $EA96, $EAE7, $EB32 ; CPU:$C020 PRG:0020 0B .word $EB7B, $EBB0, $EBE7, $EC1E ; CPU:$C028 PRG:0028 0B .word $EC56, $ECF3, $ED1E, $ED5E ; CPU:$C030 PRG:0030 0B .word $EDAF, $EE27, $EE90, $EF91 ; CPU:$C038 PRG:0038 0B .word $F117, $F11D ; CPU:$C040 PRG:0040 0B ; Encoded title/message tile values; not ASCII text at runtime. TitleOrMessageTileString: .byte $28, $32, $33, $31, $34, $32, $30, $30, $29, $32, $29, $29, $31, $34, $34, $32 ; CPU:$C044 PRG:0044 0B .byte $22, $24, $23, $24 ; CPU:$C054 PRG:0054 0B ; Variable-length resource descriptor records. ResourceDescriptorData_C058: .byte $66, $00, $01, $20, $00, $07, $29, $F2, $06, $00, $28, $EF, $06, $00, $2A, $AF ; CPU:$C058 PRG:0058 0B .byte $06, $00, $20, $54, $03, $00, $29, $B6, $02, $00, $29, $49, $03, $01, $2B, $09 ; CPU:$C068 PRG:0068 0B .byte $03, $01, $20, $4D, $02, $00, $00, $01, $04, $0C, $07, $22, $10, $03, $00, $00 ; CPU:$C078 PRG:0078 0B .byte $01, $04, $0C, $07, $29, $E8, $03, $00, $00, $01, $0C, $00, $07, $22, $CE, $06 ; CPU:$C088 PRG:0088 0B .byte $00, $23, $06, $06, $00, $23, $13, $06, $00, $0F, $E4, $00, $18, $0F, $E5, $00 ; CPU:$C098 PRG:0098 0B .byte $28, $0F, $E4, $01, $D0, $0F, $E5, $01, $E0, $FF, $FF, $FF ; CPU:$C0A8 PRG:00A8 0B ; Small direction, coordinate, and signed-offset lookup tables. DirectionAndCoordinateTables_C0B4: .byte $FF, $00, $00, $00, $01, $A0, $80, $40, $00, $60, $80, $C0, $00, $64, $3C, $2C ; CPU:$C0B4 PRG:00B4 0B .byte $1C, $44, $3C, $34, $2C, $80, $50, $30, $10, $40, $30, $20, $10, $02, $02, $04 ; CPU:$C0C4 PRG:00C4 0B .byte $04, $01, $01, $01, $01, $01, $02, $02, $02, $00, $80, $B8, $D8, $F4, $14, $34 ; CPU:$C0D4 PRG:00D4 0B .byte $54, $40, $02, $10, $00 ; CPU:$C0E4 PRG:00E4 0B ; Startup object/template records and compact lookup data. StartupObjectTemplateData_C0E9: .byte $04, $01, $00, $00, $00, $00, $00, $04, $00, $00, $00, $22, $00, $05, $05, $0B ; CPU:$C0E9 PRG:00E9 0B .byte $0B, $10, $06, $0C, $20, $04, $01, $00, $00, $00, $00, $00, $01, $EE, $00, $00 ; CPU:$C0F9 PRG:00F9 0B .byte $11, $10, $20, $08, $11, $00, $05, $01, $00, $00, $00, $00, $00, $02, $A0, $00 ; CPU:$C109 PRG:0109 0B .byte $03, $00, $68, $00, $00, $00, $00, $00, $20, $04, $11, $80, $04, $01, $00, $00 ; CPU:$C119 PRG:0119 0B .byte $00, $00, $00, $04, $7C, $00, $03, $22, $28, $02, $02, $0E, $0E, $00, $00, $01 ; CPU:$C129 PRG:0129 0B .byte $06, $F6, $03, $08, $E6, $00, $02, $24, $E0, $20, $08, $11, $00, $06, $80, $00 ; CPU:$C139 PRG:0139 0B .byte $00, $00, $00, $00, $02, $D0, $00, $00, $21, $A8, $04, $00, $0C, $08, $00, $10 ; CPU:$C149 PRG:0149 0B .byte $04, $0D, $C0, $03, $01, $00, $00, $00, $00, $00, $02, $C8, $00, $03, $12, $C0 ; CPU:$C159 PRG:0159 0B .byte $00, $40, $02, $0C, $00, $04, $00, $30, $00, $2C, $00, $00, $06, $70, $00, $00 ; CPU:$C169 PRG:0169 0B .byte $23, $68, $20, $02, $0A, $80, $04, $00, $4A, $00, $30, $00, $00, $04, $7C, $00 ; CPU:$C179 PRG:0179 0B .byte $03, $00, $01, $07, $E7, $00, $13, $2E, $24, $2F, $14, $0F, $30 ; CPU:$C189 PRG:0189 0B ;------------------------------------------------------------ ; ResetEntry / IRQHandler ; ; Global: ; RESET and IRQ/BRK vector target. Initializes CPU, RAM, PPU, ; APU, startup resources, and enables NMI before entering the ; permanent main-program loop at $C1EB. ; ; Parameters: ; None. ; ; Returns: ; Never returns. ;------------------------------------------------------------ ResetEntry: CLD ; CPU:$C196 PRG:0196 D8 LDA #$00 ; CPU:$C197 PRG:0197 A9 00 STA PPUCTRL ; CPU:$C199 PRG:0199 8D 00 20 SEI ; CPU:$C19C PRG:019C 78 LDX #$FF ; CPU:$C19D PRG:019D A2 FF TXS ; CPU:$C19F PRG:019F 9A LDX #$02 ; CPU:$C1A0 PRG:01A0 A2 02 InterruptPathLoop_C1A2: LDA PPUSTATUS ; CPU:$C1A2 PRG:01A2 AD 02 20 BPL InterruptPathLoop_C1A2 ; CPU:$C1A5 PRG:01A5 10 FB DEX ; CPU:$C1A7 PRG:01A7 CA BNE InterruptPathLoop_C1A2 ; CPU:$C1A8 PRG:01A8 D0 F8 LDY #$24 ; CPU:$C1AA PRG:01AA A0 24 LDA StartupPreserveFlag0 ; CPU:$C1AC PRG:01AC A5 48 BNE InterruptPathOnNonZero_C1B4 ; CPU:$C1AE PRG:01AE D0 04 LDA StartupPreserveFlag1 ; CPU:$C1B0 PRG:01B0 A5 49 BEQ InterruptPathOnZero_C1B6 ; CPU:$C1B2 PRG:01B2 F0 02 InterruptPathOnNonZero_C1B4: LDY #$18 ; CPU:$C1B4 PRG:01B4 A0 18 InterruptPathOnZero_C1B6: LDA #$00 ; CPU:$C1B6 PRG:01B6 A9 00 InterruptPathLoop_C1B8: STA $0000,Y ; CPU:$C1B8 PRG:01B8 99 00 00 INY ; CPU:$C1BB PRG:01BB C8 BNE InterruptPathLoop_C1B8 ; CPU:$C1BC PRG:01BC D0 FA LDY #$07 ; CPU:$C1BE PRG:01BE A0 07 LDX #$06 ; CPU:$C1C0 PRG:01C0 A2 06 JSR RunGameTaskRoutine_CBA6 ; CPU:$C1C2 PRG:01C2 20 A6 CB LDA #$55 ; CPU:$C1C5 PRG:01C5 A9 55 STA FrameShiftRegister0 ; CPU:$C1C7 PRG:01C7 85 10 LDA #$12 ; CPU:$C1C9 PRG:01C9 A9 12 STA PPUCTRL ; CPU:$C1CB PRG:01CB 8D 00 20 STA ShadowPPUCTRL ; CPU:$C1CE PRG:01CE 85 40 LDA #$06 ; CPU:$C1D0 PRG:01D0 A9 06 STA PPUMASK ; CPU:$C1D2 PRG:01D2 8D 01 20 STA ShadowPPUMASK ; CPU:$C1D5 PRG:01D5 85 41 LDA #$0F ; CPU:$C1D7 PRG:01D7 A9 0F STA APUSTATUS ; CPU:$C1D9 PRG:01D9 8D 15 40 STA $0100 ; CPU:$C1DC PRG:01DC 8D 00 01 JSR RunGameTaskRoutine_C3E4 ; CPU:$C1DF PRG:01DF 20 E4 C3 LDA ShadowPPUCTRL ; CPU:$C1E2 PRG:01E2 A5 40 ORA #$80 ; CPU:$C1E4 PRG:01E4 09 80 STA ShadowPPUCTRL ; CPU:$C1E6 PRG:01E6 85 40 STA PPUCTRL ; CPU:$C1E8 PRG:01E8 8D 00 20 InterruptPathDispatch_C1EB: JSR EnginePath_F58D ; CPU:$C1EB PRG:01EB 20 8D F5 JMP InterruptPathDispatch_C1EB ; CPU:$C1EE PRG:01EE 4C EB C1 ;------------------------------------------------------------ ; NMIHandler ; ; Global: ; Saves A and $00, performs OAM DMA and frame services, ; restores PPU state, then returns with RTI. ; ; Parameters: ; None. ; ; Returns: ; RTI. ;------------------------------------------------------------ NMIHandler: PHA ; CPU:$C1F1 PRG:01F1 48 LDA WorkPtr0Lo ; CPU:$C1F2 PRG:01F2 A5 00 PHA ; CPU:$C1F4 PRG:01F4 48 LDA ShadowPPUCTRL ; CPU:$C1F5 PRG:01F5 A5 40 AND #$7F ; CPU:$C1F7 PRG:01F7 29 7F STA ShadowPPUCTRL ; CPU:$C1F9 PRG:01F9 85 40 STA PPUCTRL ; CPU:$C1FB PRG:01FB 8D 00 20 LDA ShadowPPUMASK ; CPU:$C1FE PRG:01FE A5 41 AND #$E7 ; CPU:$C200 PRG:0200 29 E7 STA ShadowPPUMASK ; CPU:$C202 PRG:0202 85 41 STA PPUMASK ; CPU:$C204 PRG:0204 8D 01 20 JSR UpdateGameStateRoutine_C996 ; CPU:$C207 PRG:0207 20 96 C9 LDA #$00 ; CPU:$C20A PRG:020A A9 00 STA OAMADDR ; CPU:$C20C PRG:020C 8D 03 20 LDA #$02 ; CPU:$C20F PRG:020F A9 02 STA OAMDMA ; CPU:$C211 PRG:0211 8D 14 40 JSR ResourceAndLevelData ; CPU:$C214 PRG:0214 20 0B F2 JSR ObjectPath_E113 ; CPU:$C217 PRG:0217 20 13 E1 LDA ShadowPPUCTRL ; CPU:$C21A PRG:021A A5 40 STA PPUCTRL ; CPU:$C21C PRG:021C 8D 00 20 LDA ShadowPPUMASK ; CPU:$C21F PRG:021F A5 41 ORA #$18 ; CPU:$C221 PRG:0221 09 18 STA ShadowPPUMASK ; CPU:$C223 PRG:0223 85 41 STA PPUMASK ; CPU:$C225 PRG:0225 8D 01 20 JSR AudioDriverCode ; CPU:$C228 PRG:0228 20 C1 F7 JSR EnginePath_F5AE ; CPU:$C22B PRG:022B 20 AE F5 JSR ObjectPath_DDC1 ; CPU:$C22E PRG:022E 20 C1 DD JSR RunGameTaskRoutine_C368 ; CPU:$C231 PRG:0231 20 68 C3 NMIReadPPUStatus_C234: LDA PPUSTATUS ; CPU:$C234 PRG:0234 AD 02 20 LDA ShadowPPUCTRL ; CPU:$C237 PRG:0237 A5 40 ORA #$80 ; CPU:$C239 PRG:0239 09 80 STA ShadowPPUCTRL ; CPU:$C23B PRG:023B 85 40 STA PPUCTRL ; CPU:$C23D PRG:023D 8D 00 20 PLA ; CPU:$C240 PRG:0240 68 STA WorkPtr0Lo ; CPU:$C241 PRG:0241 85 00 PLA ; CPU:$C243 PRG:0243 68 RTI ; CPU:$C244 PRG:0244 40 ;------------------------------------------------------------ ; CoreGameCode ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ CoreGameCode: JSR RunGameTaskRoutine_CBB9 ; CPU:$C245 PRG:0245 20 B9 CB JSR ObjectPath_D34E ; CPU:$C248 PRG:0248 20 4E D3 BCS ProcessCurrentObjectContinue_C264 ; CPU:$C24B PRG:024B B0 17 JSR UpdateObjectRecord_D27D ; CPU:$C24D PRG:024D 20 7D D2 BCS ProcessCurrentObjectContinue_C264 ; CPU:$C250 PRG:0250 B0 12 LDY #$00 ; CPU:$C252 PRG:0252 A0 00 LDA (CurrentObjectPtrLo),Y ; CPU:$C254 PRG:0254 B1 08 BNE ProcessCurrentObjectContinue_C264 ; CPU:$C256 PRG:0256 D0 0C JSR ProcessCurrentObjectRoutine_CBE3 ; CPU:$C258 PRG:0258 20 E3 CB JSR ReadObjectRecord_DADA ; CPU:$C25B PRG:025B 20 DA DA JSR ReadObjectRecord_CD7B ; CPU:$C25E PRG:025E 20 7B CD JSR ReadObjectRecord_D11E ; CPU:$C261 PRG:0261 20 1E D1 ProcessCurrentObjectContinue_C264: JSR ObjectPath_D06D ; CPU:$C264 PRG:0264 20 6D D0 JSR RunGameTaskRoutine_CBC6 ; CPU:$C267 PRG:0267 20 C6 CB JSR ObjectPath_D34E ; CPU:$C26A PRG:026A 20 4E D3 BCS CorePathContinue_C286 ; CPU:$C26D PRG:026D B0 17 JSR UpdateObjectRecord_D27D ; CPU:$C26F PRG:026F 20 7D D2 BCS CorePathContinue_C286 ; CPU:$C272 PRG:0272 B0 12 LDY #$00 ; CPU:$C274 PRG:0274 A0 00 LDA (CurrentObjectPtrLo),Y ; CPU:$C276 PRG:0276 B1 08 BNE CorePathContinue_C286 ; CPU:$C278 PRG:0278 D0 0C JSR ProcessCurrentObjectRoutine_CBE3 ; CPU:$C27A PRG:027A 20 E3 CB JSR ReadObjectRecord_DADA ; CPU:$C27D PRG:027D 20 DA DA JSR ReadObjectRecord_CD7B ; CPU:$C280 PRG:0280 20 7B CD JSR ReadObjectRecord_D11E ; CPU:$C283 PRG:0283 20 1E D1 CorePathContinue_C286: JSR ObjectPath_D08F ; CPU:$C286 PRG:0286 20 8F D0 JSR ObjectPath_DD10 ; CPU:$C289 PRG:0289 20 10 DD JSR ObjectPath_DC5A ; CPU:$C28C PRG:028C 20 5A DC JSR UpdateObjectBuffer_DB52 ; CPU:$C28F PRG:028F 20 52 DB JSR ObjectPath_D856 ; CPU:$C292 PRG:0292 20 56 D8 JSR ObjectPath_D8BA ; CPU:$C295 PRG:0295 20 BA D8 JSR UpdateObjectBuffer_D64F ; CPU:$C298 PRG:0298 20 4F D6 JSR ObjectPath_D97B ; CPU:$C29B PRG:029B 20 7B D9 JSR UpdateObjectBuffer_D0C8 ; CPU:$C29E PRG:029E 20 C8 D0 JSR ObjectPath_CFA1 ; CPU:$C2A1 PRG:02A1 20 A1 CF JSR ObjectPath_D0B1 ; CPU:$C2A4 PRG:02A4 20 B1 D0 JSR ProcessObjectStateRoutine_E6F3 ; CPU:$C2A7 PRG:02A7 20 F3 E6 JSR ObjectPath_DA91 ; CPU:$C2AA PRG:02AA 20 91 DA JSR UpdateObjectBuffer_DBC7 ; CPU:$C2AD PRG:02AD 20 C7 DB JSR ObjectPath_D0DF ; CPU:$C2B0 PRG:02B0 20 DF D0 JSR ObjectPath_D1D6 ; CPU:$C2B3 PRG:02B3 20 D6 D1 JSR UpdateObjectBuffer_DD8F ; CPU:$C2B6 PRG:02B6 20 8F DD JSR UpdateObjectBuffer_D0F6 ; CPU:$C2B9 PRG:02B9 20 F6 D0 JSR UpdateGameStateRoutine_C47A ; CPU:$C2BC PRG:02BC 20 7A C4 JSR ObjectPath_D209 ; CPU:$C2BF PRG:02BF 20 09 D2 RTS ; CPU:$C2C2 PRG:02C2 60 CorePathLoop_C2C3: JSR RunGameTaskRoutine_C84B ; CPU:$C2C3 PRG:02C3 20 4B C8 LDA #$00 ; CPU:$C2C6 PRG:02C6 A9 00 LDY #$1F ; CPU:$C2C8 PRG:02C8 A0 1F CorePathLoop_C2CA: STA a:$0080,Y ; CPU:$C2CA PRG:02CA 99 80 00 DEY ; CPU:$C2CD PRG:02CD 88 BPL CorePathLoop_C2CA ; CPU:$C2CE PRG:02CE 10 FA STA RoundOrSubstate ; CPU:$C2D0 PRG:02D0 85 88 LDX ContextIndex ; CPU:$C2D2 PRG:02D2 A6 4A InitializePlayerAndGameState: STX PreviousContextIndex ; CPU:$C2D4 PRG:02D4 86 87 INX ; CPU:$C2D6 PRG:02D6 E8 CPX #$05 ; CPU:$C2D7 PRG:02D7 E0 05 BNE UpdateGameStateOnNonZero_C2DD ; CPU:$C2D9 PRG:02D9 D0 02 LDX #$00 ; CPU:$C2DB PRG:02DB A2 00 UpdateGameStateOnNonZero_C2DD: STX $4A ; CPU:$C2DD PRG:02DD 86 4A LDA $87 ; CPU:$C2DF PRG:02DF A5 87 ASL A ; CPU:$C2E1 PRG:02E1 0A ASL A ; CPU:$C2E2 PRG:02E2 0A ORA $88 ; CPU:$C2E3 PRG:02E3 05 88 STA $89 ; CPU:$C2E5 PRG:02E5 85 89 LDA #$01 ; CPU:$C2E7 PRG:02E7 A9 01 STA $4C ; CPU:$C2E9 PRG:02E9 85 4C STA $8D ; CPU:$C2EB PRG:02EB 85 8D STA $80 ; CPU:$C2ED PRG:02ED 85 80 STA $81 ; CPU:$C2EF PRG:02EF 85 81 UpdateGameStateDispatch_C2F1: STA $8A ; CPU:$C2F1 PRG:02F1 85 8A LDA #$02 ; CPU:$C2F3 PRG:02F3 A9 02 STA $8B ; CPU:$C2F5 PRG:02F5 85 8B RTS ; CPU:$C2F7 PRG:02F7 60 CorePathLoop_C2F8: LDA $7D ; CPU:$C2F8 PRG:02F8 A5 7D BEQ CorePathLoop_C2C3 ; CPU:$C2FA PRG:02FA F0 C7 LDA $44 ; CPU:$C2FC PRG:02FC A5 44 AND #$20 ; CPU:$C2FE PRG:02FE 29 20 BEQ UpdatePlayerStateContinue_C310 ; CPU:$C300 PRG:0300 F0 0E LDA $4F ; CPU:$C302 PRG:0302 A5 4F BNE UpdatePlayerStateContinue_C310 ; CPU:$C304 PRG:0304 D0 0A LDA $4B ; CPU:$C306 PRG:0306 A5 4B EOR #$01 ; CPU:$C308 PRG:0308 49 01 STA $4B ; CPU:$C30A PRG:030A 85 4B LDA #$40 ; CPU:$C30C PRG:030C A9 40 STA $7D ; CPU:$C30E PRG:030E 85 7D UpdatePlayerStateContinue_C310: STA $4F ; CPU:$C310 PRG:0310 85 4F LDA #$90 ; CPU:$C312 PRG:0312 A9 90 LDX $4B ; CPU:$C314 PRG:0314 A6 4B STX $4C ; CPU:$C316 PRG:0316 86 4C BEQ CorePathOnZero_C31C ; CPU:$C318 PRG:0318 F0 02 LDA #$A0 ; CPU:$C31A PRG:031A A9 A0 CorePathOnZero_C31C: STA $0200 ; CPU:$C31C PRG:031C 8D 00 02 LDA #$E5 ; CPU:$C31F PRG:031F A9 E5 STA $0201 ; CPU:$C321 PRG:0321 8D 01 02 LDA #$00 ; CPU:$C324 PRG:0324 A9 00 STA $0202 ; CPU:$C326 PRG:0326 8D 02 02 LDA #$40 ; CPU:$C329 PRG:0329 A9 40 STA $0203 ; CPU:$C32B PRG:032B 8D 03 02 LDA $44 ; CPU:$C32E PRG:032E A5 44 AND #$10 ; CPU:$C330 PRG:0330 29 10 BEQ CorePathContinue_C365 ; CPU:$C332 PRG:0332 F0 31 LDA $4E ; CPU:$C334 PRG:0334 A5 4E BNE CorePathContinue_C365 ; CPU:$C336 PRG:0336 D0 2D LDY #$1B ; CPU:$C338 PRG:0338 A0 1B CorePathLoop_C33A: STA a:$0024,Y ; CPU:$C33A PRG:033A 99 24 00 DEY ; CPU:$C33D PRG:033D 88 BPL CorePathLoop_C33A ; CPU:$C33E PRG:033E 10 FA LDY #$1F ; CPU:$C340 PRG:0340 A0 1F UpdatePlayerStateLoop_C342: STA a:$0080,Y ; CPU:$C342 PRG:0342 99 80 00 DEY ; CPU:$C345 PRG:0345 88 BPL UpdatePlayerStateLoop_C342 ; CPU:$C346 PRG:0346 10 FA JSR RunGameTaskRoutine_C84B ; CPU:$C348 PRG:0348 20 4B C8 LDA #$05 ; CPU:$C34B PRG:034B A9 05 STA $80 ; CPU:$C34D PRG:034D 85 80 LDX $4C ; CPU:$C34F PRG:034F A6 4C BNE UpdateGameStateOnNonZero_C359 ; CPU:$C351 PRG:0351 D0 06 LDX #$01 ; CPU:$C353 PRG:0353 A2 01 STX $91 ; CPU:$C355 PRG:0355 86 91 LDA #$00 ; CPU:$C357 PRG:0357 A9 00 UpdateGameStateOnNonZero_C359: STA $81 ; CPU:$C359 PRG:0359 85 81 LDA #$02 ; CPU:$C35B PRG:035B A9 02 STA $8B ; CPU:$C35D PRG:035D 85 8B LDA #$01 ; CPU:$C35F PRG:035F A9 01 STA $8A ; CPU:$C361 PRG:0361 85 8A STA $33 ; CPU:$C363 PRG:0363 85 33 CorePathContinue_C365: STA $4E ; CPU:$C365 PRG:0365 85 4E RTS ; CPU:$C367 PRG:0367 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C368 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C368: LDA $92 ; CPU:$C368 PRG:0368 A5 92 BNE CorePathOnNonZero_C3CD ; CPU:$C36A PRG:036A D0 61 LDA $B0 ; CPU:$C36C PRG:036C A5 B0 BNE UpdateGameStateOnNonZero_C373 ; CPU:$C36E PRG:036E D0 03 JSR ProcessResourceStateRoutine_F577 ; CPU:$C370 PRG:0370 20 77 F5 UpdateGameStateOnNonZero_C373: LDA $8A ; CPU:$C373 PRG:0373 A5 8A BEQ CorePathLoop_C2F8 ; CPU:$C375 PRG:0375 F0 81 LDA $8D ; CPU:$C377 PRG:0377 A5 8D BEQ CorePathOnZero_C38D ; CPU:$C379 PRG:0379 F0 12 LDA $90 ; CPU:$C37B PRG:037B A5 90 CMP #$01 ; CPU:$C37D PRG:037D C9 01 BNE CorePathOnNonZero_C387 ; CPU:$C37F PRG:037F D0 06 LDA $91 ; CPU:$C381 PRG:0381 A5 91 CMP #$01 ; CPU:$C383 PRG:0383 C9 01 BEQ RunGameTaskRoutine_C3E4 ; CPU:$C385 PRG:0385 F0 5D CorePathOnNonZero_C387: LDA $44 ; CPU:$C387 PRG:0387 A5 44 AND #$30 ; CPU:$C389 PRG:0389 29 30 BNE RunGameTaskRoutine_C3E4 ; CPU:$C38B PRG:038B D0 57 CorePathOnZero_C38D: LDA $44 ; CPU:$C38D PRG:038D A5 44 AND #$10 ; CPU:$C38F PRG:038F 29 10 BEQ UpdateGameStateContinue_C3A9 ; CPU:$C391 PRG:0391 F0 16 LDA $4E ; CPU:$C393 PRG:0393 A5 4E BNE UpdateGameStateContinue_C3A9 ; CPU:$C395 PRG:0395 D0 12 LDA #$01 ; CPU:$C397 PRG:0397 A9 01 EOR $B0 ; CPU:$C399 PRG:0399 45 B0 STA $B0 ; CPU:$C39B PRG:039B 85 B0 BNE CorePathOnNonZero_C3A3 ; CPU:$C39D PRG:039D D0 04 LDA #$06 ; CPU:$C39F PRG:039F A9 06 STA $92 ; CPU:$C3A1 PRG:03A1 85 92 CorePathOnNonZero_C3A3: LDA #$20 ; CPU:$C3A3 PRG:03A3 A9 20 STA $FB ; CPU:$C3A5 PRG:03A5 85 FB LDA #$01 ; CPU:$C3A7 PRG:03A7 A9 01 UpdateGameStateContinue_C3A9: STA $4E ; CPU:$C3A9 PRG:03A9 85 4E LDA $92 ; CPU:$C3AB PRG:03AB A5 92 BNE CorePathLoop_C3CC ; CPU:$C3AD PRG:03AD D0 1D LDA $B0 ; CPU:$C3AF PRG:03AF A5 B0 BNE CorePathLoop_C3CC ; CPU:$C3B1 PRG:03B1 D0 19 LDA $8A ; CPU:$C3B3 PRG:03B3 A5 8A CMP #$02 ; CPU:$C3B5 PRG:03B5 C9 02 BEQ CorePathOnZero_C3E0 ; CPU:$C3B7 PRG:03B7 F0 27 JSR CoreGameCode ; CPU:$C3B9 PRG:03B9 20 45 C2 ;------------------------------------------------------------ ; UpdateGameStateRoutine_C3BC ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateGameStateRoutine_C3BC: LDA $8D ; CPU:$C3BC PRG:03BC A5 8D BEQ CorePathLoop_C3CC ; CPU:$C3BE PRG:03BE F0 0C LDA #$00 ; CPU:$C3C0 PRG:03C0 A9 00 STA $FB ; CPU:$C3C2 PRG:03C2 85 FB STA $FC ; CPU:$C3C4 PRG:03C4 85 FC STA $FD ; CPU:$C3C6 PRG:03C6 85 FD STA $FE ; CPU:$C3C8 PRG:03C8 85 FE STA $FF ; CPU:$C3CA PRG:03CA 85 FF CorePathLoop_C3CC: RTS ; CPU:$C3CC PRG:03CC 60 CorePathOnNonZero_C3CD: CMP #$01 ; CPU:$C3CD PRG:03CD C9 01 BEQ CorePathOnZero_C400 ; CPU:$C3CF PRG:03CF F0 2F DEC $93 ; CPU:$C3D1 PRG:03D1 C6 93 BPL CorePathContinue_C3DF ; CPU:$C3D3 PRG:03D3 10 0A LDA #$0A ; CPU:$C3D5 PRG:03D5 A9 0A STA $93 ; CPU:$C3D7 PRG:03D7 85 93 LDA $92 ; CPU:$C3D9 PRG:03D9 A5 92 BEQ CorePathContinue_C3DF ; CPU:$C3DB PRG:03DB F0 02 DEC $92 ; CPU:$C3DD PRG:03DD C6 92 CorePathContinue_C3DF: RTS ; CPU:$C3DF PRG:03DF 60 CorePathOnZero_C3E0: JSR RunGameTaskRoutine_C6BE ; CPU:$C3E0 PRG:03E0 20 BE C6 RTS ; CPU:$C3E3 PRG:03E3 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C3E4 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C3E4: LDX $4D ; CPU:$C3E4 PRG:03E4 A6 4D BNE CorePathOnNonZero_C3EE ; CPU:$C3E6 PRG:03E6 D0 06 LDA #$01 ; CPU:$C3E8 PRG:03E8 A9 01 STA $FB ; CPU:$C3EA PRG:03EA 85 FB LDX #$04 ; CPU:$C3EC PRG:03EC A2 04 CorePathOnNonZero_C3EE: DEX ; CPU:$C3EE PRG:03EE CA STX $4D ; CPU:$C3EF PRG:03EF 86 4D LDA #$40 ; CPU:$C3F1 PRG:03F1 A9 40 STA $7D ; CPU:$C3F3 PRG:03F3 85 7D LDA #$01 ; CPU:$C3F5 PRG:03F5 A9 01 STA $4F ; CPU:$C3F7 PRG:03F7 85 4F STA $4E ; CPU:$C3F9 PRG:03F9 85 4E LDA #$00 ; CPU:$C3FB PRG:03FB A9 00 JMP UpdateGameStateDispatch_C2F1 ; CPU:$C3FD PRG:03FD 4C F1 C2 CorePathOnZero_C400: DEC $92 ; CPU:$C400 PRG:0400 C6 92 ;------------------------------------------------------------ ; UpdateGameStateRoutine_C402 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateGameStateRoutine_C402: LDA $8A ; CPU:$C402 PRG:0402 A5 8A CMP #$01 ; CPU:$C404 PRG:0404 C9 01 BNE CorePathLoop_C3CC ; CPU:$C406 PRG:0406 D0 C4 LDA $78 ; CPU:$C408 PRG:0408 A5 78 BNE CorePathLoop_C3CC ; CPU:$C40A PRG:040A D0 C0 LDX #$10 ; CPU:$C40C PRG:040C A2 10 LDA $8F ; CPU:$C40E PRG:040E A5 8F BNE CorePathContinue_C41C ; CPU:$C410 PRG:0410 D0 0A LDX #$08 ; CPU:$C412 PRG:0412 A2 08 LDA $2E ; CPU:$C414 PRG:0414 A5 2E CMP #$02 ; CPU:$C416 PRG:0416 C9 02 BCC CorePathContinue_C41C ; CPU:$C418 PRG:0418 90 02 LDX #$04 ; CPU:$C41A PRG:041A A2 04 CorePathContinue_C41C: STX $FB ; CPU:$C41C PRG:041C 86 FB JMP UpdateGameStateRoutine_C3BC ; CPU:$C41E PRG:041E 4C BC C3 CorePathLoop_C421: LDA $55 ; CPU:$C421 PRG:0421 A5 55 BNE CorePathOnNonZero_C437 ; CPU:$C423 PRG:0423 D0 12 LDA #$04 ; CPU:$C425 PRG:0425 A9 04 STA $55 ; CPU:$C427 PRG:0427 85 55 LDA #$01 ; CPU:$C429 PRG:0429 A9 01 EOR $A7 ; CPU:$C42B PRG:042B 45 A7 STA $A7 ; CPU:$C42D PRG:042D 85 A7 BEQ CorePathLoop_C432 ; CPU:$C42F PRG:042F F0 01 INY ; CPU:$C431 PRG:0431 C8 CorePathLoop_C432: LDX #$08 ; CPU:$C432 PRG:0432 A2 08 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$C434 PRG:0434 20 AE D1 CorePathOnNonZero_C437: RTS ; CPU:$C437 PRG:0437 60 CorePathLoop_C438: LDX #$01 ; CPU:$C438 PRG:0438 A2 01 UpdatePlayerStateLoop_C43A: LDA $90,X ; CPU:$C43A PRG:043A B5 90 CMP #$02 ; CPU:$C43C PRG:043C C9 02 BCS CorePathOnCarry_C475 ; CPU:$C43E PRG:043E B0 35 DEX ; CPU:$C440 PRG:0440 CA BPL UpdatePlayerStateLoop_C43A ; CPU:$C441 PRG:0441 10 F7 LDX $43 ; CPU:$C443 PRG:0443 A6 43 LDA $40 ; CPU:$C445 PRG:0445 A5 40 AND #$02 ; CPU:$C447 PRG:0447 29 02 BEQ CorePathOnZero_C45A ; CPU:$C449 PRG:0449 F0 0F LDA $40 ; CPU:$C44B PRG:044B A5 40 AND #$FD ; CPU:$C44D PRG:044D 29 FD STA $40 ; CPU:$C44F PRG:044F 85 40 LDY #$14 ; CPU:$C451 PRG:0451 A0 14 LDX #$0C ; CPU:$C453 PRG:0453 A2 0C JSR UpdateObjectBufferRoutine_D1AE ; CPU:$C455 PRG:0455 20 AE D1 LDX #$FF ; CPU:$C458 PRG:0458 A2 FF CorePathOnZero_C45A: INX ; CPU:$C45A PRG:045A E8 INX ; CPU:$C45B PRG:045B E8 INX ; CPU:$C45C PRG:045C E8 CPX #$F2 ; CPU:$C45D PRG:045D E0 F2 BEQ RunGameTaskRoutine_C463 ; CPU:$C45F PRG:045F F0 02 STX $43 ; CPU:$C461 PRG:0461 86 43 ;------------------------------------------------------------ ; RunGameTaskRoutine_C463 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C463: LDY #$1F ; CPU:$C463 PRG:0463 A0 1F LDA #$F4 ; CPU:$C465 PRG:0465 A9 F4 CorePathLoop_C467: STA $02E0,Y ; CPU:$C467 PRG:0467 99 E0 02 DEY ; CPU:$C46A PRG:046A 88 BPL CorePathLoop_C467 ; CPU:$C46B PRG:046B 10 FA RTS ; CPU:$C46D PRG:046D 60 CorePathLoop_C46E: JSR UpdatePlayerStateRoutine_C504 ; CPU:$C46E PRG:046E 20 04 C5 JSR ProcessObjectStateRoutine_DA26 ; CPU:$C471 PRG:0471 20 26 DA RTS ; CPU:$C474 PRG:0474 60 CorePathOnCarry_C475: LDA #$0A ; CPU:$C475 PRG:0475 A9 0A STA $78 ; CPU:$C477 PRG:0477 85 78 RTS ; CPU:$C479 PRG:0479 60 ;------------------------------------------------------------ ; UpdateGameStateRoutine_C47A ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateGameStateRoutine_C47A: JSR ProcessObjectStateRoutine_D1CE ; CPU:$C47A PRG:047A 20 CE D1 LDA $78 ; CPU:$C47D PRG:047D A5 78 BEQ CorePathLoop_C46E ; CPU:$C47F PRG:047F F0 ED CMP #$22 ; CPU:$C481 PRG:0481 C9 22 BCS CorePathLoop_C4B3 ; CPU:$C483 PRG:0483 B0 2E CMP #$0B ; CPU:$C485 PRG:0485 C9 0B BEQ CorePathLoop_C432 ; CPU:$C487 PRG:0487 F0 A9 BCS CorePathLoop_C421 ; CPU:$C489 PRG:0489 B0 96 CMP #$01 ; CPU:$C48B PRG:048B C9 01 BNE CorePathLoop_C438 ; CPU:$C48D PRG:048D D0 A9 DEC $78 ; CPU:$C48F PRG:048F C6 78 LDA #$02 ; CPU:$C491 PRG:0491 A9 02 STA $8A ; CPU:$C493 PRG:0493 85 8A LDA #$00 ; CPU:$C495 PRG:0495 A9 00 STA $76 ; CPU:$C497 PRG:0497 85 76 STA $D0 ; CPU:$C499 PRG:0499 85 D0 STA $D1 ; CPU:$C49B PRG:049B 85 D1 LDA $90 ; CPU:$C49D PRG:049D A5 90 BNE UpdatePlayerStateOnNonZero_C4A3 ; CPU:$C49F PRG:049F D0 02 INC $80 ; CPU:$C4A1 PRG:04A1 E6 80 UpdatePlayerStateOnNonZero_C4A3: LDA $91 ; CPU:$C4A3 PRG:04A3 A5 91 BNE CorePathOnNonZero_C4A9 ; CPU:$C4A5 PRG:04A5 D0 02 INC $81 ; CPU:$C4A7 PRG:04A7 E6 81 CorePathOnNonZero_C4A9: LDA #$87 ; CPU:$C4A9 PRG:04A9 A9 87 LDX #$C0 ; CPU:$C4AB PRG:04AB A2 C0 JSR ProcessResourceStateRoutine_F77D ; CPU:$C4AD PRG:04AD 20 7D F7 JMP ProcessObjectStateDispatch_DD48 ; CPU:$C4B0 PRG:04B0 4C 48 DD CorePathLoop_C4B3: LDA #$21 ; CPU:$C4B3 PRG:04B3 A9 21 LDX $AF ; CPU:$C4B5 PRG:04B5 A6 AF BEQ CorePathOnZero_C4BF ; CPU:$C4B7 PRG:04B7 F0 06 LDA #$FF ; CPU:$C4B9 PRG:04B9 A9 FF STA $55 ; CPU:$C4BB PRG:04BB 85 55 LDA #$17 ; CPU:$C4BD PRG:04BD A9 17 CorePathOnZero_C4BF: STA $78 ; CPU:$C4BF PRG:04BF 85 78 LDA #$F0 ; CPU:$C4C1 PRG:04C1 A9 F0 CorePathLoop_C4C3: TAY ; CPU:$C4C3 PRG:04C3 A8 LDA #$01 ; CPU:$C4C4 PRG:04C4 A9 01 STA $03F0,Y ; CPU:$C4C6 PRG:04C6 99 F0 03 TYA ; CPU:$C4C9 PRG:04C9 98 SEC ; CPU:$C4CA PRG:04CA 38 SBC #$10 ; CPU:$C4CB PRG:04CB E9 10 BNE CorePathLoop_C4C3 ; CPU:$C4CD PRG:04CD D0 F4 LDA #$F0 ; CPU:$C4CF PRG:04CF A9 F0 CorePathLoop_C4D1: TAY ; CPU:$C4D1 PRG:04D1 A8 LDA #$00 ; CPU:$C4D2 PRG:04D2 A9 00 STA $0600,Y ; CPU:$C4D4 PRG:04D4 99 00 06 LDX $05F0,Y ; CPU:$C4D7 PRG:04D7 BE F0 05 BNE CorePathOnNonZero_C4E1 ; CPU:$C4DA PRG:04DA D0 05 LDA #$01 ; CPU:$C4DC PRG:04DC A9 01 STA $05F0,Y ; CPU:$C4DE PRG:04DE 99 F0 05 CorePathOnNonZero_C4E1: TYA ; CPU:$C4E1 PRG:04E1 98 SEC ; CPU:$C4E2 PRG:04E2 38 SBC #$20 ; CPU:$C4E3 PRG:04E3 E9 20 CMP #$F0 ; CPU:$C4E5 PRG:04E5 C9 F0 BNE CorePathLoop_C4D1 ; CPU:$C4E7 PRG:04E7 D0 E8 LDA #$80 ; CPU:$C4E9 PRG:04E9 A9 80 CorePathLoop_C4EB: TAY ; CPU:$C4EB PRG:04EB A8 LDA #$00 ; CPU:$C4EC PRG:04EC A9 00 STA $0470,Y ; CPU:$C4EE PRG:04EE 99 70 04 TYA ; CPU:$C4F1 PRG:04F1 98 SEC ; CPU:$C4F2 PRG:04F2 38 SBC #$20 ; CPU:$C4F3 PRG:04F3 E9 20 BNE CorePathLoop_C4EB ; CPU:$C4F5 PRG:04F5 D0 F4 LDA #$40 ; CPU:$C4F7 PRG:04F7 A9 40 STA $FB ; CPU:$C4F9 PRG:04F9 85 FB JSR RunGameTaskRoutine_C7F3 ; CPU:$C4FB PRG:04FB 20 F3 C7 LDA #$83 ; CPU:$C4FE PRG:04FE A9 83 JSR ProcessResourceStateRoutine_F31A ; CPU:$C500 PRG:0500 20 1A F3 RTS ; CPU:$C503 PRG:0503 60 ;------------------------------------------------------------ ; UpdatePlayerStateRoutine_C504 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdatePlayerStateRoutine_C504: LDA $90 ; CPU:$C504 PRG:0504 A5 90 CMP #$01 ; CPU:$C506 PRG:0506 C9 01 BNE CorePathOnNonZero_C51A ; CPU:$C508 PRG:0508 D0 10 LDA $91 ; CPU:$C50A PRG:050A A5 91 CMP #$01 ; CPU:$C50C PRG:050C C9 01 BNE CorePathOnNonZero_C51A ; CPU:$C50E PRG:050E D0 0A LDA #$01 ; CPU:$C510 PRG:0510 A9 01 STA $AF ; CPU:$C512 PRG:0512 85 AF LDA #$23 ; CPU:$C514 PRG:0514 A9 23 STA $78 ; CPU:$C516 PRG:0516 85 78 BNE CorePathLoop_C4B3 ; CPU:$C518 PRG:0518 D0 99 CorePathOnNonZero_C51A: RTS ; CPU:$C51A PRG:051A 60 .byte $12, $F5, $F6, $1C, $0B, $18, $17, $1E, $1C, $24, $24, $02, $00, $00, $00, $AD ; CPU:$C51B PRG:051B 0B .byte $29, $2B, $1D, $19, $0E, $1B, $0F, $0E, $0C, $1D, $24, $03, $00, $00, $00, $AD ; CPU:$C52B PRG:052B 0B RunGameTaskDispatch_C53B: LDA $3F ; CPU:$C53B PRG:053B A5 3F BNE CorePathOnNonZero_C581 ; CPU:$C53D PRG:053D D0 42 LDA #$01 ; CPU:$C53F PRG:053F A9 01 STA $0F ; CPU:$C541 PRG:0541 85 0F LDA #$2A ; CPU:$C543 PRG:0543 A9 2A LDX #$EE ; CPU:$C545 PRG:0545 A2 EE UpdatePlayerStateLoop_C547: STX $00 ; CPU:$C547 PRG:0547 86 00 STA $01 ; CPU:$C549 PRG:0549 85 01 LDX $0F ; CPU:$C54B PRG:054B A6 0F LDA $90,X ; CPU:$C54D PRG:054D B5 90 CMP #$01 ; CPU:$C54F PRG:054F C9 01 BEQ CorePathOnZero_C56B ; CPU:$C551 PRG:0551 F0 18 LDA #$2D ; CPU:$C553 PRG:0553 A9 2D STA $02 ; CPU:$C555 PRG:0555 85 02 LDA #$C5 ; CPU:$C557 PRG:0557 A9 C5 STA $03 ; CPU:$C559 PRG:0559 85 03 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$C55B PRG:055B 20 A1 F3 LDA $0F ; CPU:$C55E PRG:055E A5 0F ORA #$80 ; CPU:$C560 PRG:0560 09 80 STA $01 ; CPU:$C562 PRG:0562 85 01 LDA #$30 ; CPU:$C564 PRG:0564 A9 30 STA $00 ; CPU:$C566 PRG:0566 85 00 JSR ProcessResourceStateRoutine_F40C ; CPU:$C568 PRG:0568 20 0C F4 CorePathOnZero_C56B: LDA #$29 ; CPU:$C56B PRG:056B A9 29 LDX #$2E ; CPU:$C56D PRG:056D A2 2E DEC $0F ; CPU:$C56F PRG:056F C6 0F BPL UpdatePlayerStateLoop_C547 ; CPU:$C571 PRG:0571 10 D4 JSR RunGameTaskRoutine_C7EF ; CPU:$C573 PRG:0573 20 EF C7 LDA #$02 ; CPU:$C576 PRG:0576 A9 02 STA $FE ; CPU:$C578 PRG:0578 85 FE JSR RunGameTaskRoutine_C809 ; CPU:$C57A PRG:057A 20 09 C8 INC $AC ; CPU:$C57D PRG:057D E6 AC LDA #$18 ; CPU:$C57F PRG:057F A9 18 CorePathOnNonZero_C581: JMP RunGameTaskDispatch_C7EA ; CPU:$C581 PRG:0581 4C EA C7 CorePathLoop_C584: LDA $A1 ; CPU:$C584 PRG:0584 A5 A1 BNE CorePathContinue_C5C5 ; CPU:$C586 PRG:0586 D0 3D LDA $2E ; CPU:$C588 PRG:0588 A5 2E BNE CorePathOnNonZero_C590 ; CPU:$C58A PRG:058A D0 04 LDA $2F ; CPU:$C58C PRG:058C A5 2F BEQ CorePathContinue_C5C5 ; CPU:$C58E PRG:058E F0 35 CorePathOnNonZero_C590: LDA #$01 ; CPU:$C590 PRG:0590 A9 01 STA $0F ; CPU:$C592 PRG:0592 85 0F UpdatePlayerStateLoop_C594: LDA #$10 ; CPU:$C594 PRG:0594 A9 10 STA $00 ; CPU:$C596 PRG:0596 85 00 LDX $0F ; CPU:$C598 PRG:0598 A6 0F LDA $90,X ; CPU:$C59A PRG:059A B5 90 CMP #$01 ; CPU:$C59C PRG:059C C9 01 BEQ CorePathOnZero_C5A5 ; CPU:$C59E PRG:059E F0 05 STX $01 ; CPU:$C5A0 PRG:05A0 86 01 JSR ProcessResourceStateRoutine_F40C ; CPU:$C5A2 PRG:05A2 20 0C F4 CorePathOnZero_C5A5: DEC $0F ; CPU:$C5A5 PRG:05A5 C6 0F BPL UpdatePlayerStateLoop_C594 ; CPU:$C5A7 PRG:05A7 10 EB JSR RunGameTaskRoutine_C7EF ; CPU:$C5A9 PRG:05A9 20 EF C7 LDA #$10 ; CPU:$C5AC PRG:05AC A9 10 STA $00 ; CPU:$C5AE PRG:05AE 85 00 LDA #$02 ; CPU:$C5B0 PRG:05B0 A9 02 STA $01 ; CPU:$C5B2 PRG:05B2 85 01 JSR ProcessResourceStateRoutine_F408 ; CPU:$C5B4 PRG:05B4 20 08 F4 LDA $2F ; CPU:$C5B7 PRG:05B7 A5 2F AND #$F0 ; CPU:$C5B9 PRG:05B9 29 F0 STA $2F ; CPU:$C5BB PRG:05BB 85 2F LDA #$82 ; CPU:$C5BD PRG:05BD A9 82 JSR ProcessResourceStateRoutine_F31A ; CPU:$C5BF PRG:05BF 20 1A F3 JMP RunGameTaskRoutine_C809 ; CPU:$C5C2 PRG:05C2 4C 09 C8 CorePathContinue_C5C5: JMP RunGameTaskDispatch_C7E5 ; CPU:$C5C5 PRG:05C5 4C E5 C7 CorePathLoop_C5C8: JMP RunGameTaskDispatch_C53B ; CPU:$C5C8 PRG:05C8 4C 3B C5 CorePathLoop_C5CB: LDA $8F ; CPU:$C5CB PRG:05CB A5 8F BNE CorePathLoop_C5C8 ; CPU:$C5CD PRG:05CD D0 F9 LDA #$7B ; CPU:$C5CF PRG:05CF A9 7B LDX #$C1 ; CPU:$C5D1 PRG:05D1 A2 C1 JSR ProcessResourceStateRoutine_F77D ; CPU:$C5D3 PRG:05D3 20 7D F7 LDA #$BA ; CPU:$C5D6 PRG:05D6 A9 BA STA $04A1 ; CPU:$C5D8 PRG:05D8 8D A1 04 LDX $4C ; CPU:$C5DB PRG:05DB A6 4C BNE CorePathOnNonZero_C5E4 ; CPU:$C5DD PRG:05DD D0 05 LDX #$01 ; CPU:$C5DF PRG:05DF A2 01 STX $04A0 ; CPU:$C5E1 PRG:05E1 8E A0 04 CorePathOnNonZero_C5E4: JSR RunGameTaskRoutine_C81A ; CPU:$C5E4 PRG:05E4 20 1A C8 LDA #$20 ; CPU:$C5E7 PRG:05E7 A9 20 JMP RunGameTaskDispatch_C7EA ; CPU:$C5E9 PRG:05E9 4C EA C7 UpdatePlayerStateDispatch_C5EC: LDA $AF ; CPU:$C5EC PRG:05EC A5 AF BEQ CorePathLoop_C584 ; CPU:$C5EE PRG:05EE F0 94 LDA #$90 ; CPU:$C5F0 PRG:05F0 A9 90 RunGameTaskDispatch_C5F2: STA $51 ; CPU:$C5F2 PRG:05F2 85 51 INC $AC ; CPU:$C5F4 PRG:05F4 E6 AC RTS ; CPU:$C5F6 PRG:05F6 60 RunGameTaskDispatch_C5F7: LDA $D6 ; CPU:$C5F7 PRG:05F7 A5 D6 BNE CorePathOnNonZero_C5FF ; CPU:$C5F9 PRG:05F9 D0 04 LDA $D7 ; CPU:$C5FB PRG:05FB A5 D7 BEQ CorePathOnZero_C61E ; CPU:$C5FD PRG:05FD F0 1F CorePathOnNonZero_C5FF: LDX #$01 ; CPU:$C5FF PRG:05FF A2 01 CorePathLoop_C601: STX $0F ; CPU:$C601 PRG:0601 86 0F LDA $D6,X ; CPU:$C603 PRG:0603 B5 D6 BEQ CorePathOnZero_C60E ; CPU:$C605 PRG:0605 F0 07 DEC $D6,X ; CPU:$C607 PRG:0607 D6 D6 LDA #$05 ; CPU:$C609 PRG:0609 A9 05 JSR RunGameTaskRoutine_C830 ; CPU:$C60B PRG:060B 20 30 C8 CorePathOnZero_C60E: LDX $0F ; CPU:$C60E PRG:060E A6 0F DEX ; CPU:$C610 PRG:0610 CA BPL CorePathLoop_C601 ; CPU:$C611 PRG:0611 10 EE JSR RunGameTaskRoutine_C7EF ; CPU:$C613 PRG:0613 20 EF C7 JSR RunGameTaskRoutine_C824 ; CPU:$C616 PRG:0616 20 24 C8 LDA #$18 ; CPU:$C619 PRG:0619 A9 18 JMP RunGameTaskDispatch_C80B ; CPU:$C61B PRG:061B 4C 0B C8 CorePathOnZero_C61E: JMP RunGameTaskDispatch_C7E5 ; CPU:$C61E PRG:061E 4C E5 C7 RunGameTaskDispatch_C621: LDA $AF ; CPU:$C621 PRG:0621 A5 AF BEQ CorePathLoop_C5CB ; CPU:$C623 PRG:0623 F0 A6 JSR RunGameTaskRoutine_C809 ; CPU:$C625 PRG:0625 20 09 C8 LDA #$FF ; CPU:$C628 PRG:0628 A9 FF JMP RunGameTaskDispatch_C5F2 ; CPU:$C62A PRG:062A 4C F2 C5 RunGameTaskDispatch_C62D: LDA #$82 ; CPU:$C62D PRG:062D A9 82 JSR ProcessResourceStateRoutine_F31A ; CPU:$C62F PRG:062F 20 1A F3 LDA #$6A ; CPU:$C632 PRG:0632 A9 6A LDX #$C1 ; CPU:$C634 PRG:0634 A2 C1 JSR ProcessResourceStateRoutine_F77D ; CPU:$C636 PRG:0636 20 7D F7 LDA #$A0 ; CPU:$C639 PRG:0639 A9 A0 STA $0441 ; CPU:$C63B PRG:063B 8D 41 04 LDA #$01 ; CPU:$C63E PRG:063E A9 01 STA $0449 ; CPU:$C640 PRG:0640 8D 49 04 LDA #$C0 ; CPU:$C643 PRG:0643 A9 C0 STA $044B ; CPU:$C645 PRG:0645 8D 4B 04 LDX #$00 ; CPU:$C648 PRG:0648 A2 00 JSR ProcessObjectStateRoutine_D44A ; CPU:$C64A PRG:064A 20 4A D4 LDX $4C ; CPU:$C64D PRG:064D A6 4C BEQ CorePathOnZero_C682 ; CPU:$C64F PRG:064F F0 31 JSR ProcessObjectStateRoutine_D44A ; CPU:$C651 PRG:0651 20 4A D4 CorePathLoop_C654: LDX #$00 ; CPU:$C654 PRG:0654 A2 00 LDA $4C ; CPU:$C656 PRG:0656 A5 4C BEQ CorePathOnZero_C670 ; CPU:$C658 PRG:0658 F0 16 LDA $D5 ; CPU:$C65A PRG:065A A5 D5 BMI CorePathLoop_C66A ; CPU:$C65C PRG:065C 30 0C SEC ; CPU:$C65E PRG:065E 38 LDY $D4 ; CPU:$C65F PRG:065F A4 D4 BMI CorePathOnNegative_C667 ; CPU:$C661 PRG:0661 30 04 CMP $D4 ; CPU:$C663 PRG:0663 C5 D4 BEQ CorePathLoop_C66B ; CPU:$C665 PRG:0665 F0 04 CorePathOnNegative_C667: INX ; CPU:$C667 PRG:0667 E8 BCC CorePathLoop_C66B ; CPU:$C668 PRG:0668 90 01 CorePathLoop_C66A: INX ; CPU:$C66A PRG:066A E8 CorePathLoop_C66B: STX $AE ; CPU:$C66B PRG:066B 86 AE JMP RunGameTaskDispatch_C7E8 ; CPU:$C66D PRG:066D 4C E8 C7 CorePathOnZero_C670: LDA $2E ; CPU:$C670 PRG:0670 A5 2E CMP $A8 ; CPU:$C672 PRG:0672 C5 A8 BCS CorePathLoop_C66A ; CPU:$C674 PRG:0674 B0 F4 BCC CorePathLoop_C66B ; CPU:$C676 PRG:0676 90 F3 CorePathLoop_C678: LDA $AF ; CPU:$C678 PRG:0678 A5 AF BEQ CorePathOnZero_C67F ; CPU:$C67A PRG:067A F0 03 JMP RunGameTaskRoutine_C3E4 ; CPU:$C67C PRG:067C 4C E4 C3 CorePathOnZero_C67F: JMP RunGameTaskDispatch_C5F7 ; CPU:$C67F PRG:067F 4C F7 C5 CorePathOnZero_C682: LDA #$01 ; CPU:$C682 PRG:0682 A9 01 STA $0440 ; CPU:$C684 PRG:0684 8D 40 04 BNE CorePathLoop_C654 ; CPU:$C687 PRG:0687 D0 CB CorePathLoop_C689: LDA #$00 ; CPU:$C689 PRG:0689 A9 00 LDX $0405 ; CPU:$C68B PRG:068B AE 05 04 BNE CorePathOnNonZero_C6A2 ; CPU:$C68E PRG:068E D0 12 LDA $54 ; CPU:$C690 PRG:0690 A5 54 BNE CorePathOnNonZero_C6A8 ; CPU:$C692 PRG:0692 D0 14 LDA #$10 ; CPU:$C694 PRG:0694 A9 10 STA $54 ; CPU:$C696 PRG:0696 85 54 LDA #$04 ; CPU:$C698 PRG:0698 A9 04 STA $FC ; CPU:$C69A PRG:069A 85 FC LDA $AD ; CPU:$C69C PRG:069C A5 AD EOR #$40 ; CPU:$C69E PRG:069E 49 40 STA $AD ; CPU:$C6A0 PRG:06A0 85 AD CorePathOnNonZero_C6A2: STA $0408 ; CPU:$C6A2 PRG:06A2 8D 08 04 STA $0448 ; CPU:$C6A5 PRG:06A5 8D 48 04 CorePathOnNonZero_C6A8: JSR ProcessObjectStateRoutine_D083 ; CPU:$C6A8 PRG:06A8 20 83 D0 JSR ProcessObjectStateRoutine_D0A5 ; CPU:$C6AB PRG:06AB 20 A5 D0 JSR UpdateObjectBuffer_D0C8 ; CPU:$C6AE PRG:06AE 20 C8 D0 JSR ObjectPath_D1D6 ; CPU:$C6B1 PRG:06B1 20 D6 D1 RTS ; CPU:$C6B4 PRG:06B4 60 CorePathLoop_C6B5: JMP UpdatePlayerStateDispatch_C5EC ; CPU:$C6B5 PRG:06B5 4C EC C5 CorePathLoop_C6B8: JMP RunGameTaskDispatch_C621 ; CPU:$C6B8 PRG:06B8 4C 21 C6 CorePathLoop_C6BB: JMP RunGameTaskDispatch_C62D ; CPU:$C6BB PRG:06BB 4C 2D C6 ;------------------------------------------------------------ ; RunGameTaskRoutine_C6BE ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C6BE: LDA $51 ; CPU:$C6BE PRG:06BE A5 51 BNE CorePathLoop_C689 ; CPU:$C6C0 PRG:06C0 D0 C7 LDX $AC ; CPU:$C6C2 PRG:06C2 A6 AC BEQ CorePathLoop_C6BB ; CPU:$C6C4 PRG:06C4 F0 F5 DEX ; CPU:$C6C6 PRG:06C6 CA BEQ CorePathLoop_C6B5 ; CPU:$C6C7 PRG:06C7 F0 EC DEX ; CPU:$C6C9 PRG:06C9 CA BEQ CorePathLoop_C6B8 ; CPU:$C6CA PRG:06CA F0 EC DEX ; CPU:$C6CC PRG:06CC CA BEQ CorePathLoop_C678 ; CPU:$C6CD PRG:06CD F0 A9 DEX ; CPU:$C6CF PRG:06CF CA BEQ CorePathOnZero_C740 ; CPU:$C6D0 PRG:06D0 F0 6E DEX ; CPU:$C6D2 PRG:06D2 CA BEQ CorePathOnZero_C73A ; CPU:$C6D3 PRG:06D3 F0 65 DEX ; CPU:$C6D5 PRG:06D5 CA BEQ CorePathOnZero_C73D ; CPU:$C6D6 PRG:06D6 F0 65 LDA #$00 ; CPU:$C6D8 PRG:06D8 A9 00 LDX $87 ; CPU:$C6DA PRG:06DA A6 87 INX ; CPU:$C6DC PRG:06DC E8 STX $87 ; CPU:$C6DD PRG:06DD 86 87 CPX #$05 ; CPU:$C6DF PRG:06DF E0 05 BNE CorePathOnNonZero_C6E5 ; CPU:$C6E1 PRG:06E1 D0 02 LDA #$01 ; CPU:$C6E3 PRG:06E3 A9 01 CorePathOnNonZero_C6E5: STA $8F ; CPU:$C6E5 PRG:06E5 85 8F CPX #$06 ; CPU:$C6E7 PRG:06E7 E0 06 BNE CorePathOnNonZero_C703 ; CPU:$C6E9 PRG:06E9 D0 18 LDX #$01 ; CPU:$C6EB PRG:06EB A2 01 STX $87 ; CPU:$C6ED PRG:06ED 86 87 LDA $88 ; CPU:$C6EF PRG:06EF A5 88 INC $88 ; CPU:$C6F1 PRG:06F1 E6 88 CMP #$03 ; CPU:$C6F3 PRG:06F3 C9 03 BNE CorePathOnNonZero_C703 ; CPU:$C6F5 PRG:06F5 D0 0C STX $8C ; CPU:$C6F7 PRG:06F7 86 8C STX $84 ; CPU:$C6F9 PRG:06F9 86 84 LDA #$00 ; CPU:$C6FB PRG:06FB A9 00 STA $82 ; CPU:$C6FD PRG:06FD 85 82 STA $83 ; CPU:$C6FF PRG:06FF 85 83 STA $88 ; CPU:$C701 PRG:0701 85 88 CorePathOnNonZero_C703: LDA $87 ; CPU:$C703 PRG:0703 A5 87 ASL A ; CPU:$C705 PRG:0705 0A ASL A ; CPU:$C706 PRG:0706 0A ORA $88 ; CPU:$C707 PRG:0707 05 88 STA $89 ; CPU:$C709 PRG:0709 85 89 LDX $8C ; CPU:$C70B PRG:070B A6 8C LDA $8F ; CPU:$C70D PRG:070D A5 8F BEQ UpdateGameStateOnZero_C713 ; CPU:$C70F PRG:070F F0 02 LDX #$00 ; CPU:$C711 PRG:0711 A2 00 UpdateGameStateOnZero_C713: STX $8E ; CPU:$C713 PRG:0713 86 8E LDA #$02 ; CPU:$C715 PRG:0715 A9 02 STA $8B ; CPU:$C717 PRG:0717 85 8B DEC $84 ; CPU:$C719 PRG:0719 C6 84 BPL CorePathContinue_C72E ; CPU:$C71B PRG:071B 10 11 LDA #$02 ; CPU:$C71D PRG:071D A9 02 STA $84 ; CPU:$C71F PRG:071F 85 84 LDA $82 ; CPU:$C721 PRG:0721 A5 82 CMP #$07 ; CPU:$C723 PRG:0723 C9 07 BEQ CorePathContinue_C72E ; CPU:$C725 PRG:0725 F0 07 INC $82 ; CPU:$C727 PRG:0727 E6 82 LDA $82 ; CPU:$C729 PRG:0729 A5 82 LSR A ; CPU:$C72B PRG:072B 4A STA $83 ; CPU:$C72C PRG:072C 85 83 CorePathContinue_C72E: LDA #$01 ; CPU:$C72E PRG:072E A9 01 STA $00 ; CPU:$C730 PRG:0730 85 00 LDA #$03 ; CPU:$C732 PRG:0732 A9 03 STA $01 ; CPU:$C734 PRG:0734 85 01 JSR ProcessResourceStateRoutine_F40C ; CPU:$C736 PRG:0736 20 0C F4 RTS ; CPU:$C739 PRG:0739 60 CorePathOnZero_C73A: JMP RunGameTaskDispatch_C772 ; CPU:$C73A PRG:073A 4C 72 C7 CorePathOnZero_C73D: JMP RunGameTaskDispatch_C7AD ; CPU:$C73D PRG:073D 4C AD C7 CorePathOnZero_C740: LDA #$01 ; CPU:$C740 PRG:0740 A9 01 STA $0480 ; CPU:$C742 PRG:0742 8D 80 04 STA $04A0 ; CPU:$C745 PRG:0745 8D A0 04 LDA #$46 ; CPU:$C748 PRG:0748 A9 46 STA $00 ; CPU:$C74A PRG:074A 85 00 LDA #$29 ; CPU:$C74C PRG:074C A9 29 STA $01 ; CPU:$C74E PRG:074E 85 01 LDA #$1B ; CPU:$C750 PRG:0750 A9 1B STA $02 ; CPU:$C752 PRG:0752 85 02 LDA #$C5 ; CPU:$C754 PRG:0754 A9 C5 STA $03 ; CPU:$C756 PRG:0756 85 03 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$C758 PRG:0758 20 A1 F3 LDX $4C ; CPU:$C75B PRG:075B A6 4C BEQ CorePathOnZero_C76A ; CPU:$C75D PRG:075D F0 0B LDA #$06 ; CPU:$C75F PRG:075F A9 06 STA $00 ; CPU:$C761 PRG:0761 85 00 LDA #$2B ; CPU:$C763 PRG:0763 A9 2B STA $01 ; CPU:$C765 PRG:0765 85 01 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$C767 PRG:0767 20 A1 F3 CorePathOnZero_C76A: JSR RunGameTaskRoutine_C81A ; CPU:$C76A PRG:076A 20 1A C8 LDA #$20 ; CPU:$C76D PRG:076D A9 20 JMP RunGameTaskDispatch_C7EA ; CPU:$C76F PRG:076F 4C EA C7 RunGameTaskDispatch_C772: LDA $D4 ; CPU:$C772 PRG:0772 A5 D4 BNE CorePathOnNonZero_C77A ; CPU:$C774 PRG:0774 D0 04 LDA $D5 ; CPU:$C776 PRG:0776 A5 D5 BEQ RunGameTaskDispatch_C7E5 ; CPU:$C778 PRG:0778 F0 6B CorePathOnNonZero_C77A: LDX #$01 ; CPU:$C77A PRG:077A A2 01 CorePathLoop_C77C: STX $0F ; CPU:$C77C PRG:077C 86 0F LDA $D4,X ; CPU:$C77E PRG:077E B5 D4 BEQ RunGameTaskDispatch_C78B ; CPU:$C780 PRG:0780 F0 09 BMI CorePathOnNegative_C79B ; CPU:$C782 PRG:0782 30 17 DEC $D4,X ; CPU:$C784 PRG:0784 D6 D4 LDA #$01 ; CPU:$C786 PRG:0786 A9 01 JSR RunGameTaskRoutine_C830 ; CPU:$C788 PRG:0788 20 30 C8 RunGameTaskDispatch_C78B: LDX $0F ; CPU:$C78B PRG:078B A6 0F DEX ; CPU:$C78D PRG:078D CA BPL CorePathLoop_C77C ; CPU:$C78E PRG:078E 10 EC JSR RunGameTaskRoutine_C7EF ; CPU:$C790 PRG:0790 20 EF C7 JSR RunGameTaskRoutine_C824 ; CPU:$C793 PRG:0793 20 24 C8 LDA #$05 ; CPU:$C796 PRG:0796 A9 05 JMP RunGameTaskDispatch_C80B ; CPU:$C798 PRG:0798 4C 0B C8 CorePathOnNegative_C79B: INC $D4,X ; CPU:$C79B PRG:079B F6 D4 LDA #$01 ; CPU:$C79D PRG:079D A9 01 STA $00 ; CPU:$C79F PRG:079F 85 00 INX ; CPU:$C7A1 PRG:07A1 E8 INX ; CPU:$C7A2 PRG:07A2 E8 INX ; CPU:$C7A3 PRG:07A3 E8 INX ; CPU:$C7A4 PRG:07A4 E8 STX $01 ; CPU:$C7A5 PRG:07A5 86 01 JSR ProcessResourceStateRoutine_F408 ; CPU:$C7A7 PRG:07A7 20 08 F4 JMP RunGameTaskDispatch_C78B ; CPU:$C7AA PRG:07AA 4C 8B C7 RunGameTaskDispatch_C7AD: LDX $AE ; CPU:$C7AD PRG:07AD A6 AE BEQ CorePathOnZero_C7DD ; CPU:$C7AF PRG:07AF F0 2C DEX ; CPU:$C7B1 PRG:07B1 CA LDA $FFF8,X ; CPU:$C7B2 PRG:07B2 BD F8 FF STA $00 ; CPU:$C7B5 PRG:07B5 85 00 LDA $C52B,X ; CPU:$C7B7 PRG:07B7 BD 2B C5 STA $01 ; CPU:$C7BA PRG:07BA 85 01 LDA #$1E ; CPU:$C7BC PRG:07BC A9 1E STA $02 ; CPU:$C7BE PRG:07BE 85 02 LDA #$C5 ; CPU:$C7C0 PRG:07C0 A9 C5 STA $03 ; CPU:$C7C2 PRG:07C2 85 03 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$C7C4 PRG:07C4 20 A1 F3 DEC $AE ; CPU:$C7C7 PRG:07C7 C6 AE LDA $AE ; CPU:$C7C9 PRG:07C9 A5 AE ORA #$08 ; CPU:$C7CB PRG:07CB 09 08 STA $01 ; CPU:$C7CD PRG:07CD 85 01 LDA #$20 ; CPU:$C7CF PRG:07CF A9 20 STA $00 ; CPU:$C7D1 PRG:07D1 85 00 JSR ProcessResourceStateRoutine_F40C ; CPU:$C7D3 PRG:07D3 20 0C F4 JSR RunGameTaskRoutine_C7EF ; CPU:$C7D6 PRG:07D6 20 EF C7 LDA #$02 ; CPU:$C7D9 PRG:07D9 A9 02 STA $FE ; CPU:$C7DB PRG:07DB 85 FE CorePathOnZero_C7DD: JSR RunGameTaskRoutine_C809 ; CPU:$C7DD PRG:07DD 20 09 C8 LDA #$FF ; CPU:$C7E0 PRG:07E0 A9 FF JMP RunGameTaskDispatch_C7EA ; CPU:$C7E2 PRG:07E2 4C EA C7 RunGameTaskDispatch_C7E5: JSR RunGameTaskRoutine_C816 ; CPU:$C7E5 PRG:07E5 20 16 C8 RunGameTaskDispatch_C7E8: LDA #$20 ; CPU:$C7E8 PRG:07E8 A9 20 RunGameTaskDispatch_C7EA: STA $51 ; CPU:$C7EA PRG:07EA 85 51 INC $AC ; CPU:$C7EC PRG:07EC E6 AC RTS ; CPU:$C7EE PRG:07EE 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C7EF ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C7EF: LDA #$01 ; CPU:$C7EF PRG:07EF A9 01 STA $FE ; CPU:$C7F1 PRG:07F1 85 FE ;------------------------------------------------------------ ; RunGameTaskRoutine_C7F3 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C7F3: LDA #$F9 ; CPU:$C7F3 PRG:07F3 A9 F9 STA $00 ; CPU:$C7F5 PRG:07F5 85 00 JSR ProcessResourceStateRoutine_F500 ; CPU:$C7F7 PRG:07F7 20 00 F5 LDA #$0F ; CPU:$C7FA PRG:07FA A9 0F JSR ProcessResourceStateRoutine_F31A ; CPU:$C7FC PRG:07FC 20 1A F3 LDX $4C ; CPU:$C7FF PRG:07FF A6 4C BEQ CorePathOnZero_C808 ; CPU:$C801 PRG:0801 F0 05 LDA #$81 ; CPU:$C803 PRG:0803 A9 81 JSR ProcessResourceStateRoutine_F31A ; CPU:$C805 PRG:0805 20 1A F3 CorePathOnZero_C808: RTS ; CPU:$C808 PRG:0808 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C809 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C809: LDA #$04 ; CPU:$C809 PRG:0809 A9 04 RunGameTaskDispatch_C80B: STA $51 ; CPU:$C80B PRG:080B 85 51 LDA #$01 ; CPU:$C80D PRG:080D A9 01 CorePathLoop_C80F: STA $0405 ; CPU:$C80F PRG:080F 8D 05 04 STA $0445 ; CPU:$C812 PRG:0812 8D 45 04 RTS ; CPU:$C815 PRG:0815 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C816 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C816: LDA #$00 ; CPU:$C816 PRG:0816 A9 00 BEQ CorePathLoop_C80F ; CPU:$C818 PRG:0818 F0 F5 ;------------------------------------------------------------ ; RunGameTaskRoutine_C81A ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C81A: LDY #$07 ; CPU:$C81A PRG:081A A0 07 LDA #$00 ; CPU:$C81C PRG:081C A9 00 CorePathLoop_C81E: STA a:$0034,Y ; CPU:$C81E PRG:081E 99 34 00 DEY ; CPU:$C821 PRG:0821 88 BPL CorePathLoop_C81E ; CPU:$C822 PRG:0822 10 FA ;------------------------------------------------------------ ; RunGameTaskRoutine_C824 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C824: LDA #$48 ; CPU:$C824 PRG:0824 A9 48 LDX $4C ; CPU:$C826 PRG:0826 A6 4C BEQ CorePathOnZero_C82C ; CPU:$C828 PRG:0828 F0 02 LDA #$45 ; CPU:$C82A PRG:082A A9 45 CorePathOnZero_C82C: JSR ProcessResourceStateRoutine_F31A ; CPU:$C82C PRG:082C 20 1A F3 RTS ; CPU:$C82F PRG:082F 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C830 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C830: PHA ; CPU:$C830 PRG:0830 48 INX ; CPU:$C831 PRG:0831 E8 INX ; CPU:$C832 PRG:0832 E8 INX ; CPU:$C833 PRG:0833 E8 INX ; CPU:$C834 PRG:0834 E8 STX $01 ; CPU:$C835 PRG:0835 86 01 LDA #$01 ; CPU:$C837 PRG:0837 A9 01 STA $00 ; CPU:$C839 PRG:0839 85 00 JSR ProcessResourceStateRoutine_F40C ; CPU:$C83B PRG:083B 20 0C F4 PLA ; CPU:$C83E PRG:083E 68 STA $00 ; CPU:$C83F PRG:083F 85 00 LDA #$08 ; CPU:$C841 PRG:0841 A9 08 ORA $0F ; CPU:$C843 PRG:0843 05 0F STA $01 ; CPU:$C845 PRG:0845 85 01 JSR ProcessResourceStateRoutine_F40C ; CPU:$C847 PRG:0847 20 0C F4 RTS ; CPU:$C84A PRG:084A 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C84B ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C84B: LDA #$05 ; CPU:$C84B PRG:084B A9 05 STA $01 ; CPU:$C84D PRG:084D 85 01 LDY #$13 ; CPU:$C84F PRG:084F A0 13 CorePathLoop_C851: TYA ; CPU:$C851 PRG:0851 98 AND #$FC ; CPU:$C852 PRG:0852 29 FC STA $0720,Y ; CPU:$C854 PRG:0854 99 20 07 DEY ; CPU:$C857 PRG:0857 88 BPL CorePathLoop_C851 ; CPU:$C858 PRG:0858 10 F7 LDA #$20 ; CPU:$C85A PRG:085A A9 20 STA $04 ; CPU:$C85C PRG:085C 85 04 LDA #$07 ; CPU:$C85E PRG:085E A9 07 STA $05 ; CPU:$C860 PRG:0860 85 05 CorePathLoop_C862: LDA $10 ; CPU:$C862 PRG:0862 A5 10 AND #$03 ; CPU:$C864 PRG:0864 29 03 LDY #$03 ; CPU:$C866 PRG:0866 A0 03 ORA ($04),Y ; CPU:$C868 PRG:0868 11 04 CorePathLoop_C86A: STA ($04),Y ; CPU:$C86A PRG:086A 91 04 DEY ; CPU:$C86C PRG:086C 88 BPL CorePathLoop_C86A ; CPU:$C86D PRG:086D 10 FB LDX #$02 ; CPU:$C86F PRG:086F A2 02 STX $03 ; CPU:$C871 PRG:0871 86 03 CorePathLoop_C873: LDY $14 ; CPU:$C873 PRG:0873 A4 14 CorePathLoop_C875: JSR EnginePath_F58D ; CPU:$C875 PRG:0875 20 8D F5 DEY ; CPU:$C878 PRG:0878 88 BNE CorePathLoop_C875 ; CPU:$C879 PRG:0879 D0 FA LDA $11 ; CPU:$C87B PRG:087B A5 11 AND #$03 ; CPU:$C87D PRG:087D 29 03 STA $02 ; CPU:$C87F PRG:087F 85 02 LDY #$03 ; CPU:$C881 PRG:0881 A0 03 LDA ($04),Y ; CPU:$C883 PRG:0883 B1 04 AND #$FC ; CPU:$C885 PRG:0885 29 FC ORA $02 ; CPU:$C887 PRG:0887 05 02 CorePathLoop_C889: CMP ($04),Y ; CPU:$C889 PRG:0889 D1 04 BEQ CorePathLoop_C873 ; CPU:$C88B PRG:088B F0 E6 DEY ; CPU:$C88D PRG:088D 88 BPL CorePathLoop_C889 ; CPU:$C88E PRG:088E 10 F9 LDY $03 ; CPU:$C890 PRG:0890 A4 03 STA ($04),Y ; CPU:$C892 PRG:0892 91 04 DEC $03 ; CPU:$C894 PRG:0894 C6 03 BPL CorePathLoop_C873 ; CPU:$C896 PRG:0896 10 DB CLC ; CPU:$C898 PRG:0898 18 LDA #$04 ; CPU:$C899 PRG:0899 A9 04 ADC $04 ; CPU:$C89B PRG:089B 65 04 STA $04 ; CPU:$C89D PRG:089D 85 04 LDA #$00 ; CPU:$C89F PRG:089F A9 00 ADC $05 ; CPU:$C8A1 PRG:08A1 65 05 STA $05 ; CPU:$C8A3 PRG:08A3 85 05 DEC $01 ; CPU:$C8A5 PRG:08A5 C6 01 BNE CorePathLoop_C862 ; CPU:$C8A7 PRG:08A7 D0 B9 RTS ; CPU:$C8A9 PRG:08A9 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C8AA ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C8AA: LDA $85 ; CPU:$C8AA PRG:08AA A5 85 ASL A ; CPU:$C8AC PRG:08AC 0A TAX ; CPU:$C8AD PRG:08AD AA LDA $C008,X ; CPU:$C8AE PRG:08AE BD 08 C0 STA $04 ; CPU:$C8B1 PRG:08B1 85 04 LDA $C009,X ; CPU:$C8B3 PRG:08B3 BD 09 C0 STA $05 ; CPU:$C8B6 PRG:08B6 85 05 RTS ; CPU:$C8B8 PRG:08B8 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C8B9 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C8B9: LDY #$10 ; CPU:$C8B9 PRG:08B9 A0 10 LDX $83 ; CPU:$C8BB PRG:08BB A6 83 LDA $C0D1,X ; CPU:$C8BD PRG:08BD BD D1 C0 STA $0F ; CPU:$C8C0 PRG:08C0 85 0F LDA #$80 ; CPU:$C8C2 PRG:08C2 A9 80 STA $00 ; CPU:$C8C4 PRG:08C4 85 00 LDA #$04 ; CPU:$C8C6 PRG:08C6 A9 04 STA $01 ; CPU:$C8C8 PRG:08C8 85 01 CorePathLoop_C8CA: LDA #$01 ; CPU:$C8CA PRG:08CA A9 01 STA ($00),Y ; CPU:$C8CC PRG:08CC 91 00 LDX #$00 ; CPU:$C8CE PRG:08CE A2 00 JSR RunGameTaskRoutine_CBD3 ; CPU:$C8D0 PRG:08D0 20 D3 CB BNE CorePathLoop_C8CA ; CPU:$C8D3 PRG:08D3 D0 F5 RTS ; CPU:$C8D5 PRG:08D5 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_C8D6 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C8D6: JSR RunGameTaskRoutine_C463 ; CPU:$C8D6 PRG:08D6 20 63 C4 LDY #$0F ; CPU:$C8D9 PRG:08D9 A0 0F LDA $4C ; CPU:$C8DB PRG:08DB A5 4C BNE CorePathLoop_C8E1 ; CPU:$C8DD PRG:08DD D0 02 LDY #$07 ; CPU:$C8DF PRG:08DF A0 07 CorePathLoop_C8E1: LDA $C0A1,Y ; CPU:$C8E1 PRG:08E1 B9 A1 C0 STA $02E0,Y ; CPU:$C8E4 PRG:08E4 99 E0 02 DEY ; CPU:$C8E7 PRG:08E7 88 BPL CorePathLoop_C8E1 ; CPU:$C8E8 PRG:08E8 10 F7 RTS ; CPU:$C8EA PRG:08EA 60 .byte $1C, $34, $4C, $64, $94, $AC, $C4, $DC, $20, $38, $50, $68, $80, $98, $B0, $C8 ; CPU:$C8EB PRG:08EB 0B ;------------------------------------------------------------ ; RunGameTaskRoutine_C8FB ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_C8FB: LDA #$07 ; CPU:$C8FB PRG:08FB A9 07 STA $0E ; CPU:$C8FD PRG:08FD 85 0E LDA #$00 ; CPU:$C8FF PRG:08FF A9 00 STA $04 ; CPU:$C901 PRG:0901 85 04 LDA #$06 ; CPU:$C903 PRG:0903 A9 06 STA $05 ; CPU:$C905 PRG:0905 85 05 CorePathLoop_C907: LDA $16 ; CPU:$C907 PRG:0907 A5 16 AND #$07 ; CPU:$C909 PRG:0909 29 07 TAX ; CPU:$C90B PRG:090B AA LDA $C8EB,X ; CPU:$C90C PRG:090C BD EB C8 STA $01 ; CPU:$C90F PRG:090F 85 01 LDA $17 ; CPU:$C911 PRG:0911 A5 17 AND #$07 ; CPU:$C913 PRG:0913 29 07 TAX ; CPU:$C915 PRG:0915 AA LDA $C8F3,X ; CPU:$C916 PRG:0916 BD F3 C8 STA $00 ; CPU:$C919 PRG:0919 85 00 JSR UpdateObjectBufferRoutine_E0DF ; CPU:$C91B PRG:091B 20 DF E0 LDA #$00 ; CPU:$C91E PRG:091E A9 00 JSR ProcessObjectStateRoutine_E0B2 ; CPU:$C920 PRG:0920 20 B2 E0 JSR ObjectPath_E113 ; CPU:$C923 PRG:0923 20 13 E1 LDA #$00 ; CPU:$C926 PRG:0926 A9 00 JSR ProcessObjectStateRoutine_E0B2 ; CPU:$C928 PRG:0928 20 B2 E0 CMP #$24 ; CPU:$C92B PRG:092B C9 24 BEQ CorePathContinue_C941 ; CPU:$C92D PRG:092D F0 12 CMP #$4E ; CPU:$C92F PRG:092F C9 4E BCS CorePathLoop_C937 ; CPU:$C931 PRG:0931 B0 04 CMP #$49 ; CPU:$C933 PRG:0933 C9 49 BCS CorePathContinue_C941 ; CPU:$C935 PRG:0935 B0 0A CorePathLoop_C937: LDX $10 ; CPU:$C937 PRG:0937 A6 10 CorePathLoop_C939: JSR EnginePath_F58D ; CPU:$C939 PRG:0939 20 8D F5 DEX ; CPU:$C93C PRG:093C CA BNE CorePathLoop_C939 ; CPU:$C93D PRG:093D D0 FA BEQ CorePathLoop_C907 ; CPU:$C93F PRG:093F F0 C6 CorePathContinue_C941: LDA #$07 ; CPU:$C941 PRG:0941 A9 07 STA $0F ; CPU:$C943 PRG:0943 85 0F LDA #$00 ; CPU:$C945 PRG:0945 A9 00 STA $06 ; CPU:$C947 PRG:0947 85 06 LDA #$06 ; CPU:$C949 PRG:0949 A9 06 STA $07 ; CPU:$C94B PRG:094B 85 07 CorePathLoop_C94D: LDY #$01 ; CPU:$C94D PRG:094D A0 01 LDA ($06),Y ; CPU:$C94F PRG:094F B1 06 CMP $00 ; CPU:$C951 PRG:0951 C5 00 BNE CorePathOnNonZero_C95D ; CPU:$C953 PRG:0953 D0 08 LDY #$03 ; CPU:$C955 PRG:0955 A0 03 LDA ($06),Y ; CPU:$C957 PRG:0957 B1 06 CMP $01 ; CPU:$C959 PRG:0959 C5 01 BEQ CorePathLoop_C937 ; CPU:$C95B PRG:095B F0 DA CorePathOnNonZero_C95D: LDX #$06 ; CPU:$C95D PRG:095D A2 06 JSR RunGameTaskRoutine_CBD3 ; CPU:$C95F PRG:095F 20 D3 CB BPL CorePathLoop_C94D ; CPU:$C962 PRG:0962 10 E9 LDY #$01 ; CPU:$C964 PRG:0964 A0 01 LDA #$00 ; CPU:$C966 PRG:0966 A9 00 LDX $8F ; CPU:$C968 PRG:0968 A6 8F BNE CorePathContinue_C974 ; CPU:$C96A PRG:096A D0 08 LDX $11 ; CPU:$C96C PRG:096C A6 11 CPX #$3C ; CPU:$C96E PRG:096E E0 3C BCS CorePathContinue_C974 ; CPU:$C970 PRG:0970 B0 02 LDA WorkPtr0Lo ; CPU:$C972 PRG:0972 A5 00 CorePathContinue_C974: STA ($04),Y ; CPU:$C974 PRG:0974 91 04 LDA ($04),Y ; CPU:$C976 PRG:0976 B1 04 BEQ CorePathContinue_C986 ; CPU:$C978 PRG:0978 F0 0C LDX $12 ; CPU:$C97A PRG:097A A6 12 CPX #$40 ; CPU:$C97C PRG:097C E0 40 BCS CorePathContinue_C986 ; CPU:$C97E PRG:097E B0 06 LDY #$10 ; CPU:$C980 PRG:0980 A0 10 LDA #$01 ; CPU:$C982 PRG:0982 A9 01 STA ($04),Y ; CPU:$C984 PRG:0984 91 04 CorePathContinue_C986: LDY #$03 ; CPU:$C986 PRG:0986 A0 03 LDA WorkPtr0Hi ; CPU:$C988 PRG:0988 A5 01 STA ($04),Y ; CPU:$C98A PRG:098A 91 04 LDX #$04 ; CPU:$C98C PRG:098C A2 04 JSR RunGameTaskRoutine_CBD3 ; CPU:$C98E PRG:098E 20 D3 CB DEC $0E ; CPU:$C991 PRG:0991 C6 0E BPL CorePathLoop_C937 ; CPU:$C993 PRG:0993 10 A2 RTS ; CPU:$C995 PRG:0995 60 ;------------------------------------------------------------ ; UpdateGameStateRoutine_C996 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateGameStateRoutine_C996: LDA $8B ; CPU:$C996 PRG:0996 A5 8B BNE UpdateGameStateOnNonZero_C99B ; CPU:$C998 PRG:0998 D0 01 RTS ; CPU:$C99A PRG:099A 60 UpdateGameStateOnNonZero_C99B: DEC $8B ; CPU:$C99B PRG:099B C6 8B BEQ CorePathOnZero_C9DA ; CPU:$C99D PRG:099D F0 3B LDA #$24 ; CPU:$C99F PRG:099F A9 24 STA $00 ; CPU:$C9A1 PRG:09A1 85 00 LDA #$01 ; CPU:$C9A3 PRG:09A3 A9 01 STA $01 ; CPU:$C9A5 PRG:09A5 85 01 JSR ProcessResourceStateRoutine_F257 ; CPU:$C9A7 PRG:09A7 20 57 F2 LDA #$03 ; CPU:$C9AA PRG:09AA A9 03 STA $01 ; CPU:$C9AC PRG:09AC 85 01 JSR ProcessResourceStateRoutine_F257 ; CPU:$C9AE PRG:09AE 20 57 F2 LDY #$1C ; CPU:$C9B1 PRG:09B1 A0 1C LDA $4C ; CPU:$C9B3 PRG:09B3 A5 4C BEQ UpdateGameStateOnZero_C9B8 ; CPU:$C9B5 PRG:09B5 F0 01 INY ; CPU:$C9B7 PRG:09B7 C8 UpdateGameStateOnZero_C9B8: STY $85 ; CPU:$C9B8 PRG:09B8 84 85 JSR RunGameTaskRoutine_CB8C ; CPU:$C9BA PRG:09BA 20 8C CB LDA #$1B ; CPU:$C9BD PRG:09BD A9 1B LDX #$14 ; CPU:$C9BF PRG:09BF A2 14 LDY $8A ; CPU:$C9C1 PRG:09C1 A4 8A BEQ CorePathOnZero_C9D3 ; CPU:$C9C3 PRG:09C3 F0 0E LDA $87 ; CPU:$C9C5 PRG:09C5 A5 87 CLC ; CPU:$C9C7 PRG:09C7 18 ADC #$15 ; CPU:$C9C8 PRG:09C8 69 15 CMP #$1A ; CPU:$C9CA PRG:09CA C9 1A BEQ CorePathOnZero_C9D3 ; CPU:$C9CC PRG:09CC F0 05 LDY $89 ; CPU:$C9CE PRG:09CE A4 89 LDX $0720,Y ; CPU:$C9D0 PRG:09D0 BE 20 07 CorePathOnZero_C9D3: STA $85 ; CPU:$C9D3 PRG:09D3 85 85 STX $86 ; CPU:$C9D5 PRG:09D5 86 86 JMP RunGameTaskDispatch_CB87 ; CPU:$C9D7 PRG:09D7 4C 87 CB CorePathOnZero_C9DA: JSR RunGameTaskRoutine_CB8C ; CPU:$C9DA PRG:09DA 20 8C CB LDA $86 ; CPU:$C9DD PRG:09DD A5 86 ASL A ; CPU:$C9DF PRG:09DF 0A TAX ; CPU:$C9E0 PRG:09E0 AA LDA $C008,X ; CPU:$C9E1 PRG:09E1 BD 08 C0 STA $00 ; CPU:$C9E4 PRG:09E4 85 00 LDA $C009,X ; CPU:$C9E6 PRG:09E6 BD 09 C0 STA $01 ; CPU:$C9E9 PRG:09E9 85 01 JSR ObjectPath_DF2F ; CPU:$C9EB PRG:09EB 20 2F DF LDA $85 ; CPU:$C9EE PRG:09EE A5 85 CMP #$1B ; CPU:$C9F0 PRG:09F0 C9 1B BEQ CorePathOnZero_CA09 ; CPU:$C9F2 PRG:09F2 F0 15 JSR ProcessObjectStateRoutine_D211 ; CPU:$C9F4 PRG:09F4 20 11 D2 JSR ProcessObjectStateRoutine_D211 ; CPU:$C9F7 PRG:09F7 20 11 D2 JSR ProcessObjectStateRoutine_D211 ; CPU:$C9FA PRG:09FA 20 11 D2 JSR ProcessObjectStateRoutine_D211 ; CPU:$C9FD PRG:09FD 20 11 D2 JSR ResourceAndLevelData ; CPU:$CA00 PRG:0A00 20 0B F2 JSR ObjectPath_DE15 ; CPU:$CA03 PRG:0A03 20 15 DE JSR UpdateObjectBuffer_DF5E ; CPU:$CA06 PRG:0A06 20 5E DF CorePathOnZero_CA09: LDY #$06 ; CPU:$CA09 PRG:0A09 A0 06 LDX #$04 ; CPU:$CA0B PRG:0A0B A2 04 JSR RunGameTaskRoutine_CBA6 ; CPU:$CA0D PRG:0A0D 20 A6 CB LDY #$02 ; CPU:$CA10 PRG:0A10 A0 02 LDX #$01 ; CPU:$CA12 PRG:0A12 A2 01 LDA #$F4 ; CPU:$CA14 PRG:0A14 A9 F4 JSR RunGameTaskRoutine_CBA8 ; CPU:$CA16 PRG:0A16 20 A8 CB LDY #$50 ; CPU:$CA19 PRG:0A19 A0 50 LDA #$00 ; CPU:$CA1B PRG:0A1B A9 00 CorePathLoop_CA1D: STA a:$009F,Y ; CPU:$CA1D PRG:0A1D 99 9F 00 DEY ; CPU:$CA20 PRG:0A20 88 BNE CorePathLoop_CA1D ; CPU:$CA21 PRG:0A21 D0 FA LDY #$28 ; CPU:$CA23 PRG:0A23 A0 28 UpdateGameStateLoop_CA25: STA a:$0053,Y ; CPU:$CA25 PRG:0A25 99 53 00 DEY ; CPU:$CA28 PRG:0A28 88 BNE UpdateGameStateLoop_CA25 ; CPU:$CA29 PRG:0A29 D0 FA LDA $40 ; CPU:$CA2B PRG:0A2B A5 40 ORA #$02 ; CPU:$CA2D PRG:0A2D 09 02 STA $40 ; CPU:$CA2F PRG:0A2F 85 40 LDA #$EF ; CPU:$CA31 PRG:0A31 A9 EF STA $43 ; CPU:$CA33 PRG:0A33 85 43 LDA $8A ; CPU:$CA35 PRG:0A35 A5 8A BNE CorePathOnNonZero_CA4D ; CPU:$CA37 PRG:0A37 D0 14 LDA #$90 ; CPU:$CA39 PRG:0A39 A9 90 LDX #$C0 ; CPU:$CA3B PRG:0A3B A2 C0 JSR ProcessResourceStateRoutine_F77D ; CPU:$CA3D PRG:0A3D 20 7D F7 LDA #$0F ; CPU:$CA40 PRG:0A40 A9 0F JSR ProcessResourceStateRoutine_F31A ; CPU:$CA42 PRG:0A42 20 1A F3 LDA #$81 ; CPU:$CA45 PRG:0A45 A9 81 JSR ProcessResourceStateRoutine_F31A ; CPU:$CA47 PRG:0A47 20 1A F3 JMP RunGameTaskDispatch_CB87 ; CPU:$CA4A PRG:0A4A 4C 87 CB CorePathOnNonZero_CA4D: LDY $86 ; CPU:$CA4D PRG:0A4D A4 86 LDA $C044,Y ; CPU:$CA4F PRG:0A4F B9 44 C0 STA $3F ; CPU:$CA52 PRG:0A52 85 3F LDA #$FA ; CPU:$CA54 PRG:0A54 A9 FA LDX #$C0 ; CPU:$CA56 PRG:0A56 A2 C0 JSR ProcessResourceStateRoutine_F77D ; CPU:$CA58 PRG:0A58 20 7D F7 LDA #$E5 ; CPU:$CA5B PRG:0A5B A9 E5 LDX #$C0 ; CPU:$CA5D PRG:0A5D A2 C0 JSR ProcessResourceStateRoutine_F77D ; CPU:$CA5F PRG:0A5F 20 7D F7 LDA #$F2 ; CPU:$CA62 PRG:0A62 A9 F2 STA $0437 ; CPU:$CA64 PRG:0A64 8D 37 04 STA $0477 ; CPU:$CA67 PRG:0A67 8D 77 04 LDA #$01 ; CPU:$CA6A PRG:0A6A A9 01 STA $0449 ; CPU:$CA6C PRG:0A6C 8D 49 04 STA $0469 ; CPU:$CA6F PRG:0A6F 8D 69 04 STA $0479 ; CPU:$CA72 PRG:0A72 8D 79 04 LDA #$D8 ; CPU:$CA75 PRG:0A75 A9 D8 STA $043B ; CPU:$CA77 PRG:0A77 8D 3B 04 LDA #$14 ; CPU:$CA7A PRG:0A7A A9 14 STA $044B ; CPU:$CA7C PRG:0A7C 8D 4B 04 LDA #$24 ; CPU:$CA7F PRG:0A7F A9 24 STA $046B ; CPU:$CA81 PRG:0A81 8D 6B 04 LDA #$DC ; CPU:$CA84 PRG:0A84 A9 DC STA $047B ; CPU:$CA86 PRG:0A86 8D 7B 04 LDA #$0B ; CPU:$CA89 PRG:0A89 A9 0B LDX #$C1 ; CPU:$CA8B PRG:0A8B A2 C1 JSR ProcessResourceStateRoutine_F77D ; CPU:$CA8D PRG:0A8D 20 7D F7 LDA #$70 ; CPU:$CA90 PRG:0A90 A9 70 STA $052B ; CPU:$CA92 PRG:0A92 8D 2B 05 LDA #$78 ; CPU:$CA95 PRG:0A95 A9 78 STA $054B ; CPU:$CA97 PRG:0A97 8D 4B 05 LDA #$80 ; CPU:$CA9A PRG:0A9A A9 80 STA $056B ; CPU:$CA9C PRG:0A9C 8D 6B 05 LDA #$88 ; CPU:$CA9F PRG:0A9F A9 88 STA $058B ; CPU:$CAA1 PRG:0AA1 8D 8B 05 LDA #$90 ; CPU:$CAA4 PRG:0AA4 A9 90 STA $05AB ; CPU:$CAA6 PRG:0AA6 8D AB 05 LDA #$98 ; CPU:$CAA9 PRG:0AA9 A9 98 STA $05CB ; CPU:$CAAB PRG:0AAB 8D CB 05 LDA #$A0 ; CPU:$CAAE PRG:0AAE A9 A0 STA $05EB ; CPU:$CAB0 PRG:0AB0 8D EB 05 LDA #$21 ; CPU:$CAB3 PRG:0AB3 A9 21 LDX #$C1 ; CPU:$CAB5 PRG:0AB5 A2 C1 JSR ProcessResourceStateRoutine_F77D ; CPU:$CAB7 PRG:0AB7 20 7D F7 LDA #$38 ; CPU:$CABA PRG:0ABA A9 38 STA $04AB ; CPU:$CABC PRG:0ABC 8D AB 04 LDA #$48 ; CPU:$CABF PRG:0ABF A9 48 STA $04CB ; CPU:$CAC1 PRG:0AC1 8D CB 04 LDA #$58 ; CPU:$CAC4 PRG:0AC4 A9 58 STA $04EB ; CPU:$CAC6 PRG:0AC6 8D EB 04 LDA #$42 ; CPU:$CAC9 PRG:0AC9 A9 42 LDX #$C1 ; CPU:$CACB PRG:0ACB A2 C1 JSR ProcessResourceStateRoutine_F77D ; CPU:$CACD PRG:0ACD 20 7D F7 LDX #$05 ; CPU:$CAD0 PRG:0AD0 A2 05 LDY #$07 ; CPU:$CAD2 PRG:0AD2 A0 07 CorePathLoop_CAD4: TYA ; CPU:$CAD4 PRG:0AD4 98 STA $0600,X ; CPU:$CAD5 PRG:0AD5 9D 00 06 TXA ; CPU:$CAD8 PRG:0AD8 8A CLC ; CPU:$CAD9 PRG:0AD9 18 ADC #$20 ; CPU:$CADA PRG:0ADA 69 20 TAX ; CPU:$CADC PRG:0ADC AA DEY ; CPU:$CADD PRG:0ADD 88 BNE CorePathLoop_CAD4 ; CPU:$CADE PRG:0ADE D0 F4 LDA #$01 ; CPU:$CAE0 PRG:0AE0 A9 01 STA $0629 ; CPU:$CAE2 PRG:0AE2 8D 29 06 STA $0649 ; CPU:$CAE5 PRG:0AE5 8D 49 06 STA $06E9 ; CPU:$CAE8 PRG:0AE8 8D E9 06 JSR RunGameTaskRoutine_C8FB ; CPU:$CAEB PRG:0AEB 20 FB C8 LDA #$58 ; CPU:$CAEE PRG:0AEE A9 58 LDX #$C1 ; CPU:$CAF0 PRG:0AF0 A2 C1 JSR ProcessResourceStateRoutine_F77D ; CPU:$CAF2 PRG:0AF2 20 7D F7 LDA #$C8 ; CPU:$CAF5 PRG:0AF5 A9 C8 STA $03DB ; CPU:$CAF7 PRG:0AF7 8D DB 03 LDA #$D0 ; CPU:$CAFA PRG:0AFA A9 D0 STA $03EB ; CPU:$CAFC PRG:0AFC 8D EB 03 LDA #$37 ; CPU:$CAFF PRG:0AFF A9 37 LDX #$C1 ; CPU:$CB01 PRG:0B01 A2 C1 JSR ProcessResourceStateRoutine_F77D ; CPU:$CB03 PRG:0B03 20 7D F7 LDA #$01 ; CPU:$CB06 PRG:0B06 A9 01 STA $8A ; CPU:$CB08 PRG:0B08 85 8A LDA #$02 ; CPU:$CB0A PRG:0B0A A9 02 LDY $8F ; CPU:$CB0C PRG:0B0C A4 8F BNE UpdateGameStateOnNonZero_CB15 ; CPU:$CB0E PRG:0B0E D0 05 LDA #$08 ; CPU:$CB10 PRG:0B10 A9 08 SEC ; CPU:$CB12 PRG:0B12 38 SBC $83 ; CPU:$CB13 PRG:0B13 E5 83 UpdateGameStateOnNonZero_CB15: STA $2E ; CPU:$CB15 PRG:0B15 85 2E SEC ; CPU:$CB17 PRG:0B17 38 SBC #$03 ; CPU:$CB18 PRG:0B18 E9 03 STA $A8 ; CPU:$CB1A PRG:0B1A 85 A8 LDA #$00 ; CPU:$CB1C PRG:0B1C A9 00 STA $2F ; CPU:$CB1E PRG:0B1E 85 2F STA $2C ; CPU:$CB20 PRG:0B20 85 2C LDA #$8A ; CPU:$CB22 PRG:0B22 A9 8A LDX #$C1 ; CPU:$CB24 PRG:0B24 A2 C1 JSR ProcessResourceStateRoutine_F77D ; CPU:$CB26 PRG:0B26 20 7D F7 LDA #$59 ; CPU:$CB29 PRG:0B29 A9 59 LDX #$C0 ; CPU:$CB2B PRG:0B2B A2 C0 JSR ProcessResourceStateRoutine_F77D ; CPU:$CB2D PRG:0B2D 20 7D F7 LDA #$26 ; CPU:$CB30 PRG:0B30 A9 26 LDY $8F ; CPU:$CB32 PRG:0B32 A4 8F BEQ UpdatePlayerStateOnZero_CB3F ; CPU:$CB34 PRG:0B34 F0 09 LDA #$7E ; CPU:$CB36 PRG:0B36 A9 7E LDX #$C0 ; CPU:$CB38 PRG:0B38 A2 C0 JSR ProcessResourceStateRoutine_F77D ; CPU:$CB3A PRG:0B3A 20 7D F7 LDA #$28 ; CPU:$CB3D PRG:0B3D A9 28 UpdatePlayerStateOnZero_CB3F: JSR ProcessResourceStateRoutine_F31A ; CPU:$CB3F PRG:0B3F 20 1A F3 LDX #$00 ; CPU:$CB42 PRG:0B42 A2 00 JSR ProcessObjectStateRoutine_D42C ; CPU:$CB44 PRG:0B44 20 2C D4 LDX $4C ; CPU:$CB47 PRG:0B47 A6 4C JSR ProcessObjectStateRoutine_D42C ; CPU:$CB49 PRG:0B49 20 2C D4 LDX #$11 ; CPU:$CB4C PRG:0B4C A2 11 LDA $90 ; CPU:$CB4E PRG:0B4E A5 90 CMP #$01 ; CPU:$CB50 PRG:0B50 C9 01 BEQ UpdatePlayerStateOnZero_CB56 ; CPU:$CB52 PRG:0B52 F0 02 STX $90 ; CPU:$CB54 PRG:0B54 86 90 UpdatePlayerStateOnZero_CB56: LDA $91 ; CPU:$CB56 PRG:0B56 A5 91 CMP #$01 ; CPU:$CB58 PRG:0B58 C9 01 BEQ UpdateGameStateOnZero_CB5E ; CPU:$CB5A PRG:0B5A F0 02 STX $91 ; CPU:$CB5C PRG:0B5C 86 91 UpdateGameStateOnZero_CB5E: JSR RunGameTaskRoutine_C8D6 ; CPU:$CB5E PRG:0B5E 20 D6 C8 JSR RunGameTaskRoutine_C8B9 ; CPU:$CB61 PRG:0B61 20 B9 C8 LDA #$08 ; CPU:$CB64 PRG:0B64 A9 08 STA $0495 ; CPU:$CB66 PRG:0B66 8D 95 04 LDA #$18 ; CPU:$CB69 PRG:0B69 A9 18 STA $04B5 ; CPU:$CB6B PRG:0B6B 8D B5 04 LDA #$28 ; CPU:$CB6E PRG:0B6E A9 28 STA $04D5 ; CPU:$CB70 PRG:0B70 8D D5 04 LDA #$38 ; CPU:$CB73 PRG:0B73 A9 38 STA $04F5 ; CPU:$CB75 PRG:0B75 8D F5 04 LDA #$02 ; CPU:$CB78 PRG:0B78 A9 02 STA $FB ; CPU:$CB7A PRG:0B7A 85 FB JSR UpdateGameStateRoutine_C3BC ; CPU:$CB7C PRG:0B7C 20 BC C3 LDA $8D ; CPU:$CB7F PRG:0B7F A5 8D BNE CorePathOnNonZero_CB85 ; CPU:$CB81 PRG:0B81 D0 02 LDA #$21 ; CPU:$CB83 PRG:0B83 A9 21 CorePathOnNonZero_CB85: STA $92 ; CPU:$CB85 PRG:0B85 85 92 RunGameTaskDispatch_CB87: PLA ; CPU:$CB87 PRG:0B87 68 PLA ; CPU:$CB88 PRG:0B88 68 JMP NMIReadPPUStatus_C234 ; CPU:$CB89 PRG:0B89 4C 34 C2 ;------------------------------------------------------------ ; RunGameTaskRoutine_CB8C ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_CB8C: JSR RunGameTaskRoutine_C8AA ; CPU:$CB8C PRG:0B8C 20 AA C8 LDY #$01 ; CPU:$CB8F PRG:0B8F A0 01 LDA ($04),Y ; CPU:$CB91 PRG:0B91 B1 04 CLC ; CPU:$CB93 PRG:0B93 18 ADC $04 ; CPU:$CB94 PRG:0B94 65 04 STA $00 ; CPU:$CB96 PRG:0B96 85 00 LDA #$00 ; CPU:$CB98 PRG:0B98 A9 00 ADC $05 ; CPU:$CB9A PRG:0B9A 65 05 STA $01 ; CPU:$CB9C PRG:0B9C 85 01 JSR ProcessResourceStateDispatch_F2EA ; CPU:$CB9E PRG:0B9E 20 EA F2 INY ; CPU:$CBA1 PRG:0BA1 C8 JSR ObjectPath_DF2F ; CPU:$CBA2 PRG:0BA2 20 2F DF RTS ; CPU:$CBA5 PRG:0BA5 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_CBA6 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_CBA6: LDA #$00 ; CPU:$CBA6 PRG:0BA6 A9 00 ;------------------------------------------------------------ ; RunGameTaskRoutine_CBA8 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_CBA8: STY $01 ; CPU:$CBA8 PRG:0BA8 84 01 LDY #$00 ; CPU:$CBAA PRG:0BAA A0 00 STY $00 ; CPU:$CBAC PRG:0BAC 84 00 CorePathLoop_CBAE: STA ($00),Y ; CPU:$CBAE PRG:0BAE 91 00 DEY ; CPU:$CBB0 PRG:0BB0 88 BNE CorePathLoop_CBAE ; CPU:$CBB1 PRG:0BB1 D0 FB DEC $01 ; CPU:$CBB3 PRG:0BB3 C6 01 DEX ; CPU:$CBB5 PRG:0BB5 CA BNE CorePathLoop_CBAE ; CPU:$CBB6 PRG:0BB6 D0 F6 RTS ; CPU:$CBB8 PRG:0BB8 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_CBB9 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_CBB9: LDA #$00 ; CPU:$CBB9 PRG:0BB9 A9 00 STA $08 ; CPU:$CBBB PRG:0BBB 85 08 LDA #$04 ; CPU:$CBBD PRG:0BBD A9 04 STA $09 ; CPU:$CBBF PRG:0BBF 85 09 LDA #$00 ; CPU:$CBC1 PRG:0BC1 A9 00 STA $0A ; CPU:$CBC3 PRG:0BC3 85 0A RTS ; CPU:$CBC5 PRG:0BC5 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_CBC6 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_CBC6: LDA #$40 ; CPU:$CBC6 PRG:0BC6 A9 40 STA $08 ; CPU:$CBC8 PRG:0BC8 85 08 LDA #$04 ; CPU:$CBCA PRG:0BCA A9 04 STA $09 ; CPU:$CBCC PRG:0BCC 85 09 LDA #$01 ; CPU:$CBCE PRG:0BCE A9 01 STA $0A ; CPU:$CBD0 PRG:0BD0 85 0A RTS ; CPU:$CBD2 PRG:0BD2 60 ;------------------------------------------------------------ ; RunGameTaskRoutine_CBD3 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ RunGameTaskRoutine_CBD3: CLC ; CPU:$CBD3 PRG:0BD3 18 LDA #$20 ; CPU:$CBD4 PRG:0BD4 A9 20 ADC $00,X ; CPU:$CBD6 PRG:0BD6 75 00 STA $00,X ; CPU:$CBD8 PRG:0BD8 95 00 LDA #$00 ; CPU:$CBDA PRG:0BDA A9 00 ADC $01,X ; CPU:$CBDC PRG:0BDC 75 01 STA $01,X ; CPU:$CBDE PRG:0BDE 95 01 DEC $0F ; CPU:$CBE0 PRG:0BE0 C6 0F RTS ; CPU:$CBE2 PRG:0BE2 60 ;------------------------------------------------------------ ; ProcessCurrentObjectRoutine_CBE3 ; ; Global: ; First-pass core-game entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Game state, object pointers, and frame state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessCurrentObjectRoutine_CBE3: LDY #$10 ; CPU:$CBE3 PRG:0BE3 A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$CBE5 PRG:0BE5 B1 08 STA $06 ; CPU:$CBE7 PRG:0BE7 85 06 LDA $06 ; CPU:$CBE9 PRG:0BE9 A5 06 BPL CorePathOnPositive_CBFA ; CPU:$CBEB PRG:0BEB 10 0D LDX $0A ; CPU:$CBED PRG:0BED A6 0A LDA #$00 ; CPU:$CBEF PRG:0BEF A9 00 STA $90,X ; CPU:$CBF1 PRG:0BF1 95 90 JSR UpdateObjectBufferRoutine_E468 ; CPU:$CBF3 PRG:0BF3 20 68 E4 JSR ReadObjectRecordRoutine_E539 ; CPU:$CBF6 PRG:0BF6 20 39 E5 RTS ; CPU:$CBF9 PRG:0BF9 60 CorePathOnPositive_CBFA: CMP #$30 ; CPU:$CBFA PRG:0BFA C9 30 BCS CorePathOnCarry_CC23 ; CPU:$CBFC PRG:0BFC B0 25 JSR ReadObjectRecordRoutine_E06A ; CPU:$CBFE PRG:0BFE 20 6A E0 LDA $0A ; CPU:$CC01 PRG:0C01 A5 0A JSR ReadObjectRecordRoutine_E5AA ; CPU:$CC03 PRG:0C03 20 AA E5 BCS CorePathContinue_CC10 ; CPU:$CC06 PRG:0C06 B0 08 JSR ProcessObjectStateRoutine_E17F ; CPU:$CC08 PRG:0C08 20 7F E1 BCC CorePathContinue_CC10 ; CPU:$CC0B PRG:0C0B 90 03 JSR ProcessObjectStateRoutine_E1BF ; CPU:$CC0D PRG:0C0D 20 BF E1 CorePathContinue_CC10: JSR PrepareObjectMovementContext ; CPU:$CC10 PRG:0C10 20 A8 CC JSR ReadObjectRecordRoutine_E351 ; CPU:$CC13 PRG:0C13 20 51 E3 BCC CorePathOnNoCarry_CC22 ; CPU:$CC16 PRG:0C16 90 0A JSR UpdateObjectRecordRoutine_E3A7 ; CPU:$CC18 PRG:0C18 20 A7 E3 LDA #$04 ; CPU:$CC1B PRG:0C1B A9 04 STA $FC ; CPU:$CC1D PRG:0C1D 85 FC RunGameTaskDispatch_CC1F: JSR PrepareObjectMovementContext ; CPU:$CC1F PRG:0C1F 20 A8 CC CorePathOnNoCarry_CC22: RTS ; CPU:$CC22 PRG:0C22 60 CorePathOnCarry_CC23: JSR ProcessObjectStateRoutine_E28F ; CPU:$CC23 PRG:0C23 20 8F E2 JSR ReadObjectRecordRoutine_E06A ; CPU:$CC26 PRG:0C26 20 6A E0 JMP RunGameTaskDispatch_CC1F ; CPU:$CC29 PRG:0C29 4C 1F CC .byte $00, $00, $02, $02, $00, $00, $00, $00, $02, $02, $02, $02, $00, $80, $40, $00 ; CPU:$CC2C PRG:0C2C 0B .byte $00, $40, $80, $C0 ; CPU:$CC3C PRG:0C3C 0B ;------------------------------------------------------------ ; Movement tables and object-engine setup ; CPU $CC40-$CCB7 ; PRG $0C40-$0CB7 ;------------------------------------------------------------ MovementTables: .byte $00, $80, $40, $C0, $80, $00, $00, $40, $00, $80, $40, $00, $00, $40, $80, $C0 ; CPU:$CC40 PRG:0C40 0B .byte $00, $80, $40, $C0, $C0, $40, $80, $C0, $00, $00, $00, $00, $04, $04, $04, $04 ; CPU:$CC50 PRG:0C50 0B .byte $10, $F8, $10, $F8, $00, $08, $F8, $F8, $00, $00, $00, $00, $0F, $F9, $0F, $F9 ; CPU:$CC60 PRG:0C60 0B .byte $04, $04, $04, $04, $F8, $F8, $00, $08, $00, $00, $00, $00, $00, $00, $00, $00 ; CPU:$CC70 PRG:0C70 0B .byte $01, $01, $01, $01, $F8, $10, $04, $04, $F8, $F8, $10, $10, $04, $04, $04, $04 ; CPU:$CC80 PRG:0C80 0B .byte $00, $08, $10, $10, $04, $04, $F8, $10, $04, $04, $04, $04, $10, $10, $F8, $F8 ; CPU:$CC90 PRG:0C90 0B .byte $10, $10, $00, $08, $04, $05, $08, $09 ; CPU:$CCA0 PRG:0CA0 0B ;------------------------------------------------------------ ; PrepareObjectMovementContext ; ; Global: ; Prepares an index and object-state selector before falling ; through into ObjectEngineCodeAndTables at CPU $CCB8. ; ; Parameters: ; $06 supplies a two-bit selector. ; ; Returns: ; X = $03 normally, or $0C when the selector is at least two. ; Y = $10. ; $00 = $06 & $03. ;------------------------------------------------------------ PrepareObjectMovementContext: LDX #$03 ; CPU:$CCA8 PRG:0CA8 A2 03 LDA $06 ; CPU:$CCAA PRG:0CAA A5 06 AND #$03 ; CPU:$CCAC PRG:0CAC 29 03 STA $00 ; CPU:$CCAE PRG:0CAE 85 00 CMP #$02 ; CPU:$CCB0 PRG:0CB0 C9 02 BCC @SetObjectFieldOffset ; CPU:$CCB2 PRG:0CB2 90 02 LDX #$0C ; CPU:$CCB4 PRG:0CB4 A2 0C @SetObjectFieldOffset: LDY #$10 ; CPU:$CCB6 PRG:0CB6 A0 10 ; Falls through to ObjectEngineCodeAndTables at CPU $CCB8. ;------------------------------------------------------------ ; Object engine code with embedded lookup tables ; CPU $CCB8-$E77F ; PRG $0CB8-$277F ; ; Pass 1 recursively traced from verified entry roots in this region. ; Direct branches, jumps, and subroutine calls are decoded. ; Bytes not reached by that trace remain explicit .byte data. ;------------------------------------------------------------ ;------------------------------------------------------------ ; ObjectEngineCodeAndTables ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectEngineCodeAndTables: LDA (CurrentObjectPtrLo),Y ; CPU:$CCB8 PRG:0CB8 B1 08 BMI ObjectPathContinue_CCCC ; CPU:$CCBA PRG:0CBA 30 10 LDY #$1B ; CPU:$CCBC PRG:0CBC A0 1B LDA (CurrentObjectPtrLo),Y ; CPU:$CCBE PRG:0CBE B1 08 CMP #$50 ; CPU:$CCC0 PRG:0CC0 C9 50 BCS ObjectPathContinue_CCE9 ; CPU:$CCC2 PRG:0CC2 B0 25 CMP #$40 ; CPU:$CCC4 PRG:0CC4 C9 40 BCS ObjectPathContinue_CCCC ; CPU:$CCC6 PRG:0CC6 B0 04 CMP #$30 ; CPU:$CCC8 PRG:0CC8 C9 30 BCS ObjectPathOnCarry_CCEF ; CPU:$CCCA PRG:0CCA B0 23 ObjectPathContinue_CCCC: TXA ; CPU:$CCCC PRG:0CCC 8A LDY $0A ; CPU:$CCCD PRG:0CCD A4 0A AND a:$0046,Y ; CPU:$CCCF PRG:0CCF 39 46 00 BEQ ObjectPathContinue_CCE9 ; CPU:$CCD2 PRG:0CD2 F0 15 JSR ProcessObjectStateRoutine_CD54 ; CPU:$CCD4 PRG:0CD4 20 54 CD STX $07 ; CPU:$CCD7 PRG:0CD7 86 07 ObjectPathLoop_CCD9: JSR UpdateObjectRecordRoutine_CCF7 ; CPU:$CCD9 PRG:0CD9 20 F7 CC LDA #$00 ; CPU:$CCDC PRG:0CDC A9 00 UpdateObjectRecordLoop_CCDE: LDY #$20 ; CPU:$CCDE PRG:0CDE A0 20 STA (CurrentObjectPtrLo),Y ; CPU:$CCE0 PRG:0CE0 91 08 JSR UpdateObjectRecordRoutine_CD1E ; CPU:$CCE2 PRG:0CE2 20 1E CD JSR UpdateObjectRecordRoutine_CD45 ; CPU:$CCE5 PRG:0CE5 20 45 CD RTS ; CPU:$CCE8 PRG:0CE8 60 ObjectPathContinue_CCE9: LDX $00 ; CPU:$CCE9 PRG:0CE9 A6 00 LDA #$01 ; CPU:$CCEB PRG:0CEB A9 01 BNE UpdateObjectRecordLoop_CCDE ; CPU:$CCED PRG:0CED D0 EF ObjectPathOnCarry_CCEF: AND #$03 ; CPU:$CCEF PRG:0CEF 29 03 CLC ; CPU:$CCF1 PRG:0CF1 18 ADC #$0C ; CPU:$CCF2 PRG:0CF2 69 0C TAX ; CPU:$CCF4 PRG:0CF4 AA BNE ObjectPathLoop_CCD9 ; CPU:$CCF5 PRG:0CF5 D0 E2 ;------------------------------------------------------------ ; UpdateObjectRecordRoutine_CCF7 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecordRoutine_CCF7: CLC ; CPU:$CCF7 PRG:0CF7 18 LDY #$01 ; CPU:$CCF8 PRG:0CF8 A0 01 LDA $CC58,X ; CPU:$CCFA PRG:0CFA BD 58 CC ADC (CurrentObjectPtrLo),Y ; CPU:$CCFD PRG:0CFD 71 08 LDY #$21 ; CPU:$CCFF PRG:0CFF A0 21 STA (CurrentObjectPtrLo),Y ; CPU:$CD01 PRG:0D01 91 08 CLC ; CPU:$CD03 PRG:0D03 18 LDY #$03 ; CPU:$CD04 PRG:0D04 A0 03 LDA $CC68,X ; CPU:$CD06 PRG:0D06 BD 68 CC ADC (CurrentObjectPtrLo),Y ; CPU:$CD09 PRG:0D09 71 08 LDY #$23 ; CPU:$CD0B PRG:0D0B A0 23 STA (CurrentObjectPtrLo),Y ; CPU:$CD0D PRG:0D0D 91 08 LDY #$25 ; CPU:$CD0F PRG:0D0F A0 25 LDA $CC78,X ; CPU:$CD11 PRG:0D11 BD 78 CC STA (CurrentObjectPtrLo),Y ; CPU:$CD14 PRG:0D14 91 08 LDY #$28 ; CPU:$CD16 PRG:0D16 A0 28 LDA $CC38,X ; CPU:$CD18 PRG:0D18 BD 38 CC STA (CurrentObjectPtrLo),Y ; CPU:$CD1B PRG:0D1B 91 08 RTS ; CPU:$CD1D PRG:0D1D 60 ;------------------------------------------------------------ ; UpdateObjectRecordRoutine_CD1E ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecordRoutine_CD1E: CLC ; CPU:$CD1E PRG:0D1E 18 LDY #$01 ; CPU:$CD1F PRG:0D1F A0 01 LDA $CC84,X ; CPU:$CD21 PRG:0D21 BD 84 CC ADC (CurrentObjectPtrLo),Y ; CPU:$CD24 PRG:0D24 71 08 LDY #$31 ; CPU:$CD26 PRG:0D26 A0 31 STA (CurrentObjectPtrLo),Y ; CPU:$CD28 PRG:0D28 91 08 CLC ; CPU:$CD2A PRG:0D2A 18 LDY #$03 ; CPU:$CD2B PRG:0D2B A0 03 LDA $CC94,X ; CPU:$CD2D PRG:0D2D BD 94 CC ADC (CurrentObjectPtrLo),Y ; CPU:$CD30 PRG:0D30 71 08 LDY #$33 ; CPU:$CD32 PRG:0D32 A0 33 STA (CurrentObjectPtrLo),Y ; CPU:$CD34 PRG:0D34 91 08 LDY #$35 ; CPU:$CD36 PRG:0D36 A0 35 LDA $CC2C,X ; CPU:$CD38 PRG:0D38 BD 2C CC STA (CurrentObjectPtrLo),Y ; CPU:$CD3B PRG:0D3B 91 08 LDY #$38 ; CPU:$CD3D PRG:0D3D A0 38 LDA $CC48,X ; CPU:$CD3F PRG:0D3F BD 48 CC STA (CurrentObjectPtrLo),Y ; CPU:$CD42 PRG:0D42 91 08 RTS ; CPU:$CD44 PRG:0D44 60 ;------------------------------------------------------------ ; UpdateObjectRecordRoutine_CD45 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecordRoutine_CD45: LDY #$05 ; CPU:$CD45 PRG:0D45 A0 05 LDA $CC2C,X ; CPU:$CD47 PRG:0D47 BD 2C CC STA (CurrentObjectPtrLo),Y ; CPU:$CD4A PRG:0D4A 91 08 LDY #$08 ; CPU:$CD4C PRG:0D4C A0 08 LDA $CC38,X ; CPU:$CD4E PRG:0D4E BD 38 CC STA (CurrentObjectPtrLo),Y ; CPU:$CD51 PRG:0D51 91 08 RTS ; CPU:$CD53 PRG:0D53 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_CD54 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_CD54: LDX #$00 ; CPU:$CD54 PRG:0D54 A2 00 CMP #$04 ; CPU:$CD56 PRG:0D56 C9 04 BCC ObjectPathOnNoCarry_CD5C ; CPU:$CD58 PRG:0D58 90 02 LDX #$03 ; CPU:$CD5A PRG:0D5A A2 03 ObjectPathOnNoCarry_CD5C: CPX $00 ; CPU:$CD5C PRG:0D5C E4 00 BEQ ObjectPathOnZero_CD62 ; CPU:$CD5E PRG:0D5E F0 02 ORA #$10 ; CPU:$CD60 PRG:0D60 09 10 ObjectPathOnZero_CD62: LDY #$FF ; CPU:$CD62 PRG:0D62 A0 FF ObjectPathLoop_CD64: LSR A ; CPU:$CD64 PRG:0D64 4A INY ; CPU:$CD65 PRG:0D65 C8 BCC ObjectPathLoop_CD64 ; CPU:$CD66 PRG:0D66 90 FC LDX $CCA4,Y ; CPU:$CD68 PRG:0D68 BE A4 CC TAY ; CPU:$CD6B PRG:0D6B A8 BEQ ObjectPathOnZero_CD70 ; CPU:$CD6C PRG:0D6C F0 02 INX ; CPU:$CD6E PRG:0D6E E8 INX ; CPU:$CD6F PRG:0D6F E8 ObjectPathOnZero_CD70: RTS ; CPU:$CD70 PRG:0D70 60 .byte $21, $24, $24, $12, $24, $24, $71, $74, $CD, $CD ; CPU:$CD71 PRG:0D71 0B ;------------------------------------------------------------ ; ReadObjectRecord_CD7B ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecord_CD7B: LDX $0A ; CPU:$CD7B PRG:0D7B A6 0A LDA $5A,X ; CPU:$CD7D PRG:0D7D B5 5A BNE ObjectPathContinue_CDCD ; CPU:$CD7F PRG:0D7F D0 4C CLC ; CPU:$CD81 PRG:0D81 18 LDY #$01 ; CPU:$CD82 PRG:0D82 A0 01 LDA #$06 ; CPU:$CD84 PRG:0D84 A9 06 ADC (CurrentObjectPtrLo),Y ; CPU:$CD86 PRG:0D86 71 08 STA $00 ; CPU:$CD88 PRG:0D88 85 00 CLC ; CPU:$CD8A PRG:0D8A 18 LDY #$03 ; CPU:$CD8B PRG:0D8B A0 03 LDA #$06 ; CPU:$CD8D PRG:0D8D A9 06 ADC (CurrentObjectPtrLo),Y ; CPU:$CD8F PRG:0D8F 71 08 STA $01 ; CPU:$CD91 PRG:0D91 85 01 JSR UpdateObjectBufferRoutine_E0DF ; CPU:$CD93 PRG:0D93 20 DF E0 LDA $0A ; CPU:$CD96 PRG:0D96 A5 0A CLC ; CPU:$CD98 PRG:0D98 18 ADC #$04 ; CPU:$CD99 PRG:0D99 69 04 JSR ProcessObjectStateRoutine_E0B2 ; CPU:$CD9B PRG:0D9B 20 B2 E0 BCS ObjectPathContinue_CDCD ; CPU:$CD9E PRG:0D9E B0 2D LDY #$00 ; CPU:$CDA0 PRG:0DA0 A0 00 LDX #$80 ; CPU:$CDA2 PRG:0DA2 A2 80 CMP #$FB ; CPU:$CDA4 PRG:0DA4 C9 FB BEQ ObjectPathContinue_CDCE ; CPU:$CDA6 PRG:0DA6 F0 26 INY ; CPU:$CDA8 PRG:0DA8 C8 CMP #$FA ; CPU:$CDA9 PRG:0DA9 C9 FA BEQ ObjectPathContinue_CDCE ; CPU:$CDAB PRG:0DAB F0 21 DEY ; CPU:$CDAD PRG:0DAD 88 LDX #$00 ; CPU:$CDAE PRG:0DAE A2 00 CMP #$D2 ; CPU:$CDB0 PRG:0DB0 C9 D2 BCS ObjectPathOnCarry_CDBE ; CPU:$CDB2 PRG:0DB2 B0 0A CMP #$D0 ; CPU:$CDB4 PRG:0DB4 C9 D0 BCS ObjectPathContinue_CDCE ; CPU:$CDB6 PRG:0DB6 B0 16 INY ; CPU:$CDB8 PRG:0DB8 C8 CMP #$CE ; CPU:$CDB9 PRG:0DB9 C9 CE BCS ObjectPathContinue_CDCE ; CPU:$CDBB PRG:0DBB B0 11 DEY ; CPU:$CDBD PRG:0DBD 88 ObjectPathOnCarry_CDBE: LDX #$04 ; CPU:$CDBE PRG:0DBE A2 04 CMP #$F9 ; CPU:$CDC0 PRG:0DC0 C9 F9 BCS ObjectPathContinue_CDCD ; CPU:$CDC2 PRG:0DC2 B0 09 CMP #$F7 ; CPU:$CDC4 PRG:0DC4 C9 F7 BCS ObjectPathContinue_CDCE ; CPU:$CDC6 PRG:0DC6 B0 06 INY ; CPU:$CDC8 PRG:0DC8 C8 CMP #$F5 ; CPU:$CDC9 PRG:0DC9 C9 F5 BCS ObjectPathContinue_CDCE ; CPU:$CDCB PRG:0DCB B0 01 ObjectPathContinue_CDCD: RTS ; CPU:$CDCD PRG:0DCD 60 ObjectPathContinue_CDCE: STY $0D ; CPU:$CDCE PRG:0DCE 84 0D STX $0E ; CPU:$CDD0 PRG:0DD0 86 0E LDX $0A ; CPU:$CDD2 PRG:0DD2 A6 0A LDA #$08 ; CPU:$CDD4 PRG:0DD4 A9 08 STA $5A,X ; CPU:$CDD6 PRG:0DD6 95 5A LDX #$01 ; CPU:$CDD8 PRG:0DD8 A2 01 LDA $8F ; CPU:$CDDA PRG:0DDA A5 8F BNE UpdateObjectBufferContinue_CDE4 ; CPU:$CDDC PRG:0DDC D0 06 LDA $0E ; CPU:$CDDE PRG:0DDE A5 0E BPL UpdateObjectBufferContinue_CDE4 ; CPU:$CDE0 PRG:0DE0 10 02 LDX #$28 ; CPU:$CDE2 PRG:0DE2 A2 28 UpdateObjectBufferContinue_CDE4: STX $07 ; CPU:$CDE4 PRG:0DE4 86 07 JSR ProcessObjectStateRoutine_CE50 ; CPU:$CDE6 PRG:0DE6 20 50 CE BCS ObjectPathContinue_CE33 ; CPU:$CDE9 PRG:0DE9 B0 48 LDA WorkPtr1Lo ; CPU:$CDEB PRG:0DEB A5 02 STA $01 ; CPU:$CDED PRG:0DED 85 01 LDA $03 ; CPU:$CDEF PRG:0DEF A5 03 STA $00 ; CPU:$CDF1 PRG:0DF1 85 00 LDY $0D ; CPU:$CDF3 PRG:0DF3 A4 0D LDA $CD77,Y ; CPU:$CDF5 PRG:0DF5 B9 77 CD STA $02 ; CPU:$CDF8 PRG:0DF8 85 02 LDA $CD79,Y ; CPU:$CDFA PRG:0DFA B9 79 CD STA $03 ; CPU:$CDFD PRG:0DFD 85 03 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$CDFF PRG:0DFF 20 A1 F3 LDA #$80 ; CPU:$CE02 PRG:0E02 A9 80 STA $FF ; CPU:$CE04 PRG:0E04 85 FF LDX $0A ; CPU:$CE06 PRG:0E06 A6 0A LDA #$01 ; CPU:$CE08 PRG:0E08 A9 01 STA $00 ; CPU:$CE0A PRG:0E0A 85 00 LDA $0E ; CPU:$CE0C PRG:0E0C A5 0E CMP #$04 ; CPU:$CE0E PRG:0E0E C9 04 BEQ ObjectPathOnZero_CE34 ; CPU:$CE10 PRG:0E10 F0 22 INC $D4,X ; CPU:$CE12 PRG:0E12 F6 D4 LDA #$06 ; CPU:$CE14 PRG:0E14 A9 06 STA $01 ; CPU:$CE16 PRG:0E16 85 01 JSR ProcessResourceStateRoutine_F408 ; CPU:$CE18 PRG:0E18 20 08 F4 LDA $3F ; CPU:$CE1B PRG:0E1B A5 3F BNE ProcessObjectStateDispatch_CE2A ; CPU:$CE1D PRG:0E1D D0 0B LDA $8D ; CPU:$CE1F PRG:0E1F A5 8D BEQ ObjectPathOnZero_CE26 ; CPU:$CE21 PRG:0E21 F0 03 JMP RunGameTaskRoutine_C3E4 ; CPU:$CE23 PRG:0E23 4C E4 C3 ObjectPathOnZero_CE26: LDA #$23 ; CPU:$CE26 PRG:0E26 A9 23 STA $78 ; CPU:$CE28 PRG:0E28 85 78 ProcessObjectStateDispatch_CE2A: LDA $8F ; CPU:$CE2A PRG:0E2A A5 8F BNE ObjectPathContinue_CE33 ; CPU:$CE2C PRG:0E2C D0 05 LDA #$68 ; CPU:$CE2E PRG:0E2E A9 68 JSR ProcessResourceStateRoutine_F31A ; CPU:$CE30 PRG:0E30 20 1A F3 ObjectPathContinue_CE33: RTS ; CPU:$CE33 PRG:0E33 60 ObjectPathOnZero_CE34: LDA $8E ; CPU:$CE34 PRG:0E34 A5 8E BEQ ObjectPathOnZero_CE41 ; CPU:$CE36 PRG:0E36 F0 09 DEC $D4,X ; CPU:$CE38 PRG:0E38 D6 D4 LDA #$06 ; CPU:$CE3A PRG:0E3A A9 06 STA $01 ; CPU:$CE3C PRG:0E3C 85 01 JSR ProcessResourceStateRoutine_F40C ; CPU:$CE3E PRG:0E3E 20 0C F4 ObjectPathOnZero_CE41: JMP ProcessObjectStateDispatch_CE2A ; CPU:$CE41 PRG:0E41 4C 2A CE .byte $21, $00, $00, $10, $08, $12, $00, $00, $08, $10, $40, $80 ; CPU:$CE44 PRG:0E44 0B ;------------------------------------------------------------ ; ProcessObjectStateRoutine_CE50 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_CE50: LDA #$00 ; CPU:$CE50 PRG:0E50 A9 00 STA $04 ; CPU:$CE52 PRG:0E52 85 04 STA $0B ; CPU:$CE54 PRG:0E54 85 0B LDA #$05 ; CPU:$CE56 PRG:0E56 A9 05 STA $05 ; CPU:$CE58 PRG:0E58 85 05 STA $0C ; CPU:$CE5A PRG:0E5A 85 0C LDA #$07 ; CPU:$CE5C PRG:0E5C A9 07 STA $0F ; CPU:$CE5E PRG:0E5E 85 0F ObjectPathLoop_CE60: LDY #$10 ; CPU:$CE60 PRG:0E60 A0 10 LDA ($04),Y ; CPU:$CE62 PRG:0E62 B1 04 BEQ ObjectPathOnZero_CE6F ; CPU:$CE64 PRG:0E64 F0 09 LDX #$04 ; CPU:$CE66 PRG:0E66 A2 04 JSR RunGameTaskRoutine_CBD3 ; CPU:$CE68 PRG:0E68 20 D3 CB BPL ObjectPathLoop_CE60 ; CPU:$CE6B PRG:0E6B 10 F3 ObjectPathLoop_CE6D: SEC ; CPU:$CE6D PRG:0E6D 38 RTS ; CPU:$CE6E PRG:0E6E 60 ObjectPathOnZero_CE6F: LDA WorkPtr1Lo ; CPU:$CE6F PRG:0E6F A5 02 BEQ ObjectPathOnZero_CE9D ; CPU:$CE71 PRG:0E71 F0 2A JSR UpdateObjectBufferRoutine_E0F9 ; CPU:$CE73 PRG:0E73 20 F9 E0 LDA #$07 ; CPU:$CE76 PRG:0E76 A9 07 STA $0F ; CPU:$CE78 PRG:0E78 85 0F ObjectPathLoop_CE7A: LDY #$10 ; CPU:$CE7A PRG:0E7A A0 10 LDA ($0B),Y ; CPU:$CE7C PRG:0E7C B1 0B BEQ ObjectPathContinue_CE96 ; CPU:$CE7E PRG:0E7E F0 16 LDY #$12 ; CPU:$CE80 PRG:0E80 A0 12 LDA ($0B),Y ; CPU:$CE82 PRG:0E82 B1 0B BEQ ObjectPathContinue_CE96 ; CPU:$CE84 PRG:0E84 F0 10 LDY #$01 ; CPU:$CE86 PRG:0E86 A0 01 LDA ($0B),Y ; CPU:$CE88 PRG:0E88 B1 0B CMP $00 ; CPU:$CE8A PRG:0E8A C5 00 BNE ObjectPathContinue_CE96 ; CPU:$CE8C PRG:0E8C D0 08 LDY #$03 ; CPU:$CE8E PRG:0E8E A0 03 LDA ($0B),Y ; CPU:$CE90 PRG:0E90 B1 0B CMP $01 ; CPU:$CE92 PRG:0E92 C5 01 BEQ ObjectPathLoop_CE6D ; CPU:$CE94 PRG:0E94 F0 D7 ObjectPathContinue_CE96: LDX #$0B ; CPU:$CE96 PRG:0E96 A2 0B JSR RunGameTaskRoutine_CBD3 ; CPU:$CE98 PRG:0E98 20 D3 CB BPL ObjectPathLoop_CE7A ; CPU:$CE9B PRG:0E9B 10 DD ObjectPathOnZero_CE9D: LDY #$00 ; CPU:$CE9D PRG:0E9D A0 00 LDA #$00 ; CPU:$CE9F PRG:0E9F A9 00 STA ($04),Y ; CPU:$CEA1 PRG:0EA1 91 04 INY ; CPU:$CEA3 PRG:0EA3 C8 LDA WorkPtr0Lo ; CPU:$CEA4 PRG:0EA4 A5 00 STA ($04),Y ; CPU:$CEA6 PRG:0EA6 91 04 INY ; CPU:$CEA8 PRG:0EA8 C8 LDA #$00 ; CPU:$CEA9 PRG:0EA9 A9 00 STA ($04),Y ; CPU:$CEAB PRG:0EAB 91 04 INY ; CPU:$CEAD PRG:0EAD C8 LDA WorkPtr0Hi ; CPU:$CEAE PRG:0EAE A5 01 STA ($04),Y ; CPU:$CEB0 PRG:0EB0 91 04 INY ; CPU:$CEB2 PRG:0EB2 C8 LDA #$00 ; CPU:$CEB3 PRG:0EB3 A9 00 STA ($04),Y ; CPU:$CEB5 PRG:0EB5 91 04 LDY #$14 ; CPU:$CEB7 PRG:0EB7 A0 14 LDA $0E ; CPU:$CEB9 PRG:0EB9 A5 0E STA ($04),Y ; CPU:$CEBB PRG:0EBB 91 04 AND #$0F ; CPU:$CEBD PRG:0EBD 29 0F LDX #$00 ; CPU:$CEBF PRG:0EBF A2 00 LDY $0D ; CPU:$CEC1 PRG:0EC1 A4 0D BEQ ObjectPathOnZero_CECA ; CPU:$CEC3 PRG:0EC3 F0 05 CLC ; CPU:$CEC5 PRG:0EC5 18 ADC #$0A ; CPU:$CEC6 PRG:0EC6 69 0A LDX #$05 ; CPU:$CEC8 PRG:0EC8 A2 05 ObjectPathOnZero_CECA: LDY #$05 ; CPU:$CECA PRG:0ECA A0 05 STA ($04),Y ; CPU:$CECC PRG:0ECC 91 04 LDY #$0A ; CPU:$CECE PRG:0ECE A0 0A LDA $CE44,X ; CPU:$CED0 PRG:0ED0 BD 44 CE STA ($04),Y ; CPU:$CED3 PRG:0ED3 91 04 LDY #$0C ; CPU:$CED5 PRG:0ED5 A0 0C ObjectPathLoop_CED7: INX ; CPU:$CED7 PRG:0ED7 E8 LDA $CE44,X ; CPU:$CED8 PRG:0ED8 BD 44 CE STA ($04),Y ; CPU:$CEDB PRG:0EDB 91 04 INY ; CPU:$CEDD PRG:0EDD C8 CPY #$10 ; CPU:$CEDE PRG:0EDE C0 10 BNE ObjectPathLoop_CED7 ; CPU:$CEE0 PRG:0EE0 D0 F5 LDY #$10 ; CPU:$CEE2 PRG:0EE2 A0 10 LDA $08 ; CPU:$CEE4 PRG:0EE4 A5 08 STA $00 ; CPU:$CEE6 PRG:0EE6 85 00 LDA $09 ; CPU:$CEE8 PRG:0EE8 A5 09 STA $01 ; CPU:$CEEA PRG:0EEA 85 01 JSR ProcessObjectStateRoutine_D94D ; CPU:$CEEC PRG:0EEC 20 4D D9 ORA #$10 ; CPU:$CEEF PRG:0EEF 09 10 STA ($04),Y ; CPU:$CEF1 PRG:0EF1 91 04 AND #$01 ; CPU:$CEF3 PRG:0EF3 29 01 BEQ ObjectPathContinue_CF02 ; CPU:$CEF5 PRG:0EF5 F0 0B LDA #$00 ; CPU:$CEF7 PRG:0EF7 A9 00 LDY $02 ; CPU:$CEF9 PRG:0EF9 A4 02 BNE ObjectPathContinue_CF02 ; CPU:$CEFB PRG:0EFB D0 05 LDY $0D ; CPU:$CEFD PRG:0EFD A4 0D LDA $CE4E,Y ; CPU:$CEFF PRG:0EFF B9 4E CE ObjectPathContinue_CF02: LDY #$08 ; CPU:$CF02 PRG:0F02 A0 08 STA ($04),Y ; CPU:$CF04 PRG:0F04 91 04 LDY #$11 ; CPU:$CF06 PRG:0F06 A0 11 LDA $07 ; CPU:$CF08 PRG:0F08 A5 07 STA ($04),Y ; CPU:$CF0A PRG:0F0A 91 04 LDA WorkPtr1Lo ; CPU:$CF0C PRG:0F0C A5 02 BEQ ObjectPathContinue_CF1E ; CPU:$CF0E PRG:0F0E F0 0E LDA #$0D ; CPU:$CF10 PRG:0F10 A9 0D LDX $8E ; CPU:$CF12 PRG:0F12 A6 8E BNE ObjectPathContinue_CF1E ; CPU:$CF14 PRG:0F14 D0 08 LDX $0E ; CPU:$CF16 PRG:0F16 A6 0E CPX #$04 ; CPU:$CF18 PRG:0F18 E0 04 BNE ObjectPathContinue_CF1E ; CPU:$CF1A PRG:0F1A D0 02 LDA #$09 ; CPU:$CF1C PRG:0F1C A9 09 ObjectPathContinue_CF1E: INY ; CPU:$CF1E PRG:0F1E C8 STA ($04),Y ; CPU:$CF1F PRG:0F1F 91 04 INY ; CPU:$CF21 PRG:0F21 C8 LDA #$02 ; CPU:$CF22 PRG:0F22 A9 02 STA ($04),Y ; CPU:$CF24 PRG:0F24 91 04 CLC ; CPU:$CF26 PRG:0F26 18 RTS ; CPU:$CF27 PRG:0F27 60 .byte $21, $D0, $D1, $12, $CE, $CF, $21, $F7, $F8, $12, $F5, $F6, $02, $FD, $02, $FD ; CPU:$CF28 PRG:0F28 0B .byte $60, $A0, $60, $A0 ; CPU:$CF38 PRG:0F38 0B ReadObjectRecordDispatch_CF3C: LDY #$01 ; CPU:$CF3C PRG:0F3C A0 01 LDA (CurrentObjectPtrLo),Y ; CPU:$CF3E PRG:0F3E B1 08 STA WorkPtr0Lo ; CPU:$CF40 PRG:0F40 85 00 LDY #$03 ; CPU:$CF42 PRG:0F42 A0 03 LDA (CurrentObjectPtrLo),Y ; CPU:$CF44 PRG:0F44 B1 08 STA WorkPtr0Hi ; CPU:$CF46 PRG:0F46 85 01 JSR UpdateObjectBufferRoutine_E0DF ; CPU:$CF48 PRG:0F48 20 DF E0 LDY #$05 ; CPU:$CF4B PRG:0F4B A0 05 LDA (CurrentObjectPtrLo),Y ; CPU:$CF4D PRG:0F4D B1 08 LDX #$28 ; CPU:$CF4F PRG:0F4F A2 28 LDY #$CF ; CPU:$CF51 PRG:0F51 A0 CF CMP #$00 ; CPU:$CF53 PRG:0F53 C9 00 BEQ UpdateObjectRecordOnZero_CF6B ; CPU:$CF55 PRG:0F55 F0 14 LDX #$2B ; CPU:$CF57 PRG:0F57 A2 2B LDY #$CF ; CPU:$CF59 PRG:0F59 A0 CF CMP #$0A ; CPU:$CF5B PRG:0F5B C9 0A BEQ UpdateObjectRecordOnZero_CF6B ; CPU:$CF5D PRG:0F5D F0 0C LDX #$2E ; CPU:$CF5F PRG:0F5F A2 2E LDY #$CF ; CPU:$CF61 PRG:0F61 A0 CF CMP #$04 ; CPU:$CF63 PRG:0F63 C9 04 BEQ UpdateObjectRecordOnZero_CF6B ; CPU:$CF65 PRG:0F65 F0 04 LDX #$31 ; CPU:$CF67 PRG:0F67 A2 31 LDY #$CF ; CPU:$CF69 PRG:0F69 A0 CF UpdateObjectRecordOnZero_CF6B: LDA WorkPtr1Lo ; CPU:$CF6B PRG:0F6B A5 02 STA WorkPtr0Hi ; CPU:$CF6D PRG:0F6D 85 01 LDA WorkPtr1Hi ; CPU:$CF6F PRG:0F6F A5 03 STA WorkPtr0Lo ; CPU:$CF71 PRG:0F71 85 00 STX WorkPtr1Lo ; CPU:$CF73 PRG:0F73 86 02 STY WorkPtr1Hi ; CPU:$CF75 PRG:0F75 84 03 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$CF77 PRG:0F77 20 A1 F3 LDY #$05 ; CPU:$CF7A PRG:0F7A A0 05 LDA (CurrentObjectPtrLo),Y ; CPU:$CF7C PRG:0F7C B1 08 CMP #$05 ; CPU:$CF7E PRG:0F7E C9 05 LDA #$14 ; CPU:$CF80 PRG:0F80 A9 14 STA (CurrentObjectPtrLo),Y ; CPU:$CF82 PRG:0F82 91 08 BCS UpdateObjectRecordOnCarry_CF96 ; CPU:$CF84 PRG:0F84 B0 10 LDY #$01 ; CPU:$CF86 PRG:0F86 A0 01 LDA (CurrentObjectPtrLo),Y ; CPU:$CF88 PRG:0F88 B1 08 ADC #$04 ; CPU:$CF8A PRG:0F8A 69 04 STA (CurrentObjectPtrLo),Y ; CPU:$CF8C PRG:0F8C 91 08 LDY #$03 ; CPU:$CF8E PRG:0F8E A0 03 LDA (CurrentObjectPtrLo),Y ; CPU:$CF90 PRG:0F90 B1 08 SBC #$03 ; CPU:$CF92 PRG:0F92 E9 03 STA (CurrentObjectPtrLo),Y ; CPU:$CF94 PRG:0F94 91 08 UpdateObjectRecordOnCarry_CF96: LDY #$0A ; CPU:$CF96 PRG:0F96 A0 0A LDA #$12 ; CPU:$CF98 PRG:0F98 A9 12 STA (CurrentObjectPtrLo),Y ; CPU:$CF9A PRG:0F9A 91 08 BNE UpdateObjectRecordLoop_CFAD ; CPU:$CF9C PRG:0F9C D0 0F ObjectPathLoop_CF9E: JMP ReadObjectRecordDispatch_CF3C ; CPU:$CF9E PRG:0F9E 4C 3C CF ;------------------------------------------------------------ ; ObjectPath_CFA1 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_CFA1: LDA #$00 ; CPU:$CFA1 PRG:0FA1 A9 00 STA CurrentObjectPtrLo ; CPU:$CFA3 PRG:0FA3 85 08 LDA #$05 ; CPU:$CFA5 PRG:0FA5 A9 05 STA CurrentObjectPtrHi ; CPU:$CFA7 PRG:0FA7 85 09 LDA #$07 ; CPU:$CFA9 PRG:0FA9 A9 07 STA LoopCounter ; CPU:$CFAB PRG:0FAB 85 0F UpdateObjectRecordLoop_CFAD: LDY #$10 ; CPU:$CFAD PRG:0FAD A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$CFAF PRG:0FAF B1 08 BEQ ProcessObjectStateDispatch_CFFA ; CPU:$CFB1 PRG:0FB1 F0 47 STA WorkPtr0Lo ; CPU:$CFB3 PRG:0FB3 85 00 LDY #$12 ; CPU:$CFB5 PRG:0FB5 A0 12 LDA (CurrentObjectPtrLo),Y ; CPU:$CFB7 PRG:0FB7 B1 08 BEQ UpdateObjectRecordOnZero_D004 ; CPU:$CFB9 PRG:0FB9 F0 49 INY ; CPU:$CFBB PRG:0FBB C8 LDA (CurrentObjectPtrLo),Y ; CPU:$CFBC PRG:0FBC B1 08 SEC ; CPU:$CFBE PRG:0FBE 38 SBC #$01 ; CPU:$CFBF PRG:0FBF E9 01 STA (CurrentObjectPtrLo),Y ; CPU:$CFC1 PRG:0FC1 91 08 BNE ProcessObjectStateDispatch_CFFA ; CPU:$CFC3 PRG:0FC3 D0 35 LDA #$03 ; CPU:$CFC5 PRG:0FC5 A9 03 STA (CurrentObjectPtrLo),Y ; CPU:$CFC7 PRG:0FC7 91 08 DEY ; CPU:$CFC9 PRG:0FC9 88 LDA (CurrentObjectPtrLo),Y ; CPU:$CFCA PRG:0FCA B1 08 SEC ; CPU:$CFCC PRG:0FCC 38 SBC #$01 ; CPU:$CFCD PRG:0FCD E9 01 STA (CurrentObjectPtrLo),Y ; CPU:$CFCF PRG:0FCF 91 08 BEQ ObjectPathLoop_CF9E ; CPU:$CFD1 PRG:0FD1 F0 CB LDA WorkPtr0Lo ; CPU:$CFD3 PRG:0FD3 A5 00 AND #$01 ; CPU:$CFD5 PRG:0FD5 29 01 BNE ReadObjectRecordOnNonZero_CFDB ; CPU:$CFD7 PRG:0FD7 D0 02 LDA #$FF ; CPU:$CFD9 PRG:0FD9 A9 FF ReadObjectRecordOnNonZero_CFDB: LDX #$07 ; CPU:$CFDB PRG:0FDB A2 07 LDY #$05 ; CPU:$CFDD PRG:0FDD A0 05 CLC ; CPU:$CFDF PRG:0FDF 18 ADC (CurrentObjectPtrLo),Y ; CPU:$CFE0 PRG:0FE0 71 08 BMI UpdateObjectRecordContinue_CFF7 ; CPU:$CFE2 PRG:0FE2 30 13 LDX #$00 ; CPU:$CFE4 PRG:0FE4 A2 00 CMP #$08 ; CPU:$CFE6 PRG:0FE6 C9 08 BEQ UpdateObjectRecordContinue_CFF7 ; CPU:$CFE8 PRG:0FE8 F0 0D LDX #$11 ; CPU:$CFEA PRG:0FEA A2 11 CMP #$09 ; CPU:$CFEC PRG:0FEC C9 09 BEQ UpdateObjectRecordContinue_CFF7 ; CPU:$CFEE PRG:0FEE F0 07 LDX #$0A ; CPU:$CFF0 PRG:0FF0 A2 0A CMP #$12 ; CPU:$CFF2 PRG:0FF2 C9 12 BEQ UpdateObjectRecordContinue_CFF7 ; CPU:$CFF4 PRG:0FF4 F0 01 TAX ; CPU:$CFF6 PRG:0FF6 AA UpdateObjectRecordContinue_CFF7: TXA ; CPU:$CFF7 PRG:0FF7 8A STA (CurrentObjectPtrLo),Y ; CPU:$CFF8 PRG:0FF8 91 08 ProcessObjectStateDispatch_CFFA: LDX #$08 ; CPU:$CFFA PRG:0FFA A2 08 JSR RunGameTaskRoutine_CBD3 ; CPU:$CFFC PRG:0FFC 20 D3 CB BPL UpdateObjectRecordLoop_CFAD ; CPU:$CFFF PRG:0FFF 10 AC DEC $A5 ; CPU:$D001 PRG:1001 C6 A5 RTS ; CPU:$D003 PRG:1003 60 UpdateObjectRecordOnZero_D004: DEY ; CPU:$D004 PRG:1004 88 LDA (CurrentObjectPtrLo),Y ; CPU:$D005 PRG:1005 B1 08 SEC ; CPU:$D007 PRG:1007 38 SBC #$01 ; CPU:$D008 PRG:1008 E9 01 STA (CurrentObjectPtrLo),Y ; CPU:$D00A PRG:100A 91 08 BEQ UpdateObjectRecordOnZero_D052 ; CPU:$D00C PRG:100C F0 44 CMP #$23 ; CPU:$D00E PRG:100E C9 23 BCS UpdateObjectRecordOnCarry_D01A ; CPU:$D010 PRG:1010 B0 08 LDY #$05 ; CPU:$D012 PRG:1012 A0 05 LDA (CurrentObjectPtrLo),Y ; CPU:$D014 PRG:1014 B1 08 CMP #$14 ; CPU:$D016 PRG:1016 C9 14 BCS ProcessObjectStateDispatch_D04F ; CPU:$D018 PRG:1018 B0 35 UpdateObjectRecordOnCarry_D01A: LDA WorkPtr0Lo ; CPU:$D01A PRG:101A A5 00 AND #$03 ; CPU:$D01C PRG:101C 29 03 TAX ; CPU:$D01E PRG:101E AA LDY $E17B,X ; CPU:$D01F PRG:101F BC 7B E1 INY ; CPU:$D022 PRG:1022 C8 CLC ; CPU:$D023 PRG:1023 18 LDA $CF38,X ; CPU:$D024 PRG:1024 BD 38 CF ADC (CurrentObjectPtrLo),Y ; CPU:$D027 PRG:1027 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$D029 PRG:1029 91 08 DEY ; CPU:$D02B PRG:102B 88 LDA $CF34,X ; CPU:$D02C PRG:102C BD 34 CF ADC (CurrentObjectPtrLo),Y ; CPU:$D02F PRG:102F 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$D031 PRG:1031 91 08 LDY #$05 ; CPU:$D033 PRG:1033 A0 05 LDA (CurrentObjectPtrLo),Y ; CPU:$D035 PRG:1035 B1 08 CMP #$14 ; CPU:$D037 PRG:1037 C9 14 BCS ProcessObjectStateDispatch_D04F ; CPU:$D039 PRG:1039 B0 14 LDX #$08 ; CPU:$D03B PRG:103B A2 08 LDA WorkPtr0Lo ; CPU:$D03D PRG:103D A5 00 AND #$02 ; CPU:$D03F PRG:103F 29 02 BNE ObjectPathOnNonZero_D045 ; CPU:$D041 PRG:1041 D0 02 LDX #$12 ; CPU:$D043 PRG:1043 A2 12 ObjectPathOnNonZero_D045: LDA $A5 ; CPU:$D045 PRG:1045 A5 A5 AND #$01 ; CPU:$D047 PRG:1047 29 01 BEQ UpdateObjectRecordOnZero_D04C ; CPU:$D049 PRG:1049 F0 01 INX ; CPU:$D04B PRG:104B E8 UpdateObjectRecordOnZero_D04C: TXA ; CPU:$D04C PRG:104C 8A STA (CurrentObjectPtrLo),Y ; CPU:$D04D PRG:104D 91 08 ProcessObjectStateDispatch_D04F: JMP ProcessObjectStateDispatch_CFFA ; CPU:$D04F PRG:104F 4C FA CF UpdateObjectRecordOnZero_D052: DEY ; CPU:$D052 PRG:1052 88 STA (CurrentObjectPtrLo),Y ; CPU:$D053 PRG:1053 91 08 LDY #$00 ; CPU:$D055 PRG:1055 A0 00 LDA #$01 ; CPU:$D057 PRG:1057 A9 01 STA (CurrentObjectPtrLo),Y ; CPU:$D059 PRG:1059 91 08 LDY #$05 ; CPU:$D05B PRG:105B A0 05 LDA (CurrentObjectPtrLo),Y ; CPU:$D05D PRG:105D B1 08 CMP #$14 ; CPU:$D05F PRG:105F C9 14 BCS ProcessObjectStateDispatch_D04F ; CPU:$D061 PRG:1061 B0 EC LDY #$15 ; CPU:$D063 PRG:1063 A0 15 LDA (CurrentObjectPtrLo),Y ; CPU:$D065 PRG:1065 B1 08 TAX ; CPU:$D067 PRG:1067 AA DEC $DA,X ; CPU:$D068 PRG:1068 D6 DA JMP ProcessObjectStateDispatch_D04F ; CPU:$D06A PRG:106A 4C 4F D0 ;------------------------------------------------------------ ; ObjectPath_D06D ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D06D: LDA #$20 ; CPU:$D06D PRG:106D A9 20 STA $00 ; CPU:$D06F PRG:106F 85 00 LDA #$04 ; CPU:$D071 PRG:1071 A9 04 STA $01 ; CPU:$D073 PRG:1073 85 01 JSR ProcessResourceStateRoutine_F601 ; CPU:$D075 PRG:1075 20 01 F6 LDA #$30 ; CPU:$D078 PRG:1078 A9 30 STA $00 ; CPU:$D07A PRG:107A 85 00 LDA #$04 ; CPU:$D07C PRG:107C A9 04 STA $01 ; CPU:$D07E PRG:107E 85 01 JSR ProcessResourceStateRoutine_F601 ; CPU:$D080 PRG:1080 20 01 F6 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_D083 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_D083: LDA #$00 ; CPU:$D083 PRG:1083 A9 00 STA $00 ; CPU:$D085 PRG:1085 85 00 LDA #$04 ; CPU:$D087 PRG:1087 A9 04 STA $01 ; CPU:$D089 PRG:1089 85 01 JSR ProcessResourceStateRoutine_F601 ; CPU:$D08B PRG:108B 20 01 F6 RTS ; CPU:$D08E PRG:108E 60 ;------------------------------------------------------------ ; ObjectPath_D08F ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D08F: LDA #$60 ; CPU:$D08F PRG:108F A9 60 STA $00 ; CPU:$D091 PRG:1091 85 00 LDA #$04 ; CPU:$D093 PRG:1093 A9 04 STA $01 ; CPU:$D095 PRG:1095 85 01 JSR ProcessResourceStateRoutine_F601 ; CPU:$D097 PRG:1097 20 01 F6 LDA #$70 ; CPU:$D09A PRG:109A A9 70 STA $00 ; CPU:$D09C PRG:109C 85 00 LDA #$04 ; CPU:$D09E PRG:109E A9 04 STA $01 ; CPU:$D0A0 PRG:10A0 85 01 JSR ProcessResourceStateRoutine_F601 ; CPU:$D0A2 PRG:10A2 20 01 F6 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_D0A5 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_D0A5: LDA #$40 ; CPU:$D0A5 PRG:10A5 A9 40 STA $00 ; CPU:$D0A7 PRG:10A7 85 00 LDA #$04 ; CPU:$D0A9 PRG:10A9 A9 04 STA $01 ; CPU:$D0AB PRG:10AB 85 01 JSR ProcessResourceStateRoutine_F601 ; CPU:$D0AD PRG:10AD 20 01 F6 RTS ; CPU:$D0B0 PRG:10B0 60 ;------------------------------------------------------------ ; ObjectPath_D0B1 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D0B1: LDA #$00 ; CPU:$D0B1 PRG:10B1 A9 00 STA $00 ; CPU:$D0B3 PRG:10B3 85 00 LDA #$05 ; CPU:$D0B5 PRG:10B5 A9 05 STA $01 ; CPU:$D0B7 PRG:10B7 85 01 LDA #$07 ; CPU:$D0B9 PRG:10B9 A9 07 STA $0F ; CPU:$D0BB PRG:10BB 85 0F ObjectPathLoop_D0BD: JSR ProcessResourceStateRoutine_F601 ; CPU:$D0BD PRG:10BD 20 01 F6 LDX #$00 ; CPU:$D0C0 PRG:10C0 A2 00 JSR RunGameTaskRoutine_CBD3 ; CPU:$D0C2 PRG:10C2 20 D3 CB BPL ObjectPathLoop_D0BD ; CPU:$D0C5 PRG:10C5 10 F6 RTS ; CPU:$D0C7 PRG:10C7 60 ;------------------------------------------------------------ ; UpdateObjectBuffer_D0C8 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBuffer_D0C8: LDA #$80 ; CPU:$D0C8 PRG:10C8 A9 80 STA $00 ; CPU:$D0CA PRG:10CA 85 00 LDA #$04 ; CPU:$D0CC PRG:10CC A9 04 STA $01 ; CPU:$D0CE PRG:10CE 85 01 LDA #$03 ; CPU:$D0D0 PRG:10D0 A9 03 STA $0F ; CPU:$D0D2 PRG:10D2 85 0F ObjectPathLoop_D0D4: JSR ProcessResourceStateRoutine_F601 ; CPU:$D0D4 PRG:10D4 20 01 F6 LDX #$00 ; CPU:$D0D7 PRG:10D7 A2 00 JSR RunGameTaskRoutine_CBD3 ; CPU:$D0D9 PRG:10D9 20 D3 CB BPL ObjectPathLoop_D0D4 ; CPU:$D0DC PRG:10DC 10 F6 RTS ; CPU:$D0DE PRG:10DE 60 ;------------------------------------------------------------ ; ObjectPath_D0DF ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D0DF: LDA #$00 ; CPU:$D0DF PRG:10DF A9 00 STA $00 ; CPU:$D0E1 PRG:10E1 85 00 LDA #$06 ; CPU:$D0E3 PRG:10E3 A9 06 STA $01 ; CPU:$D0E5 PRG:10E5 85 01 LDA #$07 ; CPU:$D0E7 PRG:10E7 A9 07 STA $0F ; CPU:$D0E9 PRG:10E9 85 0F ObjectPathLoop_D0EB: JSR ProcessResourceStateRoutine_F601 ; CPU:$D0EB PRG:10EB 20 01 F6 LDX #$00 ; CPU:$D0EE PRG:10EE A2 00 JSR RunGameTaskRoutine_CBD3 ; CPU:$D0F0 PRG:10F0 20 D3 CB BPL ObjectPathLoop_D0EB ; CPU:$D0F3 PRG:10F3 10 F6 RTS ; CPU:$D0F5 PRG:10F5 60 ;------------------------------------------------------------ ; UpdateObjectBuffer_D0F6 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBuffer_D0F6: LDA #$C0 ; CPU:$D0F6 PRG:10F6 A9 C0 STA $00 ; CPU:$D0F8 PRG:10F8 85 00 LDA #$03 ; CPU:$D0FA PRG:10FA A9 03 STA $01 ; CPU:$D0FC PRG:10FC 85 01 LDA #$02 ; CPU:$D0FE PRG:10FE A9 02 STA $0F ; CPU:$D100 PRG:1100 85 0F ObjectPathLoop_D102: JSR ProcessResourceStateRoutine_F601 ; CPU:$D102 PRG:1102 20 01 F6 JSR ProcessObjectStateRoutine_DDB2 ; CPU:$D105 PRG:1105 20 B2 DD DEC $0F ; CPU:$D108 PRG:1108 C6 0F BPL ObjectPathLoop_D102 ; CPU:$D10A PRG:110A 10 F6 RTS ; CPU:$D10C PRG:110C 60 .byte $02, $03, $07, $0E, $0F, $11, $0A, $0B, $0B, $0C, $11, $0D, $0E, $0F, $0F, $10 ; CPU:$D10D PRG:110D 0B .byte $0D ; CPU:$D11D PRG:111D 0B ;------------------------------------------------------------ ; ReadObjectRecord_D11E ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecord_D11E: LDY #$10 ; CPU:$D11E PRG:111E A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$D120 PRG:1120 B1 08 STA $06 ; CPU:$D122 PRG:1122 85 06 BMI ObjectPathContinue_D132 ; CPU:$D124 PRG:1124 30 0C LDY #$1B ; CPU:$D126 PRG:1126 A0 1B LDA (CurrentObjectPtrLo),Y ; CPU:$D128 PRG:1128 B1 08 CMP #$10 ; CPU:$D12A PRG:112A C9 10 BCC ObjectPathContinue_D132 ; CPU:$D12C PRG:112C 90 04 CMP #$40 ; CPU:$D12E PRG:112E C9 40 BCC ObjectPathOnNoCarry_D14F ; CPU:$D130 PRG:1130 90 1D ObjectPathContinue_D132: LDA $54 ; CPU:$D132 PRG:1132 A5 54 BNE UpdateObjectRecordOnNonZero_D13A ; CPU:$D134 PRG:1134 D0 04 LDA #$09 ; CPU:$D136 PRG:1136 A9 09 STA $54 ; CPU:$D138 PRG:1138 85 54 UpdateObjectRecordOnNonZero_D13A: CMP #$05 ; CPU:$D13A PRG:113A C9 05 BCC ObjectPathOnNoCarry_D14E ; CPU:$D13C PRG:113C 90 10 LDY #$35 ; CPU:$D13E PRG:113E A0 35 LDA #$01 ; CPU:$D140 PRG:1140 A9 01 EOR (CurrentObjectPtrLo),Y ; CPU:$D142 PRG:1142 51 08 STA (CurrentObjectPtrLo),Y ; CPU:$D144 PRG:1144 91 08 LDY #$05 ; CPU:$D146 PRG:1146 A0 05 LDA #$01 ; CPU:$D148 PRG:1148 A9 01 EOR (CurrentObjectPtrLo),Y ; CPU:$D14A PRG:114A 51 08 STA (CurrentObjectPtrLo),Y ; CPU:$D14C PRG:114C 91 08 ObjectPathOnNoCarry_D14E: RTS ; CPU:$D14E PRG:114E 60 ObjectPathOnNoCarry_D14F: LDX #$00 ; CPU:$D14F PRG:114F A2 00 LDY $0A ; CPU:$D151 PRG:1151 A4 0A LDA a:$0058,Y ; CPU:$D153 PRG:1153 B9 58 00 LDY #$04 ; CPU:$D156 PRG:1156 A0 04 ObjectPathLoop_D158: CMP $D10D,Y ; CPU:$D158 PRG:1158 D9 0D D1 BCS ObjectPathOnCarry_D161 ; CPU:$D15B PRG:115B B0 04 INX ; CPU:$D15D PRG:115D E8 DEY ; CPU:$D15E PRG:115E 88 BPL ObjectPathLoop_D158 ; CPU:$D15F PRG:115F 10 F7 ObjectPathOnCarry_D161: LDA $06 ; CPU:$D161 PRG:1161 A5 06 AND #$03 ; CPU:$D163 PRG:1163 29 03 CMP #$02 ; CPU:$D165 PRG:1165 C9 02 TXA ; CPU:$D167 PRG:1167 8A BCC UpdateObjectRecordOnNoCarry_D16D ; CPU:$D168 PRG:1168 90 03 CLC ; CPU:$D16A PRG:116A 18 ADC #$06 ; CPU:$D16B PRG:116B 69 06 UpdateObjectRecordOnNoCarry_D16D: TAX ; CPU:$D16D PRG:116D AA CLC ; CPU:$D16E PRG:116E 18 ADC #$06 ; CPU:$D16F PRG:116F 69 06 LDY #$05 ; CPU:$D171 PRG:1171 A0 05 STA (CurrentObjectPtrLo),Y ; CPU:$D173 PRG:1173 91 08 LDA $D112,X ; CPU:$D175 PRG:1175 BD 12 D1 LDY #$25 ; CPU:$D178 PRG:1178 A0 25 STA (CurrentObjectPtrLo),Y ; CPU:$D17A PRG:117A 91 08 SEC ; CPU:$D17C PRG:117C 38 SBC #$04 ; CPU:$D17D PRG:117D E9 04 LDY #$35 ; CPU:$D17F PRG:117F A0 35 STA (CurrentObjectPtrLo),Y ; CPU:$D181 PRG:1181 91 08 RTS ; CPU:$D183 PRG:1183 60 .byte $27, $16, $27, $1A, $27, $26, $27, $2A, $27, $17, $17, $17, $25, $05, $05, $25 ; CPU:$D184 PRG:1184 0B .byte $2A, $0A, $0A, $2A, $21, $01, $01, $21, $23, $03, $03, $23, $27, $07, $07, $27 ; CPU:$D194 PRG:1194 0B .byte $25, $05, $05, $25, $21, $11, $11, $11, $21, $0F ; CPU:$D1A4 PRG:11A4 0B ;------------------------------------------------------------ ; UpdateObjectBufferRoutine_D1AE ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBufferRoutine_D1AE: STX $00 ; CPU:$D1AE PRG:11AE 86 00 LDX #$3F ; CPU:$D1B0 PRG:11B0 A2 3F STX $01 ; CPU:$D1B2 PRG:11B2 86 01 TYA ; CPU:$D1B4 PRG:11B4 98 ASL A ; CPU:$D1B5 PRG:11B5 0A TAY ; CPU:$D1B6 PRG:11B6 A8 LDA $D184,Y ; CPU:$D1B7 PRG:11B7 B9 84 D1 STA $EE ; CPU:$D1BA PRG:11BA 85 EE INY ; CPU:$D1BC PRG:11BC C8 LDA $D184,Y ; CPU:$D1BD PRG:11BD B9 84 D1 STA $EF ; CPU:$D1C0 PRG:11C0 85 EF LDA #$EB ; CPU:$D1C2 PRG:11C2 A9 EB STA $02 ; CPU:$D1C4 PRG:11C4 85 02 LDA #$00 ; CPU:$D1C6 PRG:11C6 A9 00 STA $03 ; CPU:$D1C8 PRG:11C8 85 03 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$D1CA PRG:11CA 20 A1 F3 RTS ; CPU:$D1CD PRG:11CD 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_D1CE ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_D1CE: LDA $87 ; CPU:$D1CE PRG:11CE A5 87 ASL A ; CPU:$D1D0 PRG:11D0 0A CLC ; CPU:$D1D1 PRG:11D1 18 ADC #$06 ; CPU:$D1D2 PRG:11D2 69 06 TAY ; CPU:$D1D4 PRG:11D4 A8 RTS ; CPU:$D1D5 PRG:11D5 60 ;------------------------------------------------------------ ; ObjectPath_D1D6 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D1D6: LDA $62 ; CPU:$D1D6 PRG:11D6 A5 62 BNE ObjectPathOnNonZero_D1F4 ; CPU:$D1D8 PRG:11D8 D0 1A LDA #$06 ; CPU:$D1DA PRG:11DA A9 06 STA $62 ; CPU:$D1DC PRG:11DC 85 62 LDY #$04 ; CPU:$D1DE PRG:11DE A0 04 LDA $8F ; CPU:$D1E0 PRG:11E0 A5 8F BEQ ObjectPathOnZero_D1E6 ; CPU:$D1E2 PRG:11E2 F0 02 LDY #$12 ; CPU:$D1E4 PRG:11E4 A0 12 ObjectPathOnZero_D1E6: LDA #$01 ; CPU:$D1E6 PRG:11E6 A9 01 EOR $A2 ; CPU:$D1E8 PRG:11E8 45 A2 STA $A2 ; CPU:$D1EA PRG:11EA 85 A2 BEQ ObjectPathOnZero_D1EF ; CPU:$D1EC PRG:11EC F0 01 INY ; CPU:$D1EE PRG:11EE C8 ObjectPathOnZero_D1EF: LDX #$04 ; CPU:$D1EF PRG:11EF A2 04 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$D1F1 PRG:11F1 20 AE D1 ObjectPathOnNonZero_D1F4: RTS ; CPU:$D1F4 PRG:11F4 60 .byte $22, $5C, $5D, $5E, $5F, $22, $58, $59, $5A, $5B, $22, $54, $55, $56, $57, $22 ; CPU:$D1F5 PRG:11F5 0B .byte $50, $51, $52, $53 ; CPU:$D205 PRG:1205 0B ;------------------------------------------------------------ ; ObjectPath_D209 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D209: LDA $57 ; CPU:$D209 PRG:1209 A5 57 BNE ObjectPathContinue_D254 ; CPU:$D20B PRG:120B D0 47 LDA #$02 ; CPU:$D20D PRG:120D A9 02 STA $57 ; CPU:$D20F PRG:120F 85 57 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_D211 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_D211: LDA $A3 ; CPU:$D211 PRG:1211 A5 A3 LDY $A4 ; CPU:$D213 PRG:1213 A4 A4 CPY #$FF ; CPU:$D215 PRG:1215 C0 FF BNE UpdateObjectBufferOnNonZero_D222 ; CPU:$D217 PRG:1217 D0 09 SEC ; CPU:$D219 PRG:1219 38 SBC #$05 ; CPU:$D21A PRG:121A E9 05 BPL ObjectPathOnPositive_D220 ; CPU:$D21C PRG:121C 10 02 LDA #$0F ; CPU:$D21E PRG:121E A9 0F ObjectPathOnPositive_D220: STA $A3 ; CPU:$D220 PRG:1220 85 A3 UpdateObjectBufferOnNonZero_D222: CLC ; CPU:$D222 PRG:1222 18 ADC #$F5 ; CPU:$D223 PRG:1223 69 F5 STA $02 ; CPU:$D225 PRG:1225 85 02 LDA #$00 ; CPU:$D227 PRG:1227 A9 00 ADC #$D1 ; CPU:$D229 PRG:1229 69 D1 STA $03 ; CPU:$D22B PRG:122B 85 03 JSR RunGameTaskRoutine_C8AA ; CPU:$D22D PRG:122D 20 AA C8 INC $A4 ; CPU:$D230 PRG:1230 E6 A4 INC $A4 ; CPU:$D232 PRG:1232 E6 A4 LDA $A4 ; CPU:$D234 PRG:1234 A5 A4 BMI ObjectPathOnNegative_D23A ; CPU:$D236 PRG:1236 30 02 LDA #$F9 ; CPU:$D238 PRG:1238 A9 F9 ObjectPathOnNegative_D23A: STA $A4 ; CPU:$D23A PRG:123A 85 A4 LDY #$00 ; CPU:$D23C PRG:123C A0 00 CLC ; CPU:$D23E PRG:123E 18 ADC ($04),Y ; CPU:$D23F PRG:123F 71 04 TAY ; CPU:$D241 PRG:1241 A8 CMP #$01 ; CPU:$D242 PRG:1242 C9 01 BEQ ObjectPathContinue_D254 ; CPU:$D244 PRG:1244 F0 0E BMI ObjectPathContinue_D254 ; CPU:$D246 PRG:1246 30 0C LDA ($04),Y ; CPU:$D248 PRG:1248 B1 04 STA $00 ; CPU:$D24A PRG:124A 85 00 DEY ; CPU:$D24C PRG:124C 88 LDA ($04),Y ; CPU:$D24D PRG:124D B1 04 STA $01 ; CPU:$D24F PRG:124F 85 01 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$D251 PRG:1251 20 A1 F3 ObjectPathContinue_D254: RTS ; CPU:$D254 PRG:1254 60 .byte $02, $03, $00, $00, $00, $00, $00, $01, $10, $14 ; CPU:$D255 PRG:1255 0B ObjectPathLoop_D25F: LDY $0A ; CPU:$D25F PRG:125F A4 0A LDX $D25D,Y ; CPU:$D261 PRG:1261 BE 5D D2 LDA $63 ; CPU:$D264 PRG:1264 A5 63 BEQ ObjectPathOnZero_D277 ; CPU:$D266 PRG:1266 F0 0F CMP #$08 ; CPU:$D268 PRG:1268 C9 08 BEQ ObjectPathOnZero_D272 ; CPU:$D26A PRG:126A F0 06 INY ; CPU:$D26C PRG:126C C8 INY ; CPU:$D26D PRG:126D C8 CMP #$01 ; CPU:$D26E PRG:126E C9 01 BNE ObjectPathLoop_D275 ; CPU:$D270 PRG:1270 D0 03 ObjectPathOnZero_D272: JSR UpdateObjectBufferRoutine_D1AE ; CPU:$D272 PRG:1272 20 AE D1 ObjectPathLoop_D275: SEC ; CPU:$D275 PRG:1275 38 RTS ; CPU:$D276 PRG:1276 60 ObjectPathOnZero_D277: LDA #$10 ; CPU:$D277 PRG:1277 A9 10 STA $63 ; CPU:$D279 PRG:1279 85 63 BNE ObjectPathLoop_D275 ; CPU:$D27B PRG:127B D0 F8 ;------------------------------------------------------------ ; UpdateObjectRecord_D27D ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecord_D27D: LDA $78 ; CPU:$D27D PRG:127D A5 78 BNE ObjectPathLoop_D275 ; CPU:$D27F PRG:127F D0 F4 LDX $0A ; CPU:$D281 PRG:1281 A6 0A LDA $D0,X ; CPU:$D283 PRG:1283 B5 D0 BEQ ObjectPathOnZero_D2CE ; CPU:$D285 PRG:1285 F0 47 CMP #$02 ; CPU:$D287 PRG:1287 C9 02 BEQ ObjectPathOnZero_D2D0 ; CPU:$D289 PRG:1289 F0 45 LDA $46,X ; CPU:$D28B PRG:128B B5 46 AND #$0F ; CPU:$D28D PRG:128D 29 0F BEQ ObjectPathLoop_D25F ; CPU:$D28F PRG:128F F0 CE DEC $D0,X ; CPU:$D291 PRG:1291 D6 D0 TAX ; CPU:$D293 PRG:1293 AA LDA $D254,X ; CPU:$D294 PRG:1294 BD 54 D2 LDY #$10 ; CPU:$D297 PRG:1297 A0 10 STA (CurrentObjectPtrLo),Y ; CPU:$D299 PRG:1299 91 08 PHA ; CPU:$D29B PRG:129B 48 TAX ; CPU:$D29C PRG:129C AA LDY $E16F,X ; CPU:$D29D PRG:129D BC 6F E1 LDX $82 ; CPU:$D2A0 PRG:12A0 A6 82 LDA $C0DD,X ; CPU:$D2A2 PRG:12A2 BD DD C0 STA (CurrentObjectPtrLo),Y ; CPU:$D2A5 PRG:12A5 91 08 DEY ; CPU:$D2A7 PRG:12A7 88 LDA $C0D5,X ; CPU:$D2A8 PRG:12A8 BD D5 C0 STA (CurrentObjectPtrLo),Y ; CPU:$D2AB PRG:12AB 91 08 PLA ; CPU:$D2AD PRG:12AD 68 AND #$01 ; CPU:$D2AE PRG:12AE 29 01 BEQ UpdateObjectRecordOnZero_D2B5 ; CPU:$D2B0 PRG:12B0 F0 03 JSR UpdateObjectRecordRoutine_E325 ; CPU:$D2B2 PRG:12B2 20 25 E3 UpdateObjectRecordOnZero_D2B5: LDY #$30 ; CPU:$D2B5 PRG:12B5 A0 30 LDA #$00 ; CPU:$D2B7 PRG:12B7 A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$D2B9 PRG:12B9 91 08 LDY $0A ; CPU:$D2BB PRG:12BB A4 0A LDX $D25D,Y ; CPU:$D2BD PRG:12BD BE 5D D2 LDA a:$0075,Y ; CPU:$D2C0 PRG:12C0 B9 75 00 BEQ ObjectPathOnZero_D2C7 ; CPU:$D2C3 PRG:12C3 F0 02 INY ; CPU:$D2C5 PRG:12C5 C8 INY ; CPU:$D2C6 PRG:12C6 C8 ObjectPathOnZero_D2C7: JSR UpdateObjectBufferRoutine_D1AE ; CPU:$D2C7 PRG:12C7 20 AE D1 LDA #$04 ; CPU:$D2CA PRG:12CA A9 04 STA $FF ; CPU:$D2CC PRG:12CC 85 FF ObjectPathOnZero_D2CE: CLC ; CPU:$D2CE PRG:12CE 18 RTS ; CPU:$D2CF PRG:12CF 60 ObjectPathOnZero_D2D0: DEC $D0,X ; CPU:$D2D0 PRG:12D0 D6 D0 JSR RunGameTaskRoutine_C8AA ; CPU:$D2D2 PRG:12D2 20 AA C8 LDY #$00 ; CPU:$D2D5 PRG:12D5 A0 00 LDA ($04),Y ; CPU:$D2D7 PRG:12D7 B1 04 TAY ; CPU:$D2D9 PRG:12D9 A8 LDX $0A ; CPU:$D2DA PRG:12DA A6 0A BEQ UpdateObjectRecordOnZero_D2E0 ; CPU:$D2DC PRG:12DC F0 02 INY ; CPU:$D2DE PRG:12DE C8 INY ; CPU:$D2DF PRG:12DF C8 UpdateObjectRecordOnZero_D2E0: LDA ($04),Y ; CPU:$D2E0 PRG:12E0 B1 04 STA $00 ; CPU:$D2E2 PRG:12E2 85 00 INY ; CPU:$D2E4 PRG:12E4 C8 LDA ($04),Y ; CPU:$D2E5 PRG:12E5 B1 04 STA $01 ; CPU:$D2E7 PRG:12E7 85 01 LDY #$00 ; CPU:$D2E9 PRG:12E9 A0 00 LDA #$00 ; CPU:$D2EB PRG:12EB A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$D2ED PRG:12ED 91 08 INY ; CPU:$D2EF PRG:12EF C8 LDA WorkPtr0Lo ; CPU:$D2F0 PRG:12F0 A5 00 STA (CurrentObjectPtrLo),Y ; CPU:$D2F2 PRG:12F2 91 08 INY ; CPU:$D2F4 PRG:12F4 C8 LDA #$00 ; CPU:$D2F5 PRG:12F5 A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$D2F7 PRG:12F7 91 08 INY ; CPU:$D2F9 PRG:12F9 C8 LDA WorkPtr0Hi ; CPU:$D2FA PRG:12FA A5 01 STA (CurrentObjectPtrLo),Y ; CPU:$D2FC PRG:12FC 91 08 INY ; CPU:$D2FE PRG:12FE C8 LDA #$00 ; CPU:$D2FF PRG:12FF A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$D301 PRG:1301 91 08 LDA #$16 ; CPU:$D303 PRG:1303 A9 16 CPX #$00 ; CPU:$D305 PRG:1305 E0 00 BEQ UpdateObjectRecordOnZero_D30B ; CPU:$D307 PRG:1307 F0 02 LDA #$17 ; CPU:$D309 PRG:1309 A9 17 UpdateObjectRecordOnZero_D30B: INY ; CPU:$D30B PRG:130B C8 STA (CurrentObjectPtrLo),Y ; CPU:$D30C PRG:130C 91 08 LDY #$10 ; CPU:$D30E PRG:130E A0 10 LDA #$00 ; CPU:$D310 PRG:1310 A9 00 UpdateObjectRecordLoop_D312: STA (CurrentObjectPtrLo),Y ; CPU:$D312 PRG:1312 91 08 INY ; CPU:$D314 PRG:1314 C8 CPY #$1E ; CPU:$D315 PRG:1315 C0 1E BNE UpdateObjectRecordLoop_D312 ; CPU:$D317 PRG:1317 D0 F9 LDY #$08 ; CPU:$D319 PRG:1319 A0 08 STA (CurrentObjectPtrLo),Y ; CPU:$D31B PRG:131B 91 08 SEC ; CPU:$D31D PRG:131D 38 RTS ; CPU:$D31E PRG:131E 60 .byte $10, $D0, $12, $13, $14, $15, $17, $18, $19, $1A, $1B, $17 ; CPU:$D31F PRG:131F 0B ObjectPathLoop_D32B: LDA #$00 ; CPU:$D32B PRG:132B A9 00 STA $90,X ; CPU:$D32D PRG:132D 95 90 ObjectPathLoop_D32F: CLC ; CPU:$D32F PRG:132F 18 RTS ; CPU:$D330 PRG:1330 60 ReadObjectRecordLoop_D331: LDA $78 ; CPU:$D331 PRG:1331 A5 78 BNE ObjectPathLoop_D32B ; CPU:$D333 PRG:1333 D0 F6 LDY #$10 ; CPU:$D335 PRG:1335 A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$D337 PRG:1337 B1 08 BMI ObjectPathLoop_D32F ; CPU:$D339 PRG:1339 30 F4 AND #$0F ; CPU:$D33B PRG:133B 29 0F TAX ; CPU:$D33D PRG:133D AA JSR UpdateObjectRecordRoutine_E335 ; CPU:$D33E PRG:133E 20 35 E3 BCC ObjectPathLoop_D32F ; CPU:$D341 PRG:1341 90 EC LDX $0A ; CPU:$D343 PRG:1343 A6 0A DEC $90,X ; CPU:$D345 PRG:1345 D6 90 LDA #$00 ; CPU:$D347 PRG:1347 A9 00 BEQ UpdateObjectRecordOnZero_D36E ; CPU:$D349 PRG:1349 F0 23 ObjectPathLoop_D34B: JMP UpdateObjectRecordDispatch_D401 ; CPU:$D34B PRG:134B 4C 01 D4 ;------------------------------------------------------------ ; ObjectPath_D34E ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D34E: LDX $0A ; CPU:$D34E PRG:134E A6 0A LDA $90,X ; CPU:$D350 PRG:1350 B5 90 BEQ ObjectPathLoop_D32F ; CPU:$D352 PRG:1352 F0 DB CMP #$01 ; CPU:$D354 PRG:1354 C9 01 BEQ ObjectPathOnZero_D382 ; CPU:$D356 PRG:1356 F0 2A CMP #$10 ; CPU:$D358 PRG:1358 C9 10 BEQ UpdateObjectBufferOnZero_D384 ; CPU:$D35A PRG:135A F0 28 CMP #$11 ; CPU:$D35C PRG:135C C9 11 BEQ UpdateObjectBufferOnZero_D3AF ; CPU:$D35E PRG:135E F0 4F CMP #$12 ; CPU:$D360 PRG:1360 C9 12 BEQ ObjectPathLoop_D34B ; CPU:$D362 PRG:1362 F0 E7 CMP #$13 ; CPU:$D364 PRG:1364 C9 13 BEQ ReadObjectRecordLoop_D331 ; CPU:$D366 PRG:1366 F0 C9 LDA #$12 ; CPU:$D368 PRG:1368 A9 12 STA $90,X ; CPU:$D36A PRG:136A 95 90 LDA #$05 ; CPU:$D36C PRG:136C A9 05 UpdateObjectRecordOnZero_D36E: STA $D2,X ; CPU:$D36E PRG:136E 95 D2 LDA #$08 ; CPU:$D370 PRG:1370 A9 08 STA $5C,X ; CPU:$D372 PRG:1372 95 5C LDY #$20 ; CPU:$D374 PRG:1374 A0 20 LDA #$01 ; CPU:$D376 PRG:1376 A9 01 STA (CurrentObjectPtrLo),Y ; CPU:$D378 PRG:1378 91 08 LDY #$30 ; CPU:$D37A PRG:137A A0 30 STA (CurrentObjectPtrLo),Y ; CPU:$D37C PRG:137C 91 08 LDA #$02 ; CPU:$D37E PRG:137E A9 02 STA $FF ; CPU:$D380 PRG:1380 85 FF ObjectPathOnZero_D382: SEC ; CPU:$D382 PRG:1382 38 RTS ; CPU:$D383 PRG:1383 60 UpdateObjectBufferOnZero_D384: LDA $72,X ; CPU:$D384 PRG:1384 B5 72 BNE UpdateObjectBufferOnNonZero_D396 ; CPU:$D386 PRG:1386 D0 0E STA $90,X ; CPU:$D388 PRG:1388 95 90 INC $90,X ; CPU:$D38A PRG:138A F6 90 LDA #$01 ; CPU:$D38C PRG:138C A9 01 STA $03F0 ; CPU:$D38E PRG:138E 8D F0 03 JSR RunGameTaskRoutine_C8D6 ; CPU:$D391 PRG:1391 20 D6 C8 SEC ; CPU:$D394 PRG:1394 38 RTS ; CPU:$D395 PRG:1395 60 UpdateObjectBufferOnNonZero_D396: LDA $03F1 ; CPU:$D396 PRG:1396 AD F1 03 CMP #$1A ; CPU:$D399 PRG:1399 C9 1A BCC UpdateObjectBufferOnNoCarry_D3A2 ; CPU:$D39B PRG:139B 90 05 SBC #$02 ; CPU:$D39D PRG:139D E9 02 STA $03F1 ; CPU:$D39F PRG:139F 8D F1 03 UpdateObjectBufferOnNoCarry_D3A2: LDA #$F0 ; CPU:$D3A2 PRG:13A2 A9 F0 STA $00 ; CPU:$D3A4 PRG:13A4 85 00 LDA #$03 ; CPU:$D3A6 PRG:13A6 A9 03 STA $01 ; CPU:$D3A8 PRG:13A8 85 01 JSR ProcessResourceStateRoutine_F601 ; CPU:$D3AA PRG:13AA 20 01 F6 SEC ; CPU:$D3AD PRG:13AD 38 RTS ; CPU:$D3AE PRG:13AE 60 UpdateObjectBufferOnZero_D3AF: LDA $5C,X ; CPU:$D3AF PRG:13AF B5 5C BNE ObjectPathContinue_D3DA ; CPU:$D3B1 PRG:13B1 D0 27 DEC $80,X ; CPU:$D3B3 PRG:13B3 D6 80 BPL ObjectPathOnPositive_D3E0 ; CPU:$D3B5 PRG:13B5 10 29 STA $80,X ; CPU:$D3B7 PRG:13B7 95 80 LDA $03F0 ; CPU:$D3B9 PRG:13B9 AD F0 03 BEQ ObjectPathContinue_D3DA ; CPU:$D3BC PRG:13BC F0 1C LDA $8D ; CPU:$D3BE PRG:13BE A5 8D BNE ObjectPathOnNonZero_D3DC ; CPU:$D3C0 PRG:13C0 D0 1A STA $03F0 ; CPU:$D3C2 PRG:13C2 8D F0 03 LDA #$EF ; CPU:$D3C5 PRG:13C5 A9 EF STA $03F1 ; CPU:$D3C7 PRG:13C7 8D F1 03 LDA $D31F,X ; CPU:$D3CA PRG:13CA BD 1F D3 STA $03F3 ; CPU:$D3CD PRG:13CD 8D F3 03 LDA #$01 ; CPU:$D3D0 PRG:13D0 A9 01 STA $FF ; CPU:$D3D2 PRG:13D2 85 FF LDA #$14 ; CPU:$D3D4 PRG:13D4 A9 14 STA $72,X ; CPU:$D3D6 PRG:13D6 95 72 DEC $90,X ; CPU:$D3D8 PRG:13D8 D6 90 ObjectPathContinue_D3DA: SEC ; CPU:$D3DA PRG:13DA 38 RTS ; CPU:$D3DB PRG:13DB 60 ObjectPathOnNonZero_D3DC: STA $90,X ; CPU:$D3DC PRG:13DC 95 90 SEC ; CPU:$D3DE PRG:13DE 38 RTS ; CPU:$D3DF PRG:13DF 60 ObjectPathOnPositive_D3E0: STA $90,X ; CPU:$D3E0 PRG:13E0 95 90 LDA #$02 ; CPU:$D3E2 PRG:13E2 A9 02 STA $D0,X ; CPU:$D3E4 PRG:13E4 95 D0 JSR ProcessObjectStateRoutine_D42C ; CPU:$D3E6 PRG:13E6 20 2C D4 LDA $A0 ; CPU:$D3E9 PRG:13E9 A5 A0 BEQ ObjectPathOnZero_D3FF ; CPU:$D3EB PRG:13EB F0 12 LDA #$00 ; CPU:$D3ED PRG:13ED A9 00 STA $A0 ; CPU:$D3EF PRG:13EF 85 A0 STA $2F ; CPU:$D3F1 PRG:13F1 85 2F LDA #$04 ; CPU:$D3F3 PRG:13F3 A9 04 STA $2E ; CPU:$D3F5 PRG:13F5 85 2E LDA #$82 ; CPU:$D3F7 PRG:13F7 A9 82 JSR ProcessResourceStateRoutine_F31A ; CPU:$D3F9 PRG:13F9 20 1A F3 JSR UpdateGameStateRoutine_C402 ; CPU:$D3FC PRG:13FC 20 02 C4 ObjectPathOnZero_D3FF: SEC ; CPU:$D3FF PRG:13FF 38 RTS ; CPU:$D400 PRG:1400 60 UpdateObjectRecordDispatch_D401: LDA $5C,X ; CPU:$D401 PRG:1401 B5 5C BNE ObjectPathOnNonZero_D418 ; CPU:$D403 PRG:1403 D0 13 LDY $D2,X ; CPU:$D405 PRG:1405 B4 D2 LDA $D321,Y ; CPU:$D407 PRG:1407 B9 21 D3 LDY #$05 ; CPU:$D40A PRG:140A A0 05 STA (CurrentObjectPtrLo),Y ; CPU:$D40C PRG:140C 91 08 CMP #$17 ; CPU:$D40E PRG:140E C9 17 BEQ UpdateObjectRecordOnZero_D41A ; CPU:$D410 PRG:1410 F0 08 INC $D2,X ; CPU:$D412 PRG:1412 F6 D2 LDA #$08 ; CPU:$D414 PRG:1414 A9 08 ObjectPathLoop_D416: STA $5C,X ; CPU:$D416 PRG:1416 95 5C ObjectPathOnNonZero_D418: SEC ; CPU:$D418 PRG:1418 38 RTS ; CPU:$D419 PRG:1419 60 UpdateObjectRecordOnZero_D41A: DEC $90,X ; CPU:$D41A PRG:141A D6 90 LDY #$00 ; CPU:$D41C PRG:141C A0 00 LDA #$01 ; CPU:$D41E PRG:141E A9 01 STA (CurrentObjectPtrLo),Y ; CPU:$D420 PRG:1420 91 08 LDA #$80 ; CPU:$D422 PRG:1422 A9 80 LDY $80,X ; CPU:$D424 PRG:1424 B4 80 BNE ObjectPathLoop_D416 ; CPU:$D426 PRG:1426 D0 EE LDA #$10 ; CPU:$D428 PRG:1428 A9 10 BNE ObjectPathLoop_D416 ; CPU:$D42A PRG:142A D0 EA ;------------------------------------------------------------ ; ProcessObjectStateRoutine_D42C ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_D42C: LDY #$20 ; CPU:$D42C PRG:142C A0 20 LDA #$43 ; CPU:$D42E PRG:142E A9 43 CPX #$00 ; CPU:$D430 PRG:1430 E0 00 BEQ UpdateObjectBufferLoop_D436 ; CPU:$D432 PRG:1432 F0 02 LDA #$5A ; CPU:$D434 PRG:1434 A9 5A UpdateObjectBufferLoop_D436: STA $00 ; CPU:$D436 PRG:1436 85 00 STY $01 ; CPU:$D438 PRG:1438 84 01 LDA #$E7 ; CPU:$D43A PRG:143A A9 E7 STA $02 ; CPU:$D43C PRG:143C 85 02 LDA #$00 ; CPU:$D43E PRG:143E A9 00 STA $03 ; CPU:$D440 PRG:1440 85 03 LDA $80,X ; CPU:$D442 PRG:1442 B5 80 STA $E9 ; CPU:$D444 PRG:1444 85 E9 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$D446 PRG:1446 20 A1 F3 RTS ; CPU:$D449 PRG:1449 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_D44A ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_D44A: LDY #$28 ; CPU:$D44A PRG:144A A0 28 LDA #$E9 ; CPU:$D44C PRG:144C A9 E9 CPX #$00 ; CPU:$D44E PRG:144E E0 00 BEQ UpdateObjectBufferLoop_D436 ; CPU:$D450 PRG:1450 F0 E4 LDY #$2A ; CPU:$D452 PRG:1452 A0 2A LDA #$A9 ; CPU:$D454 PRG:1454 A9 A9 BNE UpdateObjectBufferLoop_D436 ; CPU:$D456 PRG:1456 D0 DE CLC ; CPU:$D458 PRG:1458 18 BMI ObjectPathOnNegative_D4A3 ; CPU:$D459 PRG:1459 30 48 RTS ; CPU:$D45B PRG:145B 60 .byte $78, $90, $A8, $C0, $D8, $20, $38, $50, $68, $80, $98, $B0, $C8, $C8, $0A, $18 ; CPU:$D45C PRG:145C 0B .byte $08, $08, $10, $04, $01, $03, $19, $1A, $01, $03 ; CPU:$D46C PRG:146C 0B ObjectPathLoop_D476: SBC #$03 ; CPU:$D476 PRG:1476 E9 03 CMP #$F0 ; CPU:$D478 PRG:1478 C9 F0 BCC ObjectPathOnNoCarry_D47E ; CPU:$D47A PRG:147A 90 02 LDA #$F0 ; CPU:$D47C PRG:147C A9 F0 ObjectPathOnNoCarry_D47E: JMP UpdateObjectRecordDispatch_D49E ; CPU:$D47E PRG:147E 4C 9E D4 ReadObjectRecordDispatch_D481: CMP #$F0 ; CPU:$D481 PRG:1481 C9 F0 BCS ReadObjectRecordOnCarry_D4D5 ; CPU:$D483 PRG:1483 B0 50 CMP #$90 ; CPU:$D485 PRG:1485 C9 90 AND #$0F ; CPU:$D487 PRG:1487 29 0F STA $06 ; CPU:$D489 PRG:1489 85 06 BCS UpdateObjectRecordOnCarry_D4DE ; CPU:$D48B PRG:148B B0 51 LSR A ; CPU:$D48D PRG:148D 4A TAX ; CPU:$D48E PRG:148E AA LDY $D474,X ; CPU:$D48F PRG:148F BC 74 D4 LDA (CurrentObjectPtrLo),Y ; CPU:$D492 PRG:1492 B1 08 BCS ObjectPathLoop_D476 ; CPU:$D494 PRG:1494 B0 E0 ADC #$03 ; CPU:$D496 PRG:1496 69 03 CMP #$F1 ; CPU:$D498 PRG:1498 C9 F1 BCC UpdateObjectRecordDispatch_D49E ; CPU:$D49A PRG:149A 90 02 LDA #$00 ; CPU:$D49C PRG:149C A9 00 UpdateObjectRecordDispatch_D49E: STA (CurrentObjectPtrLo),Y ; CPU:$D49E PRG:149E 91 08 LDA $0F ; CPU:$D4A0 PRG:14A0 A5 0F CLC ; CPU:$D4A2 PRG:14A2 18 ObjectPathOnNegative_D4A3: ADC #$06 ; CPU:$D4A3 PRG:14A3 69 06 JSR ReadObjectRecordRoutine_E5AA ; CPU:$D4A5 PRG:14A5 20 AA E5 LDY #$10 ; CPU:$D4A8 PRG:14A8 A0 10 BCS UpdateObjectRecordContinue_D4CB ; CPU:$D4AA PRG:14AA B0 1F CMP #$24 ; CPU:$D4AC PRG:14AC C9 24 BEQ UpdateObjectRecordContinue_D4CB ; CPU:$D4AE PRG:14AE F0 1B CMP #$FF ; CPU:$D4B0 PRG:14B0 C9 FF BEQ UpdateObjectRecordOnZero_D4B8 ; CPU:$D4B2 PRG:14B2 F0 04 CMP #$4A ; CPU:$D4B4 PRG:14B4 C9 4A BCS UpdateObjectRecordContinue_D4CB ; CPU:$D4B6 PRG:14B6 B0 13 UpdateObjectRecordOnZero_D4B8: LDA #$01 ; CPU:$D4B8 PRG:14B8 A9 01 STA $FC ; CPU:$D4BA PRG:14BA 85 FC LDA #$94 ; CPU:$D4BC PRG:14BC A9 94 STA (CurrentObjectPtrLo),Y ; CPU:$D4BE PRG:14BE 91 08 LDY #$15 ; CPU:$D4C0 PRG:14C0 A0 15 LDA #$02 ; CPU:$D4C2 PRG:14C2 A9 02 STA (CurrentObjectPtrLo),Y ; CPU:$D4C4 PRG:14C4 91 08 ObjectPathLoop_D4C6: LDA #$20 ; CPU:$D4C6 PRG:14C6 A9 20 JMP ProcessObjectStateDispatch_D783 ; CPU:$D4C8 PRG:14C8 4C 83 D7 UpdateObjectRecordContinue_D4CB: LDA (CurrentObjectPtrLo),Y ; CPU:$D4CB PRG:14CB B1 08 AND #$03 ; CPU:$D4CD PRG:14CD 29 03 ORA #$40 ; CPU:$D4CF PRG:14CF 09 40 STA (CurrentObjectPtrLo),Y ; CPU:$D4D1 PRG:14D1 91 08 BNE ObjectPathLoop_D4C6 ; CPU:$D4D3 PRG:14D3 D0 F1 ReadObjectRecordOnCarry_D4D5: LDY #$15 ; CPU:$D4D5 PRG:14D5 A0 15 LDA (CurrentObjectPtrLo),Y ; CPU:$D4D7 PRG:14D7 B1 08 BNE ObjectPathOnNonZero_D4F9 ; CPU:$D4D9 PRG:14D9 D0 1E JMP UpdateObjectRecordDispatch_D57E ; CPU:$D4DB PRG:14DB 4C 7E D5 UpdateObjectRecordOnCarry_D4DE: LDY #$15 ; CPU:$D4DE PRG:14DE A0 15 LDA (CurrentObjectPtrLo),Y ; CPU:$D4E0 PRG:14E0 B1 08 BNE ObjectPathOnNonZero_D4F9 ; CPU:$D4E2 PRG:14E2 D0 15 LDA #$01 ; CPU:$D4E4 PRG:14E4 A9 01 STA (CurrentObjectPtrLo),Y ; CPU:$D4E6 PRG:14E6 91 08 LDA $06 ; CPU:$D4E8 PRG:14E8 A5 06 CMP #$09 ; CPU:$D4EA PRG:14EA C9 09 BCS UpdateObjectRecordOnCarry_D4FC ; CPU:$D4EC PRG:14EC B0 0E LDY #$05 ; CPU:$D4EE PRG:14EE A0 05 STA (CurrentObjectPtrLo),Y ; CPU:$D4F0 PRG:14F0 91 08 CLC ; CPU:$D4F2 PRG:14F2 18 ADC #$91 ; CPU:$D4F3 PRG:14F3 69 91 LDY #$10 ; CPU:$D4F5 PRG:14F5 A0 10 STA (CurrentObjectPtrLo),Y ; CPU:$D4F7 PRG:14F7 91 08 ObjectPathOnNonZero_D4F9: JMP ProcessObjectStateDispatch_D67A ; CPU:$D4F9 PRG:14F9 4C 7A D6 UpdateObjectRecordOnCarry_D4FC: LDX $82 ; CPU:$D4FC PRG:14FC A6 82 LDA $C0C9,X ; CPU:$D4FE PRG:14FE BD C9 C0 STA (CurrentObjectPtrLo),Y ; CPU:$D501 PRG:1501 91 08 LDY #$10 ; CPU:$D503 PRG:1503 A0 10 LDA #$01 ; CPU:$D505 PRG:1505 A9 01 STA (CurrentObjectPtrLo),Y ; CPU:$D507 PRG:1507 91 08 LDY #$00 ; CPU:$D509 PRG:1509 A0 00 STA (CurrentObjectPtrLo),Y ; CPU:$D50B PRG:150B 91 08 INY ; CPU:$D50D PRG:150D C8 LDA (CurrentObjectPtrLo),Y ; CPU:$D50E PRG:150E B1 08 STA $04 ; CPU:$D510 PRG:1510 85 04 LDY #$03 ; CPU:$D512 PRG:1512 A0 03 LDA (CurrentObjectPtrLo),Y ; CPU:$D514 PRG:1514 B1 08 STA $05 ; CPU:$D516 PRG:1516 85 05 LDX #$01 ; CPU:$D518 PRG:1518 A2 01 JSR UpdateObjectBufferRoutine_DD5B ; CPU:$D51A PRG:151A 20 5B DD LDY #$1B ; CPU:$D51D PRG:151D A0 1B LDA (CurrentObjectPtrLo),Y ; CPU:$D51F PRG:151F B1 08 TAX ; CPU:$D521 PRG:1521 AA INC $D6,X ; CPU:$D522 PRG:1522 F6 D6 JMP ProcessObjectStateDispatch_D67A ; CPU:$D524 PRG:1524 4C 7A D6 UpdateObjectRecordDispatch_D527: LDX $82 ; CPU:$D527 PRG:1527 A6 82 LDA $C0C1,X ; CPU:$D529 PRG:1529 BD C1 C0 SBC #$05 ; CPU:$D52C PRG:152C E9 05 LDY #$15 ; CPU:$D52E PRG:152E A0 15 CMP (CurrentObjectPtrLo),Y ; CPU:$D530 PRG:1530 D1 08 BCC ObjectPathOnNoCarry_D54C ; CPU:$D532 PRG:1532 90 18 LDA (CurrentObjectPtrLo),Y ; CPU:$D534 PRG:1534 B1 08 BNE ObjectPathOnNonZero_D546 ; CPU:$D536 PRG:1536 D0 0E LDA #$10 ; CPU:$D538 PRG:1538 A9 10 STA (CurrentObjectPtrLo),Y ; CPU:$D53A PRG:153A 91 08 LDY #$10 ; CPU:$D53C PRG:153C A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$D53E PRG:153E B1 08 AND #$03 ; CPU:$D540 PRG:1540 29 03 ORA #$30 ; CPU:$D542 PRG:1542 09 30 STA (CurrentObjectPtrLo),Y ; CPU:$D544 PRG:1544 91 08 ObjectPathOnNonZero_D546: LDA #$04 ; CPU:$D546 PRG:1546 A9 04 UpdateObjectRecordLoop_D548: LDY #$05 ; CPU:$D548 PRG:1548 A0 05 STA (CurrentObjectPtrLo),Y ; CPU:$D54A PRG:154A 91 08 ObjectPathOnNoCarry_D54C: LDA #$30 ; CPU:$D54C PRG:154C A9 30 JMP ProcessObjectStateDispatch_D783 ; CPU:$D54E PRG:154E 4C 83 D7 .byte $A9, $10, $91, $08 ; CPU:$D551 PRG:1551 0B UpdateObjectRecordDispatch_D555: AND #$03 ; CPU:$D555 PRG:1555 29 03 ORA #$50 ; CPU:$D557 PRG:1557 09 50 STA (CurrentObjectPtrLo),Y ; CPU:$D559 PRG:1559 91 08 LDY #$15 ; CPU:$D55B PRG:155B A0 15 LDX $82 ; CPU:$D55D PRG:155D A6 82 LDA $C0C1,X ; CPU:$D55F PRG:155F BD C1 C0 STA (CurrentObjectPtrLo),Y ; CPU:$D562 PRG:1562 91 08 INY ; CPU:$D564 PRG:1564 C8 LDA #$00 ; CPU:$D565 PRG:1565 A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$D567 PRG:1567 91 08 LDY #$08 ; CPU:$D569 PRG:1569 A0 08 STA (CurrentObjectPtrLo),Y ; CPU:$D56B PRG:156B 91 08 LDA #$02 ; CPU:$D56D PRG:156D A9 02 STA $FC ; CPU:$D56F PRG:156F 85 FC LDY #$09 ; CPU:$D571 PRG:1571 A0 09 LDA (CurrentObjectPtrLo),Y ; CPU:$D573 PRG:1573 B1 08 AND #$F0 ; CPU:$D575 PRG:1575 29 F0 ORA #$03 ; CPU:$D577 PRG:1577 09 03 STA (CurrentObjectPtrLo),Y ; CPU:$D579 PRG:1579 91 08 JMP ProcessObjectStateDispatch_D67A ; CPU:$D57B PRG:157B 4C 7A D6 UpdateObjectRecordDispatch_D57E: LDY #$15 ; CPU:$D57E PRG:157E A0 15 LDA (CurrentObjectPtrLo),Y ; CPU:$D580 PRG:1580 B1 08 BNE UpdateObjectRecordOnNonZero_D595 ; CPU:$D582 PRG:1582 D0 11 LDA #$30 ; CPU:$D584 PRG:1584 A9 30 STA (CurrentObjectPtrLo),Y ; CPU:$D586 PRG:1586 91 08 LDY #$10 ; CPU:$D588 PRG:1588 A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$D58A PRG:158A B1 08 AND #$03 ; CPU:$D58C PRG:158C 29 03 ORA #$10 ; CPU:$D58E PRG:158E 09 10 STA (CurrentObjectPtrLo),Y ; CPU:$D590 PRG:1590 91 08 JMP ReadObjectRecordDispatch_D777 ; CPU:$D592 PRG:1592 4C 77 D7 UpdateObjectRecordOnNonZero_D595: LDY #$09 ; CPU:$D595 PRG:1595 A0 09 LDA (CurrentObjectPtrLo),Y ; CPU:$D597 PRG:1597 B1 08 AND #$F0 ; CPU:$D599 PRG:1599 29 F0 ORA #$02 ; CPU:$D59B PRG:159B 09 02 STA (CurrentObjectPtrLo),Y ; CPU:$D59D PRG:159D 91 08 ProcessObjectStateDispatch_D59F: LDA #$04 ; CPU:$D59F PRG:159F A9 04 BNE UpdateObjectRecordLoop_D548 ; CPU:$D5A1 PRG:15A1 D0 A5 UpdateObjectRecordDispatch_D5A3: STA $06 ; CPU:$D5A3 PRG:15A3 85 06 LDY #$17 ; CPU:$D5A5 PRG:15A5 A0 17 LDA (CurrentObjectPtrLo),Y ; CPU:$D5A7 PRG:15A7 B1 08 BNE ObjectPathContinue_D5CC ; CPU:$D5A9 PRG:15A9 D0 21 LDY #$15 ; CPU:$D5AB PRG:15AB A0 15 LDA (CurrentObjectPtrLo),Y ; CPU:$D5AD PRG:15AD B1 08 BEQ ObjectPathContinue_D5CC ; CPU:$D5AF PRG:15AF F0 1B INY ; CPU:$D5B1 PRG:15B1 C8 LDA (CurrentObjectPtrLo),Y ; CPU:$D5B2 PRG:15B2 B1 08 BNE ObjectPathOnNonZero_D5C9 ; CPU:$D5B4 PRG:15B4 D0 13 LDA #$04 ; CPU:$D5B6 PRG:15B6 A9 04 STA (CurrentObjectPtrLo),Y ; CPU:$D5B8 PRG:15B8 91 08 LDY #$10 ; CPU:$D5BA PRG:15BA A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$D5BC PRG:15BC B1 08 CLC ; CPU:$D5BE PRG:15BE 18 ADC #$01 ; CPU:$D5BF PRG:15BF 69 01 CMP #$24 ; CPU:$D5C1 PRG:15C1 C9 24 BNE UpdateObjectRecordOnNonZero_D5C7 ; CPU:$D5C3 PRG:15C3 D0 02 LDA #$20 ; CPU:$D5C5 PRG:15C5 A9 20 UpdateObjectRecordOnNonZero_D5C7: STA (CurrentObjectPtrLo),Y ; CPU:$D5C7 PRG:15C7 91 08 ObjectPathOnNonZero_D5C9: JMP ReadObjectRecordDispatch_D777 ; CPU:$D5C9 PRG:15C9 4C 77 D7 ObjectPathContinue_D5CC: LDX #$00 ; CPU:$D5CC PRG:15CC A2 00 LDA $06 ; CPU:$D5CE PRG:15CE A5 06 AND #$02 ; CPU:$D5D0 PRG:15D0 29 02 BNE ReadObjectRecordOnNonZero_D5D5 ; CPU:$D5D2 PRG:15D2 D0 01 INX ; CPU:$D5D4 PRG:15D4 E8 ReadObjectRecordOnNonZero_D5D5: EOR #$13 ; CPU:$D5D5 PRG:15D5 49 13 PHA ; CPU:$D5D7 PRG:15D7 48 LDY $D470,X ; CPU:$D5D8 PRG:15D8 BC 70 D4 LDA (CurrentObjectPtrLo),Y ; CPU:$D5DB PRG:15DB B1 08 LDY $D472,X ; CPU:$D5DD PRG:15DD BC 72 D4 LDX #$80 ; CPU:$D5E0 PRG:15E0 A2 80 SEC ; CPU:$D5E2 PRG:15E2 38 SBC (CurrentObjectPtrLo),Y ; CPU:$D5E3 PRG:15E3 F1 08 STA $00 ; CPU:$D5E5 PRG:15E5 85 00 BEQ ObjectPathOnZero_D5F8 ; CPU:$D5E7 PRG:15E7 F0 0F BCS ObjectPathOnCarry_D5F6 ; CPU:$D5E9 PRG:15E9 B0 0B PLA ; CPU:$D5EB PRG:15EB 68 AND #$12 ; CPU:$D5EC PRG:15EC 29 12 PHA ; CPU:$D5EE PRG:15EE 48 SEC ; CPU:$D5EF PRG:15EF 38 LDA #$00 ; CPU:$D5F0 PRG:15F0 A9 00 SBC $00 ; CPU:$D5F2 PRG:15F2 E5 00 STA $00 ; CPU:$D5F4 PRG:15F4 85 00 ObjectPathOnCarry_D5F6: LDX #$20 ; CPU:$D5F6 PRG:15F6 A2 20 ObjectPathOnZero_D5F8: PLA ; CPU:$D5F8 PRG:15F8 68 CPX $11 ; CPU:$D5F9 PRG:15F9 E4 11 BCC UpdateObjectRecordOnNoCarry_D5FF ; CPU:$D5FB PRG:15FB 90 02 EOR #$01 ; CPU:$D5FD PRG:15FD 49 01 UpdateObjectRecordOnNoCarry_D5FF: LDY #$10 ; CPU:$D5FF PRG:15FF A0 10 STA (CurrentObjectPtrLo),Y ; CPU:$D601 PRG:1601 91 08 LDX #$01 ; CPU:$D603 PRG:1603 A2 01 LDA $82 ; CPU:$D605 PRG:1605 A5 82 CMP #$03 ; CPU:$D607 PRG:1607 C9 03 BCC UpdateObjectRecordOnNoCarry_D60C ; CPU:$D609 PRG:1609 90 01 INX ; CPU:$D60B PRG:160B E8 UpdateObjectRecordOnNoCarry_D60C: TXA ; CPU:$D60C PRG:160C 8A LDY #$18 ; CPU:$D60D PRG:160D A0 18 STA (CurrentObjectPtrLo),Y ; CPU:$D60F PRG:160F 91 08 LDY #$00 ; CPU:$D611 PRG:1611 A0 00 STY $01 ; CPU:$D613 PRG:1613 84 01 ObjectPathLoop_D615: SEC ; CPU:$D615 PRG:1615 38 LDA WorkPtr0Hi ; CPU:$D616 PRG:1616 A5 01 SBC $C0BD,X ; CPU:$D618 PRG:1618 FD BD C0 STA $01 ; CPU:$D61B PRG:161B 85 01 LDA WorkPtr0Lo ; CPU:$D61D PRG:161D A5 00 SBC $C0B5,X ; CPU:$D61F PRG:161F FD B5 C0 STA $00 ; CPU:$D622 PRG:1622 85 00 INY ; CPU:$D624 PRG:1624 C8 BCS ObjectPathLoop_D615 ; CPU:$D625 PRG:1625 B0 EE TYA ; CPU:$D627 PRG:1627 98 LDY #$00 ; CPU:$D628 PRG:1628 A0 00 UpdateObjectRecordLoop_D62A: SEC ; CPU:$D62A PRG:162A 38 SBC #$06 ; CPU:$D62B PRG:162B E9 06 INY ; CPU:$D62D PRG:162D C8 BCS UpdateObjectRecordLoop_D62A ; CPU:$D62E PRG:162E B0 FA TYA ; CPU:$D630 PRG:1630 98 LDY #$15 ; CPU:$D631 PRG:1631 A0 15 STA (CurrentObjectPtrLo),Y ; CPU:$D633 PRG:1633 91 08 INY ; CPU:$D635 PRG:1635 C8 LDA #$00 ; CPU:$D636 PRG:1636 A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$D638 PRG:1638 91 08 INY ; CPU:$D63A PRG:163A C8 STA (CurrentObjectPtrLo),Y ; CPU:$D63B PRG:163B 91 08 JMP ReadObjectRecordDispatch_D777 ; CPU:$D63D PRG:163D 4C 77 D7 ObjectPathLoop_D640: JMP UpdateObjectRecordDispatch_D5A3 ; CPU:$D640 PRG:1640 4C A3 D5 ObjectPathLoop_D643: JMP ReadObjectRecordDispatch_D481 ; CPU:$D643 PRG:1643 4C 81 D4 ObjectPathLoop_D646: JMP UpdateObjectRecordDispatch_D57E ; CPU:$D646 PRG:1646 4C 7E D5 ObjectPathLoop_D649: JMP UpdateObjectBufferDispatch_D73B ; CPU:$D649 PRG:1649 4C 3B D7 ObjectPathLoop_D64C: JMP UpdateObjectRecordDispatch_D555 ; CPU:$D64C PRG:164C 4C 55 D5 ;------------------------------------------------------------ ; UpdateObjectBuffer_D64F ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBuffer_D64F: LDA #$03 ; CPU:$D64F PRG:164F A9 03 STA $0F ; CPU:$D651 PRG:1651 85 0F LDA #$80 ; CPU:$D653 PRG:1653 A9 80 STA $08 ; CPU:$D655 PRG:1655 85 08 LDA #$04 ; CPU:$D657 PRG:1657 A9 04 STA $09 ; CPU:$D659 PRG:1659 85 09 ReadObjectRecordLoop_D65B: LDY #$10 ; CPU:$D65B PRG:165B A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$D65D PRG:165D B1 08 BEQ ProcessObjectStateDispatch_D67A ; CPU:$D65F PRG:165F F0 19 BMI ObjectPathLoop_D643 ; CPU:$D661 PRG:1661 30 E0 CMP #$01 ; CPU:$D663 PRG:1663 C9 01 BEQ ReadObjectRecordOnZero_D6A9 ; CPU:$D665 PRG:1665 F0 42 CMP #$20 ; CPU:$D667 PRG:1667 C9 20 BCC ObjectPathLoop_D649 ; CPU:$D669 PRG:1669 90 DE CMP #$30 ; CPU:$D66B PRG:166B C9 30 BCC ObjectPathLoop_D640 ; CPU:$D66D PRG:166D 90 D1 CMP #$40 ; CPU:$D66F PRG:166F C9 40 BCC ObjectPathLoop_D646 ; CPU:$D671 PRG:1671 90 D3 CMP #$50 ; CPU:$D673 PRG:1673 C9 50 BCC ObjectPathLoop_D64C ; CPU:$D675 PRG:1675 90 D5 JMP UpdateObjectRecordDispatch_D527 ; CPU:$D677 PRG:1677 4C 27 D5 ProcessObjectStateDispatch_D67A: LDX $5E ; CPU:$D67A PRG:167A A6 5E BNE UpdateObjectRecordContinue_D68E ; CPU:$D67C PRG:167C D0 10 LDY #$15 ; CPU:$D67E PRG:167E A0 15 UpdateObjectRecordLoop_D680: LDA (CurrentObjectPtrLo),Y ; CPU:$D680 PRG:1680 B1 08 BEQ UpdateObjectRecordContinue_D68E ; CPU:$D682 PRG:1682 F0 0A SEC ; CPU:$D684 PRG:1684 38 SBC #$01 ; CPU:$D685 PRG:1685 E9 01 STA (CurrentObjectPtrLo),Y ; CPU:$D687 PRG:1687 91 08 INY ; CPU:$D689 PRG:1689 C8 CPY #$17 ; CPU:$D68A PRG:168A C0 17 BCC UpdateObjectRecordLoop_D680 ; CPU:$D68C PRG:168C 90 F2 UpdateObjectRecordContinue_D68E: LDY #$1C ; CPU:$D68E PRG:168E A0 1C LDA (CurrentObjectPtrLo),Y ; CPU:$D690 PRG:1690 B1 08 BEQ ObjectPathOnZero_D699 ; CPU:$D692 PRG:1692 F0 05 SEC ; CPU:$D694 PRG:1694 38 SBC #$01 ; CPU:$D695 PRG:1695 E9 01 STA (CurrentObjectPtrLo),Y ; CPU:$D697 PRG:1697 91 08 ObjectPathOnZero_D699: LDX #$08 ; CPU:$D699 PRG:1699 A2 08 JSR RunGameTaskRoutine_CBD3 ; CPU:$D69B PRG:169B 20 D3 CB BPL ReadObjectRecordLoop_D65B ; CPU:$D69E PRG:169E 10 BB LDX $5E ; CPU:$D6A0 PRG:16A0 A6 5E BNE ObjectPathOnNonZero_D6A8 ; CPU:$D6A2 PRG:16A2 D0 04 LDX #$05 ; CPU:$D6A4 PRG:16A4 A2 05 STX $5E ; CPU:$D6A6 PRG:16A6 86 5E ObjectPathOnNonZero_D6A8: RTS ; CPU:$D6A8 PRG:16A8 60 ReadObjectRecordOnZero_D6A9: LDY #$15 ; CPU:$D6A9 PRG:16A9 A0 15 LDA (CurrentObjectPtrLo),Y ; CPU:$D6AB PRG:16AB B1 08 BNE ProcessObjectStateDispatch_D67A ; CPU:$D6AD PRG:16AD D0 CB JSR RunGameTaskRoutine_C8AA ; CPU:$D6AF PRG:16AF 20 AA C8 LDY #$00 ; CPU:$D6B2 PRG:16B2 A0 00 LDA ($04),Y ; CPU:$D6B4 PRG:16B4 B1 04 LSR A ; CPU:$D6B6 PRG:16B6 4A TAX ; CPU:$D6B7 PRG:16B7 AA DEX ; CPU:$D6B8 PRG:16B8 CA BEQ ProcessObjectStateDispatch_D67A ; CPU:$D6B9 PRG:16B9 F0 BF LDA $A6 ; CPU:$D6BB PRG:16BB A5 A6 BNE UpdateObjectBufferOnNonZero_D6C0 ; CPU:$D6BD PRG:16BD D0 01 TXA ; CPU:$D6BF PRG:16BF 8A UpdateObjectBufferOnNonZero_D6C0: STA $A6 ; CPU:$D6C0 PRG:16C0 85 A6 DEC $A6 ; CPU:$D6C2 PRG:16C2 C6 A6 ASL A ; CPU:$D6C4 PRG:16C4 0A TAY ; CPU:$D6C5 PRG:16C5 A8 LDA ($04),Y ; CPU:$D6C6 PRG:16C6 B1 04 STA $02 ; CPU:$D6C8 PRG:16C8 85 02 INY ; CPU:$D6CA PRG:16CA C8 LDA ($04),Y ; CPU:$D6CB PRG:16CB B1 04 STA $03 ; CPU:$D6CD PRG:16CD 85 03 JSR UpdateObjectBufferRoutine_E0F9 ; CPU:$D6CF PRG:16CF 20 F9 E0 LDY #$05 ; CPU:$D6D2 PRG:16D2 A0 05 LDA #$00 ; CPU:$D6D4 PRG:16D4 A9 00 UpdateObjectRecordLoop_D6D6: STA (CurrentObjectPtrLo),Y ; CPU:$D6D6 PRG:16D6 91 08 DEY ; CPU:$D6D8 PRG:16D8 88 BPL UpdateObjectRecordLoop_D6D6 ; CPU:$D6D9 PRG:16D9 10 FB LDY #$09 ; CPU:$D6DB PRG:16DB A0 09 LDA #$02 ; CPU:$D6DD PRG:16DD A9 02 STA (CurrentObjectPtrLo),Y ; CPU:$D6DF PRG:16DF 91 08 LDY #$01 ; CPU:$D6E1 PRG:16E1 A0 01 LDA WorkPtr0Lo ; CPU:$D6E3 PRG:16E3 A5 00 STA (CurrentObjectPtrLo),Y ; CPU:$D6E5 PRG:16E5 91 08 LDY #$03 ; CPU:$D6E7 PRG:16E7 A0 03 LDA WorkPtr0Hi ; CPU:$D6E9 PRG:16E9 A5 01 STA (CurrentObjectPtrLo),Y ; CPU:$D6EB PRG:16EB 91 08 LDY #$10 ; CPU:$D6ED PRG:16ED A0 10 LDA $15 ; CPU:$D6EF PRG:16EF A5 15 AND #$03 ; CPU:$D6F1 PRG:16F1 29 03 ORA #$30 ; CPU:$D6F3 PRG:16F3 09 30 STA (CurrentObjectPtrLo),Y ; CPU:$D6F5 PRG:16F5 91 08 LDY #$15 ; CPU:$D6F7 PRG:16F7 A0 15 LDA #$0C ; CPU:$D6F9 PRG:16F9 A9 0C STA (CurrentObjectPtrLo),Y ; CPU:$D6FB PRG:16FB 91 08 INY ; CPU:$D6FD PRG:16FD C8 LDA #$00 ; CPU:$D6FE PRG:16FE A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$D700 PRG:1700 91 08 INY ; CPU:$D702 PRG:1702 C8 STA (CurrentObjectPtrLo),Y ; CPU:$D703 PRG:1703 91 08 INY ; CPU:$D705 PRG:1705 C8 LDA #$01 ; CPU:$D706 PRG:1706 A9 01 STA (CurrentObjectPtrLo),Y ; CPU:$D708 PRG:1708 91 08 LDA #$03 ; CPU:$D70A PRG:170A A9 03 STA $02 ; CPU:$D70C PRG:170C 85 02 LDA #$80 ; CPU:$D70E PRG:170E A9 80 STA $00 ; CPU:$D710 PRG:1710 85 00 LDA #$04 ; CPU:$D712 PRG:1712 A9 04 STA $01 ; CPU:$D714 PRG:1714 85 01 ObjectPathLoop_D716: LDY #$10 ; CPU:$D716 PRG:1716 A0 10 LDA ($00),Y ; CPU:$D718 PRG:1718 B1 00 CMP #$01 ; CPU:$D71A PRG:171A C9 01 BNE ObjectPathContinue_D72A ; CPU:$D71C PRG:171C D0 0C LDY #$15 ; CPU:$D71E PRG:171E A0 15 LDA ($00),Y ; CPU:$D720 PRG:1720 B1 00 CMP #$20 ; CPU:$D722 PRG:1722 C9 20 BCS ObjectPathContinue_D72A ; CPU:$D724 PRG:1724 B0 04 LDA #$20 ; CPU:$D726 PRG:1726 A9 20 STA ($00),Y ; CPU:$D728 PRG:1728 91 00 ObjectPathContinue_D72A: LDX #$00 ; CPU:$D72A PRG:172A A2 00 JSR RunGameTaskRoutine_CBD3 ; CPU:$D72C PRG:172C 20 D3 CB DEC $02 ; CPU:$D72F PRG:172F C6 02 BPL ObjectPathLoop_D716 ; CPU:$D731 PRG:1731 10 E3 JMP ProcessObjectStateDispatch_D59F ; CPU:$D733 PRG:1733 4C 9F D5 ObjectPathLoop_D736: INY ; CPU:$D736 PRG:1736 C8 LDA #$01 ; CPU:$D737 PRG:1737 A9 01 BNE UpdateObjectRecordOnNonZero_D775 ; CPU:$D739 PRG:1739 D0 3A UpdateObjectBufferDispatch_D73B: AND #$03 ; CPU:$D73B PRG:173B 29 03 STA $06 ; CPU:$D73D PRG:173D 85 06 LDA $0F ; CPU:$D73F PRG:173F A5 0F CLC ; CPU:$D741 PRG:1741 18 ADC #$06 ; CPU:$D742 PRG:1742 69 06 JSR ReadObjectRecordRoutine_E5AA ; CPU:$D744 PRG:1744 20 AA E5 BCS ReadObjectRecordContinue_D7A4 ; CPU:$D747 PRG:1747 B0 5B CMP #$24 ; CPU:$D749 PRG:1749 C9 24 BEQ ReadObjectRecordContinue_D7A4 ; CPU:$D74B PRG:174B F0 57 CMP #$4E ; CPU:$D74D PRG:174D C9 4E BCS ObjectPathOnCarry_D755 ; CPU:$D74F PRG:174F B0 04 CMP #$4A ; CPU:$D751 PRG:1751 C9 4A BCS ReadObjectRecordContinue_D7A4 ; CPU:$D753 PRG:1753 B0 4F ObjectPathOnCarry_D755: CMP #$60 ; CPU:$D755 PRG:1755 C9 60 BCS ObjectPathOnCarry_D75D ; CPU:$D757 PRG:1757 B0 04 CMP #$50 ; CPU:$D759 PRG:1759 C9 50 BCS ReadObjectRecordContinue_D7A4 ; CPU:$D75B PRG:175B B0 47 ObjectPathOnCarry_D75D: CMP #$FD ; CPU:$D75D PRG:175D C9 FD BCS UpdateObjectRecordOnCarry_D765 ; CPU:$D75F PRG:175F B0 04 CMP #$F9 ; CPU:$D761 PRG:1761 C9 F9 BCS ReadObjectRecordContinue_D7A4 ; CPU:$D763 PRG:1763 B0 3F UpdateObjectRecordOnCarry_D765: LDA #$11 ; CPU:$D765 PRG:1765 A9 11 EOR $06 ; CPU:$D767 PRG:1767 45 06 LDY #$10 ; CPU:$D769 PRG:1769 A0 10 STA (CurrentObjectPtrLo),Y ; CPU:$D76B PRG:176B 91 08 LDY #$16 ; CPU:$D76D PRG:176D A0 16 LDA (CurrentObjectPtrLo),Y ; CPU:$D76F PRG:176F B1 08 BNE ObjectPathLoop_D736 ; CPU:$D771 PRG:1771 D0 C3 LDA #$18 ; CPU:$D773 PRG:1773 A9 18 UpdateObjectRecordOnNonZero_D775: STA (CurrentObjectPtrLo),Y ; CPU:$D775 PRG:1775 91 08 ReadObjectRecordDispatch_D777: LDY #$10 ; CPU:$D777 PRG:1777 A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$D779 PRG:1779 B1 08 PHA ; CPU:$D77B PRG:177B 48 AND #$03 ; CPU:$D77C PRG:177C 29 03 TAX ; CPU:$D77E PRG:177E AA JSR UpdateObjectRecordRoutine_CD45 ; CPU:$D77F PRG:177F 20 45 CD PLA ; CPU:$D782 PRG:1782 68 ProcessObjectStateDispatch_D783: AND #$F0 ; CPU:$D783 PRG:1783 29 F0 LSR A ; CPU:$D785 PRG:1785 4A LSR A ; CPU:$D786 PRG:1786 4A LSR A ; CPU:$D787 PRG:1787 4A LSR A ; CPU:$D788 PRG:1788 4A TAX ; CPU:$D789 PRG:1789 AA DEX ; CPU:$D78A PRG:178A CA LDA $5F,X ; CPU:$D78B PRG:178B B5 5F BNE UpdateObjectRecordOnNonZero_D794 ; CPU:$D78D PRG:178D D0 05 LDA $D46A,X ; CPU:$D78F PRG:178F BD 6A D4 STA $5F,X ; CPU:$D792 PRG:1792 95 5F UpdateObjectRecordOnNonZero_D794: CMP $D46D,X ; CPU:$D794 PRG:1794 DD 6D D4 BCC ObjectPathOnNoCarry_D7A1 ; CPU:$D797 PRG:1797 90 08 LDY #$05 ; CPU:$D799 PRG:1799 A0 05 LDA #$01 ; CPU:$D79B PRG:179B A9 01 EOR (CurrentObjectPtrLo),Y ; CPU:$D79D PRG:179D 51 08 STA (CurrentObjectPtrLo),Y ; CPU:$D79F PRG:179F 91 08 ObjectPathOnNoCarry_D7A1: JMP ProcessObjectStateDispatch_D67A ; CPU:$D7A1 PRG:17A1 4C 7A D6 ReadObjectRecordContinue_D7A4: LDY #$15 ; CPU:$D7A4 PRG:17A4 A0 15 LDA (CurrentObjectPtrLo),Y ; CPU:$D7A6 PRG:17A6 B1 08 BEQ UpdateObjectRecordContinue_D814 ; CPU:$D7A8 PRG:17A8 F0 6A LDY #$17 ; CPU:$D7AA PRG:17AA A0 17 LDA (CurrentObjectPtrLo),Y ; CPU:$D7AC PRG:17AC B1 08 BNE UpdateObjectRecordContinue_D814 ; CPU:$D7AE PRG:17AE D0 64 LDA $06 ; CPU:$D7B0 PRG:17B0 A5 06 LDX #$01 ; CPU:$D7B2 PRG:17B2 A2 01 CMP #$02 ; CPU:$D7B4 PRG:17B4 C9 02 BCC TestObjectFieldOnNoCarry_D7B9 ; CPU:$D7B6 PRG:17B6 90 01 DEX ; CPU:$D7B8 PRG:17B8 CA TestObjectFieldOnNoCarry_D7B9: LDY $D470,X ; CPU:$D7B9 PRG:17B9 BC 70 D4 LDA (CurrentObjectPtrLo),Y ; CPU:$D7BC PRG:17BC B1 08 LDY $D472,X ; CPU:$D7BE PRG:17BE BC 72 D4 CMP (CurrentObjectPtrLo),Y ; CPU:$D7C1 PRG:17C1 D1 08 BNE ReadObjectRecordLoop_D80D ; CPU:$D7C3 PRG:17C3 D0 48 TXA ; CPU:$D7C5 PRG:17C5 8A EOR #$01 ; CPU:$D7C6 PRG:17C6 49 01 TAX ; CPU:$D7C8 PRG:17C8 AA LDY $D470,X ; CPU:$D7C9 PRG:17C9 BC 70 D4 LDA (CurrentObjectPtrLo),Y ; CPU:$D7CC PRG:17CC B1 08 LDY $D472,X ; CPU:$D7CE PRG:17CE BC 72 D4 CMP (CurrentObjectPtrLo),Y ; CPU:$D7D1 PRG:17D1 D1 08 LDA $06 ; CPU:$D7D3 PRG:17D3 A5 06 AND #$01 ; CPU:$D7D5 PRG:17D5 29 01 BCS ObjectPathOnCarry_D807 ; CPU:$D7D7 PRG:17D7 B0 2E BEQ ObjectPathOnZero_D809 ; CPU:$D7D9 PRG:17D9 F0 2E ObjectPathLoop_D7DB: LDA #$00 ; CPU:$D7DB PRG:17DB A9 00 ProcessObjectStateDispatch_D7DD: TAX ; CPU:$D7DD PRG:17DD AA LDA $06 ; CPU:$D7DE PRG:17DE A5 06 LDY #$02 ; CPU:$D7E0 PRG:17E0 A0 02 CMP #$02 ; CPU:$D7E2 PRG:17E2 C9 02 BCC ObjectPathOnNoCarry_D7E8 ; CPU:$D7E4 PRG:17E4 90 02 LDY #$04 ; CPU:$D7E6 PRG:17E6 A0 04 ObjectPathOnNoCarry_D7E8: AND #$01 ; CPU:$D7E8 PRG:17E8 29 01 BNE UpdateObjectRecordOnNonZero_D7F0 ; CPU:$D7EA PRG:17EA D0 04 INX ; CPU:$D7EC PRG:17EC E8 INX ; CPU:$D7ED PRG:17ED E8 INX ; CPU:$D7EE PRG:17EE E8 INX ; CPU:$D7EF PRG:17EF E8 UpdateObjectRecordOnNonZero_D7F0: LDA $77 ; CPU:$D7F0 PRG:17F0 A5 77 BNE ObjectPathOnNonZero_D804 ; CPU:$D7F2 PRG:17F2 D0 10 CLC ; CPU:$D7F4 PRG:17F4 18 LDA $C0B9,X ; CPU:$D7F5 PRG:17F5 BD B9 C0 ADC (CurrentObjectPtrLo),Y ; CPU:$D7F8 PRG:17F8 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$D7FA PRG:17FA 91 08 DEY ; CPU:$D7FC PRG:17FC 88 LDA $C0B1,X ; CPU:$D7FD PRG:17FD BD B1 C0 ADC (CurrentObjectPtrLo),Y ; CPU:$D800 PRG:1800 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$D802 PRG:1802 91 08 ObjectPathOnNonZero_D804: JMP ReadObjectRecordDispatch_D777 ; CPU:$D804 PRG:1804 4C 77 D7 ObjectPathOnCarry_D807: BEQ ObjectPathLoop_D7DB ; CPU:$D807 PRG:1807 F0 D2 ObjectPathOnZero_D809: LDA #$03 ; CPU:$D809 PRG:1809 A9 03 BNE ProcessObjectStateDispatch_D7DD ; CPU:$D80B PRG:180B D0 D0 ReadObjectRecordLoop_D80D: LDY #$18 ; CPU:$D80D PRG:180D A0 18 LDA (CurrentObjectPtrLo),Y ; CPU:$D80F PRG:180F B1 08 JMP ProcessObjectStateDispatch_D7DD ; CPU:$D811 PRG:1811 4C DD D7 UpdateObjectRecordContinue_D814: LDY #$18 ; CPU:$D814 PRG:1814 A0 18 LDA #$00 ; CPU:$D816 PRG:1816 A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$D818 PRG:1818 91 08 LDY #$03 ; CPU:$D81A PRG:181A A0 03 LDX #$08 ; CPU:$D81C PRG:181C A2 08 LDA $06 ; CPU:$D81E PRG:181E A5 06 CMP #$02 ; CPU:$D820 PRG:1820 C9 02 BCS ReadObjectRecordOnCarry_D828 ; CPU:$D822 PRG:1822 B0 04 LDY #$01 ; CPU:$D824 PRG:1824 A0 01 LDX #$11 ; CPU:$D826 PRG:1826 A2 11 ReadObjectRecordOnCarry_D828: LDA (CurrentObjectPtrLo),Y ; CPU:$D828 PRG:1828 B1 08 INY ; CPU:$D82A PRG:182A C8 STY $00 ; CPU:$D82B PRG:182B 84 00 LDY #$09 ; CPU:$D82D PRG:182D A0 09 ObjectPathLoop_D82F: CMP $D458,X ; CPU:$D82F PRG:182F DD 58 D4 BEQ ObjectPathOnZero_D83A ; CPU:$D832 PRG:1832 F0 06 DEX ; CPU:$D834 PRG:1834 CA DEY ; CPU:$D835 PRG:1835 88 BNE ObjectPathLoop_D82F ; CPU:$D836 PRG:1836 D0 F7 BEQ ReadObjectRecordLoop_D80D ; CPU:$D838 PRG:1838 F0 D3 ObjectPathOnZero_D83A: LDA $15 ; CPU:$D83A PRG:183A A5 15 CMP #$20 ; CPU:$D83C PRG:183C C9 20 BCC UpdateObjectRecordOnNoCarry_D842 ; CPU:$D83E PRG:183E 90 02 LDA #$00 ; CPU:$D840 PRG:1840 A9 00 UpdateObjectRecordOnNoCarry_D842: LDY #$15 ; CPU:$D842 PRG:1842 A0 15 STA (CurrentObjectPtrLo),Y ; CPU:$D844 PRG:1844 91 08 INY ; CPU:$D846 PRG:1846 C8 LDA #$04 ; CPU:$D847 PRG:1847 A9 04 STA (CurrentObjectPtrLo),Y ; CPU:$D849 PRG:1849 91 08 LDY #$10 ; CPU:$D84B PRG:184B A0 10 LDA $06 ; CPU:$D84D PRG:184D A5 06 ORA #$20 ; CPU:$D84F PRG:184F 09 20 STA (CurrentObjectPtrLo),Y ; CPU:$D851 PRG:1851 91 08 JMP ReadObjectRecordDispatch_D777 ; CPU:$D853 PRG:1853 4C 77 D7 ;------------------------------------------------------------ ; ObjectPath_D856 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D856: LDA #$07 ; CPU:$D856 PRG:1856 A9 07 STA $0E ; CPU:$D858 PRG:1858 85 0E LDA #$00 ; CPU:$D85A PRG:185A A9 00 STA $00 ; CPU:$D85C PRG:185C 85 00 LDA #$05 ; CPU:$D85E PRG:185E A9 05 STA $01 ; CPU:$D860 PRG:1860 85 01 UpdateObjectBufferLoop_D862: LDA #$03 ; CPU:$D862 PRG:1862 A9 03 STA $0F ; CPU:$D864 PRG:1864 85 0F LDA #$80 ; CPU:$D866 PRG:1866 A9 80 STA $02 ; CPU:$D868 PRG:1868 85 02 LDA #$04 ; CPU:$D86A PRG:186A A9 04 STA $03 ; CPU:$D86C PRG:186C 85 03 ObjectPathLoop_D86E: LDY #$10 ; CPU:$D86E PRG:186E A0 10 LDA ($00),Y ; CPU:$D870 PRG:1870 B1 00 BEQ ObjectPathContinue_D8A5 ; CPU:$D872 PRG:1872 F0 31 LDY #$05 ; CPU:$D874 PRG:1874 A0 05 LDA ($00),Y ; CPU:$D876 PRG:1876 B1 00 CMP #$08 ; CPU:$D878 PRG:1878 C9 08 BEQ ObjectPathOnZero_D888 ; CPU:$D87A PRG:187A F0 0C CMP #$09 ; CPU:$D87C PRG:187C C9 09 BEQ ObjectPathOnZero_D888 ; CPU:$D87E PRG:187E F0 08 CMP #$12 ; CPU:$D880 PRG:1880 C9 12 BEQ ObjectPathOnZero_D888 ; CPU:$D882 PRG:1882 F0 04 CMP #$13 ; CPU:$D884 PRG:1884 C9 13 BNE ObjectPathContinue_D8A5 ; CPU:$D886 PRG:1886 D0 1D ObjectPathOnZero_D888: LDY #$10 ; CPU:$D888 PRG:1888 A0 10 LDA ($02),Y ; CPU:$D88A PRG:188A B1 02 CMP #$02 ; CPU:$D88C PRG:188C C9 02 BCC ObjectPathContinue_D8A5 ; CPU:$D88E PRG:188E 90 15 BPL UpdateObjectBufferOnPositive_D896 ; CPU:$D890 PRG:1890 10 04 CMP #$F0 ; CPU:$D892 PRG:1892 C9 F0 BCC ObjectPathContinue_D8A5 ; CPU:$D894 PRG:1894 90 0F UpdateObjectBufferOnPositive_D896: JSR ProcessResourceStateRoutine_F71C ; CPU:$D896 PRG:1896 20 1C F7 BCC ObjectPathContinue_D8A5 ; CPU:$D899 PRG:1899 90 0A LDY #$10 ; CPU:$D89B PRG:189B A0 10 LDA ($02),Y ; CPU:$D89D PRG:189D B1 02 AND #$03 ; CPU:$D89F PRG:189F 29 03 ORA #$40 ; CPU:$D8A1 PRG:18A1 09 40 STA ($02),Y ; CPU:$D8A3 PRG:18A3 91 02 ObjectPathContinue_D8A5: LDX #$02 ; CPU:$D8A5 PRG:18A5 A2 02 JSR RunGameTaskRoutine_CBD3 ; CPU:$D8A7 PRG:18A7 20 D3 CB BPL ObjectPathLoop_D86E ; CPU:$D8AA PRG:18AA 10 C2 LDX #$00 ; CPU:$D8AC PRG:18AC A2 00 JSR RunGameTaskRoutine_CBD3 ; CPU:$D8AE PRG:18AE 20 D3 CB DEC $0E ; CPU:$D8B1 PRG:18B1 C6 0E BPL UpdateObjectBufferLoop_D862 ; CPU:$D8B3 PRG:18B3 10 AD RTS ; CPU:$D8B5 PRG:18B5 60 .byte $00, $02, $01, $03 ; CPU:$D8B6 PRG:18B6 0B ;------------------------------------------------------------ ; ObjectPath_D8BA ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D8BA: LDA #$01 ; CPU:$D8BA PRG:18BA A9 01 STA $0E ; CPU:$D8BC PRG:18BC 85 0E LDA #$40 ; CPU:$D8BE PRG:18BE A9 40 STA $00 ; CPU:$D8C0 PRG:18C0 85 00 LDA #$04 ; CPU:$D8C2 PRG:18C2 A9 04 STA $01 ; CPU:$D8C4 PRG:18C4 85 01 UpdateObjectBufferLoop_D8C6: LDA #$03 ; CPU:$D8C6 PRG:18C6 A9 03 STA $0F ; CPU:$D8C8 PRG:18C8 85 0F LDA #$80 ; CPU:$D8CA PRG:18CA A9 80 STA $02 ; CPU:$D8CC PRG:18CC 85 02 LDA #$04 ; CPU:$D8CE PRG:18CE A9 04 STA $03 ; CPU:$D8D0 PRG:18D0 85 03 ObjectPathLoop_D8D2: JSR ProcessObjectStateRoutine_D970 ; CPU:$D8D2 PRG:18D2 20 70 D9 BNE ProcessObjectStateDispatch_D904 ; CPU:$D8D5 PRG:18D5 D0 2D LDY #$10 ; CPU:$D8D7 PRG:18D7 A0 10 LDA ($02),Y ; CPU:$D8D9 PRG:18D9 B1 02 BPL ObjectPathOnPositive_D8E1 ; CPU:$D8DB PRG:18DB 10 04 CMP #$F0 ; CPU:$D8DD PRG:18DD C9 F0 BCC ProcessObjectStateDispatch_D904 ; CPU:$D8DF PRG:18DF 90 23 ObjectPathOnPositive_D8E1: CMP #$02 ; CPU:$D8E1 PRG:18E1 C9 02 BCC ProcessObjectStateDispatch_D904 ; CPU:$D8E3 PRG:18E3 90 1F JSR ProcessResourceStateRoutine_F71C ; CPU:$D8E5 PRG:18E5 20 1C F7 BCC ProcessObjectStateDispatch_D904 ; CPU:$D8E8 PRG:18E8 90 1A LDY #$10 ; CPU:$D8EA PRG:18EA A0 10 LDA ($02),Y ; CPU:$D8EC PRG:18EC B1 02 CMP #$30 ; CPU:$D8EE PRG:18EE C9 30 BCS ObjectPathOnCarry_D928 ; CPU:$D8F0 PRG:18F0 B0 36 UpdateObjectBufferLoop_D8F2: LDA #$23 ; CPU:$D8F2 PRG:18F2 A9 23 STA $90,X ; CPU:$D8F4 PRG:18F4 95 90 LDA ($02),Y ; CPU:$D8F6 PRG:18F6 B1 02 AND #$03 ; CPU:$D8F8 PRG:18F8 29 03 ORA #$F0 ; CPU:$D8FA PRG:18FA 09 F0 STA ($02),Y ; CPU:$D8FC PRG:18FC 91 02 LDY #$15 ; CPU:$D8FE PRG:18FE A0 15 LDA #$08 ; CPU:$D900 PRG:1900 A9 08 STA ($02),Y ; CPU:$D902 PRG:1902 91 02 ProcessObjectStateDispatch_D904: LDX #$02 ; CPU:$D904 PRG:1904 A2 02 JSR RunGameTaskRoutine_CBD3 ; CPU:$D906 PRG:1906 20 D3 CB BPL ObjectPathLoop_D8D2 ; CPU:$D909 PRG:1909 10 C7 LDA #$00 ; CPU:$D90B PRG:190B A9 00 STA $00 ; CPU:$D90D PRG:190D 85 00 LDA #$04 ; CPU:$D90F PRG:190F A9 04 STA $01 ; CPU:$D911 PRG:1911 85 01 DEC $0E ; CPU:$D913 PRG:1913 C6 0E BPL UpdateObjectBufferLoop_D8C6 ; CPU:$D915 PRG:1915 10 AF RTS ; CPU:$D917 PRG:1917 60 UpdateObjectBufferLoop_D918: LDA ($02),Y ; CPU:$D918 PRG:1918 B1 02 AND #$03 ; CPU:$D91A PRG:191A 29 03 ORA #$30 ; CPU:$D91C PRG:191C 09 30 STA ($02),Y ; CPU:$D91E PRG:191E 91 02 LDY #$15 ; CPU:$D920 PRG:1920 A0 15 LDA #$14 ; CPU:$D922 PRG:1922 A9 14 STA ($02),Y ; CPU:$D924 PRG:1924 91 02 BNE ProcessObjectStateDispatch_D904 ; CPU:$D926 PRG:1926 D0 DC ObjectPathOnCarry_D928: CMP #$40 ; CPU:$D928 PRG:1928 C9 40 BCC UpdateObjectBufferLoop_D918 ; CPU:$D92A PRG:192A 90 EC CMP #$F0 ; CPU:$D92C PRG:192C C9 F0 BCS UpdateObjectBufferLoop_D8F2 ; CPU:$D92E PRG:192E B0 C2 JSR ProcessObjectStateRoutine_D94D ; CPU:$D930 PRG:1930 20 4D D9 TAX ; CPU:$D933 PRG:1933 AA EOR ($02),Y ; CPU:$D934 PRG:1934 51 02 AND #$02 ; CPU:$D936 PRG:1936 29 02 BEQ UpdateObjectBufferOnZero_D93D ; CPU:$D938 PRG:1938 F0 03 LDA ($02),Y ; CPU:$D93A PRG:193A B1 02 TAX ; CPU:$D93C PRG:193C AA UpdateObjectBufferOnZero_D93D: TXA ; CPU:$D93D PRG:193D 8A AND #$03 ; CPU:$D93E PRG:193E 29 03 ORA #$80 ; CPU:$D940 PRG:1940 09 80 STA ($02),Y ; CPU:$D942 PRG:1942 91 02 LDY #$1B ; CPU:$D944 PRG:1944 A0 1B LDA $0E ; CPU:$D946 PRG:1946 A5 0E STA ($02),Y ; CPU:$D948 PRG:1948 91 02 JMP ProcessObjectStateDispatch_D904 ; CPU:$D94A PRG:194A 4C 04 D9 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_D94D ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_D94D: LDA ($00),Y ; CPU:$D94D PRG:194D B1 00 BPL ObjectPathContinue_D96D ; CPU:$D94F PRG:194F 10 1C CMP #$81 ; CPU:$D951 PRG:1951 C9 81 PHP ; CPU:$D953 PRG:1953 08 LDA #$08 ; CPU:$D954 PRG:1954 A9 08 BCC ObjectPathOnNoCarry_D95A ; CPU:$D956 PRG:1956 90 02 LDA #$38 ; CPU:$D958 PRG:1958 A9 38 ObjectPathOnNoCarry_D95A: LDY #$1B ; CPU:$D95A PRG:195A A0 1B CLC ; CPU:$D95C PRG:195C 18 ADC ($00),Y ; CPU:$D95D PRG:195D 71 00 ROL A ; CPU:$D95F PRG:195F 2A ROL A ; CPU:$D960 PRG:1960 2A ROL A ; CPU:$D961 PRG:1961 2A AND #$03 ; CPU:$D962 PRG:1962 29 03 TAX ; CPU:$D964 PRG:1964 AA LDA $D8B6,X ; CPU:$D965 PRG:1965 BD B6 D8 PLP ; CPU:$D968 PRG:1968 28 BCC ObjectPathContinue_D96D ; CPU:$D969 PRG:1969 90 02 EOR #$01 ; CPU:$D96B PRG:196B 49 01 ObjectPathContinue_D96D: LDY #$10 ; CPU:$D96D PRG:196D A0 10 RTS ; CPU:$D96F PRG:196F 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_D970 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_D970: LDX $0E ; CPU:$D970 PRG:1970 A6 0E LDA $90,X ; CPU:$D972 PRG:1972 B5 90 BNE ObjectPathOnNonZero_D978 ; CPU:$D974 PRG:1974 D0 02 LDA $D0,X ; CPU:$D976 PRG:1976 B5 D0 ObjectPathOnNonZero_D978: RTS ; CPU:$D978 PRG:1978 60 .byte $03, $FD ; CPU:$D979 PRG:1979 0B ;------------------------------------------------------------ ; ObjectPath_D97B ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_D97B: LDA #$02 ; CPU:$D97B PRG:197B A9 02 STA $0E ; CPU:$D97D PRG:197D 85 0E LDA #$80 ; CPU:$D97F PRG:197F A9 80 STA $00 ; CPU:$D981 PRG:1981 85 00 LDA #$04 ; CPU:$D983 PRG:1983 A9 04 STA $01 ; CPU:$D985 PRG:1985 85 01 UpdateObjectBufferLoop_D987: LDA $0E ; CPU:$D987 PRG:1987 A5 0E STA $0F ; CPU:$D989 PRG:1989 85 0F CLC ; CPU:$D98B PRG:198B 18 LDA #$20 ; CPU:$D98C PRG:198C A9 20 ADC $00 ; CPU:$D98E PRG:198E 65 00 STA $02 ; CPU:$D990 PRG:1990 85 02 LDA #$00 ; CPU:$D992 PRG:1992 A9 00 ADC $01 ; CPU:$D994 PRG:1994 65 01 STA $03 ; CPU:$D996 PRG:1996 85 03 ObjectPathLoop_D998: JSR ProcessResourceStateRoutine_F71C ; CPU:$D998 PRG:1998 20 1C F7 BCC ObjectPathOnNoCarry_D9A0 ; CPU:$D99B PRG:199B 90 03 JSR ProcessObjectStateRoutine_D9B1 ; CPU:$D99D PRG:199D 20 B1 D9 ObjectPathOnNoCarry_D9A0: LDX #$02 ; CPU:$D9A0 PRG:19A0 A2 02 JSR RunGameTaskRoutine_CBD3 ; CPU:$D9A2 PRG:19A2 20 D3 CB BPL ObjectPathLoop_D998 ; CPU:$D9A5 PRG:19A5 10 F1 LDX #$00 ; CPU:$D9A7 PRG:19A7 A2 00 JSR RunGameTaskRoutine_CBD3 ; CPU:$D9A9 PRG:19A9 20 D3 CB DEC $0E ; CPU:$D9AC PRG:19AC C6 0E BPL UpdateObjectBufferLoop_D987 ; CPU:$D9AE PRG:19AE 10 D7 RTS ; CPU:$D9B0 PRG:19B0 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_D9B1 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_D9B1: LDY #$10 ; CPU:$D9B1 PRG:19B1 A0 10 LDA ($00),Y ; CPU:$D9B3 PRG:19B3 B1 00 CMP #$20 ; CPU:$D9B5 PRG:19B5 C9 20 BCS ObjectPathContinue_D9DE ; CPU:$D9B7 PRG:19B7 B0 25 LDA ($02),Y ; CPU:$D9B9 PRG:19B9 B1 02 CMP #$20 ; CPU:$D9BB PRG:19BB C9 20 BCS ObjectPathOnCarry_D9CB ; CPU:$D9BD PRG:19BD B0 0C EOR ($00),Y ; CPU:$D9BF PRG:19BF 51 00 AND #$02 ; CPU:$D9C1 PRG:19C1 29 02 BNE ObjectPathOnNonZero_D9CF ; CPU:$D9C3 PRG:19C3 D0 0A LDY #$1C ; CPU:$D9C5 PRG:19C5 A0 1C LDA ($00),Y ; CPU:$D9C7 PRG:19C7 B1 00 BNE ObjectPathContinue_D9DE ; CPU:$D9C9 PRG:19C9 D0 13 ObjectPathOnCarry_D9CB: JSR UpdateObjectBufferRoutine_D9E2 ; CPU:$D9CB PRG:19CB 20 E2 D9 RTS ; CPU:$D9CE PRG:19CE 60 ObjectPathOnNonZero_D9CF: JSR UpdateObjectBufferRoutine_D9E2 ; CPU:$D9CF PRG:19CF 20 E2 D9 JSR ProcessResourceStateRoutine_F71C ; CPU:$D9D2 PRG:19D2 20 1C F7 BCC ObjectPathOnNoCarry_D9E1 ; CPU:$D9D5 PRG:19D5 90 0A JSR UpdateObjectBufferRoutine_D9E2 ; CPU:$D9D7 PRG:19D7 20 E2 D9 LDA #$00 ; CPU:$D9DA PRG:19DA A9 00 STA ($00),Y ; CPU:$D9DC PRG:19DC 91 00 ObjectPathContinue_D9DE: JSR UpdateObjectBufferRoutine_DA04 ; CPU:$D9DE PRG:19DE 20 04 DA ObjectPathOnNoCarry_D9E1: RTS ; CPU:$D9E1 PRG:19E1 60 ;------------------------------------------------------------ ; UpdateObjectBufferRoutine_D9E2 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBufferRoutine_D9E2: LDY #$10 ; CPU:$D9E2 PRG:19E2 A0 10 LDA ($00),Y ; CPU:$D9E4 PRG:19E4 B1 00 EOR #$01 ; CPU:$D9E6 PRG:19E6 49 01 STA ($00),Y ; CPU:$D9E8 PRG:19E8 91 00 LDY #$01 ; CPU:$D9EA PRG:19EA A0 01 CMP #$12 ; CPU:$D9EC PRG:19EC C9 12 BCC ObjectPathOnNoCarry_D9F2 ; CPU:$D9EE PRG:19EE 90 02 LDY #$03 ; CPU:$D9F0 PRG:19F0 A0 03 ObjectPathOnNoCarry_D9F2: AND #$01 ; CPU:$D9F2 PRG:19F2 29 01 TAX ; CPU:$D9F4 PRG:19F4 AA LDA $D979,X ; CPU:$D9F5 PRG:19F5 BD 79 D9 CLC ; CPU:$D9F8 PRG:19F8 18 ADC ($00),Y ; CPU:$D9F9 PRG:19F9 71 00 STA ($00),Y ; CPU:$D9FB PRG:19FB 91 00 LDY #$1C ; CPU:$D9FD PRG:19FD A0 1C LDA #$05 ; CPU:$D9FF PRG:19FF A9 05 STA ($00),Y ; CPU:$DA01 PRG:1A01 91 00 RTS ; CPU:$DA03 PRG:1A03 60 ;------------------------------------------------------------ ; UpdateObjectBufferRoutine_DA04 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBufferRoutine_DA04: LDY #$10 ; CPU:$DA04 PRG:1A04 A0 10 LDA ($02),Y ; CPU:$DA06 PRG:1A06 B1 02 EOR #$01 ; CPU:$DA08 PRG:1A08 49 01 STA ($02),Y ; CPU:$DA0A PRG:1A0A 91 02 LDY #$01 ; CPU:$DA0C PRG:1A0C A0 01 CMP #$12 ; CPU:$DA0E PRG:1A0E C9 12 BCC ObjectPathOnNoCarry_DA14 ; CPU:$DA10 PRG:1A10 90 02 LDY #$03 ; CPU:$DA12 PRG:1A12 A0 03 ObjectPathOnNoCarry_DA14: AND #$01 ; CPU:$DA14 PRG:1A14 29 01 TAX ; CPU:$DA16 PRG:1A16 AA LDA $D979,X ; CPU:$DA17 PRG:1A17 BD 79 D9 CLC ; CPU:$DA1A PRG:1A1A 18 ADC ($02),Y ; CPU:$DA1B PRG:1A1B 71 02 STA ($02),Y ; CPU:$DA1D PRG:1A1D 91 02 LDY #$1C ; CPU:$DA1F PRG:1A1F A0 1C LDA #$05 ; CPU:$DA21 PRG:1A21 A9 05 STA ($02),Y ; CPU:$DA23 PRG:1A23 91 02 RTS ; CPU:$DA25 PRG:1A25 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_DA26 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_DA26: LDA $77 ; CPU:$DA26 PRG:1A26 A5 77 BNE ObjectPathContinue_DA8A ; CPU:$DA28 PRG:1A28 D0 60 LDA $64 ; CPU:$DA2A PRG:1A2A A5 64 BNE ObjectPathContinue_DA8A ; CPU:$DA2C PRG:1A2C D0 5C LDA $2E ; CPU:$DA2E PRG:1A2E A5 2E BNE ObjectPathOnNonZero_DA36 ; CPU:$DA30 PRG:1A30 D0 04 LDA $2F ; CPU:$DA32 PRG:1A32 A5 2F BEQ ObjectPathContinue_DA8A ; CPU:$DA34 PRG:1A34 F0 54 ObjectPathOnNonZero_DA36: LDX #$07 ; CPU:$DA36 PRG:1A36 A2 07 LDA $4C ; CPU:$DA38 PRG:1A38 A5 4C BEQ ObjectPathOnZero_DA3E ; CPU:$DA3A PRG:1A3A F0 02 LDX #$06 ; CPU:$DA3C PRG:1A3C A2 06 ObjectPathOnZero_DA3E: STX $64 ; CPU:$DA3E PRG:1A3E 86 64 LDA #$01 ; CPU:$DA40 PRG:1A40 A9 01 STA $00 ; CPU:$DA42 PRG:1A42 85 00 LDA #$02 ; CPU:$DA44 PRG:1A44 A9 02 STA $01 ; CPU:$DA46 PRG:1A46 85 01 JSR ProcessResourceStateRoutine_F408 ; CPU:$DA48 PRG:1A48 20 08 F4 LDA $2F ; CPU:$DA4B PRG:1A4B A5 2F BNE ObjectPathLoop_DA85 ; CPU:$DA4D PRG:1A4D D0 36 LDA $2E ; CPU:$DA4F PRG:1A4F A5 2E BEQ ObjectPathOnZero_DA65 ; CPU:$DA51 PRG:1A51 F0 12 CMP #$02 ; CPU:$DA53 PRG:1A53 C9 02 BNE ObjectPathLoop_DA85 ; CPU:$DA55 PRG:1A55 D0 2E LDA #$01 ; CPU:$DA57 PRG:1A57 A9 01 STA $64 ; CPU:$DA59 PRG:1A59 85 64 LDA $8F ; CPU:$DA5B PRG:1A5B A5 8F BNE ObjectPathLoop_DA85 ; CPU:$DA5D PRG:1A5D D0 26 LDA #$08 ; CPU:$DA5F PRG:1A5F A9 08 STA $FB ; CPU:$DA61 PRG:1A61 85 FB BNE ObjectPathLoop_DA85 ; CPU:$DA63 PRG:1A63 D0 20 ObjectPathOnZero_DA65: LDA $8F ; CPU:$DA65 PRG:1A65 A5 8F BNE ObjectPathOnNonZero_DA8B ; CPU:$DA67 PRG:1A67 D0 22 LDA #$01 ; CPU:$DA69 PRG:1A69 A9 01 STA $A1 ; CPU:$DA6B PRG:1A6B 85 A1 STA $A0 ; CPU:$DA6D PRG:1A6D 85 A0 LDA #$23 ; CPU:$DA6F PRG:1A6F A9 23 LDX $90 ; CPU:$DA71 PRG:1A71 A6 90 CPX #$01 ; CPU:$DA73 PRG:1A73 E0 01 BCS ObjectPathOnCarry_DA79 ; CPU:$DA75 PRG:1A75 B0 02 STA $90 ; CPU:$DA77 PRG:1A77 85 90 ObjectPathOnCarry_DA79: LDX $91 ; CPU:$DA79 PRG:1A79 A6 91 CPX #$01 ; CPU:$DA7B PRG:1A7B E0 01 BCS ObjectPathOnCarry_DA81 ; CPU:$DA7D PRG:1A7D B0 02 STA $91 ; CPU:$DA7F PRG:1A7F 85 91 ObjectPathOnCarry_DA81: LDA #$80 ; CPU:$DA81 PRG:1A81 A9 80 STA $FB ; CPU:$DA83 PRG:1A83 85 FB ObjectPathLoop_DA85: LDA #$82 ; CPU:$DA85 PRG:1A85 A9 82 JSR ProcessResourceStateRoutine_F31A ; CPU:$DA87 PRG:1A87 20 1A F3 ObjectPathContinue_DA8A: RTS ; CPU:$DA8A PRG:1A8A 60 ObjectPathOnNonZero_DA8B: LDA #$23 ; CPU:$DA8B PRG:1A8B A9 23 STA $78 ; CPU:$DA8D PRG:1A8D 85 78 BNE ObjectPathLoop_DA85 ; CPU:$DA8F PRG:1A8F D0 F4 ;------------------------------------------------------------ ; ObjectPath_DA91 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_DA91: LDA $0401 ; CPU:$DA91 PRG:1A91 AD 01 04 LDY $0403 ; CPU:$DA94 PRG:1A94 AC 03 04 LDX $D0 ; CPU:$DA97 PRG:1A97 A6 D0 BEQ ObjectPathOnZero_DA9F ; CPU:$DA99 PRG:1A99 F0 04 LDA $11 ; CPU:$DA9B PRG:1A9B A5 11 LDY $12 ; CPU:$DA9D PRG:1A9D A4 12 ObjectPathOnZero_DA9F: STA $0499 ; CPU:$DA9F PRG:1A9F 8D 99 04 STY $049A ; CPU:$DAA2 PRG:1AA2 8C 9A 04 STA $04D9 ; CPU:$DAA5 PRG:1AA5 8D D9 04 STY $04DA ; CPU:$DAA8 PRG:1AA8 8C DA 04 LDX $4C ; CPU:$DAAB PRG:1AAB A6 4C BEQ ObjectPathOnZero_DAB5 ; CPU:$DAAD PRG:1AAD F0 06 LDA $0441 ; CPU:$DAAF PRG:1AAF AD 41 04 LDY $0443 ; CPU:$DAB2 PRG:1AB2 AC 43 04 ObjectPathOnZero_DAB5: LDX $D1 ; CPU:$DAB5 PRG:1AB5 A6 D1 BEQ ObjectPathOnZero_DABD ; CPU:$DAB7 PRG:1AB7 F0 04 LDA $13 ; CPU:$DAB9 PRG:1AB9 A5 13 LDY $14 ; CPU:$DABB PRG:1ABB A4 14 ObjectPathOnZero_DABD: STA $04B9 ; CPU:$DABD PRG:1ABD 8D B9 04 STY $04BA ; CPU:$DAC0 PRG:1AC0 8C BA 04 STA $04F9 ; CPU:$DAC3 PRG:1AC3 8D F9 04 STY $04FA ; CPU:$DAC6 PRG:1AC6 8C FA 04 RTS ; CPU:$DAC9 PRG:1AC9 60 .byte $0C, $FC, $00, $00, $00, $00, $0C, $FC, $00, $F0, $00, $08, $08, $00, $F0, $00 ; CPU:$DACA PRG:1ACA 0B ;------------------------------------------------------------ ; ReadObjectRecord_DADA ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecord_DADA: LDX $0A ; CPU:$DADA PRG:1ADA A6 0A LDA $46,X ; CPU:$DADC PRG:1ADC B5 46 AND #$C0 ; CPU:$DADE PRG:1ADE 29 C0 BEQ ObjectPathContinue_DB27 ; CPU:$DAE0 PRG:1AE0 F0 45 LDA $DA,X ; CPU:$DAE2 PRG:1AE2 B5 DA CMP #$02 ; CPU:$DAE4 PRG:1AE4 C9 02 BEQ ObjectPathContinue_DB27 ; CPU:$DAE6 PRG:1AE6 F0 3F LDA #$20 ; CPU:$DAE8 PRG:1AE8 A9 20 STA $07 ; CPU:$DAEA PRG:1AEA 85 07 LSR A ; CPU:$DAEC PRG:1AEC 4A STA $6C,X ; CPU:$DAED PRG:1AED 95 6C LDA $06 ; CPU:$DAEF PRG:1AEF A5 06 BMI ObjectPathOnNegative_DB28 ; CPU:$DAF1 PRG:1AF1 30 35 AND #$03 ; CPU:$DAF3 PRG:1AF3 29 03 TAX ; CPU:$DAF5 PRG:1AF5 AA LSR A ; CPU:$DAF6 PRG:1AF6 4A EOR #$01 ; CPU:$DAF7 PRG:1AF7 49 01 STA $0D ; CPU:$DAF9 PRG:1AF9 85 0D LDY #$01 ; CPU:$DAFB PRG:1AFB A0 01 LDA $DACA,X ; CPU:$DAFD PRG:1AFD BD CA DA CLC ; CPU:$DB00 PRG:1B00 18 ADC (CurrentObjectPtrLo),Y ; CPU:$DB01 PRG:1B01 71 08 STA $00 ; CPU:$DB03 PRG:1B03 85 00 LDY #$03 ; CPU:$DB05 PRG:1B05 A0 03 LDA $DACE,X ; CPU:$DB07 PRG:1B07 BD CE DA ReadObjectRecordLoop_DB0A: CLC ; CPU:$DB0A PRG:1B0A 18 ADC (CurrentObjectPtrLo),Y ; CPU:$DB0B PRG:1B0B 71 08 STA $01 ; CPU:$DB0D PRG:1B0D 85 01 LDA #$00 ; CPU:$DB0F PRG:1B0F A9 00 STA $02 ; CPU:$DB11 PRG:1B11 85 02 STA $0E ; CPU:$DB13 PRG:1B13 85 0E JSR ProcessObjectStateRoutine_CE50 ; CPU:$DB15 PRG:1B15 20 50 CE BCS ObjectPathContinue_DB27 ; CPU:$DB18 PRG:1B18 B0 0D LDX $0A ; CPU:$DB1A PRG:1B1A A6 0A INC $DA,X ; CPU:$DB1C PRG:1B1C F6 DA LDY #$15 ; CPU:$DB1E PRG:1B1E A0 15 TXA ; CPU:$DB20 PRG:1B20 8A STA ($04),Y ; CPU:$DB21 PRG:1B21 91 04 LDA #$40 ; CPU:$DB23 PRG:1B23 A9 40 STA $FF ; CPU:$DB25 PRG:1B25 85 FF ObjectPathContinue_DB27: RTS ; CPU:$DB27 PRG:1B27 60 ObjectPathOnNegative_DB28: CMP #$81 ; CPU:$DB28 PRG:1B28 C9 81 LDA #$08 ; CPU:$DB2A PRG:1B2A A9 08 BCC ReadObjectRecordOnNoCarry_DB30 ; CPU:$DB2C PRG:1B2C 90 02 LDA #$38 ; CPU:$DB2E PRG:1B2E A9 38 ReadObjectRecordOnNoCarry_DB30: LDY #$1B ; CPU:$DB30 PRG:1B30 A0 1B CLC ; CPU:$DB32 PRG:1B32 18 ADC (CurrentObjectPtrLo),Y ; CPU:$DB33 PRG:1B33 71 08 ROL A ; CPU:$DB35 PRG:1B35 2A ROL A ; CPU:$DB36 PRG:1B36 2A ROL A ; CPU:$DB37 PRG:1B37 2A AND #$03 ; CPU:$DB38 PRG:1B38 29 03 TAX ; CPU:$DB3A PRG:1B3A AA AND #$01 ; CPU:$DB3B PRG:1B3B 29 01 EOR #$01 ; CPU:$DB3D PRG:1B3D 49 01 STA $0D ; CPU:$DB3F PRG:1B3F 85 0D LDY #$21 ; CPU:$DB41 PRG:1B41 A0 21 CLC ; CPU:$DB43 PRG:1B43 18 LDA $DAD2,X ; CPU:$DB44 PRG:1B44 BD D2 DA ADC (CurrentObjectPtrLo),Y ; CPU:$DB47 PRG:1B47 71 08 STA $00 ; CPU:$DB49 PRG:1B49 85 00 LDA $DAD6,X ; CPU:$DB4B PRG:1B4B BD D6 DA LDY #$23 ; CPU:$DB4E PRG:1B4E A0 23 BNE ReadObjectRecordLoop_DB0A ; CPU:$DB50 PRG:1B50 D0 B8 ;------------------------------------------------------------ ; UpdateObjectBuffer_DB52 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBuffer_DB52: LDA $67 ; CPU:$DB52 PRG:1B52 A5 67 BNE ObjectPathContinue_DBC3 ; CPU:$DB54 PRG:1B54 D0 6D LDA $90 ; CPU:$DB56 PRG:1B56 A5 90 BNE ObjectPathContinue_DBC3 ; CPU:$DB58 PRG:1B58 D0 69 LDA $91 ; CPU:$DB5A PRG:1B5A A5 91 BNE ObjectPathContinue_DBC3 ; CPU:$DB5C PRG:1B5C D0 65 LDA $D0 ; CPU:$DB5E PRG:1B5E A5 D0 BNE ObjectPathContinue_DBC3 ; CPU:$DB60 PRG:1B60 D0 61 LDA $D1 ; CPU:$DB62 PRG:1B62 A5 D1 BNE ObjectPathContinue_DBC3 ; CPU:$DB64 PRG:1B64 D0 5D LDA #$00 ; CPU:$DB66 PRG:1B66 A9 00 STA $00 ; CPU:$DB68 PRG:1B68 85 00 LDA #$04 ; CPU:$DB6A PRG:1B6A A9 04 STA $01 ; CPU:$DB6C PRG:1B6C 85 01 LDA #$40 ; CPU:$DB6E PRG:1B6E A9 40 STA $02 ; CPU:$DB70 PRG:1B70 85 02 LDA #$04 ; CPU:$DB72 PRG:1B72 A9 04 STA $03 ; CPU:$DB74 PRG:1B74 85 03 JSR ProcessResourceStateRoutine_F71C ; CPU:$DB76 PRG:1B76 20 1C F7 BCC ObjectPathContinue_DBC3 ; CPU:$DB79 PRG:1B79 90 48 JSR ProcessObjectStateRoutine_DB8A ; CPU:$DB7B PRG:1B7B 20 8A DB LDA #$40 ; CPU:$DB7E PRG:1B7E A9 40 STA $00 ; CPU:$DB80 PRG:1B80 85 00 LDA #$04 ; CPU:$DB82 PRG:1B82 A9 04 STA $01 ; CPU:$DB84 PRG:1B84 85 01 LDA #$08 ; CPU:$DB86 PRG:1B86 A9 08 STA $FF ; CPU:$DB88 PRG:1B88 85 FF ;------------------------------------------------------------ ; ProcessObjectStateRoutine_DB8A ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_DB8A: LDY #$10 ; CPU:$DB8A PRG:1B8A A0 10 LDA ($00),Y ; CPU:$DB8C PRG:1B8C B1 00 BMI UpdateObjectBufferOnNegative_DBA7 ; CPU:$DB8E PRG:1B8E 30 17 CMP #$04 ; CPU:$DB90 PRG:1B90 C9 04 BCS ObjectPathContinue_DBC3 ; CPU:$DB92 PRG:1B92 B0 2F TAX ; CPU:$DB94 PRG:1B94 AA LDY $E16F,X ; CPU:$DB95 PRG:1B95 BC 6F E1 SEC ; CPU:$DB98 PRG:1B98 38 LDA #$00 ; CPU:$DB99 PRG:1B99 A9 00 SBC ($00),Y ; CPU:$DB9B PRG:1B9B F1 00 STA ($00),Y ; CPU:$DB9D PRG:1B9D 91 00 DEY ; CPU:$DB9F PRG:1B9F 88 LDA #$00 ; CPU:$DBA0 PRG:1BA0 A9 00 SBC ($00),Y ; CPU:$DBA2 PRG:1BA2 F1 00 STA ($00),Y ; CPU:$DBA4 PRG:1BA4 91 00 TXA ; CPU:$DBA6 PRG:1BA6 8A UpdateObjectBufferOnNegative_DBA7: LDY #$18 ; CPU:$DBA7 PRG:1BA7 A0 18 STY $67 ; CPU:$DBA9 PRG:1BA9 84 67 EOR #$01 ; CPU:$DBAB PRG:1BAB 49 01 LDY #$10 ; CPU:$DBAD PRG:1BAD A0 10 STA ($00),Y ; CPU:$DBAF PRG:1BAF 91 00 LDA #$0A ; CPU:$DBB1 PRG:1BB1 A9 0A STA $56 ; CPU:$DBB3 PRG:1BB3 85 56 LDY #$02 ; CPU:$DBB5 PRG:1BB5 A0 02 LDX #$10 ; CPU:$DBB7 PRG:1BB7 A2 10 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DBB9 PRG:1BB9 20 AE D1 LDY #$03 ; CPU:$DBBC PRG:1BBC A0 03 LDX #$14 ; CPU:$DBBE PRG:1BBE A2 14 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DBC0 PRG:1BC0 20 AE D1 ObjectPathContinue_DBC3: RTS ; CPU:$DBC3 PRG:1BC3 60 .byte $A8, $B0, $B8 ; CPU:$DBC4 PRG:1BC4 0B ;------------------------------------------------------------ ; UpdateObjectBuffer_DBC7 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBuffer_DBC7: LDA #$07 ; CPU:$DBC7 PRG:1BC7 A9 07 STA $0F ; CPU:$DBC9 PRG:1BC9 85 0F LDA #$00 ; CPU:$DBCB PRG:1BCB A9 00 STA $02 ; CPU:$DBCD PRG:1BCD 85 02 LDA #$06 ; CPU:$DBCF PRG:1BCF A9 06 STA $03 ; CPU:$DBD1 PRG:1BD1 85 03 ObjectPathLoop_DBD3: LDY #$10 ; CPU:$DBD3 PRG:1BD3 A0 10 LDA ($02),Y ; CPU:$DBD5 PRG:1BD5 B1 02 TAX ; CPU:$DBD7 PRG:1BD7 AA BEQ ObjectPathLoop_DC36 ; CPU:$DBD8 PRG:1BD8 F0 5C DEX ; CPU:$DBDA PRG:1BDA CA TXA ; CPU:$DBDB PRG:1BDB 8A STA ($02),Y ; CPU:$DBDC PRG:1BDC 91 02 LDY #$00 ; CPU:$DBDE PRG:1BDE A0 00 LDA ($02),Y ; CPU:$DBE0 PRG:1BE0 B1 02 BMI ObjectPathOnNegative_DC3E ; CPU:$DBE2 PRG:1BE2 30 5A LDY #$05 ; CPU:$DBE4 PRG:1BE4 A0 05 LDA #$08 ; CPU:$DBE6 PRG:1BE6 A9 08 CPX #$1C ; CPU:$DBE8 PRG:1BE8 E0 1C BEQ ObjectPathOnZero_DC34 ; CPU:$DBEA PRG:1BEA F0 48 LDA #$09 ; CPU:$DBEC PRG:1BEC A9 09 CPX #$14 ; CPU:$DBEE PRG:1BEE E0 14 BEQ ObjectPathOnZero_DC34 ; CPU:$DBF0 PRG:1BF0 F0 42 LDA #$01 ; CPU:$DBF2 PRG:1BF2 A9 01 CPX #$01 ; CPU:$DBF4 PRG:1BF4 E0 01 BEQ ObjectPathLoop_DC2E ; CPU:$DBF6 PRG:1BF6 F0 36 CPX #$00 ; CPU:$DBF8 PRG:1BF8 E0 00 BNE ObjectPathLoop_DC36 ; CPU:$DBFA PRG:1BFA D0 3A LDY #$01 ; CPU:$DBFC PRG:1BFC A0 01 LDA ($02),Y ; CPU:$DBFE PRG:1BFE B1 02 SEC ; CPU:$DC00 PRG:1C00 38 SBC #$04 ; CPU:$DC01 PRG:1C01 E9 04 STA $04 ; CPU:$DC03 PRG:1C03 85 04 LDY #$03 ; CPU:$DC05 PRG:1C05 A0 03 LDA ($02),Y ; CPU:$DC07 PRG:1C07 B1 02 SEC ; CPU:$DC09 PRG:1C09 38 SBC #$04 ; CPU:$DC0A PRG:1C0A E9 04 STA $05 ; CPU:$DC0C PRG:1C0C 85 05 LDY #$11 ; CPU:$DC0E PRG:1C0E A0 11 LDA ($02),Y ; CPU:$DC10 PRG:1C10 B1 02 TAX ; CPU:$DC12 PRG:1C12 AA BEQ ObjectPathOnZero_DC18 ; CPU:$DC13 PRG:1C13 F0 03 JSR UpdateObjectBufferRoutine_DD5B ; CPU:$DC15 PRG:1C15 20 5B DD ObjectPathOnZero_DC18: LDY #$0B ; CPU:$DC18 PRG:1C18 A0 0B LDA ($02),Y ; CPU:$DC1A PRG:1C1A B1 02 LDX #$03 ; CPU:$DC1C PRG:1C1C A2 03 ObjectPathLoop_DC1E: DEX ; CPU:$DC1E PRG:1C1E CA CMP $DBC4,X ; CPU:$DC1F PRG:1C1F DD C4 DB BNE ObjectPathLoop_DC1E ; CPU:$DC22 PRG:1C22 D0 FA LDA #$00 ; CPU:$DC24 PRG:1C24 A9 00 STA $A9,X ; CPU:$DC26 PRG:1C26 95 A9 LDY #$01 ; CPU:$DC28 PRG:1C28 A0 01 STA ($02),Y ; CPU:$DC2A PRG:1C2A 91 02 LDA #$80 ; CPU:$DC2C PRG:1C2C A9 80 ObjectPathLoop_DC2E: LDX #$10 ; CPU:$DC2E PRG:1C2E A2 10 STX $FF ; CPU:$DC30 PRG:1C30 86 FF LDY #$00 ; CPU:$DC32 PRG:1C32 A0 00 ObjectPathOnZero_DC34: STA ($02),Y ; CPU:$DC34 PRG:1C34 91 02 ObjectPathLoop_DC36: LDX #$02 ; CPU:$DC36 PRG:1C36 A2 02 JSR RunGameTaskRoutine_CBD3 ; CPU:$DC38 PRG:1C38 20 D3 CB BPL ObjectPathLoop_DBD3 ; CPU:$DC3B PRG:1C3B 10 96 RTS ; CPU:$DC3D PRG:1C3D 60 ObjectPathOnNegative_DC3E: CPX #$00 ; CPU:$DC3E PRG:1C3E E0 00 BNE ObjectPathLoop_DC36 ; CPU:$DC40 PRG:1C40 D0 F4 LDX #$03 ; CPU:$DC42 PRG:1C42 A2 03 ObjectPathLoop_DC44: DEX ; CPU:$DC44 PRG:1C44 CA BMI ObjectPathLoop_DC36 ; CPU:$DC45 PRG:1C45 30 EF LDA $A9,X ; CPU:$DC47 PRG:1C47 B5 A9 BNE ObjectPathLoop_DC44 ; CPU:$DC49 PRG:1C49 D0 F9 LDY #$0B ; CPU:$DC4B PRG:1C4B A0 0B LDA $DBC4,X ; CPU:$DC4D PRG:1C4D BD C4 DB STA ($02),Y ; CPU:$DC50 PRG:1C50 91 02 LDA #$01 ; CPU:$DC52 PRG:1C52 A9 01 STA $A9,X ; CPU:$DC54 PRG:1C54 95 A9 LDA #$00 ; CPU:$DC56 PRG:1C56 A9 00 BEQ ObjectPathLoop_DC2E ; CPU:$DC58 PRG:1C58 F0 D4 ;------------------------------------------------------------ ; ObjectPath_DC5A ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_DC5A: LDA #$01 ; CPU:$DC5A PRG:1C5A A9 01 STA $0E ; CPU:$DC5C PRG:1C5C 85 0E LDA #$40 ; CPU:$DC5E PRG:1C5E A9 40 STA $00 ; CPU:$DC60 PRG:1C60 85 00 LDA #$04 ; CPU:$DC62 PRG:1C62 A9 04 STA $01 ; CPU:$DC64 PRG:1C64 85 01 UpdateObjectBufferLoop_DC66: LDA #$07 ; CPU:$DC66 PRG:1C66 A9 07 STA $0F ; CPU:$DC68 PRG:1C68 85 0F LDA #$00 ; CPU:$DC6A PRG:1C6A A9 00 STA $02 ; CPU:$DC6C PRG:1C6C 85 02 LDA #$06 ; CPU:$DC6E PRG:1C6E A9 06 STA $03 ; CPU:$DC70 PRG:1C70 85 03 ObjectPathLoop_DC72: JSR ProcessObjectStateRoutine_D970 ; CPU:$DC72 PRG:1C72 20 70 D9 BNE ObjectPathLoop_DC8A ; CPU:$DC75 PRG:1C75 D0 13 LDY #$00 ; CPU:$DC77 PRG:1C77 A0 00 LDA ($02),Y ; CPU:$DC79 PRG:1C79 B1 02 BMI ObjectPathOnNegative_DC9E ; CPU:$DC7B PRG:1C7B 30 21 BNE ObjectPathLoop_DC8A ; CPU:$DC7D PRG:1C7D D0 0B JSR ProcessResourceStateRoutine_F71C ; CPU:$DC7F PRG:1C7F 20 1C F7 BCC ObjectPathLoop_DC8A ; CPU:$DC82 PRG:1C82 90 06 LDY #$10 ; CPU:$DC84 PRG:1C84 A0 10 LDA ($02),Y ; CPU:$DC86 PRG:1C86 B1 02 BEQ UpdateObjectBufferOnZero_DCBB ; CPU:$DC88 PRG:1C88 F0 31 ObjectPathLoop_DC8A: LDX #$02 ; CPU:$DC8A PRG:1C8A A2 02 JSR RunGameTaskRoutine_CBD3 ; CPU:$DC8C PRG:1C8C 20 D3 CB BPL ObjectPathLoop_DC72 ; CPU:$DC8F PRG:1C8F 10 E1 LDA #$00 ; CPU:$DC91 PRG:1C91 A9 00 STA $00 ; CPU:$DC93 PRG:1C93 85 00 LDA #$04 ; CPU:$DC95 PRG:1C95 A9 04 STA $01 ; CPU:$DC97 PRG:1C97 85 01 DEC $0E ; CPU:$DC99 PRG:1C99 C6 0E BPL UpdateObjectBufferLoop_DC66 ; CPU:$DC9B PRG:1C9B 10 C9 RTS ; CPU:$DC9D PRG:1C9D 60 ObjectPathOnNegative_DC9E: INY ; CPU:$DC9E PRG:1C9E C8 LDA ($02),Y ; CPU:$DC9F PRG:1C9F B1 02 BEQ ObjectPathLoop_DC8A ; CPU:$DCA1 PRG:1CA1 F0 E7 DEY ; CPU:$DCA3 PRG:1CA3 88 LDA #$00 ; CPU:$DCA4 PRG:1CA4 A9 00 STA ($02),Y ; CPU:$DCA6 PRG:1CA6 91 02 JSR ProcessResourceStateRoutine_F71C ; CPU:$DCA8 PRG:1CA8 20 1C F7 LDY #$00 ; CPU:$DCAB PRG:1CAB A0 00 LDA #$80 ; CPU:$DCAD PRG:1CAD A9 80 STA ($02),Y ; CPU:$DCAF PRG:1CAF 91 02 BCC ObjectPathLoop_DC8A ; CPU:$DCB1 PRG:1CB1 90 D7 LDA #$04 ; CPU:$DCB3 PRG:1CB3 A9 04 LDY #$10 ; CPU:$DCB5 PRG:1CB5 A0 10 STA ($02),Y ; CPU:$DCB7 PRG:1CB7 91 02 BNE ObjectPathLoop_DC8A ; CPU:$DCB9 PRG:1CB9 D0 CF UpdateObjectBufferOnZero_DCBB: LDY #$10 ; CPU:$DCBB PRG:1CBB A0 10 LDA #$28 ; CPU:$DCBD PRG:1CBD A9 28 STA ($02),Y ; CPU:$DCBF PRG:1CBF 91 02 LDY #$05 ; CPU:$DCC1 PRG:1CC1 A0 05 LDA ($02),Y ; CPU:$DCC3 PRG:1CC3 B1 02 TAX ; CPU:$DCC5 PRG:1CC5 AA BEQ ObjectPathOnZero_DCEA ; CPU:$DCC6 PRG:1CC6 F0 22 DEX ; CPU:$DCC8 PRG:1CC8 CA BEQ ObjectPathOnZero_DD08 ; CPU:$DCC9 PRG:1CC9 F0 3D LDA #$03 ; CPU:$DCCB PRG:1CCB A9 03 LDY #$15 ; CPU:$DCCD PRG:1CCD A0 15 DEX ; CPU:$DCCF PRG:1CCF CA BEQ ObjectPathOnZero_DCD6 ; CPU:$DCD0 PRG:1CD0 F0 04 LDA #$02 ; CPU:$DCD2 PRG:1CD2 A9 02 LDY #$08 ; CPU:$DCD4 PRG:1CD4 A0 08 ObjectPathOnZero_DCD6: STY $00 ; CPU:$DCD6 PRG:1CD6 84 00 LDY #$11 ; CPU:$DCD8 PRG:1CD8 A0 11 STA ($02),Y ; CPU:$DCDA PRG:1CDA 91 02 LDA $8D ; CPU:$DCDC PRG:1CDC A5 8D BNE ObjectPathOnNonZero_DCE9 ; CPU:$DCDE PRG:1CDE D0 09 LDA $0E ; CPU:$DCE0 PRG:1CE0 A5 0E ORA #$08 ; CPU:$DCE2 PRG:1CE2 09 08 STA $01 ; CPU:$DCE4 PRG:1CE4 85 01 JSR ProcessResourceStateRoutine_F40C ; CPU:$DCE6 PRG:1CE6 20 0C F4 ObjectPathOnNonZero_DCE9: RTS ; CPU:$DCE9 PRG:1CE9 60 ObjectPathOnZero_DCEA: JSR ProcessObjectStateRoutine_D1CE ; CPU:$DCEA PRG:1CEA 20 CE D1 INY ; CPU:$DCED PRG:1CED C8 LDX #$08 ; CPU:$DCEE PRG:1CEE A2 08 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DCF0 PRG:1CF0 20 AE D1 LDA $0E ; CPU:$DCF3 PRG:1CF3 A5 0E EOR #$01 ; CPU:$DCF5 PRG:1CF5 49 01 TAY ; CPU:$DCF7 PRG:1CF7 A8 LDA #$30 ; CPU:$DCF8 PRG:1CF8 A9 30 STA a:$0075,Y ; CPU:$DCFA PRG:1CFA 99 75 00 STA $77 ; CPU:$DCFD PRG:1CFD 85 77 LDX $D25D,Y ; CPU:$DCFF PRG:1CFF BE 5D D2 INY ; CPU:$DD02 PRG:1D02 C8 INY ; CPU:$DD03 PRG:1D03 C8 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD04 PRG:1D04 20 AE D1 RTS ; CPU:$DD07 PRG:1D07 60 ObjectPathOnZero_DD08: LDX $0E ; CPU:$DD08 PRG:1D08 A6 0E INC $80,X ; CPU:$DD0A PRG:1D0A F6 80 JSR ProcessObjectStateRoutine_D42C ; CPU:$DD0C PRG:1D0C 20 2C D4 RTS ; CPU:$DD0F PRG:1D0F 60 ;------------------------------------------------------------ ; ObjectPath_DD10 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_DD10: LDA $77 ; CPU:$DD10 PRG:1D10 A5 77 CMP #$01 ; CPU:$DD12 PRG:1D12 C9 01 BNE ObjectPathOnNonZero_DD20 ; CPU:$DD14 PRG:1D14 D0 0A DEC $77 ; CPU:$DD16 PRG:1D16 C6 77 JSR ProcessObjectStateRoutine_D1CE ; CPU:$DD18 PRG:1D18 20 CE D1 LDX #$08 ; CPU:$DD1B PRG:1D1B A2 08 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD1D PRG:1D1D 20 AE D1 ObjectPathOnNonZero_DD20: LDA $75 ; CPU:$DD20 PRG:1D20 A5 75 CMP #$01 ; CPU:$DD22 PRG:1D22 C9 01 BNE ObjectPathOnNonZero_DD2F ; CPU:$DD24 PRG:1D24 D0 09 DEC $75 ; CPU:$DD26 PRG:1D26 C6 75 LDY #$00 ; CPU:$DD28 PRG:1D28 A0 00 LDX #$10 ; CPU:$DD2A PRG:1D2A A2 10 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD2C PRG:1D2C 20 AE D1 ObjectPathOnNonZero_DD2F: LDA $76 ; CPU:$DD2F PRG:1D2F A5 76 CMP #$01 ; CPU:$DD31 PRG:1D31 C9 01 BNE ObjectPathOnNonZero_DD3E ; CPU:$DD33 PRG:1D33 D0 09 DEC $76 ; CPU:$DD35 PRG:1D35 C6 76 LDY #$01 ; CPU:$DD37 PRG:1D37 A0 01 LDX #$14 ; CPU:$DD39 PRG:1D39 A2 14 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD3B PRG:1D3B 20 AE D1 ObjectPathOnNonZero_DD3E: LDA $56 ; CPU:$DD3E PRG:1D3E A5 56 CMP #$01 ; CPU:$DD40 PRG:1D40 C9 01 BNE ObjectPathOnNonZero_DD5A ; CPU:$DD42 PRG:1D42 D0 16 LDA $75 ; CPU:$DD44 PRG:1D44 A5 75 BNE ObjectPathOnNonZero_DD4F ; CPU:$DD46 PRG:1D46 D0 07 ;------------------------------------------------------------ ; ProcessObjectStateDispatch_DD48 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateDispatch_DD48: LDY #$00 ; CPU:$DD48 PRG:1D48 A0 00 LDX #$10 ; CPU:$DD4A PRG:1D4A A2 10 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD4C PRG:1D4C 20 AE D1 ObjectPathOnNonZero_DD4F: LDA $76 ; CPU:$DD4F PRG:1D4F A5 76 BNE ObjectPathOnNonZero_DD5A ; CPU:$DD51 PRG:1D51 D0 07 LDY #$01 ; CPU:$DD53 PRG:1D53 A0 01 LDX #$14 ; CPU:$DD55 PRG:1D55 A2 14 JSR UpdateObjectBufferRoutine_D1AE ; CPU:$DD57 PRG:1D57 20 AE D1 ObjectPathOnNonZero_DD5A: RTS ; CPU:$DD5A PRG:1D5A 60 ;------------------------------------------------------------ ; UpdateObjectBufferRoutine_DD5B ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBufferRoutine_DD5B: STX $06 ; CPU:$DD5B PRG:1D5B 86 06 LDA #$B0 ; CPU:$DD5D PRG:1D5D A9 B0 STA $00 ; CPU:$DD5F PRG:1D5F 85 00 LDA #$03 ; CPU:$DD61 PRG:1D61 A9 03 STA $01 ; CPU:$DD63 PRG:1D63 85 01 LDX #$03 ; CPU:$DD65 PRG:1D65 A2 03 UpdateObjectBufferLoop_DD67: JSR ProcessObjectStateRoutine_DDB2 ; CPU:$DD67 PRG:1D67 20 B2 DD BMI ObjectPathOnNegative_DD8E ; CPU:$DD6A PRG:1D6A 30 22 LDY #$00 ; CPU:$DD6C PRG:1D6C A0 00 LDA ($00),Y ; CPU:$DD6E PRG:1D6E B1 00 BEQ UpdateObjectBufferLoop_DD67 ; CPU:$DD70 PRG:1D70 F0 F5 LDA #$00 ; CPU:$DD72 PRG:1D72 A9 00 STA ($00),Y ; CPU:$DD74 PRG:1D74 91 00 LDA $04 ; CPU:$DD76 PRG:1D76 A5 04 LDY #$01 ; CPU:$DD78 PRG:1D78 A0 01 STA ($00),Y ; CPU:$DD7A PRG:1D7A 91 00 LDA $05 ; CPU:$DD7C PRG:1D7C A5 05 LDY #$03 ; CPU:$DD7E PRG:1D7E A0 03 STA ($00),Y ; CPU:$DD80 PRG:1D80 91 00 LDA $06 ; CPU:$DD82 PRG:1D82 A5 06 LDY #$05 ; CPU:$DD84 PRG:1D84 A0 05 STA ($00),Y ; CPU:$DD86 PRG:1D86 91 00 LDA #$20 ; CPU:$DD88 PRG:1D88 A9 20 LDY #$0C ; CPU:$DD8A PRG:1D8A A0 0C STA ($00),Y ; CPU:$DD8C PRG:1D8C 91 00 ObjectPathOnNegative_DD8E: RTS ; CPU:$DD8E PRG:1D8E 60 ;------------------------------------------------------------ ; UpdateObjectBuffer_DD8F ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBuffer_DD8F: LDA #$C0 ; CPU:$DD8F PRG:1D8F A9 C0 STA $00 ; CPU:$DD91 PRG:1D91 85 00 LDA #$03 ; CPU:$DD93 PRG:1D93 A9 03 STA $01 ; CPU:$DD95 PRG:1D95 85 01 LDX #$02 ; CPU:$DD97 PRG:1D97 A2 02 ObjectPathLoop_DD99: LDY #$0C ; CPU:$DD99 PRG:1D99 A0 0C LDA ($00),Y ; CPU:$DD9B PRG:1D9B B1 00 BEQ ObjectPathContinue_DDAC ; CPU:$DD9D PRG:1D9D F0 0D SEC ; CPU:$DD9F PRG:1D9F 38 SBC #$01 ; CPU:$DDA0 PRG:1DA0 E9 01 STA ($00),Y ; CPU:$DDA2 PRG:1DA2 91 00 BNE ObjectPathContinue_DDAC ; CPU:$DDA4 PRG:1DA4 D0 06 LDY #$00 ; CPU:$DDA6 PRG:1DA6 A0 00 LDA #$01 ; CPU:$DDA8 PRG:1DA8 A9 01 STA ($00),Y ; CPU:$DDAA PRG:1DAA 91 00 ObjectPathContinue_DDAC: JSR ProcessObjectStateRoutine_DDB2 ; CPU:$DDAC PRG:1DAC 20 B2 DD BPL ObjectPathLoop_DD99 ; CPU:$DDAF PRG:1DAF 10 E8 RTS ; CPU:$DDB1 PRG:1DB1 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_DDB2 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_DDB2: CLC ; CPU:$DDB2 PRG:1DB2 18 LDA #$10 ; CPU:$DDB3 PRG:1DB3 A9 10 ADC $00 ; CPU:$DDB5 PRG:1DB5 65 00 STA $00 ; CPU:$DDB7 PRG:1DB7 85 00 LDA #$00 ; CPU:$DDB9 PRG:1DB9 A9 00 ADC $01 ; CPU:$DDBB PRG:1DBB 65 01 STA $01 ; CPU:$DDBD PRG:1DBD 85 01 DEX ; CPU:$DDBF PRG:1DBF CA RTS ; CPU:$DDC0 PRG:1DC0 60 ;------------------------------------------------------------ ; ObjectPath_DDC1 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_DDC1: LDA $8D ; CPU:$DDC1 PRG:1DC1 A5 8D BEQ ObjectPathOnZero_DDF8 ; CPU:$DDC3 PRG:1DC3 F0 33 LDX #$01 ; CPU:$DDC5 PRG:1DC5 A2 01 ObjectPathLoop_DDC7: LDA $70,X ; CPU:$DDC7 PRG:1DC7 B5 70 BNE ObjectPathOnNonZero_DDE3 ; CPU:$DDC9 PRG:1DC9 D0 18 LDA $10,X ; CPU:$DDCB PRG:1DCB B5 10 AND #$07 ; CPU:$DDCD PRG:1DCD 29 07 ORA #$02 ; CPU:$DDCF PRG:1DCF 09 02 STA $70,X ; CPU:$DDD1 PRG:1DD1 95 70 LDA $12,X ; CPU:$DDD3 PRG:1DD3 B5 12 AND #$0F ; CPU:$DDD5 PRG:1DD5 29 0F TAY ; CPU:$DDD7 PRG:1DD7 A8 LDA #$00 ; CPU:$DDD8 PRG:1DD8 A9 00 SEC ; CPU:$DDDA PRG:1DDA 38 ObjectPathLoop_DDDB: ROL A ; CPU:$DDDB PRG:1DDB 2A DEY ; CPU:$DDDC PRG:1DDC 88 BNE ObjectPathLoop_DDDB ; CPU:$DDDD PRG:1DDD D0 FC AND #$0F ; CPU:$DDDF PRG:1DDF 29 0F STA $D8,X ; CPU:$DDE1 PRG:1DE1 95 D8 ObjectPathOnNonZero_DDE3: LDA $44,X ; CPU:$DDE3 PRG:1DE3 B5 44 AND #$30 ; CPU:$DDE5 PRG:1DE5 29 30 ORA $D8,X ; CPU:$DDE7 PRG:1DE7 15 D8 STA $44,X ; CPU:$DDE9 PRG:1DE9 95 44 LDY $14,X ; CPU:$DDEB PRG:1DEB B4 14 CPY #$08 ; CPU:$DDED PRG:1DED C0 08 BCS ObjectPathOnCarry_DDF3 ; CPU:$DDEF PRG:1DEF B0 02 ORA #$80 ; CPU:$DDF1 PRG:1DF1 09 80 ObjectPathOnCarry_DDF3: STA $46,X ; CPU:$DDF3 PRG:1DF3 95 46 DEX ; CPU:$DDF5 PRG:1DF5 CA BPL ObjectPathLoop_DDC7 ; CPU:$DDF6 PRG:1DF6 10 CF ObjectPathOnZero_DDF8: RTS ; CPU:$DDF8 PRG:1DF8 60 .byte $28, $28, $20, $23, $00, $1F, $00, $A0, $00, $FF, $00, $FF, $01, $FF, $20, $E0 ; CPU:$DDF9 PRG:1DF9 0B .byte $20, $20, $01, $01, $1E, $1E, $20, $20, $20, $20, $1E, $1E ; CPU:$DE09 PRG:1E09 0B ;------------------------------------------------------------ ; ObjectPath_DE15 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_DE15: LDX #$03 ; CPU:$DE15 PRG:1E15 A2 03 ObjectPathLoop_DE17: LDA $DE0D,X ; CPU:$DE17 PRG:1E17 BD 0D DE STA $04 ; CPU:$DE1A PRG:1E1A 85 04 LDA $DDFD,X ; CPU:$DE1C PRG:1E1C BD FD DD STA $00 ; CPU:$DE1F PRG:1E1F 85 00 LDA $DDF9,X ; CPU:$DE21 PRG:1E21 BD F9 DD STA $01 ; CPU:$DE24 PRG:1E24 85 01 UpdateObjectBufferLoop_DE26: LDY $DE11,X ; CPU:$DE26 PRG:1E26 BC 11 DE LDA WorkPtr0Lo ; CPU:$DE29 PRG:1E29 A5 00 STA $02 ; CPU:$DE2B PRG:1E2B 85 02 LDA WorkPtr0Hi ; CPU:$DE2D PRG:1E2D A5 01 STA $03 ; CPU:$DE2F PRG:1E2F 85 03 ObjectPathLoop_DE31: JSR UpdateObjectBufferRoutine_DE81 ; CPU:$DE31 PRG:1E31 20 81 DE CMP #$4E ; CPU:$DE34 PRG:1E34 C9 4E BEQ UpdateObjectBufferOnZero_DE3C ; CPU:$DE36 PRG:1E36 F0 04 CMP #$24 ; CPU:$DE38 PRG:1E38 C9 24 BNE ObjectPathOnNonZero_DE4D ; CPU:$DE3A PRG:1E3A D0 11 UpdateObjectBufferOnZero_DE3C: PHA ; CPU:$DE3C PRG:1E3C 48 LDA $03 ; CPU:$DE3D PRG:1E3D A5 03 STA PPUADDR ; CPU:$DE3F PRG:1E3F 8D 06 20 LDA WorkPtr1Lo ; CPU:$DE42 PRG:1E42 A5 02 STA PPUADDR ; CPU:$DE44 PRG:1E44 8D 06 20 LDA #$FF ; CPU:$DE47 PRG:1E47 A9 FF STA PPUDATA ; CPU:$DE49 PRG:1E49 8D 07 20 PLA ; CPU:$DE4C PRG:1E4C 68 ObjectPathOnNonZero_DE4D: CMP #$4E ; CPU:$DE4D PRG:1E4D C9 4E BCS UpdateObjectBufferOnCarry_DE55 ; CPU:$DE4F PRG:1E4F B0 04 CMP #$30 ; CPU:$DE51 PRG:1E51 C9 30 BCS ObjectPathOnCarry_DE6B ; CPU:$DE53 PRG:1E53 B0 16 UpdateObjectBufferOnCarry_DE55: CMP #$B9 ; CPU:$DE55 PRG:1E55 C9 B9 BCS ObjectPathOnCarry_DE6B ; CPU:$DE57 PRG:1E57 B0 12 CLC ; CPU:$DE59 PRG:1E59 18 LDA $DE05,X ; CPU:$DE5A PRG:1E5A BD 05 DE ADC $02 ; CPU:$DE5D PRG:1E5D 65 02 STA $02 ; CPU:$DE5F PRG:1E5F 85 02 LDA $DE01,X ; CPU:$DE61 PRG:1E61 BD 01 DE ADC $03 ; CPU:$DE64 PRG:1E64 65 03 STA $03 ; CPU:$DE66 PRG:1E66 85 03 DEY ; CPU:$DE68 PRG:1E68 88 BNE ObjectPathLoop_DE31 ; CPU:$DE69 PRG:1E69 D0 C6 ObjectPathOnCarry_DE6B: CLC ; CPU:$DE6B PRG:1E6B 18 LDA $DE09,X ; CPU:$DE6C PRG:1E6C BD 09 DE ADC $00 ; CPU:$DE6F PRG:1E6F 65 00 STA $00 ; CPU:$DE71 PRG:1E71 85 00 LDA #$00 ; CPU:$DE73 PRG:1E73 A9 00 ADC $01 ; CPU:$DE75 PRG:1E75 65 01 STA $01 ; CPU:$DE77 PRG:1E77 85 01 DEC $04 ; CPU:$DE79 PRG:1E79 C6 04 BNE UpdateObjectBufferLoop_DE26 ; CPU:$DE7B PRG:1E7B D0 A9 DEX ; CPU:$DE7D PRG:1E7D CA BPL ObjectPathLoop_DE17 ; CPU:$DE7E PRG:1E7E 10 97 RTS ; CPU:$DE80 PRG:1E80 60 ;------------------------------------------------------------ ; UpdateObjectBufferRoutine_DE81 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBufferRoutine_DE81: LDA PPUSTATUS ; CPU:$DE81 PRG:1E81 AD 02 20 LDA $03 ; CPU:$DE84 PRG:1E84 A5 03 STA PPUADDR ; CPU:$DE86 PRG:1E86 8D 06 20 LDA WorkPtr1Lo ; CPU:$DE89 PRG:1E89 A5 02 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_DE8B ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_DE8B: STA PPUADDR ; CPU:$DE8B PRG:1E8B 8D 06 20 LDA PPUDATA ; CPU:$DE8E PRG:1E8E AD 07 20 LDA PPUDATA ; CPU:$DE91 PRG:1E91 AD 07 20 RTS ; CPU:$DE94 PRG:1E94 60 .byte $30, $35, $31, $4A, $3A, $3E, $4C, $3F, $33, $4B, $34, $38, $4D, $40, $3D, $41 ; CPU:$DE95 PRG:1E95 0B .byte $37, $35, $3B, $3C, $3A, $49, $48, $36, $45, $47, $46, $38, $42, $43, $3D, $44 ; CPU:$DEA5 PRG:1EA5 0B .byte $4E, $FA, $FA, $4E, $6E, $86, $86, $6F, $FC, $FC, $FC, $FC, $4F, $F9, $F9, $4F ; CPU:$DEB5 PRG:1EB5 0B .byte $4E, $FB, $FB, $4E, $60, $7C, $7C, $61, $FC, $FC, $FC, $FC, $4F, $F9, $F9, $4F ; CPU:$DEC5 PRG:1EC5 0B ObjectPathLoop_DED5: AND #$F0 ; CPU:$DED5 PRG:1ED5 29 F0 PHA ; CPU:$DED7 PRG:1ED7 48 CMP #$C0 ; CPU:$DED8 PRG:1ED8 C9 C0 LDA $40 ; CPU:$DEDA PRG:1EDA A5 40 AND #$FB ; CPU:$DEDC PRG:1EDC 29 FB BCC UpdateObjectBufferOnNoCarry_DEE2 ; CPU:$DEDE PRG:1EDE 90 02 ORA #$04 ; CPU:$DEE0 PRG:1EE0 09 04 UpdateObjectBufferOnNoCarry_DEE2: STA $2000 ; CPU:$DEE2 PRG:1EE2 8D 00 20 STA $40 ; CPU:$DEE5 PRG:1EE5 85 40 LDA ($00),Y ; CPU:$DEE7 PRG:1EE7 B1 00 AND #$0F ; CPU:$DEE9 PRG:1EE9 29 0F ORA #$20 ; CPU:$DEEB PRG:1EEB 09 20 STA PPUADDR ; CPU:$DEED PRG:1EED 8D 06 20 STA $03 ; CPU:$DEF0 PRG:1EF0 85 03 INY ; CPU:$DEF2 PRG:1EF2 C8 LDA ($00),Y ; CPU:$DEF3 PRG:1EF3 B1 00 STA PPUADDR ; CPU:$DEF5 PRG:1EF5 8D 06 20 STA $02 ; CPU:$DEF8 PRG:1EF8 85 02 PLA ; CPU:$DEFA PRG:1EFA 68 LSR A ; CPU:$DEFB PRG:1EFB 4A LSR A ; CPU:$DEFC PRG:1EFC 4A TAY ; CPU:$DEFD PRG:1EFD A8 LDA $DE95,Y ; CPU:$DEFE PRG:1EFE B9 95 DE STA PPUDATA ; CPU:$DF01 PRG:1F01 8D 07 20 INY ; CPU:$DF04 PRG:1F04 C8 LDA $DE95,Y ; CPU:$DF05 PRG:1F05 B9 95 DE STA PPUDATA ; CPU:$DF08 PRG:1F08 8D 07 20 CPY #$20 ; CPU:$DF0B PRG:1F0B C0 20 BCS ObjectPathOnCarry_DF1F ; CPU:$DF0D PRG:1F0D B0 10 CLC ; CPU:$DF0F PRG:1F0F 18 LDA #$20 ; CPU:$DF10 PRG:1F10 A9 20 ADC $02 ; CPU:$DF12 PRG:1F12 65 02 TAX ; CPU:$DF14 PRG:1F14 AA LDA #$00 ; CPU:$DF15 PRG:1F15 A9 00 ADC $03 ; CPU:$DF17 PRG:1F17 65 03 STA PPUADDR ; CPU:$DF19 PRG:1F19 8D 06 20 STX PPUADDR ; CPU:$DF1C PRG:1F1C 8E 06 20 ObjectPathOnCarry_DF1F: INY ; CPU:$DF1F PRG:1F1F C8 LDA $DE95,Y ; CPU:$DF20 PRG:1F20 B9 95 DE STA PPUDATA ; CPU:$DF23 PRG:1F23 8D 07 20 INY ; CPU:$DF26 PRG:1F26 C8 LDA $DE95,Y ; CPU:$DF27 PRG:1F27 B9 95 DE STA PPUDATA ; CPU:$DF2A PRG:1F2A 8D 07 20 LDY #$02 ; CPU:$DF2D PRG:1F2D A0 02 ;------------------------------------------------------------ ; ObjectPath_DF2F ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_DF2F: LDX PPUSTATUS ; CPU:$DF2F PRG:1F2F AE 02 20 TYA ; CPU:$DF32 PRG:1F32 98 CLC ; CPU:$DF33 PRG:1F33 18 ADC $00 ; CPU:$DF34 PRG:1F34 65 00 STA $00 ; CPU:$DF36 PRG:1F36 85 00 LDA #$00 ; CPU:$DF38 PRG:1F38 A9 00 ADC $01 ; CPU:$DF3A PRG:1F3A 65 01 STA $01 ; CPU:$DF3C PRG:1F3C 85 01 LDY #$00 ; CPU:$DF3E PRG:1F3E A0 00 LDA ($00),Y ; CPU:$DF40 PRG:1F40 B1 00 CMP #$FF ; CPU:$DF42 PRG:1F42 C9 FF BNE ObjectPathLoop_DED5 ; CPU:$DF44 PRG:1F44 D0 8F RTS ; CPU:$DF46 PRG:1F46 60 .byte $00, $02, $40, $42, $FC, $F3, $CF, $3F, $01, $04, $10, $40 ; CPU:$DF47 PRG:1F47 0B ObjectPathLoop_DF53: LDA $42 ; CPU:$DF53 PRG:1F53 A5 42 STA PPUSCROLL ; CPU:$DF55 PRG:1F55 8D 05 20 LDA $43 ; CPU:$DF58 PRG:1F58 A5 43 STA PPUSCROLL ; CPU:$DF5A PRG:1F5A 8D 05 20 RTS ; CPU:$DF5D PRG:1F5D 60 ;------------------------------------------------------------ ; UpdateObjectBuffer_DF5E ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBuffer_DF5E: LDA #$1F ; CPU:$DF5E PRG:1F5E A9 1F STA $03 ; CPU:$DF60 PRG:1F60 85 03 LDA #$FF ; CPU:$DF62 PRG:1F62 A9 FF STA $02 ; CPU:$DF64 PRG:1F64 85 02 UpdateObjectBufferDispatch_DF66: CLC ; CPU:$DF66 PRG:1F66 18 LDA #$01 ; CPU:$DF67 PRG:1F67 A9 01 ADC $02 ; CPU:$DF69 PRG:1F69 65 02 STA $02 ; CPU:$DF6B PRG:1F6B 85 02 LDA #$00 ; CPU:$DF6D PRG:1F6D A9 00 ADC $03 ; CPU:$DF6F PRG:1F6F 65 03 STA $03 ; CPU:$DF71 PRG:1F71 85 03 CMP #$23 ; CPU:$DF73 PRG:1F73 C9 23 BNE ObjectPathOnNonZero_DF7D ; CPU:$DF75 PRG:1F75 D0 06 LDA WorkPtr1Lo ; CPU:$DF77 PRG:1F77 A5 02 CMP #$C0 ; CPU:$DF79 PRG:1F79 C9 C0 BEQ ObjectPathLoop_DF53 ; CPU:$DF7B PRG:1F7B F0 D6 ObjectPathOnNonZero_DF7D: JSR UpdateObjectBufferRoutine_DE81 ; CPU:$DF7D PRG:1F7D 20 81 DE LDY #$00 ; CPU:$DF80 PRG:1F80 A0 00 CMP #$4E ; CPU:$DF82 PRG:1F82 C9 4E BEQ UpdateObjectBufferContinue_DFAC ; CPU:$DF84 PRG:1F84 F0 26 CMP #$FA ; CPU:$DF86 PRG:1F86 C9 FA BEQ UpdateObjectBufferContinue_DFAC ; CPU:$DF88 PRG:1F88 F0 22 CMP #$FB ; CPU:$DF8A PRG:1F8A C9 FB BEQ UpdateObjectBufferContinue_DFAC ; CPU:$DF8C PRG:1F8C F0 1E INY ; CPU:$DF8E PRG:1F8E C8 CMP #$24 ; CPU:$DF8F PRG:1F8F C9 24 BEQ UpdateObjectBufferDispatch_DF66 ; CPU:$DF91 PRG:1F91 F0 D3 CMP #$4E ; CPU:$DF93 PRG:1F93 C9 4E BCC UpdateObjectBufferContinue_DFAC ; CPU:$DF95 PRG:1F95 90 15 CMP #$FF ; CPU:$DF97 PRG:1F97 C9 FF BEQ UpdateObjectBufferContinue_DFAC ; CPU:$DF99 PRG:1F99 F0 11 CMP #$CC ; CPU:$DF9B PRG:1F9B C9 CC BCS ObjectPathOnCarry_DFA3 ; CPU:$DF9D PRG:1F9D B0 04 CMP #$AB ; CPU:$DF9F PRG:1F9F C9 AB BCS UpdateObjectBufferContinue_DFAC ; CPU:$DFA1 PRG:1FA1 B0 09 ObjectPathOnCarry_DFA3: INY ; CPU:$DFA3 PRG:1FA3 C8 CMP #$60 ; CPU:$DFA4 PRG:1FA4 C9 60 BCS UpdateObjectBufferDispatch_DF66 ; CPU:$DFA6 PRG:1FA6 B0 BE CMP #$50 ; CPU:$DFA8 PRG:1FA8 C9 50 BCC UpdateObjectBufferDispatch_DF66 ; CPU:$DFAA PRG:1FAA 90 BA UpdateObjectBufferContinue_DFAC: LDA WorkPtr1Lo ; CPU:$DFAC PRG:1FAC A5 02 AND #$1C ; CPU:$DFAE PRG:1FAE 29 1C LSR A ; CPU:$DFB0 PRG:1FB0 4A LSR A ; CPU:$DFB1 PRG:1FB1 4A STA $00 ; CPU:$DFB2 PRG:1FB2 85 00 LDA WorkPtr1Lo ; CPU:$DFB4 PRG:1FB4 A5 02 ASL A ; CPU:$DFB6 PRG:1FB6 0A LDA $03 ; CPU:$DFB7 PRG:1FB7 A5 03 AND #$03 ; CPU:$DFB9 PRG:1FB9 29 03 ROL A ; CPU:$DFBB PRG:1FBB 2A ASL A ; CPU:$DFBC PRG:1FBC 0A ASL A ; CPU:$DFBD PRG:1FBD 0A ASL A ; CPU:$DFBE PRG:1FBE 0A CLC ; CPU:$DFBF PRG:1FBF 18 ADC $00 ; CPU:$DFC0 PRG:1FC0 65 00 CLC ; CPU:$DFC2 PRG:1FC2 18 ADC #$C0 ; CPU:$DFC3 PRG:1FC3 69 C0 STA $00 ; CPU:$DFC5 PRG:1FC5 85 00 LDA #$23 ; CPU:$DFC7 PRG:1FC7 A9 23 STA $01 ; CPU:$DFC9 PRG:1FC9 85 01 LDA WorkPtr1Lo ; CPU:$DFCB PRG:1FCB A5 02 AND #$42 ; CPU:$DFCD PRG:1FCD 29 42 LDX #$FF ; CPU:$DFCF PRG:1FCF A2 FF ObjectPathLoop_DFD1: INX ; CPU:$DFD1 PRG:1FD1 E8 CMP $DF47,X ; CPU:$DFD2 PRG:1FD2 DD 47 DF BNE ObjectPathLoop_DFD1 ; CPU:$DFD5 PRG:1FD5 D0 FA LDA $DF4F,X ; CPU:$DFD7 PRG:1FD7 BD 4F DF CPY #$00 ; CPU:$DFDA PRG:1FDA C0 00 BEQ ObjectPathOnZero_DFE6 ; CPU:$DFDC PRG:1FDC F0 08 ASL A ; CPU:$DFDE PRG:1FDE 0A CPY #$01 ; CPU:$DFDF PRG:1FDF C0 01 BEQ ObjectPathOnZero_DFE6 ; CPU:$DFE1 PRG:1FE1 F0 03 ORA $DF4F,X ; CPU:$DFE3 PRG:1FE3 1D 4F DF ObjectPathOnZero_DFE6: STA $04 ; CPU:$DFE6 PRG:1FE6 85 04 LDY $01 ; CPU:$DFE8 PRG:1FE8 A4 01 STY PPUADDR ; CPU:$DFEA PRG:1FEA 8C 06 20 LDA WorkPtr0Lo ; CPU:$DFED PRG:1FED A5 00 JSR ProcessObjectStateRoutine_DE8B ; CPU:$DFEF PRG:1FEF 20 8B DE AND $DF4B,X ; CPU:$DFF2 PRG:1FF2 3D 4B DF ORA $04 ; CPU:$DFF5 PRG:1FF5 05 04 STY PPUADDR ; CPU:$DFF7 PRG:1FF7 8C 06 20 LDY $00 ; CPU:$DFFA PRG:1FFA A4 00 STY PPUADDR ; CPU:$DFFC PRG:1FFC 8C 06 20 STA PPUDATA ; CPU:$DFFF PRG:1FFF 8D 07 20 JMP UpdateObjectBufferDispatch_DF66 ; CPU:$E002 PRG:2002 4C 66 DF .byte $00, $00, $01, $01, $01, $01, $02, $02, $02, $03, $03, $03, $03, $04, $04, $04 ; CPU:$E005 PRG:2005 0B .byte $05, $05, $05, $05, $06, $06, $06, $06, $07, $07, $07, $07, $08, $08, $08, $08 ; CPU:$E015 PRG:2015 0B .byte $08, $09, $09, $09, $09, $09, $0A, $0A, $0A, $0A, $0A, $0A, $0B, $0B, $0B, $0B ; CPU:$E025 PRG:2025 0B .byte $0B, $0B, $0B, $0B, $0B, $0C, $0C, $0C, $0C, $0C, $0C, $0C, $0C, $0C, $0C, $0C ; CPU:$E035 PRG:2035 0B ;------------------------------------------------------------ ; ProcessObjectStateRoutine_E045 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_E045: LDX #$00 ; CPU:$E045 PRG:2045 A2 00 CMP #$80 ; CPU:$E047 PRG:2047 C9 80 BCC ObjectPathOnNoCarry_E04F ; CPU:$E049 PRG:2049 90 04 SBC #$80 ; CPU:$E04B PRG:204B E9 80 LDX #$01 ; CPU:$E04D PRG:204D A2 01 ObjectPathOnNoCarry_E04F: CMP #$40 ; CPU:$E04F PRG:204F C9 40 BCC ObjectPathOnNoCarry_E059 ; CPU:$E051 PRG:2051 90 06 STA $00 ; CPU:$E053 PRG:2053 85 00 LDA #$7F ; CPU:$E055 PRG:2055 A9 7F SBC $00 ; CPU:$E057 PRG:2057 E5 00 ObjectPathOnNoCarry_E059: TAY ; CPU:$E059 PRG:2059 A8 LDA $E005,Y ; CPU:$E05A PRG:205A B9 05 E0 STA $00 ; CPU:$E05D PRG:205D 85 00 DEX ; CPU:$E05F PRG:205F CA BNE ObjectPathOnNonZero_E069 ; CPU:$E060 PRG:2060 D0 07 SEC ; CPU:$E062 PRG:2062 38 LDA #$00 ; CPU:$E063 PRG:2063 A9 00 SBC $00 ; CPU:$E065 PRG:2065 E5 00 STA $00 ; CPU:$E067 PRG:2067 85 00 ObjectPathOnNonZero_E069: RTS ; CPU:$E069 PRG:2069 60 ;------------------------------------------------------------ ; ReadObjectRecordRoutine_E06A ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecordRoutine_E06A: LDA $56 ; CPU:$E06A PRG:206A A5 56 BNE ObjectPathContinue_E09B ; CPU:$E06C PRG:206C D0 2D LDX $0A ; CPU:$E06E PRG:206E A6 0A LDA $75,X ; CPU:$E070 PRG:2070 B5 75 BNE ObjectPathContinue_E09B ; CPU:$E072 PRG:2072 D0 27 LDY #$1B ; CPU:$E074 PRG:2074 A0 1B LDA (CurrentObjectPtrLo),Y ; CPU:$E076 PRG:2076 B1 08 CMP #$30 ; CPU:$E078 PRG:2078 C9 30 BCC UpdateObjectRecordOnNoCarry_E080 ; CPU:$E07A PRG:207A 90 04 CMP #$40 ; CPU:$E07C PRG:207C C9 40 BCC ObjectPathContinue_E09B ; CPU:$E07E PRG:207E 90 1B UpdateObjectRecordOnNoCarry_E080: LDA $06 ; CPU:$E080 PRG:2080 A5 06 AND #$02 ; CPU:$E082 PRG:2082 29 02 BEQ UpdateObjectRecordOnZero_E09C ; CPU:$E084 PRG:2084 F0 16 CLC ; CPU:$E086 PRG:2086 18 LDY #$14 ; CPU:$E087 PRG:2087 A0 14 LDA (CurrentObjectPtrLo),Y ; CPU:$E089 PRG:2089 B1 08 LDY #$04 ; CPU:$E08B PRG:208B A0 04 ADC (CurrentObjectPtrLo),Y ; CPU:$E08D PRG:208D 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$E08F PRG:208F 91 08 LDY #$13 ; CPU:$E091 PRG:2091 A0 13 LDA (CurrentObjectPtrLo),Y ; CPU:$E093 PRG:2093 B1 08 LDY #$03 ; CPU:$E095 PRG:2095 A0 03 ADC (CurrentObjectPtrLo),Y ; CPU:$E097 PRG:2097 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$E099 PRG:2099 91 08 ObjectPathContinue_E09B: RTS ; CPU:$E09B PRG:209B 60 UpdateObjectRecordOnZero_E09C: CLC ; CPU:$E09C PRG:209C 18 LDY #$12 ; CPU:$E09D PRG:209D A0 12 LDA (CurrentObjectPtrLo),Y ; CPU:$E09F PRG:209F B1 08 LDY #$02 ; CPU:$E0A1 PRG:20A1 A0 02 ADC (CurrentObjectPtrLo),Y ; CPU:$E0A3 PRG:20A3 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$E0A5 PRG:20A5 91 08 LDY #$11 ; CPU:$E0A7 PRG:20A7 A0 11 LDA (CurrentObjectPtrLo),Y ; CPU:$E0A9 PRG:20A9 B1 08 LDY #$01 ; CPU:$E0AB PRG:20AB A0 01 ADC (CurrentObjectPtrLo),Y ; CPU:$E0AD PRG:20AD 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$E0AF PRG:20AF 91 08 RTS ; CPU:$E0B1 PRG:20B1 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_E0B2 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_E0B2: TAX ; CPU:$E0B2 PRG:20B2 AA LDA #$FD ; CPU:$E0B3 PRG:20B3 A9 FD ObjectPathLoop_E0B5: CLC ; CPU:$E0B5 PRG:20B5 18 ADC #$03 ; CPU:$E0B6 PRG:20B6 69 03 DEX ; CPU:$E0B8 PRG:20B8 CA BPL ObjectPathLoop_E0B5 ; CPU:$E0B9 PRG:20B9 10 FA TAX ; CPU:$E0BB PRG:20BB AA TAY ; CPU:$E0BC PRG:20BC A8 LDA a:$00B2,X ; CPU:$E0BD PRG:20BD BD B2 00 CMP $02 ; CPU:$E0C0 PRG:20C0 C5 02 BNE UpdateObjectBufferOnNonZero_E0D2 ; CPU:$E0C2 PRG:20C2 D0 0E INX ; CPU:$E0C4 PRG:20C4 E8 LDA a:$00B2,X ; CPU:$E0C5 PRG:20C5 BD B2 00 CMP $03 ; CPU:$E0C8 PRG:20C8 C5 03 BNE UpdateObjectBufferOnNonZero_E0D2 ; CPU:$E0CA PRG:20CA D0 06 INX ; CPU:$E0CC PRG:20CC E8 LDA a:$00B2,X ; CPU:$E0CD PRG:20CD BD B2 00 CLC ; CPU:$E0D0 PRG:20D0 18 RTS ; CPU:$E0D1 PRG:20D1 60 UpdateObjectBufferOnNonZero_E0D2: LDA WorkPtr1Lo ; CPU:$E0D2 PRG:20D2 A5 02 STA a:$00B2,Y ; CPU:$E0D4 PRG:20D4 99 B2 00 INY ; CPU:$E0D7 PRG:20D7 C8 LDA $03 ; CPU:$E0D8 PRG:20D8 A5 03 STA a:$00B2,Y ; CPU:$E0DA PRG:20DA 99 B2 00 SEC ; CPU:$E0DD PRG:20DD 38 RTS ; CPU:$E0DE PRG:20DE 60 ;------------------------------------------------------------ ; UpdateObjectBufferRoutine_E0DF ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBufferRoutine_E0DF: LDA #$08 ; CPU:$E0DF PRG:20DF A9 08 STA $02 ; CPU:$E0E1 PRG:20E1 85 02 LDA WorkPtr0Lo ; CPU:$E0E3 PRG:20E3 A5 00 ASL A ; CPU:$E0E5 PRG:20E5 0A ROL $02 ; CPU:$E0E6 PRG:20E6 26 02 ASL A ; CPU:$E0E8 PRG:20E8 0A ROL $02 ; CPU:$E0E9 PRG:20E9 26 02 AND #$E0 ; CPU:$E0EB PRG:20EB 29 E0 STA $03 ; CPU:$E0ED PRG:20ED 85 03 LDA WorkPtr0Hi ; CPU:$E0EF PRG:20EF A5 01 LSR A ; CPU:$E0F1 PRG:20F1 4A LSR A ; CPU:$E0F2 PRG:20F2 4A LSR A ; CPU:$E0F3 PRG:20F3 4A ORA $03 ; CPU:$E0F4 PRG:20F4 05 03 STA $03 ; CPU:$E0F6 PRG:20F6 85 03 RTS ; CPU:$E0F8 PRG:20F8 60 ;------------------------------------------------------------ ; UpdateObjectBufferRoutine_E0F9 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBufferRoutine_E0F9: LDA $03 ; CPU:$E0F9 PRG:20F9 A5 03 ASL A ; CPU:$E0FB PRG:20FB 0A ASL A ; CPU:$E0FC PRG:20FC 0A ASL A ; CPU:$E0FD PRG:20FD 0A STA $01 ; CPU:$E0FE PRG:20FE 85 01 LDA $03 ; CPU:$E100 PRG:2100 A5 03 STA $00 ; CPU:$E102 PRG:2102 85 00 LDA WorkPtr1Lo ; CPU:$E104 PRG:2104 A5 02 LSR A ; CPU:$E106 PRG:2106 4A ROR $00 ; CPU:$E107 PRG:2107 66 00 LSR A ; CPU:$E109 PRG:2109 4A ROR $00 ; CPU:$E10A PRG:210A 66 00 LDA #$F8 ; CPU:$E10C PRG:210C A9 F8 AND $00 ; CPU:$E10E PRG:210E 25 00 STA $00 ; CPU:$E110 PRG:2110 85 00 RTS ; CPU:$E112 PRG:2112 60 ;------------------------------------------------------------ ; ObjectPath_E113 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ObjectPath_E113: LDA PPUSTATUS ; CPU:$E113 PRG:2113 AD 02 20 LDX #$00 ; CPU:$E116 PRG:2116 A2 00 ObjectPathLoop_E118: LDA a:$00B2,X ; CPU:$E118 PRG:2118 BD B2 00 STA PPUADDR ; CPU:$E11B PRG:211B 8D 06 20 INX ; CPU:$E11E PRG:211E E8 LDA a:$00B2,X ; CPU:$E11F PRG:211F BD B2 00 STA PPUADDR ; CPU:$E122 PRG:2122 8D 06 20 INX ; CPU:$E125 PRG:2125 E8 LDA PPUDATA ; CPU:$E126 PRG:2126 AD 07 20 LDA PPUDATA ; CPU:$E129 PRG:2129 AD 07 20 STA a:$00B2,X ; CPU:$E12C PRG:212C 9D B2 00 INX ; CPU:$E12F PRG:212F E8 CPX #$1E ; CPU:$E130 PRG:2130 E0 1E BNE ObjectPathLoop_E118 ; CPU:$E132 PRG:2132 D0 E4 LDA $42 ; CPU:$E134 PRG:2134 A5 42 STA PPUSCROLL ; CPU:$E136 PRG:2136 8D 05 20 LDA $43 ; CPU:$E139 PRG:2139 A5 43 STA PPUSCROLL ; CPU:$E13B PRG:213B 8D 05 20 RTS ; CPU:$E13E PRG:213E 60 ;------------------------------------------------------------ ; ReadObjectRecordRoutine_E13F ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecordRoutine_E13F: LDY #$10 ; CPU:$E13F PRG:213F A0 10 LDA (CurrentObjectPtrLo),Y ; CPU:$E141 PRG:2141 B1 08 LDY #$21 ; CPU:$E143 PRG:2143 A0 21 CMP #$00 ; CPU:$E145 PRG:2145 C9 00 BEQ ReadObjectRecordOnZero_E15D ; CPU:$E147 PRG:2147 F0 14 CMP #$01 ; CPU:$E149 PRG:2149 C9 01 BEQ ReadObjectRecordOnZero_E153 ; CPU:$E14B PRG:214B F0 06 LDY #$23 ; CPU:$E14D PRG:214D A0 23 CMP #$02 ; CPU:$E14F PRG:214F C9 02 BEQ ReadObjectRecordOnZero_E15D ; CPU:$E151 PRG:2151 F0 0A ReadObjectRecordOnZero_E153: LDA (CurrentObjectPtrLo),Y ; CPU:$E153 PRG:2153 B1 08 AND #$07 ; CPU:$E155 PRG:2155 29 07 CMP #$07 ; CPU:$E157 PRG:2157 C9 07 BCS ObjectPathOnCarry_E165 ; CPU:$E159 PRG:2159 B0 0A ObjectPathLoop_E15B: CLC ; CPU:$E15B PRG:215B 18 RTS ; CPU:$E15C PRG:215C 60 ReadObjectRecordOnZero_E15D: LDA (CurrentObjectPtrLo),Y ; CPU:$E15D PRG:215D B1 08 AND #$07 ; CPU:$E15F PRG:215F 29 07 CMP #$01 ; CPU:$E161 PRG:2161 C9 01 BCS ObjectPathLoop_E15B ; CPU:$E163 PRG:2163 B0 F6 ObjectPathOnCarry_E165: SEC ; CPU:$E165 PRG:2165 38 RTS ; CPU:$E166 PRG:2166 60 .byte $01, $19, $03, $1A, $19, $01, $1A, $03, $12, $12, $14, $14, $11, $11, $13, $13 ; CPU:$E167 PRG:2167 0B .byte $19, $19, $1A, $1A, $01, $01, $03, $03 ; CPU:$E177 PRG:2177 0B ;------------------------------------------------------------ ; ProcessObjectStateRoutine_E17F ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_E17F: LDX #$08 ; CPU:$E17F PRG:217F A2 08 LDY #$41 ; CPU:$E181 PRG:2181 A0 41 CMP #$F9 ; CPU:$E183 PRG:2183 C9 F9 BEQ ObjectPathContinue_E1BB ; CPU:$E185 PRG:2185 F0 34 LDX #$20 ; CPU:$E187 PRG:2187 A2 20 CMP #$93 ; CPU:$E189 PRG:2189 C9 93 BCS ObjectPathOnCarry_E191 ; CPU:$E18B PRG:218B B0 04 CMP #$7C ; CPU:$E18D PRG:218D C9 7C BCS ObjectPathContinue_E1BB ; CPU:$E18F PRG:218F B0 2A ObjectPathOnCarry_E191: LDY #$31 ; CPU:$E191 PRG:2191 A0 31 CMP #$24 ; CPU:$E193 PRG:2193 C9 24 BEQ ObjectPathOnZero_E1A7 ; CPU:$E195 PRG:2195 F0 10 CMP #$4A ; CPU:$E197 PRG:2197 C9 4A BCC ObjectPathContinue_E1BB ; CPU:$E199 PRG:2199 90 20 CMP #$C4 ; CPU:$E19B PRG:219B C9 C4 BCS ObjectPathOnCarry_E1A3 ; CPU:$E19D PRG:219D B0 04 CMP #$B9 ; CPU:$E19F PRG:219F C9 B9 BCS ObjectPathContinue_E1BB ; CPU:$E1A1 PRG:21A1 B0 18 ObjectPathOnCarry_E1A3: CMP #$FF ; CPU:$E1A3 PRG:21A3 C9 FF BEQ ObjectPathContinue_E1BB ; CPU:$E1A5 PRG:21A5 F0 14 ObjectPathOnZero_E1A7: LDY #$80 ; CPU:$E1A7 PRG:21A7 A0 80 CMP #$60 ; CPU:$E1A9 PRG:21A9 C9 60 BCS ObjectPathContinue_E1B9 ; CPU:$E1AB PRG:21AB B0 0C CMP #$50 ; CPU:$E1AD PRG:21AD C9 50 BCC ObjectPathContinue_E1B9 ; CPU:$E1AF PRG:21AF 90 08 LDX $0A ; CPU:$E1B1 PRG:21B1 A6 0A LDA $90,X ; CPU:$E1B3 PRG:21B3 B5 90 CMP #$13 ; CPU:$E1B5 PRG:21B5 C9 13 BNE ObjectPathOnNonZero_E1BD ; CPU:$E1B7 PRG:21B7 D0 04 ObjectPathContinue_E1B9: CLC ; CPU:$E1B9 PRG:21B9 18 RTS ; CPU:$E1BA PRG:21BA 60 ObjectPathContinue_E1BB: STX $FF ; CPU:$E1BB PRG:21BB 86 FF ObjectPathOnNonZero_E1BD: SEC ; CPU:$E1BD PRG:21BD 38 RTS ; CPU:$E1BE PRG:21BE 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_E1BF ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_E1BF: TYA ; CPU:$E1BF PRG:21BF 98 BPL UpdateObjectRecordOnPositive_E1CF ; CPU:$E1C0 PRG:21C0 10 0D JSR ReadObjectRecordRoutine_E262 ; CPU:$E1C2 PRG:21C2 20 62 E2 JSR UpdateObjectRecordRoutine_E229 ; CPU:$E1C5 PRG:21C5 20 29 E2 LDX $0A ; CPU:$E1C8 PRG:21C8 A6 0A LDA #$13 ; CPU:$E1CA PRG:21CA A9 13 STA $90,X ; CPU:$E1CC PRG:21CC 95 90 RTS ; CPU:$E1CE PRG:21CE 60 UpdateObjectRecordOnPositive_E1CF: EOR $06 ; CPU:$E1CF PRG:21CF 45 06 LDY #$1B ; CPU:$E1D1 PRG:21D1 A0 1B STA (CurrentObjectPtrLo),Y ; CPU:$E1D3 PRG:21D3 91 08 STA $00 ; CPU:$E1D5 PRG:21D5 85 00 JSR ReadObjectRecordRoutine_E262 ; CPU:$E1D7 PRG:21D7 20 62 E2 LDA WorkPtr0Lo ; CPU:$E1DA PRG:21DA A5 00 CMP #$40 ; CPU:$E1DC PRG:21DC C9 40 BMI ObjectPathOnNegative_E1E8 ; CPU:$E1DE PRG:21DE 30 08 LSR $04 ; CPU:$E1E0 PRG:21E0 46 04 ROR $05 ; CPU:$E1E2 PRG:21E2 66 05 LSR $04 ; CPU:$E1E4 PRG:21E4 46 04 ROR $05 ; CPU:$E1E6 PRG:21E6 66 05 ObjectPathOnNegative_E1E8: LSR $04 ; CPU:$E1E8 PRG:21E8 46 04 ROR $05 ; CPU:$E1EA PRG:21EA 66 05 LSR $04 ; CPU:$E1EC PRG:21EC 46 04 ROR $05 ; CPU:$E1EE PRG:21EE 66 05 LSR $04 ; CPU:$E1F0 PRG:21F0 46 04 ROR $05 ; CPU:$E1F2 PRG:21F2 66 05 LDA $06 ; CPU:$E1F4 PRG:21F4 A5 06 AND #$01 ; CPU:$E1F6 PRG:21F6 29 01 BNE UpdateObjectRecordOnNonZero_E1FD ; CPU:$E1F8 PRG:21F8 D0 03 JSR ProcessObjectStateRoutine_E281 ; CPU:$E1FA PRG:21FA 20 81 E2 UpdateObjectRecordOnNonZero_E1FD: LDY #$18 ; CPU:$E1FD PRG:21FD A0 18 LDA $05 ; CPU:$E1FF PRG:21FF A5 05 STA (CurrentObjectPtrLo),Y ; CPU:$E201 PRG:2201 91 08 DEY ; CPU:$E203 PRG:2203 88 LDA $04 ; CPU:$E204 PRG:2204 A5 04 STA (CurrentObjectPtrLo),Y ; CPU:$E206 PRG:2206 91 08 JSR UpdateObjectRecordRoutine_E229 ; CPU:$E208 PRG:2208 20 29 E2 LDA $06 ; CPU:$E20B PRG:220B A5 06 ORA #$70 ; CPU:$E20D PRG:220D 09 70 LDY #$10 ; CPU:$E20F PRG:220F A0 10 STA (CurrentObjectPtrLo),Y ; CPU:$E211 PRG:2211 91 08 LDA WorkPtr0Lo ; CPU:$E213 PRG:2213 A5 00 CMP #$40 ; CPU:$E215 PRG:2215 C9 40 BCC ObjectPathOnNoCarry_E21D ; CPU:$E217 PRG:2217 90 04 JSR ProcessObjectStateRoutine_E69A ; CPU:$E219 PRG:2219 20 9A E6 RTS ; CPU:$E21C PRG:221C 60 ObjectPathOnNoCarry_E21D: LDY $0A ; CPU:$E21D PRG:221D A4 0A LDA #$10 ; CPU:$E21F PRG:221F A9 10 STA a:$0058,Y ; CPU:$E221 PRG:2221 99 58 00 RTS ; CPU:$E224 PRG:2224 60 .byte $F8, $00, $10, $18 ; CPU:$E225 PRG:2225 0B ;------------------------------------------------------------ ; UpdateObjectRecordRoutine_E229 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecordRoutine_E229: LDY #$01 ; CPU:$E229 PRG:2229 A0 01 LDA (CurrentObjectPtrLo),Y ; CPU:$E22B PRG:222B B1 08 LDY #$19 ; CPU:$E22D PRG:222D A0 19 STA (CurrentObjectPtrLo),Y ; CPU:$E22F PRG:222F 91 08 LDY #$03 ; CPU:$E231 PRG:2231 A0 03 LDA (CurrentObjectPtrLo),Y ; CPU:$E233 PRG:2233 B1 08 LDY #$1A ; CPU:$E235 PRG:2235 A0 1A STA (CurrentObjectPtrLo),Y ; CPU:$E237 PRG:2237 91 08 LDX $06 ; CPU:$E239 PRG:2239 A6 06 LDY $E17B,X ; CPU:$E23B PRG:223B BC 7B E1 LDX #$00 ; CPU:$E23E PRG:223E A2 00 LDA (CurrentObjectPtrLo),Y ; CPU:$E240 PRG:2240 B1 08 AND #$0F ; CPU:$E242 PRG:2242 29 0F CMP #$08 ; CPU:$E244 PRG:2244 C9 08 BCC ObjectPathOnNoCarry_E249 ; CPU:$E246 PRG:2246 90 01 INX ; CPU:$E248 PRG:2248 E8 ObjectPathOnNoCarry_E249: LDA $06 ; CPU:$E249 PRG:2249 A5 06 AND #$01 ; CPU:$E24B PRG:224B 29 01 BNE UpdateObjectRecordOnNonZero_E251 ; CPU:$E24D PRG:224D D0 02 INX ; CPU:$E24F PRG:224F E8 INX ; CPU:$E250 PRG:2250 E8 UpdateObjectRecordOnNonZero_E251: LDA (CurrentObjectPtrLo),Y ; CPU:$E251 PRG:2251 B1 08 AND #$F0 ; CPU:$E253 PRG:2253 29 F0 CLC ; CPU:$E255 PRG:2255 18 ADC $E225,X ; CPU:$E256 PRG:2256 7D 25 E2 TAX ; CPU:$E259 PRG:2259 AA LDA $E177,Y ; CPU:$E25A PRG:225A B9 77 E1 TAY ; CPU:$E25D PRG:225D A8 TXA ; CPU:$E25E PRG:225E 8A STA (CurrentObjectPtrLo),Y ; CPU:$E25F PRG:225F 91 08 RTS ; CPU:$E261 PRG:2261 60 ;------------------------------------------------------------ ; ReadObjectRecordRoutine_E262 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecordRoutine_E262: LDX $06 ; CPU:$E262 PRG:2262 A6 06 LDY $E16F,X ; CPU:$E264 PRG:2264 BC 6F E1 LDA (CurrentObjectPtrLo),Y ; CPU:$E267 PRG:2267 B1 08 STA $05 ; CPU:$E269 PRG:2269 85 05 DEY ; CPU:$E26B PRG:226B 88 LDA (CurrentObjectPtrLo),Y ; CPU:$E26C PRG:226C B1 08 STA $04 ; CPU:$E26E PRG:226E 85 04 BPL UpdateObjectRecordOnPositive_E275 ; CPU:$E270 PRG:2270 10 03 JSR ProcessObjectStateRoutine_E281 ; CPU:$E272 PRG:2272 20 81 E2 UpdateObjectRecordOnPositive_E275: LDY #$16 ; CPU:$E275 PRG:2275 A0 16 LDA $05 ; CPU:$E277 PRG:2277 A5 05 STA (CurrentObjectPtrLo),Y ; CPU:$E279 PRG:2279 91 08 DEY ; CPU:$E27B PRG:227B 88 LDA $04 ; CPU:$E27C PRG:227C A5 04 STA (CurrentObjectPtrLo),Y ; CPU:$E27E PRG:227E 91 08 RTS ; CPU:$E280 PRG:2280 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_E281 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_E281: SEC ; CPU:$E281 PRG:2281 38 LDA #$00 ; CPU:$E282 PRG:2282 A9 00 SBC $05 ; CPU:$E284 PRG:2284 E5 05 STA $05 ; CPU:$E286 PRG:2286 85 05 LDA #$00 ; CPU:$E288 PRG:2288 A9 00 SBC $04 ; CPU:$E28A PRG:228A E5 04 STA $04 ; CPU:$E28C PRG:228C 85 04 RTS ; CPU:$E28E PRG:228E 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_E28F ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_E28F: LDA $06 ; CPU:$E28F PRG:228F A5 06 AND #$03 ; CPU:$E291 PRG:2291 29 03 TAX ; CPU:$E293 PRG:2293 AA LDA $06 ; CPU:$E294 PRG:2294 A5 06 AND #$F0 ; CPU:$E296 PRG:2296 29 F0 CMP #$70 ; CPU:$E298 PRG:2298 C9 70 BNE ReadObjectRecordOnNonZero_E2C7 ; CPU:$E29A PRG:229A D0 2B JSR UpdateObjectRecordRoutine_E335 ; CPU:$E29C PRG:229C 20 35 E3 BCS ObjectPathOnCarry_E2BA ; CPU:$E29F PRG:229F B0 19 JSR UpdateObjectRecordRoutine_E2E6 ; CPU:$E2A1 PRG:22A1 20 E6 E2 BMI ObjectPathOnNegative_E2B5 ; CPU:$E2A4 PRG:22A4 30 0F LDA WorkPtr0Lo ; CPU:$E2A6 PRG:22A6 A5 00 BMI ObjectPathOnNegative_E2B9 ; CPU:$E2A8 PRG:22A8 30 0F ;------------------------------------------------------------ ; UpdateObjectRecordRoutine_E2AA ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecordRoutine_E2AA: LDY #$1B ; CPU:$E2AA PRG:22AA A0 1B LDA (CurrentObjectPtrLo),Y ; CPU:$E2AC PRG:22AC B1 08 LDY #$10 ; CPU:$E2AE PRG:22AE A0 10 STA (CurrentObjectPtrLo),Y ; CPU:$E2B0 PRG:22B0 91 08 STA $06 ; CPU:$E2B2 PRG:22B2 85 06 RTS ; CPU:$E2B4 PRG:22B4 60 ObjectPathOnNegative_E2B5: LDA WorkPtr0Lo ; CPU:$E2B5 PRG:22B5 A5 00 BMI UpdateObjectRecordRoutine_E2AA ; CPU:$E2B7 PRG:22B7 30 F1 ObjectPathOnNegative_E2B9: RTS ; CPU:$E2B9 PRG:22B9 60 ObjectPathOnCarry_E2BA: JSR UpdateObjectRecordRoutine_E2AA ; CPU:$E2BA PRG:22BA 20 AA E2 AND #$03 ; CPU:$E2BD PRG:22BD 29 03 TAX ; CPU:$E2BF PRG:22BF AA LDY $E173,X ; CPU:$E2C0 PRG:22C0 BC 73 E1 JSR UpdateObjectRecordRoutine_E325 ; CPU:$E2C3 PRG:22C3 20 25 E3 RTS ; CPU:$E2C6 PRG:22C6 60 ReadObjectRecordOnNonZero_E2C7: LDY $E16F,X ; CPU:$E2C7 PRG:22C7 BC 6F E1 LDA (CurrentObjectPtrLo),Y ; CPU:$E2CA PRG:22CA B1 08 STA $05 ; CPU:$E2CC PRG:22CC 85 05 DEY ; CPU:$E2CE PRG:22CE 88 LDA (CurrentObjectPtrLo),Y ; CPU:$E2CF PRG:22CF B1 08 STA $04 ; CPU:$E2D1 PRG:22D1 85 04 BPL ReadObjectRecordOnPositive_E2D8 ; CPU:$E2D3 PRG:22D3 10 03 JSR ProcessObjectStateRoutine_E281 ; CPU:$E2D5 PRG:22D5 20 81 E2 ReadObjectRecordOnPositive_E2D8: LDY #$16 ; CPU:$E2D8 PRG:22D8 A0 16 SEC ; CPU:$E2DA PRG:22DA 38 LDA $05 ; CPU:$E2DB PRG:22DB A5 05 SBC (CurrentObjectPtrLo),Y ; CPU:$E2DD PRG:22DD F1 08 DEY ; CPU:$E2DF PRG:22DF 88 LDA $04 ; CPU:$E2E0 PRG:22E0 A5 04 SBC (CurrentObjectPtrLo),Y ; CPU:$E2E2 PRG:22E2 F1 08 BCC UpdateObjectRecordOnNoCarry_E301 ; CPU:$E2E4 PRG:22E4 90 1B ;------------------------------------------------------------ ; UpdateObjectRecordRoutine_E2E6 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecordRoutine_E2E6: LDY #$18 ; CPU:$E2E6 PRG:22E6 A0 18 LDA (CurrentObjectPtrLo),Y ; CPU:$E2E8 PRG:22E8 B1 08 CLC ; CPU:$E2EA PRG:22EA 18 LDY $E16F,X ; CPU:$E2EB PRG:22EB BC 6F E1 ADC (CurrentObjectPtrLo),Y ; CPU:$E2EE PRG:22EE 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$E2F0 PRG:22F0 91 08 LDY #$17 ; CPU:$E2F2 PRG:22F2 A0 17 LDA (CurrentObjectPtrLo),Y ; CPU:$E2F4 PRG:22F4 B1 08 STA $00 ; CPU:$E2F6 PRG:22F6 85 00 LDY $E16F,X ; CPU:$E2F8 PRG:22F8 BC 6F E1 DEY ; CPU:$E2FB PRG:22FB 88 ADC (CurrentObjectPtrLo),Y ; CPU:$E2FC PRG:22FC 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$E2FE PRG:22FE 91 08 RTS ; CPU:$E300 PRG:2300 60 UpdateObjectRecordOnNoCarry_E301: LDY #$10 ; CPU:$E301 PRG:2301 A0 10 TXA ; CPU:$E303 PRG:2303 8A STA (CurrentObjectPtrLo),Y ; CPU:$E304 PRG:2304 91 08 LDY #$1B ; CPU:$E306 PRG:2306 A0 1B STA (CurrentObjectPtrLo),Y ; CPU:$E308 PRG:2308 91 08 AND #$01 ; CPU:$E30A PRG:230A 29 01 BEQ UpdateObjectRecordOnZero_E313 ; CPU:$E30C PRG:230C F0 05 LDY #$15 ; CPU:$E30E PRG:230E A0 15 JSR UpdateObjectRecordRoutine_E325 ; CPU:$E310 PRG:2310 20 25 E3 UpdateObjectRecordOnZero_E313: LDY #$15 ; CPU:$E313 PRG:2313 A0 15 LDA (CurrentObjectPtrLo),Y ; CPU:$E315 PRG:2315 B1 08 PHA ; CPU:$E317 PRG:2317 48 INY ; CPU:$E318 PRG:2318 C8 LDA (CurrentObjectPtrLo),Y ; CPU:$E319 PRG:2319 B1 08 LDY $E16F,X ; CPU:$E31B PRG:231B BC 6F E1 STA (CurrentObjectPtrLo),Y ; CPU:$E31E PRG:231E 91 08 DEY ; CPU:$E320 PRG:2320 88 PLA ; CPU:$E321 PRG:2321 68 STA (CurrentObjectPtrLo),Y ; CPU:$E322 PRG:2322 91 08 RTS ; CPU:$E324 PRG:2324 60 ;------------------------------------------------------------ ; UpdateObjectRecordRoutine_E325 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecordRoutine_E325: INY ; CPU:$E325 PRG:2325 C8 SEC ; CPU:$E326 PRG:2326 38 LDA #$00 ; CPU:$E327 PRG:2327 A9 00 SBC (CurrentObjectPtrLo),Y ; CPU:$E329 PRG:2329 F1 08 STA (CurrentObjectPtrLo),Y ; CPU:$E32B PRG:232B 91 08 DEY ; CPU:$E32D PRG:232D 88 LDA #$00 ; CPU:$E32E PRG:232E A9 00 SBC (CurrentObjectPtrLo),Y ; CPU:$E330 PRG:2330 F1 08 STA (CurrentObjectPtrLo),Y ; CPU:$E332 PRG:2332 91 08 RTS ; CPU:$E334 PRG:2334 60 ;------------------------------------------------------------ ; UpdateObjectRecordRoutine_E335 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecordRoutine_E335: LDY $E167,X ; CPU:$E335 PRG:2335 BC 67 E1 LDA (CurrentObjectPtrLo),Y ; CPU:$E338 PRG:2338 B1 08 LDY $E16B,X ; CPU:$E33A PRG:233A BC 6B E1 CMP (CurrentObjectPtrLo),Y ; CPU:$E33D PRG:233D D1 08 BCC ObjectPathOnNoCarry_E350 ; CPU:$E33F PRG:233F 90 0F LDY $E177,X ; CPU:$E341 PRG:2341 BC 77 E1 LDA (CurrentObjectPtrLo),Y ; CPU:$E344 PRG:2344 B1 08 LDY $E17B,X ; CPU:$E346 PRG:2346 BC 7B E1 STA (CurrentObjectPtrLo),Y ; CPU:$E349 PRG:2349 91 08 INY ; CPU:$E34B PRG:234B C8 LDA #$00 ; CPU:$E34C PRG:234C A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$E34E PRG:234E 91 08 ObjectPathOnNoCarry_E350: RTS ; CPU:$E350 PRG:2350 60 ;------------------------------------------------------------ ; ReadObjectRecordRoutine_E351 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecordRoutine_E351: LDY #$20 ; CPU:$E351 PRG:2351 A0 20 LDA (CurrentObjectPtrLo),Y ; CPU:$E353 PRG:2353 B1 08 BNE ObjectPathLoop_E37E ; CPU:$E355 PRG:2355 D0 27 LDY #$21 ; CPU:$E357 PRG:2357 A0 21 LDA (CurrentObjectPtrLo),Y ; CPU:$E359 PRG:2359 B1 08 CLC ; CPU:$E35B PRG:235B 18 ;------------------------------------------------------------ ; ReadObjectRecord_E35C ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecord_E35C: ADC #$04 ; CPU:$E35C PRG:235C 69 04 STA $00 ; CPU:$E35E PRG:235E 85 00 LDY #$23 ; CPU:$E360 PRG:2360 A0 23 LDA (CurrentObjectPtrLo),Y ; CPU:$E362 PRG:2362 B1 08 CLC ; CPU:$E364 PRG:2364 18 ADC #$04 ; CPU:$E365 PRG:2365 69 04 STA $01 ; CPU:$E367 PRG:2367 85 01 JSR UpdateObjectBufferRoutine_E0DF ; CPU:$E369 PRG:2369 20 DF E0 LDA $0A ; CPU:$E36C PRG:236C A5 0A CLC ; CPU:$E36E PRG:236E 18 ADC #$02 ; CPU:$E36F PRG:236F 69 02 JSR ProcessObjectStateRoutine_E0B2 ; CPU:$E371 PRG:2371 20 B2 E0 BCS ObjectPathLoop_E37E ; CPU:$E374 PRG:2374 B0 08 CMP #$4E ; CPU:$E376 PRG:2376 C9 4E BEQ ObjectPathOnZero_E380 ; CPU:$E378 PRG:2378 F0 06 CMP #$4F ; CPU:$E37A PRG:237A C9 4F BEQ ObjectPathOnZero_E380 ; CPU:$E37C PRG:237C F0 02 ObjectPathLoop_E37E: CLC ; CPU:$E37E PRG:237E 18 RTS ; CPU:$E37F PRG:237F 60 ObjectPathOnZero_E380: JSR ReadObjectRecordRoutine_E13F ; CPU:$E380 PRG:2380 20 3F E1 BCS ObjectPathLoop_E37E ; CPU:$E383 PRG:2383 B0 F9 SEC ; CPU:$E385 PRG:2385 38 RTS ; CPU:$E386 PRG:2386 60 .byte $00, $00, $00, $00, $0C, $F4, $0C, $F4, $F4, $0C, $F4, $0C, $00, $00, $00, $00 ; CPU:$E387 PRG:2387 0B .byte $80, $00, $80, $00, $40, $C0, $40, $C0, $81, $80, $80, $81, $81, $80, $80, $81 ; CPU:$E397 PRG:2397 0B ;------------------------------------------------------------ ; UpdateObjectRecordRoutine_E3A7 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecordRoutine_E3A7: JSR ReadObjectRecordRoutine_E262 ; CPU:$E3A7 PRG:23A7 20 62 E2 LDX $06 ; CPU:$E3AA PRG:23AA A6 06 LDY $E16F,X ; CPU:$E3AC PRG:23AC BC 6F E1 LDA #$00 ; CPU:$E3AF PRG:23AF A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$E3B1 PRG:23B1 91 08 DEY ; CPU:$E3B3 PRG:23B3 88 STA (CurrentObjectPtrLo),Y ; CPU:$E3B4 PRG:23B4 91 08 ;------------------------------------------------------------ ; UpdateObjectRecord_E3B6 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectRecord_E3B6: LDA $07 ; CPU:$E3B6 PRG:23B6 A5 07 SEC ; CPU:$E3B8 PRG:23B8 38 SBC #$04 ; CPU:$E3B9 PRG:23B9 E9 04 TAX ; CPU:$E3BB PRG:23BB AA LDA $E39F,X ; CPU:$E3BC PRG:23BC BD 9F E3 LDY #$10 ; CPU:$E3BF PRG:23BF A0 10 STA (CurrentObjectPtrLo),Y ; CPU:$E3C1 PRG:23C1 91 08 LDA $E387,X ; CPU:$E3C3 PRG:23C3 BD 87 E3 LDY #$19 ; CPU:$E3C6 PRG:23C6 A0 19 STA (CurrentObjectPtrLo),Y ; CPU:$E3C8 PRG:23C8 91 08 LDA $E38F,X ; CPU:$E3CA PRG:23CA BD 8F E3 INY ; CPU:$E3CD PRG:23CD C8 STA (CurrentObjectPtrLo),Y ; CPU:$E3CE PRG:23CE 91 08 LDA $E397,X ; CPU:$E3D0 PRG:23D0 BD 97 E3 INY ; CPU:$E3D3 PRG:23D3 C8 STA (CurrentObjectPtrLo),Y ; CPU:$E3D4 PRG:23D4 91 08 LDY #$01 ; CPU:$E3D6 PRG:23D6 A0 01 LDA (CurrentObjectPtrLo),Y ; CPU:$E3D8 PRG:23D8 B1 08 LDX $06 ; CPU:$E3DA PRG:23DA A6 06 CPX #$02 ; CPU:$E3DC PRG:23DC E0 02 PHP ; CPU:$E3DE PRG:23DE 08 BCS UpdateObjectRecordOnCarry_E3E4 ; CPU:$E3DF PRG:23DF B0 03 JSR ProcessObjectStateRoutine_E405 ; CPU:$E3E1 PRG:23E1 20 05 E4 UpdateObjectRecordOnCarry_E3E4: STA (CurrentObjectPtrLo),Y ; CPU:$E3E4 PRG:23E4 91 08 LDY #$17 ; CPU:$E3E6 PRG:23E6 A0 17 STA (CurrentObjectPtrLo),Y ; CPU:$E3E8 PRG:23E8 91 08 LDY #$03 ; CPU:$E3EA PRG:23EA A0 03 LDA (CurrentObjectPtrLo),Y ; CPU:$E3EC PRG:23EC B1 08 PLP ; CPU:$E3EE PRG:23EE 28 BCC UpdateObjectRecordOnNoCarry_E3F4 ; CPU:$E3EF PRG:23EF 90 03 JSR ProcessObjectStateRoutine_E405 ; CPU:$E3F1 PRG:23F1 20 05 E4 UpdateObjectRecordOnNoCarry_E3F4: STA (CurrentObjectPtrLo),Y ; CPU:$E3F4 PRG:23F4 91 08 LDY #$18 ; CPU:$E3F6 PRG:23F6 A0 18 STA (CurrentObjectPtrLo),Y ; CPU:$E3F8 PRG:23F8 91 08 LDA #$00 ; CPU:$E3FA PRG:23FA A9 00 LDY #$02 ; CPU:$E3FC PRG:23FC A0 02 STA (CurrentObjectPtrLo),Y ; CPU:$E3FE PRG:23FE 91 08 LDY #$04 ; CPU:$E400 PRG:2400 A0 04 STA (CurrentObjectPtrLo),Y ; CPU:$E402 PRG:2402 91 08 RTS ; CPU:$E404 PRG:2404 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_E405 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_E405: AND #$0F ; CPU:$E405 PRG:2405 29 0F LDX #$04 ; CPU:$E407 PRG:2407 A2 04 CMP #$08 ; CPU:$E409 PRG:2409 C9 08 BCC ReadObjectRecordOnNoCarry_E40F ; CPU:$E40B PRG:240B 90 02 LDX #$0C ; CPU:$E40D PRG:240D A2 0C ReadObjectRecordOnNoCarry_E40F: STX $04 ; CPU:$E40F PRG:240F 86 04 LDA (CurrentObjectPtrLo),Y ; CPU:$E411 PRG:2411 B1 08 AND #$F0 ; CPU:$E413 PRG:2413 29 F0 ORA $04 ; CPU:$E415 PRG:2415 05 04 RTS ; CPU:$E417 PRG:2417 60 .byte $00, $04, $02, $04, $00, $04, $02, $04, $00, $04, $02, $04, $00, $04, $02, $04 ; CPU:$E418 PRG:2418 0B .byte $40, $40, $40, $C0, $80, $80, $80, $00, $C0, $80, $00, $00, $00, $40, $C0, $C0 ; CPU:$E428 PRG:2428 0B .byte $00, $03, $01, $02, $00, $03, $01, $02, $00, $02, $01, $03, $00, $02, $01, $03 ; CPU:$E438 PRG:2438 0B .byte $F8, $F8, $04, $10, $10, $10, $04, $F8, $10, $10, $04, $F8, $F8, $F8, $04, $10 ; CPU:$E448 PRG:2448 0B .byte $04, $FC, $F8, $FC, $04, $0C, $10, $0C, $04, $0C, $10, $0C, $04, $FC, $F8, $FC ; CPU:$E458 PRG:2458 0B ;------------------------------------------------------------ ; UpdateObjectBufferRoutine_E468 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBufferRoutine_E468: LDA #$00 ; CPU:$E468 PRG:2468 A9 00 STA $04 ; CPU:$E46A PRG:246A 85 04 STA $05 ; CPU:$E46C PRG:246C 85 05 LDX #$03 ; CPU:$E46E PRG:246E A2 03 ReadObjectRecordLoop_E470: LDY #$16 ; CPU:$E470 PRG:2470 A0 16 LDA $05 ; CPU:$E472 PRG:2472 A5 05 CLC ; CPU:$E474 PRG:2474 18 ADC (CurrentObjectPtrLo),Y ; CPU:$E475 PRG:2475 71 08 STA $05 ; CPU:$E477 PRG:2477 85 05 LDY #$15 ; CPU:$E479 PRG:2479 A0 15 LDA $04 ; CPU:$E47B PRG:247B A5 04 ADC (CurrentObjectPtrLo),Y ; CPU:$E47D PRG:247D 71 08 STA $04 ; CPU:$E47F PRG:247F 85 04 DEX ; CPU:$E481 PRG:2481 CA BNE ReadObjectRecordLoop_E470 ; CPU:$E482 PRG:2482 D0 EC LDA $06 ; CPU:$E484 PRG:2484 A5 06 CMP #$80 ; CPU:$E486 PRG:2486 C9 80 BNE ObjectPathOnNonZero_E491 ; CPU:$E488 PRG:2488 D0 07 SEC ; CPU:$E48A PRG:248A 38 LDA #$00 ; CPU:$E48B PRG:248B A9 00 SBC $04 ; CPU:$E48D PRG:248D E5 04 STA $04 ; CPU:$E48F PRG:248F 85 04 ObjectPathOnNonZero_E491: LDA $56 ; CPU:$E491 PRG:2491 A5 56 BNE ObjectPathOnNonZero_E49B ; CPU:$E493 PRG:2493 D0 06 LDX $0A ; CPU:$E495 PRG:2495 A6 0A LDA $75,X ; CPU:$E497 PRG:2497 B5 75 BEQ UpdateObjectRecordOnZero_E49F ; CPU:$E499 PRG:2499 F0 04 ObjectPathOnNonZero_E49B: LDA #$00 ; CPU:$E49B PRG:249B A9 00 STA $04 ; CPU:$E49D PRG:249D 85 04 UpdateObjectRecordOnZero_E49F: LDY #$1B ; CPU:$E49F PRG:249F A0 1B CLC ; CPU:$E4A1 PRG:24A1 18 LDA $04 ; CPU:$E4A2 PRG:24A2 A5 04 ADC (CurrentObjectPtrLo),Y ; CPU:$E4A4 PRG:24A4 71 08 STA (CurrentObjectPtrLo),Y ; CPU:$E4A6 PRG:24A6 91 08 JSR ProcessObjectStateRoutine_E045 ; CPU:$E4A8 PRG:24A8 20 45 E0 LDY #$19 ; CPU:$E4AB PRG:24AB A0 19 LDA (CurrentObjectPtrLo),Y ; CPU:$E4AD PRG:24AD B1 08 SEC ; CPU:$E4AF PRG:24AF 38 SBC $00 ; CPU:$E4B0 PRG:24B0 E5 00 LDY #$17 ; CPU:$E4B2 PRG:24B2 A0 17 CLC ; CPU:$E4B4 PRG:24B4 18 ADC (CurrentObjectPtrLo),Y ; CPU:$E4B5 PRG:24B5 71 08 LDY #$01 ; CPU:$E4B7 PRG:24B7 A0 01 STA (CurrentObjectPtrLo),Y ; CPU:$E4B9 PRG:24B9 91 08 LDY #$1B ; CPU:$E4BB PRG:24BB A0 1B SEC ; CPU:$E4BD PRG:24BD 38 LDA #$40 ; CPU:$E4BE PRG:24BE A9 40 SBC (CurrentObjectPtrLo),Y ; CPU:$E4C0 PRG:24C0 F1 08 JSR ProcessObjectStateRoutine_E045 ; CPU:$E4C2 PRG:24C2 20 45 E0 LDY #$1A ; CPU:$E4C5 PRG:24C5 A0 1A LDA (CurrentObjectPtrLo),Y ; CPU:$E4C7 PRG:24C7 B1 08 SEC ; CPU:$E4C9 PRG:24C9 38 SBC $00 ; CPU:$E4CA PRG:24CA E5 00 STA $00 ; CPU:$E4CC PRG:24CC 85 00 LDY #$18 ; CPU:$E4CE PRG:24CE A0 18 LDA (CurrentObjectPtrLo),Y ; CPU:$E4D0 PRG:24D0 B1 08 SEC ; CPU:$E4D2 PRG:24D2 38 SBC $00 ; CPU:$E4D3 PRG:24D3 E5 00 LDY #$03 ; CPU:$E4D5 PRG:24D5 A0 03 STA (CurrentObjectPtrLo),Y ; CPU:$E4D7 PRG:24D7 91 08 LDX #$07 ; CPU:$E4D9 PRG:24D9 A2 07 LDA $06 ; CPU:$E4DB PRG:24DB A5 06 CMP #$81 ; CPU:$E4DD PRG:24DD C9 81 BEQ ReadObjectRecordOnZero_E4E3 ; CPU:$E4DF PRG:24DF F0 02 LDX #$FF ; CPU:$E4E1 PRG:24E1 A2 FF ReadObjectRecordOnZero_E4E3: LDY #$1B ; CPU:$E4E3 PRG:24E3 A0 1B LDA #$10 ; CPU:$E4E5 PRG:24E5 A9 10 CLC ; CPU:$E4E7 PRG:24E7 18 ADC (CurrentObjectPtrLo),Y ; CPU:$E4E8 PRG:24E8 71 08 UpdateObjectRecordLoop_E4EA: SEC ; CPU:$E4EA PRG:24EA 38 SBC #$20 ; CPU:$E4EB PRG:24EB E9 20 INX ; CPU:$E4ED PRG:24ED E8 BCS UpdateObjectRecordLoop_E4EA ; CPU:$E4EE PRG:24EE B0 FA LDA $E418,X ; CPU:$E4F0 PRG:24F0 BD 18 E4 LDY #$05 ; CPU:$E4F3 PRG:24F3 A0 05 STA (CurrentObjectPtrLo),Y ; CPU:$E4F5 PRG:24F5 91 08 LDA $E428,X ; CPU:$E4F7 PRG:24F7 BD 28 E4 LDY #$08 ; CPU:$E4FA PRG:24FA A0 08 STA (CurrentObjectPtrLo),Y ; CPU:$E4FC PRG:24FC 91 08 LDY #$28 ; CPU:$E4FE PRG:24FE A0 28 STA (CurrentObjectPtrLo),Y ; CPU:$E500 PRG:2500 91 08 LDY #$38 ; CPU:$E502 PRG:2502 A0 38 STA (CurrentObjectPtrLo),Y ; CPU:$E504 PRG:2504 91 08 LDA $E438,X ; CPU:$E506 PRG:2506 BD 38 E4 LDY #$25 ; CPU:$E509 PRG:2509 A0 25 STA (CurrentObjectPtrLo),Y ; CPU:$E50B PRG:250B 91 08 LDA $E418,X ; CPU:$E50D PRG:250D BD 18 E4 LDY #$35 ; CPU:$E510 PRG:2510 A0 35 STA (CurrentObjectPtrLo),Y ; CPU:$E512 PRG:2512 91 08 LDA $E448,X ; CPU:$E514 PRG:2514 BD 48 E4 LDY #$01 ; CPU:$E517 PRG:2517 A0 01 CLC ; CPU:$E519 PRG:2519 18 ADC (CurrentObjectPtrLo),Y ; CPU:$E51A PRG:251A 71 08 LDY #$31 ; CPU:$E51C PRG:251C A0 31 STA (CurrentObjectPtrLo),Y ; CPU:$E51E PRG:251E 91 08 LDA $E458,X ; CPU:$E520 PRG:2520 BD 58 E4 LDY #$03 ; CPU:$E523 PRG:2523 A0 03 CLC ; CPU:$E525 PRG:2525 18 ADC (CurrentObjectPtrLo),Y ; CPU:$E526 PRG:2526 71 08 LDY #$33 ; CPU:$E528 PRG:2528 A0 33 STA (CurrentObjectPtrLo),Y ; CPU:$E52A PRG:252A 91 08 RTS ; CPU:$E52C PRG:252C 60 .byte $02, $01, $03, $00, $02, $03, $03, $01, $01, $11, $24 ; CPU:$E52D PRG:252D 0B ObjectPathLoop_E538: RTS ; CPU:$E538 PRG:2538 60 ;------------------------------------------------------------ ; ReadObjectRecordRoutine_E539 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecordRoutine_E539: LDX $0A ; CPU:$E539 PRG:2539 A6 0A LDA $46,X ; CPU:$E53B PRG:253B B5 46 AND #$0F ; CPU:$E53D PRG:253D 29 0F BNE ObjectPathLoop_E538 ; CPU:$E53F PRG:253F D0 F7 LDY #$1B ; CPU:$E541 PRG:2541 A0 1B LDA (CurrentObjectPtrLo),Y ; CPU:$E543 PRG:2543 B1 08 LDY #$FF ; CPU:$E545 PRG:2545 A0 FF ObjectPathLoop_E547: INY ; CPU:$E547 PRG:2547 C8 SEC ; CPU:$E548 PRG:2548 38 SBC #$40 ; CPU:$E549 PRG:2549 E9 40 BCS ObjectPathLoop_E547 ; CPU:$E54B PRG:254B B0 FA ADC #$40 ; CPU:$E54D PRG:254D 69 40 LDX $06 ; CPU:$E54F PRG:254F A6 06 CPX #$80 ; CPU:$E551 PRG:2551 E0 80 BEQ ObjectPathOnZero_E59C ; CPU:$E553 PRG:2553 F0 47 CMP #$1C ; CPU:$E555 PRG:2555 C9 1C BCS ObjectPathLoop_E538 ; CPU:$E557 PRG:2557 B0 DF INY ; CPU:$E559 PRG:2559 C8 UpdateObjectRecordLoop_E55A: LDA $E52D,Y ; CPU:$E55A PRG:255A B9 2D E5 LDY #$10 ; CPU:$E55D PRG:255D A0 10 STA (CurrentObjectPtrLo),Y ; CPU:$E55F PRG:255F 91 08 LDY #$1B ; CPU:$E561 PRG:2561 A0 1B STA (CurrentObjectPtrLo),Y ; CPU:$E563 PRG:2563 91 08 STA $06 ; CPU:$E565 PRG:2565 85 06 LDY #$15 ; CPU:$E567 PRG:2567 A0 15 TAX ; CPU:$E569 PRG:2569 AA AND #$01 ; CPU:$E56A PRG:256A 29 01 BEQ UpdateObjectRecordOnZero_E571 ; CPU:$E56C PRG:256C F0 03 JSR UpdateObjectRecordRoutine_E325 ; CPU:$E56E PRG:256E 20 25 E3 UpdateObjectRecordOnZero_E571: LDA (CurrentObjectPtrLo),Y ; CPU:$E571 PRG:2571 B1 08 STA $00 ; CPU:$E573 PRG:2573 85 00 INY ; CPU:$E575 PRG:2575 C8 LDA (CurrentObjectPtrLo),Y ; CPU:$E576 PRG:2576 B1 08 LDY $E16F,X ; CPU:$E578 PRG:2578 BC 6F E1 STA (CurrentObjectPtrLo),Y ; CPU:$E57B PRG:257B 91 08 LDA WorkPtr0Lo ; CPU:$E57D PRG:257D A5 00 DEY ; CPU:$E57F PRG:257F 88 STA (CurrentObjectPtrLo),Y ; CPU:$E580 PRG:2580 91 08 LDY $E532,X ; CPU:$E582 PRG:2582 BC 32 E5 LDA (CurrentObjectPtrLo),Y ; CPU:$E585 PRG:2585 B1 08 AND #$04 ; CPU:$E587 PRG:2587 29 04 PHP ; CPU:$E589 PRG:2589 08 LDA (CurrentObjectPtrLo),Y ; CPU:$E58A PRG:258A B1 08 PLP ; CPU:$E58C PRG:258C 28 BEQ UpdateObjectRecordOnZero_E592 ; CPU:$E58D PRG:258D F0 03 CLC ; CPU:$E58F PRG:258F 18 ADC #$04 ; CPU:$E590 PRG:2590 69 04 UpdateObjectRecordOnZero_E592: AND #$F8 ; CPU:$E592 PRG:2592 29 F8 STA (CurrentObjectPtrLo),Y ; CPU:$E594 PRG:2594 91 08 INY ; CPU:$E596 PRG:2596 C8 LDA #$00 ; CPU:$E597 PRG:2597 A9 00 STA (CurrentObjectPtrLo),Y ; CPU:$E599 PRG:2599 91 08 ObjectPathLoop_E59B: RTS ; CPU:$E59B PRG:259B 60 ObjectPathOnZero_E59C: CMP #$24 ; CPU:$E59C PRG:259C C9 24 BCC ObjectPathLoop_E59B ; CPU:$E59E PRG:259E 90 FB BCS UpdateObjectRecordLoop_E55A ; CPU:$E5A0 PRG:25A0 B0 B8 .byte $0F, $01, $04, $04, $04, $04, $0F, $01 ; CPU:$E5A2 PRG:25A2 0B ;------------------------------------------------------------ ; ReadObjectRecordRoutine_E5AA ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ReadObjectRecordRoutine_E5AA: PHA ; CPU:$E5AA PRG:25AA 48 LDA $06 ; CPU:$E5AB PRG:25AB A5 06 AND #$03 ; CPU:$E5AD PRG:25AD 29 03 TAX ; CPU:$E5AF PRG:25AF AA LDA $E5A2,X ; CPU:$E5B0 PRG:25B0 BD A2 E5 LDY #$01 ; CPU:$E5B3 PRG:25B3 A0 01 CLC ; CPU:$E5B5 PRG:25B5 18 ADC (CurrentObjectPtrLo),Y ; CPU:$E5B6 PRG:25B6 71 08 STA $00 ; CPU:$E5B8 PRG:25B8 85 00 LDA $E5A6,X ; CPU:$E5BA PRG:25BA BD A6 E5 LDY #$03 ; CPU:$E5BD PRG:25BD A0 03 CLC ; CPU:$E5BF PRG:25BF 18 ADC (CurrentObjectPtrLo),Y ; CPU:$E5C0 PRG:25C0 71 08 STA $01 ; CPU:$E5C2 PRG:25C2 85 01 JSR UpdateObjectBufferRoutine_E0DF ; CPU:$E5C4 PRG:25C4 20 DF E0 PLA ; CPU:$E5C7 PRG:25C7 68 JSR ProcessObjectStateRoutine_E0B2 ; CPU:$E5C8 PRG:25C8 20 B2 E0 RTS ; CPU:$E5CB PRG:25CB 60 .byte $34, $24, $24, $24, $24, $6E, $86, $86, $6F, $24, $24, $24, $24, $34, $24, $24 ; CPU:$E5CC PRG:25CC 0B .byte $24, $24, $70, $87, $88, $71, $24, $24, $24, $24, $34, $24, $24, $24, $24, $72 ; CPU:$E5DC PRG:25DC 0B .byte $89, $8A, $73, $24, $9F, $A0, $24, $34, $24, $24, $24, $24, $74, $8B, $8C, $75 ; CPU:$E5EC PRG:25EC 0B .byte $A1, $A2, $A3, $A4, $34, $24, $24, $24, $24, $76, $8D, $8E, $77, $24, $24, $24 ; CPU:$E5FC PRG:25FC 0B .byte $24, $34, $24, $A5, $A6, $24, $78, $8F, $90, $79, $24, $24, $24, $24, $34, $A7 ; CPU:$E60C PRG:260C 0B .byte $A8, $A9, $AA, $7A, $91, $92, $7B, $24, $24, $24, $24, $43, $24, $60, $24, $24 ; CPU:$E61C PRG:261C 0B .byte $7C, $24, $24, $7C, $24, $24, $61, $24, $43, $24, $62, $24, $24, $7D, $24, $24 ; CPU:$E62C PRG:262C 0B .byte $7E, $24, $24, $63, $24, $43, $24, $64, $24, $24, $81, $93, $24, $82, $94, $24 ; CPU:$E63C PRG:263C 0B .byte $65, $24, $43, $24, $66, $95, $24, $85, $96, $24, $85, $97, $24, $67, $98, $43 ; CPU:$E64C PRG:264C 0B .byte $24, $68, $24, $24, $7F, $24, $24, $80, $24, $24, $69, $24, $43, $24, $6A, $24 ; CPU:$E65C PRG:265C 0B .byte $99, $83, $24, $9A, $84, $24, $24, $6B, $24, $43, $9B, $6C, $24, $9C, $85, $24 ; CPU:$E66C PRG:266C 0B .byte $9D, $85, $24, $9E, $6D, $24, $00, $0D, $00, $34, $41, $34, $00, $0D, $1A, $27 ; CPU:$E67C PRG:267C 0B .byte $1A, $0D, $00, $34, $00, $0D, $1A, $0D, $00, $34, $41, $4E, $41, $34 ; CPU:$E68C PRG:268C 0B ;------------------------------------------------------------ ; ProcessObjectStateRoutine_E69A ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_E69A: LDX #$FB ; CPU:$E69A PRG:269A A2 FB ReadObjectRecordLoop_E69C: INX ; CPU:$E69C PRG:269C E8 INX ; CPU:$E69D PRG:269D E8 INX ; CPU:$E69E PRG:269E E8 INX ; CPU:$E69F PRG:269F E8 INX ; CPU:$E6A0 PRG:26A0 E8 CPX #$14 ; CPU:$E6A1 PRG:26A1 E0 14 BEQ ObjectPathLoop_E6F2 ; CPU:$E6A3 PRG:26A3 F0 4D LDA $0370,X ; CPU:$E6A5 PRG:26A5 BD 70 03 BNE ReadObjectRecordLoop_E69C ; CPU:$E6A8 PRG:26A8 D0 F2 LDA #$0C ; CPU:$E6AA PRG:26AA A9 0C STA $0370,X ; CPU:$E6AC PRG:26AC 9D 70 03 LDY #$16 ; CPU:$E6AF PRG:26AF A0 16 LDA (CurrentObjectPtrLo),Y ; CPU:$E6B1 PRG:26B1 B1 08 STA $00 ; CPU:$E6B3 PRG:26B3 85 00 DEY ; CPU:$E6B5 PRG:26B5 88 LDA (CurrentObjectPtrLo),Y ; CPU:$E6B6 PRG:26B6 B1 08 LSR A ; CPU:$E6B8 PRG:26B8 4A ROR $00 ; CPU:$E6B9 PRG:26B9 66 00 LSR A ; CPU:$E6BB PRG:26BB 4A ROR $00 ; CPU:$E6BC PRG:26BC 66 00 LSR A ; CPU:$E6BE PRG:26BE 4A ROR $00 ; CPU:$E6BF PRG:26BF 66 00 BNE ObjectPathOnNonZero_E6C5 ; CPU:$E6C1 PRG:26C1 D0 02 INC $00 ; CPU:$E6C3 PRG:26C3 E6 00 ObjectPathOnNonZero_E6C5: SEC ; CPU:$E6C5 PRG:26C5 38 LDA #$00 ; CPU:$E6C6 PRG:26C6 A9 00 SBC $00 ; CPU:$E6C8 PRG:26C8 E5 00 LDY #$00 ; CPU:$E6CA PRG:26CA A0 00 ObjectPathLoop_E6CC: INY ; CPU:$E6CC PRG:26CC C8 SEC ; CPU:$E6CD PRG:26CD 38 SBC $00 ; CPU:$E6CE PRG:26CE E5 00 BCS ObjectPathLoop_E6CC ; CPU:$E6D0 PRG:26D0 B0 FA TYA ; CPU:$E6D2 PRG:26D2 98 BNE UpdateObjectBufferOnNonZero_E6D7 ; CPU:$E6D3 PRG:26D3 D0 02 LDA #$FF ; CPU:$E6D5 PRG:26D5 A9 FF UpdateObjectBufferOnNonZero_E6D7: INX ; CPU:$E6D7 PRG:26D7 E8 STA $0370,X ; CPU:$E6D8 PRG:26D8 9D 70 03 INX ; CPU:$E6DB PRG:26DB E8 LDA $06 ; CPU:$E6DC PRG:26DC A5 06 STA $0370,X ; CPU:$E6DE PRG:26DE 9D 70 03 INX ; CPU:$E6E1 PRG:26E1 E8 SEC ; CPU:$E6E2 PRG:26E2 38 LDA $03 ; CPU:$E6E3 PRG:26E3 A5 03 SBC #$21 ; CPU:$E6E5 PRG:26E5 E9 21 STA $0370,X ; CPU:$E6E7 PRG:26E7 9D 70 03 INX ; CPU:$E6EA PRG:26EA E8 LDA WorkPtr1Lo ; CPU:$E6EB PRG:26EB A5 02 SBC #$00 ; CPU:$E6ED PRG:26ED E9 00 STA $0370,X ; CPU:$E6EF PRG:26EF 9D 70 03 ObjectPathLoop_E6F2: RTS ; CPU:$E6F2 PRG:26F2 60 ;------------------------------------------------------------ ; ProcessObjectStateRoutine_E6F3 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessObjectStateRoutine_E6F3: LDA #$FF ; CPU:$E6F3 PRG:26F3 A9 FF STA $07 ; CPU:$E6F5 PRG:26F5 85 07 LDX #$FB ; CPU:$E6F7 PRG:26F7 A2 FB ObjectPathLoop_E6F9: INX ; CPU:$E6F9 PRG:26F9 E8 INX ; CPU:$E6FA PRG:26FA E8 INX ; CPU:$E6FB PRG:26FB E8 INX ; CPU:$E6FC PRG:26FC E8 ProcessObjectStateDispatch_E6FD: INX ; CPU:$E6FD PRG:26FD E8 INC $07 ; CPU:$E6FE PRG:26FE E6 07 ;------------------------------------------------------------ ; UpdateObjectBuffer_E700 ; ; Global: ; First-pass object-engine entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Object pointers, entity state, or gameplay state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateObjectBuffer_E700: CPX #$14 ; CPU:$E700 PRG:2700 E0 14 BEQ ObjectPathLoop_E6F2 ; CPU:$E702 PRG:2702 F0 EE LDY $07 ; CPU:$E704 PRG:2704 A4 07 LDA a:$0068,Y ; CPU:$E706 PRG:2706 B9 68 00 BNE ObjectPathLoop_E6F9 ; CPU:$E709 PRG:2709 D0 EE LDA $0370,X ; CPU:$E70B PRG:270B BD 70 03 BEQ ObjectPathLoop_E6F9 ; CPU:$E70E PRG:270E F0 E9 DEC $0370,X ; CPU:$E710 PRG:2710 DE 70 03 LDA $0370,X ; CPU:$E713 PRG:2713 BD 70 03 STA $00 ; CPU:$E716 PRG:2716 85 00 INX ; CPU:$E718 PRG:2718 E8 LDA $0370,X ; CPU:$E719 PRG:2719 BD 70 03 STA a:$0068,Y ; CPU:$E71C PRG:271C 99 68 00 INX ; CPU:$E71F PRG:271F E8 LDA $0370,X ; CPU:$E720 PRG:2720 BD 70 03 CMP #$02 ; CPU:$E723 PRG:2723 C9 02 PHP ; CPU:$E725 PRG:2725 08 AND #$01 ; CPU:$E726 PRG:2726 29 01 BEQ ObjectPathOnZero_E731 ; CPU:$E728 PRG:2728 F0 07 LDA #$0C ; CPU:$E72A PRG:272A A9 0C CLC ; CPU:$E72C PRG:272C 18 ADC $00 ; CPU:$E72D PRG:272D 65 00 STA $00 ; CPU:$E72F PRG:272F 85 00 ObjectPathOnZero_E731: LDY $00 ; CPU:$E731 PRG:2731 A4 00 LDA $E682,Y ; CPU:$E733 PRG:2733 B9 82 E6 PLP ; CPU:$E736 PRG:2736 28 BCC UpdateObjectBufferOnNoCarry_E73C ; CPU:$E737 PRG:2737 90 03 CLC ; CPU:$E739 PRG:2739 18 ADC #$5B ; CPU:$E73A PRG:273A 69 5B UpdateObjectBufferOnNoCarry_E73C: CLC ; CPU:$E73C PRG:273C 18 ADC #$CC ; CPU:$E73D PRG:273D 69 CC STA $02 ; CPU:$E73F PRG:273F 85 02 LDA #$00 ; CPU:$E741 PRG:2741 A9 00 ADC #$E5 ; CPU:$E743 PRG:2743 69 E5 STA $03 ; CPU:$E745 PRG:2745 85 03 INX ; CPU:$E747 PRG:2747 E8 LDA $0370,X ; CPU:$E748 PRG:2748 BD 70 03 STA $00 ; CPU:$E74B PRG:274B 85 00 INX ; CPU:$E74D PRG:274D E8 LDA $0370,X ; CPU:$E74E PRG:274E BD 70 03 STA $01 ; CPU:$E751 PRG:2751 85 01 STX $08 ; CPU:$E753 PRG:2753 86 08 JSR UpdateCommandBufferRoutine_F3A1 ; CPU:$E755 PRG:2755 20 A1 F3 LDX $08 ; CPU:$E758 PRG:2758 A6 08 JMP ProcessObjectStateDispatch_E6FD ; CPU:$E75A PRG:275A 4C FD E6 .byte $80, $C8, $80, $CB, $80, $D1, $80, $D4, $81, $25, $81, $2E, $81, $37, $81, $E5 ; CPU:$E75D PRG:275D 0B .byte $81, $F7, $82, $48, $82, $54, $82, $AB, $82, $B1, $83, $0E, $C0, $C8, $C0, $CE ; CPU:$E76D PRG:276D 0B .byte $C0, $D1, $C0 ; CPU:$E77D PRG:277D 0B ;------------------------------------------------------------ ; Resource and level data with embedded PPU update code ; CPU $F20B-$F21A ; PRG $2780-$321A ; ; Pass 1 recursively traced from verified entry roots in this region. ; Direct branches, jumps, and subroutine calls are decoded. ; Bytes not reached by that trace remain explicit .byte data. ;------------------------------------------------------------ .byte $D7, $C1, $25, $C1, $3A, $C1, $85, $C1, $9A, $C1, $E8, $C1, $F7, $C2, $4B, $C2 ; CPU:$E780 PRG:2780 0B .byte $54, $C2, $AE, $C2, $B1, $F1, $8B, $F1, $94, $FF, $80, $CB, $80, $D1, $81, $8B ; CPU:$E790 PRG:2790 0B .byte $81, $91, $82, $45, $82, $57, $82, $A5, $82, $A8, $82, $AB, $82, $AE, $82, $B1 ; CPU:$E7A0 PRG:27A0 0B .byte $82, $B4, $82, $B7, $82, $57, $83, $08, $83, $0B, $83, $0E, $83, $11, $83, $14 ; CPU:$E7B0 PRG:27B0 0B .byte $C0, $CB, $C0, $CE, $C0, $D1, $C0, $D4, $C1, $2B, $C1, $2E, $C1, $31, $C1, $34 ; CPU:$E7C0 PRG:27C0 0B .byte $C2, $45, $C2, $48, $C2, $57, $C2, $5A, $C2, $A8, $C2, $B7, $B1, $E5, $B1, $F7 ; CPU:$E7D0 PRG:27D0 0B .byte $FF, $80, $CE, $81, $28, $81, $2B, $81, $2E, $81, $31, $81, $34, $81, $85, $81 ; CPU:$E7E0 PRG:27E0 0B .byte $88, $81, $94, $81, $97, $81, $E5, $81, $F7, $82, $AE, $83, $0B, $83, $11, $C0 ; CPU:$E7F0 PRG:27F0 0B .byte $CE, $C0, $D1, $C1, $28, $C1, $37, $C1, $85, $C1, $88, $C1, $8B, $C1, $94, $C1 ; CPU:$E800 PRG:2800 0B .byte $97, $C1, $9A, $C1, $EB, $C1, $F4, $C2, $4B, $C2, $54, $C2, $AB, $C2, $AE, $C2 ; CPU:$E810 PRG:2810 0B .byte $B1, $C2, $B4, $B1, $8E, $FF, $80, $CB, $80, $CE, $80, $D1, $81, $28, $81, $34 ; CPU:$E820 PRG:2820 0B .byte $81, $85, $81, $97, $81, $E5, $81, $E8, $81, $EB, $81, $EE, $81, $F1, $81, $F4 ; CPU:$E830 PRG:2830 0B .byte $81, $F7, $83, $08, $83, $0B, $83, $0E, $83, $11, $83, $14, $C0, $CB, $C0, $D4 ; CPU:$E840 PRG:2840 0B .byte $C1, $28, $C1, $37, $C1, $85, $C1, $9A, $C1, $E8, $C1, $F7, $C2, $48, $C2, $57 ; CPU:$E850 PRG:2850 0B .byte $C2, $A8, $C2, $B7, $F2, $4B, $F2, $54, $FF, $80, $CE, $80, $D1, $81, $31, $81 ; CPU:$E860 PRG:2860 0B .byte $85, $81, $88, $81, $8B, $81, $91, $81, $94, $81, $97, $81, $E5, $81, $F7, $82 ; CPU:$E870 PRG:2870 0B .byte $4B, $82, $51, $82, $AB, $82, $AE, $82, $B1, $83, $0B, $83, $11, $C0, $CE, $C0 ; CPU:$E880 PRG:2880 0B .byte $D4, $C1, $2E, $C1, $31, $C1, $85, $C1, $9A, $C2, $AB, $C2, $AE, $C2, $B1, $C2 ; CPU:$E890 PRG:2890 0B .byte $B4, $B1, $EB, $B1, $F1, $FF, $80, $C8, $80, $D4, $81, $28, $81, $2B, $81, $2E ; CPU:$E8A0 PRG:28A0 0B .byte $81, $31, $81, $34, $81, $88, $81, $94, $82, $4E, $82, $AB, $82, $AE, $82, $B1 ; CPU:$E8B0 PRG:28B0 0B .byte $83, $0E, $C0, $C8, $C0, $CB, $C0, $D4, $C0, $D7, $C1, $2B, $C1, $34, $C1, $88 ; CPU:$E8C0 PRG:28C0 0B .byte $C1, $97, $C2, $4B, $C2, $54, $C2, $AE, $C2, $B1, $F1, $8E, $F1, $91, $FF, $81 ; CPU:$E8D0 PRG:28D0 0B .byte $28, $81, $34, $81, $85, $81, $8B, $81, $91, $81, $97, $81, $E5, $81, $EB, $81 ; CPU:$E8E0 PRG:28E0 0B .byte $F1, $81, $F7, $82, $4E, $83, $0E, $C1, $28, $C1, $2B, $C1, $34, $C1, $37, $C1 ; CPU:$E8F0 PRG:28F0 0B .byte $85, $C1, $8E, $C1, $91, $C1, $9A, $C1, $EB, $C1, $F4, $C2, $AE, $C2, $B1, $B1 ; CPU:$E900 PRG:2900 0B .byte $2E, $F2, $AB, $F2, $B4, $FF, $80, $CE, $81, $2B, $81, $31, $81, $88, $81, $94 ; CPU:$E910 PRG:2910 0B .byte $81, $EE, $82, $4B, $82, $4E, $82, $51, $82, $AB, $82, $B1, $83, $0B, $83, $0E ; CPU:$E920 PRG:2920 0B .byte $83, $11, $C0, $CE, $C0, $D1, $C1, $2B, $C1, $34, $C1, $88, $C1, $97, $C1, $EE ; CPU:$E930 PRG:2930 0B .byte $C1, $F1, $C2, $AB, $C2, $B4, $B1, $8E, $FF, $81, $88, $81, $8B, $81, $91, $81 ; CPU:$E940 PRG:2940 0B .byte $94, $81, $E5, $81, $EE, $81, $F7, $82, $A8, $82, $AB, $82, $B1, $82, $B4, $C0 ; CPU:$E950 PRG:2950 0B .byte $C5, $C0, $DA, $C1, $25, $C1, $3A, $C1, $85, $C1, $88, $C1, $8E, $C1, $91, $C1 ; CPU:$E960 PRG:2960 0B .byte $97, $C1, $9A, $C1, $E8, $C1, $EE, $C1, $F1, $C1, $F7, $C2, $48, $C2, $4E, $C2 ; CPU:$E970 PRG:2970 0B .byte $51, $C2, $57, $B1, $28, $B1, $34, $FF, $81, $25, $81, $37, $81, $88, $81, $94 ; CPU:$E980 PRG:2980 0B .byte $81, $EB, $81, $EE, $81, $F1, $82, $4B, $82, $51, $82, $A5, $82, $A8, $82, $AE ; CPU:$E990 PRG:2990 0B .byte $82, $B4, $82, $B7, $C1, $25, $C1, $28, $C1, $37, $C1, $3A, $C1, $85, $C1, $8B ; CPU:$E9A0 PRG:29A0 0B .byte $C1, $94, $C1, $9A, $C1, $E5, $C1, $EE, $C1, $F1, $C1, $FA, $C2, $45, $C2, $4B ; CPU:$E9B0 PRG:29B0 0B .byte $C2, $4E, $C2, $51, $C2, $54, $C2, $5A, $F1, $2E, $F1, $31, $FF, $80, $C5, $80 ; CPU:$E9C0 PRG:29C0 0B .byte $D7, $81, $28, $81, $2B, $81, $2E, $81, $31, $81, $34, $81, $85, $81, $97, $82 ; CPU:$E9D0 PRG:29D0 0B .byte $48, $82, $4E, $82, $54, $82, $AB, $82, $AE, $82, $B1, $C0, $C5, $C0, $C8, $C0 ; CPU:$E9E0 PRG:29E0 0B .byte $D7, $C0, $DA, $C1, $25, $C1, $3A, $C1, $88, $C1, $97, $C1, $E8, $C1, $F7, $C2 ; CPU:$E9F0 PRG:29F0 0B .byte $4B, $C2, $4E, $C2, $51, $C2, $54, $B2, $A5, $B2, $B7, $B1, $8B, $B1, $91, $FF ; CPU:$EA00 PRG:2A00 0B .byte $81, $8B, $81, $8E, $81, $97, $81, $E5, $81, $E8, $81, $EB, $81, $EE, $81, $F1 ; CPU:$EA10 PRG:2A10 0B .byte $81, $F4, $81, $F7, $82, $54, $82, $57, $82, $A5, $82, $A8, $82, $AB, $82, $AE ; CPU:$EA20 PRG:2A20 0B .byte $82, $B1, $82, $B7, $C1, $2E, $C1, $8B, $C1, $91, $C1, $97, $C1, $9A, $C1, $E5 ; CPU:$EA30 PRG:2A30 0B .byte $C1, $F7, $C2, $45, $C2, $54, $C2, $57, $C2, $5A, $F0, $C8, $F0, $D7, $FF, $80 ; CPU:$EA40 PRG:2A40 0B .byte $C8, $80, $D4, $81, $28, $81, $34, $81, $8E, $81, $E5, $81, $EE, $81, $F7, $82 ; CPU:$EA50 PRG:2A50 0B .byte $45, $82, $4E, $82, $57, $82, $A8, $82, $B4, $83, $08, $83, $14, $C0, $C8, $C0 ; CPU:$EA60 PRG:2A60 0B .byte $CB, $C0, $D4, $C0, $D7, $C1, $8E, $C1, $91, $C1, $E5, $C1, $E8, $C1, $EE, $C1 ; CPU:$EA70 PRG:2A70 0B .byte $F1, $C1, $F7, $C1, $FA, $C2, $A8, $C2, $AB, $C2, $B4, $C2, $B7, $B1, $88, $B1 ; CPU:$EA80 PRG:2A80 0B .byte $94, $F1, $EB, $F1, $F4, $FF, $80, $C5, $80, $C8, $80, $D4, $80, $D7, $81, $8B ; CPU:$EA90 PRG:2A90 0B .byte $81, $8E, $81, $91, $82, $4B, $82, $4E, $82, $51, $83, $05, $83, $08, $83, $14 ; CPU:$EAA0 PRG:2AA0 0B .byte $83, $17, $C0, $C5, $C0, $CB, $C0, $D4, $C0, $DA, $C1, $25, $C1, $2B, $C1, $34 ; CPU:$EAB0 PRG:2AB0 0B .byte $C1, $3A, $C1, $85, $C1, $9A, $C1, $E5, $C1, $FA, $C2, $45, $C2, $4B, $C2, $54 ; CPU:$EAC0 PRG:2AC0 0B .byte $C2, $5A, $C2, $A5, $C2, $AB, $C2, $B4, $C2, $BA, $B1, $EB, $B1, $F1, $F1, $88 ; CPU:$EAD0 PRG:2AD0 0B .byte $F1, $97, $F2, $48, $F2, $57, $FF, $81, $25, $81, $28, $81, $34, $81, $37, $81 ; CPU:$EAE0 PRG:2AE0 0B .byte $85, $81, $88, $81, $8B, $81, $8E, $81, $91, $81, $94, $81, $97, $82, $45, $82 ; CPU:$EAF0 PRG:2AF0 0B .byte $48, $82, $4B, $82, $4E, $82, $51, $82, $54, $82, $57, $82, $A5, $82, $A8, $82 ; CPU:$EB00 PRG:2B00 0B .byte $B4, $82, $B7, $C1, $25, $C1, $2B, $C1, $34, $C1, $3A, $C1, $8B, $C1, $94, $C1 ; CPU:$EB10 PRG:2B10 0B .byte $EB, $C1, $F4, $C2, $45, $C2, $4B, $C2, $54, $C2, $5A, $B1, $E5, $B1, $EE, $B1 ; CPU:$EB20 PRG:2B20 0B .byte $F7, $FF, $80, $C5, $80, $D7, $81, $28, $81, $34, $81, $85, $81, $88, $81, $94 ; CPU:$EB30 PRG:2B30 0B .byte $81, $97, $82, $45, $82, $48, $82, $54, $82, $57, $82, $A5, $82, $B7, $83, $08 ; CPU:$EB40 PRG:2B40 0B .byte $83, $14, $C0, $C5, $C0, $C8, $C0, $D7, $C0, $DA, $C1, $25, $C1, $2B, $C1, $34 ; CPU:$EB50 PRG:2B50 0B .byte $C1, $3A, $C2, $45, $C2, $4B, $C2, $54, $C2, $5A, $C2, $A8, $C2, $AB, $C2, $B4 ; CPU:$EB60 PRG:2B60 0B .byte $C2, $B7, $B1, $E5, $B1, $EB, $B1, $F1, $B1, $F7, $FF, $80, $C5, $80, $D7, $81 ; CPU:$EB70 PRG:2B70 0B .byte $85, $81, $2E, $81, $97, $82, $45, $82, $AE, $82, $57, $83, $05, $83, $17, $C0 ; CPU:$EB80 PRG:2B80 0B .byte $C8, $C0, $D7, $C1, $8E, $C1, $91, $C1, $EE, $C1, $F1, $C2, $A8, $C2, $B7, $B1 ; CPU:$EB90 PRG:2B90 0B .byte $E8, $B1, $F4, $F1, $2B, $F1, $34, $F2, $4B, $F2, $54, $F1, $22, $F2, $5D, $FF ; CPU:$EBA0 PRG:2BA0 0B .byte $81, $25, $81, $2E, $81, $37, $81, $82, $81, $88, $81, $8E, $81, $94, $81, $9A ; CPU:$EBB0 PRG:2BB0 0B .byte $82, $42, $82, $48, $82, $4E, $82, $54, $82, $5A, $82, $A5, $82, $AE, $82, $B7 ; CPU:$EBC0 PRG:2BC0 0B .byte $C0, $C8, $C0, $D7, $C2, $A8, $C2, $B7, $B1, $E8, $B1, $EE, $B1, $F4, $F0, $CB ; CPU:$EBD0 PRG:2BD0 0B .byte $F0, $D4, $F2, $AB, $F2, $B4, $FF, $81, $2B, $81, $2E, $81, $31, $81, $85, $81 ; CPU:$EBE0 PRG:2BE0 0B .byte $97, $81, $EE, $82, $45, $82, $57, $82, $AB, $82, $AE, $82, $B1, $C0, $CB, $C0 ; CPU:$EBF0 PRG:2BF0 0B .byte $D4, $C1, $88, $C1, $97, $C1, $E8, $C1, $F7, $C2, $AB, $C2, $B4, $B1, $8E, $B2 ; CPU:$EC00 PRG:2C00 0B .byte $4E, $F0, $C8, $F0, $D7, $F2, $A8, $F2, $B7, $F1, $3D, $F2, $42, $FF, $80, $C5 ; CPU:$EC10 PRG:2C10 0B .byte $80, $C8, $80, $D4, $80, $D7, $81, $2B, $81, $31, $82, $AB, $82, $B1, $83, $05 ; CPU:$EC20 PRG:2C20 0B .byte $83, $08, $83, $14, $83, $17, $C1, $22, $C1, $3D, $C1, $2B, $C1, $34, $C2, $4B ; CPU:$EC30 PRG:2C30 0B .byte $C2, $54, $C2, $42, $C2, $5D, $B1, $8E, $B2, $4E, $B1, $E8, $B1, $F4, $F1, $28 ; CPU:$EC40 PRG:2C40 0B .byte $F1, $37, $F2, $48, $F2, $57, $FF, $3F, $00, $20, $0F, $30, $17, $25, $0F, $30 ; CPU:$EC50 PRG:2C50 0B .byte $17, $17, $0F, $30, $25, $05, $0F, $30, $21, $01, $0F, $30, $27, $16, $0F, $30 ; CPU:$EC60 PRG:2C60 0B .byte $27, $1A, $0F, $30, $1C, $01, $0F, $30, $27, $08, $60, $20, $50, $04, $2A, $2B ; CPU:$EC70 PRG:2C70 0B .byte $2C, $2D, $20, $49, $04, $26, $27, $28, $29, $20, $C2, $D3, $4E, $20, $C5, $D3 ; CPU:$EC80 PRG:2C80 0B .byte $4E, $20, $C8, $D3, $4E, $20, $CB, $D3, $4E, $20, $CE, $D3, $4E, $20, $D1, $D3 ; CPU:$EC90 PRG:2C90 0B .byte $4E, $20, $D4, $D3, $4E, $20, $D7, $D3, $4E, $20, $DA, $D3, $4E, $20, $DD, $D3 ; CPU:$ECA0 PRG:2CA0 0B .byte $4E, $20, $E2, $5C, $24, $21, $02, $5C, $24, $21, $42, $5C, $24, $21, $62, $5C ; CPU:$ECB0 PRG:2CB0 0B .byte $24, $21, $A2, $5C, $24, $21, $C2, $5C, $24, $22, $02, $5C, $24, $22, $22, $5C ; CPU:$ECC0 PRG:2CC0 0B .byte $24, $22, $62, $5C, $24, $22, $82, $5C, $24, $22, $C2, $5C, $24, $22, $E2, $5C ; CPU:$ECD0 PRG:2CD0 0B .byte $24, $60, $21, $02, $CF, $32, $21, $1D, $CF, $32, $20, $67, $52, $39, $23, $67 ; CPU:$ECE0 PRG:2CE0 0B .byte $52, $39, $60, $04, $08, $22, $0F, $38, $18, $38, $D8, $4C, $57, $EC, $4C, $7B ; CPU:$ECF0 PRG:2CF0 0B .byte $EC, $4C, $E2, $EC, $00, $00, $65, $10, $79, $23, $45, $33, $59, $00, $C2, $10 ; CPU:$ED00 PRG:2D00 0B .byte $DC, $22, $E2, $32, $FC, $43, $1A, $53, $04, $60, $BA, $70, $A4, $FF, $06, $0A ; CPU:$ED10 PRG:2D10 0B .byte $22, $C6, $22, $D8, $20, $60, $20, $90, $4C, $57, $EC, $3F, $08, $04, $0F, $30 ; CPU:$ED20 PRG:2D20 0B .byte $2A, $0A, $4C, $7B, $EC, $4C, $E2, $EC, $00, $00, $65, $10, $79, $23, $45, $33 ; CPU:$ED30 PRG:2D30 0B .byte $59, $00, $C2, $10, $DC, $22, $E2, $32, $FC, $43, $1A, $53, $04, $60, $BA, $70 ; CPU:$ED40 PRG:2D40 0B .byte $A4, $C1, $E8, $C2, $4E, $C2, $51, $C1, $F7, $82, $48, $82, $54, $FF, $06, $0A ; CPU:$ED50 PRG:2D50 0B .byte $22, $0C, $22, $12, $38, $78, $B0, $78, $4C, $57, $EC, $3F, $08, $04, $0F, $30 ; CPU:$ED60 PRG:2D60 0B .byte $21, $01, $4C, $7B, $EC, $20, $64, $46, $39, $20, $CD, $46, $39, $20, $76, $46 ; CPU:$ED70 PRG:2D70 0B .byte $39, $23, $64, $46, $39, $23, $0D, $46, $39, $23, $76, $46, $39, $20, $A2, $D5 ; CPU:$ED80 PRG:2D80 0B .byte $32, $20, $BD, $D5, $32, $00, $00, $62, $10, $7C, $23, $42, $33, $5C, $00, $74 ; CPU:$ED90 PRG:2D90 0B .byte $10, $6A, $23, $54, $33, $4A, $43, $0B, $53, $13, $60, $AB, $70, $B3, $FF, $0A ; CPU:$EDA0 PRG:2DA0 0B .byte $0E, $21, $46, $21, $58, $22, $CC, $22, $D2, $20, $60, $20, $90, $4C, $57, $EC ; CPU:$EDB0 PRG:2DB0 0B .byte $3F, $00, $0C, $0F, $30, $17, $2A, $0F, $30, $17, $17, $0F, $30, $23, $03, $4C ; CPU:$EDC0 PRG:2DC0 0B .byte $7B, $EC, $4C, $E2, $EC, $20, $60, $60, $39, $20, $6F, $42, $24, $23, $60, $60 ; CPU:$EDD0 PRG:2DD0 0B .byte $39, $23, $6F, $42, $24, $20, $C0, $D3, $39, $20, $DF, $D3, $39, $20, $AE, $C3 ; CPU:$EDE0 PRG:2DE0 0B .byte $32, $20, $B1, $C3, $32, $22, $EE, $C3, $32, $22, $F1, $C3, $32, $20, $E0, $D1 ; CPU:$EDF0 PRG:2DF0 0B .byte $FF, $21, $01, $CF, $FF, $21, $1E, $CF, $FF, $20, $FF, $D1, $FF, $00, $00, $71 ; CPU:$EE00 PRG:2E00 0B .byte $10, $6D, $23, $51, $33, $4D, $42, $AE, $52, $B0, $61, $0E, $71, $10, $40, $DD ; CPU:$EE10 PRG:2E10 0B .byte $50, $C1, $62, $FD, $72, $E1, $FF, $0A, $0E, $22, $06, $22, $0C, $22, $12, $22 ; CPU:$EE20 PRG:2E20 0B .byte $18, $20, $18, $20, $D8, $4C, $57, $EC, $3F, $08, $04, $0F, $30, $27, $07, $4C ; CPU:$EE30 PRG:2E30 0B .byte $7B, $EC, $20, $64, $49, $39, $20, $73, $49, $39, $23, $64, $49, $39, $23, $73 ; CPU:$EE40 PRG:2E40 0B .byte $49, $39, $20, $C0, $01, $39, $20, $DF, $01, $39, $23, $00, $01, $39, $23, $1F ; CPU:$EE50 PRG:2E50 0B .byte $01, $39, $00, $00, $62, $10, $7C, $23, $42, $33, $5C, $00, $71, $10, $6D, $23 ; CPU:$EE60 PRG:2E60 0B .byte $51, $33, $4D, $43, $1D, $53, $01, $60, $BD, $70, $A1, $43, $0E, $53, $10, $60 ; CPU:$EE70 PRG:2E70 0B .byte $AE, $70, $B0, $C1, $25, $C1, $3A, $C2, $45, $C2, $5A, $91, $E2, $91, $FA, $FF ; CPU:$EE80 PRG:2E80 0B .byte $02, $06, $38, $60, $38, $90, $4C, $57, $EC, $3F, $04, $04, $0F, $30, $11, $11 ; CPU:$EE90 PRG:2E90 0B .byte $3F, $1C, $04, $0F, $30, $21, $01, $4C, $89, $EC, $20, $63, $5A, $BF, $23, $63 ; CPU:$EEA0 PRG:2EA0 0B .byte $5A, $BF, $20, $82, $D7, $BD, $20, $9D, $D7, $BD, $21, $8C, $48, $BF, $22, $4C ; CPU:$EEB0 PRG:2EB0 0B .byte $48, $BF, $21, $AB, $C5, $BD, $21, $B4, $C5, $BD, $21, $AC, $48, $FF, $21, $CC ; CPU:$EEC0 PRG:2EC0 0B .byte $08, $FF, $0B, $18, $17, $1E, $1C, $AD, $FF, $21, $EC, $48, $FF, $22, $0C, $08 ; CPU:$EED0 PRG:2ED0 0B .byte $2A, $2B, $2C, $2D, $FF, $FF, $FF, $FF, $22, $2C, $48, $FF, $20, $62, $01, $B9 ; CPU:$EEE0 PRG:2EE0 0B .byte $20, $7D, $01, $C2, $23, $62, $01, $BA, $23, $7D, $01, $C3, $21, $8B, $01, $BC ; CPU:$EEF0 PRG:2EF0 0B .byte $21, $94, $01, $C0, $22, $4B, $01, $BE, $22, $54, $01, $C1, $00, $80, $C5, $80 ; CPU:$EF00 PRG:2F00 0B .byte $C8, $80, $CB, $80, $CE, $80, $D1, $80, $D4, $80, $D7, $81, $25, $81, $28, $81 ; CPU:$EF10 PRG:2F10 0B .byte $2B, $81, $2E, $81, $31, $81, $34, $81, $37, $81, $85, $81, $97, $81, $E5, $81 ; CPU:$EF20 PRG:2F20 0B .byte $F7, $82, $45, $82, $57, $82, $A5, $82, $A8, $82, $AB, $82, $AE, $82, $B1, $82 ; CPU:$EF30 PRG:2F30 0B .byte $B4, $82, $B7, $83, $05, $83, $08, $83, $0B, $83, $0E, $83, $11, $83, $14, $83 ; CPU:$EF40 PRG:2F40 0B .byte $17, $C0, $C5, $C0, $C8, $C0, $CB, $C0, $CE, $C0, $D1, $C0, $D4, $C0, $D7, $C0 ; CPU:$EF50 PRG:2F50 0B .byte $DA, $C1, $25, $C1, $28, $C1, $37, $C1, $3A, $C1, $85, $C1, $88, $C1, $97, $C1 ; CPU:$EF60 PRG:2F60 0B .byte $9A, $C1, $E5, $C1, $E8, $C1, $F7, $C1, $FA, $C2, $45, $C2, $48, $C2, $57, $C2 ; CPU:$EF70 PRG:2F70 0B .byte $5A, $C2, $A5, $C2, $A8, $C2, $AB, $C2, $AE, $C2, $B1, $C2, $B4, $C2, $B7, $C2 ; CPU:$EF80 PRG:2F80 0B .byte $BA, $FF, $02, $4C, $57, $EC, $3F, $00, $14, $0F, $30, $21, $01, $0F, $30, $30 ; CPU:$EF90 PRG:2F90 0B .byte $0F, $0F, $25, $25, $0F, $0F, $21, $21, $0F, $0F, $30, $26, $27, $23, $E0, $48 ; CPU:$EFA0 PRG:2FA0 0B .byte $50, $23, $E8, $48, $A5, $23, $F0, $48, $F5, $20, $86, $14, $DA, $DF, $E3, $E5 ; CPU:$EFB0 PRG:2FB0 0B .byte $24, $24, $E5, $24, $E5, $24, $24, $DA, $DF, $E3, $E5, $24, $24, $E5, $24, $E5 ; CPU:$EFC0 PRG:2FC0 0B .byte $20, $A6, $14, $DB, $E0, $E4, $DC, $24, $24, $DC, $24, $DC, $24, $24, $DB, $E0 ; CPU:$EFD0 PRG:2FD0 0B .byte $E4, $DC, $24, $24, $DC, $24, $DC, $20, $C6, $14, $DC, $24, $24, $DC, $24, $24 ; CPU:$EFE0 PRG:2FE0 0B .byte $DC, $24, $DC, $24, $24, $DC, $24, $24, $DC, $24, $24, $DC, $24, $DC, $20, $E6 ; CPU:$EFF0 PRG:2FF0 0B .byte $14, $DD, $E1, $E5, $DD, $24, $24, $DD, $E1, $DC, $24, $24, $DD, $E1, $E5, $DD ; CPU:$F000 PRG:3000 0B .byte $24, $24, $DD, $E1, $DC, $21, $06, $14, $DE, $E2, $E6, $DE, $E2, $E7, $DE, $E2 ; CPU:$F010 PRG:3010 0B .byte $E6, $24, $24, $DE, $E2, $E6, $DE, $E2, $E7, $DE, $E2, $E6, $20, $44, $57, $39 ; CPU:$F020 PRG:3020 0B .byte $22, $05, $57, $39, $20, $83, $CB, $DC, $20, $7C, $CD, $DC, $20, $43, $82, $DA ; CPU:$F030 PRG:3030 0B .byte $DB, $21, $E3, $01, $DD, $22, $03, $02, $DE, $E2, $20, $5B, $02, $DF, $E3, $20 ; CPU:$F040 PRG:3040 0B .byte $7B, $01, $E0, $21, $FB, $01, $E1, $22, $1C, $01, $E6, $21, $46, $85, $E5, $DC ; CPU:$F050 PRG:3050 0B .byte $DC, $DD, $DE, $21, $4B, $0F, $DA, $39, $39, $DF, $E3, $DA, $DF, $E3, $24, $E5 ; CPU:$F060 PRG:3060 0B .byte $EA, $39, $39, $DF, $E3, $21, $6B, $0F, $DB, $24, $24, $E0, $DC, $DB, $E0, $DC ; CPU:$F070 PRG:3070 0B .byte $24, $DC, $24, $EB, $24, $E0, $DC, $21, $8B, $0F, $DC, $24, $24, $24, $DC, $DC ; CPU:$F080 PRG:3080 0B .byte $24, $DC, $24, $DC, $24, $DC, $24, $24, $DC, $21, $AB, $0F, $E8, $E9, $39, $E7 ; CPU:$F090 PRG:3090 0B .byte $DC, $DC, $24, $DD, $E1, $DC, $24, $EC, $24, $E1, $DC, $21, $C7, $13, $E2, $39 ; CPU:$F0A0 PRG:30A0 0B .byte $39, $E7, $EC, $24, $24, $24, $EC, $EC, $24, $DE, $E2, $E6, $EA, $39, $39, $39 ; CPU:$F0B0 PRG:30B0 0B .byte $E6, $22, $4A, $0D, $01, $24, $19, $15, $0A, $22, $0E, $1B, $24, $10, $0A, $16 ; CPU:$F0C0 PRG:30C0 0B .byte $0E, $22, $8A, $0D, $02, $24, $19, $15, $0A, $22, $0E, $1B, $24, $10, $0A, $16 ; CPU:$F0D0 PRG:30D0 0B .byte $0E, $22, $CA, $04, $B5, $B6, $B7, $B8, $22, $D4, $04, $B2, $B3, $B4, $CC, $23 ; CPU:$F0E0 PRG:30E0 0B .byte $04, $02, $AB, $B8, $23, $0C, $07, $B2, $B3, $B4, $CC, $24, $AC, $B8, $23, $19 ; CPU:$F0F0 PRG:30F0 0B .byte $04, $B2, $B3, $B4, $CC, $23, $69, $0E, $25, $01, $09, $08, $04, $24, $17, $12 ; CPU:$F100 PRG:3100 0B .byte $17, $1D, $0E, $17, $0D, $18, $00, $FF, $02, $4C, $7E, $F1, $00, $FF, $02, $4C ; CPU:$F110 PRG:3110 0B .byte $7E, $F1, $2B, $E1, $46, $FA, $2B, $E9, $46, $FF, $2B, $F1, $46, $AF, $2B, $F1 ; CPU:$F120 PRG:3120 0B .byte $01, $A5, $2A, $24, $58, $C7, $2B, $44, $58, $C8, $2A, $43, $C8, $C5, $2A, $5C ; CPU:$F130 PRG:3130 0B .byte $C8, $CA, $2A, $23, $01, $C4, $2A, $3C, $01, $C9, $2B, $43, $01, $C6, $2B, $5C ; CPU:$F140 PRG:3140 0B .byte $01, $CB, $2A, $4A, $0C, $2E, $24, $19, $15, $0A, $22, $0E, $1B, $24, $02, $24 ; CPU:$F150 PRG:3150 0B .byte $2F, $2A, $8F, $4A, $C7, $2A, $CF, $4A, $C8, $2A, $8E, $83, $C4, $C5, $C6, $2A ; CPU:$F160 PRG:3160 0B .byte $B5, $04, $B2, $B3, $B4, $CC, $2A, $99, $83, $C9, $CA, $CB, $00, $FF, $2B, $C0 ; CPU:$F170 PRG:3170 0B .byte $60, $AA, $2B, $E0, $60, $AA, $2B, $C9, $46, $FF, $2B, $D1, $46, $FF, $2B, $D1 ; CPU:$F180 PRG:3180 0B .byte $01, $55, $28, $64, $58, $C7, $29, $84, $58, $C8, $28, $83, $C8, $C5, $28, $9C ; CPU:$F190 PRG:3190 0B .byte $C8, $CA, $28, $63, $01, $C4, $28, $7C, $01, $C9, $29, $83, $01, $C6, $29, $9C ; CPU:$F1A0 PRG:31A0 0B .byte $01, $CB, $28, $8A, $0C, $2E, $24, $19, $15, $0A, $22, $0E, $1B, $24, $01, $24 ; CPU:$F1B0 PRG:31B0 0B .byte $2F, $28, $CF, $4A, $C7, $29, $0F, $4A, $C8, $28, $CE, $83, $C4, $C5, $C6, $28 ; CPU:$F1C0 PRG:31C0 0B .byte $F5, $04, $B2, $B3, $B4, $CC, $28, $D9, $83, $C9, $CA, $CB, $29, $A2, $45, $2E ; CPU:$F1D0 PRG:31D0 0B .byte $29, $B9, $45, $2F, $29, $A8, $0E, $0C, $15, $1E, $B8, $0C, $15, $1E, $B8, $15 ; CPU:$F1E0 PRG:31E0 0B .byte $0A, $17, $0D, $B8, $B8, $29, $E4, $04, $2A, $2B, $2C, $2D, $29, $EE, $04, $B5 ; CPU:$F1F0 PRG:31F0 0B .byte $B6, $B7, $B8, $29, $F8, $04, $B2, $B3, $B4, $CC, $60 ; CPU:$F200 PRG:3200 0B ;------------------------------------------------------------ ; ResourceAndLevelData ; ; Global: ; First-pass ResourceAndLevelData entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ResourceAndLevelData: LDA $40 ; CPU:$F20B PRG:320B A5 40 AND #$FB ; CPU:$F20D PRG:320D 29 FB STA PPUCTRL ; CPU:$F20F PRG:320F 8D 00 20 STA $40 ; CPU:$F212 PRG:3212 85 40 LDX PPUSTATUS ; CPU:$F214 PRG:3214 AE 02 20 LDY #$00 ; CPU:$F217 PRG:3217 A0 00 BEQ PPUCommandReadNextByte_F249 ; CPU:$F219 PRG:3219 F0 2E ; Branch target inside the final five bytes of the preceding raw region. ; This is part of the PPU command-processing loop continued at $F220. PPUCommandLoop_F21B: PHA ; CPU:$F21B PRG:321B 48 STA PPUADDR ; CPU:$F21C PRG:321C 8D 06 20 INY ; CPU:$F21F PRG:321F C8 ;------------------------------------------------------------ ; Resource, input, and collision code with embedded tables ; CPU $F220-$F7C0 ; PRG $3220-$37C0 ; ; Pass 1 recursively traced from verified entry roots in this region. ; Direct branches, jumps, and subroutine calls are decoded. ; Bytes not reached by that trace remain explicit .byte data. ;------------------------------------------------------------ ;------------------------------------------------------------ ; ResourceInputCollisionCode ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ResourceInputCollisionCode: LDA $0301,Y ; CPU:$F220 PRG:3220 B9 01 03 STA PPUADDR ; CPU:$F223 PRG:3223 8D 06 20 INY ; CPU:$F226 PRG:3226 C8 LDA $0301,Y ; CPU:$F227 PRG:3227 B9 01 03 AND #$3F ; CPU:$F22A PRG:322A 29 3F TAX ; CPU:$F22C PRG:322C AA UpdateCommandBufferLoop_F22D: INY ; CPU:$F22D PRG:322D C8 LDA $0301,Y ; CPU:$F22E PRG:322E B9 01 03 STA PPUDATA ; CPU:$F231 PRG:3231 8D 07 20 DEX ; CPU:$F234 PRG:3234 CA BNE UpdateCommandBufferLoop_F22D ; CPU:$F235 PRG:3235 D0 F6 PLA ; CPU:$F237 PRG:3237 68 CMP #$3F ; CPU:$F238 PRG:3238 C9 3F BNE UpdateCommandBufferOnNonZero_F248 ; CPU:$F23A PRG:323A D0 0C STA PPUADDR ; CPU:$F23C PRG:323C 8D 06 20 STX PPUADDR ; CPU:$F23F PRG:323F 8E 06 20 STX PPUADDR ; CPU:$F242 PRG:3242 8E 06 20 STX PPUADDR ; CPU:$F245 PRG:3245 8E 06 20 UpdateCommandBufferOnNonZero_F248: INY ; CPU:$F248 PRG:3248 C8 PPUCommandReadNextByte_F249: LDA $0301,Y ; CPU:$F249 PRG:3249 B9 01 03 BNE PPUCommandLoop_F21B ; CPU:$F24C PRG:324C D0 CD LDA #$00 ; CPU:$F24E PRG:324E A9 00 STA $0300 ; CPU:$F250 PRG:3250 8D 00 03 STA $0301 ; CPU:$F253 PRG:3253 8D 01 03 RTS ; CPU:$F256 PRG:3256 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F257 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F257: LDA PPUSTATUS ; CPU:$F257 PRG:3257 AD 02 20 LDA $40 ; CPU:$F25A PRG:325A A5 40 AND #$FB ; CPU:$F25C PRG:325C 29 FB STA PPUCTRL ; CPU:$F25E PRG:325E 8D 00 20 STA $40 ; CPU:$F261 PRG:3261 85 40 LDA #$1C ; CPU:$F263 PRG:3263 A9 1C CLC ; CPU:$F265 PRG:3265 18 EnginePathLoop_F266: ADC #$04 ; CPU:$F266 PRG:3266 69 04 DEC $01 ; CPU:$F268 PRG:3268 C6 01 BNE EnginePathLoop_F266 ; CPU:$F26A PRG:326A D0 FA STA $02 ; CPU:$F26C PRG:326C 85 02 STA PPUADDR ; CPU:$F26E PRG:326E 8D 06 20 LDA #$00 ; CPU:$F271 PRG:3271 A9 00 STA PPUADDR ; CPU:$F273 PRG:3273 8D 06 20 LDX #$04 ; CPU:$F276 PRG:3276 A2 04 LDY #$00 ; CPU:$F278 PRG:3278 A0 00 LDA WorkPtr0Lo ; CPU:$F27A PRG:327A A5 00 EnginePathLoop_F27C: STA PPUDATA ; CPU:$F27C PRG:327C 8D 07 20 DEY ; CPU:$F27F PRG:327F 88 BNE EnginePathLoop_F27C ; CPU:$F280 PRG:3280 D0 FA DEX ; CPU:$F282 PRG:3282 CA BNE EnginePathLoop_F27C ; CPU:$F283 PRG:3283 D0 F7 LDA WorkPtr1Lo ; CPU:$F285 PRG:3285 A5 02 ADC #$03 ; CPU:$F287 PRG:3287 69 03 STA PPUADDR ; CPU:$F289 PRG:3289 8D 06 20 LDA #$C0 ; CPU:$F28C PRG:328C A9 C0 STA PPUADDR ; CPU:$F28E PRG:328E 8D 06 20 LDY #$40 ; CPU:$F291 PRG:3291 A0 40 LDA #$00 ; CPU:$F293 PRG:3293 A9 00 EnginePathLoop_F295: STA PPUDATA ; CPU:$F295 PRG:3295 8D 07 20 DEY ; CPU:$F298 PRG:3298 88 BNE EnginePathLoop_F295 ; CPU:$F299 PRG:3299 D0 FA RTS ; CPU:$F29B PRG:329B 60 EnginePathLoop_F29C: PHA ; CPU:$F29C PRG:329C 48 STA PPUADDR ; CPU:$F29D PRG:329D 8D 06 20 INY ; CPU:$F2A0 PRG:32A0 C8 LDA ($00),Y ; CPU:$F2A1 PRG:32A1 B1 00 STA PPUADDR ; CPU:$F2A3 PRG:32A3 8D 06 20 INY ; CPU:$F2A6 PRG:32A6 C8 LDA ($00),Y ; CPU:$F2A7 PRG:32A7 B1 00 ASL A ; CPU:$F2A9 PRG:32A9 0A PHA ; CPU:$F2AA PRG:32AA 48 LDA $40 ; CPU:$F2AB PRG:32AB A5 40 ORA #$04 ; CPU:$F2AD PRG:32AD 09 04 BCS EnginePathOnCarry_F2B3 ; CPU:$F2AF PRG:32AF B0 02 AND #$FB ; CPU:$F2B1 PRG:32B1 29 FB EnginePathOnCarry_F2B3: STA PPUCTRL ; CPU:$F2B3 PRG:32B3 8D 00 20 STA $40 ; CPU:$F2B6 PRG:32B6 85 40 PLA ; CPU:$F2B8 PRG:32B8 68 ASL A ; CPU:$F2B9 PRG:32B9 0A BCC EnginePathOnNoCarry_F2BF ; CPU:$F2BA PRG:32BA 90 03 ORA #$02 ; CPU:$F2BC PRG:32BC 09 02 INY ; CPU:$F2BE PRG:32BE C8 EnginePathOnNoCarry_F2BF: LSR A ; CPU:$F2BF PRG:32BF 4A LSR A ; CPU:$F2C0 PRG:32C0 4A TAX ; CPU:$F2C1 PRG:32C1 AA EnginePathLoop_F2C2: BCS EnginePathOnCarry_F2C5 ; CPU:$F2C2 PRG:32C2 B0 01 INY ; CPU:$F2C4 PRG:32C4 C8 EnginePathOnCarry_F2C5: LDA ($00),Y ; CPU:$F2C5 PRG:32C5 B1 00 STA PPUDATA ; CPU:$F2C7 PRG:32C7 8D 07 20 DEX ; CPU:$F2CA PRG:32CA CA BNE EnginePathLoop_F2C2 ; CPU:$F2CB PRG:32CB D0 F5 PLA ; CPU:$F2CD PRG:32CD 68 CMP #$3F ; CPU:$F2CE PRG:32CE C9 3F BNE EnginePathLoop_F2DE ; CPU:$F2D0 PRG:32D0 D0 0C STA PPUADDR ; CPU:$F2D2 PRG:32D2 8D 06 20 STX PPUADDR ; CPU:$F2D5 PRG:32D5 8E 06 20 STX PPUADDR ; CPU:$F2D8 PRG:32D8 8E 06 20 STX PPUADDR ; CPU:$F2DB PRG:32DB 8E 06 20 EnginePathLoop_F2DE: SEC ; CPU:$F2DE PRG:32DE 38 TYA ; CPU:$F2DF PRG:32DF 98 ADC $00 ; CPU:$F2E0 PRG:32E0 65 00 STA $00 ; CPU:$F2E2 PRG:32E2 85 00 LDA #$00 ; CPU:$F2E4 PRG:32E4 A9 00 ADC $01 ; CPU:$F2E6 PRG:32E6 65 01 STA $01 ; CPU:$F2E8 PRG:32E8 85 01 ;------------------------------------------------------------ ; ProcessResourceStateDispatch_F2EA ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateDispatch_F2EA: LDX PPUSTATUS ; CPU:$F2EA PRG:32EA AE 02 20 LDY #$00 ; CPU:$F2ED PRG:32ED A0 00 LDA ($00),Y ; CPU:$F2EF PRG:32EF B1 00 BNE EnginePathOnNonZero_F2F4 ; CPU:$F2F1 PRG:32F1 D0 01 RTS ; CPU:$F2F3 PRG:32F3 60 EnginePathOnNonZero_F2F4: CMP #$60 ; CPU:$F2F4 PRG:32F4 C9 60 BNE EnginePathOnNonZero_F302 ; CPU:$F2F6 PRG:32F6 D0 0A PLA ; CPU:$F2F8 PRG:32F8 68 STA $01 ; CPU:$F2F9 PRG:32F9 85 01 PLA ; CPU:$F2FB PRG:32FB 68 STA $00 ; CPU:$F2FC PRG:32FC 85 00 LDY #$02 ; CPU:$F2FE PRG:32FE A0 02 BNE EnginePathLoop_F2DE ; CPU:$F300 PRG:3300 D0 DC EnginePathOnNonZero_F302: CMP #$4C ; CPU:$F302 PRG:3302 C9 4C BNE EnginePathLoop_F29C ; CPU:$F304 PRG:3304 D0 96 LDA WorkPtr0Lo ; CPU:$F306 PRG:3306 A5 00 PHA ; CPU:$F308 PRG:3308 48 LDA WorkPtr0Hi ; CPU:$F309 PRG:3309 A5 01 PHA ; CPU:$F30B PRG:330B 48 INY ; CPU:$F30C PRG:330C C8 LDA ($00),Y ; CPU:$F30D PRG:330D B1 00 TAX ; CPU:$F30F PRG:330F AA INY ; CPU:$F310 PRG:3310 C8 LDA ($00),Y ; CPU:$F311 PRG:3311 B1 00 STA $01 ; CPU:$F313 PRG:3313 85 01 STX $00 ; CPU:$F315 PRG:3315 86 00 JMP ProcessResourceStateDispatch_F2EA ; CPU:$F317 PRG:3317 4C EA F2 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F31A ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F31A: STA $00 ; CPU:$F31A PRG:331A 85 00 LDX $00 ; CPU:$F31C PRG:331C A6 00 JSR UpdateCommandBufferRoutine_F32C ; CPU:$F31E PRG:331E 20 2C F3 LDA WorkPtr0Lo ; CPU:$F321 PRG:3321 A5 00 LSR A ; CPU:$F323 PRG:3323 4A LSR A ; CPU:$F324 PRG:3324 4A LSR A ; CPU:$F325 PRG:3325 4A LSR A ; CPU:$F326 PRG:3326 4A TAX ; CPU:$F327 PRG:3327 AA JSR UpdateCommandBufferRoutine_F32C ; CPU:$F328 PRG:3328 20 2C F3 RTS ; CPU:$F32B PRG:332B 60 ;------------------------------------------------------------ ; UpdateCommandBufferRoutine_F32C ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateCommandBufferRoutine_F32C: INX ; CPU:$F32C PRG:332C E8 TXA ; CPU:$F32D PRG:332D 8A AND #$0F ; CPU:$F32E PRG:332E 29 0F CMP #$09 ; CPU:$F330 PRG:3330 C9 09 BCS EnginePathContinue_F3A0 ; CPU:$F332 PRG:3332 B0 6C ASL A ; CPU:$F334 PRG:3334 0A ASL A ; CPU:$F335 PRG:3335 0A TAY ; CPU:$F336 PRG:3336 A8 STA $02 ; CPU:$F337 PRG:3337 85 02 LDX $0300 ; CPU:$F339 PRG:3339 AE 00 03 LDA $0700,Y ; CPU:$F33C PRG:333C B9 00 07 STA $0301,X ; CPU:$F33F PRG:333F 9D 01 03 JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F342 PRG:3342 20 F5 F3 INY ; CPU:$F345 PRG:3345 C8 LDA $0700,Y ; CPU:$F346 PRG:3346 B9 00 07 STA $0301,X ; CPU:$F349 PRG:3349 9D 01 03 JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F34C PRG:334C 20 F5 F3 INY ; CPU:$F34F PRG:334F C8 LDA $0700,Y ; CPU:$F350 PRG:3350 B9 00 07 AND #$07 ; CPU:$F353 PRG:3353 29 07 STA $0301,X ; CPU:$F355 PRG:3355 9D 01 03 STA $01 ; CPU:$F358 PRG:3358 85 01 TXA ; CPU:$F35A PRG:335A 8A SEC ; CPU:$F35B PRG:335B 38 ADC $01 ; CPU:$F35C PRG:335C 65 01 JSR UpdateCommandBufferRoutine_F3F7 ; CPU:$F35E PRG:335E 20 F7 F3 TAX ; CPU:$F361 PRG:3361 AA STX $0300 ; CPU:$F362 PRG:3362 8E 00 03 LDA #$00 ; CPU:$F365 PRG:3365 A9 00 STA $0301,X ; CPU:$F367 PRG:3367 9D 01 03 INY ; CPU:$F36A PRG:336A C8 LDA $0700,Y ; CPU:$F36B PRG:336B B9 00 07 STA $03 ; CPU:$F36E PRG:336E 85 03 UpdateCommandBufferLoop_F370: DEX ; CPU:$F370 PRG:3370 CA LDA a:$0020,Y ; CPU:$F371 PRG:3371 B9 20 00 AND #$0F ; CPU:$F374 PRG:3374 29 0F STA $0301,X ; CPU:$F376 PRG:3376 9D 01 03 DEC $01 ; CPU:$F379 PRG:3379 C6 01 BEQ UpdateCommandBufferOnZero_F38F ; CPU:$F37B PRG:337B F0 12 DEX ; CPU:$F37D PRG:337D CA LDA a:$0020,Y ; CPU:$F37E PRG:337E B9 20 00 AND #$F0 ; CPU:$F381 PRG:3381 29 F0 LSR A ; CPU:$F383 PRG:3383 4A LSR A ; CPU:$F384 PRG:3384 4A LSR A ; CPU:$F385 PRG:3385 4A LSR A ; CPU:$F386 PRG:3386 4A STA $0301,X ; CPU:$F387 PRG:3387 9D 01 03 DEY ; CPU:$F38A PRG:338A 88 DEC $01 ; CPU:$F38B PRG:338B C6 01 BNE UpdateCommandBufferLoop_F370 ; CPU:$F38D PRG:338D D0 E1 UpdateCommandBufferOnZero_F38F: LDA $03 ; CPU:$F38F PRG:338F A5 03 AND #$01 ; CPU:$F391 PRG:3391 29 01 BEQ EnginePathContinue_F3A0 ; CPU:$F393 PRG:3393 F0 0B LDY $02 ; CPU:$F395 PRG:3395 A4 02 CLC ; CPU:$F397 PRG:3397 18 LDA a:$0020,Y ; CPU:$F398 PRG:3398 B9 20 00 ADC #$B1 ; CPU:$F39B PRG:339B 69 B1 STA $0301,X ; CPU:$F39D PRG:339D 9D 01 03 EnginePathContinue_F3A0: RTS ; CPU:$F3A0 PRG:33A0 60 ;------------------------------------------------------------ ; UpdateCommandBufferRoutine_F3A1 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateCommandBufferRoutine_F3A1: LDY #$00 ; CPU:$F3A1 PRG:33A1 A0 00 LDA ($02),Y ; CPU:$F3A3 PRG:33A3 B1 02 AND #$0F ; CPU:$F3A5 PRG:33A5 29 0F STA $05 ; CPU:$F3A7 PRG:33A7 85 05 LDA ($02),Y ; CPU:$F3A9 PRG:33A9 B1 02 LSR A ; CPU:$F3AB PRG:33AB 4A LSR A ; CPU:$F3AC PRG:33AC 4A LSR A ; CPU:$F3AD PRG:33AD 4A LSR A ; CPU:$F3AE PRG:33AE 4A STA $04 ; CPU:$F3AF PRG:33AF 85 04 LDX $0300 ; CPU:$F3B1 PRG:33B1 AE 00 03 UpdateCommandBufferLoop_F3B4: LDA WorkPtr0Hi ; CPU:$F3B4 PRG:33B4 A5 01 STA $0301,X ; CPU:$F3B6 PRG:33B6 9D 01 03 JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F3B9 PRG:33B9 20 F5 F3 LDA WorkPtr0Lo ; CPU:$F3BC PRG:33BC A5 00 STA $0301,X ; CPU:$F3BE PRG:33BE 9D 01 03 JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F3C1 PRG:33C1 20 F5 F3 LDA $05 ; CPU:$F3C4 PRG:33C4 A5 05 STA $06 ; CPU:$F3C6 PRG:33C6 85 06 STA $0301,X ; CPU:$F3C8 PRG:33C8 9D 01 03 UpdateCommandBufferLoop_F3CB: JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F3CB PRG:33CB 20 F5 F3 INY ; CPU:$F3CE PRG:33CE C8 LDA ($02),Y ; CPU:$F3CF PRG:33CF B1 02 STA $0301,X ; CPU:$F3D1 PRG:33D1 9D 01 03 DEC $06 ; CPU:$F3D4 PRG:33D4 C6 06 BNE UpdateCommandBufferLoop_F3CB ; CPU:$F3D6 PRG:33D6 D0 F3 JSR ProcessResourceStateRoutine_F3F5 ; CPU:$F3D8 PRG:33D8 20 F5 F3 STX $0300 ; CPU:$F3DB PRG:33DB 8E 00 03 CLC ; CPU:$F3DE PRG:33DE 18 LDA #$20 ; CPU:$F3DF PRG:33DF A9 20 ADC $00 ; CPU:$F3E1 PRG:33E1 65 00 STA $00 ; CPU:$F3E3 PRG:33E3 85 00 LDA #$00 ; CPU:$F3E5 PRG:33E5 A9 00 ADC $01 ; CPU:$F3E7 PRG:33E7 65 01 STA $01 ; CPU:$F3E9 PRG:33E9 85 01 DEC $04 ; CPU:$F3EB PRG:33EB C6 04 BNE UpdateCommandBufferLoop_F3B4 ; CPU:$F3ED PRG:33ED D0 C5 LDA #$00 ; CPU:$F3EF PRG:33EF A9 00 STA $0301,X ; CPU:$F3F1 PRG:33F1 9D 01 03 RTS ; CPU:$F3F4 PRG:33F4 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F3F5 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F3F5: INX ; CPU:$F3F5 PRG:33F5 E8 TXA ; CPU:$F3F6 PRG:33F6 8A ;------------------------------------------------------------ ; UpdateCommandBufferRoutine_F3F7 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdateCommandBufferRoutine_F3F7: CMP #$4E ; CPU:$F3F7 PRG:33F7 C9 4E BCC EnginePathOnNoCarry_F407 ; CPU:$F3F9 PRG:33F9 90 0C LDX $0300 ; CPU:$F3FB PRG:33FB AE 00 03 LDA #$00 ; CPU:$F3FE PRG:33FE A9 00 STA $0301,X ; CPU:$F400 PRG:3400 9D 01 03 PLA ; CPU:$F403 PRG:3403 68 PLA ; CPU:$F404 PRG:3404 68 LDA #$01 ; CPU:$F405 PRG:3405 A9 01 EnginePathOnNoCarry_F407: RTS ; CPU:$F407 PRG:3407 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F408 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F408: LDX #$FF ; CPU:$F408 PRG:3408 A2 FF BNE EnginePathOnNonZero_F40E ; CPU:$F40A PRG:340A D0 02 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F40C ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F40C: LDX #$00 ; CPU:$F40C PRG:340C A2 00 EnginePathOnNonZero_F40E: STX $04 ; CPU:$F40E PRG:340E 86 04 LDX #$00 ; CPU:$F410 PRG:3410 A2 00 STX $05 ; CPU:$F412 PRG:3412 86 05 STX $06 ; CPU:$F414 PRG:3414 86 06 STX $07 ; CPU:$F416 PRG:3416 86 07 LDA WorkPtr0Hi ; CPU:$F418 PRG:3418 A5 01 AND #$08 ; CPU:$F41A PRG:341A 29 08 BNE EnginePathOnNonZero_F41F ; CPU:$F41C PRG:341C D0 01 INX ; CPU:$F41E PRG:341E E8 EnginePathOnNonZero_F41F: LDA WorkPtr0Lo ; CPU:$F41F PRG:341F A5 00 STA $06,X ; CPU:$F421 PRG:3421 95 06 LDA WorkPtr0Hi ; CPU:$F423 PRG:3423 A5 01 JSR ProcessResourceStateRoutine_F429 ; CPU:$F425 PRG:3425 20 29 F4 RTS ; CPU:$F428 PRG:3428 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F429 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F429: AND #$07 ; CPU:$F429 PRG:3429 29 07 ASL A ; CPU:$F42B PRG:342B 0A ASL A ; CPU:$F42C PRG:342C 0A TAX ; CPU:$F42D PRG:342D AA LDA $04 ; CPU:$F42E PRG:342E A5 04 BEQ EnginePathOnZero_F459 ; CPU:$F430 PRG:3430 F0 27 LDA $24,X ; CPU:$F432 PRG:3432 B5 24 BEQ EnginePathOnZero_F45D ; CPU:$F434 PRG:3434 F0 27 EnginePathLoop_F436: CLC ; CPU:$F436 PRG:3436 18 LDA $27,X ; CPU:$F437 PRG:3437 B5 27 STA $03 ; CPU:$F439 PRG:3439 85 03 LDA $07 ; CPU:$F43B PRG:343B A5 07 JSR ProcessResourceStateRoutine_F4AE ; CPU:$F43D PRG:343D 20 AE F4 STA $27,X ; CPU:$F440 PRG:3440 95 27 LDA $26,X ; CPU:$F442 PRG:3442 B5 26 STA $03 ; CPU:$F444 PRG:3444 85 03 LDA $06 ; CPU:$F446 PRG:3446 A5 06 JSR ProcessResourceStateRoutine_F4AE ; CPU:$F448 PRG:3448 20 AE F4 STA $26,X ; CPU:$F44B PRG:344B 95 26 LDA $25,X ; CPU:$F44D PRG:344D B5 25 STA $03 ; CPU:$F44F PRG:344F 85 03 LDA $05 ; CPU:$F451 PRG:3451 A5 05 JSR ProcessResourceStateRoutine_F4AE ; CPU:$F453 PRG:3453 20 AE F4 STA $25,X ; CPU:$F456 PRG:3456 95 25 RTS ; CPU:$F458 PRG:3458 60 EnginePathOnZero_F459: LDA $24,X ; CPU:$F459 PRG:3459 B5 24 BEQ EnginePathLoop_F436 ; CPU:$F45B PRG:345B F0 D9 EnginePathOnZero_F45D: SEC ; CPU:$F45D PRG:345D 38 LDA $27,X ; CPU:$F45E PRG:345E B5 27 STA $03 ; CPU:$F460 PRG:3460 85 03 LDA $07 ; CPU:$F462 PRG:3462 A5 07 JSR ProcessResourceStateRoutine_F4CF ; CPU:$F464 PRG:3464 20 CF F4 STA $27,X ; CPU:$F467 PRG:3467 95 27 LDA $26,X ; CPU:$F469 PRG:3469 B5 26 STA $03 ; CPU:$F46B PRG:346B 85 03 LDA $06 ; CPU:$F46D PRG:346D A5 06 JSR ProcessResourceStateRoutine_F4CF ; CPU:$F46F PRG:346F 20 CF F4 STA $26,X ; CPU:$F472 PRG:3472 95 26 LDA $25,X ; CPU:$F474 PRG:3474 B5 25 STA $03 ; CPU:$F476 PRG:3476 85 03 LDA $05 ; CPU:$F478 PRG:3478 A5 05 JSR ProcessResourceStateRoutine_F4CF ; CPU:$F47A PRG:347A 20 CF F4 STA $25,X ; CPU:$F47D PRG:347D 95 25 LDA $25,X ; CPU:$F47F PRG:347F B5 25 BNE EnginePathOnNonZero_F48B ; CPU:$F481 PRG:3481 D0 08 LDA $26,X ; CPU:$F483 PRG:3483 B5 26 BNE EnginePathOnNonZero_F48B ; CPU:$F485 PRG:3485 D0 04 LDA $27,X ; CPU:$F487 PRG:3487 B5 27 BEQ EnginePathOnZero_F491 ; CPU:$F489 PRG:3489 F0 06 EnginePathOnNonZero_F48B: BCS EnginePathOnCarry_F4AD ; CPU:$F48B PRG:348B B0 20 LDA $24,X ; CPU:$F48D PRG:348D B5 24 EOR #$FF ; CPU:$F48F PRG:348F 49 FF EnginePathOnZero_F491: STA $24,X ; CPU:$F491 PRG:3491 95 24 SEC ; CPU:$F493 PRG:3493 38 LDA #$00 ; CPU:$F494 PRG:3494 A9 00 STA $03 ; CPU:$F496 PRG:3496 85 03 LDA $27,X ; CPU:$F498 PRG:3498 B5 27 JSR ProcessResourceStateRoutine_F4CF ; CPU:$F49A PRG:349A 20 CF F4 STA $27,X ; CPU:$F49D PRG:349D 95 27 LDA $26,X ; CPU:$F49F PRG:349F B5 26 JSR ProcessResourceStateRoutine_F4CF ; CPU:$F4A1 PRG:34A1 20 CF F4 STA $26,X ; CPU:$F4A4 PRG:34A4 95 26 LDA $25,X ; CPU:$F4A6 PRG:34A6 B5 25 JSR ProcessResourceStateRoutine_F4CF ; CPU:$F4A8 PRG:34A8 20 CF F4 STA $25,X ; CPU:$F4AB PRG:34AB 95 25 EnginePathOnCarry_F4AD: RTS ; CPU:$F4AD PRG:34AD 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F4AE ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F4AE: JSR ProcessResourceStateRoutine_F4F1 ; CPU:$F4AE PRG:34AE 20 F1 F4 ADC $01 ; CPU:$F4B1 PRG:34B1 65 01 CMP #$0A ; CPU:$F4B3 PRG:34B3 C9 0A BCC EnginePathOnNoCarry_F4B9 ; CPU:$F4B5 PRG:34B5 90 02 ADC #$05 ; CPU:$F4B7 PRG:34B7 69 05 EnginePathOnNoCarry_F4B9: CLC ; CPU:$F4B9 PRG:34B9 18 ADC $02 ; CPU:$F4BA PRG:34BA 65 02 STA $02 ; CPU:$F4BC PRG:34BC 85 02 LDA $03 ; CPU:$F4BE PRG:34BE A5 03 AND #$F0 ; CPU:$F4C0 PRG:34C0 29 F0 ADC $02 ; CPU:$F4C2 PRG:34C2 65 02 BCC EnginePathOnNoCarry_F4CA ; CPU:$F4C4 PRG:34C4 90 04 EnginePathLoop_F4C6: ADC #$5F ; CPU:$F4C6 PRG:34C6 69 5F SEC ; CPU:$F4C8 PRG:34C8 38 RTS ; CPU:$F4C9 PRG:34C9 60 EnginePathOnNoCarry_F4CA: CMP #$A0 ; CPU:$F4CA PRG:34CA C9 A0 BCS EnginePathLoop_F4C6 ; CPU:$F4CC PRG:34CC B0 F8 RTS ; CPU:$F4CE PRG:34CE 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F4CF ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F4CF: JSR ProcessResourceStateRoutine_F4F1 ; CPU:$F4CF PRG:34CF 20 F1 F4 SBC $01 ; CPU:$F4D2 PRG:34D2 E5 01 STA $01 ; CPU:$F4D4 PRG:34D4 85 01 BCS EnginePathOnCarry_F4E2 ; CPU:$F4D6 PRG:34D6 B0 0A ADC #$0A ; CPU:$F4D8 PRG:34D8 69 0A STA $01 ; CPU:$F4DA PRG:34DA 85 01 LDA WorkPtr1Lo ; CPU:$F4DC PRG:34DC A5 02 ADC #$0F ; CPU:$F4DE PRG:34DE 69 0F STA $02 ; CPU:$F4E0 PRG:34E0 85 02 EnginePathOnCarry_F4E2: LDA $03 ; CPU:$F4E2 PRG:34E2 A5 03 AND #$F0 ; CPU:$F4E4 PRG:34E4 29 F0 SEC ; CPU:$F4E6 PRG:34E6 38 SBC $02 ; CPU:$F4E7 PRG:34E7 E5 02 BCS EnginePathOnCarry_F4EE ; CPU:$F4E9 PRG:34E9 B0 03 ADC #$A0 ; CPU:$F4EB PRG:34EB 69 A0 CLC ; CPU:$F4ED PRG:34ED 18 EnginePathOnCarry_F4EE: ORA $01 ; CPU:$F4EE PRG:34EE 05 01 RTS ; CPU:$F4F0 PRG:34F0 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F4F1 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F4F1: PHA ; CPU:$F4F1 PRG:34F1 48 AND #$0F ; CPU:$F4F2 PRG:34F2 29 0F STA $01 ; CPU:$F4F4 PRG:34F4 85 01 PLA ; CPU:$F4F6 PRG:34F6 68 AND #$F0 ; CPU:$F4F7 PRG:34F7 29 F0 STA $02 ; CPU:$F4F9 PRG:34F9 85 02 LDA $03 ; CPU:$F4FB PRG:34FB A5 03 AND #$0F ; CPU:$F4FD PRG:34FD 29 0F RTS ; CPU:$F4FF PRG:34FF 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F500 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F500: LDA #$00 ; CPU:$F500 PRG:3500 A9 00 STA $04 ; CPU:$F502 PRG:3502 85 04 CLC ; CPU:$F504 PRG:3504 18 LDA WorkPtr0Lo ; CPU:$F505 PRG:3505 A5 00 ADC #$10 ; CPU:$F507 PRG:3507 69 10 AND #$F0 ; CPU:$F509 PRG:3509 29 F0 LSR A ; CPU:$F50B PRG:350B 4A LSR A ; CPU:$F50C PRG:350C 4A TAY ; CPU:$F50D PRG:350D A8 LDA WorkPtr0Lo ; CPU:$F50E PRG:350E A5 00 AND #$07 ; CPU:$F510 PRG:3510 29 07 ASL A ; CPU:$F512 PRG:3512 0A ASL A ; CPU:$F513 PRG:3513 0A TAX ; CPU:$F514 PRG:3514 AA EnginePathLoop_F515: LDA a:$0020,Y ; CPU:$F515 PRG:3515 B9 20 00 BEQ EnginePathOnZero_F56B ; CPU:$F518 PRG:3518 F0 51 LDA $24,X ; CPU:$F51A PRG:351A B5 24 BEQ EnginePathLoop_F544 ; CPU:$F51C PRG:351C F0 26 EnginePathLoop_F51E: SEC ; CPU:$F51E PRG:351E 38 LDA a:$0023,Y ; CPU:$F51F PRG:351F B9 23 00 STA $03 ; CPU:$F522 PRG:3522 85 03 LDA $27,X ; CPU:$F524 PRG:3524 B5 27 JSR ProcessResourceStateRoutine_F4CF ; CPU:$F526 PRG:3526 20 CF F4 LDA a:$0022,Y ; CPU:$F529 PRG:3529 B9 22 00 STA $03 ; CPU:$F52C PRG:352C 85 03 LDA $26,X ; CPU:$F52E PRG:352E B5 26 JSR ProcessResourceStateRoutine_F4CF ; CPU:$F530 PRG:3530 20 CF F4 LDA a:$0021,Y ; CPU:$F533 PRG:3533 B9 21 00 STA $03 ; CPU:$F536 PRG:3536 85 03 LDA $25,X ; CPU:$F538 PRG:3538 B5 25 JSR ProcessResourceStateRoutine_F4CF ; CPU:$F53A PRG:353A 20 CF F4 BCS EnginePathOnCarry_F56F ; CPU:$F53D PRG:353D B0 30 LDA a:$0020,Y ; CPU:$F53F PRG:353F B9 20 00 BNE EnginePathOnNonZero_F574 ; CPU:$F542 PRG:3542 D0 30 EnginePathLoop_F544: LDA #$FF ; CPU:$F544 PRG:3544 A9 FF STA $04 ; CPU:$F546 PRG:3546 85 04 SEC ; CPU:$F548 PRG:3548 38 EnginePathLoop_F549: TYA ; CPU:$F549 PRG:3549 98 BNE EnginePathContinue_F56A ; CPU:$F54A PRG:354A D0 1E BCC EnginePathOnNoCarry_F55E ; CPU:$F54C PRG:354C 90 10 LDA $24,X ; CPU:$F54E PRG:354E B5 24 STA $20 ; CPU:$F550 PRG:3550 85 20 LDA $25,X ; CPU:$F552 PRG:3552 B5 25 STA $21 ; CPU:$F554 PRG:3554 85 21 LDA $26,X ; CPU:$F556 PRG:3556 B5 26 STA $22 ; CPU:$F558 PRG:3558 85 22 LDA $27,X ; CPU:$F55A PRG:355A B5 27 STA $23 ; CPU:$F55C PRG:355C 85 23 EnginePathOnNoCarry_F55E: LDA WorkPtr0Lo ; CPU:$F55E PRG:355E A5 00 AND #$08 ; CPU:$F560 PRG:3560 29 08 BEQ EnginePathContinue_F56A ; CPU:$F562 PRG:3562 F0 06 DEX ; CPU:$F564 PRG:3564 CA DEX ; CPU:$F565 PRG:3565 CA DEX ; CPU:$F566 PRG:3566 CA DEX ; CPU:$F567 PRG:3567 CA BPL EnginePathLoop_F515 ; CPU:$F568 PRG:3568 10 AB EnginePathContinue_F56A: RTS ; CPU:$F56A PRG:356A 60 EnginePathOnZero_F56B: LDA $24,X ; CPU:$F56B PRG:356B B5 24 BEQ EnginePathLoop_F51E ; CPU:$F56D PRG:356D F0 AF EnginePathOnCarry_F56F: LDA a:$0020,Y ; CPU:$F56F PRG:356F B9 20 00 BNE EnginePathLoop_F544 ; CPU:$F572 PRG:3572 D0 D0 EnginePathOnNonZero_F574: CLC ; CPU:$F574 PRG:3574 18 BCC EnginePathLoop_F549 ; CPU:$F575 PRG:3575 90 D2 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F577 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F577: LDX #$1E ; CPU:$F577 PRG:3577 A2 1E DEC $50 ; CPU:$F579 PRG:3579 C6 50 BPL EnginePathLoop_F583 ; CPU:$F57B PRG:357B 10 06 LDA #$0A ; CPU:$F57D PRG:357D A9 0A STA $50 ; CPU:$F57F PRG:357F 85 50 LDX #$2E ; CPU:$F581 PRG:3581 A2 2E EnginePathLoop_F583: LDA $51,X ; CPU:$F583 PRG:3583 B5 51 BEQ EnginePathOnZero_F589 ; CPU:$F585 PRG:3585 F0 02 DEC $51,X ; CPU:$F587 PRG:3587 D6 51 EnginePathOnZero_F589: DEX ; CPU:$F589 PRG:3589 CA BPL EnginePathLoop_F583 ; CPU:$F58A PRG:358A 10 F7 RTS ; CPU:$F58C PRG:358C 60 ;------------------------------------------------------------ ; EnginePath_F58D ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ EnginePath_F58D: LDA $10 ; CPU:$F58D PRG:358D A5 10 AND #$02 ; CPU:$F58F PRG:358F 29 02 STA $00 ; CPU:$F591 PRG:3591 85 00 LDA $11 ; CPU:$F593 PRG:3593 A5 11 AND #$02 ; CPU:$F595 PRG:3595 29 02 EOR $00 ; CPU:$F597 PRG:3597 45 00 CLC ; CPU:$F599 PRG:3599 18 BEQ EnginePathOnZero_F59D ; CPU:$F59A PRG:359A F0 01 SEC ; CPU:$F59C PRG:359C 38 EnginePathOnZero_F59D: ROR $10 ; CPU:$F59D PRG:359D 66 10 ROR $11 ; CPU:$F59F PRG:359F 66 11 ROR $12 ; CPU:$F5A1 PRG:35A1 66 12 ROR $13 ; CPU:$F5A3 PRG:35A3 66 13 ROR $14 ; CPU:$F5A5 PRG:35A5 66 14 ROR $15 ; CPU:$F5A7 PRG:35A7 66 15 ROR $16 ; CPU:$F5A9 PRG:35A9 66 16 ROR $17 ; CPU:$F5AB PRG:35AB 66 17 RTS ; CPU:$F5AD PRG:35AD 60 ;------------------------------------------------------------ ; EnginePath_F5AE ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ EnginePath_F5AE: LDA #$01 ; CPU:$F5AE PRG:35AE A9 01 STA JOY1 ; CPU:$F5B0 PRG:35B0 8D 16 40 LDX #$00 ; CPU:$F5B3 PRG:35B3 A2 00 LDA #$00 ; CPU:$F5B5 PRG:35B5 A9 00 STA JOY1 ; CPU:$F5B7 PRG:35B7 8D 16 40 JSR ProcessResourceStateRoutine_F5BE ; CPU:$F5BA PRG:35BA 20 BE F5 INX ; CPU:$F5BD PRG:35BD E8 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F5BE ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F5BE: LDY #$08 ; CPU:$F5BE PRG:35BE A0 08 EnginePathLoop_F5C0: PHA ; CPU:$F5C0 PRG:35C0 48 LDA JOY1,X ; CPU:$F5C1 PRG:35C1 BD 16 40 STA $00 ; CPU:$F5C4 PRG:35C4 85 00 LSR A ; CPU:$F5C6 PRG:35C6 4A ORA $00 ; CPU:$F5C7 PRG:35C7 05 00 LSR A ; CPU:$F5C9 PRG:35C9 4A PLA ; CPU:$F5CA PRG:35CA 68 ROL A ; CPU:$F5CB PRG:35CB 2A DEY ; CPU:$F5CC PRG:35CC 88 BNE EnginePathLoop_F5C0 ; CPU:$F5CD PRG:35CD D0 F1 LDY $44,X ; CPU:$F5CF PRG:35CF B4 44 STY $00 ; CPU:$F5D1 PRG:35D1 84 00 PHA ; CPU:$F5D3 PRG:35D3 48 STA $44,X ; CPU:$F5D4 PRG:35D4 95 44 LDY $46,X ; CPU:$F5D6 PRG:35D6 B4 46 AND #$3F ; CPU:$F5D8 PRG:35D8 29 3F STA $46,X ; CPU:$F5DA PRG:35DA 95 46 PLA ; CPU:$F5DC PRG:35DC 68 ORA $00 ; CPU:$F5DD PRG:35DD 05 00 EOR $00 ; CPU:$F5DF PRG:35DF 45 00 AND #$C0 ; CPU:$F5E1 PRG:35E1 29 C0 ORA $46,X ; CPU:$F5E3 PRG:35E3 15 46 STA $46,X ; CPU:$F5E5 PRG:35E5 95 46 TYA ; CPU:$F5E7 PRG:35E7 98 AND #$0F ; CPU:$F5E8 PRG:35E8 29 0F AND $46,X ; CPU:$F5EA PRG:35EA 35 46 BEQ EnginePathOnZero_F5F4 ; CPU:$F5EC PRG:35EC F0 06 ORA #$F0 ; CPU:$F5EE PRG:35EE 09 F0 AND $46,X ; CPU:$F5F0 PRG:35F0 35 46 STA $46,X ; CPU:$F5F2 PRG:35F2 95 46 EnginePathOnZero_F5F4: RTS ; CPU:$F5F4 PRG:35F4 60 EnginePathLoop_F5F5: BMI EnginePathLoop_F600 ; CPU:$F5F5 PRG:35F5 30 09 CPX #$F4 ; CPU:$F5F7 PRG:35F7 E0 F4 BEQ EnginePathLoop_F600 ; CPU:$F5F9 PRG:35F9 F0 05 LDA #$F4 ; CPU:$F5FB PRG:35FB A9 F4 JSR ProcessResourceStateRoutine_F6FB ; CPU:$F5FD PRG:35FD 20 FB F6 EnginePathLoop_F600: RTS ; CPU:$F600 PRG:3600 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F601 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F601: LDY #$0B ; CPU:$F601 PRG:3601 A0 0B LDA ($00),Y ; CPU:$F603 PRG:3603 B1 00 STA $02 ; CPU:$F605 PRG:3605 85 02 LDA #$02 ; CPU:$F607 PRG:3607 A9 02 STA $03 ; CPU:$F609 PRG:3609 85 03 LDY #$06 ; CPU:$F60B PRG:360B A0 06 LDA ($00),Y ; CPU:$F60D PRG:360D B1 00 STA $0B ; CPU:$F60F PRG:360F 85 0B LDY #$01 ; CPU:$F611 PRG:3611 A0 01 LDA ($00),Y ; CPU:$F613 PRG:3613 B1 00 TAX ; CPU:$F615 PRG:3615 AA STA $08 ; CPU:$F616 PRG:3616 85 08 DEY ; CPU:$F618 PRG:3618 88 LDA ($00),Y ; CPU:$F619 PRG:3619 B1 00 BNE EnginePathLoop_F5F5 ; CPU:$F61B PRG:361B D0 D8 LDY #$0A ; CPU:$F61D PRG:361D A0 0A LDA ($00),Y ; CPU:$F61F PRG:361F B1 00 TAX ; CPU:$F621 PRG:3621 AA LSR A ; CPU:$F622 PRG:3622 4A LSR A ; CPU:$F623 PRG:3623 4A LSR A ; CPU:$F624 PRG:3624 4A LSR A ; CPU:$F625 PRG:3625 4A BEQ EnginePathLoop_F600 ; CPU:$F626 PRG:3626 F0 D8 STA $04 ; CPU:$F628 PRG:3628 85 04 STA $06 ; CPU:$F62A PRG:362A 85 06 TXA ; CPU:$F62C PRG:362C 8A AND #$0F ; CPU:$F62D PRG:362D 29 0F BEQ EnginePathLoop_F600 ; CPU:$F62F PRG:362F F0 CF STA $05 ; CPU:$F631 PRG:3631 85 05 STA $07 ; CPU:$F633 PRG:3633 85 07 LDY #$08 ; CPU:$F635 PRG:3635 A0 08 LDA ($00),Y ; CPU:$F637 PRG:3637 B1 00 AND #$C0 ; CPU:$F639 PRG:3639 29 C0 INY ; CPU:$F63B PRG:363B C8 ORA ($00),Y ; CPU:$F63C PRG:363C 11 00 STA $09 ; CPU:$F63E PRG:363E 85 09 LDY #$03 ; CPU:$F640 PRG:3640 A0 03 LDA ($00),Y ; CPU:$F642 PRG:3642 B1 00 STA $0A ; CPU:$F644 PRG:3644 85 0A LDY #$02 ; CPU:$F646 PRG:3646 A0 02 LDA $09 ; CPU:$F648 PRG:3648 A5 09 CMP ($02),Y ; CPU:$F64A PRG:364A D1 02 BNE EnginePathOnNonZero_F6B0 ; CPU:$F64C PRG:364C D0 62 LDY #$00 ; CPU:$F64E PRG:364E A0 00 LDA $08 ; CPU:$F650 PRG:3650 A5 08 CMP ($02),Y ; CPU:$F652 PRG:3652 D1 02 BEQ EnginePathOnZero_F659 ; CPU:$F654 PRG:3654 F0 03 JSR ProcessResourceStateRoutine_F707 ; CPU:$F656 PRG:3656 20 07 F7 EnginePathOnZero_F659: LDY #$03 ; CPU:$F659 PRG:3659 A0 03 LDA $0A ; CPU:$F65B PRG:365B A5 0A CMP ($02),Y ; CPU:$F65D PRG:365D D1 02 BEQ EnginePathOnZero_F677 ; CPU:$F65F PRG:365F F0 16 EnginePathLoop_F661: LDX $05 ; CPU:$F661 PRG:3661 A6 05 STX $07 ; CPU:$F663 PRG:3663 86 07 EnginePathLoop_F665: LDX $04 ; CPU:$F665 PRG:3665 A6 04 EnginePathLoop_F667: STA ($02),Y ; CPU:$F667 PRG:3667 91 02 INY ; CPU:$F669 PRG:3669 C8 INY ; CPU:$F66A PRG:366A C8 INY ; CPU:$F66B PRG:366B C8 INY ; CPU:$F66C PRG:366C C8 DEX ; CPU:$F66D PRG:366D CA BNE EnginePathLoop_F667 ; CPU:$F66E PRG:366E D0 F7 CLC ; CPU:$F670 PRG:3670 18 ADC #$08 ; CPU:$F671 PRG:3671 69 08 DEC $07 ; CPU:$F673 PRG:3673 C6 07 BNE EnginePathLoop_F665 ; CPU:$F675 PRG:3675 D0 EE EnginePathOnZero_F677: LDY #$05 ; CPU:$F677 PRG:3677 A0 05 LDA ($00),Y ; CPU:$F679 PRG:3679 B1 00 STA $08 ; CPU:$F67B PRG:367B 85 08 LDA #$00 ; CPU:$F67D PRG:367D A9 00 LDX $0B ; CPU:$F67F PRG:367F A6 0B CLC ; CPU:$F681 PRG:3681 18 EnginePathLoop_F682: ADC $08 ; CPU:$F682 PRG:3682 65 08 DEX ; CPU:$F684 PRG:3684 CA BNE EnginePathLoop_F682 ; CPU:$F685 PRG:3685 D0 FB LDY #$07 ; CPU:$F687 PRG:3687 A0 07 ADC ($00),Y ; CPU:$F689 PRG:3689 71 00 TAX ; CPU:$F68B PRG:368B AA LDY #$01 ; CPU:$F68C PRG:368C A0 01 LDA #$FF ; CPU:$F68E PRG:368E A9 FF STA $0A ; CPU:$F690 PRG:3690 85 0A BIT $09 ; CPU:$F692 PRG:3692 24 09 BMI EnginePathOnNegative_F6BE ; CPU:$F694 PRG:3694 30 28 BVS EnginePathOnOverflowSet_F6C0 ; CPU:$F696 PRG:3696 70 28 LDA #$01 ; CPU:$F698 PRG:3698 A9 01 STA $0A ; CPU:$F69A PRG:369A 85 0A EnginePathLoop_F69C: TXA ; CPU:$F69C PRG:369C 8A CMP ($02),Y ; CPU:$F69D PRG:369D D1 02 BEQ EnginePathOnZero_F6AF ; CPU:$F69F PRG:369F F0 0E LDX $0B ; CPU:$F6A1 PRG:36A1 A6 0B EnginePathLoop_F6A3: STA ($02),Y ; CPU:$F6A3 PRG:36A3 91 02 CLC ; CPU:$F6A5 PRG:36A5 18 ADC $0A ; CPU:$F6A6 PRG:36A6 65 0A INY ; CPU:$F6A8 PRG:36A8 C8 INY ; CPU:$F6A9 PRG:36A9 C8 INY ; CPU:$F6AA PRG:36AA C8 INY ; CPU:$F6AB PRG:36AB C8 DEX ; CPU:$F6AC PRG:36AC CA BNE EnginePathLoop_F6A3 ; CPU:$F6AD PRG:36AD D0 F4 EnginePathOnZero_F6AF: RTS ; CPU:$F6AF PRG:36AF 60 EnginePathOnNonZero_F6B0: JSR ProcessResourceStateRoutine_F6FB ; CPU:$F6B0 PRG:36B0 20 FB F6 LDY #$00 ; CPU:$F6B3 PRG:36B3 A0 00 JSR ProcessResourceStateRoutine_F707 ; CPU:$F6B5 PRG:36B5 20 07 F7 LDA $0A ; CPU:$F6B8 PRG:36B8 A5 0A LDY #$03 ; CPU:$F6BA PRG:36BA A0 03 BNE EnginePathLoop_F661 ; CPU:$F6BC PRG:36BC D0 A3 EnginePathOnNegative_F6BE: BVC EnginePathOnOverflowClear_F6D4 ; CPU:$F6BE PRG:36BE 50 14 EnginePathOnOverflowSet_F6C0: TXA ; CPU:$F6C0 PRG:36C0 8A ADC $0B ; CPU:$F6C1 PRG:36C1 65 0B TAX ; CPU:$F6C3 PRG:36C3 AA DEX ; CPU:$F6C4 PRG:36C4 CA ASL $09 ; CPU:$F6C5 PRG:36C5 06 09 BCS EnginePathLoop_F69C ; CPU:$F6C7 PRG:36C7 B0 D3 LDA #$01 ; CPU:$F6C9 PRG:36C9 A9 01 STA $0A ; CPU:$F6CB PRG:36CB 85 0A LDA #$00 ; CPU:$F6CD PRG:36CD A9 00 SEC ; CPU:$F6CF PRG:36CF 38 SBC $06 ; CPU:$F6D0 PRG:36D0 E5 06 STA $06 ; CPU:$F6D2 PRG:36D2 85 06 EnginePathOnOverflowClear_F6D4: TXA ; CPU:$F6D4 PRG:36D4 8A LDX $04 ; CPU:$F6D5 PRG:36D5 A6 04 CLC ; CPU:$F6D7 PRG:36D7 18 ADC $06 ; CPU:$F6D8 PRG:36D8 65 06 CLC ; CPU:$F6DA PRG:36DA 18 ADC $0A ; CPU:$F6DB PRG:36DB 65 0A CMP ($02),Y ; CPU:$F6DD PRG:36DD D1 02 BNE EnginePathOnNonZero_F6E7 ; CPU:$F6DF PRG:36DF D0 06 RTS ; CPU:$F6E1 PRG:36E1 60 EnginePathLoop_F6E2: LDX $04 ; CPU:$F6E2 PRG:36E2 A6 04 EnginePathLoop_F6E4: CLC ; CPU:$F6E4 PRG:36E4 18 ADC $0A ; CPU:$F6E5 PRG:36E5 65 0A EnginePathOnNonZero_F6E7: STA ($02),Y ; CPU:$F6E7 PRG:36E7 91 02 INY ; CPU:$F6E9 PRG:36E9 C8 INY ; CPU:$F6EA PRG:36EA C8 INY ; CPU:$F6EB PRG:36EB C8 INY ; CPU:$F6EC PRG:36EC C8 DEX ; CPU:$F6ED PRG:36ED CA BNE EnginePathLoop_F6E4 ; CPU:$F6EE PRG:36EE D0 F4 CLC ; CPU:$F6F0 PRG:36F0 18 ADC $06 ; CPU:$F6F1 PRG:36F1 65 06 CLC ; CPU:$F6F3 PRG:36F3 18 ADC $06 ; CPU:$F6F4 PRG:36F4 65 06 DEC $05 ; CPU:$F6F6 PRG:36F6 C6 05 BNE EnginePathLoop_F6E2 ; CPU:$F6F8 PRG:36F8 D0 E8 RTS ; CPU:$F6FA PRG:36FA 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F6FB ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F6FB: LDX $0B ; CPU:$F6FB PRG:36FB A6 0B EnginePathLoop_F6FD: STA ($02),Y ; CPU:$F6FD PRG:36FD 91 02 INY ; CPU:$F6FF PRG:36FF C8 INY ; CPU:$F700 PRG:3700 C8 INY ; CPU:$F701 PRG:3701 C8 INY ; CPU:$F702 PRG:3702 C8 DEX ; CPU:$F703 PRG:3703 CA BNE EnginePathLoop_F6FD ; CPU:$F704 PRG:3704 D0 F7 RTS ; CPU:$F706 PRG:3706 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F707 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F707: LDA $08 ; CPU:$F707 PRG:3707 A5 08 LDX $04 ; CPU:$F709 PRG:3709 A6 04 EnginePathLoop_F70B: STA ($02),Y ; CPU:$F70B PRG:370B 91 02 INY ; CPU:$F70D PRG:370D C8 INY ; CPU:$F70E PRG:370E C8 INY ; CPU:$F70F PRG:370F C8 INY ; CPU:$F710 PRG:3710 C8 CLC ; CPU:$F711 PRG:3711 18 ADC #$08 ; CPU:$F712 PRG:3712 69 08 DEX ; CPU:$F714 PRG:3714 CA BNE EnginePathLoop_F70B ; CPU:$F715 PRG:3715 D0 F4 DEC $07 ; CPU:$F717 PRG:3717 C6 07 ;------------------------------------------------------------ ; EnginePath_F719 ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ EnginePath_F719: BNE ProcessResourceStateRoutine_F707 ; CPU:$F719 PRG:3719 D0 EC RTS ; CPU:$F71B PRG:371B 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F71C ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F71C: CLC ; CPU:$F71C PRG:371C 18 LDY #$00 ; CPU:$F71D PRG:371D A0 00 LDA ($00),Y ; CPU:$F71F PRG:371F B1 00 BNE EnginePathContinue_F77C ; CPU:$F721 PRG:3721 D0 59 LDA ($02),Y ; CPU:$F723 PRG:3723 B1 02 BNE EnginePathContinue_F77C ; CPU:$F725 PRG:3725 D0 55 LDY #$0C ; CPU:$F727 PRG:3727 A0 0C LDA ($02),Y ; CPU:$F729 PRG:3729 B1 02 LDY #$01 ; CPU:$F72B PRG:372B A0 01 ADC ($02),Y ; CPU:$F72D PRG:372D 71 02 STA $04 ; CPU:$F72F PRG:372F 85 04 LDA ($00),Y ; CPU:$F731 PRG:3731 B1 00 LDY #$0E ; CPU:$F733 PRG:3733 A0 0E CLC ; CPU:$F735 PRG:3735 18 ADC ($00),Y ; CPU:$F736 PRG:3736 71 00 CMP $04 ; CPU:$F738 PRG:3738 C5 04 BCC EnginePathContinue_F77C ; CPU:$F73A PRG:373A 90 40 LDY #$0C ; CPU:$F73C PRG:373C A0 0C LDA ($00),Y ; CPU:$F73E PRG:373E B1 00 LDY #$01 ; CPU:$F740 PRG:3740 A0 01 CLC ; CPU:$F742 PRG:3742 18 ADC ($00),Y ; CPU:$F743 PRG:3743 71 00 STA $04 ; CPU:$F745 PRG:3745 85 04 LDA ($02),Y ; CPU:$F747 PRG:3747 B1 02 LDY #$0E ; CPU:$F749 PRG:3749 A0 0E CLC ; CPU:$F74B PRG:374B 18 ADC ($02),Y ; CPU:$F74C PRG:374C 71 02 CMP $04 ; CPU:$F74E PRG:374E C5 04 BCC EnginePathContinue_F77C ; CPU:$F750 PRG:3750 90 2A LDY #$0D ; CPU:$F752 PRG:3752 A0 0D LDA ($02),Y ; CPU:$F754 PRG:3754 B1 02 LDY #$03 ; CPU:$F756 PRG:3756 A0 03 CLC ; CPU:$F758 PRG:3758 18 ADC ($02),Y ; CPU:$F759 PRG:3759 71 02 STA $04 ; CPU:$F75B PRG:375B 85 04 LDA ($00),Y ; CPU:$F75D PRG:375D B1 00 LDY #$0F ; CPU:$F75F PRG:375F A0 0F CLC ; CPU:$F761 PRG:3761 18 ADC ($00),Y ; CPU:$F762 PRG:3762 71 00 CMP $04 ; CPU:$F764 PRG:3764 C5 04 BCC EnginePathContinue_F77C ; CPU:$F766 PRG:3766 90 14 LDY #$0D ; CPU:$F768 PRG:3768 A0 0D LDA ($00),Y ; CPU:$F76A PRG:376A B1 00 LDY #$03 ; CPU:$F76C PRG:376C A0 03 CLC ; CPU:$F76E PRG:376E 18 ADC ($00),Y ; CPU:$F76F PRG:376F 71 00 STA $04 ; CPU:$F771 PRG:3771 85 04 LDA ($02),Y ; CPU:$F773 PRG:3773 B1 02 LDY #$0F ; CPU:$F775 PRG:3775 A0 0F CLC ; CPU:$F777 PRG:3777 18 ADC ($02),Y ; CPU:$F778 PRG:3778 71 02 CMP $04 ; CPU:$F77A PRG:377A C5 04 EnginePathContinue_F77C: RTS ; CPU:$F77C PRG:377C 60 ;------------------------------------------------------------ ; ProcessResourceStateRoutine_F77D ; ; Global: ; First-pass resource/input/collision entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessResourceStateRoutine_F77D: STA $00 ; CPU:$F77D PRG:377D 85 00 STX $01 ; CPU:$F77F PRG:377F 86 01 LDY #$04 ; CPU:$F781 PRG:3781 A0 04 LDA ($00),Y ; CPU:$F783 PRG:3783 B1 00 STA $03 ; CPU:$F785 PRG:3785 85 03 DEY ; CPU:$F787 PRG:3787 88 LDA ($00),Y ; CPU:$F788 PRG:3788 B1 00 STA $02 ; CPU:$F78A PRG:378A 85 02 DEY ; CPU:$F78C PRG:378C 88 LDA ($00),Y ; CPU:$F78D PRG:378D B1 00 STA $05 ; CPU:$F78F PRG:378F 85 05 DEY ; CPU:$F791 PRG:3791 88 LDA ($00),Y ; CPU:$F792 PRG:3792 B1 00 STA $04 ; CPU:$F794 PRG:3794 85 04 DEY ; CPU:$F796 PRG:3796 88 LDA ($00),Y ; CPU:$F797 PRG:3797 B1 00 STA $06 ; CPU:$F799 PRG:3799 85 06 LDA #$05 ; CPU:$F79B PRG:379B A9 05 EnginePathLoop_F79D: CLC ; CPU:$F79D PRG:379D 18 ADC a:$0000,Y ; CPU:$F79E PRG:379E 79 00 00 STA a:$0000,Y ; CPU:$F7A1 PRG:37A1 99 00 00 LDA #$00 ; CPU:$F7A4 PRG:37A4 A9 00 ADC a:$0001,Y ; CPU:$F7A6 PRG:37A6 79 01 00 STA a:$0001,Y ; CPU:$F7A9 PRG:37A9 99 01 00 LDY #$00 ; CPU:$F7AC PRG:37AC A0 00 LDX $05 ; CPU:$F7AE PRG:37AE A6 05 EnginePathLoop_F7B0: LDA ($00),Y ; CPU:$F7B0 PRG:37B0 B1 00 STA ($02),Y ; CPU:$F7B2 PRG:37B2 91 02 INY ; CPU:$F7B4 PRG:37B4 C8 DEX ; CPU:$F7B5 PRG:37B5 CA BNE EnginePathLoop_F7B0 ; CPU:$F7B6 PRG:37B6 D0 F8 LDA $06 ; CPU:$F7B8 PRG:37B8 A5 06 LDY #$02 ; CPU:$F7BA PRG:37BA A0 02 DEC $04 ; CPU:$F7BC PRG:37BC C6 04 BNE EnginePathLoop_F79D ; CPU:$F7BE PRG:37BE D0 DD RTS ; CPU:$F7C0 PRG:37C0 60 ;------------------------------------------------------------ ; Audio driver code and embedded tables ; CPU $F7C1-$FC77 ; PRG $37C1-$3C77 ; ; Pass 1 recursively traced from AudioDriverCode ($F7C1). ; Direct branches, jumps, and subroutine calls are decoded. ; Bytes not reached by that trace remain explicit .byte data. ;------------------------------------------------------------ ;------------------------------------------------------------ ; AudioDriverCode ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ AudioDriverCode: LDA #$FF ; CPU:$F7C1 PRG:37C1 A9 FF STA JOY2 ; CPU:$F7C3 PRG:37C3 8D 17 40 JSR ProcessAudioStateRoutine_F898 ; CPU:$F7C6 PRG:37C6 20 98 F8 JSR ProcessAudioStateRoutine_FA2E ; CPU:$F7C9 PRG:37C9 20 2E FA JSR ProcessAudioStateRoutine_FACF ; CPU:$F7CC PRG:37CC 20 CF FA JSR ProcessAudioStateRoutine_FB22 ; CPU:$F7CF PRG:37CF 20 22 FB LDA #$00 ; CPU:$F7D2 PRG:37D2 A9 00 STA AudioRequest4 ; CPU:$F7D4 PRG:37D4 85 FF STA AudioRequest3 ; CPU:$F7D6 PRG:37D6 85 FE STA AudioRequest1 ; CPU:$F7D8 PRG:37D8 85 FC STA AudioRequest0 ; CPU:$F7DA PRG:37DA 85 FB LDY $07FE ; CPU:$F7DC PRG:37DC AC FE 07 LDA AudioNoiseState ; CPU:$F7DF PRG:37DF A5 F3 AND #$1C ; CPU:$F7E1 PRG:37E1 29 1C BEQ AudioPathOnZero_F7EC ; CPU:$F7E3 PRG:37E3 F0 07 INC $07FE ; CPU:$F7E5 PRG:37E5 EE FE 07 CPY #$50 ; CPU:$F7E8 PRG:37E8 C0 50 BCC AudioPathContinue_F7F2 ; CPU:$F7EA PRG:37EA 90 06 AudioPathOnZero_F7EC: TYA ; CPU:$F7EC PRG:37EC 98 BEQ AudioPathContinue_F7F2 ; CPU:$F7ED PRG:37ED F0 03 DEC $07FE ; CPU:$F7EF PRG:37EF CE FE 07 AudioPathContinue_F7F2: STY $4011 ; CPU:$F7F2 PRG:37F2 8C 11 40 RTS ; CPU:$F7F5 PRG:37F5 60 ;------------------------------------------------------------ ; UpdatePulse1Routine_F7F6 ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdatePulse1Routine_F7F6: STX SQ1_VOL ; CPU:$F7F6 PRG:37F6 8E 00 40 STY SQ1_SWEEP ; CPU:$F7F9 PRG:37F9 8C 01 40 RTS ; CPU:$F7FC PRG:37FC 60 ;------------------------------------------------------------ ; ProcessAudioStateRoutine_F7FD ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessAudioStateRoutine_F7FD: JSR UpdatePulse1Routine_F7F6 ; CPU:$F7FD PRG:37FD 20 F6 F7 ;------------------------------------------------------------ ; ProcessAudioStateRoutine_F800 ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessAudioStateRoutine_F800: LDX #$00 ; CPU:$F800 PRG:3800 A2 00 UpdatePulse1Loop_F802: TAY ; CPU:$F802 PRG:3802 A8 LDA $FF01,Y ; CPU:$F803 PRG:3803 B9 01 FF BEQ AudioPathOnZero_F813 ; CPU:$F806 PRG:3806 F0 0B STA SQ1_LO,X ; CPU:$F808 PRG:3808 9D 02 40 LDA $FF00,Y ; CPU:$F80B PRG:380B B9 00 FF ORA #$08 ; CPU:$F80E PRG:380E 09 08 STA SQ1_HI,X ; CPU:$F810 PRG:3810 9D 03 40 AudioPathOnZero_F813: RTS ; CPU:$F813 PRG:3813 60 ;------------------------------------------------------------ ; ProcessAudioStateRoutine_F814 ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessAudioStateRoutine_F814: LDX #$04 ; CPU:$F814 PRG:3814 A2 04 BNE UpdatePulse1Loop_F802 ; CPU:$F816 PRG:3816 D0 EA ;------------------------------------------------------------ ; ProcessAudioStateRoutine_F818 ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessAudioStateRoutine_F818: LDX #$08 ; CPU:$F818 PRG:3818 A2 08 BNE UpdatePulse1Loop_F802 ; CPU:$F81A PRG:381A D0 E6 STY $7E85 ; CPU:$F81C PRG:381C 8C 85 7E .byte $77, $70, $69, $62, $5B, $54, $4D, $46, $3F, $38, $31, $2A, $23, $04, $0E, $04 ; CPU:$F81F PRG:381F 0B .byte $2E, $0E, $2E, $2C, $0E, $2C, $2A, $0E, $2A, $28, $2C, $28, $26, $91, $91, $51 ; CPU:$F82F PRG:382F 0B .byte $92, $92, $92, $53, $93, $93, $93, $54, $94, $94, $54, $54, $95, $95, $95, $55 ; CPU:$F83F PRG:383F 0B .byte $95, $95, $96, $56, $96, $96, $97, $57, $97, $97, $57, $57, $98, $98, $98, $58 ; CPU:$F84F PRG:384F 0B .byte $98, $99, $99, $59, $9A, $9A, $9B, $5C, $9D, $9E, $5A, $5A ; CPU:$F85F PRG:385F 0B AudioPathLoop_F86B: STY AudioPulse1State ; CPU:$F86B PRG:386B 84 F0 LDA #$8C ; CPU:$F86D PRG:386D A9 8C STA AudioPeriodOrEnvelope ; CPU:$F86F PRG:386F 85 F4 AudioPathLoop_F871: LDA AudioPeriodOrEnvelope ; CPU:$F871 PRG:3871 A5 F4 LDY #$10 ; CPU:$F873 PRG:3873 A0 10 AudioPathLoop_F875: CMP $F81B,Y ; CPU:$F875 PRG:3875 D9 1B F8 BNE AudioPathOnNonZero_F881 ; CPU:$F878 PRG:3878 D0 07 LDA $F82B,Y ; CPU:$F87A PRG:387A B9 2B F8 LDY #$7F ; CPU:$F87D PRG:387D A0 7F BNE AudioPathOnNonZero_F890 ; CPU:$F87F PRG:387F D0 0F AudioPathOnNonZero_F881: DEY ; CPU:$F881 PRG:3881 88 BNE AudioPathLoop_F875 ; CPU:$F882 PRG:3882 D0 F1 CMP #$16 ; CPU:$F884 PRG:3884 C9 16 BCS AudioPathContinue_F895 ; CPU:$F886 PRG:3886 B0 0D AND #$03 ; CPU:$F888 PRG:3888 29 03 BNE AudioPathContinue_F895 ; CPU:$F88A PRG:388A D0 09 LDY #$A3 ; CPU:$F88C PRG:388C A0 A3 LDA #$2A ; CPU:$F88E PRG:388E A9 2A AudioPathOnNonZero_F890: LDX #$9F ; CPU:$F890 PRG:3890 A2 9F JSR ProcessAudioStateRoutine_F7FD ; CPU:$F892 PRG:3892 20 FD F7 AudioPathContinue_F895: JMP ProcessAudioStateDispatch_F9CB ; CPU:$F895 PRG:3895 4C CB F9 ;------------------------------------------------------------ ; ProcessAudioStateRoutine_F898 ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessAudioStateRoutine_F898: LDY AudioRequest4 ; CPU:$F898 PRG:3898 A4 FF LDA $F0 ; CPU:$F89A PRG:389A A5 F0 LSR AudioRequest4 ; CPU:$F89C PRG:389C 46 FF BCS AudioPathLoop_F86B ; CPU:$F89E PRG:389E B0 CB LSR A ; CPU:$F8A0 PRG:38A0 4A BCS AudioPathLoop_F871 ; CPU:$F8A1 PRG:38A1 B0 CE LSR AudioRequest4 ; CPU:$F8A3 PRG:38A3 46 FF BCC UpdatePulse1OnNoCarry_F8F9 ; CPU:$F8A5 PRG:38A5 90 52 STY AudioPulse1State ; CPU:$F8A7 PRG:38A7 84 F0 LDA #$2F ; CPU:$F8A9 PRG:38A9 A9 2F STA $07F4 ; CPU:$F8AB PRG:38AB 8D F4 07 LDX #$5F ; CPU:$F8AE PRG:38AE A2 5F LDY #$93 ; CPU:$F8B0 PRG:38B0 A0 93 JSR UpdatePulse1Routine_F7F6 ; CPU:$F8B2 PRG:38B2 20 F6 F7 AudioPathLoop_F8B5: LDA $07F4 ; CPU:$F8B5 PRG:38B5 AD F4 07 CMP #$C0 ; CPU:$F8B8 PRG:38B8 C9 C0 BCC AudioPathOnNoCarry_F8BD ; CPU:$F8BA PRG:38BA 90 01 LSR A ; CPU:$F8BC PRG:38BC 4A AudioPathOnNoCarry_F8BD: LSR A ; CPU:$F8BD PRG:38BD 4A LSR A ; CPU:$F8BE PRG:38BE 4A LSR A ; CPU:$F8BF PRG:38BF 4A LSR A ; CPU:$F8C0 PRG:38C0 4A CLC ; CPU:$F8C1 PRG:38C1 18 ADC $07F4 ; CPU:$F8C2 PRG:38C2 6D F4 07 BCC UpdatePulse1OnNoCarry_F8EA ; CPU:$F8C5 PRG:38C5 90 23 AudioPathLoop_F8C7: JMP ProcessAudioStateDispatch_F9CF ; CPU:$F8C7 PRG:38C7 4C CF F9 AudioPathLoop_F8CA: STY AudioPulse1State ; CPU:$F8CA PRG:38CA 84 F0 LDA #$FE ; CPU:$F8CC PRG:38CC A9 FE STA $07F4 ; CPU:$F8CE PRG:38CE 8D F4 07 LDX #$5C ; CPU:$F8D1 PRG:38D1 A2 5C LDY #$BA ; CPU:$F8D3 PRG:38D3 A0 BA JSR UpdatePulse1Routine_F7F6 ; CPU:$F8D5 PRG:38D5 20 F6 F7 AudioPathLoop_F8D8: LDA $07F4 ; CPU:$F8D8 PRG:38D8 AD F4 07 LSR A ; CPU:$F8DB PRG:38DB 4A LSR A ; CPU:$F8DC PRG:38DC 4A LSR A ; CPU:$F8DD PRG:38DD 4A BNE AudioPathOnNonZero_F8E2 ; CPU:$F8DE PRG:38DE D0 02 LDA #$01 ; CPU:$F8E0 PRG:38E0 A9 01 AudioPathOnNonZero_F8E2: EOR #$FF ; CPU:$F8E2 PRG:38E2 49 FF SEC ; CPU:$F8E4 PRG:38E4 38 ADC $07F4 ; CPU:$F8E5 PRG:38E5 6D F4 07 BCC AudioPathLoop_F8C7 ; CPU:$F8E8 PRG:38E8 90 DD UpdatePulse1OnNoCarry_F8EA: STA $07F4 ; CPU:$F8EA PRG:38EA 8D F4 07 ROL A ; CPU:$F8ED PRG:38ED 2A ROL A ; CPU:$F8EE PRG:38EE 2A STA SQ1_LO ; CPU:$F8EF PRG:38EF 8D 02 40 ROL A ; CPU:$F8F2 PRG:38F2 2A AND #$03 ; CPU:$F8F3 PRG:38F3 29 03 STA SQ1_HI ; CPU:$F8F5 PRG:38F5 8D 03 40 RTS ; CPU:$F8F8 PRG:38F8 60 UpdatePulse1OnNoCarry_F8F9: LSR A ; CPU:$F8F9 PRG:38F9 4A BCS AudioPathLoop_F8B5 ; CPU:$F8FA PRG:38FA B0 B9 LSR AudioRequest4 ; CPU:$F8FC PRG:38FC 46 FF BCS AudioPathLoop_F8CA ; CPU:$F8FE PRG:38FE B0 CA LSR A ; CPU:$F900 PRG:3900 4A BCS AudioPathLoop_F8D8 ; CPU:$F901 PRG:3901 B0 D5 LSR AudioRequest4 ; CPU:$F903 PRG:3903 46 FF BCC UpdatePulse1OnNoCarry_F95F ; CPU:$F905 PRG:3905 90 58 STY AudioPulse1State ; CPU:$F907 PRG:3907 84 F0 LDA #$3A ; CPU:$F909 PRG:3909 A9 3A STA AudioPeriodOrEnvelope ; CPU:$F90B PRG:390B 85 F4 LDA #$6A ; CPU:$F90D PRG:390D A9 6A STA $07F4 ; CPU:$F90F PRG:390F 8D F4 07 LDA #$82 ; CPU:$F912 PRG:3912 A9 82 STA SQ1_SWEEP ; CPU:$F914 PRG:3914 8D 01 40 UpdatePulse1Loop_F917: LDA AudioPeriodOrEnvelope ; CPU:$F917 PRG:3917 A5 F4 CMP #$34 ; CPU:$F919 PRG:3919 C9 34 BCC UpdatePulse1OnNoCarry_F935 ; CPU:$F91B PRG:391B 90 18 BEQ UpdatePulse1OnZero_F92B ; CPU:$F91D PRG:391D F0 0C ORA #$90 ; CPU:$F91F PRG:391F 09 90 STA SQ1_VOL ; CPU:$F921 PRG:3921 8D 00 40 LDA $07F4 ; CPU:$F924 PRG:3924 AD F4 07 SBC #$FC ; CPU:$F927 PRG:3927 E9 FC BNE UpdatePulse1OnNonZero_F94D ; CPU:$F929 PRG:3929 D0 22 UpdatePulse1OnZero_F92B: LDX #$FF ; CPU:$F92B PRG:392B A2 FF STX $07F4 ; CPU:$F92D PRG:392D 8E F4 07 LDY #$8C ; CPU:$F930 PRG:3930 A0 8C STY SQ1_SWEEP ; CPU:$F932 PRG:3932 8C 01 40 UpdatePulse1OnNoCarry_F935: LSR A ; CPU:$F935 PRG:3935 4A LSR A ; CPU:$F936 PRG:3936 4A ORA #$90 ; CPU:$F937 PRG:3937 09 90 STA SQ1_VOL ; CPU:$F939 PRG:3939 8D 00 40 LDA AudioPeriodOrEnvelope ; CPU:$F93C PRG:393C A5 F4 AND #$03 ; CPU:$F93E PRG:393E 29 03 BNE AudioPathOnNonZero_F95C ; CPU:$F940 PRG:3940 D0 1A LDA $07F4 ; CPU:$F942 PRG:3942 AD F4 07 LSR A ; CPU:$F945 PRG:3945 4A LSR A ; CPU:$F946 PRG:3946 4A LSR A ; CPU:$F947 PRG:3947 4A LSR A ; CPU:$F948 PRG:3948 4A SEC ; CPU:$F949 PRG:3949 38 SBC $07F4 ; CPU:$F94A PRG:394A ED F4 07 UpdatePulse1OnNonZero_F94D: STA $07F4 ; CPU:$F94D PRG:394D 8D F4 07 ROL A ; CPU:$F950 PRG:3950 2A ROL A ; CPU:$F951 PRG:3951 2A ROL A ; CPU:$F952 PRG:3952 2A STA SQ1_LO ; CPU:$F953 PRG:3953 8D 02 40 ROL A ; CPU:$F956 PRG:3956 2A AND #$07 ; CPU:$F957 PRG:3957 29 07 STA SQ1_HI ; CPU:$F959 PRG:3959 8D 03 40 AudioPathOnNonZero_F95C: JMP ProcessAudioStateDispatch_F9CB ; CPU:$F95C PRG:395C 4C CB F9 UpdatePulse1OnNoCarry_F95F: LSR A ; CPU:$F95F PRG:395F 4A BCS UpdatePulse1Loop_F917 ; CPU:$F960 PRG:3960 B0 B5 LSR $FF ; CPU:$F962 PRG:3962 46 FF BCC AudioPathOnNoCarry_F9D9 ; CPU:$F964 PRG:3964 90 73 STY $F0 ; CPU:$F966 PRG:3966 84 F0 LDA #$30 ; CPU:$F968 PRG:3968 A9 30 STA AudioPeriodOrEnvelope ; CPU:$F96A PRG:396A 85 F4 LDA #$8A ; CPU:$F96C PRG:396C A9 8A STA SQ1_SWEEP ; CPU:$F96E PRG:396E 8D 01 40 AudioPathLoop_F971: LDY $F4 ; CPU:$F971 PRG:3971 A4 F4 LDA $F83A,Y ; CPU:$F973 PRG:3973 B9 3A F8 UpdatePulse1Dispatch_F976: LDX $F83A,Y ; CPU:$F976 PRG:3976 BE 3A F8 STX SQ1_VOL ; CPU:$F979 PRG:3979 8E 00 40 BNE UpdatePulse1OnNonZero_F9C3 ; CPU:$F97C PRG:397C D0 45 AudioPathLoop_F97E: STY $F0 ; CPU:$F97E PRG:397E 84 F0 LDA #$28 ; CPU:$F980 PRG:3980 A9 28 STA $F4 ; CPU:$F982 PRG:3982 85 F4 LDX #$82 ; CPU:$F984 PRG:3984 A2 82 LDY #$A7 ; CPU:$F986 PRG:3986 A0 A7 LDA #$30 ; CPU:$F988 PRG:3988 A9 30 JSR ProcessAudioStateRoutine_F7FD ; CPU:$F98A PRG:398A 20 FD F7 AudioPathLoop_F98D: LDA $F4 ; CPU:$F98D PRG:398D A5 F4 CMP #$25 ; CPU:$F98F PRG:398F C9 25 BNE AudioPathOnNonZero_F999 ; CPU:$F991 PRG:3991 D0 06 LDX #$5F ; CPU:$F993 PRG:3993 A2 5F LDY #$F6 ; CPU:$F995 PRG:3995 A0 F6 BNE AudioPathOnNonZero_F9A9 ; CPU:$F997 PRG:3997 D0 10 AudioPathOnNonZero_F999: CMP #$20 ; CPU:$F999 PRG:3999 C9 20 BNE AudioPathOnNonZero_F9A1 ; CPU:$F99B PRG:399B D0 04 LDY #$BC ; CPU:$F99D PRG:399D A0 BC BNE AudioPathOnNonZero_F9A7 ; CPU:$F99F PRG:399F D0 06 AudioPathOnNonZero_F9A1: CMP #$10 ; CPU:$F9A1 PRG:39A1 C9 10 BNE ProcessAudioStateDispatch_F9CB ; CPU:$F9A3 PRG:39A3 D0 26 LDY #$9C ; CPU:$F9A5 PRG:39A5 A0 9C AudioPathOnNonZero_F9A7: LDX #$48 ; CPU:$F9A7 PRG:39A7 A2 48 AudioPathOnNonZero_F9A9: JSR UpdatePulse1Routine_F7F6 ; CPU:$F9A9 PRG:39A9 20 F6 F7 BNE ProcessAudioStateDispatch_F9CB ; CPU:$F9AC PRG:39AC D0 1D AudioPathLoop_F9AE: STY $F0 ; CPU:$F9AE PRG:39AE 84 F0 LDA #$17 ; CPU:$F9B0 PRG:39B0 A9 17 STA $F4 ; CPU:$F9B2 PRG:39B2 85 F4 LDX #$5F ; CPU:$F9B4 PRG:39B4 A2 5F LDY #$7F ; CPU:$F9B6 PRG:39B6 A0 7F JSR UpdatePulse1Routine_F7F6 ; CPU:$F9B8 PRG:39B8 20 F6 F7 AudioPathLoop_F9BB: LDA $F4 ; CPU:$F9BB PRG:39BB A5 F4 AND #$07 ; CPU:$F9BD PRG:39BD 29 07 TAY ; CPU:$F9BF PRG:39BF A8 LDA $FFC2,Y ; CPU:$F9C0 PRG:39C0 B9 C2 FF UpdatePulse1OnNonZero_F9C3: STA SQ1_LO ; CPU:$F9C3 PRG:39C3 8D 02 40 LDA #$08 ; CPU:$F9C6 PRG:39C6 A9 08 STA SQ1_HI ; CPU:$F9C8 PRG:39C8 8D 03 40 ProcessAudioStateDispatch_F9CB: DEC $F4 ; CPU:$F9CB PRG:39CB C6 F4 BNE AudioPathOnNonZero_F9D8 ; CPU:$F9CD PRG:39CD D0 09 ProcessAudioStateDispatch_F9CF: LDA #$00 ; CPU:$F9CF PRG:39CF A9 00 STA $F0 ; CPU:$F9D1 PRG:39D1 85 F0 ;------------------------------------------------------------ ; UpdatePulse1Routine_F9D3 ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdatePulse1Routine_F9D3: LDA #$90 ; CPU:$F9D3 PRG:39D3 A9 90 STA SQ1_VOL ; CPU:$F9D5 PRG:39D5 8D 00 40 AudioPathOnNonZero_F9D8: RTS ; CPU:$F9D8 PRG:39D8 60 AudioPathOnNoCarry_F9D9: LSR A ; CPU:$F9D9 PRG:39D9 4A BCS AudioPathLoop_F971 ; CPU:$F9DA PRG:39DA B0 95 LSR $FF ; CPU:$F9DC PRG:39DC 46 FF BCS AudioPathLoop_F97E ; CPU:$F9DE PRG:39DE B0 9E LSR A ; CPU:$F9E0 PRG:39E0 4A BCS AudioPathLoop_F98D ; CPU:$F9E1 PRG:39E1 B0 AA LSR $FF ; CPU:$F9E3 PRG:39E3 46 FF BCS AudioPathLoop_F9AE ; CPU:$F9E5 PRG:39E5 B0 C7 LSR A ; CPU:$F9E7 PRG:39E7 4A BCS AudioPathLoop_F9BB ; CPU:$F9E8 PRG:39E8 B0 D1 LSR $FF ; CPU:$F9EA PRG:39EA 46 FF BCS AudioPathOnCarry_F9F2 ; CPU:$F9EC PRG:39EC B0 04 LSR A ; CPU:$F9EE PRG:39EE 4A BCS AudioPathOnCarry_F9FC ; CPU:$F9EF PRG:39EF B0 0B RTS ; CPU:$F9F1 PRG:39F1 60 AudioPathOnCarry_F9F2: STY $F0 ; CPU:$F9F2 PRG:39F2 84 F0 LDA #$20 ; CPU:$F9F4 PRG:39F4 A9 20 STA $F4 ; CPU:$F9F6 PRG:39F6 85 F4 LDA #$8A ; CPU:$F9F8 PRG:39F8 A9 8A BNE UpdatePulse1OnNonZero_FA04 ; CPU:$F9FA PRG:39FA D0 08 AudioPathOnCarry_F9FC: LDY $F4 ; CPU:$F9FC PRG:39FC A4 F4 CPY #$19 ; CPU:$F9FE PRG:39FE C0 19 BNE AudioPathOnNonZero_FA07 ; CPU:$FA00 PRG:3A00 D0 05 LDA #$82 ; CPU:$FA02 PRG:3A02 A9 82 UpdatePulse1OnNonZero_FA04: STA SQ1_SWEEP ; CPU:$FA04 PRG:3A04 8D 01 40 AudioPathOnNonZero_FA07: LDA #$47 ; CPU:$FA07 PRG:3A07 A9 47 JMP UpdatePulse1Dispatch_F976 ; CPU:$FA09 PRG:3A09 4C 76 F9 ;------------------------------------------------------------ ; UpdatePulse2Routine_FA0C ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ UpdatePulse2Routine_FA0C: STY $F1 ; CPU:$FA0C PRG:3A0C 84 F1 STX $07FF ; CPU:$FA0E PRG:3A0E 8E FF 07 LDA #$9F ; CPU:$FA11 PRG:3A11 A9 9F STA SQ2_VOL ; CPU:$FA13 PRG:3A13 8D 04 40 LDA #$7F ; CPU:$FA16 PRG:3A16 A9 7F STA SQ2_SWEEP ; CPU:$FA18 PRG:3A18 8D 05 40 LDA #$08 ; CPU:$FA1B PRG:3A1B A9 08 STA SQ2_HI ; CPU:$FA1D PRG:3A1D 8D 07 40 RTS ; CPU:$FA20 PRG:3A20 60 AudioPathLoop_FA21: LDX #$08 ; CPU:$FA21 PRG:3A21 A2 08 JSR UpdatePulse2Routine_FA0C ; CPU:$FA23 PRG:3A23 20 0C FA AudioPathLoop_FA26: LDY $07FF ; CPU:$FA26 PRG:3A26 AC FF 07 LDA $FFB9,Y ; CPU:$FA29 PRG:3A29 B9 B9 FF BNE UpdatePulse2OnNonZero_FA4E ; CPU:$FA2C PRG:3A2C D0 20 ;------------------------------------------------------------ ; ProcessAudioStateRoutine_FA2E ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessAudioStateRoutine_FA2E: LDY $FE ; CPU:$FA2E PRG:3A2E A4 FE LDA $F1 ; CPU:$FA30 PRG:3A30 A5 F1 LSR $FE ; CPU:$FA32 PRG:3A32 46 FE BCS AudioPathLoop_FA21 ; CPU:$FA34 PRG:3A34 B0 EB LSR A ; CPU:$FA36 PRG:3A36 4A BCS AudioPathLoop_FA26 ; CPU:$FA37 PRG:3A37 B0 ED LSR $FE ; CPU:$FA39 PRG:3A39 46 FE BCS AudioPathOnCarry_FA41 ; CPU:$FA3B PRG:3A3B B0 04 LSR A ; CPU:$FA3D PRG:3A3D 4A BCS AudioPathOnCarry_FA46 ; CPU:$FA3E PRG:3A3E B0 06 RTS ; CPU:$FA40 PRG:3A40 60 AudioPathOnCarry_FA41: LDX #$23 ; CPU:$FA41 PRG:3A41 A2 23 JSR UpdatePulse2Routine_FA0C ; CPU:$FA43 PRG:3A43 20 0C FA AudioPathOnCarry_FA46: LDA $07FF ; CPU:$FA46 PRG:3A46 AD FF 07 LSR A ; CPU:$FA49 PRG:3A49 4A TAY ; CPU:$FA4A PRG:3A4A A8 LDA $FA5B,Y ; CPU:$FA4B PRG:3A4B B9 5B FA UpdatePulse2OnNonZero_FA4E: STA SQ2_LO ; CPU:$FA4E PRG:3A4E 8D 06 40 DEC $07FF ; CPU:$FA51 PRG:3A51 CE FF 07 BNE AudioPathOnNonZero_FA5A ; CPU:$FA54 PRG:3A54 D0 04 LDA #$00 ; CPU:$FA56 PRG:3A56 A9 00 STA $F1 ; CPU:$FA58 PRG:3A58 85 F1 AudioPathOnNonZero_FA5A: RTS ; CPU:$FA5A PRG:3A5A 60 .byte $00, $54, $00, $5F, $00, $6A, $00, $71, $00, $6A, $00, $71, $00, $7E, $00, $86 ; CPU:$FA5B PRG:3A5B 0B .byte $00, $7E, $10, $12, $12, $12, $15, $15, $15, $13, $13, $13, $13, $16, $16, $16 ; CPU:$FA6B PRG:3A6B 0B .byte $16, $16, $14, $14, $14, $14, $17, $17, $17, $17, $15, $15, $15, $15, $18, $19 ; CPU:$FA7B PRG:3A7B 0B .byte $19, $1A, $1A, $1A, $1B, $1B, $1C, $1D, $1E, $1F, $13, $15, $16, $16, $18, $18 ; CPU:$FA8B PRG:3A8B 0B .byte $1A, $1A, $07, $05, $05, $05, $05, $05, $06, $06, $06, $04, $04, $04, $04, $05 ; CPU:$FA9B PRG:3A9B 0B .byte $05, $05, $09, $09, $0A, $0A, $07, $07, $08, $08 ; CPU:$FAAB PRG:3AAB 0B AudioPathLoop_FAB5: STY $F2 ; CPU:$FAB5 PRG:3AB5 84 F2 LDA #$30 ; CPU:$FAB7 PRG:3AB7 A9 30 STA $07FB ; CPU:$FAB9 PRG:3AB9 8D FB 07 UpdateNoiseLoop_FABC: LDY $07FB ; CPU:$FABC PRG:3ABC AC FB 07 LDA $FA6C,Y ; CPU:$FABF PRG:3ABF B9 6C FA STA NOISE_VOL ; CPU:$FAC2 PRG:3AC2 8D 0C 40 LDA $07FB ; CPU:$FAC5 PRG:3AC5 AD FB 07 LSR A ; CPU:$FAC8 PRG:3AC8 4A TAY ; CPU:$FAC9 PRG:3AC9 A8 LDA $FA9C,Y ; CPU:$FACA PRG:3ACA B9 9C FA BNE UpdateNoiseOnNonZero_FB10 ; CPU:$FACD PRG:3ACD D0 41 ;------------------------------------------------------------ ; ProcessAudioStateRoutine_FACF ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessAudioStateRoutine_FACF: LDY $FC ; CPU:$FACF PRG:3ACF A4 FC LDA $F2 ; CPU:$FAD1 PRG:3AD1 A5 F2 LSR $FC ; CPU:$FAD3 PRG:3AD3 46 FC BCS AudioPathLoop_FAB5 ; CPU:$FAD5 PRG:3AD5 B0 DE LSR A ; CPU:$FAD7 PRG:3AD7 4A BCS UpdateNoiseLoop_FABC ; CPU:$FAD8 PRG:3AD8 B0 E2 LSR $FC ; CPU:$FADA PRG:3ADA 46 FC BCS AudioPathOnCarry_FAE9 ; CPU:$FADC PRG:3ADC B0 0B LSR A ; CPU:$FADE PRG:3ADE 4A BCS UpdateNoiseOnCarry_FAF0 ; CPU:$FADF PRG:3ADF B0 0F LSR $FC ; CPU:$FAE1 PRG:3AE1 46 FC BCS AudioPathOnCarry_FAFE ; CPU:$FAE3 PRG:3AE3 B0 19 LSR A ; CPU:$FAE5 PRG:3AE5 4A BCS UpdateNoiseOnCarry_FB05 ; CPU:$FAE6 PRG:3AE6 B0 1D RTS ; CPU:$FAE8 PRG:3AE8 60 AudioPathOnCarry_FAE9: STY $F2 ; CPU:$FAE9 PRG:3AE9 84 F2 LDA #$20 ; CPU:$FAEB PRG:3AEB A9 20 STA $07FB ; CPU:$FAED PRG:3AED 8D FB 07 UpdateNoiseOnCarry_FAF0: LDY $07FB ; CPU:$FAF0 PRG:3AF0 AC FB 07 LDA $FF50,Y ; CPU:$FAF3 PRG:3AF3 B9 50 FF STA NOISE_VOL ; CPU:$FAF6 PRG:3AF6 8D 0C 40 LDA $FF70,Y ; CPU:$FAF9 PRG:3AF9 B9 70 FF BNE UpdateNoiseOnNonZero_FB10 ; CPU:$FAFC PRG:3AFC D0 12 AudioPathOnCarry_FAFE: STY $F2 ; CPU:$FAFE PRG:3AFE 84 F2 LDA #$09 ; CPU:$FB00 PRG:3B00 A9 09 STA $07FB ; CPU:$FB02 PRG:3B02 8D FB 07 UpdateNoiseOnCarry_FB05: LDY $07FB ; CPU:$FB05 PRG:3B05 AC FB 07 LDA $FF90,Y ; CPU:$FB08 PRG:3B08 B9 90 FF STA NOISE_VOL ; CPU:$FB0B PRG:3B0B 8D 0C 40 LDA #$04 ; CPU:$FB0E PRG:3B0E A9 04 UpdateNoiseOnNonZero_FB10: STA NOISE_LO ; CPU:$FB10 PRG:3B10 8D 0E 40 LDA #$08 ; CPU:$FB13 PRG:3B13 A9 08 STA NOISE_HI ; CPU:$FB15 PRG:3B15 8D 0F 40 DEC $07FB ; CPU:$FB18 PRG:3B18 CE FB 07 BNE AudioPathOnNonZero_FB21 ; CPU:$FB1B PRG:3B1B D0 04 LDA #$00 ; CPU:$FB1D PRG:3B1D A9 00 STA $F2 ; CPU:$FB1F PRG:3B1F 85 F2 AudioPathOnNonZero_FB21: RTS ; CPU:$FB21 PRG:3B21 60 ;------------------------------------------------------------ ; ProcessAudioStateRoutine_FB22 ; ; Global: ; First-pass audio-driver entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the audio naming pass. ; ; Parameters: ; Audio workspace and APU register state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessAudioStateRoutine_FB22: LDA $FB ; CPU:$FB22 PRG:3B22 A5 FB BNE AudioPathLoop_FB2B ; CPU:$FB24 PRG:3B24 D0 05 LDA $F3 ; CPU:$FB26 PRG:3B26 A5 F3 BNE AudioPathOnNonZero_FB6E ; CPU:$FB28 PRG:3B28 D0 44 RTS ; CPU:$FB2A PRG:3B2A 60 AudioPathLoop_FB2B: STA $F3 ; CPU:$FB2B PRG:3B2B 85 F3 LDY #$00 ; CPU:$FB2D PRG:3B2D A0 00 STY $F8 ; CPU:$FB2F PRG:3B2F 84 F8 UpdatePulse1Loop_FB31: INY ; CPU:$FB31 PRG:3B31 C8 LSR A ; CPU:$FB32 PRG:3B32 4A BCC UpdatePulse1Loop_FB31 ; CPU:$FB33 PRG:3B33 90 FC LDA $FC64,Y ; CPU:$FB35 PRG:3B35 B9 64 FC TAY ; CPU:$FB38 PRG:3B38 A8 LDA $FC65,Y ; CPU:$FB39 PRG:3B39 B9 65 FC STA $F5 ; CPU:$FB3C PRG:3B3C 85 F5 LDA $FC66,Y ; CPU:$FB3E PRG:3B3E B9 66 FC STA $F6 ; CPU:$FB41 PRG:3B41 85 F6 LDA $FC67,Y ; CPU:$FB43 PRG:3B43 B9 67 FC STA $F7 ; CPU:$FB46 PRG:3B46 85 F7 LDA $FC68,Y ; CPU:$FB48 PRG:3B48 B9 68 FC STA $FA ; CPU:$FB4B PRG:3B4B 85 FA LDA $FC69,Y ; CPU:$FB4D PRG:3B4D B9 69 FC STA $F9 ; CPU:$FB50 PRG:3B50 85 F9 LDA $FC6A,Y ; CPU:$FB52 PRG:3B52 B9 6A FC STA $07F2 ; CPU:$FB55 PRG:3B55 8D F2 07 LDA #$01 ; CPU:$FB58 PRG:3B58 A9 01 STA $07EE ; CPU:$FB5A PRG:3B5A 8D EE 07 STA $07F0 ; CPU:$FB5D PRG:3B5D 8D F0 07 STA $07F1 ; CPU:$FB60 PRG:3B60 8D F1 07 STA $07F3 ; CPU:$FB63 PRG:3B63 8D F3 07 LDA #$7F ; CPU:$FB66 PRG:3B66 A9 7F STA SQ1_SWEEP ; CPU:$FB68 PRG:3B68 8D 01 40 STA SQ2_SWEEP ; CPU:$FB6B PRG:3B6B 8D 05 40 AudioPathOnNonZero_FB6E: DEC $07EE ; CPU:$FB6E PRG:3B6E CE EE 07 BNE AudioPathOnNonZero_FBBD ; CPU:$FB71 PRG:3B71 D0 4A AudioPathLoop_FB73: LDY $F8 ; CPU:$FB73 PRG:3B73 A4 F8 INC $F8 ; CPU:$FB75 PRG:3B75 E6 F8 LDA ($F6),Y ; CPU:$FB77 PRG:3B77 B1 F6 BEQ UpdatePulse2OnZero_FB84 ; CPU:$FB79 PRG:3B79 F0 09 CMP #$01 ; CPU:$FB7B PRG:3B7B C9 01 BNE AudioPathOnNonZero_FB95 ; CPU:$FB7D PRG:3B7D D0 16 LDA $10 ; CPU:$FB7F PRG:3B7F A5 10 LSR A ; CPU:$FB81 PRG:3B81 4A BCC AudioPathLoop_FB73 ; CPU:$FB82 PRG:3B82 90 EF UpdatePulse2OnZero_FB84: LDA $F3 ; CPU:$FB84 PRG:3B84 A5 F3 AND #$1C ; CPU:$FB86 PRG:3B86 29 1C BNE AudioPathLoop_FB2B ; CPU:$FB88 PRG:3B88 D0 A1 LDA #$00 ; CPU:$FB8A PRG:3B8A A9 00 STA $F3 ; CPU:$FB8C PRG:3B8C 85 F3 JSR UpdatePulse1Routine_F9D3 ; CPU:$FB8E PRG:3B8E 20 D3 F9 STA SQ2_VOL ; CPU:$FB91 PRG:3B91 8D 04 40 RTS ; CPU:$FB94 PRG:3B94 60 AudioPathOnNonZero_FB95: JSR ProcessAudioStateRoutine_FF41 ; CPU:$FB95 PRG:3B95 20 41 FF STA $07EE ; CPU:$FB98 PRG:3B98 8D EE 07 TXA ; CPU:$FB9B PRG:3B9B 8A AND #$3E ; CPU:$FB9C PRG:3B9C 29 3E JSR ProcessAudioStateRoutine_F814 ; CPU:$FB9E PRG:3B9E 20 14 F8 BEQ AudioPathOnZero_FBAA ; CPU:$FBA1 PRG:3BA1 F0 07 LDY #$1F ; CPU:$FBA3 PRG:3BA3 A0 1F STY $07EF ; CPU:$FBA5 PRG:3BA5 8C EF 07 BNE AudioPathOnNonZero_FBAF ; CPU:$FBA8 PRG:3BA8 D0 05 AudioPathOnZero_FBAA: LDY #$00 ; CPU:$FBAA PRG:3BAA A0 00 STY $07EF ; CPU:$FBAC PRG:3BAC 8C EF 07 AudioPathOnNonZero_FBAF: LDX #$84 ; CPU:$FBAF PRG:3BAF A2 84 LDA $07EE ; CPU:$FBB1 PRG:3BB1 AD EE 07 CMP #$10 ; CPU:$FBB4 PRG:3BB4 C9 10 BCS UpdatePulse2OnCarry_FBBA ; CPU:$FBB6 PRG:3BB6 B0 02 LDX #$82 ; CPU:$FBB8 PRG:3BB8 A2 82 UpdatePulse2OnCarry_FBBA: STX SQ2_VOL ; CPU:$FBBA PRG:3BBA 8E 04 40 AudioPathOnNonZero_FBBD: LDA $F3 ; CPU:$FBBD PRG:3BBD A5 F3 AND #$1C ; CPU:$FBBF PRG:3BBF 29 1C BEQ AudioPathOnZero_FBD1 ; CPU:$FBC1 PRG:3BC1 F0 0E LDY $07EF ; CPU:$FBC3 PRG:3BC3 AC EF 07 BEQ UpdatePulse2OnZero_FBCB ; CPU:$FBC6 PRG:3BC6 F0 03 DEC $07EF ; CPU:$FBC8 PRG:3BC8 CE EF 07 UpdatePulse2OnZero_FBCB: LDA $FF9A,Y ; CPU:$FBCB PRG:3BCB B9 9A FF STA SQ2_VOL ; CPU:$FBCE PRG:3BCE 8D 04 40 AudioPathOnZero_FBD1: LDY $F9 ; CPU:$FBD1 PRG:3BD1 A4 F9 BEQ AudioPathContinue_FC04 ; CPU:$FBD3 PRG:3BD3 F0 2F DEC $07F0 ; CPU:$FBD5 PRG:3BD5 CE F0 07 BNE AudioPathContinue_FC04 ; CPU:$FBD8 PRG:3BD8 D0 2A UpdatePulse1Loop_FBDA: LDY $F9 ; CPU:$FBDA PRG:3BDA A4 F9 INC $F9 ; CPU:$FBDC PRG:3BDC E6 F9 LDA ($F6),Y ; CPU:$FBDE PRG:3BDE B1 F6 BNE AudioPathOnNonZero_FBED ; CPU:$FBE0 PRG:3BE0 D0 0B LDY $F9 ; CPU:$FBE2 PRG:3BE2 A4 F9 INC $F9 ; CPU:$FBE4 PRG:3BE4 E6 F9 LDA ($F6),Y ; CPU:$FBE6 PRG:3BE6 B1 F6 STA SQ1_SWEEP ; CPU:$FBE8 PRG:3BE8 8D 01 40 BNE UpdatePulse1Loop_FBDA ; CPU:$FBEB PRG:3BEB D0 ED AudioPathOnNonZero_FBED: JSR ProcessAudioStateRoutine_FF41 ; CPU:$FBED PRG:3BED 20 41 FF STA $07F0 ; CPU:$FBF0 PRG:3BF0 8D F0 07 TXA ; CPU:$FBF3 PRG:3BF3 8A AND #$3E ; CPU:$FBF4 PRG:3BF4 29 3E JSR ProcessAudioStateRoutine_F800 ; CPU:$FBF6 PRG:3BF6 20 00 F8 BNE AudioPathOnNonZero_FBFF ; CPU:$FBF9 PRG:3BF9 D0 04 LDX #$10 ; CPU:$FBFB PRG:3BFB A2 10 BNE UpdatePulse1OnNonZero_FC01 ; CPU:$FBFD PRG:3BFD D0 02 AudioPathOnNonZero_FBFF: LDX #$06 ; CPU:$FBFF PRG:3BFF A2 06 UpdatePulse1OnNonZero_FC01: STX SQ1_VOL ; CPU:$FC01 PRG:3C01 8E 00 40 AudioPathContinue_FC04: LDY $FA ; CPU:$FC04 PRG:3C04 A4 FA BEQ AudioPathContinue_FC2B ; CPU:$FC06 PRG:3C06 F0 23 DEC $07F1 ; CPU:$FC08 PRG:3C08 CE F1 07 BNE AudioPathContinue_FC2B ; CPU:$FC0B PRG:3C0B D0 1E INC $FA ; CPU:$FC0D PRG:3C0D E6 FA LDA ($F6),Y ; CPU:$FC0F PRG:3C0F B1 F6 JSR ProcessAudioStateRoutine_FF41 ; CPU:$FC11 PRG:3C11 20 41 FF STA $07F1 ; CPU:$FC14 PRG:3C14 8D F1 07 CLC ; CPU:$FC17 PRG:3C17 18 ADC #$FE ; CPU:$FC18 PRG:3C18 69 FE CMP #$0E ; CPU:$FC1A PRG:3C1A C9 0E BCC UpdateTriangleOnNoCarry_FC20 ; CPU:$FC1C PRG:3C1C 90 02 LDA #$0E ; CPU:$FC1E PRG:3C1E A9 0E UpdateTriangleOnNoCarry_FC20: ASL A ; CPU:$FC20 PRG:3C20 0A ASL A ; CPU:$FC21 PRG:3C21 0A STA TRI_LINEAR ; CPU:$FC22 PRG:3C22 8D 08 40 TXA ; CPU:$FC25 PRG:3C25 8A AND #$3E ; CPU:$FC26 PRG:3C26 29 3E JSR ProcessAudioStateRoutine_F818 ; CPU:$FC28 PRG:3C28 20 18 F8 AudioPathContinue_FC2B: LDA $F3 ; CPU:$FC2B PRG:3C2B A5 F3 AND #$43 ; CPU:$FC2D PRG:3C2D 29 43 BEQ AudioPathContinue_FC64 ; CPU:$FC2F PRG:3C2F F0 33 DEC $07F3 ; CPU:$FC31 PRG:3C31 CE F3 07 BNE AudioPathContinue_FC64 ; CPU:$FC34 PRG:3C34 D0 2E LDY $07F2 ; CPU:$FC36 PRG:3C36 AC F2 07 INC $07F2 ; CPU:$FC39 PRG:3C39 EE F2 07 LDA ($F6),Y ; CPU:$FC3C PRG:3C3C B1 F6 JSR ProcessAudioStateRoutine_FF41 ; CPU:$FC3E PRG:3C3E 20 41 FF STA $07F3 ; CPU:$FC41 PRG:3C41 8D F3 07 TXA ; CPU:$FC44 PRG:3C44 8A AND #$3E ; CPU:$FC45 PRG:3C45 29 3E BEQ AudioPathContinue_FC64 ; CPU:$FC47 PRG:3C47 F0 1B AND #$20 ; CPU:$FC49 PRG:3C49 29 20 BNE AudioPathOnNonZero_FC55 ; CPU:$FC4B PRG:3C4B D0 08 LDA #$02 ; CPU:$FC4D PRG:3C4D A9 02 LDX #$00 ; CPU:$FC4F PRG:3C4F A2 00 LDY #$28 ; CPU:$FC51 PRG:3C51 A0 28 BNE UpdateNoiseOnNonZero_FC5B ; CPU:$FC53 PRG:3C53 D0 06 AudioPathOnNonZero_FC55: LDA #$00 ; CPU:$FC55 PRG:3C55 A9 00 LDX #$02 ; CPU:$FC57 PRG:3C57 A2 02 LDY #$08 ; CPU:$FC59 PRG:3C59 A0 08 UpdateNoiseOnNonZero_FC5B: STA NOISE_VOL ; CPU:$FC5B PRG:3C5B 8D 0C 40 STX NOISE_LO ; CPU:$FC5E PRG:3C5E 8E 0E 40 STY NOISE_HI ; CPU:$FC61 PRG:3C61 8C 0F 40 AudioPathContinue_FC64: RTS ; CPU:$FC64 PRG:3C64 60 .byte $0C, $16, $20, $1C, $24, $12, $28, $08, $07, $F7, $FF, $00, $00, $93, $FC, $3F ; CPU:$FC65 PRG:3C65 0B .byte $1C, $60, $07 ; CPU:$FC75 PRG:3C75 0B ;------------------------------------------------------------ ; Audio data with embedded sequence helper code ; CPU $FC78-$FFF9 ; PRG $3C78-$3FF9 ; ; Pass 1 recursively traced from verified entry roots in this region. ; Direct branches, jumps, and subroutine calls are decoded. ; Bytes not reached by that trace remain explicit .byte data. ;------------------------------------------------------------ AudioDataTables: .byte $FB, $FE, $00, $00, $05, $FD, $3E, $1B, $4E, $07, $69, $FD, $3D, $00, $CA, $FD ; CPU:$FC78 PRG:3C78 0B .byte $6E, $00, $AD, $FE, $27, $00, $CA, $FF, $15, $09, $1F, $42, $8C, $44, $4C, $84 ; CPU:$FC88 PRG:3C88 0B .byte $44, $27, $42, $8C, $44, $4C, $84, $44, $2B, $43, $6A, $84, $AA, $92, $52, $02 ; CPU:$FC98 PRG:3C98 0B .byte $16, $4A, $02, $88, $02, $05, $00, $42, $84, $66, $4C, $84, $84, $60, $66, $44 ; CPU:$FCA8 PRG:3CA8 0B .byte $4C, $88, $84, $AA, $64, $6A, $A4, $A4, $64, $6A, $44, $4C, $88, $C4, $62, $AA ; CPU:$FCB8 PRG:3CB8 0B .byte $A2, $88, $48, $02, $08, $62, $02, $A2, $02, $21, $5B, $5A, $5B, $9A, $5A, $60 ; CPU:$FCC8 PRG:3CC8 0B .byte $66, $44, $AE, $6A, $65, $64, $65, $A4, $5C, $64, $6A, $44, $AE, $6A, $63, $62 ; CPU:$FCD8 PRG:3CD8 0B .byte $A2, $A2, $AE, $6E, $02, $2E, $6A, $02, $AA, $02, $27, $80, $E0, $E0, $E0, $E0 ; CPU:$FCE8 PRG:3CE8 0B .byte $E0, $E0, $E0, $E0, $E0, $E0, $E0, $A0, $10, $10, $10, $10, $11, $42, $A6, $60 ; CPU:$FCF8 PRG:3CF8 0B .byte $AA, $AA, $6C, $AA, $A6, $5E, $60, $A6, $84, $6A, $88, $88, $AE, $52, $02, $10 ; CPU:$FD08 PRG:3D08 0B .byte $4E, $02, $88, $02, $45, $45, $C4, $00, $42, $A0, $5A, $A0, $A0, $66, $A2, $A0 ; CPU:$FD18 PRG:3D18 0B .byte $5A, $5A, $9A, $AA, $62, $AA, $AA, $A6, $48, $02, $08, $48, $02, $AE, $02, $00 ; CPU:$FD28 PRG:3D28 0B .byte $95, $0C, $8C, $02, $2E, $AE, $02, $22, $A2, $02, $42, $9A, $A0, $A6, $AA, $AC ; CPU:$FD38 PRG:3D38 0B .byte $AA, $A6, $A0, $A2, $AA, $84, $AA, $09, $53, $4F, $CC, $80, $E0, $E0, $E0, $E0 ; CPU:$FD48 PRG:3D48 0B .byte $E0, $A0, $11, $10, $10, $10, $10, $42, $10, $10, $10, $10, $42, $10, $10, $10 ; CPU:$FD58 PRG:3D58 0B .byte $11, $66, $0C, $04, $26, $0C, $04, $26, $0C, $04, $26, $0C, $04, $26, $0C, $04 ; CPU:$FD68 PRG:3D68 0B .byte $6A, $10, $08, $2A, $10, $08, $2A, $10, $08, $2A, $10, $08, $2A, $10, $08, $6A ; CPU:$FD78 PRG:3D78 0B .byte $0E, $04, $2A, $0E, $04, $2A, $0E, $04, $2A, $0E, $04, $2A, $0E, $04, $6E, $12 ; CPU:$FD88 PRG:3D88 0B .byte $08, $2E, $12, $08, $2E, $12, $12, $0E, $0E, $0C, $0C, $08, $08, $00, $5A, $60 ; CPU:$FD98 PRG:3D98 0B .byte $66, $6A, $44, $6A, $66, $60, $5C, $64, $6A, $6E, $48, $6E, $6A, $64, $62, $6A ; CPU:$FDA8 PRG:3DA8 0B .byte $44, $48, $4E, $48, $44, $6A, $66, $6E, $48, $4E, $18, $18, $16, $16, $12, $12 ; CPU:$FDB8 PRG:3DB8 0B .byte $0E, $0E, $60, $66, $88, $44, $A6, $60, $62, $64, $66, $6A, $A2, $6A, $8C, $4A ; CPU:$FDC8 PRG:3DC8 0B .byte $89, $44, $6A, $8E, $4C, $88, $6E, $92, $50, $4E, $4C, $60, $62, $64, $66, $6A ; CPU:$FDD8 PRG:3DD8 0B .byte $A7, $60, $66, $8C, $48, $84, $66, $A0, $62, $66, $6A, $68, $6A, $6E, $44, $48 ; CPU:$FDE8 PRG:3DE8 0B .byte $D6, $42, $44, $44, $6E, $92, $4C, $44, $44, $6A, $8E, $4C, $48, $66, $68, $6A ; CPU:$FDF8 PRG:3DF8 0B .byte $6C, $6E, $48, $85, $01, $44, $6E, $44, $6A, $6E, $44, $44, $6E, $44, $60, $62 ; CPU:$FE08 PRG:3E08 0B .byte $66, $6A, $68, $6A, $64, $66, $6A, $AE, $44, $49, $44, $6A, $6A, $44, $6A, $6A ; CPU:$FE18 PRG:3E18 0B .byte $44, $66, $66, $44, $66, $66, $6A, $64, $66, $6A, $6E, $44, $8C, $4A, $49, $00 ; CPU:$FE28 PRG:3E28 0B .byte $9A, $66, $A0, $66, $9A, $66, $A0, $66, $5C, $48, $46, $44, $6A, $62, $9C, $6A ; CPU:$FE38 PRG:3E38 0B .byte $A2, $6A, $A2, $44, $AA, $44, $A6, $48, $AE, $48, $9A, $66, $A0, $66, $9A, $66 ; CPU:$FE48 PRG:3E48 0B .byte $A0, $66, $9A, $66, $A0, $66, $9A, $66, $A0, $66, $9C, $6A, $A2, $6A, $9C, $6A ; CPU:$FE58 PRG:3E58 0B .byte $A2, $6A, $66, $6E, $48, $66, $44, $4C, $62, $6A, $48, $62, $6A, $48, $66, $64 ; CPU:$FE68 PRG:3E68 0B .byte $66, $68, $6A, $6E, $44, $66, $62, $61, $62, $44, $6A, $62, $44, $6A, $60, $44 ; CPU:$FE78 PRG:3E78 0B .byte $66, $60, $44, $66, $5C, $6A, $64, $5C, $6A, $64, $66, $48, $6E, $66, $48, $6E ; CPU:$FE88 PRG:3E88 0B .byte $62, $44, $6A, $62, $44, $6A, $60, $44, $66, $60, $44, $66, $5C, $6A, $64, $5C ; CPU:$FE98 PRG:3E98 0B .byte $6A, $64, $A2, $62, $27, $45, $67, $84, $AA, $60, $AE, $60, $84, $88, $62, $AA ; CPU:$FEA8 PRG:3EA8 0B .byte $48, $84, $AE, $66, $84, $66, $88, $4D, $84, $44, $8C, $57, $8C, $4A, $48, $44 ; CPU:$FEB8 PRG:3EB8 0B .byte $8E, $6A, $8C, $6A, $8E, $8C, $4A, $88, $6E, $44, $48, $00, $5B, $A0, $66, $44 ; CPU:$FEC8 PRG:3EC8 0B .byte $6E, $6B, $84, $4C, $56, $54, $5D, $A2, $6A, $48, $6A, $67, $AE, $48, $8E, $5B ; CPU:$FED8 PRG:3ED8 0B .byte $A0, $66, $44, $6E, $6B, $84, $4C, $56, $4C, $5D, $A2, $6A, $48, $44, $67, $AE ; CPU:$FEE8 PRG:3EE8 0B .byte $48, $4C, $4E, $26, $2E, $08, $13, $00, $03, $57, $00, $00, $00, $D4, $00, $C8 ; CPU:$FEF8 PRG:3EF8 0B .byte $00, $BD, $00, $B2, $00, $A8, $00, $9F, $00, $96, $00, $8D, $00, $85, $00, $7E ; CPU:$FF08 PRG:3F08 0B .byte $00, $70, $01, $AB, $01, $7C, $01, $67, $01, $52, $01, $3F, $01, $2D, $01, $1C ; CPU:$FF18 PRG:3F18 0B .byte $01, $0C, $00, $FD, $00, $EE, $00, $E1, $01, $FC, $01, $C4, $04, $08, $10, $20 ; CPU:$FF28 PRG:3F28 0B .byte $40, $18, $30, $05, $0A, $14, $28, $50, $1E ; CPU:$FF38 PRG:3F38 0B ;------------------------------------------------------------ ; ProcessAudioStateRoutine_FF41 ; ; Global: ; First-pass AudioDataTables entry point or directly called helper. ; ; Local: ; Exact semantic role is deferred to the semantic naming pass. ; ; Parameters: ; Zero-page pointers, object state, or PPU state; exact contract unresolved. ; ; Returns: ; Register and flag effects are defined by the decoded instructions. ;------------------------------------------------------------ ProcessAudioStateRoutine_FF41: TAX ; CPU:$FF41 PRG:3F41 AA ROR A ; CPU:$FF42 PRG:3F42 6A TXA ; CPU:$FF43 PRG:3F43 8A ROL A ; CPU:$FF44 PRG:3F44 2A ROL A ; CPU:$FF45 PRG:3F45 2A ROL A ; CPU:$FF46 PRG:3F46 2A AND #$07 ; CPU:$FF47 PRG:3F47 29 07 CLC ; CPU:$FF49 PRG:3F49 18 ADC $F5 ; CPU:$FF4A PRG:3F4A 65 F5 TAY ; CPU:$FF4C PRG:3F4C A8 LDA $FF34,Y ; CPU:$FF4D PRG:3F4D B9 34 FF RTS ; CPU:$FF50 PRG:3F50 60 .byte $10, $15, $16, $16, $16, $15, $15, $17, $17, $17, $16, $16, $18, $18, $18, $16 ; CPU:$FF51 PRG:3F51 0B .byte $16, $1A, $1A, $1A, $16, $16, $1C, $1C, $1C, $16, $16, $1E, $1E, $1E, $16, $16 ; CPU:$FF61 PRG:3F61 0B .byte $0A, $0A, $0A, $0A, $08, $08, $08, $08, $08, $08, $08, $08, $09, $09, $09, $09 ; CPU:$FF71 PRG:3F71 0B .byte $09, $09, $07, $07, $07, $07, $07, $07, $07, $07, $08, $08, $08, $08, $08, $08 ; CPU:$FF81 PRG:3F81 0B .byte $10, $11, $1C, $1A, $18, $16, $14, $12, $11, $50, $51, $51, $51, $51, $51, $51 ; CPU:$FF91 PRG:3F91 0B .byte $51, $51, $52, $52, $52, $52, $52, $52, $53, $53, $53, $53, $53, $54, $54, $54 ; CPU:$FFA1 PRG:3FA1 0B .byte $54, $55, $55, $55, $56, $56, $56, $56, $57, $01, $01, $01, $BE, $01, $01, $01 ; CPU:$FFB1 PRG:3FB1 0B .byte $8E, $00, $FE, $00, $00, $FE, $00, $00, $FE, $6B, $6B, $AA, $6F, $6F, $AE, $03 ; CPU:$FFC1 PRG:3FC1 0B .byte $05, $00, $00, $95, $5D, $49, $9C, $63, $4F, $A2, $03, $00, $9D, $27, $A2, $84 ; CPU:$FFD1 PRG:3FD1 0B .byte $A2, $84, $A6, $88, $A6, $88, $03, $0D, $01, $01, $A0, $60, $00, $20, $A0, $60 ; CPU:$FFE1 PRG:3FE1 0B .byte $00, $20, $20, $20, $20, $21, $00, $4F, $0F ; CPU:$FFF1 PRG:3FF1 0B ;------------------------------------------------------------ ; VectorTable ; CPU $FFFA-$FFFF ; PRG $3FFA-$3FFF ; NMI, RESET, IRQ/BRK vectors ; Pass 1 preserves this range exactly with .incbin. ;------------------------------------------------------------ VectorTable: .word NMIHandler ; CPU:$FFFA PRG:3FFA 0B .word ResetEntry ; CPU:$FFFC PRG:3FFC 0B .word IRQHandler ; CPU:$FFFE PRG:3FFE 0B