Replaced all 497 Label_XXXX labels with semantic names: - 37 jmp-target labels renamed with routine-specific names - 6 branch-target labels renamed with _Loop/_Next/_Block roles - 454 internal branch targets renamed as <Routine>_Block/_Block_N based on parent routine and block position All 84 jsr targets already had semantic names. Build verified byte-identical. verify_pass1.py passes with 'canoni' comment format. Updated TODO.md: removed Balloon Fight from Label_ residue table.
8544 lines
389 KiB
ArmAsm
8544 lines
389 KiB
ArmAsm
.include "symbols.inc"
|
||
.include "locals.inc"
|
||
.segment "PRG"
|
||
|
||
;===============================================================================
|
||
; Reset
|
||
;
|
||
; Global:
|
||
; Initializes the NES hardware and game RAM, validates the warm-start
|
||
; signature, initializes game-specific state, and transfers control to the
|
||
; remainder of the reset path at CPU $C07F.
|
||
;
|
||
; Parameters:
|
||
; None.
|
||
;
|
||
; Returns:
|
||
; Does not return. Execution continues in the preserved PRG region.
|
||
;
|
||
; PRG offsets: $0000-$007E
|
||
; CPU range: $C000-$C07E
|
||
; Size: $007F bytes
|
||
;===============================================================================
|
||
Reset:
|
||
lda #$00 ; CPU:$C000 PRG:0000 A9 00
|
||
sta PPUCTRL ; CPU:$C002 PRG:0002 8D 00 20
|
||
sta PPUMASK ; CPU:$C005 PRG:0005 8D 01 20
|
||
|
||
WaitForVBlankSet:
|
||
lda PPUSTATUS ; CPU:$C008 PRG:0008 AD 02 20
|
||
bpl WaitForVBlankSet ; CPU:$C00B PRG:000B 10 FB
|
||
|
||
WaitForVBlankClear:
|
||
lda PPUSTATUS ; CPU:$C00D PRG:000D AD 02 20
|
||
bmi WaitForVBlankClear ; CPU:$C010 PRG:0010 30 FB
|
||
|
||
WaitForSecondVBlank:
|
||
lda PPUSTATUS ; CPU:$C012 PRG:0012 AD 02 20
|
||
bpl WaitForSecondVBlank ; CPU:$C015 PRG:0015 10 FB
|
||
|
||
sei ; CPU:$C017 PRG:0017 78
|
||
cld ; CPU:$C018 PRG:0018 D8
|
||
ldx #$FF ; CPU:$C019 PRG:0019 A2 FF
|
||
txs ; CPU:$C01B PRG:001B 9A
|
||
ldx #$12 ; CPU:$C01C PRG:001C A2 12
|
||
lda #$00 ; CPU:$C01E PRG:001E A9 00
|
||
|
||
ClearZeroPage:
|
||
sta $00,x ; CPU:$C020 PRG:0020 95 00
|
||
inx ; CPU:$C022 PRG:0022 E8
|
||
bne ClearZeroPage ; CPU:$C023 PRG:0023 D0 FB
|
||
|
||
ldx #$02 ; CPU:$C025 PRG:0025 A2 02
|
||
|
||
CheckSavedSignature:
|
||
lda $07FA,x ; CPU:$C027 PRG:0027 BD FA 07
|
||
cmp $C082,x ; CPU:$C02A PRG:002A DD 82 C0
|
||
bne InitializeMemory ; CPU:$C02D PRG:002D D0 05
|
||
dex ; CPU:$C02F PRG:002F CA
|
||
bpl CheckSavedSignature ; CPU:$C030 PRG:0030 10 F5
|
||
bmi SavedSignatureValid ; CPU:$C032 PRG:0032 30 43
|
||
|
||
InitializeMemory:
|
||
ldx #$00 ; CPU:$C034 PRG:0034 A2 00
|
||
txa ; CPU:$C036 PRG:0036 8A
|
||
|
||
ClearZeroPageAndStackPage:
|
||
sta $00,x ; CPU:$C037 PRG:0037 95 00
|
||
sta $0700,x ; CPU:$C039 PRG:0039 9D 00 07
|
||
inx ; CPU:$C03C PRG:003C E8
|
||
bne ClearZeroPageAndStackPage ; CPU:$C03D PRG:003D D0 F8
|
||
|
||
lda #$32 ; CPU:$C03F PRG:003F A9 32
|
||
sta $15 ; CPU:$C041 PRG:0041 85 15
|
||
|
||
InitializeBlockLoop:
|
||
lda #$32 ; CPU:$C043 PRG:0043 A9 32
|
||
jsr $D6DE ; CPU:$C045 PRG:0045 20 DE D6
|
||
lda #$00 ; CPU:$C048 PRG:0048 A9 00
|
||
sta $46 ; CPU:$C04A PRG:004A 85 46
|
||
jsr $C579 ; CPU:$C04C PRG:004C 20 79 C5
|
||
dec $15 ; CPU:$C04F PRG:004F C6 15
|
||
bne InitializeBlockLoop ; CPU:$C051 PRG:0051 D0 F0
|
||
|
||
ldx #$0E ; CPU:$C053 PRG:0053 A2 0E
|
||
|
||
CopyInitializationData:
|
||
lda $C085,x ; CPU:$C055 PRG:0055 BD 85 C0
|
||
sta $0629,x ; CPU:$C058 PRG:0058 9D 29 06
|
||
dex ; CPU:$C05B PRG:005B CA
|
||
bpl CopyInitializationData ; CPU:$C05C PRG:005C 10 F7
|
||
|
||
ldx #$04 ; CPU:$C05E PRG:005E A2 04
|
||
|
||
ClearLocalVariables:
|
||
lda #$00 ; CPU:$C060 PRG:0060 A9 00
|
||
sta $03,x ; CPU:$C062 PRG:0062 95 03
|
||
dex ; CPU:$C064 PRG:0064 CA
|
||
bpl ClearLocalVariables ; CPU:$C065 PRG:0065 10 F9
|
||
|
||
lda #$00 ; CPU:$C067 PRG:0067 A9 00
|
||
jsr $D6DE ; CPU:$C069 PRG:0069 20 DE D6
|
||
ldx #$02 ; CPU:$C06C PRG:006C A2 02
|
||
|
||
CopySavedSignature:
|
||
lda $C082,x ; CPU:$C06E PRG:006E BD 82 C0
|
||
sta $07FA,x ; CPU:$C071 PRG:0071 9D FA 07
|
||
dex ; CPU:$C074 PRG:0074 CA
|
||
bpl CopySavedSignature ; CPU:$C075 PRG:0075 10 F7
|
||
|
||
SavedSignatureValid:
|
||
lda #$1E ; CPU:$C077 PRG:0077 A9 1E
|
||
sta $01 ; CPU:$C079 PRG:0079 85 01
|
||
lda #$90 ; CPU:$C07B PRG:007B A9 90
|
||
sta $00 ; CPU:$C07D PRG:007D 85 00
|
||
|
||
; Decoded PRG block $007F-$046A.
|
||
EnterMainInitialization:
|
||
jmp MainInitialization ; CPU:$C07F PRG:007F 4C D4 F1
|
||
WarmStartSignature:
|
||
.byte "HAL" ; CPU:$C082 PRG:0082 48 41 4C
|
||
ResetInitializationData:
|
||
.byte $00, $00, $00, $01, $00, $00, $00, $00 ; CPU:$C083 PRG:0083 00 00 00 01 00 00 00 00
|
||
.byte $01, $00, $00, $00, $05, $02, $00 ; CPU:$C08B PRG:008B 01 00 00 00 05 02 00
|
||
;===============================================================================
|
||
; NmiHandler
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C094; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0094
|
||
; CPU address: $C094
|
||
;===============================================================================
|
||
|
||
NmiHandler:
|
||
pha ; CPU:$C092 PRG:0092 48
|
||
txa ; CPU:$C093 PRG:0093 8A
|
||
pha ; CPU:$C094 PRG:0094 48
|
||
tya ; CPU:$C095 PRG:0095 98
|
||
pha ; CPU:$C096 PRG:0096 48
|
||
lda #$00 ; CPU:$C097 PRG:0097 A9 00
|
||
sta $2003 ; CPU:$C099 PRG:0099 8D 03 20
|
||
lda #$02 ; CPU:$C09C PRG:009C A9 02
|
||
sta $4014 ; CPU:$C09E PRG:009E 8D 14 40
|
||
lda PpuBufferReadOffset ; CPU:$C0A1 PRG:00A1 A5 52
|
||
cmp PpuBufferWriteOffset ; CPU:$C0A3 PRG:00A3 C5 53
|
||
beq NmiHandler_Block ; CPU:$C0A5 PRG:00A5 F0 03
|
||
jsr FlushPpuCommandPreserved ; CPU:$C0A7 PRG:00A7 20 7C C1
|
||
NmiHandler_Block:
|
||
jsr UpdatePpuTransferSources ; CPU:$C0AA PRG:00AA 20 0D D6
|
||
jsr BuildFrameOam ; CPU:$C0AD PRG:00AD 20 98 D7
|
||
inc FrameCounter ; CPU:$C0B0 PRG:00B0 E6 19
|
||
lda #$20 ; CPU:$C0B2 PRG:00B2 A9 20
|
||
sta $2006 ; CPU:$C0B4 PRG:00B4 8D 06 20
|
||
lda #$00 ; CPU:$C0B7 PRG:00B7 A9 00
|
||
sta $2006 ; CPU:$C0B9 PRG:00B9 8D 06 20
|
||
lda #$00 ; CPU:$C0BC PRG:00BC A9 00
|
||
sta $2005 ; CPU:$C0BE PRG:00BE 8D 05 20
|
||
sta $2005 ; CPU:$C0C1 PRG:00C1 8D 05 20
|
||
jsr UpdateAudioFrame ; CPU:$C0C4 PRG:00C4 20 F7 FF
|
||
lda #$01 ; CPU:$C0C7 PRG:00C7 A9 01
|
||
sta NmiCompletedFlag ; CPU:$C0C9 PRG:00C9 85 02
|
||
lda RenderingDisabledFlag ; CPU:$C0CB PRG:00CB A5 16
|
||
beq NmiHandler_Block_3 ; CPU:$C0CD PRG:00CD F0 20
|
||
NmiHandler_Block_1:
|
||
lda $2002 ; CPU:$C0CF PRG:00CF AD 02 20
|
||
bmi NmiHandler_Block_1 ; CPU:$C0D2 PRG:00D2 30 FB
|
||
ldx #$04 ; CPU:$C0D4 PRG:00D4 A2 04
|
||
ldy #$C6 ; CPU:$C0D6 PRG:00D6 A0 C6
|
||
NmiHandler_Block_2:
|
||
dey ; CPU:$C0D8 PRG:00D8 88
|
||
bne NmiHandler_Block_2 ; CPU:$C0D9 PRG:00D9 D0 FD
|
||
dex ; CPU:$C0DB PRG:00DB CA
|
||
bne NmiHandler_Block_2 ; CPU:$C0DC PRG:00DC D0 FA
|
||
lda PpuControlBase ; CPU:$C0DE PRG:00DE A5 18
|
||
ora PpuControlShadow ; CPU:$C0E0 PRG:00E0 05 00
|
||
sta $2000 ; CPU:$C0E2 PRG:00E2 8D 00 20
|
||
lda PpuScrollX ; CPU:$C0E5 PRG:00E5 A5 17
|
||
sta $2005 ; CPU:$C0E7 PRG:00E7 8D 05 20
|
||
lda #$00 ; CPU:$C0EA PRG:00EA A9 00
|
||
sta $2005 ; CPU:$C0EC PRG:00EC 8D 05 20
|
||
NmiHandler_Block_3:
|
||
pla ; CPU:$C0EF PRG:00EF 68
|
||
tay ; CPU:$C0F0 PRG:00F0 A8
|
||
pla ; CPU:$C0F1 PRG:00F1 68
|
||
tax ; CPU:$C0F2 PRG:00F2 AA
|
||
pla ; CPU:$C0F3 PRG:00F3 68
|
||
rti ; CPU:$C0F4 PRG:00F4 40
|
||
;===============================================================================
|
||
; IrqHandler
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C0F7; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $00F7
|
||
; CPU address: $C0F7
|
||
;===============================================================================
|
||
|
||
IrqHandler:
|
||
jmp IrqHandler ; CPU:$C0F5 PRG:00F5 4C F7 C0
|
||
;===============================================================================
|
||
; DisableNmi
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C0FA; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $00FA
|
||
; CPU address: $C0FA
|
||
;===============================================================================
|
||
|
||
DisableNmi:
|
||
lda PpuControlShadow ; CPU:$C0F8 PRG:00F8 A5 00
|
||
and #$7F ; CPU:$C0FA PRG:00FA 29 7F
|
||
DisableNmi_Block:
|
||
sta $2000 ; CPU:$C0FC PRG:00FC 8D 00 20
|
||
sta PpuControlShadow ; CPU:$C0FF PRG:00FF 85 00
|
||
rts ; CPU:$C101 PRG:0101 60
|
||
;===============================================================================
|
||
; EnableNmi
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C104; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0104
|
||
; CPU address: $C104
|
||
;===============================================================================
|
||
|
||
EnableNmi:
|
||
lda PpuControlShadow ; CPU:$C102 PRG:0102 A5 00
|
||
ora #$80 ; CPU:$C104 PRG:0104 09 80
|
||
bne DisableNmi_Block ; CPU:$C106 PRG:0106 D0 F4
|
||
;===============================================================================
|
||
; SetPpuControl
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C10A; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $010A
|
||
; CPU address: $C10A
|
||
;===============================================================================
|
||
|
||
SetPpuControl:
|
||
lda #$00 ; CPU:$C108 PRG:0108 A9 00
|
||
SetPpuControl_Block:
|
||
pha ; CPU:$C10A PRG:010A 48
|
||
jsr WaitForFrame ; CPU:$C10B PRG:010B 20 65 F4
|
||
pla ; CPU:$C10E PRG:010E 68
|
||
sta $2001 ; CPU:$C10F PRG:010F 8D 01 20
|
||
rts ; CPU:$C112 PRG:0112 60
|
||
;===============================================================================
|
||
; SetPpuMask
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C115; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0115
|
||
; CPU address: $C115
|
||
;===============================================================================
|
||
|
||
SetPpuMask:
|
||
lda PpuMaskShadow ; CPU:$C113 PRG:0113 A5 01
|
||
bne SetPpuControl_Block ; CPU:$C115 PRG:0115 D0 F3
|
||
;===============================================================================
|
||
; WaitForFrameAndSetPpuMask
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C119; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0119
|
||
; CPU address: $C119
|
||
;===============================================================================
|
||
|
||
WaitForFrameAndSetPpuMask:
|
||
jsr BuildPpuCommand ; CPU:$C117 PRG:0117 20 54 C1
|
||
ldy #$00 ; CPU:$C11A PRG:011A A0 00
|
||
WaitForFrameAndSetPpuMask_Block:
|
||
lda $0057,y ; CPU:$C11C PRG:011C B9 57 00
|
||
sta $0300,x ; CPU:$C11F PRG:011F 9D 00 03
|
||
inx ; CPU:$C122 PRG:0122 E8
|
||
iny ; CPU:$C123 PRG:0123 C8
|
||
cpy PpuCommandLength ; CPU:$C124 PRG:0124 C4 56
|
||
bne WaitForFrameAndSetPpuMask_Block ; CPU:$C126 PRG:0126 D0 F4
|
||
stx PpuBufferWriteOffset ; CPU:$C128 PRG:0128 86 53
|
||
rts ; CPU:$C12A PRG:012A 60
|
||
;===============================================================================
|
||
; CopyBytesToPpuBuffer
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C12D; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $012D
|
||
; CPU address: $C12D
|
||
;===============================================================================
|
||
|
||
CopyBytesToPpuBuffer:
|
||
lda #$57 ; CPU:$C12B PRG:012B A9 57
|
||
ldy #$00 ; CPU:$C12D PRG:012D A0 00
|
||
;===============================================================================
|
||
; AppendBytesToPpuBuffer
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C131; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0131
|
||
; CPU address: $C131
|
||
;===============================================================================
|
||
|
||
AppendBytesToPpuBuffer:
|
||
sta PpuSourcePtrLo ; CPU:$C12F PRG:012F 85 21
|
||
sty PpuSourcePtrHi ; CPU:$C131 PRG:0131 84 22
|
||
txa ; CPU:$C133 PRG:0133 8A
|
||
pha ; CPU:$C134 PRG:0134 48
|
||
ldy #$02 ; CPU:$C135 PRG:0135 A0 02
|
||
;===============================================================================
|
||
; AppendLengthPrefixedPpuData
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C139; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0139
|
||
; CPU address: $C139
|
||
;===============================================================================
|
||
|
||
AppendLengthPrefixedPpuData:
|
||
lda (PpuSourcePtrLo),y ; CPU:$C137 PRG:0137 B1 21
|
||
clc ; CPU:$C139 PRG:0139 18
|
||
adc #$03 ; CPU:$C13A PRG:013A 69 03
|
||
sta Temp12 ; CPU:$C13C PRG:013C 85 12
|
||
ldx PpuBufferWriteOffset ; CPU:$C13E PRG:013E A6 53
|
||
ldy #$00 ; CPU:$C140 PRG:0140 A0 00
|
||
AppendLengthPrefixedPpuData_Block:
|
||
lda (PpuSourcePtrLo),y ; CPU:$C142 PRG:0142 B1 21
|
||
sta $0300,x ; CPU:$C144 PRG:0144 9D 00 03
|
||
inx ; CPU:$C147 PRG:0147 E8
|
||
iny ; CPU:$C148 PRG:0148 C8
|
||
cpy Temp12 ; CPU:$C149 PRG:0149 C4 12
|
||
bne AppendLengthPrefixedPpuData_Block ; CPU:$C14B PRG:014B D0 F5
|
||
stx PpuBufferWriteOffset ; CPU:$C14D PRG:014D 86 53
|
||
pla ; CPU:$C14F PRG:014F 68
|
||
tax ; CPU:$C150 PRG:0150 AA
|
||
rts ; CPU:$C151 PRG:0151 60
|
||
;===============================================================================
|
||
; BuildPpuCommand
|
||
;
|
||
; Global:
|
||
; Builds a PPU command-buffer entry from the pending command address/length.
|
||
;
|
||
; Local:
|
||
; Formats the PPU command (address high byte with $20 prefix, address low
|
||
; byte, length) and writes it into the command buffer at $0300.
|
||
;
|
||
; Parameters:
|
||
; PpuCommandAddressLo/Hi ($55/$54), PpuCommandLength ($56),
|
||
; PpuBufferWriteOffset ($53).
|
||
;
|
||
; Returns:
|
||
; PpuBufferWriteOffset advanced; command bytes appended to $0300 buffer.
|
||
;
|
||
; PRG offset: $0154
|
||
; CPU address: $C154
|
||
;===============================================================================
|
||
|
||
BuildPpuCommand:
|
||
ldx PpuBufferWriteOffset ; CPU:$C152 PRG:0152 A6 53
|
||
lda #$00 ; CPU:$C154 PRG:0154 A9 00
|
||
sta Temp12 ; CPU:$C156 PRG:0156 85 12
|
||
lda PpuCommandAddressLo ; CPU:$C158 PRG:0158 A5 55
|
||
asl a ; CPU:$C15A PRG:015A 0A
|
||
asl a ; CPU:$C15B PRG:015B 0A
|
||
asl a ; CPU:$C15C PRG:015C 0A
|
||
asl a ; CPU:$C15D PRG:015D 0A
|
||
rol Temp12 ; CPU:$C15E PRG:015E 26 12
|
||
asl a ; CPU:$C160 PRG:0160 0A
|
||
;===============================================================================
|
||
; AppendPpuAddressAndLength
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C163; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0163
|
||
; CPU address: $C163
|
||
;===============================================================================
|
||
|
||
AppendPpuAddressAndLength:
|
||
rol Temp12 ; CPU:$C161 PRG:0161 26 12
|
||
ora PpuCommandAddressHi ; CPU:$C163 PRG:0163 05 54
|
||
pha ; CPU:$C165 PRG:0165 48
|
||
lda Temp12 ; CPU:$C166 PRG:0166 A5 12
|
||
ora #$20 ; CPU:$C168 PRG:0168 09 20
|
||
sta $0300,x ; CPU:$C16A PRG:016A 9D 00 03
|
||
inx ; CPU:$C16D PRG:016D E8
|
||
pla ; CPU:$C16E PRG:016E 68
|
||
sta $0300,x ; CPU:$C16F PRG:016F 9D 00 03
|
||
inx ; CPU:$C172 PRG:0172 E8
|
||
lda PpuCommandLength ; CPU:$C173 PRG:0173 A5 56
|
||
sta $0300,x ; CPU:$C175 PRG:0175 9D 00 03
|
||
inx ; CPU:$C178 PRG:0178 E8
|
||
rts ; CPU:$C179 PRG:0179 60
|
||
;===============================================================================
|
||
; FlushPpuCommandPreserved
|
||
;
|
||
; Global:
|
||
; Flushes the PPU command buffer while preserving the X and Y registers.
|
||
;
|
||
; Local:
|
||
; Saves X/Y, calls PreserveXYAndFinalizePpuCommand to walk the $0300 command
|
||
; buffer and write pending PPU updates, then restores X/Y.
|
||
;
|
||
; Parameters:
|
||
; PpuBufferReadOffset/WriteOffset ($52/$53).
|
||
;
|
||
; Returns:
|
||
; X and Y preserved; PPU command buffer drained.
|
||
;
|
||
; PRG offset: $017C
|
||
; CPU address: $C17C
|
||
;===============================================================================
|
||
|
||
FlushPpuCommandPreserved:
|
||
tya ; CPU:$C17A PRG:017A 98
|
||
pha ; CPU:$C17B PRG:017B 48
|
||
txa ; CPU:$C17C PRG:017C 8A
|
||
pha ; CPU:$C17D PRG:017D 48
|
||
jsr PreserveXYAndFinalizePpuCommand ; CPU:$C17E PRG:017E 20 88 C1
|
||
pla ; CPU:$C181 PRG:0181 68
|
||
tax ; CPU:$C182 PRG:0182 AA
|
||
pla ; CPU:$C183 PRG:0183 68
|
||
tay ; CPU:$C184 PRG:0184 A8
|
||
rts ; CPU:$C185 PRG:0185 60
|
||
;===============================================================================
|
||
; PreserveXYAndFinalizePpuCommand
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C188; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0188
|
||
; CPU address: $C188
|
||
;===============================================================================
|
||
|
||
PreserveXYAndFinalizePpuCommand:
|
||
ldx PpuBufferReadOffset ; CPU:$C186 PRG:0186 A6 52
|
||
lda $0300,x ; CPU:$C188 PRG:0188 BD 00 03
|
||
inx ; CPU:$C18B PRG:018B E8
|
||
sta PpuDestinationHi ; CPU:$C18C PRG:018C 85 50
|
||
sta $2006 ; CPU:$C18E PRG:018E 8D 06 20
|
||
;===============================================================================
|
||
; FlushPpuCommandBuffer
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C193; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0193
|
||
; CPU address: $C193
|
||
;===============================================================================
|
||
|
||
FlushPpuCommandBuffer:
|
||
lda $0300,x ; CPU:$C191 PRG:0191 BD 00 03
|
||
inx ; CPU:$C194 PRG:0194 E8
|
||
sta $2006 ; CPU:$C195 PRG:0195 8D 06 20
|
||
ldy $0300,x ; CPU:$C198 PRG:0198 BC 00 03
|
||
inx ; CPU:$C19B PRG:019B E8
|
||
FlushPpuCommandBuffer_Block:
|
||
lda $0300,x ; CPU:$C19C PRG:019C BD 00 03
|
||
inx ; CPU:$C19F PRG:019F E8
|
||
sta $2007 ; CPU:$C1A0 PRG:01A0 8D 07 20
|
||
dey ; CPU:$C1A3 PRG:01A3 88
|
||
bne FlushPpuCommandBuffer_Block ; CPU:$C1A4 PRG:01A4 D0 F6
|
||
lda PpuDestinationHi ; CPU:$C1A6 PRG:01A6 A5 50
|
||
cmp #$3F ; CPU:$C1A8 PRG:01A8 C9 3F
|
||
bne FlushPpuCommandBuffer_Block_1 ; CPU:$C1AA PRG:01AA D0 10
|
||
lda #$3F ; CPU:$C1AC PRG:01AC A9 3F
|
||
sta $2006 ; CPU:$C1AE PRG:01AE 8D 06 20
|
||
lda #$00 ; CPU:$C1B1 PRG:01B1 A9 00
|
||
sta $2006 ; CPU:$C1B3 PRG:01B3 8D 06 20
|
||
sta $2006 ; CPU:$C1B6 PRG:01B6 8D 06 20
|
||
sta $2006 ; CPU:$C1B9 PRG:01B9 8D 06 20
|
||
FlushPpuCommandBuffer_Block_1:
|
||
stx PpuBufferReadOffset ; CPU:$C1BC PRG:01BC 86 52
|
||
cpx PpuBufferWriteOffset ; CPU:$C1BE PRG:01BE E4 53
|
||
bne PreserveXYAndFinalizePpuCommand ; CPU:$C1C0 PRG:01C0 D0 C4
|
||
rts ; CPU:$C1C2 PRG:01C2 60
|
||
FlushPpuCommandBuffer_Block_2:
|
||
lda #$20 ; CPU:$C1C3 PRG:01C3 A9 20
|
||
sta $F2 ; CPU:$C1C5 PRG:01C5 85 F2
|
||
jsr $C527 ; CPU:$C1C7 PRG:01C7 20 27 C5
|
||
jsr $C539 ; CPU:$C1CA PRG:01CA 20 39 C5
|
||
lda #$FF ; CPU:$C1CD PRG:01CD A9 FF
|
||
sta $CD ; CPU:$C1CF PRG:01CF 85 CD
|
||
lda #$AD ; CPU:$C1D1 PRG:01D1 A9 AD
|
||
sta SpawnCommandPointerLo ; CPU:$C1D3 PRG:01D3 85 23
|
||
lda #$C4 ; CPU:$C1D5 PRG:01D5 A9 C4
|
||
sta SpawnCommandPointerHi ; CPU:$C1D7 PRG:01D7 85 24
|
||
lda #$80 ; CPU:$C1D9 PRG:01D9 A9 80
|
||
sta $91 ; CPU:$C1DB PRG:01DB 85 91
|
||
sta $0488 ; CPU:$C1DD PRG:01DD 8D 88 04
|
||
lda #$70 ; CPU:$C1E0 PRG:01E0 A9 70
|
||
sta $9A ; CPU:$C1E2 PRG:01E2 85 9A
|
||
jsr InitializeParticleSlots ; CPU:$C1E4 PRG:01E4 20 4A CD
|
||
lda #$00 ; CPU:$C1E7 PRG:01E7 A9 00
|
||
sta $41 ; CPU:$C1E9 PRG:01E9 85 41
|
||
sta $C9 ; CPU:$C1EB PRG:01EB 85 C9
|
||
sta $CA ; CPU:$C1ED PRG:01ED 85 CA
|
||
sta $BA ; CPU:$C1EF PRG:01EF 85 BA
|
||
sta $C5 ; CPU:$C1F1 PRG:01F1 85 C5
|
||
sta $C8 ; CPU:$C1F3 PRG:01F3 85 C8
|
||
jsr InitializeAudio ; CPU:$C1F5 PRG:01F5 20 A5 F4
|
||
ldx #$13 ; CPU:$C1F8 PRG:01F8 A2 13
|
||
FlushPpuCommandBuffer_Block_3:
|
||
lda #$FF ; CPU:$C1FA PRG:01FA A9 FF
|
||
sta $0530,x ; CPU:$C1FC PRG:01FC 9D 30 05
|
||
lda #$F0 ; CPU:$C1FF PRG:01FF A9 F0
|
||
sta $04A4,x ; CPU:$C201 PRG:0201 9D A4 04
|
||
dex ; CPU:$C204 PRG:0204 CA
|
||
bpl FlushPpuCommandBuffer_Block_3 ; CPU:$C205 PRG:0205 10 F3
|
||
FlushPpuCommandBuffer_Block_4:
|
||
jsr $F470 ; CPU:$C207 PRG:0207 20 70 F4
|
||
jsr UpdateGameplayObjects ; CPU:$C20A PRG:020A 20 91 E6
|
||
lda $C5 ; CPU:$C20D PRG:020D A5 C5
|
||
bne FlushPpuCommandBuffer_Block_5 ; CPU:$C20F PRG:020F D0 03
|
||
jsr UpdateSpecialObjectSystem ; CPU:$C211 PRG:0211 20 F9 C6
|
||
FlushPpuCommandBuffer_Block_5:
|
||
lda FrameCounter ; CPU:$C214 PRG:0214 A5 19
|
||
lsr a ; CPU:$C216 PRG:0216 4A
|
||
bcs FlushPpuCommandBuffer_Block_6 ; CPU:$C217 PRG:0217 B0 03
|
||
jmp RunGameplayFrame_Block_8 ; CPU:$C219 PRG:0219 4C D0 C2
|
||
FlushPpuCommandBuffer_Block_6:
|
||
lda $C5 ; CPU:$C21C PRG:021C A5 C5
|
||
beq RunGameplayFrame ; CPU:$C21E PRG:021E F0 05
|
||
dec $C5 ; CPU:$C220 PRG:0220 C6 C5
|
||
jmp RunGameplayFrame_Block_8 ; CPU:$C222 PRG:0222 4C D0 C2
|
||
;===============================================================================
|
||
; RunGameplayFrame
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C227; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $0227
|
||
; CPU address: $C227
|
||
;===============================================================================
|
||
|
||
RunGameplayFrame:
|
||
lda PpuScrollX ; CPU:$C225 PRG:0225 A5 17
|
||
bne RunGameplayFrame_Block ; CPU:$C227 PRG:0227 D0 06
|
||
lda PpuControlBase ; CPU:$C229 PRG:0229 A5 18
|
||
eor #$01 ; CPU:$C22B PRG:022B 49 01
|
||
sta PpuControlBase ; CPU:$C22D PRG:022D 85 18
|
||
RunGameplayFrame_Block:
|
||
dec PpuScrollX ; CPU:$C22F PRG:022F C6 17
|
||
lda $0488 ; CPU:$C231 PRG:0231 AD 88 04
|
||
beq RunGameplayFrame_Block_2 ; CPU:$C234 PRG:0234 F0 15
|
||
inc $0488 ; CPU:$C236 PRG:0236 EE 88 04
|
||
lda $0488 ; CPU:$C239 PRG:0239 AD 88 04
|
||
cmp #$F0 ; CPU:$C23C PRG:023C C9 F0
|
||
bcc RunGameplayFrame_Block_1 ; CPU:$C23E PRG:023E 90 05
|
||
lda #$00 ; CPU:$C240 PRG:0240 A9 00
|
||
sta $0488 ; CPU:$C242 PRG:0242 8D 88 04
|
||
RunGameplayFrame_Block_1:
|
||
lda $BD ; CPU:$C245 PRG:0245 A5 BD
|
||
beq RunGameplayFrame_Block_2 ; CPU:$C247 PRG:0247 F0 02
|
||
inc $91 ; CPU:$C249 PRG:0249 E6 91
|
||
RunGameplayFrame_Block_2:
|
||
ldx #$07 ; CPU:$C24B PRG:024B A2 07
|
||
RunGameplayFrame_Block_3:
|
||
lda $055D,x ; CPU:$C24D PRG:024D BD 5D 05
|
||
bmi RunGameplayFrame_Block_4 ; CPU:$C250 PRG:0250 30 19
|
||
inc $0567,x ; CPU:$C252 PRG:0252 FE 67 05
|
||
lda $0567,x ; CPU:$C255 PRG:0255 BD 67 05
|
||
cmp #$F8 ; CPU:$C258 PRG:0258 C9 F8
|
||
bne RunGameplayFrame_Block_4 ; CPU:$C25A PRG:025A D0 0F
|
||
lda #$FF ; CPU:$C25C PRG:025C A9 FF
|
||
sta $055D,x ; CPU:$C25E PRG:025E 9D 5D 05
|
||
lda #$F0 ; CPU:$C261 PRG:0261 A9 F0
|
||
sta $057B,x ; CPU:$C263 PRG:0263 9D 7B 05
|
||
lda #$00 ; CPU:$C266 PRG:0266 A9 00
|
||
sta $05CE ; CPU:$C268 PRG:0268 8D CE 05
|
||
RunGameplayFrame_Block_4:
|
||
dex ; CPU:$C26B PRG:026B CA
|
||
bpl RunGameplayFrame_Block_3 ; CPU:$C26C PRG:026C 10 DF
|
||
ldx #$13 ; CPU:$C26E PRG:026E A2 13
|
||
RunGameplayFrame_Block_5:
|
||
lda $0530,x ; CPU:$C270 PRG:0270 BD 30 05
|
||
bmi RunGameplayFrame_Block_6 ; CPU:$C273 PRG:0273 30 12
|
||
inc $0490,x ; CPU:$C275 PRG:0275 FE 90 04
|
||
lda $0490,x ; CPU:$C278 PRG:0278 BD 90 04
|
||
cmp #$F8 ; CPU:$C27B PRG:027B C9 F8
|
||
bcc RunGameplayFrame_Block_6 ; CPU:$C27D PRG:027D 90 08
|
||
lda #$F0 ; CPU:$C27F PRG:027F A9 F0
|
||
sta $04A4,x ; CPU:$C281 PRG:0281 9D A4 04
|
||
sta $0530,x ; CPU:$C284 PRG:0284 9D 30 05
|
||
RunGameplayFrame_Block_6:
|
||
dex ; CPU:$C287 PRG:0287 CA
|
||
bpl RunGameplayFrame_Block_5 ; CPU:$C288 PRG:0288 10 E6
|
||
lda PpuScrollX ; CPU:$C28A PRG:028A A5 17
|
||
and #$07 ; CPU:$C28C PRG:028C 29 07
|
||
bne RunGameplayFrame_Block_8 ; CPU:$C28E PRG:028E D0 3E
|
||
ldx $88 ; CPU:$C290 PRG:0290 A6 88
|
||
dex ; CPU:$C292 PRG:0292 CA
|
||
bmi RunGameplayFrame_Block_8 ; CPU:$C293 PRG:0293 30 39
|
||
lda #$00 ; CPU:$C295 PRG:0295 A9 00
|
||
sta $3E ; CPU:$C297 PRG:0297 85 3E
|
||
lda #$01 ; CPU:$C299 PRG:0299 A9 01
|
||
jsr InitializeOrQueueObject ; CPU:$C29B PRG:029B 20 DE D6
|
||
inc $C9 ; CPU:$C29E PRG:029E E6 C9
|
||
lda $C9 ; CPU:$C2A0 PRG:02A0 A5 C9
|
||
and #$1F ; CPU:$C2A2 PRG:02A2 29 1F
|
||
bne RunGameplayFrame_Block_7 ; CPU:$C2A4 PRG:02A4 D0 14
|
||
inc $CA ; CPU:$C2A6 PRG:02A6 E6 CA
|
||
lda $CA ; CPU:$C2A8 PRG:02A8 A5 CA
|
||
cmp #$0A ; CPU:$C2AA PRG:02AA C9 0A
|
||
bne RunGameplayFrame_Block_7 ; CPU:$C2AC PRG:02AC D0 0C
|
||
lda #$02 ; CPU:$C2AE PRG:02AE A9 02
|
||
sta $CA ; CPU:$C2B0 PRG:02B0 85 CA
|
||
ldy $BA ; CPU:$C2B2 PRG:02B2 A4 BA
|
||
iny ; CPU:$C2B4 PRG:02B4 C8
|
||
tya ; CPU:$C2B5 PRG:02B5 98
|
||
and #$03 ; CPU:$C2B6 PRG:02B6 29 03
|
||
sta $BA ; CPU:$C2B8 PRG:02B8 85 BA
|
||
RunGameplayFrame_Block_7:
|
||
ldx $CA ; CPU:$C2BA PRG:02BA A6 CA
|
||
lda SpawnPatternIndexTable,x ; CPU:$C2BC PRG:02BC BD BF C3
|
||
asl a ; CPU:$C2BF PRG:02BF 0A
|
||
tay ; CPU:$C2C0 PRG:02C0 A8
|
||
lda SpawnPatternHandlerTable,y ; CPU:$C2C1 PRG:02C1 B9 B5 C3
|
||
sta DispatchPointerLo ; CPU:$C2C4 PRG:02C4 85 25
|
||
lda $C3B6,y ; CPU:$C2C6 PRG:02C6 B9 B6 C3
|
||
sta DispatchPointerHi ; CPU:$C2C9 PRG:02C9 85 26
|
||
jsr DispatchSpawnPattern ; CPU:$C2CB PRG:02CB 20 B2 C3
|
||
RunGameplayFrame_Block_8:
|
||
ldx #$07 ; CPU:$C2CE PRG:02CE A2 07
|
||
RunGameplayFrame_Block_9:
|
||
lda $055D,x ; CPU:$C2D0 PRG:02D0 BD 5D 05
|
||
bmi RunGameplayFrame_Block_10 ; CPU:$C2D3 PRG:02D3 30 18
|
||
jsr $CECE ; CPU:$C2D5 PRG:02D5 20 CE CE
|
||
lda $05CD ; CPU:$C2D8 PRG:02D8 AD CD 05
|
||
beq RunGameplayFrame_Block_10 ; CPU:$C2DB PRG:02DB F0 10
|
||
dec $05CD ; CPU:$C2DD PRG:02DD CE CD 05
|
||
inc $05CE ; CPU:$C2E0 PRG:02E0 EE CE 05
|
||
txa ; CPU:$C2E3 PRG:02E3 8A
|
||
pha ; CPU:$C2E4 PRG:02E4 48
|
||
lda $0559 ; CPU:$C2E5 PRG:02E5 AD 59 05
|
||
jsr InitializeOrQueueObject ; CPU:$C2E8 PRG:02E8 20 DE D6
|
||
pla ; CPU:$C2EB PRG:02EB 68
|
||
tax ; CPU:$C2EC PRG:02EC AA
|
||
RunGameplayFrame_Block_10:
|
||
jsr $CE2F ; CPU:$C2ED PRG:02ED 20 2F CE
|
||
dex ; CPU:$C2F0 PRG:02F0 CA
|
||
bpl RunGameplayFrame_Block_9 ; CPU:$C2F1 PRG:02F1 10 DD
|
||
ldx #$13 ; CPU:$C2F3 PRG:02F3 A2 13
|
||
RunGameplayFrame_Block_11:
|
||
lda $0530,x ; CPU:$C2F5 PRG:02F5 BD 30 05
|
||
bmi RunGameplayFrame_Block_14 ; CPU:$C2F8 PRG:02F8 30 1B
|
||
lda $C5 ; CPU:$C2FA PRG:02FA A5 C5
|
||
bne RunGameplayFrame_Block_13 ; CPU:$C2FC PRG:02FC D0 14
|
||
jsr $C9B6 ; CPU:$C2FE PRG:02FE 20 B6 C9
|
||
lda $04A4,x ; CPU:$C301 PRG:0301 BD A4 04
|
||
cmp #$02 ; CPU:$C304 PRG:0304 C9 02
|
||
bcs RunGameplayFrame_Block_12 ; CPU:$C306 PRG:0306 B0 03
|
||
jsr ReflectObjectYVelocity ; CPU:$C308 PRG:0308 20 4F CA
|
||
RunGameplayFrame_Block_12:
|
||
cmp #$D8 ; CPU:$C30B PRG:030B C9 D8
|
||
bcc RunGameplayFrame_Block_13 ; CPU:$C30D PRG:030D 90 03
|
||
jsr ReflectObjectYVelocity ; CPU:$C30F PRG:030F 20 4F CA
|
||
RunGameplayFrame_Block_13:
|
||
jsr $CB1C ; CPU:$C312 PRG:0312 20 1C CB
|
||
RunGameplayFrame_Block_14:
|
||
lda FrameCounter ; CPU:$C315 PRG:0315 A5 19
|
||
and #$07 ; CPU:$C317 PRG:0317 29 07
|
||
lsr a ; CPU:$C319 PRG:0319 4A
|
||
tay ; CPU:$C31A PRG:031A A8
|
||
lda $C9DD,y ; CPU:$C31B PRG:031B B9 DD C9
|
||
pha ; CPU:$C31E PRG:031E 48
|
||
lda FrameCounter ; CPU:$C31F PRG:031F A5 19
|
||
lsr a ; CPU:$C321 PRG:0321 4A
|
||
txa ; CPU:$C322 PRG:0322 8A
|
||
bcc RunGameplayFrame_Block_15 ; CPU:$C323 PRG:0323 90 06
|
||
sta Temp12 ; CPU:$C325 PRG:0325 85 12
|
||
lda #$13 ; CPU:$C327 PRG:0327 A9 13
|
||
sbc Temp12 ; CPU:$C329 PRG:0329 E5 12
|
||
RunGameplayFrame_Block_15:
|
||
asl a ; CPU:$C32B PRG:032B 0A
|
||
asl a ; CPU:$C32C PRG:032C 0A
|
||
tay ; CPU:$C32D PRG:032D A8
|
||
pla ; CPU:$C32E PRG:032E 68
|
||
sta $02B1,y ; CPU:$C32F PRG:032F 99 B1 02
|
||
lda $04A4,x ; CPU:$C332 PRG:0332 BD A4 04
|
||
sta $02B0,y ; CPU:$C335 PRG:0335 99 B0 02
|
||
lda $0490,x ; CPU:$C338 PRG:0338 BD 90 04
|
||
sta $02B3,y ; CPU:$C33B PRG:033B 99 B3 02
|
||
lda #$00 ; CPU:$C33E PRG:033E A9 00
|
||
sta $02B2,y ; CPU:$C340 PRG:0340 99 B2 02
|
||
dex ; CPU:$C343 PRG:0343 CA
|
||
bpl RunGameplayFrame_Block_11 ; CPU:$C344 PRG:0344 10 AF
|
||
lda $05CE ; CPU:$C346 PRG:0346 AD CE 05
|
||
cmp #$14 ; CPU:$C349 PRG:0349 C9 14
|
||
bcc RunGameplayFrame_Block_16 ; CPU:$C34B PRG:034B 90 20
|
||
inc $47 ; CPU:$C34D PRG:034D E6 47
|
||
lda #$00 ; CPU:$C34F PRG:034F A9 00
|
||
jsr InitializeOrQueueObject ; CPU:$C351 PRG:0351 20 DE D6
|
||
dec $47 ; CPU:$C354 PRG:0354 C6 47
|
||
lda #$10 ; CPU:$C356 PRG:0356 A9 10
|
||
sta $F2 ; CPU:$C358 PRG:0358 85 F2
|
||
inc $C8 ; CPU:$C35A PRG:035A E6 C8
|
||
jsr $D3ED ; CPU:$C35C PRG:035C 20 ED D3
|
||
jsr $C527 ; CPU:$C35F PRG:035F 20 27 C5
|
||
dec $C8 ; CPU:$C362 PRG:0362 C6 C8
|
||
ldx #$64 ; CPU:$C364 PRG:0364 A2 64
|
||
jsr $F45E ; CPU:$C366 PRG:0366 20 5E F4
|
||
lda #$20 ; CPU:$C369 PRG:0369 A9 20
|
||
sta $F2 ; CPU:$C36B PRG:036B 85 F2
|
||
RunGameplayFrame_Block_16:
|
||
ldx #$F0 ; CPU:$C36D PRG:036D A2 F0
|
||
lda $0488 ; CPU:$C36F PRG:036F AD 88 04
|
||
beq RunGameplayFrame_Block_17 ; CPU:$C372 PRG:0372 F0 02
|
||
ldx #$88 ; CPU:$C374 PRG:0374 A2 88
|
||
RunGameplayFrame_Block_17:
|
||
stx $0200 ; CPU:$C376 PRG:0376 8E 00 02
|
||
stx $0204 ; CPU:$C379 PRG:0379 8E 04 02
|
||
sta $0203 ; CPU:$C37C PRG:037C 8D 03 02
|
||
clc ; CPU:$C37F PRG:037F 18
|
||
adc #$08 ; CPU:$C380 PRG:0380 69 08
|
||
sta $0207 ; CPU:$C382 PRG:0382 8D 07 02
|
||
lda FrameCounter ; CPU:$C385 PRG:0385 A5 19
|
||
and #$03 ; CPU:$C387 PRG:0387 29 03
|
||
sta $0202 ; CPU:$C389 PRG:0389 8D 02 02
|
||
sta $0206 ; CPU:$C38C PRG:038C 8D 06 02
|
||
ldx #$E3 ; CPU:$C38F PRG:038F A2 E3
|
||
stx $0201 ; CPU:$C391 PRG:0391 8E 01 02
|
||
inx ; CPU:$C394 PRG:0394 E8
|
||
stx $0205 ; CPU:$C395 PRG:0395 8E 05 02
|
||
lda $88 ; CPU:$C398 PRG:0398 A5 88
|
||
bmi RunGameplayFrame_Block_18 ; CPU:$C39A PRG:039A 30 03
|
||
jmp FlushPpuCommandBuffer_Block_4 ; CPU:$C39C PRG:039C 4C 09 C2
|
||
RunGameplayFrame_Block_18:
|
||
jsr SortOrInitializeRecords ; CPU:$C39F PRG:039F 20 79 C5
|
||
lda #$01 ; CPU:$C3A2 PRG:03A2 A9 01
|
||
sta $F0 ; CPU:$C3A4 PRG:03A4 85 F0
|
||
jsr WaitForFrame ; CPU:$C3A6 PRG:03A6 20 65 F4
|
||
lda #$02 ; CPU:$C3A9 PRG:03A9 A9 02
|
||
sta $F2 ; CPU:$C3AB PRG:03AB 85 F2
|
||
jmp $F36A ; CPU:$C3AD PRG:03AD 4C 6A F3
|
||
;===============================================================================
|
||
; DispatchSpawnPattern
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C3B2; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $03B2
|
||
; CPU address: $C3B2
|
||
;===============================================================================
|
||
|
||
DispatchSpawnPattern:
|
||
jmp ($0025) ; CPU:$C3B0 PRG:03B0 6C 25 00
|
||
SpawnPatternHandlerTable:
|
||
.word SpawnFromCommandStream ; CPU:$C3B3 PRG:03B3 C9 C3
|
||
.word SpawnAtRandomPosition ; CPU:$C3B5 PRG:03B5 F7 C3
|
||
.word SpawnPatternNone ; CPU:$C3B7 PRG:03B7 3E C4
|
||
.word InitializeSpecialObject ; CPU:$C3B9 PRG:03B9 5F C4
|
||
.word SpawnPatternNoneAlt ; CPU:$C3BB PRG:03BB 5E C4
|
||
SpawnPatternIndexTable:
|
||
.byte $00, $00, $02, $02, $02, $02, $02, $04, $03, $01 ; CPU:$C3BD PRG:03BD 00 00 02 02 02 02 02 04 03 01
|
||
;===============================================================================
|
||
; SpawnFromCommandStream
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C3C9; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $03C9
|
||
; CPU address: $C3C9
|
||
;===============================================================================
|
||
|
||
SpawnFromCommandStream:
|
||
ldy #$00 ; CPU:$C3C7 PRG:03C7 A0 00
|
||
lda (SpawnCommandPointerLo),y ; CPU:$C3C9 PRG:03C9 B1 23
|
||
inc SpawnCommandPointerLo ; CPU:$C3CB PRG:03CB E6 23
|
||
bne SpawnFromCommandStream_Block ; CPU:$C3CD PRG:03CD D0 02
|
||
inc SpawnCommandPointerHi ; CPU:$C3CF PRG:03CF E6 24
|
||
SpawnFromCommandStream_Block:
|
||
tax ; CPU:$C3D1 PRG:03D1 AA
|
||
beq SpawnFromCommandStream_Block_2 ; CPU:$C3D2 PRG:03D2 F0 20
|
||
asl a ; CPU:$C3D4 PRG:03D4 0A
|
||
asl a ; CPU:$C3D5 PRG:03D5 0A
|
||
asl a ; CPU:$C3D6 PRG:03D6 0A
|
||
sta SpawnPixelPosition ; CPU:$C3D7 PRG:03D7 85 15
|
||
lda #$00 ; CPU:$C3D9 PRG:03D9 A9 00
|
||
sta SpawnParameter ; CPU:$C3DB PRG:03DB 85 14
|
||
txa ; CPU:$C3DD PRG:03DD 8A
|
||
and #$C0 ; CPU:$C3DE PRG:03DE 29 C0
|
||
cmp #$80 ; CPU:$C3E0 PRG:03E0 C9 80
|
||
bne SpawnFromCommandStream_Block_1 ; CPU:$C3E2 PRG:03E2 D0 06
|
||
jsr AllocateEffectObject ; CPU:$C3E4 PRG:03E4 20 6B C4
|
||
jmp SpawnFromCommandStream ; CPU:$C3E7 PRG:03E7 4C C9 C3
|
||
SpawnFromCommandStream_Block_1:
|
||
cmp #$00 ; CPU:$C3EA PRG:03EA C9 00
|
||
bne SpawnFromCommandStream_Block_2 ; CPU:$C3EC PRG:03EC D0 06
|
||
jsr $C486 ; CPU:$C3EE PRG:03EE 20 86 C4
|
||
jmp SpawnFromCommandStream ; CPU:$C3F1 PRG:03F1 4C C9 C3
|
||
SpawnFromCommandStream_Block_2:
|
||
rts ; CPU:$C3F4 PRG:03F4 60
|
||
;===============================================================================
|
||
; SpawnAtRandomPosition
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C3F7; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $03F7
|
||
; CPU address: $C3F7
|
||
;===============================================================================
|
||
|
||
SpawnAtRandomPosition:
|
||
jsr GetRandomValue ; CPU:$C3F5 PRG:03F5 20 B3 F1
|
||
and #$7F ; CPU:$C3F8 PRG:03F8 29 7F
|
||
cmp #$04 ; CPU:$C3FA PRG:03FA C9 04
|
||
bcc SpawnRandomObject ; CPU:$C3FC PRG:03FC 90 0C
|
||
cmp #$18 ; CPU:$C3FE PRG:03FE C9 18
|
||
bcs SpawnRandomObject ; CPU:$C400 PRG:0400 B0 08
|
||
asl a ; CPU:$C402 PRG:0402 0A
|
||
asl a ; CPU:$C403 PRG:0403 0A
|
||
asl a ; CPU:$C404 PRG:0404 0A
|
||
sta SpawnPixelPosition ; CPU:$C405 PRG:0405 85 15
|
||
jsr AllocateEffectObject ; CPU:$C407 PRG:0407 20 6B C4
|
||
;===============================================================================
|
||
; SpawnRandomObject
|
||
;
|
||
; Global:
|
||
; Spawns a gameplay object at a randomized screen position.
|
||
;
|
||
; Local:
|
||
; Picks a random Y position in the valid band, snaps it to a 32-pixel grid,
|
||
; derives a spawn parameter from random state and the spawn selector table,
|
||
; allocates a gameplay-object slot, then retries (optionally reflecting Y
|
||
; velocity) until the object is placed or the slot pool is exhausted.
|
||
;
|
||
; Parameters:
|
||
; RandomState ($1B), SpawnSelector ($BA), SpawnSelectorAdjustmentTable.
|
||
;
|
||
; Returns:
|
||
; A gameplay object allocated and initialized; X = slot ($00-$13) or $FF if
|
||
; the pool is full.
|
||
;
|
||
; PRG offset: $040C
|
||
; CPU address: $C40C
|
||
;===============================================================================
|
||
|
||
SpawnRandomObject:
|
||
jsr GetRandomValue ; CPU:$C40A PRG:040A 20 B3 F1
|
||
and #$3F ; CPU:$C40D PRG:040D 29 3F
|
||
cmp #$02 ; CPU:$C40F PRG:040F C9 02
|
||
bcc SpawnRandomObject_Block ; CPU:$C411 PRG:0411 90 24
|
||
cmp #$18 ; CPU:$C413 PRG:0413 C9 18
|
||
bcs SpawnRandomObject_Block ; CPU:$C415 PRG:0415 B0 20
|
||
asl a ; CPU:$C417 PRG:0417 0A
|
||
asl a ; CPU:$C418 PRG:0418 0A
|
||
asl a ; CPU:$C419 PRG:0419 0A
|
||
sta SpawnPixelPosition ; CPU:$C41A PRG:041A 85 15
|
||
jsr GetRandomValue ; CPU:$C41C PRG:041C 20 B3 F1
|
||
and #$3F ; CPU:$C41F PRG:041F 29 3F
|
||
ldx $BA ; CPU:$C421 PRG:0421 A6 BA
|
||
adc SpawnSelectorAdjustmentTable,x ; CPU:$C423 PRG:0423 7D 3A C4
|
||
sta SpawnParameter ; CPU:$C426 PRG:0426 85 14
|
||
jsr $C486 ; CPU:$C428 PRG:0428 20 86 C4
|
||
jsr GetRandomValue ; CPU:$C42B PRG:042B 20 B3 F1
|
||
lsr a ; CPU:$C42E PRG:042E 4A
|
||
bcc SpawnRandomObject ; CPU:$C42F PRG:042F 90 D9
|
||
jsr ReflectObjectYVelocity ; CPU:$C431 PRG:0431 20 4F CA
|
||
jmp SpawnRandomObject ; CPU:$C434 PRG:0434 4C 0C C4
|
||
SpawnRandomObject_Block:
|
||
rts ; CPU:$C437 PRG:0437 60
|
||
SpawnSelectorAdjustmentTable:
|
||
.byte $20, $30, $40, $60 ; CPU:$C438 PRG:0438 20 30 40 60
|
||
;===============================================================================
|
||
; SpawnPatternNone
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C43E; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $043E
|
||
; CPU address: $C43E
|
||
;===============================================================================
|
||
|
||
SpawnPatternNone:
|
||
jsr GetRandomValue ; CPU:$C43C PRG:043C 20 B3 F1
|
||
and #$CF ; CPU:$C43F PRG:043F 29 CF
|
||
bne SpawnAtRandomPosition ; CPU:$C441 PRG:0441 D0 B2
|
||
ldy $89 ; CPU:$C443 PRG:0443 A4 89
|
||
iny ; CPU:$C445 PRG:0445 C8
|
||
bne SpawnAtRandomPosition ; CPU:$C446 PRG:0446 D0 AD
|
||
lda #$E6 ; CPU:$C448 PRG:0448 A9 E6
|
||
sta $9B ; CPU:$C44A PRG:044A 85 9B
|
||
lda RandomState ; CPU:$C44C PRG:044C A5 1B
|
||
and #$7F ; CPU:$C44E PRG:044E 29 7F
|
||
adc #$40 ; CPU:$C450 PRG:0450 69 40
|
||
sta $92 ; CPU:$C452 PRG:0452 85 92
|
||
lda #$80 ; CPU:$C454 PRG:0454 A9 80
|
||
sta $89 ; CPU:$C456 PRG:0456 85 89
|
||
lda #$00 ; CPU:$C458 PRG:0458 A9 00
|
||
sta $80 ; CPU:$C45A PRG:045A 85 80
|
||
;===============================================================================
|
||
; SpawnPatternNoneAlt
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C45E; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $045E
|
||
; CPU address: $C45E
|
||
;===============================================================================
|
||
|
||
SpawnPatternNoneAlt:
|
||
rts ; CPU:$C45C PRG:045C 60
|
||
;===============================================================================
|
||
; InitializeSpecialObject
|
||
;
|
||
; Global:
|
||
; Reachable game-engine routine identified during recursive Pass-1 tracing.
|
||
;
|
||
; Local:
|
||
; Performs the control flow beginning at CPU $C45F; detailed semantics are
|
||
; refined as its RAM and table dependencies are traced.
|
||
;
|
||
; Parameters:
|
||
; Caller-defined register and global RAM state.
|
||
;
|
||
; Returns:
|
||
; Routine-specific result; register preservation remains provisional.
|
||
;
|
||
; PRG offset: $045F
|
||
; CPU address: $C45F
|
||
;===============================================================================
|
||
|
||
InitializeSpecialObject:
|
||
jsr SpawnRandomObject ; CPU:$C45D PRG:045D 20 0C C4
|
||
jsr GetRandomValue ; CPU:$C460 PRG:0460 20 B3 F1
|
||
and #$7F ; CPU:$C463 PRG:0463 29 7F
|
||
sta $0508,x ; CPU:$C465 PRG:0465 9D 08 05
|
||
rts ; CPU:$C468 PRG:0468 60
|
||
|
||
;===============================================================================
|
||
; AllocateEffectObject
|
||
;
|
||
; Global:
|
||
; Allocates and initializes an entry in the eight-slot effect-object pool.
|
||
;
|
||
; Local:
|
||
; Searches slots 7 through 0 for a negative state byte. If a free slot is
|
||
; found, marks it active, clears its X position, and applies the requested
|
||
; spawn position to its Y-position field.
|
||
;
|
||
; Parameters:
|
||
; SpawnPixelPosition ($15) = initial effect-object position.
|
||
;
|
||
; Returns:
|
||
; X = allocated slot, $00-$07. If the pool is full, X returns as $FF and no
|
||
; pool fields are changed.
|
||
;
|
||
; Clobbers:
|
||
; A and X.
|
||
;
|
||
; PRG offsets: $046B-$0485
|
||
; CPU range: $C46B-$C485
|
||
;===============================================================================
|
||
AllocateEffectObject:
|
||
ldx #$07 ; CPU:$C469 PRG:0469 A2 07
|
||
|
||
@FindFreeSlot:
|
||
lda EffectObjectState,x ; CPU:$C46B PRG:046B BD 5D 05
|
||
bmi @InitializeSlot ; CPU:$C46E PRG:046E 30 04
|
||
dex ; CPU:$C470 PRG:0470 CA
|
||
bpl @FindFreeSlot ; CPU:$C471 PRG:0471 10 F8
|
||
rts ; CPU:$C473 PRG:0473 60
|
||
|
||
@InitializeSlot:
|
||
lda #$01 ; CPU:$C474 PRG:0474 A9 01
|
||
sta EffectObjectState,x ; CPU:$C476 PRG:0476 9D 5D 05
|
||
lda #$00 ; CPU:$C479 PRG:0479 A9 00
|
||
sta EffectObjectPosX,x ; CPU:$C47B PRG:047B 9D 67 05
|
||
lda SpawnPixelPosition ; CPU:$C47E PRG:047E A5 15
|
||
sta EffectObjectPosY,x ; CPU:$C480 PRG:0480 9D 7B 05
|
||
rts ; CPU:$C483 PRG:0483 60
|
||
|
||
;===============================================================================
|
||
; AllocateGameplayObject
|
||
;
|
||
; Global:
|
||
; Allocates and initializes an entry in the twenty-slot gameplay-object pool.
|
||
;
|
||
; Local:
|
||
; Searches slots 19 through 0 for a negative lifecycle-state byte. On
|
||
; success, initializes the slot state and clears its movement/parameter
|
||
; fields before copying the requested spawn parameters into the position
|
||
; fields.
|
||
;
|
||
; Parameters:
|
||
; SpawnParameter ($14) = high X-position or horizontal spawn parameter.
|
||
; SpawnPixelPosition ($15) = initial Y-position in pixel units.
|
||
;
|
||
; Returns:
|
||
; X = allocated slot, $00-$13. If the pool is full, X returns as $FF and no
|
||
; pool fields are changed.
|
||
;
|
||
; Clobbers:
|
||
; A and X.
|
||
;
|
||
; PRG offsets: $0486-$04AC
|
||
; CPU range: $C486-$C4AC
|
||
;===============================================================================
|
||
AllocateGameplayObject:
|
||
ldx #$13 ; CPU:$C484 PRG:0484 A2 13
|
||
|
||
@FindFreeSlot:
|
||
lda GameplayObjectState,x ; CPU:$C486 PRG:0486 BD 30 05
|
||
bmi @InitializeSlot ; CPU:$C489 PRG:0489 30 04
|
||
dex ; CPU:$C48B PRG:048B CA
|
||
bpl @FindFreeSlot ; CPU:$C48C PRG:048C 10 F8
|
||
rts ; CPU:$C48E PRG:048E 60
|
||
|
||
@InitializeSlot:
|
||
lda #$00 ; CPU:$C48F PRG:048F A9 00
|
||
sta GameplayObjectState,x ; CPU:$C491 PRG:0491 9D 30 05
|
||
sta GameplayObjectPosX,x ; CPU:$C494 PRG:0494 9D 90 04
|
||
sta GameplayObjectVelocityX,x ; CPU:$C497 PRG:0497 9D F4 04
|
||
sta GameplayObjectParameter,x ; CPU:$C49A PRG:049A 9D 08 05
|
||
sta GameplayObjectVelocityY,x ; CPU:$C49D PRG:049D 9D E0 04
|
||
lda SpawnParameter ; CPU:$C4A0 PRG:04A0 A5 14
|
||
sta GameplayObjectPosXHi,x ; CPU:$C4A2 PRG:04A2 9D 1C 05
|
||
lda SpawnPixelPosition ; CPU:$C4A5 PRG:04A5 A5 15
|
||
sta GameplayObjectPosY,x ; CPU:$C4A7 PRG:04A7 9D A4 04
|
||
rts ; CPU:$C4AA PRG:04AA 60
|
||
|
||
; Round spawn command stream
|
||
;
|
||
; Command data consumed by SpawnFromCommandStream ($C3C9) to initialize
|
||
; round objects. Each command byte: top 3 bits give the spawn Y position,
|
||
; bits 7-6 select object type (%10 = effect object via AllocateEffectObject,
|
||
; %00 = gameplay object via AllocateGameplayObject), and any other value
|
||
; terminates the stream.
|
||
;
|
||
; PRG offsets: $04AD-$0526
|
||
; CPU range: $C4AD-$C526
|
||
;===============================================================================
|
||
|
||
RoundSpawnCommandStream:
|
||
.byte $00, $00, $09, $00, $08, $8C, $00, $07 ; CPU:$C4AB PRG:04AB 00 00 09 00 08 8C 00 07
|
||
.byte $18, $00, $18, $00, $19, $00, $1A, $00 ; CPU:$C4B3 PRG:04B3 18 00 18 00 19 00 1A 00
|
||
.byte $84, $94, $1A, $00, $1A, $00, $1A, $00 ; CPU:$C4BB PRG:04BB 84 94 1A 00 1A 00 1A 00
|
||
.byte $0B, $12, $00, $0C, $13, $00, $0D, $14 ; CPU:$C4C3 PRG:04C3 0B 12 00 0C 13 00 0D 14
|
||
.byte $00, $14, $00, $00, $90, $00, $07, $00 ; CPU:$C4CB PRG:04CB 00 14 00 00 90 00 07 00
|
||
.byte $07, $8C, $96, $00, $08, $00, $09, $00 ; CPU:$C4D3 PRG:04D3 07 8C 96 00 08 00 09 00
|
||
.byte $00, $18, $00, $17, $00, $16, $00, $00 ; CPU:$C4DB PRG:04DB 00 18 00 17 00 16 00 00
|
||
.byte $00, $00, $00, $00, $8A, $90, $00, $00 ; CPU:$C4E3 PRG:04E3 00 00 00 00 8A 90 00 00
|
||
.byte $00, $08, $00, $09, $98, $00, $0A, $00 ; CPU:$C4EB PRG:04EB 00 08 00 09 98 00 0A 00
|
||
.byte $00, $00, $86, $8A, $15, $00, $14, $00 ; CPU:$C4F3 PRG:04F3 00 00 86 8A 15 00 14 00
|
||
.byte $8E, $13, $00, $00, $03, $0D, $00, $0D ; CPU:$C4FB PRG:04FB 8E 13 00 00 03 0D 00 0D
|
||
.byte $0E, $00, $0C, $0D, $00, $0D, $19, $00 ; CPU:$C503 PRG:0503 0E 00 0C 0D 00 0D 19 00
|
||
.byte $86, $92, $00, $00, $98, $00, $00, $0A ; CPU:$C50B PRG:050B 86 92 00 00 98 00 00 0A
|
||
.byte $12, $00, $09, $13, $00, $08, $14, $00 ; CPU:$C513 PRG:0513 12 00 09 13 00 08 14 00
|
||
.byte $07, $15, $00, $07, $16, $00, $07, $00 ; CPU:$C51B PRG:051B 07 15 00 07 16 00 07 00
|
||
.byte $00, $00 ; CPU:$C523 PRG:0523 00 00
|
||
|
||
;===============================================================================
|
||
; AdvanceRoundSeed
|
||
;
|
||
; Global:
|
||
; Advances the RAM value at RoundSeedValue using a deterministic multiply step.
|
||
;
|
||
; Local:
|
||
; Refreshes the source value, doubles it in memory, then forms ten times the refreshed value modulo 256.
|
||
;
|
||
; Parameters:
|
||
; Round seed/source state in RoundSeedValue.
|
||
;
|
||
; Returns:
|
||
; RoundSeedValue contains the advanced byte value.
|
||
;
|
||
; PRG offsets: $0527-$0538
|
||
; CPU range: $C527-$C538
|
||
;===============================================================================
|
||
|
||
AdvanceRoundSeed:
|
||
jsr UpdateRoundSeedSource ; CPU:$C525 PRG:0525 20 E2 D0
|
||
asl RoundSeedValue ; CPU:$C528 PRG:0528 0E 59 05
|
||
lda RoundSeedValue ; CPU:$C52B PRG:052B AD 59 05
|
||
asl a ; CPU:$C52E PRG:052E 0A
|
||
asl a ; CPU:$C52F PRG:052F 0A
|
||
adc RoundSeedValue ; CPU:$C530 PRG:0530 6D 59 05
|
||
sta RoundSeedValue ; CPU:$C533 PRG:0533 8D 59 05
|
||
rts ; CPU:$C536 PRG:0536 60
|
||
;===============================================================================
|
||
; FindSortedRecordPosition
|
||
;
|
||
; Global:
|
||
; Finds the insertion position for the current five-byte record.
|
||
;
|
||
; Local:
|
||
; Walks up to 50 five-byte records at SortedRecordTable, comparing bytes from high to low against the current record at $0003-$0007.
|
||
;
|
||
; Parameters:
|
||
; Current five-byte record at $0003-$0007.
|
||
;
|
||
; Returns:
|
||
; A and RecordIndex identify the selected position; $43/$49/$4A receive derived values.
|
||
;
|
||
; PRG offsets: $0539-$0578
|
||
; CPU range: $C539-$C578
|
||
;===============================================================================
|
||
|
||
FindSortedRecordPosition:
|
||
lda #$00 ; CPU:$C537 PRG:0537 A9 00
|
||
sta RecordIndex ; CPU:$C539 PRG:0539 85 12
|
||
FindSortedRecordPosition_Block:
|
||
lda RecordIndex ; CPU:$C53B PRG:053B A5 12
|
||
asl a ; CPU:$C53D PRG:053D 0A
|
||
asl a ; CPU:$C53E PRG:053E 0A
|
||
adc RecordIndex ; CPU:$C53F PRG:053F 65 12
|
||
sta RecordPtrLo ; CPU:$C541 PRG:0541 85 1D
|
||
lda #$07 ; CPU:$C543 PRG:0543 A9 07
|
||
sta RecordPtrHi ; CPU:$C545 PRG:0545 85 1E
|
||
ldy #$04 ; CPU:$C547 PRG:0547 A0 04
|
||
FindSortedRecordPosition_Block_1:
|
||
lda (RecordPtrLo),y ; CPU:$C549 PRG:0549 B1 1D
|
||
cmp CurrentRecord,y ; CPU:$C54B PRG:054B D9 03 00
|
||
bcc FindSortedRecordPosition_Block_3 ; CPU:$C54E PRG:054E 90 11
|
||
bne FindSortedRecordPosition_Block_2 ; CPU:$C550 PRG:0550 D0 05
|
||
dey ; CPU:$C552 PRG:0552 88
|
||
bpl FindSortedRecordPosition_Block_1 ; CPU:$C553 PRG:0553 10 F4
|
||
bmi FindSortedRecordPosition_Block_3 ; CPU:$C555 PRG:0555 30 0A
|
||
FindSortedRecordPosition_Block_2:
|
||
inc RecordIndex ; CPU:$C557 PRG:0557 E6 12
|
||
lda RecordIndex ; CPU:$C559 PRG:0559 A5 12
|
||
cmp #$32 ; CPU:$C55B PRG:055B C9 32
|
||
bne FindSortedRecordPosition_Block ; CPU:$C55D PRG:055D D0 DC
|
||
dec RecordIndex ; CPU:$C55F PRG:055F C6 12
|
||
FindSortedRecordPosition_Block_3:
|
||
inc RecordIndex ; CPU:$C561 PRG:0561 E6 12
|
||
lda RecordIndex ; CPU:$C563 PRG:0563 A5 12
|
||
pha ; CPU:$C565 PRG:0565 48
|
||
sta SelectedRecordIndex ; CPU:$C566 PRG:0566 85 43
|
||
ldy #$0A ; CPU:$C568 PRG:0568 A0 0A
|
||
jsr DivideOrScaleRecordValue ; CPU:$C56A PRG:056A 20 7C D7
|
||
sta ScaledRecordValue ; CPU:$C56D PRG:056D 85 4A
|
||
lda SelectedRecordIndex ; CPU:$C56F PRG:056F A5 43
|
||
sta SelectedRecordIndexCopy ; CPU:$C571 PRG:0571 85 49
|
||
pla ; CPU:$C573 PRG:0573 68
|
||
sta RecordIndex ; CPU:$C574 PRG:0574 85 12
|
||
rts ; CPU:$C576 PRG:0576 60
|
||
;===============================================================================
|
||
; InsertRecordIntoSortedTable
|
||
;
|
||
; Global:
|
||
; Inserts the current five-byte record into the sorted 50-record table.
|
||
;
|
||
; Local:
|
||
; Finds the insertion index, shifts later five-byte records toward the end, and copies the current record into the selected slot.
|
||
;
|
||
; Parameters:
|
||
; Current five-byte record at $0003-$0007.
|
||
;
|
||
; Returns:
|
||
; The table at SortedRecordTable-$07F9 is updated in place.
|
||
;
|
||
; PRG offsets: $0579-$05B6
|
||
; CPU range: $C579-$C5B6
|
||
;===============================================================================
|
||
|
||
InsertRecordIntoSortedTable:
|
||
jsr FindSortedRecordPosition ; CPU:$C577 PRG:0577 20 39 C5
|
||
dec RecordIndex ; CPU:$C57A PRG:057A C6 12
|
||
lda #$31 ; CPU:$C57C PRG:057C A9 31
|
||
sec ; CPU:$C57E PRG:057E 38
|
||
sbc RecordIndex ; CPU:$C57F PRG:057F E5 12
|
||
sta ReverseRecordIndex ; CPU:$C581 PRG:0581 85 13
|
||
asl a ; CPU:$C583 PRG:0583 0A
|
||
asl a ; CPU:$C584 PRG:0584 0A
|
||
adc ReverseRecordIndex ; CPU:$C585 PRG:0585 65 13
|
||
tay ; CPU:$C587 PRG:0587 A8
|
||
lda RecordIndex ; CPU:$C588 PRG:0588 A5 12
|
||
asl a ; CPU:$C58A PRG:058A 0A
|
||
asl a ; CPU:$C58B PRG:058B 0A
|
||
adc RecordIndex ; CPU:$C58C PRG:058C 65 12
|
||
sta RecordPtrLo ; CPU:$C58E PRG:058E 85 1D
|
||
clc ; CPU:$C590 PRG:0590 18
|
||
adc #$05 ; CPU:$C591 PRG:0591 69 05
|
||
sta DestinationPtrLo ; CPU:$C593 PRG:0593 85 1F
|
||
lda #$07 ; CPU:$C595 PRG:0595 A9 07
|
||
sta RecordPtrHi ; CPU:$C597 PRG:0597 85 1E
|
||
sta DestinationPtrHi ; CPU:$C599 PRG:0599 85 20
|
||
tya ; CPU:$C59B PRG:059B 98
|
||
beq InsertRecordIntoSortedTable_Block_1 ; CPU:$C59C PRG:059C F0 0C
|
||
dey ; CPU:$C59E PRG:059E 88
|
||
InsertRecordIntoSortedTable_Block:
|
||
lda (RecordPtrLo),y ; CPU:$C59F PRG:059F B1 1D
|
||
sta (DestinationPtrLo),y ; CPU:$C5A1 PRG:05A1 91 1F
|
||
dey ; CPU:$C5A3 PRG:05A3 88
|
||
bne InsertRecordIntoSortedTable_Block ; CPU:$C5A4 PRG:05A4 D0 F9
|
||
lda (RecordPtrLo),y ; CPU:$C5A6 PRG:05A6 B1 1D
|
||
sta (DestinationPtrLo),y ; CPU:$C5A8 PRG:05A8 91 1F
|
||
InsertRecordIntoSortedTable_Block_1:
|
||
ldy #$04 ; CPU:$C5AA PRG:05AA A0 04
|
||
InsertRecordIntoSortedTable_Block_2:
|
||
lda CurrentRecord,y ; CPU:$C5AC PRG:05AC B9 03 00
|
||
sta (RecordPtrLo),y ; CPU:$C5AF PRG:05AF 91 1D
|
||
dey ; CPU:$C5B1 PRG:05B1 88
|
||
bpl InsertRecordIntoSortedTable_Block_2 ; CPU:$C5B2 PRG:05B2 10 F8
|
||
rts ; CPU:$C5B4 PRG:05B4 60
|
||
|
||
; Carrier display-selection tables
|
||
;===============================================================================
|
||
NormalDisplayModeTable:
|
||
.byte $01, $02, $03, $03 ; CPU:$C5B5 PRG:05B5 01 02 03 03
|
||
AlternateDisplayModeTable:
|
||
.byte $02, $01, $FF, $03, $04, $05, $06, $FF ; CPU:$C5B9 PRG:05B9 02 01 FF 03 04 05 06 FF
|
||
|
||
;===============================================================================
|
||
; UpdateCarrierObjectDisplay
|
||
;
|
||
; Global:
|
||
; Builds the display state for a carrier/rescue-sequence object and places the selected player relative to it.
|
||
;
|
||
; Local:
|
||
; Selects a display mode from one of two tables, builds an eight-part metasprite, and updates the targeted player position while the sequence is active.
|
||
;
|
||
; Parameters:
|
||
; Carrier sequence state at $048A-$048D and player arrays indexed through $048B.
|
||
;
|
||
; Returns:
|
||
; Carrier metasprite and target-player coordinates updated.
|
||
;
|
||
; PRG offsets: $05C3-$0613
|
||
; CPU range: $C5C3-$C613
|
||
;===============================================================================
|
||
|
||
UpdateCarrierObjectDisplay:
|
||
lda CarrierSequenceTimer ; CPU:$C5C1 PRG:05C1 AD 8D 04
|
||
lsr a ; CPU:$C5C4 PRG:05C4 4A
|
||
lsr a ; CPU:$C5C5 PRG:05C5 4A
|
||
lsr a ; CPU:$C5C6 PRG:05C6 4A
|
||
tax ; CPU:$C5C7 PRG:05C7 AA
|
||
lda CarrierMode ; CPU:$C5C8 PRG:05C8 AD 8A 04
|
||
bne UpdateCarrierObjectDisplay_Block ; CPU:$C5CB PRG:05CB D0 06
|
||
lda NormalDisplayModeTable,x ; CPU:$C5CD PRG:05CD BD B7 C5
|
||
jmp UpdateCarrierObjectDisplay_Store ; CPU:$C5D0 PRG:05D0 4C D8 C5
|
||
UpdateCarrierObjectDisplay_Block:
|
||
lda AlternateDisplayModeTable,x ; CPU:$C5D3 PRG:05D3 BD BB C5
|
||
UpdateCarrierObjectDisplay_Store:
|
||
sta CarrierDisplayMode ; CPU:$C5D6 PRG:05D6 85 87
|
||
ldx #$08 ; CPU:$C5D8 PRG:05D8 A2 08
|
||
jsr BuildObjectMetasprite ; CPU:$C5DA PRG:05DA 20 A4 E3
|
||
lda CarrierDropPending ; CPU:$C5DD PRG:05DD AD 8C 04
|
||
beq UpdateCarrierObjectDisplay_Block_5 ; CPU:$C5E0 PRG:05E0 F0 2F
|
||
ldx CarrierTargetPlayer ; CPU:$C5E2 PRG:05E2 AE 8B 04
|
||
lda CarrierSequenceTimer ; CPU:$C5E5 PRG:05E5 AD 8D 04
|
||
cmp #$20 ; CPU:$C5E8 PRG:05E8 C9 20
|
||
bne UpdateCarrierObjectDisplay_Block_1 ; CPU:$C5EA PRG:05EA D0 06
|
||
lda #$FF ; CPU:$C5EC PRG:05EC A9 FF
|
||
sta PlayerSlotState,x ; CPU:$C5EE PRG:05EE 95 88
|
||
bmi UpdateCarrierObjectDisplay_Block_4 ; CPU:$C5F0 PRG:05F0 30 1C
|
||
UpdateCarrierObjectDisplay_Block_1:
|
||
bcs UpdateCarrierObjectDisplay_Block_5 ; CPU:$C5F2 PRG:05F2 B0 1D
|
||
lda CarrierSavedValue ; CPU:$C5F4 PRG:05F4 AD 50 04
|
||
bne UpdateCarrierObjectDisplay_Block_2 ; CPU:$C5F7 PRG:05F7 D0 07
|
||
lda CarrierTargetX ; CPU:$C5F9 PRG:05F9 A5 99
|
||
clc ; CPU:$C5FB PRG:05FB 18
|
||
adc #$04 ; CPU:$C5FC PRG:05FC 69 04
|
||
bne UpdateCarrierObjectDisplay_Block_3 ; CPU:$C5FE PRG:05FE D0 05
|
||
UpdateCarrierObjectDisplay_Block_2:
|
||
lda CarrierTargetX ; CPU:$C600 PRG:0600 A5 99
|
||
sec ; CPU:$C602 PRG:0602 38
|
||
sbc #$04 ; CPU:$C603 PRG:0603 E9 04
|
||
UpdateCarrierObjectDisplay_Block_3:
|
||
sta PlayerPosX,x ; CPU:$C605 PRG:0605 95 91
|
||
lda CarrierPosY ; CPU:$C607 PRG:0607 A5 A2
|
||
sec ; CPU:$C609 PRG:0609 38
|
||
sbc #$0A ; CPU:$C60A PRG:060A E9 0A
|
||
sta PlayerPosY,x ; CPU:$C60C PRG:060C 95 9A
|
||
UpdateCarrierObjectDisplay_Block_4:
|
||
jsr BuildObjectMetasprite ; CPU:$C60E PRG:060E 20 A4 E3
|
||
UpdateCarrierObjectDisplay_Block_5:
|
||
rts ; CPU:$C611 PRG:0611 60
|
||
;===============================================================================
|
||
; FindEligiblePlayerForCarrier
|
||
;
|
||
; Global:
|
||
; Selects a player slot eligible for the carrier/rescue sequence.
|
||
;
|
||
; Local:
|
||
; Scans player slots 7 through 0, excluding inactive entries and rejecting a slot at the lower screen boundary unless its X position matches the carrier target.
|
||
;
|
||
; Parameters:
|
||
; Player state and position arrays; CarrierTargetX.
|
||
;
|
||
; Returns:
|
||
; CarrierTargetPlayer is set when an eligible player is found; $FF indicates none.
|
||
;
|
||
; PRG offsets: $0614-$064A
|
||
; CPU range: $C614-$C64A
|
||
;===============================================================================
|
||
|
||
FindEligiblePlayerForCarrier:
|
||
lda #$FF ; CPU:$C612 PRG:0612 A9 FF
|
||
sta CarrierTargetPlayer ; CPU:$C614 PRG:0614 8D 8B 04
|
||
ldx #$07 ; CPU:$C617 PRG:0617 A2 07
|
||
FindEligiblePlayerForCarrier_Block:
|
||
lda PlayerSlotState,x ; CPU:$C619 PRG:0619 B5 88
|
||
bmi FindEligiblePlayerForCarrier_Block_1 ; CPU:$C61B PRG:061B 30 0C
|
||
lda PlayerPosY,x ; CPU:$C61D PRG:061D B5 9A
|
||
cmp #$B4 ; CPU:$C61F PRG:061F C9 B4
|
||
bcc FindEligiblePlayerForCarrier_Block_1 ; CPU:$C621 PRG:0621 90 06
|
||
lda PlayerPosX,x ; CPU:$C623 PRG:0623 B5 91
|
||
cmp CarrierTargetX ; CPU:$C625 PRG:0625 C5 99
|
||
beq FindEligiblePlayerForCarrier_Block_2 ; CPU:$C627 PRG:0627 F0 04
|
||
FindEligiblePlayerForCarrier_Block_1:
|
||
dex ; CPU:$C629 PRG:0629 CA
|
||
bpl FindEligiblePlayerForCarrier_Block ; CPU:$C62A PRG:062A 10 ED
|
||
rts ; CPU:$C62C PRG:062C 60
|
||
FindEligiblePlayerForCarrier_Block_2:
|
||
stx CarrierTargetPlayer ; CPU:$C62D PRG:062D 8E 8B 04
|
||
lda PlayerVariantTable,x ; CPU:$C630 PRG:0630 BD 48 04
|
||
sta CarrierSavedValue ; CPU:$C633 PRG:0633 8D 50 04
|
||
lda #$00 ; CPU:$C636 PRG:0636 A9 00
|
||
sta CarrierMode ; CPU:$C638 PRG:0638 8D 8A 04
|
||
sta CarrierSequenceTimer ; CPU:$C63B PRG:063B 8D 8D 04
|
||
sta CarrierDropPending ; CPU:$C63E PRG:063E 8D 8C 04
|
||
sta CarrierSequenceActive ; CPU:$C641 PRG:0641 8D 89 04
|
||
lda #$DC ; CPU:$C644 PRG:0644 A9 DC
|
||
sta CarrierPosY ; CPU:$C646 PRG:0646 85 A2
|
||
rts ; CPU:$C648 PRG:0648 60
|
||
;===============================================================================
|
||
; AdvanceCarrierTargetX
|
||
;
|
||
; Global:
|
||
; Advances and wraps the carrier horizontal target position.
|
||
;
|
||
; Local:
|
||
; Increments CarrierTargetX and wraps values at $B1 or above back to $40.
|
||
;
|
||
; Parameters:
|
||
; CarrierTargetX.
|
||
;
|
||
; Returns:
|
||
; CarrierTargetX updated.
|
||
;
|
||
; PRG offsets: $064B-$0657
|
||
; CPU range: $C64B-$C657
|
||
;===============================================================================
|
||
|
||
AdvanceCarrierTargetX:
|
||
inc CarrierTargetX ; CPU:$C649 PRG:0649 E6 99
|
||
lda CarrierTargetX ; CPU:$C64B PRG:064B A5 99
|
||
cmp #$B1 ; CPU:$C64D PRG:064D C9 B1
|
||
bcc AdvanceCarrierTargetX_Block ; CPU:$C64F PRG:064F 90 04
|
||
lda #$40 ; CPU:$C651 PRG:0651 A9 40
|
||
sta CarrierTargetX ; CPU:$C653 PRG:0653 85 99
|
||
AdvanceCarrierTargetX_Block:
|
||
rts ; CPU:$C655 PRG:0655 60
|
||
;===============================================================================
|
||
; UpdateCarrierArrivalSequence
|
||
;
|
||
; Global:
|
||
; Advances the carrier vertical movement and resolves its arrival at the selected player.
|
||
;
|
||
; Local:
|
||
; Moves the carrier toward its target, advances sequence timers, changes player animation/state when contact is reached, and queues a sound request.
|
||
;
|
||
; Parameters:
|
||
; Carrier and player sequence state in zero page and $0489-$048D.
|
||
;
|
||
; Returns:
|
||
; Carrier sequence state, player state, and sound request flags updated.
|
||
;
|
||
; PRG offsets: $0658-$06B7
|
||
; CPU range: $C658-$C6B7
|
||
;===============================================================================
|
||
|
||
UpdateCarrierArrivalSequence:
|
||
lda CarrierSequenceActive ; CPU:$C656 PRG:0656 AD 89 04
|
||
bne UpdateCarrierArrivalSequence_Block ; CPU:$C659 PRG:0659 D0 12
|
||
dec CarrierPosY ; CPU:$C65B PRG:065B C6 A2
|
||
lda CarrierPosY ; CPU:$C65D PRG:065D A5 A2
|
||
cmp #$C4 ; CPU:$C65F PRG:065F C9 C4
|
||
bcs UpdateCarrierArrivalSequence_Block_1 ; CPU:$C661 PRG:0661 B0 0C
|
||
inc CarrierPosY ; CPU:$C663 PRG:0663 E6 A2
|
||
inc CarrierMode ; CPU:$C665 PRG:0665 EE 8A 04
|
||
inc CarrierSequenceActive ; CPU:$C668 PRG:0668 EE 89 04
|
||
bne UpdateCarrierArrivalSequence_Block_1 ; CPU:$C66B PRG:066B D0 02
|
||
UpdateCarrierArrivalSequence_Block:
|
||
inc CarrierPosY ; CPU:$C66D PRG:066D E6 A2
|
||
UpdateCarrierArrivalSequence_Block_1:
|
||
inc CarrierSequenceTimer ; CPU:$C66F PRG:066F EE 8D 04
|
||
lda CarrierSequenceTimer ; CPU:$C672 PRG:0672 AD 8D 04
|
||
cmp #$18 ; CPU:$C675 PRG:0675 C9 18
|
||
bne UpdateCarrierArrivalSequence_Block_2 ; CPU:$C677 PRG:0677 D0 28
|
||
ldx CarrierTargetPlayer ; CPU:$C679 PRG:0679 AE 8B 04
|
||
lda PlayerSlotState,x ; CPU:$C67C PRG:067C B5 88
|
||
bmi UpdateCarrierArrivalSequence_Block_2 ; CPU:$C67E PRG:067E 30 21
|
||
lda PlayerPosY,x ; CPU:$C680 PRG:0680 B5 9A
|
||
clc ; CPU:$C682 PRG:0682 18
|
||
adc #$10 ; CPU:$C683 PRG:0683 69 10
|
||
cmp CarrierPosY ; CPU:$C685 PRG:0685 C5 A2
|
||
bcc UpdateCarrierArrivalSequence_Block_2 ; CPU:$C687 PRG:0687 90 18
|
||
ldy PlayerAnimationState,x ; CPU:$C689 PRG:0689 BC 51 04
|
||
lda CarrierAnimationSequenceTable,y ; CPU:$C68C PRG:068C B9 B8 C6
|
||
sta PlayerAnimationState,x ; CPU:$C68F PRG:068F 9D 51 04
|
||
lda #$00 ; CPU:$C692 PRG:0692 A9 00
|
||
sta PlayerLifecycleState,x ; CPU:$C694 PRG:0694 95 7F
|
||
sta PlayerSlotState,x ; CPU:$C696 PRG:0696 95 88
|
||
lda SoundRequestFlags2 ; CPU:$C698 PRG:0698 A5 F2
|
||
ora #$40 ; CPU:$C69A PRG:069A 09 40
|
||
sta SoundRequestFlags2 ; CPU:$C69C PRG:069C 85 F2
|
||
inc CarrierDropPending ; CPU:$C69E PRG:069E EE 8C 04
|
||
UpdateCarrierArrivalSequence_Block_2:
|
||
lda CarrierMode ; CPU:$C6A1 PRG:06A1 AD 8A 04
|
||
beq UpdateCarrierArrivalSequence_Block_4 ; CPU:$C6A4 PRG:06A4 F0 0F
|
||
lda CarrierSequenceTimer ; CPU:$C6A6 PRG:06A6 AD 8D 04
|
||
cmp #$28 ; CPU:$C6A9 PRG:06A9 C9 28
|
||
beq UpdateCarrierArrivalSequence_Block_3 ; CPU:$C6AB PRG:06AB F0 04
|
||
cmp #$30 ; CPU:$C6AD PRG:06AD C9 30
|
||
bne UpdateCarrierArrivalSequence_Block_4 ; CPU:$C6AF PRG:06AF D0 04
|
||
UpdateCarrierArrivalSequence_Block_3:
|
||
lda #$CC ; CPU:$C6B1 PRG:06B1 A9 CC
|
||
sta CarrierPosY ; CPU:$C6B3 PRG:06B3 85 A2
|
||
UpdateCarrierArrivalSequence_Block_4:
|
||
rts ; CPU:$C6B5 PRG:06B5 60
|
||
|
||
; Carrier animation remap table
|
||
; Maps player animation states to the carrier-sequence animation states.
|
||
;===============================================================================
|
||
CarrierAnimationSequenceTable:
|
||
.byte $08, $09, $0A, $0B ; CPU:$C6B6 PRG:06B6 08 09 0A 0B
|
||
.byte $08, $09, $0A, $0B ; CPU:$C6BA PRG:06BA 08 09 0A 0B
|
||
.byte $08, $09, $0A, $0B ; CPU:$C6BE PRG:06BE 08 09 0A 0B
|
||
|
||
;===============================================================================
|
||
; BeginCarrierTargetSequence
|
||
;
|
||
; Global:
|
||
; Starts the carrier sequence for the currently selected player when conditions allow.
|
||
;
|
||
; Local:
|
||
; Rejects an already-active sequence or an invalid target, captures player state, resets sequence fields, and initializes the carrier vertical position.
|
||
;
|
||
; Parameters:
|
||
; CarrierTargetPlayer and player arrays.
|
||
;
|
||
; Returns:
|
||
; Carrier sequence activated when a valid target exists.
|
||
;
|
||
; PRG offsets: $06C4-$06F8
|
||
; CPU range: $C6C4-$C6F8
|
||
;===============================================================================
|
||
|
||
BeginCarrierTargetSequence:
|
||
lda CarrierSequenceActive ; CPU:$C6C2 PRG:06C2 AD 89 04
|
||
bne BeginCarrierTargetSequence_Block_2 ; CPU:$C6C5 PRG:06C5 D0 2F
|
||
ldx CarrierTargetPlayer ; CPU:$C6C7 PRG:06C7 AE 8B 04
|
||
lda PlayerSlotState,x ; CPU:$C6CA PRG:06CA B5 88
|
||
bmi BeginCarrierTargetSequence_Block ; CPU:$C6CC PRG:06CC 30 10
|
||
lda PlayerPosY,x ; CPU:$C6CE PRG:06CE B5 9A
|
||
cmp #$B4 ; CPU:$C6D0 PRG:06D0 C9 B4
|
||
bcc BeginCarrierTargetSequence_Block ; CPU:$C6D2 PRG:06D2 90 0A
|
||
lda PlayerPosX,x ; CPU:$C6D4 PRG:06D4 B5 91
|
||
cmp #$40 ; CPU:$C6D6 PRG:06D6 C9 40
|
||
bcc BeginCarrierTargetSequence_Block ; CPU:$C6D8 PRG:06D8 90 04
|
||
cmp #$B1 ; CPU:$C6DA PRG:06DA C9 B1
|
||
bcc BeginCarrierTargetSequence_Block_1 ; CPU:$C6DC PRG:06DC 90 0E
|
||
BeginCarrierTargetSequence_Block:
|
||
lda #$30 ; CPU:$C6DE PRG:06DE A9 30
|
||
sec ; CPU:$C6E0 PRG:06E0 38
|
||
sbc CarrierSequenceTimer ; CPU:$C6E1 PRG:06E1 ED 8D 04
|
||
sta CarrierSequenceTimer ; CPU:$C6E4 PRG:06E4 8D 8D 04
|
||
inc CarrierSequenceActive ; CPU:$C6E7 PRG:06E7 EE 89 04
|
||
bne BeginCarrierTargetSequence_Block_2 ; CPU:$C6EA PRG:06EA D0 0A
|
||
BeginCarrierTargetSequence_Block_1:
|
||
lda PlayerPosX,x ; CPU:$C6EC PRG:06EC B5 91
|
||
sta $99 ; CPU:$C6EE PRG:06EE 85 99
|
||
lda $0448,x ; CPU:$C6F0 PRG:06F0 BD 48 04
|
||
sta $0450 ; CPU:$C6F3 PRG:06F3 8D 50 04
|
||
BeginCarrierTargetSequence_Block_2:
|
||
rts ; CPU:$C6F6 PRG:06F6 60
|
||
;===============================================================================
|
||
; UpdateCarrierSequence
|
||
;
|
||
; Global:
|
||
; Coordinates the carrier target search, movement, arrival, and display update.
|
||
;
|
||
; Local:
|
||
; Advances the target X position while idle; otherwise updates arrival state, acquires a target, starts the sequence, and tail-calls the display updater.
|
||
;
|
||
; Parameters:
|
||
; Carrier sequence state and player arrays.
|
||
;
|
||
; Returns:
|
||
; Carrier and player state updated for the frame.
|
||
;
|
||
; PRG offsets: $06F9-$0715
|
||
; CPU range: $C6F9-$C715
|
||
;===============================================================================
|
||
|
||
UpdateCarrierSequence:
|
||
lda CarrierDisplayMode ; CPU:$C6F7 PRG:06F7 A5 87
|
||
bpl UpdateCarrierSequence_Block_1 ; CPU:$C6F9 PRG:06F9 10 10
|
||
jsr AdvanceCarrierTargetX ; CPU:$C6FB PRG:06FB 20 4B C6
|
||
jsr FindEligiblePlayerForCarrier ; CPU:$C6FE PRG:06FE 20 14 C6
|
||
lda CarrierTargetPlayer ; CPU:$C701 PRG:0701 AD 8B 04
|
||
bpl UpdateCarrierSequence_Block ; CPU:$C704 PRG:0704 10 01
|
||
rts ; CPU:$C706 PRG:0706 60
|
||
UpdateCarrierSequence_Block:
|
||
lda #$40 ; CPU:$C707 PRG:0707 A9 40
|
||
sta SoundRequestFlags3 ; CPU:$C709 PRG:0709 85 F3
|
||
UpdateCarrierSequence_Block_1:
|
||
jsr BeginCarrierTargetSequence ; CPU:$C70B PRG:070B 20 C4 C6
|
||
jsr UpdateCarrierArrivalSequence ; CPU:$C70E PRG:070E 20 58 C6
|
||
jmp UpdateCarrierObjectDisplay ; CPU:$C711 PRG:0711 4C C3 C5
|
||
;===============================================================================
|
||
; InitializeRoundObjectPools
|
||
;
|
||
; Global:
|
||
; Clears the first two gameplay-object slots and starts round object spawning.
|
||
;
|
||
; Local:
|
||
; Marks two gameplay slots unused, clears their auxiliary state, then calls the round-spawn routine.
|
||
;
|
||
; Parameters:
|
||
; Global round state.
|
||
;
|
||
; Returns:
|
||
; Object pools initialized and spawn processing started.
|
||
;
|
||
; PRG offsets: $0716-$0725
|
||
; CPU range: $C716-$C725
|
||
;===============================================================================
|
||
|
||
InitializeRoundObjectPools:
|
||
ldx #$01 ; CPU:$C714 PRG:0714 A2 01
|
||
InitializeRoundObjectPools_Block:
|
||
lda #$FF ; CPU:$C716 PRG:0716 A9 FF
|
||
sta GameplayObjectState,x ; CPU:$C718 PRG:0718 9D 30 05
|
||
sta GameplayObjectAuxState,x ; CPU:$C71B PRG:071B 9D 44 05
|
||
dex ; CPU:$C71E PRG:071E CA
|
||
bpl InitializeRoundObjectPools_Block ; CPU:$C71F PRG:071F 10 F5
|
||
jsr SpawnRoundObjects ; CPU:$C721 PRG:0721 20 7A C7
|
||
;===============================================================================
|
||
; InitializeRoundPresentation
|
||
;
|
||
; Global:
|
||
; Initializes round-dependent object counts, delays, and hidden OAM entries.
|
||
;
|
||
; Local:
|
||
; Clears pool state, clamps the round index for lookup tables, loads round parameters, hides three OAM entries, and tail-calls presentation setup.
|
||
;
|
||
; Parameters:
|
||
; RoundIndex.
|
||
;
|
||
; Returns:
|
||
; RoundSpawnDelay, SpawnSelector, OAM, and presentation state initialized.
|
||
;
|
||
; PRG offsets: $0726-$0747
|
||
; CPU range: $C726-$C747
|
||
;===============================================================================
|
||
|
||
InitializeRoundPresentation:
|
||
ldx RoundIndex ; CPU:$C724 PRG:0724 A6 3C
|
||
cpx #$18 ; CPU:$C726 PRG:0726 E0 18
|
||
bcc InitializeRoundPresentation_Block ; CPU:$C728 PRG:0728 90 02
|
||
ldx #$18 ; CPU:$C72A PRG:072A A2 18
|
||
InitializeRoundPresentation_Block:
|
||
lda RoundObjectCountTable,x ; CPU:$C72C PRG:072C BD 48 C7
|
||
sta SpawnSelector ; CPU:$C72F PRG:072F 85 BA
|
||
lda RoundDelayTable,x ; CPU:$C731 PRG:0731 BD 61 C7
|
||
sta RoundSpawnDelay ; CPU:$C734 PRG:0734 85 B8
|
||
lda #$F0 ; CPU:$C736 PRG:0736 A9 F0
|
||
sta OamEntryE0Y ; CPU:$C738 PRG:0738 8D E0 02
|
||
sta OamEntryE4Y ; CPU:$C73B PRG:073B 8D E4 02
|
||
sta OamEntryE8Y ; CPU:$C73E PRG:073E 8D E8 02
|
||
lda #$03 ; CPU:$C741 PRG:0741 A9 03
|
||
jmp ConfigureRoundPresentation ; CPU:$C743 PRG:0743 4C 56 C8
|
||
|
||
; Round spawn lookup tables
|
||
;===============================================================================
|
||
RoundObjectCountTable:
|
||
.byte $00, $00, $00, $00, $00, $00, $00, $00 ; CPU:$C746 PRG:0746 00 00 00 00 00 00 00 00
|
||
.byte $00, $00, $01, $01, $01, $01, $01, $01 ; CPU:$C74E PRG:074E 00 00 01 01 01 01 01 01
|
||
.byte $02, $01, $01, $01, $01, $01, $01, $01 ; CPU:$C756 PRG:0756 02 01 01 01 01 01 01 01
|
||
.byte $01 ; CPU:$C75E PRG:075E 01
|
||
RoundDelayTable:
|
||
.byte $0F, $0F, $0C, $0C, $0C, $0C, $0A, $0A ; CPU:$C75F PRG:075F 0F 0F 0C 0C 0C 0C 0A 0A
|
||
.byte $0A, $0A, $0C, $0C, $0A, $0A, $0A, $08 ; CPU:$C767 PRG:0767 0A 0A 0C 0C 0A 0A 0A 08
|
||
.byte $0A, $0A, $08, $08, $08, $08, $08, $08 ; CPU:$C76F PRG:076F 0A 0A 08 08 08 08 08 08
|
||
.byte $05 ; CPU:$C777 PRG:0777 05
|
||
|
||
;===============================================================================
|
||
; ChooseRoundSpawnIndex
|
||
;
|
||
; Global:
|
||
; Chooses a randomized spawn index below the current round limit.
|
||
;
|
||
; Local:
|
||
; Copies a negative cached index when available; otherwise repeatedly samples the random generator until the result is below RoundSpawnRandomLimit and nonzero.
|
||
;
|
||
; Parameters:
|
||
; RoundSpawnRandomLimit and cached index $A4.
|
||
;
|
||
; Returns:
|
||
; A contains the selected nonzero index and SelectedSpawnIndex is updated when needed.
|
||
;
|
||
; PRG offsets: $077A-$078F
|
||
; CPU range: $C77A-$C78F
|
||
;===============================================================================
|
||
|
||
ChooseRoundSpawnIndex:
|
||
lda RoundSpawnRandomLimit ; CPU:$C778 PRG:0778 A5 A3
|
||
bpl ChooseRoundSpawnIndex_Block_1 ; CPU:$C77A PRG:077A 10 03
|
||
ChooseRoundSpawnIndex_Block:
|
||
sta SelectedSpawnIndex ; CPU:$C77C PRG:077C 85 A4
|
||
rts ; CPU:$C77E PRG:077E 60
|
||
ChooseRoundSpawnIndex_Block_1:
|
||
jsr GetRandomValue ; CPU:$C77F PRG:077F 20 B3 F1
|
||
ChooseRoundSpawnIndex_Block_2:
|
||
cmp RoundSpawnRandomLimit ; CPU:$C782 PRG:0782 C5 A3
|
||
bcc ChooseRoundSpawnIndex_Block ; CPU:$C784 PRG:0784 90 F6
|
||
beq ChooseRoundSpawnIndex_Block ; CPU:$C786 PRG:0786 F0 F4
|
||
clc ; CPU:$C788 PRG:0788 18
|
||
sbc RoundSpawnRandomLimit ; CPU:$C789 PRG:0789 E5 A3
|
||
jmp ChooseRoundSpawnIndex_Block_2 ; CPU:$C78B PRG:078B 4C 84 C7
|
||
;===============================================================================
|
||
; UpdateRoundSpawner
|
||
;
|
||
; Global:
|
||
; Runs the timed round-object spawning process.
|
||
;
|
||
; Local:
|
||
; Uses FrameCounter as a divider, counts down RoundSpawnDelay, finds two free gameplay-object slots, initializes a new object from round/spawn tables, and repeats until the round quota is exhausted.
|
||
;
|
||
; Parameters:
|
||
; Round spawn state, gameplay-object arrays, and SpawnSelector.
|
||
;
|
||
; Returns:
|
||
; A gameplay object may be initialized; round counters and sound requests are updated.
|
||
;
|
||
; PRG offsets: $0790-$0830
|
||
; CPU range: $C790-$C830
|
||
;===============================================================================
|
||
|
||
UpdateRoundSpawner:
|
||
lda FrameCounter ; CPU:$C78E PRG:078E A5 19
|
||
and #$7F ; CPU:$C790 PRG:0790 29 7F
|
||
beq UpdateRoundSpawner_Block_1 ; CPU:$C792 PRG:0792 F0 01
|
||
UpdateRoundSpawner_Block:
|
||
rts ; CPU:$C794 PRG:0794 60
|
||
UpdateRoundSpawner_Block_1:
|
||
dec RoundSpawnDelay ; CPU:$C795 PRG:0795 C6 B8
|
||
bne UpdateRoundSpawner_Block ; CPU:$C797 PRG:0797 D0 FB
|
||
ldx #$00 ; CPU:$C799 PRG:0799 A2 00
|
||
lda GameplayObjectState,x ; CPU:$C79B PRG:079B BD 30 05
|
||
bmi UpdateRoundSpawner_Block_2 ; CPU:$C79E PRG:079E 30 0B
|
||
inx ; CPU:$C7A0 PRG:07A0 E8
|
||
lda GameplayObjectState,x ; CPU:$C7A1 PRG:07A1 BD 30 05
|
||
bmi UpdateRoundSpawner_Block_2 ; CPU:$C7A4 PRG:07A4 30 05
|
||
lda #$01 ; CPU:$C7A6 PRG:07A6 A9 01
|
||
sta RoundSpawnDelay ; CPU:$C7A8 PRG:07A8 85 B8
|
||
rts ; CPU:$C7AA PRG:07AA 60
|
||
UpdateRoundSpawner_Block_2:
|
||
ldy SelectedSpawnIndex ; CPU:$C7AB PRG:07AB A4 A4
|
||
sty SelectedSpawnIndexCopy ; CPU:$C7AD PRG:07AD 84 A5
|
||
bpl UpdateRoundSpawner_Block_3 ; CPU:$C7AF PRG:07AF 10 01
|
||
rts ; CPU:$C7B1 PRG:07B1 60
|
||
UpdateRoundSpawner_Block_3:
|
||
lda #$80 ; CPU:$C7B2 PRG:07B2 A9 80
|
||
sta GameplayObjectVelocityFracY,x ; CPU:$C7B4 PRG:07B4 9D B8 04
|
||
sta GameplayObjectVelocityIntY,x ; CPU:$C7B7 PRG:07B7 9D CC 04
|
||
lda #$00 ; CPU:$C7BA PRG:07BA A9 00
|
||
sta GameplayObjectState,x ; CPU:$C7BC PRG:07BC 9D 30 05
|
||
lda $00B2,y ; CPU:$C7BF PRG:07BF B9 B2 00
|
||
sta GameplayObjectPosX,x ; CPU:$C7C2 PRG:07C2 9D 90 04
|
||
lda $00B5,y ; CPU:$C7C5 PRG:07C5 B9 B5 00
|
||
sta GameplayObjectPosY,x ; CPU:$C7C8 PRG:07C8 9D A4 04
|
||
ldy SpawnSelector ; CPU:$C7CB PRG:07CB A4 BA
|
||
jsr GetRandomValue ; CPU:$C7CD PRG:07CD 20 B3 F1
|
||
and #$1F ; CPU:$C7D0 PRG:07D0 29 1F
|
||
adc SpawnParameterTable,y ; CPU:$C7D2 PRG:07D2 79 9F C8
|
||
sta GameplayObjectParameter,x ; CPU:$C7D5 PRG:07D5 9D 08 05
|
||
lda SpawnPositionHiTable,y ; CPU:$C7D8 PRG:07D8 B9 AB C8
|
||
sta GameplayObjectPosXHi,x ; CPU:$C7DB PRG:07DB 9D 1C 05
|
||
lda SpawnVelocityYTable,y ; CPU:$C7DE PRG:07DE B9 A5 C8
|
||
sta GameplayObjectVelocityY,x ; CPU:$C7E1 PRG:07E1 9D E0 04
|
||
lda SpawnVelocityXTable,y ; CPU:$C7E4 PRG:07E4 B9 B1 C8
|
||
sta GameplayObjectVelocityX,x ; CPU:$C7E7 PRG:07E7 9D F4 04
|
||
jsr GetRandomValue ; CPU:$C7EA PRG:07EA 20 B3 F1
|
||
and #$03 ; CPU:$C7ED PRG:07ED 29 03
|
||
sta GameplayObjectAuxState,x ; CPU:$C7EF PRG:07EF 9D 44 05
|
||
tay ; CPU:$C7F2 PRG:07F2 A8
|
||
lda SpawnXOffsetTable,y ; CPU:$C7F3 PRG:07F3 B9 97 C8
|
||
clc ; CPU:$C7F6 PRG:07F6 18
|
||
adc GameplayObjectPosX,x ; CPU:$C7F7 PRG:07F7 7D 90 04
|
||
sta GameplayObjectPosX,x ; CPU:$C7FA PRG:07FA 9D 90 04
|
||
lda SpawnYOffsetTable,y ; CPU:$C7FD PRG:07FD B9 9B C8
|
||
clc ; CPU:$C800 PRG:0800 18
|
||
adc GameplayObjectPosY,x ; CPU:$C801 PRG:0801 7D A4 04
|
||
sta GameplayObjectPosY,x ; CPU:$C804 PRG:0804 9D A4 04
|
||
lda SpawnFlipYTable,y ; CPU:$C807 PRG:0807 B9 8F C8
|
||
beq UpdateRoundSpawner_Block_4 ; CPU:$C80A PRG:080A F0 03
|
||
jsr NegateGameplayObjectVelocityY ; CPU:$C80C PRG:080C 20 3D CA
|
||
UpdateRoundSpawner_Block_4:
|
||
lda SpawnFlipXTable,y ; CPU:$C80F PRG:080F B9 93 C8
|
||
beq UpdateRoundSpawner_Block_5 ; CPU:$C812 PRG:0812 F0 03
|
||
jsr NegateGameplayObjectVelocityX ; CPU:$C814 PRG:0814 20 55 CA
|
||
UpdateRoundSpawner_Block_5:
|
||
lda SpawnSelector ; CPU:$C817 PRG:0817 A5 BA
|
||
cmp #$05 ; CPU:$C819 PRG:0819 C9 05
|
||
bcs UpdateRoundSpawner_Block_6 ; CPU:$C81B PRG:081B B0 02
|
||
inc SpawnSelector ; CPU:$C81D PRG:081D E6 BA
|
||
UpdateRoundSpawner_Block_6:
|
||
lda #$06 ; CPU:$C81F PRG:081F A9 06
|
||
sec ; CPU:$C821 PRG:0821 38
|
||
sbc SpawnSelector ; CPU:$C822 PRG:0822 E5 BA
|
||
sta RoundSpawnDelay ; CPU:$C824 PRG:0824 85 B8
|
||
lda SoundRequestFlags0 ; CPU:$C826 PRG:0826 A5 F0
|
||
ora #$04 ; CPU:$C828 PRG:0828 09 04
|
||
sta SoundRequestFlags0 ; CPU:$C82A PRG:082A 85 F0
|
||
jmp ChooseRoundSpawnIndex ; CPU:$C82C PRG:082C 4C 7A C7
|
||
;===============================================================================
|
||
; UpdateRoundHud
|
||
;
|
||
; Global:
|
||
; Updates the round HUD when the spawn countdown reaches its display phase.
|
||
;
|
||
; Local:
|
||
; Waits for the appropriate frame count, requests a sound at the transition, selects a HUD tile, and appends four values from zero-page arrays to the PPU command buffer.
|
||
;
|
||
; Parameters:
|
||
; RoundSpawnDelay, FrameCounter, and zero-page HUD values.
|
||
;
|
||
; Returns:
|
||
; PPU command buffer receives the updated HUD values.
|
||
;
|
||
; PRG offsets: $0831-$0855
|
||
; CPU range: $C831-$C855
|
||
;===============================================================================
|
||
|
||
UpdateRoundHud:
|
||
lda RoundSpawnDelay ; CPU:$C82F PRG:082F A5 B8
|
||
cmp #$01 ; CPU:$C831 PRG:0831 C9 01
|
||
bne AppendRoundHudValue_Block ; CPU:$C833 PRG:0833 D0 53
|
||
lda GameplayObjectState ; CPU:$C835 PRG:0835 AD 30 05
|
||
bmi UpdateRoundHud_Block ; CPU:$C838 PRG:0838 30 0A
|
||
lda $0531 ; CPU:$C83A PRG:083A AD 31 05
|
||
bmi UpdateRoundHud_Block ; CPU:$C83D PRG:083D 30 05
|
||
lda #$02 ; CPU:$C83F PRG:083F A9 02
|
||
sta RoundSpawnDelay ; CPU:$C841 PRG:0841 85 B8
|
||
rts ; CPU:$C843 PRG:0843 60
|
||
UpdateRoundHud_Block:
|
||
lda FrameCounter ; CPU:$C844 PRG:0844 A5 19
|
||
and #$7F ; CPU:$C846 PRG:0846 29 7F
|
||
cmp #$40 ; CPU:$C848 PRG:0848 C9 40
|
||
bcc AppendRoundHudValue_Block ; CPU:$C84A PRG:084A 90 3C
|
||
bne ConfigureRoundPresentation ; CPU:$C84C PRG:084C D0 06
|
||
lda SoundRequestFlags1 ; CPU:$C84E PRG:084E A5 F1
|
||
ora #$08 ; CPU:$C850 PRG:0850 09 08
|
||
sta SoundRequestFlags1 ; CPU:$C852 PRG:0852 85 F1
|
||
;===============================================================================
|
||
; ConfigureRoundPresentation
|
||
;
|
||
; Global:
|
||
; Configures round presentation state and writes HUD values.
|
||
;
|
||
; Local:
|
||
; Selects a HUD tile from the mode table, iterates active HUD values, and appends them as PPU commands before tail-calling the common buffer append routine.
|
||
;
|
||
; Parameters:
|
||
; A = presentation mode; SelectedSpawnIndex and zero-page HUD values.
|
||
;
|
||
; Returns:
|
||
; PPU command buffer updated.
|
||
;
|
||
; PRG offsets: $0856-$0882
|
||
; CPU range: $C856-$C882
|
||
;===============================================================================
|
||
|
||
ConfigureRoundPresentation:
|
||
and #$03 ; CPU:$C854 PRG:0854 29 03
|
||
tax ; CPU:$C856 PRG:0856 AA
|
||
lda RoundHudTileTable,x ; CPU:$C857 PRG:0857 BD 8B C8
|
||
sta RoundHudTile ; CPU:$C85A PRG:085A 85 5A
|
||
ldx SelectedSpawnIndex ; CPU:$C85C PRG:085C A6 A4
|
||
bmi AppendRoundHudValue_Block ; CPU:$C85E PRG:085E 30 28
|
||
lda #$23 ; CPU:$C860 PRG:0860 A9 23
|
||
sta RoundHudCommandAddressHi ; CPU:$C862 PRG:0862 85 57
|
||
lda $A6,x ; CPU:$C864 PRG:0864 B5 A6
|
||
sta RoundHudCommandAddressLo ; CPU:$C866 PRG:0866 85 58
|
||
lda #$01 ; CPU:$C868 PRG:0868 A9 01
|
||
sta RoundHudCommandLength ; CPU:$C86A PRG:086A 85 59
|
||
jsr AppendRoundHudValue ; CPU:$C86C PRG:086C 20 83 C8
|
||
lda $A9,x ; CPU:$C86F PRG:086F B5 A9
|
||
sta RoundHudCommandAddressLo ; CPU:$C871 PRG:0871 85 58
|
||
jsr AppendRoundHudValue ; CPU:$C873 PRG:0873 20 83 C8
|
||
lda $AC,x ; CPU:$C876 PRG:0876 B5 AC
|
||
sta RoundHudCommandAddressLo ; CPU:$C878 PRG:0878 85 58
|
||
jsr AppendRoundHudValue ; CPU:$C87A PRG:087A 20 83 C8
|
||
lda $AF,x ; CPU:$C87D PRG:087D B5 AF
|
||
sta RoundHudCommandAddressLo ; CPU:$C87F PRG:087F 85 58
|
||
;===============================================================================
|
||
; AppendRoundHudValue
|
||
;
|
||
; Global:
|
||
; Appends one HUD value to the PPU command buffer.
|
||
;
|
||
; Local:
|
||
; Stores the current value as a one-byte command payload and invokes the common PPU-buffer append routine.
|
||
;
|
||
; Parameters:
|
||
; A = HUD value; $57-$59 describe the command.
|
||
;
|
||
; Returns:
|
||
; One HUD update command appended.
|
||
;
|
||
; PRG offsets: $0883-$088A
|
||
; CPU range: $C883-$C88A
|
||
;===============================================================================
|
||
|
||
AppendRoundHudValue:
|
||
lda #$57 ; CPU:$C881 PRG:0881 A9 57
|
||
ldy #$00 ; CPU:$C883 PRG:0883 A0 00
|
||
jmp AppendBytesToPpuBuffer ; CPU:$C885 PRG:0885 4C 31 C1
|
||
AppendRoundHudValue_Block:
|
||
rts ; CPU:$C888 PRG:0888 60
|
||
|
||
; Round spawner and sprite lookup tables
|
||
;===============================================================================
|
||
RoundHudTileTable:
|
||
.byte $55, $FF, $00, $FF ; CPU:$C889 PRG:0889 55 FF 00 FF
|
||
SpawnFlipYTable:
|
||
.byte $00, $00, $FF, $FF ; CPU:$C88D PRG:088D 00 00 FF FF
|
||
SpawnFlipXTable:
|
||
.byte $FF, $00, $00, $FF ; CPU:$C891 PRG:0891 FF 00 00 FF
|
||
SpawnXOffsetTable:
|
||
.byte $10, $10, $F0, $F0 ; CPU:$C895 PRG:0895 10 10 F0 F0
|
||
SpawnYOffsetTable:
|
||
.byte $DE, $22, $22, $DE ; CPU:$C899 PRG:0899 DE 22 22 DE
|
||
SpawnParameterTable:
|
||
.byte $60, $70, $80, $90, $A0, $B0 ; CPU:$C89D PRG:089D 60 70 80 90 A0 B0
|
||
SpawnVelocityYTable:
|
||
.byte $00, $00, $00, $00, $00, $00 ; CPU:$C8A3 PRG:08A3 00 00 00 00 00 00
|
||
SpawnPositionHiTable:
|
||
.byte $C0, $F0, $20, $50, $80, $B0 ; CPU:$C8A9 PRG:08A9 C0 F0 20 50 80 B0
|
||
SpawnVelocityXTable:
|
||
.byte $00, $00, $01, $01, $01, $01 ; CPU:$C8AF PRG:08AF 00 00 01 01 01 01
|
||
|
||
;===============================================================================
|
||
; UpdateRoundObjectSpritesAndPhysics
|
||
;
|
||
; Global:
|
||
; Updates both round-spawned gameplay objects, constructs their three-sprite OAM entries, and advances their state and movement.
|
||
;
|
||
; Local:
|
||
; Walks slots 1 through 0, skips inactive entries, derives OAM coordinates and tiles from lookup tables, advances animation state, performs bounds handling, integrates movement, resolves interactions, and writes OAM.
|
||
;
|
||
; Parameters:
|
||
; Gameplay-object arrays, FrameCounter, and round-spawn lookup tables.
|
||
;
|
||
; Returns:
|
||
; Object state, positions, animation, and OAM entries are updated.
|
||
;
|
||
; PRG offsets: $08B7-$09B5
|
||
; CPU range: $C8B7-$C9B5
|
||
;===============================================================================
|
||
|
||
UpdateRoundObjectSpritesAndPhysics:
|
||
ldx #$01 ; CPU:$C8B5 PRG:08B5 A2 01
|
||
UpdateRoundObjectSpritesAndPhysics_Load:
|
||
lda GameplayObjectState,x ; CPU:$C8B7 PRG:08B7 BD 30 05
|
||
bpl UpdateRoundObjectSpritesAndPhysics_Block ; CPU:$C8BA PRG:08BA 10 03
|
||
jmp UpdateRoundObjectSpritesAndPhysics_Block_9 ; CPU:$C8BC PRG:08BC 4C AF C9
|
||
UpdateRoundObjectSpritesAndPhysics_Block:
|
||
lda GameplayObjectAuxState,x ; CPU:$C8BF PRG:08BF BD 44 05
|
||
bmi UpdateRoundObjectSpritesAndPhysics_Block_3 ; CPU:$C8C2 PRG:08C2 30 7B
|
||
tay ; CPU:$C8C4 PRG:08C4 A8
|
||
txa ; CPU:$C8C5 PRG:08C5 8A
|
||
pha ; CPU:$C8C6 PRG:08C6 48
|
||
ldx SelectedSpawnIndexCopy ; CPU:$C8C7 PRG:08C7 A6 A5
|
||
lda RoundSpawnBaseX,x ; CPU:$C8C9 PRG:08C9 B5 B2
|
||
adc RoundObjectXOffsetTable,y ; CPU:$C8CB PRG:08CB 79 E5 C9
|
||
sta $02E3 ; CPU:$C8CE PRG:08CE 8D E3 02
|
||
sta $02E7 ; CPU:$C8D1 PRG:08D1 8D E7 02
|
||
sta $02EB ; CPU:$C8D4 PRG:08D4 8D EB 02
|
||
lda RoundSpawnBaseY,x ; CPU:$C8D7 PRG:08D7 B5 B5
|
||
adc RoundObjectYOffsetTable,y ; CPU:$C8D9 PRG:08D9 79 F5 C9
|
||
sta $02E0 ; CPU:$C8DC PRG:08DC 8D E0 02
|
||
adc RoundObjectVerticalSpacingTable,y ; CPU:$C8DF PRG:08DF 79 05 CA
|
||
sta $02E4 ; CPU:$C8E2 PRG:08E2 8D E4 02
|
||
adc RoundObjectVerticalSpacingTable,y ; CPU:$C8E5 PRG:08E5 79 05 CA
|
||
sta $02E8 ; CPU:$C8E8 PRG:08E8 8D E8 02
|
||
tya ; CPU:$C8EB PRG:08EB 98
|
||
and #$03 ; CPU:$C8EC PRG:08EC 29 03
|
||
tax ; CPU:$C8EE PRG:08EE AA
|
||
tya ; CPU:$C8EF PRG:08EF 98
|
||
lsr a ; CPU:$C8F0 PRG:08F0 4A
|
||
lsr a ; CPU:$C8F1 PRG:08F1 4A
|
||
tay ; CPU:$C8F2 PRG:08F2 A8
|
||
lda FrameCounter ; CPU:$C8F3 PRG:08F3 A5 19
|
||
lsr a ; CPU:$C8F5 PRG:08F5 4A
|
||
lsr a ; CPU:$C8F6 PRG:08F6 4A
|
||
bcs UpdateRoundObjectSpritesAndPhysics_Block_1 ; CPU:$C8F7 PRG:08F7 B0 04
|
||
tya ; CPU:$C8F9 PRG:08F9 98
|
||
adc #$05 ; CPU:$C8FA PRG:08FA 69 05
|
||
tay ; CPU:$C8FC PRG:08FC A8
|
||
UpdateRoundObjectSpritesAndPhysics_Block_1:
|
||
lda RoundObjectTileTopTable,y ; CPU:$C8FD PRG:08FD B9 15 CA
|
||
sta $02E1 ; CPU:$C900 PRG:0900 8D E1 02
|
||
lda RoundObjectTileMiddleTable,y ; CPU:$C903 PRG:0903 B9 1F CA
|
||
sta $02E5 ; CPU:$C906 PRG:0906 8D E5 02
|
||
lda RoundObjectTileBottomTable,y ; CPU:$C909 PRG:0909 B9 29 CA
|
||
sta $02E9 ; CPU:$C90C PRG:090C 8D E9 02
|
||
lda RoundObjectAttributeTable,x ; CPU:$C90F PRG:090F BD 33 CA
|
||
sta $02E2 ; CPU:$C912 PRG:0912 8D E2 02
|
||
sta $02E6 ; CPU:$C915 PRG:0915 8D E6 02
|
||
sta $02EA ; CPU:$C918 PRG:0918 8D EA 02
|
||
pla ; CPU:$C91B PRG:091B 68
|
||
tax ; CPU:$C91C PRG:091C AA
|
||
lda FrameCounter ; CPU:$C91D PRG:091D A5 19
|
||
and #$07 ; CPU:$C91F PRG:091F 29 07
|
||
bne UpdateRoundObjectSpritesAndPhysics_Block_2 ; CPU:$C921 PRG:0921 D0 12
|
||
lda GameplayObjectAuxState,x ; CPU:$C923 PRG:0923 BD 44 05
|
||
clc ; CPU:$C926 PRG:0926 18
|
||
adc #$04 ; CPU:$C927 PRG:0927 69 04
|
||
sta GameplayObjectAuxState,x ; CPU:$C929 PRG:0929 9D 44 05
|
||
cmp #$14 ; CPU:$C92C PRG:092C C9 14
|
||
bcc UpdateRoundObjectSpritesAndPhysics_Block_2 ; CPU:$C92E PRG:092E 90 05
|
||
lda #$FF ; CPU:$C930 PRG:0930 A9 FF
|
||
sta GameplayObjectAuxState,x ; CPU:$C932 PRG:0932 9D 44 05
|
||
UpdateRoundObjectSpritesAndPhysics_Block_2:
|
||
lda GameplayObjectAuxState,x ; CPU:$C935 PRG:0935 BD 44 05
|
||
cmp #$10 ; CPU:$C938 PRG:0938 C9 10
|
||
bcs UpdateRoundObjectSpritesAndPhysics_Block_3 ; CPU:$C93A PRG:093A B0 03
|
||
jmp UpdateRoundObjectSpritesAndPhysics_Block_9 ; CPU:$C93C PRG:093C 4C AF C9
|
||
UpdateRoundObjectSpritesAndPhysics_Block_3:
|
||
jsr IntegrateGameplayObjectPosition ; CPU:$C93F PRG:093F 20 B6 C9
|
||
lda GameplayObjectPosX,x ; CPU:$C942 PRG:0942 BD 90 04
|
||
cmp #$02 ; CPU:$C945 PRG:0945 C9 02
|
||
bcs UpdateRoundObjectSpritesAndPhysics_Block_4 ; CPU:$C947 PRG:0947 B0 03
|
||
jsr BounceGameplayObjectY ; CPU:$C949 PRG:0949 20 37 CA
|
||
UpdateRoundObjectSpritesAndPhysics_Block_4:
|
||
lda GameplayObjectPosX,x ; CPU:$C94C PRG:094C BD 90 04
|
||
cmp #$F7 ; CPU:$C94F PRG:094F C9 F7
|
||
bcc UpdateRoundObjectSpritesAndPhysics_Block_5 ; CPU:$C951 PRG:0951 90 03
|
||
jsr BounceGameplayObjectY ; CPU:$C953 PRG:0953 20 37 CA
|
||
UpdateRoundObjectSpritesAndPhysics_Block_5:
|
||
lda GameplayObjectPosY,x ; CPU:$C956 PRG:0956 BD A4 04
|
||
cmp #$02 ; CPU:$C959 PRG:0959 C9 02
|
||
bcs UpdateRoundObjectSpritesAndPhysics_Block_6 ; CPU:$C95B PRG:095B B0 03
|
||
jsr BounceGameplayObjectX ; CPU:$C95D PRG:095D 20 4F CA
|
||
UpdateRoundObjectSpritesAndPhysics_Block_6:
|
||
lda GameplayObjectPosY,x ; CPU:$C960 PRG:0960 BD A4 04
|
||
cmp #$E0 ; CPU:$C963 PRG:0963 C9 E0
|
||
bcc UpdateRoundObjectSpritesAndPhysics_Block_7 ; CPU:$C965 PRG:0965 90 0D
|
||
lda #$FF ; CPU:$C967 PRG:0967 A9 FF
|
||
sta GameplayObjectState,x ; CPU:$C969 PRG:0969 9D 30 05
|
||
lda #$F0 ; CPU:$C96C PRG:096C A9 F0
|
||
sta GameplayObjectPosY,x ; CPU:$C96E PRG:096E 9D A4 04
|
||
jmp UpdateRoundObjectSpritesAndPhysics_Block_9 ; CPU:$C971 PRG:0971 4C AF C9
|
||
UpdateRoundObjectSpritesAndPhysics_Block_7:
|
||
jsr TestGameplayObjectAgainstBounds ; CPU:$C974 PRG:0974 20 67 CA
|
||
jsr ResolveGameplayObjectInteraction ; CPU:$C977 PRG:0977 20 1C CB
|
||
ldy GameplayObjectState,x ; CPU:$C97A PRG:097A BC 30 05
|
||
iny ; CPU:$C97D PRG:097D C8
|
||
tya ; CPU:$C97E PRG:097E 98
|
||
and #$07 ; CPU:$C97F PRG:097F 29 07
|
||
sta GameplayObjectState,x ; CPU:$C981 PRG:0981 9D 30 05
|
||
ldy GameplayObjectState,x ; CPU:$C984 PRG:0984 BC 30 05
|
||
lda RoundObjectTileTable,y ; CPU:$C987 PRG:0987 B9 DD C9
|
||
sta CurrentRoundObjectTile ; CPU:$C98A PRG:098A 85 12
|
||
txa ; CPU:$C98C PRG:098C 8A
|
||
asl a ; CPU:$C98D PRG:098D 0A
|
||
asl a ; CPU:$C98E PRG:098E 0A
|
||
clc ; CPU:$C98F PRG:098F 18
|
||
tay ; CPU:$C990 PRG:0990 A8
|
||
lda GameplayObjectPosY,x ; CPU:$C991 PRG:0991 BD A4 04
|
||
cmp #$D0 ; CPU:$C994 PRG:0994 C9 D0
|
||
sta OamBuffer,y ; CPU:$C996 PRG:0996 99 00 02
|
||
lda GameplayObjectPosX,x ; CPU:$C999 PRG:0999 BD 90 04
|
||
sta $0203,y ; CPU:$C99C PRG:099C 99 03 02
|
||
lda CurrentRoundObjectTile ; CPU:$C99F PRG:099F A5 12
|
||
sta $0201,y ; CPU:$C9A1 PRG:09A1 99 01 02
|
||
lda #$00 ; CPU:$C9A4 PRG:09A4 A9 00
|
||
bcc UpdateRoundObjectSpritesAndPhysics_Block_8 ; CPU:$C9A6 PRG:09A6 90 02
|
||
lda #$20 ; CPU:$C9A8 PRG:09A8 A9 20
|
||
UpdateRoundObjectSpritesAndPhysics_Block_8:
|
||
sta $0202,y ; CPU:$C9AA PRG:09AA 99 02 02
|
||
UpdateRoundObjectSpritesAndPhysics_Block_9:
|
||
dex ; CPU:$C9AD PRG:09AD CA
|
||
bmi UpdateRoundObjectSpritesAndPhysics_Block_10 ; CPU:$C9AE PRG:09AE 30 03
|
||
jmp UpdateRoundObjectSpritesAndPhysics_Load ; CPU:$C9B0 PRG:09B0 4C B9 C8
|
||
UpdateRoundObjectSpritesAndPhysics_Block_10:
|
||
rts ; CPU:$C9B3 PRG:09B3 60
|
||
;===============================================================================
|
||
; IntegrateGameplayObjectPosition
|
||
;
|
||
; Global:
|
||
; Applies the gameplay object velocity components to its fixed-point position fields.
|
||
;
|
||
; Local:
|
||
; Adds the fractional and integer components of both axes into the corresponding parallel position arrays.
|
||
;
|
||
; Parameters:
|
||
; X = gameplay-object slot.
|
||
;
|
||
; Returns:
|
||
; Gameplay object X/Y fixed-point positions updated.
|
||
;
|
||
; PRG offsets: $09B6-$09DC
|
||
; CPU range: $C9B6-$C9DC
|
||
;===============================================================================
|
||
|
||
IntegrateGameplayObjectPosition:
|
||
lda GameplayObjectParameter,x ; CPU:$C9B4 PRG:09B4 BD 08 05
|
||
clc ; CPU:$C9B7 PRG:09B7 18
|
||
adc GameplayObjectVelocityFracY,x ; CPU:$C9B8 PRG:09B8 7D B8 04
|
||
sta GameplayObjectVelocityFracY,x ; CPU:$C9BB PRG:09BB 9D B8 04
|
||
lda GameplayObjectVelocityY,x ; CPU:$C9BE PRG:09BE BD E0 04
|
||
adc GameplayObjectPosX,x ; CPU:$C9C1 PRG:09C1 7D 90 04
|
||
sta GameplayObjectPosX,x ; CPU:$C9C4 PRG:09C4 9D 90 04
|
||
lda GameplayObjectPosXHi,x ; CPU:$C9C7 PRG:09C7 BD 1C 05
|
||
clc ; CPU:$C9CA PRG:09CA 18
|
||
adc GameplayObjectVelocityIntY,x ; CPU:$C9CB PRG:09CB 7D CC 04
|
||
sta GameplayObjectVelocityIntY,x ; CPU:$C9CE PRG:09CE 9D CC 04
|
||
lda GameplayObjectVelocityX,x ; CPU:$C9D1 PRG:09D1 BD F4 04
|
||
adc GameplayObjectPosY,x ; CPU:$C9D4 PRG:09D4 7D A4 04
|
||
sta GameplayObjectPosY,x ; CPU:$C9D7 PRG:09D7 9D A4 04
|
||
rts ; CPU:$C9DA PRG:09DA 60
|
||
|
||
; Round-object sprite tables
|
||
;===============================================================================
|
||
RoundObjectTileTable:
|
||
.byte $9D, $9E, $9F, $9E, $9D, $A0, $A1, $A0 ; CPU:$C9DB PRG:09DB 9D 9E 9F 9E 9D A0 A1 A0
|
||
RoundObjectXOffsetTable:
|
||
.byte $08, $08, $F0, $F0, $08, $08, $F0, $F0 ; CPU:$C9E3 PRG:09E3 08 08 F0 F0 08 08 F0 F0
|
||
.byte $08, $08, $F0, $F0, $08, $08, $F0, $F0 ; CPU:$C9EB PRG:09EB 08 08 F0 F0 08 08 F0 F0
|
||
RoundObjectYOffsetTable:
|
||
.byte $EE, $0A, $0A, $EE, $EE, $0A, $0A, $EE ; CPU:$C9F3 PRG:09F3 EE 0A 0A EE EE 0A 0A EE
|
||
.byte $EE, $0A, $0A, $EE, $EE, $0A, $0A, $EE ; CPU:$C9FB PRG:09FB EE 0A 0A EE EE 0A 0A EE
|
||
RoundObjectVerticalSpacingTable:
|
||
.byte $F8, $08, $08, $F8, $F8, $08, $08, $F8 ; CPU:$CA03 PRG:0A03 F8 08 08 F8 F8 08 08 F8
|
||
.byte $F8, $08, $08, $F8, $F8, $08, $08, $F8 ; CPU:$CA0B PRG:0A0B F8 08 08 F8 F8 08 08 F8
|
||
RoundObjectTileTopTable:
|
||
.byte $91, $93, $97, $97, $FC, $92, $95, $9A ; CPU:$CA13 PRG:0A13 91 93 97 97 FC 92 95 9A
|
||
.byte $9A, $FC ; CPU:$CA1B PRG:0A1B 9A FC
|
||
RoundObjectTileMiddleTable:
|
||
.byte $FC, $94, $98, $98, $FC, $FC, $96, $9B ; CPU:$CA1D PRG:0A1D FC 94 98 98 FC FC 96 9B
|
||
.byte $9B, $FC ; CPU:$CA25 PRG:0A25 9B FC
|
||
RoundObjectTileBottomTable:
|
||
.byte $FC, $FC, $99, $99, $FC, $FC, $FC, $9C ; CPU:$CA27 PRG:0A27 FC FC 99 99 FC FC FC 9C
|
||
.byte $9C, $FC ; CPU:$CA2F PRG:0A2F 9C FC
|
||
RoundObjectAttributeTable:
|
||
.byte $C0, $40, $00, $80 ; CPU:$CA31 PRG:0A31 C0 40 00 80
|
||
|
||
;===============================================================================
|
||
; NegateGameplayObjectVelocityY
|
||
;
|
||
; Global:
|
||
; Sets the sound/event request flag and negates one fixed-point gameplay-object velocity pair.
|
||
;
|
||
; Local:
|
||
; Sets bit $80 in SoundRequestFlags3, then two’s-complements GameplayObjectParameter and GameplayObjectVelocityY.
|
||
;
|
||
; Parameters:
|
||
; X = gameplay-object slot.
|
||
;
|
||
; Returns:
|
||
; The selected velocity pair is negated.
|
||
;
|
||
; PRG offsets: $0A37-$0A4E
|
||
; CPU range: $CA37-$CA4E
|
||
;===============================================================================
|
||
|
||
BounceGameplayObjectY:
|
||
lda SoundRequestFlags3 ; CPU:$CA35 PRG:0A35 A5 F3
|
||
ora #$80 ; CPU:$CA37 PRG:0A37 09 80
|
||
sta SoundRequestFlags3 ; CPU:$CA39 PRG:0A39 85 F3
|
||
NegateGameplayObjectVelocityY:
|
||
lda #$00 ; CPU:$CA3B PRG:0A3B A9 00
|
||
sec ; CPU:$CA3D PRG:0A3D 38
|
||
sbc GameplayObjectParameter,x ; CPU:$CA3E PRG:0A3E FD 08 05
|
||
sta GameplayObjectParameter,x ; CPU:$CA41 PRG:0A41 9D 08 05
|
||
lda #$00 ; CPU:$CA44 PRG:0A44 A9 00
|
||
sbc GameplayObjectVelocityY,x ; CPU:$CA46 PRG:0A46 FD E0 04
|
||
sta GameplayObjectVelocityY,x ; CPU:$CA49 PRG:0A49 9D E0 04
|
||
rts ; CPU:$CA4C PRG:0A4C 60
|
||
;===============================================================================
|
||
; NegateGameplayObjectVelocityX
|
||
;
|
||
; Global:
|
||
; Sets the sound/event request flag and negates the other fixed-point gameplay-object velocity pair.
|
||
;
|
||
; Local:
|
||
; Sets bit $80 in SoundRequestFlags3, then two’s-complements GameplayObjectPosXHi and GameplayObjectVelocityX.
|
||
;
|
||
; Parameters:
|
||
; X = gameplay-object slot.
|
||
;
|
||
; Returns:
|
||
; The selected velocity pair is negated.
|
||
;
|
||
; PRG offsets: $0A4F-$0A66
|
||
; CPU range: $CA4F-$CA66
|
||
;===============================================================================
|
||
|
||
BounceGameplayObjectX:
|
||
lda SoundRequestFlags3 ; CPU:$CA4D PRG:0A4D A5 F3
|
||
ora #$80 ; CPU:$CA4F PRG:0A4F 09 80
|
||
sta SoundRequestFlags3 ; CPU:$CA51 PRG:0A51 85 F3
|
||
NegateGameplayObjectVelocityX:
|
||
lda #$00 ; CPU:$CA53 PRG:0A53 A9 00
|
||
sec ; CPU:$CA55 PRG:0A55 38
|
||
sbc GameplayObjectPosXHi,x ; CPU:$CA56 PRG:0A56 FD 1C 05
|
||
sta GameplayObjectPosXHi,x ; CPU:$CA59 PRG:0A59 9D 1C 05
|
||
lda #$00 ; CPU:$CA5C PRG:0A5C A9 00
|
||
sbc GameplayObjectVelocityX,x ; CPU:$CA5E PRG:0A5E FD F4 04
|
||
sta GameplayObjectVelocityX,x ; CPU:$CA61 PRG:0A61 9D F4 04
|
||
rts ; CPU:$CA64 PRG:0A64 60
|
||
;===============================================================================
|
||
; TestGameplayObjectAgainstBounds
|
||
;
|
||
; Global:
|
||
; Tests one gameplay object against a table-driven set of rectangular boundaries.
|
||
;
|
||
; Local:
|
||
; Walks boundary candidate records through four zero-page pointers, accumulates directional overlap flags, and reflects velocity components according to the collision side.
|
||
;
|
||
; Parameters:
|
||
; X = gameplay-object slot; BoundsCandidateIndex and four boundary-table pointers.
|
||
;
|
||
; Returns:
|
||
; GameplayObjectCollisionFlags contains overlap sides; velocity components may be negated.
|
||
;
|
||
; PRG offsets: $0A67-$0B1A
|
||
; CPU range: $CA67-$CB1A
|
||
;===============================================================================
|
||
|
||
TestGameplayObjectAgainstBounds:
|
||
ldy BoundsCandidateIndex ; CPU:$CA65 PRG:0A65 A4 CD
|
||
TestGameplayObjectAgainstBounds_Load:
|
||
lda #$00 ; CPU:$CA67 PRG:0A67 A9 00
|
||
sta GameplayObjectCollisionFlags ; CPU:$CA69 PRG:0A69 85 CC
|
||
lda (BoundsTopPtrLo),y ; CPU:$CA6B PRG:0A6B B1 27
|
||
sec ; CPU:$CA6D PRG:0A6D 38
|
||
sbc #$08 ; CPU:$CA6E PRG:0A6E E9 08
|
||
cmp GameplayObjectPosY,x ; CPU:$CA70 PRG:0A70 DD A4 04
|
||
bcs TestGameplayObjectAgainstBounds_Block_7 ; CPU:$CA73 PRG:0A73 B0 66
|
||
adc #$03 ; CPU:$CA75 PRG:0A75 69 03
|
||
cmp GameplayObjectPosY,x ; CPU:$CA77 PRG:0A77 DD A4 04
|
||
bcc TestGameplayObjectAgainstBounds_Block ; CPU:$CA7A PRG:0A7A 90 04
|
||
lda #$01 ; CPU:$CA7C PRG:0A7C A9 01
|
||
bne TestGameplayObjectAgainstBounds_Block_1 ; CPU:$CA7E PRG:0A7E D0 10
|
||
TestGameplayObjectAgainstBounds_Block:
|
||
lda (BoundsBottomPtrLo),y ; CPU:$CA80 PRG:0A80 B1 29
|
||
cmp GameplayObjectPosY,x ; CPU:$CA82 PRG:0A82 DD A4 04
|
||
bcc TestGameplayObjectAgainstBounds_Block_7 ; CPU:$CA85 PRG:0A85 90 54
|
||
sbc #$03 ; CPU:$CA87 PRG:0A87 E9 03
|
||
cmp GameplayObjectPosY,x ; CPU:$CA89 PRG:0A89 DD A4 04
|
||
bcs TestGameplayObjectAgainstBounds_Block_4 ; CPU:$CA8C PRG:0A8C B0 1D
|
||
lda #$02 ; CPU:$CA8E PRG:0A8E A9 02
|
||
TestGameplayObjectAgainstBounds_Block_1:
|
||
sta GameplayObjectCollisionFlags ; CPU:$CA90 PRG:0A90 85 CC
|
||
lda (BoundsLeftPtrLo),y ; CPU:$CA92 PRG:0A92 B1 23
|
||
cmp #$10 ; CPU:$CA94 PRG:0A94 C9 10
|
||
beq TestGameplayObjectAgainstBounds_Block_2 ; CPU:$CA96 PRG:0A96 F0 08
|
||
sec ; CPU:$CA98 PRG:0A98 38
|
||
sbc #$04 ; CPU:$CA99 PRG:0A99 E9 04
|
||
cmp GameplayObjectPosX,x ; CPU:$CA9B PRG:0A9B DD 90 04
|
||
bcs TestGameplayObjectAgainstBounds_Block_3 ; CPU:$CA9E PRG:0A9E B0 07
|
||
TestGameplayObjectAgainstBounds_Block_2:
|
||
lda (BoundsRightPtrLo),y ; CPU:$CAA0 PRG:0AA0 B1 25
|
||
cmp GameplayObjectPosX,x ; CPU:$CAA2 PRG:0AA2 DD 90 04
|
||
bcs TestGameplayObjectAgainstBounds_Block_4 ; CPU:$CAA5 PRG:0AA5 B0 04
|
||
TestGameplayObjectAgainstBounds_Block_3:
|
||
lda #$00 ; CPU:$CAA7 PRG:0AA7 A9 00
|
||
sta GameplayObjectCollisionFlags ; CPU:$CAA9 PRG:0AA9 85 CC
|
||
TestGameplayObjectAgainstBounds_Block_4:
|
||
lda (BoundsLeftPtrLo),y ; CPU:$CAAB PRG:0AAB B1 23
|
||
cmp #$10 ; CPU:$CAAD PRG:0AAD C9 10
|
||
beq TestGameplayObjectAgainstBounds_Block_5 ; CPU:$CAAF PRG:0AAF F0 15
|
||
sec ; CPU:$CAB1 PRG:0AB1 38
|
||
sbc #$08 ; CPU:$CAB2 PRG:0AB2 E9 08
|
||
cmp GameplayObjectPosX,x ; CPU:$CAB4 PRG:0AB4 DD 90 04
|
||
bcs TestGameplayObjectAgainstBounds_Block_7 ; CPU:$CAB7 PRG:0AB7 B0 22
|
||
adc #$03 ; CPU:$CAB9 PRG:0AB9 69 03
|
||
cmp GameplayObjectPosX,x ; CPU:$CABB PRG:0ABB DD 90 04
|
||
bcc TestGameplayObjectAgainstBounds_Block_5 ; CPU:$CABE PRG:0ABE 90 06
|
||
lda GameplayObjectCollisionFlags ; CPU:$CAC0 PRG:0AC0 A5 CC
|
||
ora #$04 ; CPU:$CAC2 PRG:0AC2 09 04
|
||
bne TestGameplayObjectAgainstBounds_Block_6 ; CPU:$CAC4 PRG:0AC4 D0 13
|
||
TestGameplayObjectAgainstBounds_Block_5:
|
||
lda (BoundsRightPtrLo),y ; CPU:$CAC6 PRG:0AC6 B1 25
|
||
cmp #$FF ; CPU:$CAC8 PRG:0AC8 C9 FF
|
||
beq TestGameplayObjectAgainstBounds_Block_7 ; CPU:$CACA PRG:0ACA F0 0F
|
||
cmp GameplayObjectPosX,x ; CPU:$CACC PRG:0ACC DD 90 04
|
||
bcc TestGameplayObjectAgainstBounds_Block_7 ; CPU:$CACF PRG:0ACF 90 0A
|
||
sbc #$03 ; CPU:$CAD1 PRG:0AD1 E9 03
|
||
bcs TestGameplayObjectAgainstBounds_Block_7 ; CPU:$CAD3 PRG:0AD3 B0 06
|
||
lda GameplayObjectCollisionFlags ; CPU:$CAD5 PRG:0AD5 A5 CC
|
||
ora #$08 ; CPU:$CAD7 PRG:0AD7 09 08
|
||
TestGameplayObjectAgainstBounds_Block_6:
|
||
sta GameplayObjectCollisionFlags ; CPU:$CAD9 PRG:0AD9 85 CC
|
||
TestGameplayObjectAgainstBounds_Block_7:
|
||
lda GameplayObjectCollisionFlags ; CPU:$CADB PRG:0ADB A5 CC
|
||
bne TestGameplayObjectAgainstBounds_Block_9 ; CPU:$CADD PRG:0ADD D0 07
|
||
TestGameplayObjectAgainstBounds_Decrement:
|
||
dey ; CPU:$CADF PRG:0ADF 88
|
||
bmi TestGameplayObjectAgainstBounds_Block_8 ; CPU:$CAE0 PRG:0AE0 30 03
|
||
jmp TestGameplayObjectAgainstBounds_Load ; CPU:$CAE2 PRG:0AE2 4C 69 CA
|
||
TestGameplayObjectAgainstBounds_Block_8:
|
||
rts ; CPU:$CAE5 PRG:0AE5 60
|
||
TestGameplayObjectAgainstBounds_Block_9:
|
||
lsr GameplayObjectCollisionFlags ; CPU:$CAE6 PRG:0AE6 46 CC
|
||
bcc TestGameplayObjectAgainstBounds_Block_10 ; CPU:$CAE8 PRG:0AE8 90 08
|
||
lda GameplayObjectVelocityX,x ; CPU:$CAEA PRG:0AEA BD F4 04
|
||
bmi TestGameplayObjectAgainstBounds_Block_10 ; CPU:$CAED PRG:0AED 30 03
|
||
jsr BounceGameplayObjectX ; CPU:$CAEF PRG:0AEF 20 4F CA
|
||
TestGameplayObjectAgainstBounds_Block_10:
|
||
lsr GameplayObjectCollisionFlags ; CPU:$CAF2 PRG:0AF2 46 CC
|
||
bcc TestGameplayObjectAgainstBounds_Block_11 ; CPU:$CAF4 PRG:0AF4 90 08
|
||
lda GameplayObjectVelocityX,x ; CPU:$CAF6 PRG:0AF6 BD F4 04
|
||
bpl TestGameplayObjectAgainstBounds_Block_11 ; CPU:$CAF9 PRG:0AF9 10 03
|
||
jsr BounceGameplayObjectX ; CPU:$CAFB PRG:0AFB 20 4F CA
|
||
TestGameplayObjectAgainstBounds_Block_11:
|
||
lsr GameplayObjectCollisionFlags ; CPU:$CAFE PRG:0AFE 46 CC
|
||
bcc TestGameplayObjectAgainstBounds_Block_12 ; CPU:$CB00 PRG:0B00 90 08
|
||
lda GameplayObjectVelocityY,x ; CPU:$CB02 PRG:0B02 BD E0 04
|
||
bmi TestGameplayObjectAgainstBounds_Block_12 ; CPU:$CB05 PRG:0B05 30 03
|
||
jsr BounceGameplayObjectY ; CPU:$CB07 PRG:0B07 20 37 CA
|
||
TestGameplayObjectAgainstBounds_Block_12:
|
||
lsr GameplayObjectCollisionFlags ; CPU:$CB0A PRG:0B0A 46 CC
|
||
bcc TestGameplayObjectAgainstBounds_Block_13 ; CPU:$CB0C PRG:0B0C 90 08
|
||
lda GameplayObjectVelocityY,x ; CPU:$CB0E PRG:0B0E BD E0 04
|
||
bpl TestGameplayObjectAgainstBounds_Block_13 ; CPU:$CB11 PRG:0B11 10 03
|
||
jsr BounceGameplayObjectY ; CPU:$CB13 PRG:0B13 20 37 CA
|
||
TestGameplayObjectAgainstBounds_Block_13:
|
||
jmp TestGameplayObjectAgainstBounds_Decrement ; CPU:$CB16 PRG:0B16 4C E1 CA
|
||
|
||
; $0B1B: RTS terminating TestGameplayObjectAgainstBounds.
|
||
rts ; CPU:$CB19 PRG:0B19 60
|
||
|
||
;===============================================================================
|
||
; ResolveGameplayObjectInteraction
|
||
;
|
||
; Global:
|
||
; Tests the current gameplay object against active player slots and handles a successful hit.
|
||
;
|
||
; Local:
|
||
; Compares object and player coordinates, transitions the player into a hit state, updates animation/timers and sound flags, then removes the gameplay object.
|
||
;
|
||
; Parameters:
|
||
; X = gameplay-object slot.
|
||
;
|
||
; Returns:
|
||
; Player and gameplay-object state may be changed.
|
||
;
|
||
; PRG offsets: $0B1C-$0B73
|
||
; CPU range: $CB1C-$CB73
|
||
;===============================================================================
|
||
|
||
ResolveGameplayObjectInteraction:
|
||
ldy #$01 ; CPU:$CB1A PRG:0B1A A0 01
|
||
ResolveGameplayObjectInteraction_Block:
|
||
lda $0088,y ; CPU:$CB1C PRG:0B1C B9 88 00
|
||
bmi ResolveGameplayObjectInteraction_Block_1 ; CPU:$CB1F PRG:0B1F 30 4D
|
||
beq ResolveGameplayObjectInteraction_Block_1 ; CPU:$CB21 PRG:0B21 F0 4B
|
||
lda $00BD,y ; CPU:$CB23 PRG:0B23 B9 BD 00
|
||
bne ResolveGameplayObjectInteraction_Block_1 ; CPU:$CB26 PRG:0B26 D0 46
|
||
lda GameplayObjectPosX,x ; CPU:$CB28 PRG:0B28 BD 90 04
|
||
sec ; CPU:$CB2B PRG:0B2B 38
|
||
sbc $0091,y ; CPU:$CB2C PRG:0B2C F9 91 00
|
||
jsr AbsoluteDifference ; CPU:$CB2F PRG:0B2F 20 8E F0
|
||
cmp #$08 ; CPU:$CB32 PRG:0B32 C9 08
|
||
bcs ResolveGameplayObjectInteraction_Block_1 ; CPU:$CB34 PRG:0B34 B0 38
|
||
lda GameplayObjectPosY,x ; CPU:$CB36 PRG:0B36 BD A4 04
|
||
sec ; CPU:$CB39 PRG:0B39 38
|
||
sbc $009A,y ; CPU:$CB3A PRG:0B3A F9 9A 00
|
||
sec ; CPU:$CB3D PRG:0B3D 38
|
||
sbc #$08 ; CPU:$CB3E PRG:0B3E E9 08
|
||
jsr AbsoluteDifference ; CPU:$CB40 PRG:0B40 20 8E F0
|
||
cmp #$0C ; CPU:$CB43 PRG:0B43 C9 0C
|
||
bcs ResolveGameplayObjectInteraction_Block_1 ; CPU:$CB45 PRG:0B45 B0 27
|
||
lda #$00 ; CPU:$CB47 PRG:0B47 A9 00
|
||
sta $0088,y ; CPU:$CB49 PRG:0B49 99 88 00
|
||
lda #$01 ; CPU:$CB4C PRG:0B4C A9 01
|
||
sta $007F,y ; CPU:$CB4E PRG:0B4E 99 7F 00
|
||
sta $00C1,y ; CPU:$CB51 PRG:0B51 99 C1 00
|
||
lda #$0B ; CPU:$CB54 PRG:0B54 A9 0B
|
||
sta PlayerAnimationState,y ; CPU:$CB56 PRG:0B56 99 51 04
|
||
lda #$20 ; CPU:$CB59 PRG:0B59 A9 20
|
||
sta PlayerStateTimer,y ; CPU:$CB5B PRG:0B5B 99 5A 04
|
||
lda SoundRequestFlags0 ; CPU:$CB5E PRG:0B5E A5 F0
|
||
ora #$80 ; CPU:$CB60 PRG:0B60 09 80
|
||
sta SoundRequestFlags0 ; CPU:$CB62 PRG:0B62 85 F0
|
||
lda #$F0 ; CPU:$CB64 PRG:0B64 A9 F0
|
||
sta GameplayObjectPosY,x ; CPU:$CB66 PRG:0B66 9D A4 04
|
||
lda #$FF ; CPU:$CB69 PRG:0B69 A9 FF
|
||
sta GameplayObjectState,x ; CPU:$CB6B PRG:0B6B 9D 30 05
|
||
ResolveGameplayObjectInteraction_Block_1:
|
||
dey ; CPU:$CB6E PRG:0B6E 88
|
||
bpl ResolveGameplayObjectInteraction_Block ; CPU:$CB6F PRG:0B6F 10 AB
|
||
rts ; CPU:$CB71 PRG:0B71 60
|
||
;===============================================================================
|
||
; UpdateBonusObjectSystem
|
||
;
|
||
; Global:
|
||
; Advances the active bonus-object subsystem.
|
||
;
|
||
; Local:
|
||
; Finds the active object, performs frame-gated phase/timer updates, tests player overlap, and advances object phases.
|
||
;
|
||
; Parameters:
|
||
; Bonus object arrays and FrameCounter.
|
||
;
|
||
; Returns:
|
||
; Bonus object state and player effects may be updated.
|
||
;
|
||
; PRG offsets: $0B74-$0BA7
|
||
; CPU range: $CB74-$CBA7
|
||
;===============================================================================
|
||
|
||
UpdateBonusObjectSystem:
|
||
ldx ActiveBonusObjectIndex ; CPU:$CB72 PRG:0B72 AE D1 05
|
||
bmi UpdateBonusObjectSystem_Block_2 ; CPU:$CB75 PRG:0B75 30 2E
|
||
UpdateBonusObjectSystem_Block:
|
||
jsr FindActiveBonusObject ; CPU:$CB77 PRG:0B77 20 A8 CB
|
||
lda BonusObjectTimer,x ; CPU:$CB7A PRG:0B7A BD 04 06
|
||
beq UpdateBonusObjectSystem_Block_1 ; CPU:$CB7D PRG:0B7D F0 23
|
||
txa ; CPU:$CB7F PRG:0B7F 8A
|
||
eor FrameCounter ; CPU:$CB80 PRG:0B80 45 19
|
||
and #$01 ; CPU:$CB82 PRG:0B82 29 01
|
||
bne UpdateBonusObjectSystem_Block_1 ; CPU:$CB84 PRG:0B84 D0 1C
|
||
ldy BonusObjectPhase,x ; CPU:$CB86 PRG:0B86 BC FA 05
|
||
iny ; CPU:$CB89 PRG:0B89 C8
|
||
tya ; CPU:$CB8A PRG:0B8A 98
|
||
and #$03 ; CPU:$CB8B PRG:0B8B 29 03
|
||
sta BonusObjectPhase,x ; CPU:$CB8D PRG:0B8D 9D FA 05
|
||
jsr DrawBonusObjectHud ; CPU:$CB90 PRG:0B90 20 CB CC
|
||
lda BonusObjectPhase,x ; CPU:$CB93 PRG:0B93 BD FA 05
|
||
cmp #$01 ; CPU:$CB96 PRG:0B96 C9 01
|
||
bne UpdateBonusObjectSystem_Block_1 ; CPU:$CB98 PRG:0B98 D0 08
|
||
dec BonusObjectPhaseTimer,x ; CPU:$CB9A PRG:0B9A DE 0E 06
|
||
bne UpdateBonusObjectSystem_Block_1 ; CPU:$CB9D PRG:0B9D D0 03
|
||
dec BonusObjectTimer,x ; CPU:$CB9F PRG:0B9F DE 04 06
|
||
UpdateBonusObjectSystem_Block_1:
|
||
dex ; CPU:$CBA2 PRG:0BA2 CA
|
||
bpl UpdateBonusObjectSystem_Block ; CPU:$CBA3 PRG:0BA3 10 D2
|
||
UpdateBonusObjectSystem_Block_2:
|
||
rts ; CPU:$CBA5 PRG:0BA5 60
|
||
;===============================================================================
|
||
; FindActiveBonusObject
|
||
;
|
||
; Global:
|
||
; Returns whether the selected bonus-object slot is active.
|
||
;
|
||
; Local:
|
||
; Loads the slot timer/state and returns through the caller path.
|
||
;
|
||
; Parameters:
|
||
; X = bonus-object slot.
|
||
;
|
||
; Returns:
|
||
; Condition codes and A reflect slot activity.
|
||
;
|
||
; PRG offsets: $0BA8-$0BB1
|
||
; CPU range: $CBA8-$CBB1
|
||
;===============================================================================
|
||
|
||
FindActiveBonusObject:
|
||
ldy #$07 ; CPU:$CBA6 PRG:0BA6 A0 07
|
||
lda BonusObjectTimer,x ; CPU:$CBA8 PRG:0BA8 BD 04 06
|
||
bne TestBonusObjectPlayerOverlap ; CPU:$CBAB PRG:0BAB D0 03
|
||
jmp TestBonusObjectCollection ; CPU:$CBAD PRG:0BAD 4C 3A CC
|
||
;===============================================================================
|
||
; TestBonusObjectPlayerOverlap
|
||
;
|
||
; Global:
|
||
; Tests a bonus object against each active player and applies directional impulses.
|
||
;
|
||
; Local:
|
||
; Computes absolute X/Y deltas, checks overlap thresholds, sets player impulse fields, requests sound, and continues through all players.
|
||
;
|
||
; Parameters:
|
||
; X = bonus-object slot; Y iterates player slots.
|
||
;
|
||
; Returns:
|
||
; Player motion state and sound flags may be updated.
|
||
;
|
||
; PRG offsets: $0BB2-$0C32
|
||
; CPU range: $CBB2-$CC32
|
||
;===============================================================================
|
||
|
||
TestBonusObjectPlayerOverlap:
|
||
lda $0088,y ; CPU:$CBB0 PRG:0BB0 B9 88 00
|
||
bmi TestBonusObjectPlayerOverlap_Block_4 ; CPU:$CBB3 PRG:0BB3 30 78
|
||
beq TestBonusObjectPlayerOverlap_Block_4 ; CPU:$CBB5 PRG:0BB5 F0 76
|
||
cpy #$02 ; CPU:$CBB7 PRG:0BB7 C0 02
|
||
bcc TestBonusObjectPlayerOverlap_Block ; CPU:$CBB9 PRG:0BB9 90 04
|
||
cmp #$01 ; CPU:$CBBB PRG:0BBB C9 01
|
||
beq TestBonusObjectPlayerOverlap_Block_4 ; CPU:$CBBD PRG:0BBD F0 6E
|
||
TestBonusObjectPlayerOverlap_Block:
|
||
lda $0091,y ; CPU:$CBBF PRG:0BBF B9 91 00
|
||
clc ; CPU:$CBC2 PRG:0BC2 18
|
||
adc #$08 ; CPU:$CBC3 PRG:0BC3 69 08
|
||
sec ; CPU:$CBC5 PRG:0BC5 38
|
||
sbc BonusObjectPosX,x ; CPU:$CBC6 PRG:0BC6 FD D2 05
|
||
sta CollisionDeltaX ; CPU:$CBC9 PRG:0BC9 85 12
|
||
jsr AbsoluteDifference ; CPU:$CBCB PRG:0BCB 20 8E F0
|
||
cmp #$12 ; CPU:$CBCE PRG:0BCE C9 12
|
||
bcs TestBonusObjectPlayerOverlap_Block_4 ; CPU:$CBD0 PRG:0BD0 B0 5B
|
||
lda $009A,y ; CPU:$CBD2 PRG:0BD2 B9 9A 00
|
||
clc ; CPU:$CBD5 PRG:0BD5 18
|
||
adc #$0C ; CPU:$CBD6 PRG:0BD6 69 0C
|
||
sec ; CPU:$CBD8 PRG:0BD8 38
|
||
sbc BonusObjectPosY,x ; CPU:$CBD9 PRG:0BD9 FD DC 05
|
||
sta CollisionDeltaY ; CPU:$CBDC PRG:0BDC 85 13
|
||
jsr AbsoluteDifference ; CPU:$CBDE PRG:0BDE 20 8E F0
|
||
cmp #$12 ; CPU:$CBE1 PRG:0BE1 C9 12
|
||
bcs TestBonusObjectPlayerOverlap_Block_4 ; CPU:$CBE3 PRG:0BE3 B0 48
|
||
lda CollisionDeltaX ; CPU:$CBE5 PRG:0BE5 A5 12
|
||
bmi TestBonusObjectPlayerOverlap_Block_1 ; CPU:$CBE7 PRG:0BE7 30 11
|
||
cmp #$03 ; CPU:$CBE9 PRG:0BE9 C9 03
|
||
bcc TestBonusObjectPlayerOverlap_Block_2 ; CPU:$CBEB PRG:0BEB 90 1C
|
||
lda #$02 ; CPU:$CBED PRG:0BED A9 02
|
||
sta PlayerHorizontalImpulse,y ; CPU:$CBEF PRG:0BEF 99 1B 04
|
||
jsr RequestCollisionSound ; CPU:$CBF2 PRG:0BF2 20 33 CC
|
||
jsr AdjustPlayerVerticalState ; CPU:$CBF5 PRG:0BF5 20 BB EB
|
||
bne TestBonusObjectPlayerOverlap_Block_2 ; CPU:$CBF8 PRG:0BF8 D0 0F
|
||
TestBonusObjectPlayerOverlap_Block_1:
|
||
cmp #$FD ; CPU:$CBFA PRG:0BFA C9 FD
|
||
bcs TestBonusObjectPlayerOverlap_Block_2 ; CPU:$CBFC PRG:0BFC B0 0B
|
||
lda #$FE ; CPU:$CBFE PRG:0BFE A9 FE
|
||
sta PlayerHorizontalImpulse,y ; CPU:$CC00 PRG:0C00 99 1B 04
|
||
jsr AdjustPlayerVerticalState ; CPU:$CC03 PRG:0C03 20 BB EB
|
||
jsr RequestCollisionSound ; CPU:$CC06 PRG:0C06 20 33 CC
|
||
TestBonusObjectPlayerOverlap_Block_2:
|
||
lda CollisionDeltaY ; CPU:$CC09 PRG:0C09 A5 13
|
||
bmi TestBonusObjectPlayerOverlap_Block_3 ; CPU:$CC0B PRG:0C0B 30 11
|
||
cmp #$03 ; CPU:$CC0D PRG:0C0D C9 03
|
||
bcc TestBonusObjectPlayerOverlap_Block_4 ; CPU:$CC0F PRG:0C0F 90 1C
|
||
lda #$02 ; CPU:$CC11 PRG:0C11 A9 02
|
||
sta PlayerVerticalImpulse,y ; CPU:$CC13 PRG:0C13 99 2D 04
|
||
jsr AdjustPlayerHorizontalState ; CPU:$CC16 PRG:0C16 20 B2 EB
|
||
jsr RequestCollisionSound ; CPU:$CC19 PRG:0C19 20 33 CC
|
||
bne TestBonusObjectPlayerOverlap_Block_4 ; CPU:$CC1C PRG:0C1C D0 0F
|
||
TestBonusObjectPlayerOverlap_Block_3:
|
||
cmp #$FD ; CPU:$CC1E PRG:0C1E C9 FD
|
||
bcs TestBonusObjectPlayerOverlap_Block_4 ; CPU:$CC20 PRG:0C20 B0 0B
|
||
lda #$FE ; CPU:$CC22 PRG:0C22 A9 FE
|
||
sta PlayerVerticalImpulse,y ; CPU:$CC24 PRG:0C24 99 2D 04
|
||
jsr AdjustPlayerHorizontalState ; CPU:$CC27 PRG:0C27 20 B2 EB
|
||
jsr RequestCollisionSound ; CPU:$CC2A PRG:0C2A 20 33 CC
|
||
TestBonusObjectPlayerOverlap_Block_4:
|
||
dey ; CPU:$CC2D PRG:0C2D 88
|
||
bpl TestBonusObjectPlayerOverlap ; CPU:$CC2E PRG:0C2E 10 80
|
||
rts ; CPU:$CC30 PRG:0C30 60
|
||
;===============================================================================
|
||
; RequestCollisionSound
|
||
;
|
||
; Global:
|
||
; Queues the collision sound effect.
|
||
;
|
||
; Local:
|
||
; Sets bit $02 in SoundRequestFlags1.
|
||
;
|
||
; Parameters:
|
||
; None.
|
||
;
|
||
; Returns:
|
||
; Sound request flag updated.
|
||
;
|
||
; PRG offsets: $0C33-$0C39
|
||
; CPU range: $CC33-$CC39
|
||
;===============================================================================
|
||
|
||
RequestCollisionSound:
|
||
lda SoundRequestFlags1 ; CPU:$CC31 PRG:0C31 A5 F1
|
||
ora #$02 ; CPU:$CC33 PRG:0C33 09 02
|
||
sta SoundRequestFlags1 ; CPU:$CC35 PRG:0C35 85 F1
|
||
rts ; CPU:$CC37 PRG:0C37 60
|
||
;===============================================================================
|
||
; TestBonusObjectCollection
|
||
;
|
||
; Global:
|
||
; Tests a bonus object against players for collection or activation.
|
||
;
|
||
; Local:
|
||
; Checks phase-dependent rectangular overlap and starts the bonus-object timer when collected.
|
||
;
|
||
; Parameters:
|
||
; X = bonus-object slot; Y iterates players.
|
||
;
|
||
; Returns:
|
||
; Bonus object phase/timer may be changed.
|
||
;
|
||
; PRG offsets: $0C3A-$0CBE
|
||
; CPU range: $CC3A-$CCBE
|
||
;===============================================================================
|
||
|
||
TestBonusObjectCollection:
|
||
lda $0088,y ; CPU:$CC38 PRG:0C38 B9 88 00
|
||
bmi TestBonusObjectCollection_Block_2 ; CPU:$CC3B PRG:0C3B 30 79
|
||
beq TestBonusObjectCollection_Block_2 ; CPU:$CC3D PRG:0C3D F0 77
|
||
cpy #$02 ; CPU:$CC3F PRG:0C3F C0 02
|
||
bcc TestBonusObjectCollection_Block ; CPU:$CC41 PRG:0C41 90 2E
|
||
lda BonusObjectPhase,x ; CPU:$CC43 PRG:0C43 BD FA 05
|
||
cmp #$03 ; CPU:$CC46 PRG:0C46 C9 03
|
||
bne TestBonusObjectCollection_Block ; CPU:$CC48 PRG:0C48 D0 27
|
||
lda BonusObjectPosX,x ; CPU:$CC4A PRG:0C4A BD D2 05
|
||
sec ; CPU:$CC4D PRG:0C4D 38
|
||
sbc #$0A ; CPU:$CC4E PRG:0C4E E9 0A
|
||
cmp $0091,y ; CPU:$CC50 PRG:0C50 D9 91 00
|
||
bcs TestBonusObjectCollection_Block ; CPU:$CC53 PRG:0C53 B0 1C
|
||
adc #$04 ; CPU:$CC55 PRG:0C55 69 04
|
||
cmp $0091,y ; CPU:$CC57 PRG:0C57 D9 91 00
|
||
bcc TestBonusObjectCollection_Block ; CPU:$CC5A PRG:0C5A 90 15
|
||
lda BonusObjectPosY,x ; CPU:$CC5C PRG:0C5C BD DC 05
|
||
sec ; CPU:$CC5F PRG:0C5F 38
|
||
sbc #$1C ; CPU:$CC60 PRG:0C60 E9 1C
|
||
cmp $009A,y ; CPU:$CC62 PRG:0C62 D9 9A 00
|
||
bcs TestBonusObjectCollection_Block ; CPU:$CC65 PRG:0C65 B0 0A
|
||
adc #$04 ; CPU:$CC67 PRG:0C67 69 04
|
||
cmp $009A,y ; CPU:$CC69 PRG:0C69 D9 9A 00
|
||
bcc TestBonusObjectCollection_Block ; CPU:$CC6C PRG:0C6C 90 03
|
||
jsr TriggerBonusObjectEffect ; CPU:$CC6E PRG:0C6E 20 BF CC
|
||
TestBonusObjectCollection_Block:
|
||
lda $0091,y ; CPU:$CC71 PRG:0C71 B9 91 00
|
||
clc ; CPU:$CC74 PRG:0C74 18
|
||
adc #$08 ; CPU:$CC75 PRG:0C75 69 08
|
||
sec ; CPU:$CC77 PRG:0C77 38
|
||
sbc BonusObjectPosX,x ; CPU:$CC78 PRG:0C78 FD D2 05
|
||
jsr AbsoluteDifference ; CPU:$CC7B PRG:0C7B 20 8E F0
|
||
sta CollisionDeltaX ; CPU:$CC7E PRG:0C7E 85 12
|
||
lda $009A,y ; CPU:$CC80 PRG:0C80 B9 9A 00
|
||
clc ; CPU:$CC83 PRG:0C83 18
|
||
adc #$0C ; CPU:$CC84 PRG:0C84 69 0C
|
||
sec ; CPU:$CC86 PRG:0C86 38
|
||
sbc BonusObjectPosY,x ; CPU:$CC87 PRG:0C87 FD DC 05
|
||
jsr AbsoluteDifference ; CPU:$CC8A PRG:0C8A 20 8E F0
|
||
sta CollisionDeltaY ; CPU:$CC8D PRG:0C8D 85 13
|
||
lda BonusObjectPhase,x ; CPU:$CC8F PRG:0C8F BD FA 05
|
||
cmp #$03 ; CPU:$CC92 PRG:0C92 C9 03
|
||
beq TestBonusObjectCollection_Block_1 ; CPU:$CC94 PRG:0C94 F0 0A
|
||
lda CollisionDeltaX ; CPU:$CC96 PRG:0C96 A5 12
|
||
pha ; CPU:$CC98 PRG:0C98 48
|
||
lda CollisionDeltaY ; CPU:$CC99 PRG:0C99 A5 13
|
||
sta CollisionDeltaX ; CPU:$CC9B PRG:0C9B 85 12
|
||
pla ; CPU:$CC9D PRG:0C9D 68
|
||
sta CollisionDeltaY ; CPU:$CC9E PRG:0C9E 85 13
|
||
TestBonusObjectCollection_Block_1:
|
||
lda CollisionDeltaX ; CPU:$CCA0 PRG:0CA0 A5 12
|
||
cmp #$14 ; CPU:$CCA2 PRG:0CA2 C9 14
|
||
bcs TestBonusObjectCollection_Block_2 ; CPU:$CCA4 PRG:0CA4 B0 10
|
||
lda CollisionDeltaY ; CPU:$CCA6 PRG:0CA6 A5 13
|
||
cmp #$0B ; CPU:$CCA8 PRG:0CA8 C9 0B
|
||
bcs TestBonusObjectCollection_Block_2 ; CPU:$CCAA PRG:0CAA B0 0A
|
||
lda #$01 ; CPU:$CCAC PRG:0CAC A9 01
|
||
sta BonusObjectTimer,x ; CPU:$CCAE PRG:0CAE 9D 04 06
|
||
lda #$32 ; CPU:$CCB1 PRG:0CB1 A9 32
|
||
sta BonusObjectPhaseTimer,x ; CPU:$CCB3 PRG:0CB3 9D 0E 06
|
||
TestBonusObjectCollection_Block_2:
|
||
dey ; CPU:$CCB6 PRG:0CB6 88
|
||
bmi TestBonusObjectCollection_Block_3 ; CPU:$CCB7 PRG:0CB7 30 03
|
||
jmp TestBonusObjectCollection ; CPU:$CCB9 PRG:0CB9 4C 3A CC
|
||
TestBonusObjectCollection_Block_3:
|
||
rts ; CPU:$CCBC PRG:0CBC 60
|
||
;===============================================================================
|
||
; TriggerBonusObjectEffect
|
||
;
|
||
; Global:
|
||
; Invokes the bonus effect using the collecting player as context.
|
||
;
|
||
; Local:
|
||
; Preserves the bonus slot, moves the player index into X, increments the effect count, and calls the effect routine.
|
||
;
|
||
; Parameters:
|
||
; X = bonus-object slot; Y = player slot.
|
||
;
|
||
; Returns:
|
||
; Bonus effect counter and player state updated.
|
||
;
|
||
; PRG offsets: $0CBF-$0CCA
|
||
; CPU range: $CCBF-$CCCA
|
||
;===============================================================================
|
||
|
||
TriggerBonusObjectEffect:
|
||
txa ; CPU:$CCBD PRG:0CBD 8A
|
||
pha ; CPU:$CCBE PRG:0CBE 48
|
||
tya ; CPU:$CCBF PRG:0CBF 98
|
||
tax ; CPU:$CCC0 PRG:0CC0 AA
|
||
inc BonusEffectCounter ; CPU:$CCC1 PRG:0CC1 E6 CB
|
||
jsr ApplyBonusEffect ; CPU:$CCC3 PRG:0CC3 20 83 E9
|
||
pla ; CPU:$CCC6 PRG:0CC6 68
|
||
tax ; CPU:$CCC7 PRG:0CC7 AA
|
||
rts ; CPU:$CCC8 PRG:0CC8 60
|
||
;===============================================================================
|
||
; DrawBonusObjectHud
|
||
;
|
||
; Global:
|
||
; Builds three HUD tile commands for the active bonus object.
|
||
;
|
||
; Local:
|
||
; Loads command address bytes, selects three triplets of tiles from phase tables, appends each command, and advances the PPU destination.
|
||
;
|
||
; Parameters:
|
||
; X = bonus-object slot.
|
||
;
|
||
; Returns:
|
||
; Three HUD command groups appended.
|
||
;
|
||
; PRG offsets: $0CCB-$0D0E
|
||
; CPU range: $CCCB-$CD0E
|
||
;===============================================================================
|
||
|
||
DrawBonusObjectHud:
|
||
lda BonusHudAddressHi,x ; CPU:$CCC9 PRG:0CC9 BD F0 05
|
||
sta HudCommandAddressHi ; CPU:$CCCC PRG:0CCC 85 57
|
||
lda BonusHudAddressLo,x ; CPU:$CCCE PRG:0CCE BD E6 05
|
||
sta HudCommandAddressLo ; CPU:$CCD1 PRG:0CD1 85 58
|
||
lda #$03 ; CPU:$CCD3 PRG:0CD3 A9 03
|
||
sta HudCommandLength ; CPU:$CCD5 PRG:0CD5 85 59
|
||
ldy BonusObjectPhase,x ; CPU:$CCD7 PRG:0CD7 BC FA 05
|
||
lda BonusHudRow0Tile0Table,y ; CPU:$CCDA PRG:0CDA B9 26 CD
|
||
sta HudCommandTile0 ; CPU:$CCDD PRG:0CDD 85 5A
|
||
lda BonusHudRow0Tile1Table,y ; CPU:$CCDF PRG:0CDF B9 2A CD
|
||
sta HudCommandTile1 ; CPU:$CCE2 PRG:0CE2 85 5B
|
||
lda BonusHudRow0Tile2Table,y ; CPU:$CCE4 PRG:0CE4 B9 2E CD
|
||
sta HudCommandTile2 ; CPU:$CCE7 PRG:0CE7 85 5C
|
||
jsr AdvanceHudCommandAddress ; CPU:$CCE9 PRG:0CE9 20 0F CD
|
||
lda BonusHudRow1Tile0Table,y ; CPU:$CCEC PRG:0CEC B9 32 CD
|
||
sta HudCommandTile0 ; CPU:$CCEF PRG:0CEF 85 5A
|
||
lda BonusHudRow1Tile1Table,y ; CPU:$CCF1 PRG:0CF1 B9 36 CD
|
||
sta HudCommandTile1 ; CPU:$CCF4 PRG:0CF4 85 5B
|
||
lda BonusHudRow1Tile2Table,y ; CPU:$CCF6 PRG:0CF6 B9 3A CD
|
||
sta HudCommandTile2 ; CPU:$CCF9 PRG:0CF9 85 5C
|
||
jsr AdvanceHudCommandAddress ; CPU:$CCFB PRG:0CFB 20 0F CD
|
||
lda BonusHudRow2Tile0Table,y ; CPU:$CCFE PRG:0CFE B9 3E CD
|
||
sta HudCommandTile0 ; CPU:$CD01 PRG:0D01 85 5A
|
||
lda BonusHudRow2Tile1Table,y ; CPU:$CD03 PRG:0D03 B9 42 CD
|
||
sta HudCommandTile1 ; CPU:$CD06 PRG:0D06 85 5B
|
||
lda BonusHudRow2Tile2Table,y ; CPU:$CD08 PRG:0D08 B9 46 CD
|
||
sta HudCommandTile2 ; CPU:$CD0B PRG:0D0B 85 5C
|
||
;===============================================================================
|
||
; AdvanceHudCommandAddress
|
||
;
|
||
; Global:
|
||
; Appends one three-byte HUD tile group and advances the destination by $20.
|
||
;
|
||
; Local:
|
||
; Preserves Y, appends the command block at $57, advances the low address byte, and carries into the high byte.
|
||
;
|
||
; Parameters:
|
||
; Y = phase/table index; $57-$5C = command.
|
||
;
|
||
; Returns:
|
||
; HUD command appended and destination advanced.
|
||
;
|
||
; PRG offsets: $0D0F-$0D25
|
||
; CPU range: $CD0F-$CD25
|
||
;===============================================================================
|
||
|
||
AdvanceHudCommandAddress:
|
||
tya ; CPU:$CD0D PRG:0D0D 98
|
||
pha ; CPU:$CD0E PRG:0D0E 48
|
||
lda #$57 ; CPU:$CD0F PRG:0D0F A9 57
|
||
ldy #$00 ; CPU:$CD11 PRG:0D11 A0 00
|
||
jsr $C131 ; CPU:$CD13 PRG:0D13 20 31 C1
|
||
pla ; CPU:$CD16 PRG:0D16 68
|
||
tay ; CPU:$CD17 PRG:0D17 A8
|
||
lda HudCommandAddressLo ; CPU:$CD18 PRG:0D18 A5 58
|
||
clc ; CPU:$CD1A PRG:0D1A 18
|
||
adc #$20 ; CPU:$CD1B PRG:0D1B 69 20
|
||
sta HudCommandAddressLo ; CPU:$CD1D PRG:0D1D 85 58
|
||
bcc AdvanceHudCommandAddress_Block ; CPU:$CD1F PRG:0D1F 90 02
|
||
inc HudCommandAddressHi ; CPU:$CD21 PRG:0D21 E6 57
|
||
AdvanceHudCommandAddress_Block:
|
||
rts ; CPU:$CD23 PRG:0D23 60
|
||
|
||
; Bonus-object HUD tile triplets
|
||
;
|
||
; Each four-byte table is indexed by BonusObjectPhase ($00-$03). The three
|
||
; tables in each group supply HudCommandTile0, HudCommandTile1, and
|
||
; HudCommandTile2 for one of the three vertically separated HUD commands.
|
||
;
|
||
; PRG offsets: $0D26-$0D49
|
||
; CPU range: $CD26-$CD49
|
||
;===============================================================================
|
||
|
||
BonusHudRow0Tile0Table:
|
||
.byte $A1, $24, $24, $24 ; CPU:$CD24 PRG:0D24 A1 24 24 24
|
||
BonusHudRow0Tile1Table:
|
||
.byte $A2, $9E, $AB, $24 ; CPU:$CD28 PRG:0D28 A2 9E AB 24
|
||
BonusHudRow0Tile2Table:
|
||
.byte $24, $24, $AC, $24 ; CPU:$CD2C PRG:0D2C 24 24 AC 24
|
||
|
||
BonusHudRow1Tile0Table:
|
||
.byte $A3, $24, $AD, $A8 ; CPU:$CD30 PRG:0D30 A3 24 AD A8
|
||
BonusHudRow1Tile1Table:
|
||
.byte $A4, $9F, $AE, $A9 ; CPU:$CD34 PRG:0D34 A4 9F AE A9
|
||
BonusHudRow1Tile2Table:
|
||
.byte $A5, $24, $AF, $AA ; CPU:$CD38 PRG:0D38 A5 24 AF AA
|
||
|
||
BonusHudRow2Tile0Table:
|
||
.byte $24, $24, $B0, $24 ; CPU:$CD3C PRG:0D3C 24 24 B0 24
|
||
BonusHudRow2Tile1Table:
|
||
.byte $A6, $A0, $B1, $24 ; CPU:$CD40 PRG:0D40 A6 A0 B1 24
|
||
BonusHudRow2Tile2Table:
|
||
.byte $A7, $24, $24, $24 ; CPU:$CD44 PRG:0D44 A7 24 24 24
|
||
|
||
;===============================================================================
|
||
; InitializeParticleSlots
|
||
;
|
||
; Global:
|
||
; Initializes the ten-slot particle/effect pool.
|
||
;
|
||
; Local:
|
||
; Marks each slot inactive and places its Y coordinate offscreen.
|
||
;
|
||
; Parameters:
|
||
; None.
|
||
;
|
||
; Returns:
|
||
; Particle slots 0-9 are inactive and hidden.
|
||
;
|
||
; PRG offsets: $0D4A-$0D59
|
||
; CPU range: $CD4A-$CD59
|
||
;===============================================================================
|
||
|
||
InitializeParticleSlots:
|
||
ldx #$09 ; CPU:$CD48 PRG:0D48 A2 09
|
||
InitializeParticleSlots_Block:
|
||
lda #$FF ; CPU:$CD4A PRG:0D4A A9 FF
|
||
sta ParticleState,x ; CPU:$CD4C PRG:0D4C 9D 5D 05
|
||
lda #$F0 ; CPU:$CD4F PRG:0D4F A9 F0
|
||
sta ParticlePosY,x ; CPU:$CD51 PRG:0D51 9D 7B 05
|
||
dex ; CPU:$CD54 PRG:0D54 CA
|
||
bpl InitializeParticleSlots_Block ; CPU:$CD55 PRG:0D55 10 F3
|
||
rts ; CPU:$CD57 PRG:0D57 60
|
||
;===============================================================================
|
||
; SpawnTimedParticle
|
||
;
|
||
; Global:
|
||
; Counts down the shared spawn timer and initializes one free particle slot when it expires.
|
||
;
|
||
; Local:
|
||
; Reloads the timer from pseudo-random state, finds a free slot, clears motion accumulators, assigns initial position and velocity, and decrements the remaining spawn count.
|
||
;
|
||
; Parameters:
|
||
; ParticleSpawnCountdown and remaining count at $05CB.
|
||
;
|
||
; Returns:
|
||
; One particle may be activated; spawn counters are updated.
|
||
;
|
||
; PRG offsets: $0D5A-$0DA9
|
||
; CPU range: $CD5A-$CDA9
|
||
;===============================================================================
|
||
|
||
SpawnTimedParticle:
|
||
dec ParticleSpawnCountdown ; CPU:$CD58 PRG:0D58 CE CC 05
|
||
beq SpawnTimedParticle_Block ; CPU:$CD5B PRG:0D5B F0 01
|
||
rts ; CPU:$CD5D PRG:0D5D 60
|
||
SpawnTimedParticle_Block:
|
||
lda RandomState ; CPU:$CD5E PRG:0D5E A5 1B
|
||
and #$3F ; CPU:$CD60 PRG:0D60 29 3F
|
||
adc #$28 ; CPU:$CD62 PRG:0D62 69 28
|
||
sta ParticleSpawnCountdown ; CPU:$CD64 PRG:0D64 8D CC 05
|
||
ldx #$09 ; CPU:$CD67 PRG:0D67 A2 09
|
||
SpawnTimedParticle_Block_1:
|
||
lda ParticleState,x ; CPU:$CD69 PRG:0D69 BD 5D 05
|
||
bmi SpawnTimedParticle_Block_2 ; CPU:$CD6C PRG:0D6C 30 04
|
||
dex ; CPU:$CD6E PRG:0D6E CA
|
||
bpl SpawnTimedParticle_Block_1 ; CPU:$CD6F PRG:0D6F 10 F8
|
||
rts ; CPU:$CD71 PRG:0D71 60
|
||
SpawnTimedParticle_Block_2:
|
||
lda #$00 ; CPU:$CD72 PRG:0D72 A9 00
|
||
sta ParticleState,x ; CPU:$CD74 PRG:0D74 9D 5D 05
|
||
sta ParticleVelocityXLo,x ; CPU:$CD77 PRG:0D77 9D 99 05
|
||
sta ParticleVelocityXHi,x ; CPU:$CD7A PRG:0D7A 9D 8F 05
|
||
lda #$80 ; CPU:$CD7D PRG:0D7D A9 80
|
||
sta ParticlePosXFrac,x ; CPU:$CD7F PRG:0D7F 9D 71 05
|
||
sta ParticlePosYFrac,x ; CPU:$CD82 PRG:0D82 9D 85 05
|
||
lda #$D0 ; CPU:$CD85 PRG:0D85 A9 D0
|
||
sta ParticlePosY,x ; CPU:$CD87 PRG:0D87 9D 7B 05
|
||
jsr GetRandomValue ; CPU:$CD8A PRG:0D8A 20 B3 F1
|
||
and #$03 ; CPU:$CD8D PRG:0D8D 29 03
|
||
tay ; CPU:$CD8F PRG:0D8F A8
|
||
lda ParticleInitialVelocityTable,y ; CPU:$CD90 PRG:0D90 B9 AE CE
|
||
sta ParticlePosX,x ; CPU:$CD93 PRG:0D93 9D 67 05
|
||
ldy #$00 ; CPU:$CD96 PRG:0D96 A0 00
|
||
lda RandomState ; CPU:$CD98 PRG:0D98 A5 1B
|
||
sta ParticleVelocityYLo,x ; CPU:$CD9A PRG:0D9A 9D B7 05
|
||
bpl SpawnTimedParticle_Block_3 ; CPU:$CD9D PRG:0D9D 10 01
|
||
dey ; CPU:$CD9F PRG:0D9F 88
|
||
SpawnTimedParticle_Block_3:
|
||
tya ; CPU:$CDA0 PRG:0DA0 98
|
||
sta ParticleVelocityYHi,x ; CPU:$CDA1 PRG:0DA1 9D C1 05
|
||
dec ParticleSpawnRemaining ; CPU:$CDA4 PRG:0DA4 CE CB 05
|
||
rts ; CPU:$CDA7 PRG:0DA7 60
|
||
;===============================================================================
|
||
; UpdateParticleSystem
|
||
;
|
||
; Global:
|
||
; Updates all ten particle slots for the current frame.
|
||
;
|
||
; Local:
|
||
; For each active slot, integrates signed X/Y motion, applies scrolling, retires particles outside the visible range, draws sprites, and tests player overlap.
|
||
;
|
||
; Parameters:
|
||
; Particle arrays, ParticleScrollDelta, and FrameCounter.
|
||
;
|
||
; Returns:
|
||
; Particle positions, states, OAM, and player interactions are updated.
|
||
;
|
||
; PRG offsets: $0DAA-$0E2E
|
||
; CPU range: $CDAA-$CE2E
|
||
;===============================================================================
|
||
|
||
UpdateParticleSystem:
|
||
ldx #$09 ; CPU:$CDA8 PRG:0DA8 A2 09
|
||
UpdateParticleSystem_Load:
|
||
lda ParticleState,x ; CPU:$CDAA PRG:0DAA BD 5D 05
|
||
bmi UpdateParticleSystem_Block_3 ; CPU:$CDAD PRG:0DAD 30 71
|
||
beq UpdateParticleSystem_Block ; CPU:$CDAF PRG:0DAF F0 49
|
||
lda ParticleVelocityXLo,x ; CPU:$CDB1 PRG:0DB1 BD 99 05
|
||
sta MotionDeltaLo ; CPU:$CDB4 PRG:0DB4 85 12
|
||
lda ParticleVelocityXHi,x ; CPU:$CDB6 PRG:0DB6 BD 8F 05
|
||
sta MotionDeltaHi ; CPU:$CDB9 PRG:0DB9 85 13
|
||
jsr UpdateSignedMotionAccumulator ; CPU:$CDBB PRG:0DBB 20 A6 F1
|
||
lda ParticleVelocityYLo,x ; CPU:$CDBE PRG:0DBE BD B7 05
|
||
clc ; CPU:$CDC1 PRG:0DC1 18
|
||
adc MotionDeltaLo ; CPU:$CDC2 PRG:0DC2 65 12
|
||
sta ParticleVelocityYLo,x ; CPU:$CDC4 PRG:0DC4 9D B7 05
|
||
sta MotionDeltaLo ; CPU:$CDC7 PRG:0DC7 85 12
|
||
lda ParticleVelocityYHi,x ; CPU:$CDC9 PRG:0DC9 BD C1 05
|
||
adc MotionDeltaHi ; CPU:$CDCC PRG:0DCC 65 13
|
||
sta ParticleVelocityYHi,x ; CPU:$CDCE PRG:0DCE 9D C1 05
|
||
sta MotionDeltaHi ; CPU:$CDD1 PRG:0DD1 85 13
|
||
jsr UpdateSignedMotionAccumulator ; CPU:$CDD3 PRG:0DD3 20 A6 F1
|
||
lda ParticleVelocityXLo,x ; CPU:$CDD6 PRG:0DD6 BD 99 05
|
||
sec ; CPU:$CDD9 PRG:0DD9 38
|
||
sbc MotionDeltaLo ; CPU:$CDDA PRG:0DDA E5 12
|
||
sta ParticleVelocityXLo,x ; CPU:$CDDC PRG:0DDC 9D 99 05
|
||
lda ParticleVelocityXHi,x ; CPU:$CDDF PRG:0DDF BD 8F 05
|
||
sbc MotionDeltaHi ; CPU:$CDE2 PRG:0DE2 E5 13
|
||
sta ParticleVelocityXHi,x ; CPU:$CDE4 PRG:0DE4 9D 8F 05
|
||
lda ParticlePosXFrac,x ; CPU:$CDE7 PRG:0DE7 BD 71 05
|
||
clc ; CPU:$CDEA PRG:0DEA 18
|
||
adc ParticleVelocityXLo,x ; CPU:$CDEB PRG:0DEB 7D 99 05
|
||
sta ParticlePosXFrac,x ; CPU:$CDEE PRG:0DEE 9D 71 05
|
||
lda ParticlePosX,x ; CPU:$CDF1 PRG:0DF1 BD 67 05
|
||
adc ParticleVelocityXHi,x ; CPU:$CDF4 PRG:0DF4 7D 8F 05
|
||
sta ParticlePosX,x ; CPU:$CDF7 PRG:0DF7 9D 67 05
|
||
UpdateParticleSystem_Block:
|
||
lda ParticlePosYFrac,x ; CPU:$CDFA PRG:0DFA BD 85 05
|
||
sec ; CPU:$CDFD PRG:0DFD 38
|
||
sbc ParticleScrollDelta ; CPU:$CDFE PRG:0DFE ED 5A 05
|
||
sta ParticlePosYFrac,x ; CPU:$CE01 PRG:0E01 9D 85 05
|
||
bcs UpdateParticleSystem_Block_1 ; CPU:$CE04 PRG:0E04 B0 03
|
||
dec ParticlePosY,x ; CPU:$CE06 PRG:0E06 DE 7B 05
|
||
UpdateParticleSystem_Block_1:
|
||
lda ParticlePosY,x ; CPU:$CE09 PRG:0E09 BD 7B 05
|
||
cmp #$F0 ; CPU:$CE0C PRG:0E0C C9 F0
|
||
beq UpdateParticleSystem_Block_2 ; CPU:$CE0E PRG:0E0E F0 0B
|
||
cmp #$A8 ; CPU:$CE10 PRG:0E10 C9 A8
|
||
bcs UpdateParticleSystem_Block_3 ; CPU:$CE12 PRG:0E12 B0 0C
|
||
lda #$01 ; CPU:$CE14 PRG:0E14 A9 01
|
||
sta ParticleState,x ; CPU:$CE16 PRG:0E16 9D 5D 05
|
||
bne UpdateParticleSystem_Block_3 ; CPU:$CE19 PRG:0E19 D0 05
|
||
UpdateParticleSystem_Block_2:
|
||
lda #$FF ; CPU:$CE1B PRG:0E1B A9 FF
|
||
sta ParticleState,x ; CPU:$CE1D PRG:0E1D 9D 5D 05
|
||
UpdateParticleSystem_Block_3:
|
||
jsr DrawParticleSprites ; CPU:$CE20 PRG:0E20 20 2F CE
|
||
jsr TestParticlePlayerOverlap ; CPU:$CE23 PRG:0E23 20 CE CE
|
||
dex ; CPU:$CE26 PRG:0E26 CA
|
||
bmi UpdateParticleSystem_Block_4 ; CPU:$CE27 PRG:0E27 30 03
|
||
jmp UpdateParticleSystem_Load ; CPU:$CE29 PRG:0E29 4C AC CD
|
||
UpdateParticleSystem_Block_4:
|
||
rts ; CPU:$CE2C PRG:0E2C 60
|
||
;===============================================================================
|
||
; DrawParticleSprites
|
||
;
|
||
; Global:
|
||
; Builds the three-sprite OAM representation for one particle slot.
|
||
;
|
||
; Local:
|
||
; Selects the attribute and animation frame from state/timing tables, writes three adjacent sprites, and hides inactive particles.
|
||
;
|
||
; Parameters:
|
||
; X = particle slot.
|
||
;
|
||
; Returns:
|
||
; OAM entries for the selected particle are written.
|
||
;
|
||
; PRG offsets: $0E2F-$0EAD
|
||
; CPU range: $CE2F-$CEAD
|
||
;===============================================================================
|
||
|
||
DrawParticleSprites:
|
||
ldy ParticleState,x ; CPU:$CE2D PRG:0E2D BC 5D 05
|
||
iny ; CPU:$CE30 PRG:0E30 C8
|
||
lda ParticleAttributeTable,y ; CPU:$CE31 PRG:0E31 B9 B2 CE
|
||
sta MotionDeltaHi ; CPU:$CE34 PRG:0E34 85 13
|
||
txa ; CPU:$CE36 PRG:0E36 8A
|
||
sta MotionDeltaLo ; CPU:$CE37 PRG:0E37 85 12
|
||
asl a ; CPU:$CE39 PRG:0E39 0A
|
||
adc MotionDeltaLo ; CPU:$CE3A PRG:0E3A 65 12
|
||
asl a ; CPU:$CE3C PRG:0E3C 0A
|
||
asl a ; CPU:$CE3D PRG:0E3D 0A
|
||
tay ; CPU:$CE3E PRG:0E3E A8
|
||
lda ParticlePosY,x ; CPU:$CE3F PRG:0E3F BD 7B 05
|
||
sta ParticleOamBase,y ; CPU:$CE42 PRG:0E42 99 50 02
|
||
sta $0254,y ; CPU:$CE45 PRG:0E45 99 54 02
|
||
clc ; CPU:$CE48 PRG:0E48 18
|
||
adc #$08 ; CPU:$CE49 PRG:0E49 69 08
|
||
sta $0258,y ; CPU:$CE4B PRG:0E4B 99 58 02
|
||
lda ParticlePosX,x ; CPU:$CE4E PRG:0E4E BD 67 05
|
||
sta $0253,y ; CPU:$CE51 PRG:0E51 99 53 02
|
||
clc ; CPU:$CE54 PRG:0E54 18
|
||
adc #$04 ; CPU:$CE55 PRG:0E55 69 04
|
||
sta $025B,y ; CPU:$CE57 PRG:0E57 99 5B 02
|
||
clc ; CPU:$CE5A PRG:0E5A 18
|
||
adc #$04 ; CPU:$CE5B PRG:0E5B 69 04
|
||
sta $0257,y ; CPU:$CE5D PRG:0E5D 99 57 02
|
||
lda MotionDeltaHi ; CPU:$CE60 PRG:0E60 A5 13
|
||
sta $0252,y ; CPU:$CE62 PRG:0E62 99 52 02
|
||
sta $0256,y ; CPU:$CE65 PRG:0E65 99 56 02
|
||
sta $025A,y ; CPU:$CE68 PRG:0E68 99 5A 02
|
||
lda ParticleState,x ; CPU:$CE6B PRG:0E6B BD 5D 05
|
||
bmi DrawParticleSprites_Block ; CPU:$CE6E PRG:0E6E 30 27
|
||
lda #$A8 ; CPU:$CE70 PRG:0E70 A9 A8
|
||
sta $0251,y ; CPU:$CE72 PRG:0E72 99 51 02
|
||
lda #$A9 ; CPU:$CE75 PRG:0E75 A9 A9
|
||
sta $0255,y ; CPU:$CE77 PRG:0E77 99 55 02
|
||
lda FrameCounter ; CPU:$CE7A PRG:0E7A A5 19
|
||
lsr a ; CPU:$CE7C PRG:0E7C 4A
|
||
lsr a ; CPU:$CE7D PRG:0E7D 4A
|
||
lsr a ; CPU:$CE7E PRG:0E7E 4A
|
||
lsr a ; CPU:$CE7F PRG:0E7F 4A
|
||
and #$07 ; CPU:$CE80 PRG:0E80 29 07
|
||
stx MotionDeltaHi ; CPU:$CE82 PRG:0E82 86 13
|
||
tax ; CPU:$CE84 PRG:0E84 AA
|
||
lda ParticleAnimationTileTable,x ; CPU:$CE85 PRG:0E85 BD B5 CE
|
||
sta $0259,y ; CPU:$CE88 PRG:0E88 99 59 02
|
||
lda $025A,y ; CPU:$CE8B PRG:0E8B B9 5A 02
|
||
eor ParticleAnimationAttributeMaskTable,x ; CPU:$CE8E PRG:0E8E 5D BD CE
|
||
sta $025A,y ; CPU:$CE91 PRG:0E91 99 5A 02
|
||
ldx MotionDeltaHi ; CPU:$CE94 PRG:0E94 A6 13
|
||
rts ; CPU:$CE96 PRG:0E96 60
|
||
DrawParticleSprites_Block:
|
||
lda #$F0 ; CPU:$CE97 PRG:0E97 A9 F0
|
||
sta ParticlePosY,x ; CPU:$CE99 PRG:0E99 9D 7B 05
|
||
lda #$AC ; CPU:$CE9C PRG:0E9C A9 AC
|
||
sta $0251,y ; CPU:$CE9E PRG:0E9E 99 51 02
|
||
lda #$AD ; CPU:$CEA1 PRG:0EA1 A9 AD
|
||
sta $0255,y ; CPU:$CEA3 PRG:0EA3 99 55 02
|
||
lda #$FC ; CPU:$CEA6 PRG:0EA6 A9 FC
|
||
sta $0259,y ; CPU:$CEA8 PRG:0EA8 99 59 02
|
||
rts ; CPU:$CEAB PRG:0EAB 60
|
||
|
||
; Particle rendering tables
|
||
;===============================================================================
|
||
ParticleInitialVelocityTable:
|
||
.byte $20, $50, $A0, $D0 ; CPU:$CEAC PRG:0EAC 20 50 A0 D0
|
||
ParticleAttributeTable:
|
||
.byte $02, $22, $02 ; CPU:$CEB0 PRG:0EB0 02 22 02
|
||
ParticleAnimationTileTable:
|
||
.byte $AA, $AB, $AB, $AA, $AA, $AB, $AB, $AA ; CPU:$CEB3 PRG:0EB3 AA AB AB AA AA AB AB AA
|
||
ParticleAnimationAttributeMaskTable:
|
||
.byte $00, $00, $40, $40, $40, $40, $00, $00 ; CPU:$CEBB PRG:0EBB 00 00 40 40 40 40 00 00
|
||
.byte $FC, $FC, $DF, $FC, $FC, $E0, $E2, $E1 ; CPU:$CEC3 PRG:0EC3 FC FC DF FC FC E0 E2 E1
|
||
.byte $FC ; CPU:$CECB PRG:0ECB FC
|
||
|
||
;===============================================================================
|
||
; TestParticlePlayerOverlap
|
||
;
|
||
; Global:
|
||
; Tests an active particle against both players and records a hit.
|
||
;
|
||
; Local:
|
||
; Rejects inactive players and particles, checks X/Y distances, retires the particle, increments the player hit counter, and requests a sound.
|
||
;
|
||
; Parameters:
|
||
; X = particle slot.
|
||
;
|
||
; Returns:
|
||
; Particle and player hit state may be updated.
|
||
;
|
||
; PRG offsets: $0ECE-$0F12
|
||
; CPU range: $CECE-$CF12
|
||
;===============================================================================
|
||
|
||
TestParticlePlayerOverlap:
|
||
ldy #$01 ; CPU:$CECC PRG:0ECC A0 01
|
||
TestParticlePlayerOverlap_Block:
|
||
lda $0088,y ; CPU:$CECE PRG:0ECE B9 88 00
|
||
bmi TestParticlePlayerOverlap_Block_1 ; CPU:$CED1 PRG:0ED1 30 3A
|
||
beq TestParticlePlayerOverlap_Block_1 ; CPU:$CED3 PRG:0ED3 F0 38
|
||
lda ParticleState,x ; CPU:$CED5 PRG:0ED5 BD 5D 05
|
||
bmi TestParticlePlayerOverlap_Block_2 ; CPU:$CED8 PRG:0ED8 30 36
|
||
lda $009A,y ; CPU:$CEDA PRG:0EDA B9 9A 00
|
||
cmp #$C0 ; CPU:$CEDD PRG:0EDD C9 C0
|
||
bcs TestParticlePlayerOverlap_Block_1 ; CPU:$CEDF PRG:0EDF B0 2C
|
||
sec ; CPU:$CEE1 PRG:0EE1 38
|
||
sbc ParticlePosY,x ; CPU:$CEE2 PRG:0EE2 FD 7B 05
|
||
jsr AbsoluteDifference ; CPU:$CEE5 PRG:0EE5 20 8E F0
|
||
cmp #$18 ; CPU:$CEE8 PRG:0EE8 C9 18
|
||
bcs TestParticlePlayerOverlap_Block_1 ; CPU:$CEEA PRG:0EEA B0 21
|
||
lda $0091,y ; CPU:$CEEC PRG:0EEC B9 91 00
|
||
sec ; CPU:$CEEF PRG:0EEF 38
|
||
sbc ParticlePosX,x ; CPU:$CEF0 PRG:0EF0 FD 67 05
|
||
jsr AbsoluteDifference ; CPU:$CEF3 PRG:0EF3 20 8E F0
|
||
cmp #$10 ; CPU:$CEF6 PRG:0EF6 C9 10
|
||
bcs TestParticlePlayerOverlap_Block_1 ; CPU:$CEF8 PRG:0EF8 B0 13
|
||
lda #$FF ; CPU:$CEFA PRG:0EFA A9 FF
|
||
sta ParticleState,x ; CPU:$CEFC PRG:0EFC 9D 5D 05
|
||
lda PlayerParticleHitCount,y ; CPU:$CEFF PRG:0EFF B9 CD 05
|
||
clc ; CPU:$CF02 PRG:0F02 18
|
||
adc #$01 ; CPU:$CF03 PRG:0F03 69 01
|
||
sta PlayerParticleHitCount,y ; CPU:$CF05 PRG:0F05 99 CD 05
|
||
lda #$02 ; CPU:$CF08 PRG:0F08 A9 02
|
||
sta SoundRequestFlags0 ; CPU:$CF0A PRG:0F0A 85 F0
|
||
rts ; CPU:$CF0C PRG:0F0C 60
|
||
TestParticlePlayerOverlap_Block_1:
|
||
dey ; CPU:$CF0D PRG:0F0D 88
|
||
bpl TestParticlePlayerOverlap_Block ; CPU:$CF0E PRG:0F0E 10 BE
|
||
TestParticlePlayerOverlap_Block_2:
|
||
rts ; CPU:$CF10 PRG:0F10 60
|
||
;===============================================================================
|
||
; RunParticleBonusSequence
|
||
;
|
||
; Global:
|
||
; Runs the complete particle bonus/transition sequence.
|
||
;
|
||
; Local:
|
||
; Initializes systems, spawns and updates particles until exhausted, presents result screens, positions players, and advances several timed PPU/audio phases.
|
||
;
|
||
; Parameters:
|
||
; Global game and player state.
|
||
;
|
||
; Returns:
|
||
; Sequence completes and returns to the main state flow.
|
||
;
|
||
; PRG offsets: $0F13-$10E1
|
||
; CPU range: $CF13-$D0E1
|
||
;===============================================================================
|
||
|
||
RunParticleBonusSequence:
|
||
lda #$20 ; CPU:$CF11 PRG:0F11 A9 20
|
||
sta SoundRequestFlags2 ; CPU:$CF13 PRG:0F13 85 F2
|
||
jsr LoadParticleSequenceData ; CPU:$CF15 PRG:0F15 20 E2 D0
|
||
jsr InitializeParticleSlots ; CPU:$CF18 PRG:0F18 20 4A CD
|
||
ldx PlayerCountMinusOne ; CPU:$CF1B PRG:0F1B A6 40
|
||
RunParticleBonusSequence_Block:
|
||
lda PlayerActiveFlags,x ; CPU:$CF1D PRG:0F1D B5 41
|
||
bmi RunParticleBonusSequence_Block_1 ; CPU:$CF1F PRG:0F1F 30 03
|
||
jsr $F3B0 ; CPU:$CF21 PRG:0F21 20 B0 F3
|
||
RunParticleBonusSequence_Block_1:
|
||
dex ; CPU:$CF24 PRG:0F24 CA
|
||
bpl RunParticleBonusSequence_Block ; CPU:$CF25 PRG:0F25 10 F6
|
||
ldx #$00 ; CPU:$CF27 PRG:0F27 A2 00
|
||
stx PlayerCollisionDisable ; CPU:$CF29 PRG:0F29 86 BD
|
||
stx SequenceState ; CPU:$CF2B PRG:0F2B 86 BE
|
||
lda #$14 ; CPU:$CF2D PRG:0F2D A9 14
|
||
sta $05CB ; CPU:$CF2F PRG:0F2F 8D CB 05
|
||
RunParticleBonusSequence_Block_2:
|
||
jsr $F470 ; CPU:$CF32 PRG:0F32 20 70 F4
|
||
inc $4C ; CPU:$CF35 PRG:0F35 E6 4C
|
||
jsr $D8DD ; CPU:$CF37 PRG:0F37 20 DD D8
|
||
jsr $E691 ; CPU:$CF3A PRG:0F3A 20 91 E6
|
||
lda $05CB ; CPU:$CF3D PRG:0F3D AD CB 05
|
||
beq RunParticleBonusSequence_Block_3 ; CPU:$CF40 PRG:0F40 F0 03
|
||
jsr SpawnTimedParticle ; CPU:$CF42 PRG:0F42 20 5A CD
|
||
RunParticleBonusSequence_Block_3:
|
||
jsr UpdateParticleSystem ; CPU:$CF45 PRG:0F45 20 AA CD
|
||
lda $05CB ; CPU:$CF48 PRG:0F48 AD CB 05
|
||
bne RunParticleBonusSequence_Block_2 ; CPU:$CF4B PRG:0F4B D0 E5
|
||
ldx #$09 ; CPU:$CF4D PRG:0F4D A2 09
|
||
RunParticleBonusSequence_Block_4:
|
||
lda ParticleState,x ; CPU:$CF4F PRG:0F4F BD 5D 05
|
||
bpl RunParticleBonusSequence_Block_2 ; CPU:$CF52 PRG:0F52 10 DE
|
||
dex ; CPU:$CF54 PRG:0F54 CA
|
||
bpl RunParticleBonusSequence_Block_4 ; CPU:$CF55 PRG:0F55 10 F8
|
||
lda FrameCounter ; CPU:$CF57 PRG:0F57 A5 19
|
||
bne RunParticleBonusSequence_Block_2 ; CPU:$CF59 PRG:0F59 D0 D7
|
||
jsr $D246 ; CPU:$CF5B PRG:0F5B 20 46 D2
|
||
ldx #$02 ; CPU:$CF5E PRG:0F5E A2 02
|
||
stx SequenceStep ; CPU:$CF60 PRG:0F60 86 46
|
||
jsr $F45E ; CPU:$CF62 PRG:0F62 20 5E F4
|
||
lda #$2B ; CPU:$CF65 PRG:0F65 A9 2B
|
||
ldy #$D1 ; CPU:$CF67 PRG:0F67 A0 D1
|
||
jsr $C131 ; CPU:$CF69 PRG:0F69 20 31 C1
|
||
lda #$5A ; CPU:$CF6C PRG:0F6C A9 5A
|
||
ldy #$D1 ; CPU:$CF6E PRG:0F6E A0 D1
|
||
jsr $C131 ; CPU:$CF70 PRG:0F70 20 31 C1
|
||
lda #$65 ; CPU:$CF73 PRG:0F73 A9 65
|
||
ldy #$D1 ; CPU:$CF75 PRG:0F75 A0 D1
|
||
jsr $C131 ; CPU:$CF77 PRG:0F77 20 31 C1
|
||
ldx PlayerCountMinusOne ; CPU:$CF7A PRG:0F7A A6 40
|
||
RunParticleBonusSequence_Block_5:
|
||
lda #$20 ; CPU:$CF7C PRG:0F7C A9 20
|
||
sta PlayerPosX,x ; CPU:$CF7E PRG:0F7E 95 91
|
||
lda $D19E,x ; CPU:$CF80 PRG:0F80 BD 9E D1
|
||
sta PlayerPosY,x ; CPU:$CF83 PRG:0F83 95 9A
|
||
lda #$03 ; CPU:$CF85 PRG:0F85 A9 03
|
||
sta $7F,x ; CPU:$CF87 PRG:0F87 95 7F
|
||
lda #$01 ; CPU:$CF89 PRG:0F89 A9 01
|
||
sta $0448,x ; CPU:$CF8B PRG:0F8B 9D 48 04
|
||
jsr $F3B0 ; CPU:$CF8E PRG:0F8E 20 B0 F3
|
||
jsr $E3A4 ; CPU:$CF91 PRG:0F91 20 A4 E3
|
||
dex ; CPU:$CF94 PRG:0F94 CA
|
||
bpl RunParticleBonusSequence_Block_5 ; CPU:$CF95 PRG:0F95 10 E5
|
||
lda #$44 ; CPU:$CF97 PRG:0F97 A9 44
|
||
sta ParticlePosX ; CPU:$CF99 PRG:0F99 8D 67 05
|
||
sta $0568 ; CPU:$CF9C PRG:0F9C 8D 68 05
|
||
lda #$54 ; CPU:$CF9F PRG:0F9F A9 54
|
||
sta ParticlePosY ; CPU:$CFA1 PRG:0FA1 8D 7B 05
|
||
lda #$74 ; CPU:$CFA4 PRG:0FA4 A9 74
|
||
sta $057C ; CPU:$CFA6 PRG:0FA6 8D 7C 05
|
||
lda #$01 ; CPU:$CFA9 PRG:0FA9 A9 01
|
||
sta ParticleState ; CPU:$CFAB PRG:0FAB 8D 5D 05
|
||
sta $055E ; CPU:$CFAE PRG:0FAE 8D 5E 05
|
||
ldx PlayerCountMinusOne ; CPU:$CFB1 PRG:0FB1 A6 40
|
||
RunParticleBonusSequence_Block_6:
|
||
jsr DrawParticleSprites ; CPU:$CFB3 PRG:0FB3 20 2F CE
|
||
dex ; CPU:$CFB6 PRG:0FB6 CA
|
||
bpl RunParticleBonusSequence_Block_6 ; CPU:$CFB7 PRG:0FB7 10 FA
|
||
jsr $F45C ; CPU:$CFB9 PRG:0FB9 20 5C F4
|
||
lda #$2B ; CPU:$CFBC PRG:0FBC A9 2B
|
||
sta PpuCommandData0 ; CPU:$CFBE PRG:0FBE 85 57
|
||
lda #$24 ; CPU:$CFC0 PRG:0FC0 A9 24
|
||
sta PpuCommandData1 ; CPU:$CFC2 PRG:0FC2 85 58
|
||
sta PpuCommandData2 ; CPU:$CFC4 PRG:0FC4 85 59
|
||
lda #$0C ; CPU:$CFC6 PRG:0FC6 A9 0C
|
||
sta PpuCommandAddressHi ; CPU:$CFC8 PRG:0FC8 85 54
|
||
lda #$0B ; CPU:$CFCA PRG:0FCA A9 0B
|
||
sta PpuCommandAddressLo ; CPU:$CFCC PRG:0FCC 85 55
|
||
lda #$05 ; CPU:$CFCE PRG:0FCE A9 05
|
||
sta PpuCommandLength ; CPU:$CFD0 PRG:0FD0 85 56
|
||
lda PlayerParticleHitCount ; CPU:$CFD2 PRG:0FD2 AD CD 05
|
||
jsr $D1C9 ; CPU:$CFD5 PRG:0FD5 20 C9 D1
|
||
lda PlayerCountMinusOne ; CPU:$CFD8 PRG:0FD8 A5 40
|
||
beq RunParticleBonusSequence_Block_7 ; CPU:$CFDA PRG:0FDA F0 0A
|
||
lda #$0F ; CPU:$CFDC PRG:0FDC A9 0F
|
||
sta PpuCommandAddressLo ; CPU:$CFDE PRG:0FDE 85 55
|
||
lda PlayerParticleHitCount2 ; CPU:$CFE0 PRG:0FE0 AD CE 05
|
||
jsr $D1C9 ; CPU:$CFE3 PRG:0FE3 20 C9 D1
|
||
RunParticleBonusSequence_Block_7:
|
||
jsr $F45C ; CPU:$CFE6 PRG:0FE6 20 5C F4
|
||
lda ParticleSequenceValue ; CPU:$CFE9 PRG:0FE9 AD 59 05
|
||
sta PpuCommandData0 ; CPU:$CFEC PRG:0FEC 85 57
|
||
lda #$00 ; CPU:$CFEE PRG:0FEE A9 00
|
||
sta PpuCommandData1 ; CPU:$CFF0 PRG:0FF0 85 58
|
||
sta PpuCommandData2 ; CPU:$CFF2 PRG:0FF2 85 59
|
||
lda #$08 ; CPU:$CFF4 PRG:0FF4 A9 08
|
||
sta PpuCommandAddressHi ; CPU:$CFF6 PRG:0FF6 85 54
|
||
lda #$0B ; CPU:$CFF8 PRG:0FF8 A9 0B
|
||
sta PpuCommandAddressLo ; CPU:$CFFA PRG:0FFA 85 55
|
||
lda #$03 ; CPU:$CFFC PRG:0FFC A9 03
|
||
sta PpuCommandLength ; CPU:$CFFE PRG:0FFE 85 56
|
||
lda ParticleSequenceValue ; CPU:$D000 PRG:1000 AD 59 05
|
||
jsr $C119 ; CPU:$D003 PRG:1003 20 19 C1
|
||
lda PlayerCountMinusOne ; CPU:$D006 PRG:1006 A5 40
|
||
beq RunParticleBonusSequence_Block_8 ; CPU:$D008 PRG:1008 F0 07
|
||
lda #$0F ; CPU:$D00A PRG:100A A9 0F
|
||
sta PpuCommandAddressLo ; CPU:$D00C PRG:100C 85 55
|
||
jsr $C119 ; CPU:$D00E PRG:100E 20 19 C1
|
||
RunParticleBonusSequence_Block_8:
|
||
lda #$FF ; CPU:$D011 PRG:1011 A9 FF
|
||
sta ParticleState ; CPU:$D013 PRG:1013 8D 5D 05
|
||
sta $055E ; CPU:$D016 PRG:1016 8D 5E 05
|
||
ldx PlayerCountMinusOne ; CPU:$D019 PRG:1019 A6 40
|
||
RunParticleBonusSequence_Block_9:
|
||
jsr DrawParticleSprites ; CPU:$D01B PRG:101B 20 2F CE
|
||
dex ; CPU:$D01E PRG:101E CA
|
||
bpl RunParticleBonusSequence_Block_9 ; CPU:$D01F PRG:101F 10 FA
|
||
lda #$02 ; CPU:$D021 PRG:1021 A9 02
|
||
sta SoundRequestFlags0 ; CPU:$D023 PRG:1023 85 F0
|
||
ldx #$02 ; CPU:$D025 PRG:1025 A2 02
|
||
jsr $F45E ; CPU:$D027 PRG:1027 20 5E F4
|
||
ldx PlayerCountMinusOne ; CPU:$D02A PRG:102A A6 40
|
||
RunParticleBonusSequence_Block_10:
|
||
jsr DrawParticleSprites ; CPU:$D02C PRG:102C 20 2F CE
|
||
dex ; CPU:$D02F PRG:102F CA
|
||
bpl RunParticleBonusSequence_Block_10 ; CPU:$D030 PRG:1030 10 FA
|
||
jsr $D1A0 ; CPU:$D032 PRG:1032 20 A0 D1
|
||
jsr $F45C ; CPU:$D035 PRG:1035 20 5C F4
|
||
lda #$01 ; CPU:$D038 PRG:1038 A9 01
|
||
sta SoundRequestFlags0 ; CPU:$D03A PRG:103A 85 F0
|
||
jsr $D121 ; CPU:$D03C PRG:103C 20 21 D1
|
||
bne RunParticleBonusSequence_Block_12 ; CPU:$D03F PRG:103F D0 25
|
||
lda #$70 ; CPU:$D041 PRG:1041 A9 70
|
||
ldy #$D1 ; CPU:$D043 PRG:1043 A0 D1
|
||
jsr $C131 ; CPU:$D045 PRG:1045 20 31 C1
|
||
jsr $F465 ; CPU:$D048 PRG:1048 20 65 F4
|
||
ldx #$1A ; CPU:$D04B PRG:104B A2 1A
|
||
RunParticleBonusSequence_Block_11:
|
||
lda $D184,x ; CPU:$D04D PRG:104D BD 84 D1
|
||
sta PpuCommandData0,x ; CPU:$D050 PRG:1050 95 57
|
||
dex ; CPU:$D052 PRG:1052 CA
|
||
bpl RunParticleBonusSequence_Block_11 ; CPU:$D053 PRG:1053 10 F8
|
||
lda SequenceDataLo ; CPU:$D055 PRG:1055 AD 5B 05
|
||
sta SequencePointerLo ; CPU:$D058 PRG:1058 85 68
|
||
lda SequenceDataHi ; CPU:$D05A PRG:105A AD 5C 05
|
||
sta SequencePointerHi ; CPU:$D05D PRG:105D 85 69
|
||
jsr $C12D ; CPU:$D05F PRG:105F 20 2D C1
|
||
lda #$10 ; CPU:$D062 PRG:1062 A9 10
|
||
sta SoundRequestFlags2 ; CPU:$D064 PRG:1064 85 F2
|
||
RunParticleBonusSequence_Block_12:
|
||
ldx #$78 ; CPU:$D066 PRG:1066 A2 78
|
||
jsr $F45E ; CPU:$D068 PRG:1068 20 5E F4
|
||
jsr $D1A0 ; CPU:$D06B PRG:106B 20 A0 D1
|
||
RunParticleBonusSequence_Block_13:
|
||
lda #$00 ; CPU:$D06E PRG:106E A9 00
|
||
sta SequencePlayerIndex ; CPU:$D070 PRG:1070 85 3E
|
||
ldx #$04 ; CPU:$D072 PRG:1072 A2 04
|
||
jsr $D213 ; CPU:$D074 PRG:1074 20 13 D2
|
||
jsr $C12D ; CPU:$D077 PRG:1077 20 2D C1
|
||
lda PlayerCountMinusOne ; CPU:$D07A PRG:107A A5 40
|
||
beq RunParticleBonusSequence_Block_14 ; CPU:$D07C PRG:107C F0 0E
|
||
inc SequencePlayerIndex ; CPU:$D07E PRG:107E E6 3E
|
||
ldx #$12 ; CPU:$D080 PRG:1080 A2 12
|
||
jsr $D213 ; CPU:$D082 PRG:1082 20 13 D2
|
||
lda #$65 ; CPU:$D085 PRG:1085 A9 65
|
||
ldy #$00 ; CPU:$D087 PRG:1087 A0 00
|
||
jsr $C131 ; CPU:$D089 PRG:1089 20 31 C1
|
||
RunParticleBonusSequence_Block_14:
|
||
lda #$01 ; CPU:$D08C PRG:108C A9 01
|
||
sta SoundRequestFlags1 ; CPU:$D08E PRG:108E 85 F1
|
||
ldx #$02 ; CPU:$D090 PRG:1090 A2 02
|
||
jsr $F45E ; CPU:$D092 PRG:1092 20 5E F4
|
||
lda PpuBufferHead ; CPU:$D095 PRG:1095 A5 5D
|
||
cmp #$24 ; CPU:$D097 PRG:1097 C9 24
|
||
bne RunParticleBonusSequence_Block_13 ; CPU:$D099 PRG:1099 D0 D3
|
||
lda PlayerCountMinusOne ; CPU:$D09B PRG:109B A5 40
|
||
beq RunParticleBonusSequence_Block_15 ; CPU:$D09D PRG:109D F0 07
|
||
lda a:$006B ; CPU:$D09F PRG:109F AD 6B 00
|
||
cmp #$24 ; CPU:$D0A2 PRG:10A2 C9 24
|
||
bne RunParticleBonusSequence_Block_13 ; CPU:$D0A4 PRG:10A4 D0 C8
|
||
RunParticleBonusSequence_Block_15:
|
||
ldx #$0A ; CPU:$D0A6 PRG:10A6 A2 0A
|
||
jsr $F45E ; CPU:$D0A8 PRG:10A8 20 5E F4
|
||
jsr $D121 ; CPU:$D0AB PRG:10AB 20 21 D1
|
||
bne RunParticleBonusSequence_Block_17 ; CPU:$D0AE PRG:10AE D0 1C
|
||
lda SequenceDataLo ; CPU:$D0B0 PRG:10B0 AD 5B 05
|
||
sta SequenceValueLo ; CPU:$D0B3 PRG:10B3 85 47
|
||
lda SequenceDataHi ; CPU:$D0B5 PRG:10B5 AD 5C 05
|
||
sta SequenceValueHi ; CPU:$D0B8 PRG:10B8 85 48
|
||
lda PlayerCountMinusOne ; CPU:$D0BA PRG:10BA A5 40
|
||
sta SequencePlayerIndex ; CPU:$D0BC PRG:10BC 85 3E
|
||
RunParticleBonusSequence_Block_16:
|
||
jsr $D6DC ; CPU:$D0BE PRG:10BE 20 DC D6
|
||
dec SequencePlayerIndex ; CPU:$D0C1 PRG:10C1 C6 3E
|
||
bpl RunParticleBonusSequence_Block_16 ; CPU:$D0C3 PRG:10C3 10 F9
|
||
lda #$01 ; CPU:$D0C5 PRG:10C5 A9 01
|
||
sta SoundRequestFlags1 ; CPU:$D0C7 PRG:10C7 85 F1
|
||
jsr $F45C ; CPU:$D0C9 PRG:10C9 20 5C F4
|
||
RunParticleBonusSequence_Block_17:
|
||
lda #$00 ; CPU:$D0CC PRG:10CC A9 00
|
||
sta SequenceValueLo ; CPU:$D0CE PRG:10CE 85 47
|
||
sta SequenceValueHi ; CPU:$D0D0 PRG:10D0 85 48
|
||
ldx #$01 ; CPU:$D0D2 PRG:10D2 A2 01
|
||
RunParticleBonusSequence_Block_18:
|
||
lda PlayerActiveFlags,x ; CPU:$D0D4 PRG:10D4 B5 41
|
||
bpl RunParticleBonusSequence_Block_19 ; CPU:$D0D6 PRG:10D6 10 02
|
||
sta PlayerSlotState,x ; CPU:$D0D8 PRG:10D8 95 88
|
||
RunParticleBonusSequence_Block_19:
|
||
dex ; CPU:$D0DA PRG:10DA CA
|
||
bpl RunParticleBonusSequence_Block_18 ; CPU:$D0DB PRG:10DB 10 F7
|
||
jmp $F353 ; CPU:$D0DD PRG:10DD 4C 53 F3
|
||
;===============================================================================
|
||
; LoadParticleSequenceData
|
||
;
|
||
; Global:
|
||
; Loads the next particle-sequence data set and clears player hit totals.
|
||
;
|
||
; Local:
|
||
; Indexes four parameter tables, advances the index while in range, and clears both result counters.
|
||
;
|
||
; Parameters:
|
||
; ParticleSequenceIndex.
|
||
;
|
||
; Returns:
|
||
; Sequence parameters loaded and result counters cleared.
|
||
;
|
||
; PRG offsets: $10E2-$110C
|
||
; CPU range: $D0E2-$D10C
|
||
;===============================================================================
|
||
|
||
LoadParticleSequenceData:
|
||
ldx ParticleSequenceIndex ; CPU:$D0E0 PRG:10E0 AE 58 05
|
||
lda ParticleSequenceIndexTable,x ; CPU:$D0E3 PRG:10E3 BD 0D D1
|
||
sta ParticleSequenceValue ; CPU:$D0E6 PRG:10E6 8D 59 05
|
||
lda ParticleSequenceValueTableA,x ; CPU:$D0E9 PRG:10E9 BD 12 D1
|
||
sta $055A ; CPU:$D0EC PRG:10EC 8D 5A 05
|
||
lda ParticleSequenceValueTableB,x ; CPU:$D0EF PRG:10EF BD 17 D1
|
||
sta SequenceDataLo ; CPU:$D0F2 PRG:10F2 8D 5B 05
|
||
lda ParticleSequenceValueTableC,x ; CPU:$D0F5 PRG:10F5 BD 1C D1
|
||
sta SequenceDataHi ; CPU:$D0F8 PRG:10F8 8D 5C 05
|
||
cpx #$04 ; CPU:$D0FB PRG:10FB E0 04
|
||
bcs LoadParticleSequenceData_Block ; CPU:$D0FD PRG:10FD B0 03
|
||
inc ParticleSequenceIndex ; CPU:$D0FF PRG:10FF EE 58 05
|
||
LoadParticleSequenceData_Block:
|
||
lda #$00 ; CPU:$D102 PRG:1102 A9 00
|
||
sta PlayerParticleHitCount ; CPU:$D104 PRG:1104 8D CD 05
|
||
sta PlayerParticleHitCount2 ; CPU:$D107 PRG:1107 8D CE 05
|
||
rts ; CPU:$D10A PRG:110A 60
|
||
|
||
; Sequence parameter tables
|
||
ParticleSequenceIndexTable:
|
||
.byte $03, $05, $07, $07, $07 ; CPU:$D10B PRG:110B 03 05 07 07 07
|
||
ParticleSequenceValueTableA:
|
||
.byte $80, $90, $98, $A0, $A8 ; CPU:$D110 PRG:1110 80 90 98 A0 A8
|
||
ParticleSequenceValueTableB:
|
||
.byte $01, $01, $02, $02, $03 ; CPU:$D115 PRG:1115 01 01 02 02 03
|
||
ParticleSequenceValueTableC:
|
||
.byte $00, $05, $00, $05, $00 ; CPU:$D11A PRG:111A 00 05 00 05 00
|
||
|
||
; Sum player particle-hit totals
|
||
SumParticleHitCounts:
|
||
lda $05CD ; CPU:$D11F PRG:111F AD CD 05
|
||
clc ; CPU:$D122 PRG:1122 18
|
||
adc $05CE ; CPU:$D123 PRG:1123 6D CE 05
|
||
cmp #$14 ; CPU:$D126 PRG:1126 C9 14
|
||
rts ; CPU:$D128 PRG:1128 60
|
||
|
||
; Embedded PPU templates, strings, and position tables ($D12B-$D19F)
|
||
ParticleResultsData:
|
||
.byte $3F, $00, $10, $0F, $30, $30, $30, $0F ; CPU:$D129 PRG:1129 3F 00 10 0F 30 30 30 0F
|
||
.byte $30, $27, $15, $0F, $30, $02, $21, $0F ; CPU:$D131 PRG:1131 30 27 15 0F 30 02 21 0F
|
||
.byte $16, $16, $16 ; CPU:$D139 PRG:1139 16 16 16
|
||
ParticleResultsPpuTemplate:
|
||
.byte $21, $73, $0B, $29, $00 ; CPU:$D13C PRG:113C 21 73 0B 29 00
|
||
.byte $00, $00, $00, $00, $24, $19, $1D, $1C ; CPU:$D141 PRG:1141 00 00 00 00 24 19 1D 1C
|
||
.byte $26, $21, $F3, $0B, $29, $00, $00, $00 ; CPU:$D149 PRG:1149 26 21 F3 0B 29 00 00 00
|
||
.byte $00, $00, $24, $19, $1D, $1C, $26, $23 ; CPU:$D151 PRG:1151 00 00 24 19 1D 1C 26 23
|
||
.byte $E8, $08, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$D159 PRG:1159 E8 08 FF FF FF FF FF FF
|
||
.byte $FF, $FF, $23, $C0, $08, $40, $50, $50 ; CPU:$D161 PRG:1161 FF FF 23 C0 08 40 50 50
|
||
.byte $50, $50, $90, $A0, $A0, $22, $88, $11 ; CPU:$D169 PRG:1169 50 50 90 A0 A0 22 88 11
|
||
.byte $19, $24, $0E, $24, $1B, $24, $0F, $24 ; CPU:$D171 PRG:1171 19 24 0E 24 1B 24 0F 24
|
||
.byte $0E, $24, $0C, $24, $1D, $24, $2C, $2C ; CPU:$D179 PRG:1179 0E 24 0C 24 1D 24 2C 2C
|
||
.byte $2C ; CPU:$D181 PRG:1181 2C
|
||
PlayerStartYTable:
|
||
.byte $22, $C6, $17, $1C, $1E, $19, $0E ; CPU:$D182 PRG:1182 22 C6 17 1C 1E 19 0E
|
||
.byte $1B, $24, $0B, $18, $17, $1E, $1C, $24 ; CPU:$D189 PRG:1189 1B 24 0B 18 17 1E 1C 24
|
||
.byte $24, $24, $01, $00, $00, $00, $00, $19 ; CPU:$D191 PRG:1191 24 24 01 00 00 00 00 19
|
||
.byte $1D, $1C, $2C ; CPU:$D199 PRG:1199 1D 1C 2C
|
||
PlayerStartXTable:
|
||
.byte $50, $70 ; CPU:$D19C PRG:119C 50 70
|
||
DrawParticleBonusResults:
|
||
ldx #$1C ; CPU:$D19E PRG:119E A2 1C
|
||
DrawParticleBonusResults_Block:
|
||
lda ParticleResultsPpuTemplate,x ; CPU:$D1A0 PRG:11A0 BD 3E D1
|
||
sta $57,x ; CPU:$D1A3 PRG:11A3 95 57
|
||
dex ; CPU:$D1A5 PRG:11A5 CA
|
||
bpl DrawParticleBonusResults_Block ; CPU:$D1A6 PRG:11A6 10 F8
|
||
ldx #$04 ; CPU:$D1A8 PRG:11A8 A2 04
|
||
ldy $05CD ; CPU:$D1AA PRG:11AA AC CD 05
|
||
jsr AddParticleResultDigits ; CPU:$D1AD PRG:11AD 20 DC D1
|
||
ldx #$12 ; CPU:$D1B0 PRG:11B0 A2 12
|
||
ldy $05CE ; CPU:$D1B2 PRG:11B2 AC CE 05
|
||
jsr AddParticleResultDigits ; CPU:$D1B5 PRG:11B5 20 DC D1
|
||
jsr $C12D ; CPU:$D1B8 PRG:11B8 20 2D C1
|
||
lda $40 ; CPU:$D1BB PRG:11BB A5 40
|
||
bne DrawParticleBonusResults_Block_1 ; CPU:$D1BD PRG:11BD D0 01
|
||
rts ; CPU:$D1BF PRG:11BF 60
|
||
DrawParticleBonusResults_Block_1:
|
||
lda #$65 ; CPU:$D1C0 PRG:11C0 A9 65
|
||
ldy #$00 ; CPU:$D1C2 PRG:11C2 A0 00
|
||
jmp $C131 ; CPU:$D1C4 PRG:11C4 4C 31 C1
|
||
ConvertValueToDecimalDigits:
|
||
ldy #$00 ; CPU:$D1C7 PRG:11C7 A0 00
|
||
ConvertValueToDecimalDigits_Block:
|
||
cmp #$0A ; CPU:$D1C9 PRG:11C9 C9 0A
|
||
bcc ConvertValueToDecimalDigits_Block_1 ; CPU:$D1CB PRG:11CB 90 06
|
||
iny ; CPU:$D1CD PRG:11CD C8
|
||
sbc #$0A ; CPU:$D1CE PRG:11CE E9 0A
|
||
jmp ConvertValueToDecimalDigits_Block ; CPU:$D1D0 PRG:11D0 4C CB D1
|
||
ConvertValueToDecimalDigits_Block_1:
|
||
sty $5A ; CPU:$D1D3 PRG:11D3 84 5A
|
||
sta $5B ; CPU:$D1D5 PRG:11D5 85 5B
|
||
jmp $C119 ; CPU:$D1D7 PRG:11D7 4C 19 C1
|
||
AddParticleResultDigits:
|
||
dey ; CPU:$D1DA PRG:11DA 88
|
||
bmi AddParticleResultDigits_Block_2 ; CPU:$D1DB PRG:11DB 30 1F
|
||
lda $0559 ; CPU:$D1DD PRG:11DD AD 59 05
|
||
clc ; CPU:$D1E0 PRG:11E0 18
|
||
adc $59,x ; CPU:$D1E1 PRG:11E1 75 59
|
||
cmp #$0A ; CPU:$D1E3 PRG:11E3 C9 0A
|
||
bcc AddParticleResultDigits_Block ; CPU:$D1E5 PRG:11E5 90 04
|
||
sbc #$0A ; CPU:$D1E7 PRG:11E7 E9 0A
|
||
inc $58,x ; CPU:$D1E9 PRG:11E9 F6 58
|
||
AddParticleResultDigits_Block:
|
||
sta $59,x ; CPU:$D1EB PRG:11EB 95 59
|
||
lda $58,x ; CPU:$D1ED PRG:11ED B5 58
|
||
cmp #$0A ; CPU:$D1EF PRG:11EF C9 0A
|
||
bcc AddParticleResultDigits_Block_1 ; CPU:$D1F1 PRG:11F1 90 06
|
||
sbc #$0A ; CPU:$D1F3 PRG:11F3 E9 0A
|
||
inc $57,x ; CPU:$D1F5 PRG:11F5 F6 57
|
||
sta $58,x ; CPU:$D1F7 PRG:11F7 95 58
|
||
AddParticleResultDigits_Block_1:
|
||
jmp AddParticleResultDigits ; CPU:$D1F9 PRG:11F9 4C DC D1
|
||
AddParticleResultDigits_Block_2:
|
||
ldy #$00 ; CPU:$D1FC PRG:11FC A0 00
|
||
AddParticleResultDigits_Block_3:
|
||
lda $57,x ; CPU:$D1FE PRG:11FE B5 57
|
||
beq AddParticleResultDigits_Block_4 ; CPU:$D200 PRG:1200 F0 04
|
||
cmp #$24 ; CPU:$D202 PRG:1202 C9 24
|
||
bne AddParticleResultDigits_Block_5 ; CPU:$D204 PRG:1204 D0 0A
|
||
AddParticleResultDigits_Block_4:
|
||
lda #$24 ; CPU:$D206 PRG:1206 A9 24
|
||
sta $57,x ; CPU:$D208 PRG:1208 95 57
|
||
inx ; CPU:$D20A PRG:120A E8
|
||
iny ; CPU:$D20B PRG:120B C8
|
||
cpy #$04 ; CPU:$D20C PRG:120C C0 04
|
||
bne AddParticleResultDigits_Block_3 ; CPU:$D20E PRG:120E D0 EE
|
||
AddParticleResultDigits_Block_5:
|
||
rts ; CPU:$D210 PRG:1210 60
|
||
DecrementDecimalDigits:
|
||
lda $59,x ; CPU:$D211 PRG:1211 B5 59
|
||
cmp #$24 ; CPU:$D213 PRG:1213 C9 24
|
||
beq DecrementDecimalDigits_Block_2 ; CPU:$D215 PRG:1215 F0 2A
|
||
tay ; CPU:$D217 PRG:1217 A8
|
||
bne DecrementDecimalDigits_Block_1 ; CPU:$D218 PRG:1218 D0 1C
|
||
lda $58,x ; CPU:$D21A PRG:121A B5 58
|
||
cmp #$24 ; CPU:$D21C PRG:121C C9 24
|
||
beq DecrementDecimalDigits_Block_2 ; CPU:$D21E PRG:121E F0 21
|
||
lda $58,x ; CPU:$D220 PRG:1220 B5 58
|
||
bne DecrementDecimalDigits_Block ; CPU:$D222 PRG:1222 D0 0C
|
||
lda $57,x ; CPU:$D224 PRG:1224 B5 57
|
||
cmp #$24 ; CPU:$D226 PRG:1226 C9 24
|
||
beq DecrementDecimalDigits_Block_2 ; CPU:$D228 PRG:1228 F0 17
|
||
lda #$0A ; CPU:$D22A PRG:122A A9 0A
|
||
sta $58,x ; CPU:$D22C PRG:122C 95 58
|
||
dec $57,x ; CPU:$D22E PRG:122E D6 57
|
||
DecrementDecimalDigits_Block:
|
||
lda #$0A ; CPU:$D230 PRG:1230 A9 0A
|
||
sta $59,x ; CPU:$D232 PRG:1232 95 59
|
||
dec $58,x ; CPU:$D234 PRG:1234 D6 58
|
||
DecrementDecimalDigits_Block_1:
|
||
dec $59,x ; CPU:$D236 PRG:1236 D6 59
|
||
txa ; CPU:$D238 PRG:1238 8A
|
||
pha ; CPU:$D239 PRG:1239 48
|
||
lda #$0A ; CPU:$D23A PRG:123A A9 0A
|
||
jsr $D6DE ; CPU:$D23C PRG:123C 20 DE D6
|
||
pla ; CPU:$D23F PRG:123F 68
|
||
tax ; CPU:$D240 PRG:1240 AA
|
||
DecrementDecimalDigits_Block_2:
|
||
jmp AddParticleResultDigits_Block_2 ; CPU:$D241 PRG:1241 4C FE D1
|
||
ClearPpuAndOamBuffers:
|
||
jsr $C10A ; CPU:$D244 PRG:1244 20 0A C1
|
||
jsr $C0FA ; CPU:$D247 PRG:1247 20 FA C0
|
||
lda #$20 ; CPU:$D24A PRG:124A A9 20
|
||
sta $2006 ; CPU:$D24C PRG:124C 8D 06 20
|
||
lda #$00 ; CPU:$D24F PRG:124F A9 00
|
||
sta $2006 ; CPU:$D251 PRG:1251 8D 06 20
|
||
jsr ClearNametable ; CPU:$D254 PRG:1254 20 75 D2
|
||
jsr ClearNametable ; CPU:$D257 PRG:1257 20 75 D2
|
||
jsr $C104 ; CPU:$D25A PRG:125A 20 04 C1
|
||
jsr $C115 ; CPU:$D25D PRG:125D 20 15 C1
|
||
ldx #$3F ; CPU:$D260 PRG:1260 A2 3F
|
||
ldy #$00 ; CPU:$D262 PRG:1262 A0 00
|
||
sty $4C ; CPU:$D264 PRG:1264 84 4C
|
||
ClearPpuAndOamBuffers_Block:
|
||
lda #$F0 ; CPU:$D266 PRG:1266 A9 F0
|
||
sta $0200,y ; CPU:$D268 PRG:1268 99 00 02
|
||
iny ; CPU:$D26B PRG:126B C8
|
||
iny ; CPU:$D26C PRG:126C C8
|
||
iny ; CPU:$D26D PRG:126D C8
|
||
iny ; CPU:$D26E PRG:126E C8
|
||
dex ; CPU:$D26F PRG:126F CA
|
||
bpl ClearPpuAndOamBuffers_Block ; CPU:$D270 PRG:1270 10 F4
|
||
rts ; CPU:$D272 PRG:1272 60
|
||
ClearNametable:
|
||
ldx #$F0 ; CPU:$D273 PRG:1273 A2 F0
|
||
lda #$24 ; CPU:$D275 PRG:1275 A9 24
|
||
ClearNametable_Block:
|
||
sta $2007 ; CPU:$D277 PRG:1277 8D 07 20
|
||
sta $2007 ; CPU:$D27A PRG:127A 8D 07 20
|
||
sta $2007 ; CPU:$D27D PRG:127D 8D 07 20
|
||
sta $2007 ; CPU:$D280 PRG:1280 8D 07 20
|
||
dex ; CPU:$D283 PRG:1283 CA
|
||
bne ClearNametable_Block ; CPU:$D284 PRG:1284 D0 F1
|
||
ldx #$40 ; CPU:$D286 PRG:1286 A2 40
|
||
lda #$00 ; CPU:$D288 PRG:1288 A9 00
|
||
ClearNametable_Block_1:
|
||
sta $2007 ; CPU:$D28A PRG:128A 8D 07 20
|
||
dex ; CPU:$D28D PRG:128D CA
|
||
bne ClearNametable_Block_1 ; CPU:$D28E PRG:128E D0 FA
|
||
rts ; CPU:$D290 PRG:1290 60
|
||
LoadStageObjectData:
|
||
jsr $C10A ; CPU:$D291 PRG:1291 20 0A C1
|
||
jsr $C0FA ; CPU:$D294 PRG:1294 20 FA C0
|
||
lda $16 ; CPU:$D297 PRG:1297 A5 16
|
||
beq LoadStageObjectData_Block ; CPU:$D299 PRG:1299 F0 03
|
||
jmp $D572 ; CPU:$D29B PRG:129B 4C 72 D5
|
||
LoadStageObjectData_Block:
|
||
ldy $3B ; CPU:$D29E PRG:129E A4 3B
|
||
lda StageStreamPointerLoTable,y ; CPU:$D2A0 PRG:12A0 B9 2A DB
|
||
sta $1D ; CPU:$D2A3 PRG:12A3 85 1D
|
||
lda StageStreamPointerHiTable,y ; CPU:$D2A5 PRG:12A5 B9 3A DB
|
||
sta $1E ; CPU:$D2A8 PRG:12A8 85 1E
|
||
jsr $D497 ; CPU:$D2AA PRG:12AA 20 97 D4
|
||
ldx #$00 ; CPU:$D2AD PRG:12AD A2 00
|
||
LoadStageObjectData_Block_1:
|
||
jsr $D4E5 ; CPU:$D2AF PRG:12AF 20 E5 D4
|
||
cmp #$FF ; CPU:$D2B2 PRG:12B2 C9 FF
|
||
beq LoadStageObjectData_Block_4 ; CPU:$D2B4 PRG:12B4 F0 6A
|
||
sta $54 ; CPU:$D2B6 PRG:12B6 85 54
|
||
jsr $D4E5 ; CPU:$D2B8 PRG:12B8 20 E5 D4
|
||
sta $55 ; CPU:$D2BB PRG:12BB 85 55
|
||
ldy #$03 ; CPU:$D2BD PRG:12BD A0 03
|
||
LoadStageObjectData_Block_2:
|
||
jsr $D4FB ; CPU:$D2BF PRG:12BF 20 FB D4
|
||
lda #$04 ; CPU:$D2C2 PRG:12C2 A9 04
|
||
sta $12 ; CPU:$D2C4 PRG:12C4 85 12
|
||
lda $D493,y ; CPU:$D2C6 PRG:12C6 B9 93 D4
|
||
LoadStageObjectData_Block_3:
|
||
sta $2007 ; CPU:$D2C9 PRG:12C9 8D 07 20
|
||
clc ; CPU:$D2CC PRG:12CC 18
|
||
adc #$04 ; CPU:$D2CD PRG:12CD 69 04
|
||
dec $12 ; CPU:$D2CF PRG:12CF C6 12
|
||
bne LoadStageObjectData_Block_3 ; CPU:$D2D1 PRG:12D1 D0 F6
|
||
inc $55 ; CPU:$D2D3 PRG:12D3 E6 55
|
||
dey ; CPU:$D2D5 PRG:12D5 88
|
||
bpl LoadStageObjectData_Block_2 ; CPU:$D2D6 PRG:12D6 10 E7
|
||
lda $55 ; CPU:$D2D8 PRG:12D8 A5 55
|
||
sec ; CPU:$D2DA PRG:12DA 38
|
||
sbc #$04 ; CPU:$D2DB PRG:12DB E9 04
|
||
sta $55 ; CPU:$D2DD PRG:12DD 85 55
|
||
jsr $D51C ; CPU:$D2DF PRG:12DF 20 1C D5
|
||
sta $A6,x ; CPU:$D2E2 PRG:12E2 95 A6
|
||
inc $54 ; CPU:$D2E4 PRG:12E4 E6 54
|
||
inc $54 ; CPU:$D2E6 PRG:12E6 E6 54
|
||
jsr $D51C ; CPU:$D2E8 PRG:12E8 20 1C D5
|
||
sta $A9,x ; CPU:$D2EB PRG:12EB 95 A9
|
||
inc $55 ; CPU:$D2ED PRG:12ED E6 55
|
||
inc $55 ; CPU:$D2EF PRG:12EF E6 55
|
||
jsr $D51C ; CPU:$D2F1 PRG:12F1 20 1C D5
|
||
sta $AF,x ; CPU:$D2F4 PRG:12F4 95 AF
|
||
dec $54 ; CPU:$D2F6 PRG:12F6 C6 54
|
||
dec $54 ; CPU:$D2F8 PRG:12F8 C6 54
|
||
jsr $D51C ; CPU:$D2FA PRG:12FA 20 1C D5
|
||
sta $AC,x ; CPU:$D2FD PRG:12FD 95 AC
|
||
stx $A4 ; CPU:$D2FF PRG:12FF 86 A4
|
||
lda #$03 ; CPU:$D301 PRG:1301 A9 03
|
||
jsr $C856 ; CPU:$D303 PRG:1303 20 56 C8
|
||
jsr $C17C ; CPU:$D306 PRG:1306 20 7C C1
|
||
ldx $A4 ; CPU:$D309 PRG:1309 A6 A4
|
||
lda $54 ; CPU:$D30B PRG:130B A5 54
|
||
asl a ; CPU:$D30D PRG:130D 0A
|
||
asl a ; CPU:$D30E PRG:130E 0A
|
||
asl a ; CPU:$D30F PRG:130F 0A
|
||
clc ; CPU:$D310 PRG:1310 18
|
||
adc #$10 ; CPU:$D311 PRG:1311 69 10
|
||
sta $B2,x ; CPU:$D313 PRG:1313 95 B2
|
||
lda $55 ; CPU:$D315 PRG:1315 A5 55
|
||
asl a ; CPU:$D317 PRG:1317 0A
|
||
asl a ; CPU:$D318 PRG:1318 0A
|
||
asl a ; CPU:$D319 PRG:1319 0A
|
||
sta $B5,x ; CPU:$D31A PRG:131A 95 B5
|
||
inx ; CPU:$D31C PRG:131C E8
|
||
jmp LoadStageObjectData_Block_1 ; CPU:$D31D PRG:131D 4C B1 D2
|
||
LoadStageObjectData_Block_4:
|
||
dex ; CPU:$D320 PRG:1320 CA
|
||
stx $A3 ; CPU:$D321 PRG:1321 86 A3
|
||
ldx #$00 ; CPU:$D323 PRG:1323 A2 00
|
||
LoadStageObjectData_Block_5:
|
||
jsr $D4E5 ; CPU:$D325 PRG:1325 20 E5 D4
|
||
cmp #$FF ; CPU:$D328 PRG:1328 C9 FF
|
||
beq LoadStageObjectData_Block_6 ; CPU:$D32A PRG:132A F0 50
|
||
sta $54 ; CPU:$D32C PRG:132C 85 54
|
||
jsr $D4E5 ; CPU:$D32E PRG:132E 20 E5 D4
|
||
sta $55 ; CPU:$D331 PRG:1331 85 55
|
||
jsr $D4E5 ; CPU:$D333 PRG:1333 20 E5 D4
|
||
sta $05FA,x ; CPU:$D336 PRG:1336 9D FA 05
|
||
lda $54 ; CPU:$D339 PRG:1339 A5 54
|
||
asl a ; CPU:$D33B PRG:133B 0A
|
||
asl a ; CPU:$D33C PRG:133C 0A
|
||
asl a ; CPU:$D33D PRG:133D 0A
|
||
adc #$0C ; CPU:$D33E PRG:133E 69 0C
|
||
sta $05D2,x ; CPU:$D340 PRG:1340 9D D2 05
|
||
lda $55 ; CPU:$D343 PRG:1343 A5 55
|
||
asl a ; CPU:$D345 PRG:1345 0A
|
||
asl a ; CPU:$D346 PRG:1346 0A
|
||
asl a ; CPU:$D347 PRG:1347 0A
|
||
adc #$0C ; CPU:$D348 PRG:1348 69 0C
|
||
sta $05DC,x ; CPU:$D34A PRG:134A 9D DC 05
|
||
lda #$00 ; CPU:$D34D PRG:134D A9 00
|
||
sta $0604,x ; CPU:$D34F PRG:134F 9D 04 06
|
||
jsr $D4FB ; CPU:$D352 PRG:1352 20 FB D4
|
||
sta $05E6,x ; CPU:$D355 PRG:1355 9D E6 05
|
||
lda $13 ; CPU:$D358 PRG:1358 A5 13
|
||
sta $05F0,x ; CPU:$D35A PRG:135A 9D F0 05
|
||
jsr $D56C ; CPU:$D35D PRG:135D 20 6C D5
|
||
jsr $D53C ; CPU:$D360 PRG:1360 20 3C D5
|
||
inc $54 ; CPU:$D363 PRG:1363 E6 54
|
||
inc $54 ; CPU:$D365 PRG:1365 E6 54
|
||
jsr $D53C ; CPU:$D367 PRG:1367 20 3C D5
|
||
inc $55 ; CPU:$D36A PRG:136A E6 55
|
||
inc $55 ; CPU:$D36C PRG:136C E6 55
|
||
jsr $D53C ; CPU:$D36E PRG:136E 20 3C D5
|
||
dec $54 ; CPU:$D371 PRG:1371 C6 54
|
||
dec $54 ; CPU:$D373 PRG:1373 C6 54
|
||
jsr $D53C ; CPU:$D375 PRG:1375 20 3C D5
|
||
inx ; CPU:$D378 PRG:1378 E8
|
||
jmp LoadStageObjectData_Block_5 ; CPU:$D379 PRG:1379 4C 27 D3
|
||
LoadStageObjectData_Block_6:
|
||
dex ; CPU:$D37C PRG:137C CA
|
||
stx $05D1 ; CPU:$D37D PRG:137D 8E D1 05
|
||
jsr $D4E5 ; CPU:$D380 PRG:1380 20 E5 D4
|
||
sta $1F ; CPU:$D383 PRG:1383 85 1F
|
||
jsr $D4E5 ; CPU:$D385 PRG:1385 20 E5 D4
|
||
sta $20 ; CPU:$D388 PRG:1388 85 20
|
||
ldy #$00 ; CPU:$D38A PRG:138A A0 00
|
||
lda ($1F),y ; CPU:$D38C PRG:138C B1 1F
|
||
tax ; CPU:$D38E PRG:138E AA
|
||
dex ; CPU:$D38F PRG:138F CA
|
||
bpl LoadStageObjectData_Block_7 ; CPU:$D390 PRG:1390 10 05
|
||
inc $C8 ; CPU:$D392 PRG:1392 E6 C8
|
||
jmp LoadStageObjectData_Block_9 ; CPU:$D394 PRG:1394 4C BA D3
|
||
LoadStageObjectData_Block_7:
|
||
iny ; CPU:$D397 PRG:1397 C8
|
||
LoadStageObjectData_Block_8:
|
||
lda ($1F),y ; CPU:$D398 PRG:1398 B1 1F
|
||
iny ; CPU:$D39A PRG:139A C8
|
||
sta $93,x ; CPU:$D39B PRG:139B 95 93
|
||
lda ($1F),y ; CPU:$D39D PRG:139D B1 1F
|
||
iny ; CPU:$D39F PRG:139F C8
|
||
sta $9C,x ; CPU:$D3A0 PRG:13A0 95 9C
|
||
lda ($1F),y ; CPU:$D3A2 PRG:13A2 B1 1F
|
||
iny ; CPU:$D3A4 PRG:13A4 C8
|
||
sta $0453,x ; CPU:$D3A5 PRG:13A5 9D 53 04
|
||
lda #$02 ; CPU:$D3A8 PRG:13A8 A9 02
|
||
sta $81,x ; CPU:$D3AA PRG:13AA 95 81
|
||
lda #$01 ; CPU:$D3AC PRG:13AC A9 01
|
||
sta $8A,x ; CPU:$D3AE PRG:13AE 95 8A
|
||
lda $C6 ; CPU:$D3B0 PRG:13B0 A5 C6
|
||
sta $0441,x ; CPU:$D3B2 PRG:13B2 9D 41 04
|
||
dex ; CPU:$D3B5 PRG:13B5 CA
|
||
bpl LoadStageObjectData_Block_8 ; CPU:$D3B6 PRG:13B6 10 E0
|
||
LoadStageObjectData_Block_9:
|
||
jsr $D4E5 ; CPU:$D3B8 PRG:13B8 20 E5 D4
|
||
sta $CD ; CPU:$D3BB PRG:13BB 85 CD
|
||
jsr $D4E5 ; CPU:$D3BD PRG:13BD 20 E5 D4
|
||
sta $23 ; CPU:$D3C0 PRG:13C0 85 23
|
||
jsr $D4E5 ; CPU:$D3C2 PRG:13C2 20 E5 D4
|
||
tay ; CPU:$D3C5 PRG:13C5 A8
|
||
sta $24 ; CPU:$D3C6 PRG:13C6 85 24
|
||
lda $23 ; CPU:$D3C8 PRG:13C8 A5 23
|
||
jsr $D48C ; CPU:$D3CA PRG:13CA 20 8C D4
|
||
sta $25 ; CPU:$D3CD PRG:13CD 85 25
|
||
sty $26 ; CPU:$D3CF PRG:13CF 84 26
|
||
jsr $D48C ; CPU:$D3D1 PRG:13D1 20 8C D4
|
||
sta $27 ; CPU:$D3D4 PRG:13D4 85 27
|
||
sty $28 ; CPU:$D3D6 PRG:13D6 84 28
|
||
jsr $D48C ; CPU:$D3D8 PRG:13D8 20 8C D4
|
||
sta $29 ; CPU:$D3DB PRG:13DB 85 29
|
||
sty $2A ; CPU:$D3DD PRG:13DD 84 2A
|
||
jsr $D5D9 ; CPU:$D3DF PRG:13DF 20 D9 D5
|
||
jsr BuildStagePpuCommands ; CPU:$D3E2 PRG:13E2 20 ED D3
|
||
jsr $C104 ; CPU:$D3E5 PRG:13E5 20 04 C1
|
||
jmp $C115 ; CPU:$D3E8 PRG:13E8 4C 15 C1
|
||
BuildStagePpuCommands:
|
||
ldx #$22 ; CPU:$D3EB PRG:13EB A2 22
|
||
BuildStagePpuCommands_Block:
|
||
lda StagePaletteAndTileData,x ; CPU:$D3ED PRG:13ED BD 37 D4
|
||
sta $57,x ; CPU:$D3F0 PRG:13F0 95 57
|
||
dex ; CPU:$D3F2 PRG:13F2 CA
|
||
bpl BuildStagePpuCommands_Block ; CPU:$D3F3 PRG:13F3 10 F8
|
||
lda $C8 ; CPU:$D3F5 PRG:13F5 A5 C8
|
||
bne BuildStagePpuCommands_Block_3 ; CPU:$D3F7 PRG:13F7 D0 15
|
||
lda $3B ; CPU:$D3F9 PRG:13F9 A5 3B
|
||
and #$0C ; CPU:$D3FB PRG:13FB 29 0C
|
||
ora #$03 ; CPU:$D3FD PRG:13FD 09 03
|
||
tay ; CPU:$D3FF PRG:13FF A8
|
||
ldx #$03 ; CPU:$D400 PRG:1400 A2 03
|
||
BuildStagePpuCommands_Block_1:
|
||
lda $D45A,y ; CPU:$D402 PRG:1402 B9 5A D4
|
||
sta $5A,x ; CPU:$D405 PRG:1405 95 5A
|
||
dey ; CPU:$D407 PRG:1407 88
|
||
dex ; CPU:$D408 PRG:1408 CA
|
||
bpl BuildStagePpuCommands_Block_1 ; CPU:$D409 PRG:1409 10 F7
|
||
BuildStagePpuCommands_Block_2:
|
||
jmp $C12D ; CPU:$D40B PRG:140B 4C 2D C1
|
||
BuildStagePpuCommands_Block_3:
|
||
ldx $0558 ; CPU:$D40E PRG:140E AE 58 05
|
||
lda $D46A,x ; CPU:$D411 PRG:1411 BD 6A D4
|
||
sta $1D ; CPU:$D414 PRG:1414 85 1D
|
||
lda $D46F,x ; CPU:$D416 PRG:1416 BD 6F D4
|
||
sta $1E ; CPU:$D419 PRG:1419 85 1E
|
||
ldx #$03 ; CPU:$D41B PRG:141B A2 03
|
||
ldy #$07 ; CPU:$D41D PRG:141D A0 07
|
||
BuildStagePpuCommands_Block_4:
|
||
lda ($1D),y ; CPU:$D41F PRG:141F B1 1D
|
||
sta $72,x ; CPU:$D421 PRG:1421 95 72
|
||
dey ; CPU:$D423 PRG:1423 88
|
||
dex ; CPU:$D424 PRG:1424 CA
|
||
bpl BuildStagePpuCommands_Block_4 ; CPU:$D425 PRG:1425 10 F8
|
||
lda $16 ; CPU:$D427 PRG:1427 A5 16
|
||
bne BuildStagePpuCommands_Block_2 ; CPU:$D429 PRG:1429 D0 E0
|
||
BuildStagePpuCommands_Block_5:
|
||
lda ($1D),y ; CPU:$D42B PRG:142B B1 1D
|
||
sta a:$005A,y ; CPU:$D42D PRG:142D 99 5A 00
|
||
dey ; CPU:$D430 PRG:1430 88
|
||
bpl BuildStagePpuCommands_Block_5 ; CPU:$D431 PRG:1431 10 F8
|
||
bmi BuildStagePpuCommands_Block_2 ; CPU:$D433 PRG:1433 30 D6
|
||
|
||
StagePaletteAndTileData:
|
||
.byte $3F, $00, $20, $0F, $2A, $09, $07, $0F ; CPU:$D435 PRG:1435 3F 00 20 0F 2A 09 07 0F
|
||
.byte $30, $27, $15, $0F, $30, $02, $21, $0F ; CPU:$D43D PRG:143D 30 27 15 0F 30 02 21 0F
|
||
.byte $30, $00, $10, $0F, $16, $12, $37, $0F ; CPU:$D445 PRG:1445 30 00 10 0F 16 12 37 0F
|
||
.byte $12, $16, $37, $0F, $17, $11, $35, $0F ; CPU:$D44D PRG:144D 12 16 37 0F 17 11 35 0F
|
||
.byte $17, $11, $2B, $0F, $2A, $09, $07, $0F ; CPU:$D455 PRG:1455 17 11 2B 0F 2A 09 07 0F
|
||
.byte $26, $06, $07, $0F, $1B, $0C, $07, $0F ; CPU:$D45D PRG:145D 26 06 07 0F 1B 0C 07 0F
|
||
.byte $2C, $01, $06, $74, $7C, $84, $84, $84 ; CPU:$D465 PRG:1465 2C 01 06 74 7C 84 84 84
|
||
.byte $D4, $D4, $D4, $D4, $D4, $0F, $02, $08 ; CPU:$D46D PRG:146D D4 D4 D4 D4 D4 0F 02 08
|
||
.byte $06, $0F, $2B, $30, $12, $0F, $07, $0A ; CPU:$D475 PRG:1475 06 0F 2B 30 12 0F 07 0A
|
||
.byte $19, $0F, $26, $30, $2B, $0F, $07, $0C ; CPU:$D47D PRG:147D 19 0F 26 30 2B 0F 07 0C
|
||
.byte $1C, $0F, $15, $30, $26 ; CPU:$D485 PRG:1485 1C 0F 15 30 26
|
||
AddOffsetToStreamPointer:
|
||
sec ; CPU:$D48A PRG:148A 38
|
||
adc $CD ; CPU:$D48B PRG:148B 65 CD
|
||
bcc AddOffsetToStreamPointer_Block ; CPU:$D48D PRG:148D 90 01
|
||
iny ; CPU:$D48F PRG:148F C8
|
||
AddOffsetToStreamPointer_Block:
|
||
rts ; CPU:$D490 PRG:1490 60
|
||
StreamPointerAdjustmentTable:
|
||
.byte $7F, $7E, $7D, $7C ; CPU:$D491 PRG:1491 7F 7E 7D 7C
|
||
DecodePpuCommandStream:
|
||
jsr ReadStageStreamByte ; CPU:$D495 PRG:1495 20 E5 D4
|
||
sta $1F ; CPU:$D498 PRG:1498 85 1F
|
||
jsr ReadStageStreamByte ; CPU:$D49A PRG:149A 20 E5 D4
|
||
sta $20 ; CPU:$D49D PRG:149D 85 20
|
||
tax ; CPU:$D49F PRG:149F AA
|
||
beq DecodePpuCommandStream_Block_4 ; CPU:$D4A0 PRG:14A0 F0 40
|
||
DecodePpuCommandStream_Block:
|
||
jsr ReadPpuStreamByte ; CPU:$D4A2 PRG:14A2 20 F0 D4
|
||
tax ; CPU:$D4A5 PRG:14A5 AA
|
||
beq DecodePpuCommandStream ; CPU:$D4A6 PRG:14A6 F0 ED
|
||
and #$7F ; CPU:$D4A8 PRG:14A8 29 7F
|
||
sta $2006 ; CPU:$D4AA PRG:14AA 8D 06 20
|
||
jsr ReadPpuStreamByte ; CPU:$D4AD PRG:14AD 20 F0 D4
|
||
sta $2006 ; CPU:$D4B0 PRG:14B0 8D 06 20
|
||
jsr ReadPpuStreamByte ; CPU:$D4B3 PRG:14B3 20 F0 D4
|
||
sta $12 ; CPU:$D4B6 PRG:14B6 85 12
|
||
txa ; CPU:$D4B8 PRG:14B8 8A
|
||
and #$80 ; CPU:$D4B9 PRG:14B9 29 80
|
||
lsr a ; CPU:$D4BB PRG:14BB 4A
|
||
lsr a ; CPU:$D4BC PRG:14BC 4A
|
||
lsr a ; CPU:$D4BD PRG:14BD 4A
|
||
lsr a ; CPU:$D4BE PRG:14BE 4A
|
||
lsr a ; CPU:$D4BF PRG:14BF 4A
|
||
ora $00 ; CPU:$D4C0 PRG:14C0 05 00
|
||
sta $2000 ; CPU:$D4C2 PRG:14C2 8D 00 20
|
||
txa ; CPU:$D4C5 PRG:14C5 8A
|
||
and #$40 ; CPU:$D4C6 PRG:14C6 29 40
|
||
bne DecodePpuCommandStream_Block_2 ; CPU:$D4C8 PRG:14C8 D0 0C
|
||
DecodePpuCommandStream_Block_1:
|
||
jsr ReadPpuStreamByte ; CPU:$D4CA PRG:14CA 20 F0 D4
|
||
sta $2007 ; CPU:$D4CD PRG:14CD 8D 07 20
|
||
dec $12 ; CPU:$D4D0 PRG:14D0 C6 12
|
||
bne DecodePpuCommandStream_Block_1 ; CPU:$D4D2 PRG:14D2 D0 F6
|
||
beq DecodePpuCommandStream_Block ; CPU:$D4D4 PRG:14D4 F0 CC
|
||
DecodePpuCommandStream_Block_2:
|
||
jsr ReadPpuStreamByte ; CPU:$D4D6 PRG:14D6 20 F0 D4
|
||
DecodePpuCommandStream_Block_3:
|
||
sta $2007 ; CPU:$D4D9 PRG:14D9 8D 07 20
|
||
dec $12 ; CPU:$D4DC PRG:14DC C6 12
|
||
bne DecodePpuCommandStream_Block_3 ; CPU:$D4DE PRG:14DE D0 F9
|
||
beq DecodePpuCommandStream_Block ; CPU:$D4E0 PRG:14E0 F0 C0
|
||
DecodePpuCommandStream_Block_4:
|
||
rts ; CPU:$D4E2 PRG:14E2 60
|
||
ReadStageStreamByte:
|
||
ldy #$00 ; CPU:$D4E3 PRG:14E3 A0 00
|
||
lda ($1D),y ; CPU:$D4E5 PRG:14E5 B1 1D
|
||
inc $1D ; CPU:$D4E7 PRG:14E7 E6 1D
|
||
bne ReadStageStreamByte_Block ; CPU:$D4E9 PRG:14E9 D0 02
|
||
inc $1E ; CPU:$D4EB PRG:14EB E6 1E
|
||
ReadStageStreamByte_Block:
|
||
rts ; CPU:$D4ED PRG:14ED 60
|
||
ReadPpuStreamByte:
|
||
ldy #$00 ; CPU:$D4EE PRG:14EE A0 00
|
||
lda ($1F),y ; CPU:$D4F0 PRG:14F0 B1 1F
|
||
inc $1F ; CPU:$D4F2 PRG:14F2 E6 1F
|
||
bne ReadPpuStreamByte_Block ; CPU:$D4F4 PRG:14F4 D0 02
|
||
inc $20 ; CPU:$D4F6 PRG:14F6 E6 20
|
||
ReadPpuStreamByte_Block:
|
||
rts ; CPU:$D4F8 PRG:14F8 60
|
||
ReadPpuStreamByte_Block_1:
|
||
lda $55 ; CPU:$D4F9 PRG:14F9 A5 55
|
||
sta $12 ; CPU:$D4FB PRG:14FB 85 12
|
||
lda #$00 ; CPU:$D4FD PRG:14FD A9 00
|
||
asl $12 ; CPU:$D4FF PRG:14FF 06 12
|
||
asl $12 ; CPU:$D501 PRG:1501 06 12
|
||
asl $12 ; CPU:$D503 PRG:1503 06 12
|
||
asl $12 ; CPU:$D505 PRG:1505 06 12
|
||
rol a ; CPU:$D507 PRG:1507 2A
|
||
asl $12 ; CPU:$D508 PRG:1508 06 12
|
||
rol a ; CPU:$D50A PRG:150A 2A
|
||
ora #$20 ; CPU:$D50B PRG:150B 09 20
|
||
sta $2006 ; CPU:$D50D PRG:150D 8D 06 20
|
||
sta $13 ; CPU:$D510 PRG:1510 85 13
|
||
lda $12 ; CPU:$D512 PRG:1512 A5 12
|
||
ora $54 ; CPU:$D514 PRG:1514 05 54
|
||
sta $2006 ; CPU:$D516 PRG:1516 8D 06 20
|
||
rts ; CPU:$D519 PRG:1519 60
|
||
SetTileAddressFromCoordinates:
|
||
lda $55 ; CPU:$D51A PRG:151A A5 55
|
||
and #$FC ; CPU:$D51C PRG:151C 29 FC
|
||
asl a ; CPU:$D51E PRG:151E 0A
|
||
sta $12 ; CPU:$D51F PRG:151F 85 12
|
||
lda $54 ; CPU:$D521 PRG:1521 A5 54
|
||
lsr a ; CPU:$D523 PRG:1523 4A
|
||
lsr a ; CPU:$D524 PRG:1524 4A
|
||
ora $12 ; CPU:$D525 PRG:1525 05 12
|
||
ora #$C0 ; CPU:$D527 PRG:1527 09 C0
|
||
pha ; CPU:$D529 PRG:1529 48
|
||
lda $55 ; CPU:$D52A PRG:152A A5 55
|
||
and #$02 ; CPU:$D52C PRG:152C 29 02
|
||
sta $12 ; CPU:$D52E PRG:152E 85 12
|
||
lda $54 ; CPU:$D530 PRG:1530 A5 54
|
||
and #$02 ; CPU:$D532 PRG:1532 29 02
|
||
lsr a ; CPU:$D534 PRG:1534 4A
|
||
ora $12 ; CPU:$D535 PRG:1535 05 12
|
||
tay ; CPU:$D537 PRG:1537 A8
|
||
pla ; CPU:$D538 PRG:1538 68
|
||
rts ; CPU:$D539 PRG:1539 60
|
||
ReadModifyAttributeByte:
|
||
lda #$23 ; CPU:$D53A PRG:153A A9 23
|
||
sta $2006 ; CPU:$D53C PRG:153C 8D 06 20
|
||
jsr SetTileAddressFromCoordinates ; CPU:$D53F PRG:153F 20 1C D5
|
||
sta $2006 ; CPU:$D542 PRG:1542 8D 06 20
|
||
lda $2007 ; CPU:$D545 PRG:1545 AD 07 20
|
||
lda $2007 ; CPU:$D548 PRG:1548 AD 07 20
|
||
and AttributeClearMaskTable,y ; CPU:$D54B PRG:154B 39 64 D5
|
||
ora AttributeSetMaskTable,y ; CPU:$D54E PRG:154E 19 68 D5
|
||
pha ; CPU:$D551 PRG:1551 48
|
||
lda #$23 ; CPU:$D552 PRG:1552 A9 23
|
||
sta $2006 ; CPU:$D554 PRG:1554 8D 06 20
|
||
jsr SetTileAddressFromCoordinates ; CPU:$D557 PRG:1557 20 1C D5
|
||
sta $2006 ; CPU:$D55A PRG:155A 8D 06 20
|
||
pla ; CPU:$D55D PRG:155D 68
|
||
sta $2007 ; CPU:$D55E PRG:155E 8D 07 20
|
||
rts ; CPU:$D561 PRG:1561 60
|
||
AttributeClearMaskTable:
|
||
.byte $FC, $F3, $CF, $3F ; CPU:$D562 PRG:1562 FC F3 CF 3F
|
||
AttributeSetMaskTable:
|
||
.byte $01, $04, $10, $40 ; CPU:$D566 PRG:1566 01 04 10 40
|
||
InitializeNametablePatterns:
|
||
jsr $CCCB ; CPU:$D56A PRG:156A 20 CB CC
|
||
jmp $C17C ; CPU:$D56D PRG:156D 4C 7C C1
|
||
InitializeNametablePatterns_Block:
|
||
lda #$C0 ; CPU:$D570 PRG:1570 A9 C0
|
||
ldy #$23 ; CPU:$D572 PRG:1572 A0 23
|
||
jsr WriteNametableHeaderPattern ; CPU:$D574 PRG:1574 20 93 D5
|
||
lda #$C0 ; CPU:$D577 PRG:1577 A9 C0
|
||
ldy #$27 ; CPU:$D579 PRG:1579 A0 27
|
||
jsr WriteNametableHeaderPattern ; CPU:$D57B PRG:157B 20 93 D5
|
||
ldy #$23 ; CPU:$D57E PRG:157E A0 23
|
||
lda #$60 ; CPU:$D580 PRG:1580 A9 60
|
||
jsr WriteNametableAttributePattern ; CPU:$D582 PRG:1582 20 B8 D5
|
||
ldy #$27 ; CPU:$D585 PRG:1585 A0 27
|
||
lda #$60 ; CPU:$D587 PRG:1587 A9 60
|
||
jsr WriteNametableAttributePattern ; CPU:$D589 PRG:1589 20 B8 D5
|
||
inc $C8 ; CPU:$D58C PRG:158C E6 C8
|
||
jmp $D3E1 ; CPU:$D58E PRG:158E 4C E1 D3
|
||
WriteNametableHeaderPattern:
|
||
sty $2006 ; CPU:$D591 PRG:1591 8C 06 20
|
||
sta $2006 ; CPU:$D594 PRG:1594 8D 06 20
|
||
ldx #$00 ; CPU:$D597 PRG:1597 A2 00
|
||
WriteNametableHeaderPattern_Block:
|
||
lda $DCAE,x ; CPU:$D599 PRG:1599 BD AE DC
|
||
sta $2007 ; CPU:$D59C PRG:159C 8D 07 20
|
||
inx ; CPU:$D59F PRG:159F E8
|
||
cpx #$08 ; CPU:$D5A0 PRG:15A0 E0 08
|
||
bne WriteNametableHeaderPattern_Block ; CPU:$D5A2 PRG:15A2 D0 F5
|
||
lda #$00 ; CPU:$D5A4 PRG:15A4 A9 00
|
||
ldx #$28 ; CPU:$D5A6 PRG:15A6 A2 28
|
||
jsr FillPpuBytes ; CPU:$D5A8 PRG:15A8 20 B1 D5
|
||
lda #$AA ; CPU:$D5AB PRG:15AB A9 AA
|
||
ldx #$10 ; CPU:$D5AD PRG:15AD A2 10
|
||
FillPpuBytes:
|
||
sta $2007 ; CPU:$D5AF PRG:15AF 8D 07 20
|
||
dex ; CPU:$D5B2 PRG:15B2 CA
|
||
bne FillPpuBytes ; CPU:$D5B3 PRG:15B3 D0 FA
|
||
rts ; CPU:$D5B5 PRG:15B5 60
|
||
WriteNametableAttributePattern:
|
||
sty $2006 ; CPU:$D5B6 PRG:15B6 8C 06 20
|
||
sta $2006 ; CPU:$D5B9 PRG:15B9 8D 06 20
|
||
ldx #$20 ; CPU:$D5BC PRG:15BC A2 20
|
||
lda #$58 ; CPU:$D5BE PRG:15BE A9 58
|
||
jsr WriteAttributeQuadrants ; CPU:$D5C0 PRG:15C0 20 C9 D5
|
||
ldx #$40 ; CPU:$D5C3 PRG:15C3 A2 40
|
||
lda #$5C ; CPU:$D5C5 PRG:15C5 A9 5C
|
||
WriteAttributeQuadrants:
|
||
sta $12 ; CPU:$D5C7 PRG:15C7 85 12
|
||
WriteAttributeQuadrants_Block:
|
||
txa ; CPU:$D5C9 PRG:15C9 8A
|
||
and #$03 ; CPU:$D5CA PRG:15CA 29 03
|
||
eor #$03 ; CPU:$D5CC PRG:15CC 49 03
|
||
ora $12 ; CPU:$D5CE PRG:15CE 05 12
|
||
sta $2007 ; CPU:$D5D0 PRG:15D0 8D 07 20
|
||
dex ; CPU:$D5D3 PRG:15D3 CA
|
||
bne WriteAttributeQuadrants_Block ; CPU:$D5D4 PRG:15D4 D0 F3
|
||
rts ; CPU:$D5D6 PRG:15D6 60
|
||
ScanNametableTiles:
|
||
ldx #$00 ; CPU:$D5D7 PRG:15D7 A2 00
|
||
ScanNametableTiles_Block:
|
||
jsr GetNametableAddressForIndex ; CPU:$D5D9 PRG:15D9 20 51 D6
|
||
jsr ClassifyNametableTile ; CPU:$D5DC PRG:15DC 20 F1 D5
|
||
lda $51 ; CPU:$D5DF PRG:15DF A5 51
|
||
ora #$04 ; CPU:$D5E1 PRG:15E1 09 04
|
||
sta $51 ; CPU:$D5E3 PRG:15E3 85 51
|
||
jsr ClassifyNametableTile ; CPU:$D5E5 PRG:15E5 20 F1 D5
|
||
inx ; CPU:$D5E8 PRG:15E8 E8
|
||
inx ; CPU:$D5E9 PRG:15E9 E8
|
||
cpx #$80 ; CPU:$D5EA PRG:15EA E0 80
|
||
bne ScanNametableTiles_Block ; CPU:$D5EC PRG:15EC D0 EB
|
||
rts ; CPU:$D5EE PRG:15EE 60
|
||
ClassifyNametableTile:
|
||
lda $51 ; CPU:$D5EF PRG:15EF A5 51
|
||
sta $2006 ; CPU:$D5F1 PRG:15F1 8D 06 20
|
||
lda $50 ; CPU:$D5F4 PRG:15F4 A5 50
|
||
sta $2006 ; CPU:$D5F6 PRG:15F6 8D 06 20
|
||
lda $2007 ; CPU:$D5F9 PRG:15F9 AD 07 20
|
||
lda $2007 ; CPU:$D5FC PRG:15FC AD 07 20
|
||
cmp #$24 ; CPU:$D5FF PRG:15FF C9 24
|
||
bne ClassifyNametableTile_Block ; CPU:$D601 PRG:1601 D0 07
|
||
txa ; CPU:$D603 PRG:1603 8A
|
||
and #$03 ; CPU:$D604 PRG:1604 29 03
|
||
tay ; CPU:$D606 PRG:1606 A8
|
||
jmp ClassifyNametableTile_Load ; CPU:$D607 PRG:1607 4C 3B D6
|
||
ClassifyNametableTile_Block:
|
||
rts ; CPU:$D60A PRG:160A 60
|
||
ClassifyNametableTile_Block_1:
|
||
lda $4C ; CPU:$D60B PRG:160B A5 4C
|
||
beq ClassifyNametableTile_Block_3 ; CPU:$D60D PRG:160D F0 29
|
||
dec $4C ; CPU:$D60F PRG:160F C6 4C
|
||
lda $4F ; CPU:$D611 PRG:1611 A5 4F
|
||
clc ; CPU:$D613 PRG:1613 18
|
||
adc #$02 ; CPU:$D614 PRG:1614 69 02
|
||
and #$3F ; CPU:$D616 PRG:1616 29 3F
|
||
sta $4F ; CPU:$D618 PRG:1618 85 4F
|
||
tax ; CPU:$D61A PRG:161A AA
|
||
jsr GetNametableAddressForIndex ; CPU:$D61B PRG:161B 20 51 D6
|
||
lda $51 ; CPU:$D61E PRG:161E A5 51
|
||
sta $2006 ; CPU:$D620 PRG:1620 8D 06 20
|
||
lda $50 ; CPU:$D623 PRG:1623 A5 50
|
||
sta $2006 ; CPU:$D625 PRG:1625 8D 06 20
|
||
lda $2007 ; CPU:$D628 PRG:1628 AD 07 20
|
||
lda $2007 ; CPU:$D62B PRG:162B AD 07 20
|
||
ldy #$03 ; CPU:$D62E PRG:162E A0 03
|
||
ClassifyNametableTile_Block_2:
|
||
cmp NametableTileClassTable,y ; CPU:$D630 PRG:1630 D9 4C D6
|
||
beq ClassifyNametableTile_Load ; CPU:$D633 PRG:1633 F0 04
|
||
dey ; CPU:$D635 PRG:1635 88
|
||
bpl ClassifyNametableTile_Block_2 ; CPU:$D636 PRG:1636 10 F8
|
||
ClassifyNametableTile_Block_3:
|
||
rts ; CPU:$D638 PRG:1638 60
|
||
ClassifyNametableTile_Load:
|
||
lda $51 ; CPU:$D639 PRG:1639 A5 51
|
||
sta $2006 ; CPU:$D63B PRG:163B 8D 06 20
|
||
lda $50 ; CPU:$D63E PRG:163E A5 50
|
||
sta $2006 ; CPU:$D640 PRG:1640 8D 06 20
|
||
lda $D64D,y ; CPU:$D643 PRG:1643 B9 4D D6
|
||
sta $2007 ; CPU:$D646 PRG:1646 8D 07 20
|
||
rts ; CPU:$D649 PRG:1649 60
|
||
NametableTileClassTable:
|
||
.byte $24, $ED, $EE, $EF, $24 ; CPU:$D64A PRG:164A 24 ED EE EF 24
|
||
GetNametableAddressForIndex:
|
||
lda NametableAddressPairTable,x ; CPU:$D64F PRG:164F BD 5C D6
|
||
sta $50 ; CPU:$D652 PRG:1652 85 50
|
||
lda NametableAddressPairTable+1,x ; CPU:$D654 PRG:1654 BD 5D D6
|
||
sta $51 ; CPU:$D657 PRG:1657 85 51
|
||
rts ; CPU:$D659 PRG:1659 60
|
||
|
||
NametableAddressPairTable:
|
||
.byte $63, $21, $A5, $21, $CB, $20, $B7, $20 ; CPU:$D65A PRG:165A 63 21 A5 21 CB 20 B7 20
|
||
.byte $7D, $21, $9B, $22, $F2, $20, $49, $22 ; CPU:$D662 PRG:1662 7D 21 9B 22 F2 20 49 22
|
||
.byte $6D, $21, $0B, $22, $92, $22, $95, $21 ; CPU:$D66A PRG:166A 6D 21 0B 22 92 22 95 21
|
||
.byte $1C, $21, $48, $21, $E0, $20, $0B, $23 ; CPU:$D672 PRG:1672 1C 21 48 21 E0 20 0B 23
|
||
.byte $CE, $20, $D0, $21, $06, $21, $19, $21 ; CPU:$D67A PRG:167A CE 20 D0 21 06 21 19 21
|
||
.byte $30, $22, $8A, $22, $88, $22, $A4, $20 ; CPU:$D682 PRG:1682 30 22 8A 22 88 22 A4 20
|
||
.byte $42, $22, $68, $21, $3C, $22, $36, $21 ; CPU:$D68A PRG:168A 42 22 68 21 3C 22 36 21
|
||
.byte $CA, $21, $BC, $20, $96, $21, $4C, $21 ; CPU:$D692 PRG:1692 CA 21 BC 20 96 21 4C 21
|
||
.byte $35, $22, $EF, $20, $68, $22, $A6, $20 ; CPU:$D69A PRG:169A 35 22 EF 20 68 22 A6 20
|
||
.byte $BB, $21, $7A, $21, $EA, $20, $F1, $21 ; CPU:$D6A2 PRG:16A2 BB 21 7A 21 EA 20 F1 21
|
||
.byte $C2, $20, $77, $21, $54, $21, $BA, $20 ; CPU:$D6AA PRG:16AA C2 20 77 21 54 21 BA 20
|
||
.byte $C5, $22, $BE, $20, $FA, $20, $AE, $21 ; CPU:$D6B2 PRG:16B2 C5 22 BE 20 FA 20 AE 21
|
||
.byte $46, $21, $9A, $21, $D2, $20, $3D, $21 ; CPU:$D6BA PRG:16BA 46 21 9A 21 D2 20 3D 21
|
||
.byte $2B, $22, $B0, $20, $B6, $21, $AC, $20 ; CPU:$D6C2 PRG:16C2 2B 22 B0 20 B6 21 AC 20
|
||
.byte $B3, $20, $DB, $20, $F6, $20, $2C, $21 ; CPU:$D6CA PRG:16CA B3 20 DB 20 F6 20 2C 21
|
||
.byte $E7, $20, $62, $21, $E4, $21, $4E, $21 ; CPU:$D6D2 PRG:16D2 E7 20 62 21 E4 21 4E 21
|
||
UpdateBonusScoreTotals:
|
||
lda #$00 ; CPU:$D6DA PRG:16DA A9 00
|
||
AccumulatePlayerBonusScore:
|
||
sta $43 ; CPU:$D6DC PRG:16DC 85 43
|
||
lda $3A ; CPU:$D6DE PRG:16DE A5 3A
|
||
beq AccumulatePlayerBonusScore_Block_1 ; CPU:$D6E0 PRG:16E0 F0 01
|
||
AccumulatePlayerBonusScore_Block:
|
||
rts ; CPU:$D6E2 PRG:16E2 60
|
||
AccumulatePlayerBonusScore_Block_1:
|
||
ldx $3E ; CPU:$D6E3 PRG:16E3 A6 3E
|
||
cpx #$02 ; CPU:$D6E5 PRG:16E5 E0 02
|
||
bcs AccumulatePlayerBonusScore_Block ; CPU:$D6E7 PRG:16E7 B0 F9
|
||
lda $41,x ; CPU:$D6E9 PRG:16E9 B5 41
|
||
bmi AccumulatePlayerBonusScore_Block ; CPU:$D6EB PRG:16EB 30 F5
|
||
ldy #$64 ; CPU:$D6ED PRG:16ED A0 64
|
||
jsr DivideBonusValue ; CPU:$D6EF PRG:16EF 20 7C D7
|
||
clc ; CPU:$D6F2 PRG:16F2 18
|
||
adc $48 ; CPU:$D6F3 PRG:16F3 65 48
|
||
sta $45 ; CPU:$D6F5 PRG:16F5 85 45
|
||
ldy #$0A ; CPU:$D6F7 PRG:16F7 A0 0A
|
||
jsr DivideBonusValue ; CPU:$D6F9 PRG:16F9 20 7C D7
|
||
sta $44 ; CPU:$D6FC PRG:16FC 85 44
|
||
ldx $3F ; CPU:$D6FE PRG:16FE A6 3F
|
||
lda BonusScoreWeightTable,x ; CPU:$D700 PRG:1700 BD 79 D7
|
||
sta $21 ; CPU:$D703 PRG:1703 85 21
|
||
lda #$06 ; CPU:$D705 PRG:1705 A9 06
|
||
sta $22 ; CPU:$D707 PRG:1707 85 22
|
||
lda $3E ; CPU:$D709 PRG:1709 A5 3E
|
||
asl a ; CPU:$D70B PRG:170B 0A
|
||
asl a ; CPU:$D70C PRG:170C 0A
|
||
ora $3E ; CPU:$D70D PRG:170D 05 3E
|
||
tax ; CPU:$D70F PRG:170F AA
|
||
clc ; CPU:$D710 PRG:1710 18
|
||
lda $03,x ; CPU:$D711 PRG:1711 B5 03
|
||
adc $43 ; CPU:$D713 PRG:1713 65 43
|
||
jsr ClampDecimalDigit ; CPU:$D715 PRG:1715 20 8F D7
|
||
sta $03,x ; CPU:$D718 PRG:1718 95 03
|
||
lda $04,x ; CPU:$D71A PRG:171A B5 04
|
||
adc $44 ; CPU:$D71C PRG:171C 65 44
|
||
jsr ClampDecimalDigit ; CPU:$D71E PRG:171E 20 8F D7
|
||
sta $04,x ; CPU:$D721 PRG:1721 95 04
|
||
lda $05,x ; CPU:$D723 PRG:1723 B5 05
|
||
adc $45 ; CPU:$D725 PRG:1725 65 45
|
||
jsr ClampDecimalDigit ; CPU:$D727 PRG:1727 20 8F D7
|
||
sta $05,x ; CPU:$D72A PRG:172A 95 05
|
||
lda $06,x ; CPU:$D72C PRG:172C B5 06
|
||
adc $47 ; CPU:$D72E PRG:172E 65 47
|
||
jsr ClampDecimalDigit ; CPU:$D730 PRG:1730 20 8F D7
|
||
sta $06,x ; CPU:$D733 PRG:1733 95 06
|
||
lda $07,x ; CPU:$D735 PRG:1735 B5 07
|
||
adc #$00 ; CPU:$D737 PRG:1737 69 00
|
||
jsr ClampDecimalDigit ; CPU:$D739 PRG:1739 20 8F D7
|
||
sta $07,x ; CPU:$D73C PRG:173C 95 07
|
||
inx ; CPU:$D73E PRG:173E E8
|
||
inx ; CPU:$D73F PRG:173F E8
|
||
inx ; CPU:$D740 PRG:1740 E8
|
||
inx ; CPU:$D741 PRG:1741 E8
|
||
ldy #$04 ; CPU:$D742 PRG:1742 A0 04
|
||
AccumulatePlayerBonusScore_Block_2:
|
||
lda $03,x ; CPU:$D744 PRG:1744 B5 03
|
||
cmp ($21),y ; CPU:$D746 PRG:1746 D1 21
|
||
bcc AccumulatePlayerBonusScore_Block_5 ; CPU:$D748 PRG:1748 90 19
|
||
bne AccumulatePlayerBonusScore_Block_3 ; CPU:$D74A PRG:174A D0 04
|
||
dex ; CPU:$D74C PRG:174C CA
|
||
dey ; CPU:$D74D PRG:174D 88
|
||
bpl AccumulatePlayerBonusScore_Block_2 ; CPU:$D74E PRG:174E 10 F4
|
||
AccumulatePlayerBonusScore_Block_3:
|
||
ldy #$00 ; CPU:$D750 PRG:1750 A0 00
|
||
lda $3E ; CPU:$D752 PRG:1752 A5 3E
|
||
asl a ; CPU:$D754 PRG:1754 0A
|
||
asl a ; CPU:$D755 PRG:1755 0A
|
||
ora $3E ; CPU:$D756 PRG:1756 05 3E
|
||
tax ; CPU:$D758 PRG:1758 AA
|
||
AccumulatePlayerBonusScore_Block_4:
|
||
lda $03,x ; CPU:$D759 PRG:1759 B5 03
|
||
sta ($21),y ; CPU:$D75B PRG:175B 91 21
|
||
inx ; CPU:$D75D PRG:175D E8
|
||
iny ; CPU:$D75E PRG:175E C8
|
||
cpy #$05 ; CPU:$D75F PRG:175F C0 05
|
||
bne AccumulatePlayerBonusScore_Block_4 ; CPU:$D761 PRG:1761 D0 F6
|
||
AccumulatePlayerBonusScore_Block_5:
|
||
ldy #$04 ; CPU:$D763 PRG:1763 A0 04
|
||
AccumulatePlayerBonusScore_Block_6:
|
||
lda ($21),y ; CPU:$D765 PRG:1765 B1 21
|
||
sta a:$000D,y ; CPU:$D767 PRG:1767 99 0D 00
|
||
dey ; CPU:$D76A PRG:176A 88
|
||
bpl AccumulatePlayerBonusScore_Block_6 ; CPU:$D76B PRG:176B 10 F8
|
||
inc $46 ; CPU:$D76D PRG:176D E6 46
|
||
lda $16 ; CPU:$D76F PRG:176F A5 16
|
||
beq AccumulatePlayerBonusScore_Block_7 ; CPU:$D771 PRG:1771 F0 03
|
||
jsr $C539 ; CPU:$D773 PRG:1773 20 39 C5
|
||
AccumulatePlayerBonusScore_Block_7:
|
||
rts ; CPU:$D776 PRG:1776 60
|
||
BonusScoreWeightTable:
|
||
.byte $29, $2E, $33 ; CPU:$D777 PRG:1777 29 2E 33
|
||
DivideBonusValue:
|
||
sty $12 ; CPU:$D77A PRG:177A 84 12
|
||
ldx #$FF ; CPU:$D77C PRG:177C A2 FF
|
||
lda $43 ; CPU:$D77E PRG:177E A5 43
|
||
DivideBonusValue_Block:
|
||
sec ; CPU:$D780 PRG:1780 38
|
||
sbc $12 ; CPU:$D781 PRG:1781 E5 12
|
||
inx ; CPU:$D783 PRG:1783 E8
|
||
bcs DivideBonusValue_Block ; CPU:$D784 PRG:1784 B0 FA
|
||
clc ; CPU:$D786 PRG:1786 18
|
||
adc $12 ; CPU:$D787 PRG:1787 65 12
|
||
sta $43 ; CPU:$D789 PRG:1789 85 43
|
||
txa ; CPU:$D78B PRG:178B 8A
|
||
rts ; CPU:$D78C PRG:178C 60
|
||
ClampDecimalDigit:
|
||
cmp #$0A ; CPU:$D78D PRG:178D C9 0A
|
||
bcs ClampDecimalDigit_Block ; CPU:$D78F PRG:178F B0 01
|
||
rts ; CPU:$D791 PRG:1791 60
|
||
ClampDecimalDigit_Block:
|
||
sec ; CPU:$D792 PRG:1792 38
|
||
sbc #$0A ; CPU:$D793 PRG:1793 E9 0A
|
||
rts ; CPU:$D795 PRG:1795 60
|
||
DrawBonusResultScreen:
|
||
ldy $46 ; CPU:$D796 PRG:1796 A4 46
|
||
dey ; CPU:$D798 PRG:1798 88
|
||
beq DrawBonusResultScreen_Block ; CPU:$D799 PRG:1799 F0 03
|
||
bpl DrawBonusResultScreen_Block_5 ; CPU:$D79B PRG:179B 10 66
|
||
rts ; CPU:$D79D PRG:179D 60
|
||
DrawBonusResultScreen_Block:
|
||
lda #$20 ; CPU:$D79E PRG:179E A9 20
|
||
sta $2006 ; CPU:$D7A0 PRG:17A0 8D 06 20
|
||
lda #$43 ; CPU:$D7A3 PRG:17A3 A9 43
|
||
sta $2006 ; CPU:$D7A5 PRG:17A5 8D 06 20
|
||
lda #$8E ; CPU:$D7A8 PRG:17A8 A9 8E
|
||
sta $2007 ; CPU:$D7AA PRG:17AA 8D 07 20
|
||
ldx #$04 ; CPU:$D7AD PRG:17AD A2 04
|
||
DrawBonusResultScreen_Block_1:
|
||
lda $03,x ; CPU:$D7AF PRG:17AF B5 03
|
||
sta $2007 ; CPU:$D7B1 PRG:17B1 8D 07 20
|
||
dex ; CPU:$D7B4 PRG:17B4 CA
|
||
bpl DrawBonusResultScreen_Block_1 ; CPU:$D7B5 PRG:17B5 10 F8
|
||
lda #$00 ; CPU:$D7B7 PRG:17B7 A9 00
|
||
sta $2007 ; CPU:$D7B9 PRG:17B9 8D 07 20
|
||
lda #$24 ; CPU:$D7BC PRG:17BC A9 24
|
||
sta $2007 ; CPU:$D7BE PRG:17BE 8D 07 20
|
||
sta $2007 ; CPU:$D7C1 PRG:17C1 8D 07 20
|
||
ldx #$8C ; CPU:$D7C4 PRG:17C4 A2 8C
|
||
stx $2007 ; CPU:$D7C6 PRG:17C6 8E 07 20
|
||
inx ; CPU:$D7C9 PRG:17C9 E8
|
||
stx $2007 ; CPU:$D7CA PRG:17CA 8E 07 20
|
||
ldx #$04 ; CPU:$D7CD PRG:17CD A2 04
|
||
DrawBonusResultScreen_Block_2:
|
||
lda $0D,x ; CPU:$D7CF PRG:17CF B5 0D
|
||
sta $2007 ; CPU:$D7D1 PRG:17D1 8D 07 20
|
||
dex ; CPU:$D7D4 PRG:17D4 CA
|
||
bpl DrawBonusResultScreen_Block_2 ; CPU:$D7D5 PRG:17D5 10 F8
|
||
lda #$00 ; CPU:$D7D7 PRG:17D7 A9 00
|
||
sta $2007 ; CPU:$D7D9 PRG:17D9 8D 07 20
|
||
lda #$24 ; CPU:$D7DC PRG:17DC A9 24
|
||
sta $2007 ; CPU:$D7DE PRG:17DE 8D 07 20
|
||
sta $2007 ; CPU:$D7E1 PRG:17E1 8D 07 20
|
||
lda $16 ; CPU:$D7E4 PRG:17E4 A5 16
|
||
bne DrawBonusValueDigits ; CPU:$D7E6 PRG:17E6 D0 6A
|
||
lda $40 ; CPU:$D7E8 PRG:17E8 A5 40
|
||
beq DrawBonusResultScreen_Block_4 ; CPU:$D7EA PRG:17EA F0 14
|
||
lda #$8F ; CPU:$D7EC PRG:17EC A9 8F
|
||
sta $2007 ; CPU:$D7EE PRG:17EE 8D 07 20
|
||
ldx #$04 ; CPU:$D7F1 PRG:17F1 A2 04
|
||
DrawBonusResultScreen_Block_3:
|
||
lda $08,x ; CPU:$D7F3 PRG:17F3 B5 08
|
||
sta $2007 ; CPU:$D7F5 PRG:17F5 8D 07 20
|
||
dex ; CPU:$D7F8 PRG:17F8 CA
|
||
bpl DrawBonusResultScreen_Block_3 ; CPU:$D7F9 PRG:17F9 10 F8
|
||
lda #$00 ; CPU:$D7FB PRG:17FB A9 00
|
||
sta $2007 ; CPU:$D7FD PRG:17FD 8D 07 20
|
||
DrawBonusResultScreen_Block_4:
|
||
dec $46 ; CPU:$D800 PRG:1800 C6 46
|
||
rts ; CPU:$D802 PRG:1802 60
|
||
DrawBonusResultScreen_Block_5:
|
||
dec $46 ; CPU:$D803 PRG:1803 C6 46
|
||
lda #$20 ; CPU:$D805 PRG:1805 A9 20
|
||
sta $2006 ; CPU:$D807 PRG:1807 8D 06 20
|
||
lda #$62 ; CPU:$D80A PRG:180A A9 62
|
||
sta $2006 ; CPU:$D80C PRG:180C 8D 06 20
|
||
lda $41 ; CPU:$D80F PRG:180F A5 41
|
||
jsr DrawBonusMeter ; CPU:$D811 PRG:1811 20 26 D8
|
||
lda $40 ; CPU:$D814 PRG:1814 A5 40
|
||
beq DrawBonusMeter_Block_3 ; CPU:$D816 PRG:1816 F0 20
|
||
lda #$20 ; CPU:$D818 PRG:1818 A9 20
|
||
sta $2006 ; CPU:$D81A PRG:181A 8D 06 20
|
||
lda #$75 ; CPU:$D81D PRG:181D A9 75
|
||
sta $2006 ; CPU:$D81F PRG:181F 8D 06 20
|
||
lda $42 ; CPU:$D822 PRG:1822 A5 42
|
||
DrawBonusMeter:
|
||
bmi DrawBonusMeter_Block_4 ; CPU:$D824 PRG:1824 30 13
|
||
DrawBonusMeter_Block:
|
||
sta $50 ; CPU:$D826 PRG:1826 85 50
|
||
ldx #$06 ; CPU:$D828 PRG:1828 A2 06
|
||
DrawBonusMeter_Block_1:
|
||
lda #$24 ; CPU:$D82A PRG:182A A9 24
|
||
cpx $50 ; CPU:$D82C PRG:182C E4 50
|
||
bcs DrawBonusMeter_Block_2 ; CPU:$D82E PRG:182E B0 02
|
||
lda #$2A ; CPU:$D830 PRG:1830 A9 2A
|
||
DrawBonusMeter_Block_2:
|
||
sta $2007 ; CPU:$D832 PRG:1832 8D 07 20
|
||
dex ; CPU:$D835 PRG:1835 CA
|
||
bpl DrawBonusMeter_Block_1 ; CPU:$D836 PRG:1836 10 F2
|
||
DrawBonusMeter_Block_3:
|
||
rts ; CPU:$D838 PRG:1838 60
|
||
DrawBonusMeter_Block_4:
|
||
lda $40 ; CPU:$D839 PRG:1839 A5 40
|
||
beq DrawBonusMeter_Block ; CPU:$D83B PRG:183B F0 E9
|
||
ldx #$08 ; CPU:$D83D PRG:183D A2 08
|
||
DrawBonusMeter_Block_5:
|
||
lda BonusLabelTiles,x ; CPU:$D83F PRG:183F BD 4B D8
|
||
sta $2007 ; CPU:$D842 PRG:1842 8D 07 20
|
||
dex ; CPU:$D845 PRG:1845 CA
|
||
bpl DrawBonusMeter_Block_5 ; CPU:$D846 PRG:1846 10 F7
|
||
rts ; CPU:$D848 PRG:1848 60
|
||
BonusLabelTiles:
|
||
.byte $1B, $0E, $1F, $18, $24, $0E, $16, $0A ; CPU:$D849 PRG:1849 1B 0E 1F 18 24 0E 16 0A
|
||
.byte $10 ; CPU:$D851 PRG:1851 10
|
||
DrawBonusValueDigits:
|
||
ldy #$04 ; CPU:$D852 PRG:1852 A0 04
|
||
DrawBonusValueDigits_Block:
|
||
lda BonusDigitOffsetTable,y ; CPU:$D854 PRG:1854 B9 6C D8
|
||
sta $2007 ; CPU:$D857 PRG:1857 8D 07 20
|
||
dey ; CPU:$D85A PRG:185A 88
|
||
bpl DrawBonusValueDigits_Block ; CPU:$D85B PRG:185B 10 F7
|
||
lda $4A ; CPU:$D85D PRG:185D A5 4A
|
||
sta $2007 ; CPU:$D85F PRG:185F 8D 07 20
|
||
lda $49 ; CPU:$D862 PRG:1862 A5 49
|
||
sta $2007 ; CPU:$D864 PRG:1864 8D 07 20
|
||
dec $46 ; CPU:$D867 PRG:1867 C6 46
|
||
rts ; CPU:$D869 PRG:1869 60
|
||
BonusDigitOffsetTable:
|
||
.byte $FB, $FA, $F9, $F8, $F7 ; CPU:$D86A PRG:186A FB FA F9 F8 F7
|
||
CreateBonusResultSprites:
|
||
sta $12 ; CPU:$D86F PRG:186F 85 12
|
||
stx $13 ; CPU:$D871 PRG:1871 86 13
|
||
sty $14 ; CPU:$D873 PRG:1873 84 14
|
||
ldx #$01 ; CPU:$D875 PRG:1875 A2 01
|
||
CreateBonusResultSprites_Block:
|
||
lda $061A,x ; CPU:$D877 PRG:1877 BD 1A 06
|
||
bmi CreateBonusResultSprites_Block_1 ; CPU:$D87A PRG:187A 30 0E
|
||
dex ; CPU:$D87C PRG:187C CA
|
||
bpl CreateBonusResultSprites_Block ; CPU:$D87D PRG:187D 10 F8
|
||
ldx #$01 ; CPU:$D87F PRG:187F A2 01
|
||
lda $0619 ; CPU:$D881 PRG:1881 AD 19 06
|
||
cmp $0618 ; CPU:$D884 PRG:1884 CD 18 06
|
||
bcc CreateBonusResultSprites_Block_1 ; CPU:$D887 PRG:1887 90 01
|
||
dex ; CPU:$D889 PRG:1889 CA
|
||
CreateBonusResultSprites_Block_1:
|
||
lda #$64 ; CPU:$D88A PRG:188A A9 64
|
||
sta $0618,x ; CPU:$D88C PRG:188C 9D 18 06
|
||
lda $12 ; CPU:$D88F PRG:188F A5 12
|
||
sta $061A,x ; CPU:$D891 PRG:1891 9D 1A 06
|
||
tay ; CPU:$D894 PRG:1894 A8
|
||
txa ; CPU:$D895 PRG:1895 8A
|
||
asl a ; CPU:$D896 PRG:1896 0A
|
||
asl a ; CPU:$D897 PRG:1897 0A
|
||
asl a ; CPU:$D898 PRG:1898 0A
|
||
tax ; CPU:$D899 PRG:1899 AA
|
||
lda BonusSpriteTileTableA,y ; CPU:$D89A PRG:189A B9 D1 D8
|
||
sta $02F1,x ; CPU:$D89D PRG:189D 9D F1 02
|
||
lda BonusSpriteTileTableB,y ; CPU:$D8A0 PRG:18A0 B9 D7 D8
|
||
sta $02F5,x ; CPU:$D8A3 PRG:18A3 9D F5 02
|
||
ldy $13 ; CPU:$D8A6 PRG:18A6 A4 13
|
||
lda a:$009A,y ; CPU:$D8A8 PRG:18A8 B9 9A 00
|
||
sec ; CPU:$D8AB PRG:18AB 38
|
||
sbc #$08 ; CPU:$D8AC PRG:18AC E9 08
|
||
sta $02F0,x ; CPU:$D8AE PRG:18AE 9D F0 02
|
||
sta $02F4,x ; CPU:$D8B1 PRG:18B1 9D F4 02
|
||
lda a:$0091,y ; CPU:$D8B4 PRG:18B4 B9 91 00
|
||
sta $02F3,x ; CPU:$D8B7 PRG:18B7 9D F3 02
|
||
clc ; CPU:$D8BA PRG:18BA 18
|
||
adc #$08 ; CPU:$D8BB PRG:18BB 69 08
|
||
sta $02F7,x ; CPU:$D8BD PRG:18BD 9D F7 02
|
||
lda $3E ; CPU:$D8C0 PRG:18C0 A5 3E
|
||
sta $02F2,x ; CPU:$D8C2 PRG:18C2 9D F2 02
|
||
sta $02F6,x ; CPU:$D8C5 PRG:18C5 9D F6 02
|
||
ldy $14 ; CPU:$D8C8 PRG:18C8 A4 14
|
||
ldx $13 ; CPU:$D8CA PRG:18CA A6 13
|
||
lda $12 ; CPU:$D8CC PRG:18CC A5 12
|
||
rts ; CPU:$D8CE PRG:18CE 60
|
||
BonusSpriteTileTableA:
|
||
.byte $F4, $F5, $F6, $F7, $F8, $F9 ; CPU:$D8CF PRG:18CF F4 F5 F6 F7 F8 F9
|
||
BonusSpriteTileTableB:
|
||
.byte $FB, $FB, $FA, $FB, $FB, $FB ; CPU:$D8D5 PRG:18D5 FB FB FA FB FB FB
|
||
UpdateBonusResultSprites:
|
||
ldx #$01 ; CPU:$D8DB PRG:18DB A2 01
|
||
UpdateBonusResultSprites_Block:
|
||
lda $061A,x ; CPU:$D8DD PRG:18DD BD 1A 06
|
||
bmi UpdateBonusResultSprites_Block_1 ; CPU:$D8E0 PRG:18E0 30 17
|
||
dec $0618,x ; CPU:$D8E2 PRG:18E2 DE 18 06
|
||
bne UpdateBonusResultSprites_Block_1 ; CPU:$D8E5 PRG:18E5 D0 12
|
||
lda #$FF ; CPU:$D8E7 PRG:18E7 A9 FF
|
||
sta $061A,x ; CPU:$D8E9 PRG:18E9 9D 1A 06
|
||
txa ; CPU:$D8EC PRG:18EC 8A
|
||
asl a ; CPU:$D8ED PRG:18ED 0A
|
||
asl a ; CPU:$D8EE PRG:18EE 0A
|
||
asl a ; CPU:$D8EF PRG:18EF 0A
|
||
tay ; CPU:$D8F0 PRG:18F0 A8
|
||
lda #$F0 ; CPU:$D8F1 PRG:18F1 A9 F0
|
||
sta $02F0,y ; CPU:$D8F3 PRG:18F3 99 F0 02
|
||
sta $02F4,y ; CPU:$D8F6 PRG:18F6 99 F4 02
|
||
UpdateBonusResultSprites_Block_1:
|
||
dex ; CPU:$D8F9 PRG:18F9 CA
|
||
bpl UpdateBonusResultSprites_Block ; CPU:$D8FA PRG:18FA 10 E1
|
||
rts ; CPU:$D8FC PRG:18FC 60
|
||
ClearBonusResultSprites:
|
||
ldx #$01 ; CPU:$D8FD PRG:18FD A2 01
|
||
ClearBonusResultSprites_Block:
|
||
lda #$00 ; CPU:$D8FF PRG:18FF A9 00
|
||
sta $0618,x ; CPU:$D901 PRG:1901 9D 18 06
|
||
lda #$FF ; CPU:$D904 PRG:1904 A9 FF
|
||
sta $061A,x ; CPU:$D906 PRG:1906 9D 1A 06
|
||
dex ; CPU:$D909 PRG:1909 CA
|
||
bpl ClearBonusResultSprites_Block ; CPU:$D90A PRG:190A 10 F3
|
||
rts ; CPU:$D90C PRG:190C 60
|
||
ClearBonusResultSprites_Block_1:
|
||
jsr $D246 ; CPU:$D90D PRG:190D 20 46 D2
|
||
jsr $C10A ; CPU:$D910 PRG:1910 20 0A C1
|
||
jsr $F465 ; CPU:$D913 PRG:1913 20 65 F4
|
||
jsr $C0FA ; CPU:$D916 PRG:1916 20 FA C0
|
||
lda #$2C ; CPU:$D919 PRG:1919 A9 2C
|
||
sta $1D ; CPU:$D91B PRG:191B 85 1D
|
||
lda #$D9 ; CPU:$D91D PRG:191D A9 D9
|
||
sta $1E ; CPU:$D91F PRG:191F 85 1E
|
||
jsr $D497 ; CPU:$D921 PRG:1921 20 97 D4
|
||
jsr $C104 ; CPU:$D924 PRG:1924 20 04 C1
|
||
jmp $C115 ; CPU:$D927 PRG:1927 4C 15 C1
|
||
|
||
; Title/menu PPU command streams and tile data
|
||
TitleScreenPpuData:
|
||
.byte $30, $D9, $00, $00, $3F, $00, $04, $0F ; CPU:$D92A PRG:192A 30 D9 00 00 3F 00 04 0F
|
||
.byte $30, $27, $2A, $3F, $18, $04, $0F, $16 ; CPU:$D932 PRG:1932 30 27 2A 3F 18 04 0F 16
|
||
.byte $30, $21, $20, $7C, $21, $F0, $F1, $24 ; CPU:$D93A PRG:193A 30 21 20 7C 21 F0 F1 24
|
||
.byte $24, $24, $24, $E0, $E1, $E1, $E2, $E0 ; CPU:$D942 PRG:1942 24 24 24 E0 E1 E1 E2 E0
|
||
.byte $E1, $E1, $E2, $E0, $E2, $24, $E0, $E2 ; CPU:$D94A PRG:194A E1 E1 E2 E0 E2 24 E0 E2
|
||
.byte $24, $E0, $E1, $E1, $E2, $E0, $E1, $E1 ; CPU:$D952 PRG:1952 24 E0 E1 E1 E2 E0 E1 E1
|
||
.byte $E2, $E0, $EC, $24, $E0, $E2, $20, $A2 ; CPU:$D95A PRG:195A E2 E0 EC 24 E0 E2 20 A2
|
||
.byte $1B, $E3, $E3, $E3, $E5, $E3, $E3, $E3 ; CPU:$D962 PRG:1962 1B E3 E3 E3 E5 E3 E3 E3
|
||
.byte $E5, $E3, $E5, $24, $E3, $E5, $24, $E3 ; CPU:$D96A PRG:196A E5 E3 E5 24 E3 E5 24 E3
|
||
.byte $E3, $E3, $E5, $E3, $E3, $E3, $E5, $E3 ; CPU:$D972 PRG:1972 E3 E3 E5 E3 E3 E3 E5 E3
|
||
.byte $E3, $F3, $E3, $E5, $20, $C2, $1B, $E3 ; CPU:$D97A PRG:197A E3 F3 E3 E5 20 C2 1B E3
|
||
.byte $E4, $E3, $E7, $E3, $E4, $E3, $E5, $E3 ; CPU:$D982 PRG:1982 E4 E3 E7 E3 E4 E3 E5 E3
|
||
.byte $E5, $24, $E3, $E5, $24, $E3, $E4, $E3 ; CPU:$D98A PRG:198A E5 24 E3 E5 24 E3 E4 E3
|
||
.byte $E5, $E3, $E4, $E3, $E5, $E3, $E3, $E3 ; CPU:$D992 PRG:1992 E5 E3 E4 E3 E5 E3 E3 E3
|
||
.byte $E3, $E5, $20, $E2, $1B, $E3, $E3, $E3 ; CPU:$D99A PRG:199A E3 E5 20 E2 1B E3 E3 E3
|
||
.byte $E2, $E3, $E3, $E3, $E5, $E3, $E5, $24 ; CPU:$D9A2 PRG:19A2 E2 E3 E3 E3 E5 E3 E5 24
|
||
.byte $E3, $E5, $24, $E3, $E3, $E3, $E5, $E3 ; CPU:$D9AA PRG:19AA E3 E5 24 E3 E3 E3 E5 E3
|
||
.byte $E3, $E3, $E5, $E3, $E3, $E3, $E3, $E5 ; CPU:$D9B2 PRG:19B2 E3 E3 E5 E3 E3 E3 E3 E5
|
||
.byte $21, $02, $1B, $E3, $E4, $E3, $E5, $E3 ; CPU:$D9BA PRG:19BA 21 02 1B E3 E4 E3 E5 E3
|
||
.byte $F2, $E3, $E5, $E3, $E3, $E2, $E3, $E3 ; CPU:$D9C2 PRG:19C2 F2 E3 E5 E3 E3 E2 E3 E3
|
||
.byte $E2, $E3, $E3, $E3, $E5, $E3, $E3, $E3 ; CPU:$D9CA PRG:19CA E2 E3 E3 E3 E5 E3 E3 E3
|
||
.byte $E5, $E3, $F2, $E3, $E3, $E5, $21, $22 ; CPU:$D9D2 PRG:19D2 E5 E3 F2 E3 E3 E5 21 22
|
||
.byte $1B, $E6, $E3, $E3, $E7, $EB, $24, $E6 ; CPU:$D9DA PRG:19DA 1B E6 E3 E3 E7 EB 24 E6
|
||
.byte $E7, $E6, $E3, $E7, $E6, $E3, $E7, $E6 ; CPU:$D9E2 PRG:19E2 E7 E6 E3 E7 E6 E3 E7 E6
|
||
.byte $E3, $E3, $E7, $E6, $E3, $E3, $E7, $EB ; CPU:$D9EA PRG:19EA E3 E3 E7 E6 E3 E3 E7 EB
|
||
.byte $24, $E6, $E3, $E7, $21, $4C, $12, $E0 ; CPU:$D9F2 PRG:19F2 24 E6 E3 E7 21 4C 12 E0
|
||
.byte $E1, $E1, $E2, $E0, $E2, $E0, $E1, $E1 ; CPU:$D9FA PRG:19FA E1 E1 E2 E0 E2 E0 E1 E1
|
||
.byte $E2, $E8, $24, $E0, $E2, $E0, $E1, $E1 ; CPU:$DA02 PRG:1A02 E2 E8 24 E0 E2 E0 E1 E1
|
||
.byte $E2, $21, $6C, $12, $E3, $E3, $E3, $E7 ; CPU:$DA0A PRG:1A0A E2 21 6C 12 E3 E3 E3 E7
|
||
.byte $E3, $E5, $E3, $F5, $F6, $E7, $E3, $F3 ; CPU:$DA12 PRG:1A12 E3 E5 E3 F5 F6 E7 E3 F3
|
||
.byte $E3, $E5, $E6, $E3, $E3, $E7, $21, $8C ; CPU:$DA1A PRG:1A1A E3 E5 E6 E3 E3 E7 21 8C
|
||
.byte $12, $E3, $E3, $EF, $24, $E3, $E5, $E3 ; CPU:$DA22 PRG:1A22 12 E3 E3 EF 24 E3 E5 E3
|
||
.byte $24, $24, $24, $E3, $E3, $E3, $E5, $24 ; CPU:$DA2A PRG:1A2A 24 24 24 E3 E3 E3 E5 24
|
||
.byte $E3, $E5, $24, $21, $AC, $12, $E3, $E3 ; CPU:$DA32 PRG:1A32 E3 E5 24 21 AC 12 E3 E3
|
||
.byte $E1, $EA, $E3, $E5, $E3, $E9, $E3, $E2 ; CPU:$DA3A PRG:1A3A E1 EA E3 E5 E3 E9 E3 E2
|
||
.byte $E3, $E3, $E3, $E5, $24, $E3, $E5, $24 ; CPU:$DA42 PRG:1A42 E3 E3 E3 E5 24 E3 E5 24
|
||
.byte $21, $CC, $12, $E3, $E3, $EF, $24, $E3 ; CPU:$DA4A PRG:1A4A 21 CC 12 E3 E3 EF 24 E3
|
||
.byte $E5, $E3, $F3, $E3, $E5, $E3, $F2, $E3 ; CPU:$DA52 PRG:1A52 E5 E3 F3 E3 E5 E3 F2 E3
|
||
.byte $E5, $24, $E3, $E5, $24, $21, $EC, $12 ; CPU:$DA5A PRG:1A5A E5 24 E3 E5 24 21 EC 12
|
||
.byte $E6, $E7, $24, $24, $E6, $E7, $E6, $E7 ; CPU:$DA62 PRG:1A62 E6 E7 24 24 E6 E7 E6 E7
|
||
.byte $E6, $E7, $EB, $24, $E6, $E7, $24, $E6 ; CPU:$DA6A PRG:1A6A E6 E7 EB 24 E6 E7 24 E6
|
||
.byte $E7, $24, $22, $48, $10, $0A, $24, $24 ; CPU:$DA72 PRG:1A72 E7 24 22 48 10 0A 24 24
|
||
.byte $01, $25, $19, $15, $0A, $22, $0E, $1B ; CPU:$DA7A PRG:1A7A 01 25 19 15 0A 22 0E 1B
|
||
.byte $24, $10, $0A, $16, $0E, $22, $88, $10 ; CPU:$DA82 PRG:1A82 24 10 0A 16 0E 22 88 10
|
||
.byte $0B, $24, $24, $02, $25, $19, $15, $0A ; CPU:$DA8A PRG:1A8A 0B 24 24 02 25 19 15 0A
|
||
.byte $22, $0E, $1B, $24, $10, $0A, $16, $0E ; CPU:$DA92 PRG:1A92 22 0E 1B 24 10 0A 16 0E
|
||
.byte $22, $C8, $10, $0C, $24, $24, $0B, $0A ; CPU:$DA9A PRG:1A9A 22 C8 10 0C 24 24 0B 0A
|
||
.byte $15, $15, $18, $18, $17, $24, $24, $1D ; CPU:$DAA2 PRG:1AA2 15 15 18 18 17 24 24 1D
|
||
.byte $1B, $12, $19, $23, $49, $0E, $F4, $01 ; CPU:$DAAA PRG:1AAA 1B 12 19 23 49 0E F4 01
|
||
.byte $09, $08, $04, $24, $17, $12, $17, $1D ; CPU:$DAB2 PRG:1AB2 09 08 04 24 17 12 17 1D
|
||
.byte $0E, $17, $0D, $18, $00 ; CPU:$DABA PRG:1ABA 0E 17 0D 18 00
|
||
RunTitleMenuLoop:
|
||
jsr $C104 ; CPU:$DABF PRG:1ABF 20 04 C1
|
||
jsr $D90F ; CPU:$DAC2 PRG:1AC2 20 0F D9
|
||
lda #$00 ; CPU:$DAC5 PRG:1AC5 A9 00
|
||
sta $19 ; CPU:$DAC7 PRG:1AC7 85 19
|
||
RunTitleMenuLoop_Block:
|
||
jsr $F465 ; CPU:$DAC9 PRG:1AC9 20 65 F4
|
||
lda $19 ; CPU:$DACC PRG:1ACC A5 19
|
||
beq RunTitleMenuLoop_Block_3 ; CPU:$DACE PRG:1ACE F0 1F
|
||
jsr ApplySelectedGameMode ; CPU:$DAD0 PRG:1AD0 20 08 DB
|
||
jsr $E768 ; CPU:$DAD3 PRG:1AD3 20 68 E7
|
||
tax ; CPU:$DAD6 PRG:1AD6 AA
|
||
and #$10 ; CPU:$DAD7 PRG:1AD7 29 10
|
||
bne RunTitleMenuLoop_Block_2 ; CPU:$DAD9 PRG:1AD9 D0 13
|
||
txa ; CPU:$DADB PRG:1ADB 8A
|
||
and #$20 ; CPU:$DADC PRG:1ADC 29 20
|
||
beq RunTitleMenuLoop_Block_1 ; CPU:$DADE PRG:1ADE F0 0B
|
||
lda #$00 ; CPU:$DAE0 PRG:1AE0 A9 00
|
||
sta $19 ; CPU:$DAE2 PRG:1AE2 85 19
|
||
ldx $3F ; CPU:$DAE4 PRG:1AE4 A6 3F
|
||
lda GameModePlayerCountTable,x ; CPU:$DAE6 PRG:1AE6 BD 05 DB
|
||
sta $3F ; CPU:$DAE9 PRG:1AE9 85 3F
|
||
RunTitleMenuLoop_Block_1:
|
||
jmp RunTitleMenuLoop_Block ; CPU:$DAEB PRG:1AEB 4C CB DA
|
||
RunTitleMenuLoop_Block_2:
|
||
rts ; CPU:$DAEE PRG:1AEE 60
|
||
RunTitleMenuLoop_Block_3:
|
||
inc $3A ; CPU:$DAEF PRG:1AEF E6 3A
|
||
inc $40 ; CPU:$DAF1 PRG:1AF1 E6 40
|
||
lda #$00 ; CPU:$DAF3 PRG:1AF3 A9 00
|
||
sta $4015 ; CPU:$DAF5 PRG:1AF5 8D 15 40
|
||
sta $16 ; CPU:$DAF8 PRG:1AF8 85 16
|
||
jsr $F1F2 ; CPU:$DAFA PRG:1AFA 20 F2 F1
|
||
lda #$00 ; CPU:$DAFD PRG:1AFD A9 00
|
||
sta $3A ; CPU:$DAFF PRG:1AFF 85 3A
|
||
beq RunTitleMenuLoop ; CPU:$DB01 PRG:1B01 F0 BC
|
||
GameModePlayerCountTable:
|
||
ora ($02,x) ; CPU:$DB03 PRG:1B03 01 02
|
||
brk ; CPU:$DB05 PRG:1B05 00
|
||
ApplySelectedGameMode:
|
||
lda $3F ; CPU:$DB06 PRG:1B06 A5 3F
|
||
lsr a ; CPU:$DB08 PRG:1B08 4A
|
||
sta $16 ; CPU:$DB09 PRG:1B09 85 16
|
||
lda $3F ; CPU:$DB0B PRG:1B0B A5 3F
|
||
tax ; CPU:$DB0D PRG:1B0D AA
|
||
and #$01 ; CPU:$DB0E PRG:1B0E 29 01
|
||
sta $40 ; CPU:$DB10 PRG:1B10 85 40
|
||
lda StageDataPointerTableLo,x ; CPU:$DB12 PRG:1B12 BD 27 DB
|
||
sta $057B ; CPU:$DB15 PRG:1B15 8D 7B 05
|
||
lda #$2C ; CPU:$DB18 PRG:1B18 A9 2C
|
||
sta $0567 ; CPU:$DB1A PRG:1B1A 8D 67 05
|
||
ldx #$00 ; CPU:$DB1D PRG:1B1D A2 00
|
||
stx $055D ; CPU:$DB1F PRG:1B1F 8E 5D 05
|
||
jmp $CE2F ; CPU:$DB22 PRG:1B22 4C 2F CE
|
||
|
||
;===============================================================================
|
||
; Stage data tables
|
||
; CPU $DB27-$E3A3 / PRG $1B27-$23A3
|
||
; Mode selection, stage stream pointers, PPU command streams, object placement,
|
||
; boundary data, and stage setup pointer tables.
|
||
;===============================================================================
|
||
StageDataPointerTableLo:
|
||
GameModeInitialStageTable:
|
||
.byte $8C, $9C, $AC ; CPU:$DB25 PRG:1B25 8C 9C AC
|
||
StageStreamPointerLoTable:
|
||
.byte $4A, $59, $F2, $6C, $77, $88, $E1, $6C ; CPU:$DB28 PRG:1B28 4A 59 F2 6C 77 88 E1 6C
|
||
.byte $99, $03, $CA, $6C, $AD, $17, $E1, $6C ; CPU:$DB30 PRG:1B30 99 03 CA 6C AD 17 E1 6C
|
||
StageStreamPointerHiTable:
|
||
.byte $DB, $DB, $DB, $DB, $DB, $DB, $DB, $DB ; CPU:$DB38 PRG:1B38 DB DB DB DB DB DB DB DB
|
||
.byte $DB, $DC, $DB, $DB, $DB, $DC, $DB, $DB ; CPU:$DB40 PRG:1B40 DB DC DB DB DB DC DB DB
|
||
StageStream_00:
|
||
StageStream_00_Target:
|
||
.byte $2B, $DC, $39, $DD, $00, $00, $10, $06 ; CPU:$DB48 PRG:1B48 2B DC 39 DD 00 00 10 06
|
||
.byte $FF, $FF, $96, $DF, $02, $7A, $DE ; CPU:$DB50 PRG:1B50 FF FF 96 DF 02 7A DE
|
||
StageStream_01:
|
||
StageStream_01_Target:
|
||
.byte $2B, $DC, $39, $DD, $4B, $DD, $00, $00 ; CPU:$DB57 PRG:1B57 2B DC 39 DD 4B DD 00 00
|
||
.byte $18, $0C, $04, $0E, $FF, $FF, $A0, $DF ; CPU:$DB5F PRG:1B5F 18 0C 04 0E FF FF A0 DF
|
||
.byte $04, $86, $DE ; CPU:$DB67 PRG:1B67 04 86 DE
|
||
StageStream_02:
|
||
StageStream_03_Target:
|
||
StageStream_07_Target:
|
||
StageStream_0B_Target:
|
||
StageStream_0F_Target:
|
||
.byte $CA, $DC, $00, $00, $FF, $FF, $B0, $DF ; CPU:$DB6A PRG:1B6A CA DC 00 00 FF FF B0 DF
|
||
.byte $00, $9A, $DE ; CPU:$DB72 PRG:1B72 00 9A DE
|
||
StageStream_03:
|
||
StageStream_04_Target:
|
||
.byte $2B, $DC, $5E, $DD, $00, $00, $08, $06 ; CPU:$DB75 PRG:1B75 2B DC 5E DD 00 00 08 06
|
||
.byte $18, $0A, $FF, $FF, $B1, $DF, $06, $9E ; CPU:$DB7D PRG:1B7D 18 0A FF FF B1 DF 06 9E
|
||
.byte $DE ; CPU:$DB85 PRG:1B85 DE
|
||
StageStream_05_Target:
|
||
.byte $2B, $DC, $7D ; CPU:$DB86 PRG:1B86 2B DC 7D
|
||
StageStream_04:
|
||
.byte $DD, $00, $00, $04, $06, $12, $08, $FF ; CPU:$DB89 PRG:1B89 DD 00 00 04 06 12 08 FF
|
||
.byte $FF, $C1, $DF, $07, $BA, $DE ; CPU:$DB91 PRG:1B91 FF C1 DF 07 BA DE
|
||
StageStream_08_Target:
|
||
.byte $2B, $DC, $A3, $DD ; CPU:$DB97 PRG:1B97 2B DC A3 DD
|
||
StageStream_05:
|
||
.byte $00, $00, $06, $06, $14, $10, $FF, $0F ; CPU:$DB9B PRG:1B9B 00 00 06 06 14 10 FF 0F
|
||
.byte $0D, $01, $FF, $D4, $DF, $09, $DA, $DE ; CPU:$DBA3 PRG:1BA3 0D 01 FF D4 DF 09 DA DE
|
||
StageStream_0C_Target:
|
||
.byte $2B ; CPU:$DBAB PRG:1BAB 2B
|
||
StageStream_06:
|
||
.byte $DC, $CE, $DD, $00, $00, $04, $06, $10 ; CPU:$DBAC PRG:1BAC DC CE DD 00 00 04 06 10
|
||
.byte $0E, $FF, $08, $0E, $03, $0D, $09, $03 ; CPU:$DBB4 PRG:1BB4 0E FF 08 0E 03 0D 09 03
|
||
.byte $12, $08, $03, $17, $0D, $03, $FF, $E7 ; CPU:$DBBC PRG:1BBC 12 08 03 17 0D 03 FF E7
|
||
.byte $DF, $03, $02, $DF ; CPU:$DBC4 PRG:1BC4 DF 03 02 DF
|
||
StageStream_07:
|
||
StageStream_0A_Target:
|
||
.byte $2B, $DC, $5E, $DD, $00, $00, $10, $06 ; CPU:$DBC8 PRG:1BC8 2B DC 5E DD 00 00 10 06
|
||
.byte $1A, $0C, $FF, $08, $08, $01, $18, $04 ; CPU:$DBD0 PRG:1BD0 1A 0C FF 08 08 01 18 04
|
||
.byte $01, $FF, $B1, $DF, $06 ; CPU:$DBD8 PRG:1BD8 01 FF B1 DF 06
|
||
StageStream_08:
|
||
.byte $9E, $DE ; CPU:$DBDD PRG:1BDD 9E DE
|
||
StageStream_06_Target:
|
||
StageStream_0E_Target:
|
||
.byte $2B, $DC, $DB, $DD, $00, $00, $0E, $06 ; CPU:$DBDF PRG:1BDF 2B DC DB DD 00 00 0E 06
|
||
.byte $0C, $14, $FF, $FF, $F7 ; CPU:$DBE7 PRG:1BE7 0C 14 FF FF F7
|
||
StageStream_09:
|
||
.byte $DF, $06, $12, $DF ; CPU:$DBEC PRG:1BEC DF 06 12 DF
|
||
StageStream_02_Target:
|
||
.byte $2B, $DC, $01, $DE, $00, $00, $04, $08 ; CPU:$DBF0 PRG:1BF0 2B DC 01 DE 00 00 04 08
|
||
.byte $16, $10, $FF, $FF, $07, $E0, $09 ; CPU:$DBF8 PRG:1BF8 16 10 FF FF 07 E0 09
|
||
StageStream_0A:
|
||
.byte $2E, $DF ; CPU:$DBFF PRG:1BFF 2E DF
|
||
StageStream_09_Target:
|
||
.byte $2B, $DC, $32, $DE, $00, $00, $04, $10 ; CPU:$DC01 PRG:1C01 2B DC 32 DE 00 00 04 10
|
||
.byte $18, $10, $FF, $0E, $06, $01, $FF, $17 ; CPU:$DC09 PRG:1C09 18 10 FF 0E 06 01 FF 17
|
||
.byte $E0, $07, $56, $DF ; CPU:$DC11 PRG:1C11 E0 07 56 DF
|
||
StageStream_0B:
|
||
StageStream_0D_Target:
|
||
.byte $2B, $DC, $5B, $DE, $00, $00, $04, $08 ; CPU:$DC15 PRG:1C15 2B DC 5B DE 00 00 04 08
|
||
.byte $0E, $10, $FF, $10, $07, $01, $FF, $2A ; CPU:$DC1D PRG:1C1D 0E 10 FF 10 07 01 FF 2A
|
||
.byte $E0, $07, $76, $DF ; CPU:$DC25 PRG:1C25 E0 07 76 DF
|
||
StagePpuData_Common:
|
||
.byte $23, $40, $88, $39, $38, $39, $38, $39 ; CPU:$DC29 PRG:1C29 23 40 88 39 38 39 38 39
|
||
.byte $38, $39, $33, $24, $24, $24, $24, $24 ; CPU:$DC31 PRG:1C31 38 39 33 24 24 24 24 24
|
||
.byte $24, $24, $24, $24, $24, $24, $24, $24 ; CPU:$DC39 PRG:1C39 24 24 24 24 24 24 24 24
|
||
.byte $24, $24, $24, $30, $38, $39, $38, $39 ; CPU:$DC41 PRG:1C41 24 24 24 30 38 39 38 39
|
||
.byte $38, $39, $38, $3C, $3B, $3C, $3B, $3C ; CPU:$DC49 PRG:1C49 38 39 38 3C 3B 3C 3B 3C
|
||
.byte $3B, $3C, $3D, $58, $59, $5A, $5B, $58 ; CPU:$DC51 PRG:1C51 3B 3C 3D 58 59 5A 5B 58
|
||
.byte $59, $5A, $5B, $58, $59, $5A, $5B, $58 ; CPU:$DC59 PRG:1C59 59 5A 5B 58 59 5A 5B 58
|
||
.byte $59, $5A, $5B, $3A, $3B, $3C, $3B, $3C ; CPU:$DC61 PRG:1C61 59 5A 5B 3A 3B 3C 3B 3C
|
||
.byte $3B, $3C, $3B, $60, $61, $62, $63, $60 ; CPU:$DC69 PRG:1C69 3B 3C 3B 60 61 62 63 60
|
||
.byte $61, $62, $63, $5C, $5D, $5E, $5F, $5C ; CPU:$DC71 PRG:1C71 61 62 63 5C 5D 5E 5F 5C
|
||
.byte $5D, $5E, $5F, $5C, $5D, $5E, $5F, $5C ; CPU:$DC79 PRG:1C79 5D 5E 5F 5C 5D 5E 5F 5C
|
||
.byte $5D, $5E, $5F, $60, $61, $62, $63, $60 ; CPU:$DC81 PRG:1C81 5D 5E 5F 60 61 62 63 60
|
||
.byte $61, $62, $63, $5C, $5D, $5E, $5F, $5C ; CPU:$DC89 PRG:1C89 61 62 63 5C 5D 5E 5F 5C
|
||
.byte $5D, $5E, $5F, $5C, $5D, $5E, $5F, $5C ; CPU:$DC91 PRG:1C91 5D 5E 5F 5C 5D 5E 5F 5C
|
||
.byte $5D, $5E, $5F, $5C, $5D, $5E, $5F, $5C ; CPU:$DC99 PRG:1C99 5D 5E 5F 5C 5D 5E 5F 5C
|
||
.byte $5D, $5E, $5F, $5C, $5D, $5E, $5F, $5C ; CPU:$DCA1 PRG:1CA1 5D 5E 5F 5C 5D 5E 5F 5C
|
||
.byte $5D, $5E, $5F ; CPU:$DCA9 PRG:1CA9 5D 5E 5F
|
||
NametableHeaderPatternData:
|
||
.byte $40, $50, $50, $50, $50, $90, $A0, $A0 ; CPU:$DCAC PRG:1CAC 40 50 50 50 50 90 A0 A0
|
||
.byte $23, $F0, $10, $00, $00, $A0, $A0, $A0 ; CPU:$DCB4 PRG:1CB4 23 F0 10 00 00 A0 A0 A0
|
||
.byte $A0, $00, $00, $0A, $0A, $0A, $0A, $0A ; CPU:$DCBC PRG:1CBC A0 00 00 0A 0A 0A 0A 0A
|
||
.byte $0A, $0A, $0A, $00, $A3, $04, $04, $93 ; CPU:$DCC4 PRG:1CC4 0A 0A 0A 00 A3 04 04 93
|
||
.byte $94, $94, $94, $A3, $05, $04, $95, $96 ; CPU:$DCCC PRG:1CCC 94 94 94 A3 05 04 95 96
|
||
.byte $96, $96, $A2, $EA, $05, $93, $94, $94 ; CPU:$DCD4 PRG:1CD4 96 96 A2 EA 05 93 94 94
|
||
.byte $94, $94, $A2, $EB, $05, $95, $96, $96 ; CPU:$DCDC PRG:1CDC 94 94 A2 EB 05 95 96 96
|
||
.byte $96, $96, $A3, $34, $03, $93, $94, $94 ; CPU:$DCE4 PRG:1CE4 96 96 A3 34 03 93 94 94
|
||
.byte $A3, $35, $03, $95, $96, $96, $A3, $1A ; CPU:$DCEC PRG:1CEC A3 35 03 95 96 96 A3 1A
|
||
.byte $04, $93, $94, $94, $94, $A3, $1B, $04 ; CPU:$DCF4 PRG:1CF4 04 93 94 94 94 A3 1B 04
|
||
.byte $95, $96, $96, $96, $63, $80, $20, $97 ; CPU:$DCFC PRG:1CFC 95 96 96 96 63 80 20 97
|
||
.byte $23, $A0, $20, $98, $99, $98, $99, $98 ; CPU:$DD04 PRG:1D04 23 A0 20 98 99 98 99 98
|
||
.byte $99, $98, $99, $98, $99, $98, $99, $98 ; CPU:$DD0C PRG:1D0C 99 98 99 98 99 98 99 98
|
||
.byte $99, $98, $99, $98, $99, $98, $99, $98 ; CPU:$DD14 PRG:1D14 99 98 99 98 99 98 99 98
|
||
.byte $99, $98, $99, $98, $99, $98, $99, $98 ; CPU:$DD1C PRG:1D1C 99 98 99 98 99 98 99 98
|
||
.byte $99, $98, $99, $23, $C0, $08, $40, $50 ; CPU:$DD24 PRG:1D24 99 98 99 23 C0 08 40 50
|
||
.byte $50, $50, $50, $90, $A0, $A0, $63, $E8 ; CPU:$DD2C PRG:1D2C 50 50 50 90 A0 A0 63 E8
|
||
.byte $10, $FF, $00 ; CPU:$DD34 PRG:1D34 10 FF 00
|
||
StagePpuLayoutData:
|
||
.byte $22, $49, $0E, $30, $31, $32, $31, $32 ; CPU:$DD37 PRG:1D37 22 49 0E 30 31 32 31 32
|
||
.byte $31, $32, $31, $32, $31, $32, $31, $32 ; CPU:$DD3F PRG:1D3F 31 32 31 32 31 32 31 32
|
||
.byte $33, $00, $21, $57, $06, $30, $31, $32 ; CPU:$DD47 PRG:1D47 33 00 21 57 06 30 31 32
|
||
.byte $31, $32, $33, $21, $65, $06, $30, $31 ; CPU:$DD4F PRG:1D4F 31 32 33 21 65 06 30 31
|
||
.byte $32, $31, $32, $33, $00, $21, $90, $03 ; CPU:$DD57 PRG:1D57 32 31 32 33 00 21 90 03
|
||
.byte $30, $31, $33, $22, $26, $03, $30, $31 ; CPU:$DD5F PRG:1D5F 30 31 33 22 26 03 30 31
|
||
.byte $33, $22, $57, $03, $30, $31, $33, $22 ; CPU:$DD67 PRG:1D67 33 22 57 03 30 31 33 22
|
||
.byte $6C, $03, $30, $31, $33, $22, $F2, $03 ; CPU:$DD6F PRG:1D6F 6C 03 30 31 33 22 F2 03
|
||
.byte $30, $31, $33, $00, $20, $CB, $03, $30 ; CPU:$DD77 PRG:1D77 30 31 33 00 20 CB 03 30
|
||
.byte $31, $33, $A1, $6D, $03, $3E, $3F, $40 ; CPU:$DD7F PRG:1D7F 31 33 A1 6D 03 3E 3F 40
|
||
.byte $A1, $59, $04, $3E, $3F, $3F, $40, $A1 ; CPU:$DD87 PRG:1D87 A1 59 04 3E 3F 3F 40 A1
|
||
.byte $A5, $03, $3E, $3F, $40, $22, $AA, $03 ; CPU:$DD8F PRG:1D8F A5 03 3E 3F 40 22 AA 03
|
||
.byte $30, $31, $33, $22, $B3, $03, $30, $31 ; CPU:$DD97 PRG:1D97 30 31 33 22 B3 03 30 31
|
||
.byte $33, $00, $20, $E2, $02, $30, $33, $20 ; CPU:$DD9F PRG:1D9F 33 00 20 E2 02 30 33 20
|
||
.byte $FB, $02, $30, $33, $21, $57, $02, $30 ; CPU:$DDA7 PRG:1DA7 FB 02 30 33 21 57 02 30
|
||
.byte $33, $21, $93, $02, $30, $33, $22, $0B ; CPU:$DDAF PRG:1DAF 33 21 93 02 30 33 22 0B
|
||
.byte $02, $30, $33, $22, $47, $02, $30, $33 ; CPU:$DDB7 PRG:1DB7 02 30 33 22 47 02 30 33
|
||
.byte $22, $83, $02, $30, $33, $22, $CF, $04 ; CPU:$DDBF PRG:1DBF 22 83 02 30 33 22 CF 04
|
||
.byte $30, $31, $32, $33, $00, $22, $CA, $03 ; CPU:$DDC7 PRG:1DC7 30 31 32 33 00 22 CA 03
|
||
.byte $30, $31, $33, $22, $D2, $03, $30, $31 ; CPU:$DDCF PRG:1DCF 30 31 33 22 D2 03 30 31
|
||
.byte $33, $00, $21, $08, $04, $30, $31, $32 ; CPU:$DDD7 PRG:1DD7 33 00 21 08 04 30 31 32
|
||
.byte $33, $21, $14, $04, $30, $31, $32, $33 ; CPU:$DDDF PRG:1DDF 33 21 14 04 30 31 32 33
|
||
.byte $A1, $A5, $04, $3E, $3F, $3F, $40, $A1 ; CPU:$DDE7 PRG:1DE7 A1 A5 04 3E 3F 3F 40 A1
|
||
.byte $BA, $04, $3E, $3F, $3F, $40, $22, $6C ; CPU:$DDEF PRG:1DEF BA 04 3E 3F 3F 40 22 6C
|
||
.byte $06, $30, $31, $32, $31, $32, $33, $00 ; CPU:$DDF7 PRG:1DF7 06 30 31 32 31 32 33 00
|
||
.byte $22, $EE, $04, $30, $31, $32, $33, $20 ; CPU:$DDFF PRG:1DFF 22 EE 04 30 31 32 33 20
|
||
.byte $F9, $03, $30, $31, $33, $A1, $1A, $03 ; CPU:$DE07 PRG:1E07 F9 03 30 31 33 A1 1A 03
|
||
.byte $3F, $3F, $40, $21, $90, $03, $30, $31 ; CPU:$DE0F PRG:1E0F 3F 3F 40 21 90 03 30 31
|
||
.byte $33, $A1, $B1, $03, $3F, $3F, $40, $22 ; CPU:$DE17 PRG:1E17 33 A1 B1 03 3F 3F 40 22
|
||
.byte $28, $03, $30, $31, $33, $A2, $49, $03 ; CPU:$DE1F PRG:1E1F 28 03 30 31 33 A2 49 03
|
||
.byte $3F, $3F, $40, $20, $EA, $02, $30, $33 ; CPU:$DE27 PRG:1E27 3F 3F 40 20 EA 02 30 33
|
||
.byte $00, $A2, $6C, $03, $3E, $3F, $40, $A2 ; CPU:$DE2F PRG:1E2F 00 A2 6C 03 3E 3F 40 A2
|
||
.byte $73, $03, $3E, $3F, $40, $20, $E4, $04 ; CPU:$DE37 PRG:1E37 73 03 3E 3F 40 20 E4 04
|
||
.byte $30, $31, $32, $33, $20, $F8, $04, $30 ; CPU:$DE3F PRG:1E3F 30 31 32 33 20 F8 04 30
|
||
.byte $31, $32, $33, $21, $A8, $04, $30, $31 ; CPU:$DE47 PRG:1E47 31 32 33 21 A8 04 30 31
|
||
.byte $32, $33, $21, $B5, $04, $30, $31, $32 ; CPU:$DE4F PRG:1E4F 32 33 21 B5 04 30 31 32
|
||
.byte $33, $00, $22, $64, $02, $30, $33, $22 ; CPU:$DE57 PRG:1E57 33 00 22 64 02 30 33 22
|
||
.byte $08, $02, $30, $33, $21, $AC, $02, $30 ; CPU:$DE5F PRG:1E5F 08 02 30 33 21 AC 02 30
|
||
.byte $33, $21, $B4, $02, $30, $33, $22, $18 ; CPU:$DE67 PRG:1E67 33 21 B4 02 30 33 22 18
|
||
.byte $02, $30, $33, $22, $7C, $02, $30, $33 ; CPU:$DE6F PRG:1E6F 02 30 33 22 7C 02 30 33
|
||
.byte $00, $10, $C8, $48, $38, $FF, $B8, $CF ; CPU:$DE77 PRG:1E77 00 10 C8 48 38 FF B8 CF
|
||
.byte $CF, $8F, $E0, $E0, $98, $10, $C4, $48 ; CPU:$DE7F PRG:1E7F CF 8F E0 E0 98 10 C4 48
|
||
.byte $B8, $28, $3C, $FF, $B8, $E8, $58, $CF ; CPU:$DE87 PRG:1E87 B8 28 3C FF B8 E8 58 CF
|
||
.byte $CF, $8F, $4F, $57, $E0, $E0, $98, $58 ; CPU:$DE8F PRG:1E8F CF 8F 4F 57 E0 E0 98 58
|
||
.byte $60, $10, $FF, $DF, $EC, $10, $C8, $80 ; CPU:$DE97 PRG:1E97 60 10 FF DF EC 10 C8 80
|
||
.byte $30, $B8, $60, $90, $38, $FF, $98, $48 ; CPU:$DE9F PRG:1E9F 30 B8 60 90 38 FF 98 48
|
||
.byte $D0, $78, $A8, $CF, $CF, $5F, $87, $8F ; CPU:$DEA7 PRG:1EA7 D0 78 A8 CF CF 5F 87 8F
|
||
.byte $97, $B7, $E0, $E0, $68, $90, $98, $A0 ; CPU:$DEAF PRG:1EAF 97 B7 E0 E0 68 90 98 A0
|
||
.byte $C0, $10, $C8, $58, $68, $C8, $28, $50 ; CPU:$DEB7 PRG:1EB7 C0 10 C8 58 68 C8 28 50
|
||
.byte $98, $38, $FF, $70, $78, $D0, $30, $68 ; CPU:$DEBF PRG:1EBF 98 38 FF 70 78 D0 30 68
|
||
.byte $B0, $CF, $CF, $2F, $57, $4F, $67, $A7 ; CPU:$DEC7 PRG:1EC7 B0 CF CF 2F 57 4F 67 A7
|
||
.byte $A7, $E0, $E0, $38, $6C, $6C, $7C, $B0 ; CPU:$DECF PRG:1ECF A7 E0 E0 38 6C 6C 7C B0
|
||
.byte $B0, $10, $C8, $12, $DA, $BA, $9A, $5A ; CPU:$DED7 PRG:1ED7 B0 10 C8 12 DA BA 9A 5A
|
||
.byte $3A, $1A, $7A, $38, $FF, $1E, $E6, $C6 ; CPU:$DEDF PRG:1EDF 3A 1A 7A 38 FF 1E E6 C6
|
||
.byte $A6, $66, $46, $26, $96, $CF, $CF, $37 ; CPU:$DEE7 PRG:1EE7 A6 66 46 26 96 CF CF 37
|
||
.byte $37, $4F, $5F, $7F, $8F, $9F, $AF, $E0 ; CPU:$DEEF PRG:1EEF 37 4F 5F 7F 8F 9F AF E0
|
||
.byte $E0, $40, $40, $58, $68, $88, $98, $A8 ; CPU:$DEF7 PRG:1EF7 E0 40 40 58 68 88 98 A8
|
||
.byte $B8, $10, $C8, $52, $92, $38, $FF, $66 ; CPU:$DEFF PRG:1EFF B8 10 C8 52 92 38 FF 66
|
||
.byte $A6, $CF, $CF, $AF, $AF, $E0, $E0, $B8 ; CPU:$DF07 PRG:1F07 A6 CF CF AF AF E0 E0 B8
|
||
.byte $B8, $10, $C8, $40, $A0, $28, $D0, $60 ; CPU:$DF0F PRG:1F0F B8 10 C8 40 A0 28 D0 60
|
||
.byte $38, $FF, $60, $C0, $30, $D8, $90, $CF ; CPU:$DF17 PRG:1F17 38 FF 60 C0 30 D8 90 CF
|
||
.byte $CF, $3F, $3F, $67, $67, $97, $E0, $E0 ; CPU:$DF1F PRG:1F1F CF 3F 3F 67 67 97 E0 E0
|
||
.byte $48, $48, $88, $88, $A0, $10, $C8, $50 ; CPU:$DF27 PRG:1F27 48 48 88 88 A0 10 C8 50
|
||
.byte $C8, $88, $40, $70, $D0, $88, $48, $38 ; CPU:$DF2F PRG:1F2F C8 88 40 70 D0 88 48 38
|
||
.byte $FF, $60, $E0, $98, $58, $90, $D8, $90 ; CPU:$DF37 PRG:1F37 FF 60 E0 98 58 90 D8 90
|
||
.byte $50, $CF, $CF, $37, $37, $5F, $87, $B7 ; CPU:$DF3F PRG:1F3F 50 CF CF 37 37 5F 87 B7
|
||
.byte $3C, $64, $8C, $E0, $E0, $40, $40, $68 ; CPU:$DF47 PRG:1F47 3C 64 8C E0 E0 40 40 68
|
||
.byte $90, $C0, $60, $80, $A8, $10, $C8, $20 ; CPU:$DF4F PRG:1F4F 90 C0 60 80 A8 10 C8 20
|
||
.byte $C0, $40, $A8, $60, $98, $38, $FF, $40 ; CPU:$DF57 PRG:1F57 C0 40 A8 60 98 38 FF 40
|
||
.byte $E0, $60, $C8, $68, $A0, $CF, $CF, $37 ; CPU:$DF5F PRG:1F5F E0 60 C8 68 A0 CF CF 37
|
||
.byte $37, $67, $67, $97, $97, $E0, $E0, $40 ; CPU:$DF67 PRG:1F67 37 67 67 97 97 E0 E0 40
|
||
.byte $40, $70, $70, $B0, $B0, $10, $C8, $20 ; CPU:$DF6F PRG:1F6F 40 70 70 B0 B0 10 C8 20
|
||
.byte $40, $60, $A0, $C0, $E0, $38, $FF, $30 ; CPU:$DF77 PRG:1F77 40 60 A0 C0 E0 38 FF 30
|
||
.byte $50, $70, $B0, $D0, $F0, $CF, $CF, $97 ; CPU:$DF7F PRG:1F7F 50 70 B0 D0 F0 CF CF 97
|
||
.byte $7F, $67, $67, $7F, $97, $E0, $E0, $A0 ; CPU:$DF87 PRG:1F87 7F 67 67 7F 97 E0 E0 A0
|
||
.byte $88, $70, $70, $88, $A0, $03, $58, $78 ; CPU:$DF8F PRG:1F8F 88 70 70 88 A0 03 58 78
|
||
.byte $04, $78, $78, $04, $98, $78, $04, $05 ; CPU:$DF97 PRG:1F97 04 78 78 04 98 78 04 05
|
||
.byte $C8, $38, $05, $38, $40, $05, $58, $78 ; CPU:$DF9F PRG:1F9F C8 38 05 38 40 05 58 78
|
||
.byte $04, $78, $78, $04, $98, $78, $04, $00 ; CPU:$DFA7 PRG:1FA7 04 78 78 04 98 78 04 00
|
||
.byte $05, $94, $A0, $06, $84, $48, $05, $34 ; CPU:$DFAF PRG:1FAF 05 94 A0 06 84 48 05 34
|
||
.byte $70, $04, $64, $80, $04, $BC, $78, $04 ; CPU:$DFB7 PRG:1FB7 70 04 64 80 04 BC 78 04
|
||
.byte $06, $5C, $18, $06, $24, $50, $05, $64 ; CPU:$DFBF PRG:1FBF 06 5C 18 06 24 50 05 64
|
||
.byte $40, $05, $C4, $38, $05, $54, $90, $04 ; CPU:$DFC7 PRG:1FC7 40 05 C4 38 05 54 90 04
|
||
.byte $9C, $90, $04, $06, $10, $20, $06, $D8 ; CPU:$DFCF PRG:1FCF 9C 90 04 06 10 20 06 D8
|
||
.byte $20, $06, $B8, $38, $05, $98, $48, $05 ; CPU:$DFD7 PRG:1FD7 20 06 B8 38 05 98 48 05
|
||
.byte $58, $68, $05, $38, $78, $04, $05, $54 ; CPU:$DFDF PRG:1FDF 58 68 05 38 78 04 05 54
|
||
.byte $98, $05, $94, $98, $05, $6C, $39, $06 ; CPU:$DFE7 PRG:1FE7 98 05 94 98 05 6C 39 06
|
||
.byte $94, $31, $06, $BC, $59, $06, $05, $50 ; CPU:$DFEF PRG:1FEF 94 31 06 BC 59 06 05 50
|
||
.byte $28, $06, $A8, $28, $06, $24, $50, $06 ; CPU:$DFF7 PRG:1FF7 28 06 A8 28 06 24 50 06
|
||
.byte $CC, $50, $06, $70, $80, $04, $05, $50 ; CPU:$DFFF PRG:1FFF CC 50 06 70 80 04 05 50
|
||
.byte $20, $06, $C8, $20, $06, $84, $48, $05 ; CPU:$E007 PRG:2007 20 06 C8 20 06 84 48 05
|
||
.byte $44, $70, $05, $78, $A0, $04, $06, $28 ; CPU:$E00F PRG:200F 44 70 05 78 A0 04 06 28
|
||
.byte $20, $06, $C8, $20, $06, $48, $50, $05 ; CPU:$E017 PRG:2017 20 06 C8 20 06 48 50 05
|
||
.byte $B0, $50, $05, $5C, $80, $04, $94, $80 ; CPU:$E01F PRG:201F B0 50 05 5C 80 04 94 80
|
||
.byte $04, $06, $20, $80, $04, $40, $68, $05 ; CPU:$E027 PRG:2027 04 06 20 80 04 40 68 05
|
||
.byte $60, $50, $06, $A0, $50, $06, $C0, $68 ; CPU:$E02F PRG:202F 60 50 06 A0 50 06 C0 68
|
||
.byte $05, $E0, $80, $04 ; CPU:$E037 PRG:2037 05 E0 80 04
|
||
StageObjectPointerData:
|
||
.byte $08, $08, $F0, $08, $08, $00, $00, $00 ; CPU:$E03B PRG:203B 08 08 F0 08 08 00 00 00
|
||
.byte $00, $08, $08, $08, $00, $00, $01, $08 ; CPU:$E043 PRG:2043 00 08 08 08 00 00 01 08
|
||
.byte $08, $09, $00, $00, $FF, $08, $08, $07 ; CPU:$E04B PRG:204B 08 09 00 00 FF 08 08 07
|
||
.byte $FE, $00, $00, $06, $08, $08, $02, $00 ; CPU:$E053 PRG:2053 FE 00 00 06 08 08 02 00
|
||
.byte $00, $0A, $08, $08, $02, $00, $01, $0A ; CPU:$E05B PRG:205B 00 0A 08 08 02 00 01 0A
|
||
.byte $08, $09, $04, $00, $00, $0C, $08, $08 ; CPU:$E063 PRG:2063 08 09 04 00 00 0C 08 08
|
||
.byte $00, $00, $FE, $08, $08, $06, $FD, $FD ; CPU:$E06B PRG:206B 00 00 FE 08 08 06 FD FD
|
||
.byte $FD, $05, $05, $05, $08, $08, $08, $00 ; CPU:$E073 PRG:2073 FD 05 05 05 08 08 08 00
|
||
.byte $00, $00, $08, $08, $07, $00, $00, $FF ; CPU:$E07B PRG:207B 00 00 08 08 07 00 00 FF
|
||
.byte $08, $08, $09, $00, $00, $01, $0A, $08 ; CPU:$E083 PRG:2083 08 08 09 00 00 01 0A 08
|
||
.byte $08, $02, $00, $00, $06, $08, $08, $FE ; CPU:$E08B PRG:208B 08 02 00 00 06 08 08 FE
|
||
.byte $00, $00, $06, $08, $07, $FE, $00, $FF ; CPU:$E093 PRG:2093 00 00 06 08 07 FE 00 FF
|
||
.byte $04, $08, $08, $FC, $00, $00, $08, $08 ; CPU:$E09B PRG:209B 04 08 08 FC 00 00 08 08
|
||
.byte $0A, $00, $00, $02, $0B, $0B, $0B, $03 ; CPU:$E0A3 PRG:20A3 0A 00 00 02 0B 0B 0B 03
|
||
.byte $03, $03, $00, $00, $01, $02, $03, $04 ; CPU:$E0AB PRG:20AB 03 03 00 00 01 02 03 04
|
||
.byte $05, $00, $00, $01, $02, $03, $06, $07 ; CPU:$E0B3 PRG:20B3 05 00 00 01 02 03 06 07
|
||
.byte $00, $00, $01, $02, $03, $06, $08, $00 ; CPU:$E0BB PRG:20BB 00 00 01 02 03 06 08 00
|
||
.byte $09, $0A, $02, $0B, $0C, $05, $00, $00 ; CPU:$E0C3 PRG:20C3 09 0A 02 0B 0C 05 00 00
|
||
.byte $01, $02, $03, $04, $05, $00, $00, $01 ; CPU:$E0CB PRG:20CB 01 02 03 04 05 00 00 01
|
||
.byte $02, $0D, $0E, $05, $00, $1A, $1B, $1C ; CPU:$E0D3 PRG:20D3 02 0D 0E 05 00 1A 1B 1C
|
||
.byte $1D, $1E, $1F, $01, $1A, $1B, $20, $1D ; CPU:$E0DB PRG:20DB 1D 1E 1F 01 1A 1B 20 1D
|
||
.byte $1E, $FC, $00, $1A, $21, $22, $1D, $23 ; CPU:$E0E3 PRG:20E3 1E FC 00 1A 21 22 1D 23
|
||
.byte $24, $00, $00, $38, $35, $0D, $39, $37 ; CPU:$E0EB PRG:20EB 24 00 00 38 35 0D 39 37
|
||
.byte $00, $00, $34, $35, $03, $36, $37, $00 ; CPU:$E0F3 PRG:20F3 00 00 34 35 03 36 37 00
|
||
.byte $09, $3A, $35, $0B, $3B, $37, $00, $CE ; CPU:$E0FB PRG:20FB 09 3A 35 0B 3B 37 00 CE
|
||
.byte $CF, $D0, $D1, $D2, $D3, $00, $25, $26 ; CPU:$E103 PRG:2103 CF D0 D1 D2 D3 00 25 26
|
||
.byte $27, $28, $29, $2A, $01, $28, $29, $2C ; CPU:$E10B PRG:210B 27 28 29 2A 01 28 29 2C
|
||
.byte $25, $26, $2B, $00, $4C, $CC, $02, $4D ; CPU:$E113 PRG:2113 25 26 2B 00 4C CC 02 4D
|
||
.byte $CD, $05, $00, $4C, $2F, $22, $4D, $30 ; CPU:$E11B PRG:211B CD 05 00 4C 2F 22 4D 30
|
||
.byte $24, $07, $4C, $2F, $35, $4D, $30, $37 ; CPU:$E123 PRG:2123 24 07 4C 2F 35 4D 30 37
|
||
.byte $02, $4C, $2F, $27, $4D, $30, $2A, $07 ; CPU:$E12B PRG:212B 02 4C 2F 27 4D 30 2A 07
|
||
.byte $4C, $2F, $2B, $4D, $30, $2C, $00, $0F ; CPU:$E133 PRG:2133 4C 2F 2B 4D 30 2C 00 0F
|
||
.byte $10, $02, $11, $12, $05, $00, $0F, $10 ; CPU:$E13B PRG:213B 10 02 11 12 05 00 0F 10
|
||
.byte $02, $11, $19, $07, $00, $0F, $10, $02 ; CPU:$E143 PRG:2143 02 11 19 07 00 0F 10 02
|
||
.byte $11, $19, $08, $00, $13, $14, $02, $15 ; CPU:$E14B PRG:214B 11 19 08 00 13 14 02 15
|
||
.byte $16, $05, $00, $0F, $10, $02, $11, $12 ; CPU:$E153 PRG:2153 16 05 00 0F 10 02 11 12
|
||
.byte $05, $03, $13, $17, $02, $15, $18, $05 ; CPU:$E15B PRG:215B 05 03 13 17 02 15 18 05
|
||
.byte $04, $13, $2D, $1C, $15, $2E, $1F, $05 ; CPU:$E163 PRG:2163 04 13 2D 1C 15 2E 1F 05
|
||
.byte $13, $2D, $20, $15, $2E, $FC, $04, $13 ; CPU:$E16B PRG:216B 13 2D 20 15 2E FC 04 13
|
||
.byte $2F, $22, $15, $30, $24, $00, $13, $3C ; CPU:$E173 PRG:2173 2F 22 15 30 24 00 13 3C
|
||
.byte $35, $15, $3D, $37, $00, $0F, $40, $35 ; CPU:$E17B PRG:217B 35 15 3D 37 00 0F 40 35
|
||
.byte $11, $41, $37, $03, $13, $3E, $35, $15 ; CPU:$E183 PRG:2183 11 41 37 03 13 3E 35 15
|
||
.byte $3F, $37, $00, $D4, $D5, $D0, $D6, $D7 ; CPU:$E18B PRG:218B 3F 37 00 D4 D5 D0 D6 D7
|
||
.byte $D3, $00, $25, $31, $27, $32, $33, $2A ; CPU:$E193 PRG:2193 D3 00 25 31 27 32 33 2A
|
||
.byte $02, $25, $31, $27, $32, $33, $2A, $00 ; CPU:$E19B PRG:219B 02 25 31 27 32 33 2A 00
|
||
.byte $FC, $48, $42, $FC, $49, $43, $00, $FC ; CPU:$E1A3 PRG:21A3 FC 48 42 FC 49 43 00 FC
|
||
.byte $48, $44, $FC, $49, $45, $00, $FC, $4A ; CPU:$E1AB PRG:21AB 48 44 FC 49 45 00 FC 4A
|
||
.byte $46, $FC, $4B, $47, $00, $FC, $A4, $A5 ; CPU:$E1B3 PRG:21B3 46 FC 4B 47 00 FC A4 A5
|
||
.byte $FC, $A6, $A7, $08, $FC, $71, $FC, $FC ; CPU:$E1BB PRG:21BB FC A6 A7 08 FC 71 FC FC
|
||
.byte $72, $73, $08, $FC, $74, $FC, $FC, $75 ; CPU:$E1C3 PRG:21C3 72 73 08 FC 74 FC FC 75
|
||
.byte $76, $08, $FC, $71, $77, $FC, $72, $73 ; CPU:$E1CB PRG:21CB 76 08 FC 71 77 FC 72 73
|
||
.byte $08, $FC, $74, $77, $FC, $75, $76, $08 ; CPU:$E1D3 PRG:21D3 08 FC 74 77 FC 75 76 08
|
||
.byte $FC, $71, $78, $FC, $72, $73, $08, $FC ; CPU:$E1DB PRG:21DB FC 71 78 FC 72 73 08 FC
|
||
.byte $74, $78, $FC, $75, $76, $08, $FC, $71 ; CPU:$E1E3 PRG:21E3 74 78 FC 75 76 08 FC 71
|
||
.byte $79, $FC, $72, $73, $08, $FC, $74, $79 ; CPU:$E1EB PRG:21EB 79 FC 72 73 08 FC 74 79
|
||
.byte $FC, $75, $76, $00, $4E, $4F, $50, $51 ; CPU:$E1F3 PRG:21F3 FC 75 76 00 4E 4F 50 51
|
||
.byte $52, $53, $00, $4E, $4F, $50, $51, $5E ; CPU:$E1FB PRG:21FB 52 53 00 4E 4F 50 51 5E
|
||
.byte $58, $00, $4E, $4F, $50, $51, $5E, $5D ; CPU:$E203 PRG:2203 58 00 4E 4F 50 51 5E 5D
|
||
.byte $00, $54, $55, $50, $56, $57, $53, $00 ; CPU:$E20B PRG:220B 00 54 55 50 56 57 53 00
|
||
.byte $4E, $4F, $50, $51, $52, $53, $00, $59 ; CPU:$E213 PRG:2213 4E 4F 50 51 52 53 00 59
|
||
.byte $5A, $50, $5B, $5C, $53, $00, $FC, $5F ; CPU:$E21B PRG:221B 5A 50 5B 5C 53 00 FC 5F
|
||
.byte $60, $FC, $61, $62, $06, $63, $64, $60 ; CPU:$E223 PRG:2223 60 FC 61 62 06 63 64 60
|
||
.byte $FC, $65, $62, $00, $66, $67, $60, $68 ; CPU:$E22B PRG:222B FC 65 62 00 66 67 60 68
|
||
.byte $69, $62, $00, $6A, $67, $60, $6B, $69 ; CPU:$E233 PRG:2233 69 62 00 6A 67 60 6B 69
|
||
.byte $62, $00, $FC, $6C, $6D, $FC, $6E, $6F ; CPU:$E23B PRG:223B 62 00 FC 6C 6D FC 6E 6F
|
||
.byte $00, $FC, $6C, $6D, $FC, $6E, $70 ; CPU:$E243 PRG:2243 00 FC 6C 6D FC 6E 70
|
||
StageBoundaryDataA:
|
||
.byte $AF, $B6, $BD, $B6, $C4, $CB, $D2, $CB ; CPU:$E24A PRG:224A AF B6 BD B6 C4 CB D2 CB
|
||
.byte $D9, $E0, $E7, $E0, $EE, $F5, $FC, $F5 ; CPU:$E252 PRG:2252 D9 E0 E7 E0 EE F5 FC F5
|
||
.byte $0A, $0A, $0A, $0A, $11, $11, $11, $11 ; CPU:$E25A PRG:225A 0A 0A 0A 0A 11 11 11 11
|
||
.byte $18, $18, $18, $18, $1F, $1F, $1F, $1F ; CPU:$E262 PRG:2262 18 18 18 18 1F 1F 1F 1F
|
||
.byte $26, $26, $26, $26, $2D, $2D, $2D, $2D ; CPU:$E26A PRG:226A 26 26 26 26 2D 2D 2D 2D
|
||
.byte $34, $34, $34, $34, $3B, $42, $49, $42 ; CPU:$E272 PRG:2272 34 34 34 34 3B 42 49 42
|
||
.byte $50, $57, $5E, $57, $65, $6C, $73, $6C ; CPU:$E27A PRG:227A 50 57 5E 57 65 6C 73 6C
|
||
.byte $7A, $81, $88, $81, $96, $96, $96, $96 ; CPU:$E282 PRG:2282 7A 81 88 81 96 96 96 96
|
||
.byte $9D, $9D, $9D, $9D, $A4, $AB, $B2, $AB ; CPU:$E28A PRG:228A 9D 9D 9D 9D A4 AB B2 AB
|
||
.byte $B9, $A4, $B9, $A4 ; CPU:$E292 PRG:2292 B9 A4 B9 A4
|
||
StageBoundaryDataB:
|
||
.byte $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0 ; CPU:$E296 PRG:2296 E0 E0 E0 E0 E0 E0 E0 E0
|
||
.byte $E0, $E0, $E0, $E0, $E0, $E0, $E0, $E0 ; CPU:$E29E PRG:229E E0 E0 E0 E0 E0 E0 E0 E0
|
||
.byte $E1, $E1, $E1, $E1, $E1, $E1, $E1, $E1 ; CPU:$E2A6 PRG:22A6 E1 E1 E1 E1 E1 E1 E1 E1
|
||
.byte $E1, $E1, $E1, $E1, $E1, $E1, $E1, $E1 ; CPU:$E2AE PRG:22AE E1 E1 E1 E1 E1 E1 E1 E1
|
||
.byte $E1, $E1, $E1, $E1, $E1, $E1, $E1, $E1 ; CPU:$E2B6 PRG:22B6 E1 E1 E1 E1 E1 E1 E1 E1
|
||
.byte $E1, $E1, $E1, $E1, $E1, $E1, $E1, $E1 ; CPU:$E2BE PRG:22BE E1 E1 E1 E1 E1 E1 E1 E1
|
||
.byte $E1, $E1, $E1, $E1, $E1, $E1, $E1, $E1 ; CPU:$E2C6 PRG:22C6 E1 E1 E1 E1 E1 E1 E1 E1
|
||
.byte $E1, $E1, $E1, $E1, $E1, $E1, $E1, $E1 ; CPU:$E2CE PRG:22CE E1 E1 E1 E1 E1 E1 E1 E1
|
||
.byte $E1, $E1, $E1, $E1, $E1, $E1, $E1, $E1 ; CPU:$E2D6 PRG:22D6 E1 E1 E1 E1 E1 E1 E1 E1
|
||
.byte $E1, $E1, $E1, $E1 ; CPU:$E2DE PRG:22DE E1 E1 E1 E1
|
||
StageObjectTypeData:
|
||
.byte $81, $81, $8F, $81, $F5, $F5, $03, $F5 ; CPU:$E2E2 PRG:22E2 81 81 8F 81 F5 F5 03 F5
|
||
StageObjectXData:
|
||
.byte $E1, $E1, $E1, $E1, $E0, $E0, $E1, $E0 ; CPU:$E2EA PRG:22EA E1 E1 E1 E1 E0 E0 E1 E0
|
||
StageObjectYData:
|
||
.byte $F8, $FF, $06, $FF, $0D, $14, $1B, $14 ; CPU:$E2F2 PRG:22F2 F8 FF 06 FF 0D 14 1B 14
|
||
.byte $3E, $3E, $22, $29, $30, $30, $30, $30 ; CPU:$E2FA PRG:22FA 3E 3E 22 29 30 30 30 30
|
||
.byte $C0, $C0, $C0, $C0, $C0, $C7, $C0, $C7 ; CPU:$E302 PRG:2302 C0 C0 C0 C0 C0 C7 C0 C7
|
||
.byte $CE, $D5, $CE, $D5, $DC, $E3, $DC, $E3 ; CPU:$E30A PRG:230A CE D5 CE D5 DC E3 DC E3
|
||
.byte $EA, $F1, $EA, $F1, $3E, $45, $3E, $45 ; CPU:$E312 PRG:2312 EA F1 EA F1 3E 45 3E 45
|
||
.byte $37, $37, $37, $37 ; CPU:$E31A PRG:231A 37 37 37 37
|
||
StageObjectAttributeData:
|
||
.byte $E1, $E1, $E2, $E1, $E2, $E2, $E2, $E2 ; CPU:$E31E PRG:231E E1 E1 E2 E1 E2 E2 E2 E2
|
||
.byte $E2, $E2, $E2, $E2, $E2, $E2, $E2, $E2 ; CPU:$E326 PRG:2326 E2 E2 E2 E2 E2 E2 E2 E2
|
||
.byte $E1, $E1, $E1, $E1, $E1, $E1, $E1, $E1 ; CPU:$E32E PRG:232E E1 E1 E1 E1 E1 E1 E1 E1
|
||
.byte $E1, $E1, $E1, $E1, $E1, $E1, $E1, $E1 ; CPU:$E336 PRG:2336 E1 E1 E1 E1 E1 E1 E1 E1
|
||
.byte $E1, $E1, $E1, $E1, $E2, $E2, $E2, $E2 ; CPU:$E33E PRG:233E E1 E1 E1 E1 E2 E2 E2 E2
|
||
.byte $E2, $E2, $E2, $E2 ; CPU:$E346 PRG:2346 E2 E2 E2 E2
|
||
StageObjectDataTableA:
|
||
.byte $44, $2C, $00 ; CPU:$E34A PRG:234A 44 2C 00
|
||
StageObjectDataTableB:
|
||
.byte $00, $00, $04 ; CPU:$E34D PRG:234D 00 00 04
|
||
StageObjectDataTableC:
|
||
.byte $24, $08, $00, $00, $FC, $FC, $FE, $FC ; CPU:$E350 PRG:2350 24 08 00 00 FC FC FE FC
|
||
.byte $00, $7B, $FC, $FC, $7C, $FC, $FC, $00 ; CPU:$E358 PRG:2358 00 7B FC FC 7C FC FC 00
|
||
.byte $7D, $7E, $FC, $7F, $80, $FC, $00, $81 ; CPU:$E360 PRG:2360 7D 7E FC 7F 80 FC 00 81
|
||
.byte $82, $83, $84, $85, $86, $00, $87, $88 ; CPU:$E368 PRG:2368 82 83 84 85 86 00 87 88
|
||
.byte $FC, $89, $8A, $FC, $00, $8B, $8C, $FC ; CPU:$E370 PRG:2370 FC 89 8A FC 00 8B 8C FC
|
||
.byte $8D, $8E, $FC, $00, $8F, $90, $FC, $FC ; CPU:$E378 PRG:2378 8D 8E FC 00 8F 90 FC FC
|
||
.byte $FC, $FC ; CPU:$E380 PRG:2380 FC FC
|
||
StageObjectDataTableD:
|
||
.byte $55, $5A, $61, $68, $6F, $76, $7D ; CPU:$E382 PRG:2382 55 5A 61 68 6F 76 7D
|
||
StageObjectDataTableE:
|
||
.byte $E3, $E3, $E3, $E3, $E3, $E3, $E3 ; CPU:$E389 PRG:2389 E3 E3 E3 E3 E3 E3 E3
|
||
StageSetupPointerLoTable:
|
||
.byte $20, $38, $50, $68, $80, $98, $B0, $C8 ; CPU:$E390 PRG:2390 20 38 50 68 80 98 B0 C8
|
||
.byte $08 ; CPU:$E398 PRG:2398 08
|
||
StageSetupPointerHiTable:
|
||
.byte $20, $38, $C8, $B0, $98, $80, $68, $50 ; CPU:$E399 PRG:2399 20 38 C8 B0 98 80 68 50
|
||
.byte $08 ; CPU:$E3A1 PRG:23A1 08
|
||
|
||
; RenderObjectSprites
|
||
; Purpose: select object animation streams and emit six OAM sprite records.
|
||
; Inputs: X = object slot; object state arrays and frame counter in RAM.
|
||
; Returns: selected OAM buffer updated; A/Y modified; X restored.
|
||
RenderObjectSprites:
|
||
lda StageSetupPointerLoTable,x ; CPU:$E3A2 PRG:23A2 BD 92 E3
|
||
sta $1F ; CPU:$E3A5 PRG:23A5 85 1F
|
||
lda $19 ; CPU:$E3A7 PRG:23A7 A5 19
|
||
lsr a ; CPU:$E3A9 PRG:23A9 4A
|
||
bcc RenderObjectSprites_Block ; CPU:$E3AA PRG:23AA 90 05
|
||
lda StageSetupPointerHiTable,x ; CPU:$E3AC PRG:23AC BD 9B E3
|
||
sta $1F ; CPU:$E3AF PRG:23AF 85 1F
|
||
RenderObjectSprites_Block:
|
||
lda #$02 ; CPU:$E3B1 PRG:23B1 A9 02
|
||
sta $20 ; CPU:$E3B3 PRG:23B3 85 20
|
||
lda $88,x ; CPU:$E3B5 PRG:23B5 B5 88
|
||
bpl RenderObjectSprites_Block_3 ; CPU:$E3B7 PRG:23B7 10 14
|
||
cmp #$FF ; CPU:$E3B9 PRG:23B9 C9 FF
|
||
beq RenderObjectSprites_Block_1 ; CPU:$E3BB PRG:23BB F0 03
|
||
jmp RenderLargeObjectSprites ; CPU:$E3BD PRG:23BD 4C D5 E4
|
||
RenderObjectSprites_Block_1:
|
||
ldy #$14 ; CPU:$E3C0 PRG:23C0 A0 14
|
||
RenderObjectSprites_Block_2:
|
||
lda #$F0 ; CPU:$E3C2 PRG:23C2 A9 F0
|
||
sta ($1F),y ; CPU:$E3C4 PRG:23C4 91 1F
|
||
dey ; CPU:$E3C6 PRG:23C6 88
|
||
dey ; CPU:$E3C7 PRG:23C7 88
|
||
dey ; CPU:$E3C8 PRG:23C8 88
|
||
dey ; CPU:$E3C9 PRG:23C9 88
|
||
bpl RenderObjectSprites_Block_2 ; CPU:$E3CA PRG:23CA 10 F6
|
||
rts ; CPU:$E3CC PRG:23CC 60
|
||
RenderObjectSprites_Block_3:
|
||
cpx #$08 ; CPU:$E3CD PRG:23CD E0 08
|
||
beq RenderObjectSprites_Block_5 ; CPU:$E3CF PRG:23CF F0 48
|
||
lda $7F,x ; CPU:$E3D1 PRG:23D1 B5 7F
|
||
asl a ; CPU:$E3D3 PRG:23D3 0A
|
||
asl a ; CPU:$E3D4 PRG:23D4 0A
|
||
adc $0436,x ; CPU:$E3D5 PRG:23D5 7D 36 04
|
||
cpx #$02 ; CPU:$E3D8 PRG:23D8 E0 02
|
||
bcs RenderObjectSprites_Block_4 ; CPU:$E3DA PRG:23DA B0 2A
|
||
ldy $88,x ; CPU:$E3DC PRG:23DC B4 88
|
||
adc $E34C,y ; CPU:$E3DE PRG:23DE 79 4C E3
|
||
tay ; CPU:$E3E1 PRG:23E1 A8
|
||
lda $E24C,y ; CPU:$E3E2 PRG:23E2 B9 4C E2
|
||
sta $1D ; CPU:$E3E5 PRG:23E5 85 1D
|
||
lda $E298,y ; CPU:$E3E7 PRG:23E7 B9 98 E2
|
||
sta $1E ; CPU:$E3EA PRG:23EA 85 1E
|
||
lda $BD,x ; CPU:$E3EC PRG:23EC B5 BD
|
||
beq RenderObjectSprites_Load ; CPU:$E3EE PRG:23EE F0 37
|
||
ldy $88,x ; CPU:$E3F0 PRG:23F0 B4 88
|
||
lda $E34F,y ; CPU:$E3F2 PRG:23F2 B9 4F E3
|
||
adc $0436,x ; CPU:$E3F5 PRG:23F5 7D 36 04
|
||
tay ; CPU:$E3F8 PRG:23F8 A8
|
||
lda $E2E4,y ; CPU:$E3F9 PRG:23F9 B9 E4 E2
|
||
sta $1D ; CPU:$E3FC PRG:23FC 85 1D
|
||
lda $E2EC,y ; CPU:$E3FE PRG:23FE B9 EC E2
|
||
sta $1E ; CPU:$E401 PRG:2401 85 1E
|
||
jmp RenderObjectSprites_Load ; CPU:$E403 PRG:2403 4C 29 E4
|
||
RenderObjectSprites_Block_4:
|
||
ldy $88,x ; CPU:$E406 PRG:2406 B4 88
|
||
clc ; CPU:$E408 PRG:2408 18
|
||
adc $E352,y ; CPU:$E409 PRG:2409 79 52 E3
|
||
tay ; CPU:$E40C PRG:240C A8
|
||
lda $E2F4,y ; CPU:$E40D PRG:240D B9 F4 E2
|
||
sta $1D ; CPU:$E410 PRG:2410 85 1D
|
||
lda $E320,y ; CPU:$E412 PRG:2412 B9 20 E3
|
||
sta $1E ; CPU:$E415 PRG:2415 85 1E
|
||
bne RenderObjectSprites_Load ; CPU:$E417 PRG:2417 D0 0E
|
||
RenderObjectSprites_Block_5:
|
||
ldy $7F,x ; CPU:$E419 PRG:2419 B4 7F
|
||
bmi RenderObjectSprites_Block_1 ; CPU:$E41B PRG:241B 30 A3
|
||
lda $E384,y ; CPU:$E41D PRG:241D B9 84 E3
|
||
sta $1D ; CPU:$E420 PRG:2420 85 1D
|
||
lda $E38B,y ; CPU:$E422 PRG:2422 B9 8B E3
|
||
sta $1E ; CPU:$E425 PRG:2425 85 1E
|
||
RenderObjectSprites_Load:
|
||
lda $91,x ; CPU:$E427 PRG:2427 B5 91
|
||
sta $15 ; CPU:$E429 PRG:2429 85 15
|
||
lda $9A,x ; CPU:$E42B PRG:242B B5 9A
|
||
sta $12 ; CPU:$E42D PRG:242D 85 12
|
||
txa ; CPU:$E42F PRG:242F 8A
|
||
beq RenderObjectSprites_Block_7 ; CPU:$E430 PRG:2430 F0 10
|
||
cpx #$01 ; CPU:$E432 PRG:2432 E0 01
|
||
bne RenderObjectSprites_Block_6 ; CPU:$E434 PRG:2434 D0 04
|
||
lda #$01 ; CPU:$E436 PRG:2436 A9 01
|
||
bne RenderObjectSprites_Block_7 ; CPU:$E438 PRG:2438 D0 08
|
||
RenderObjectSprites_Block_6:
|
||
lda $0451,x ; CPU:$E43A PRG:243A BD 51 04
|
||
clc ; CPU:$E43D PRG:243D 18
|
||
adc #$02 ; CPU:$E43E PRG:243E 69 02
|
||
and #$03 ; CPU:$E440 PRG:2440 29 03
|
||
RenderObjectSprites_Block_7:
|
||
ldy $0448,x ; CPU:$E442 PRG:2442 BC 48 04
|
||
beq RenderObjectSprites_Block_8 ; CPU:$E445 PRG:2445 F0 02
|
||
ora #$40 ; CPU:$E447 PRG:2447 09 40
|
||
RenderObjectSprites_Block_8:
|
||
ldy $88,x ; CPU:$E449 PRG:2449 B4 88
|
||
cpy #$02 ; CPU:$E44B PRG:244B C0 02
|
||
bne RenderObjectSprites_Block_9 ; CPU:$E44D PRG:244D D0 08
|
||
ldy $7F,x ; CPU:$E44F PRG:244F B4 7F
|
||
cpy #$05 ; CPU:$E451 PRG:2451 C0 05
|
||
bne RenderObjectSprites_Block_9 ; CPU:$E453 PRG:2453 D0 02
|
||
eor #$40 ; CPU:$E455 PRG:2455 49 40
|
||
RenderObjectSprites_Block_9:
|
||
ldy $9A,x ; CPU:$E457 PRG:2457 B4 9A
|
||
cpy #$C9 ; CPU:$E459 PRG:2459 C0 C9
|
||
bcs RenderObjectSprites_Block_10 ; CPU:$E45B PRG:245B B0 04
|
||
cpx #$09 ; CPU:$E45D PRG:245D E0 09
|
||
bne RenderObjectSprites_Block_11 ; CPU:$E45F PRG:245F D0 02
|
||
RenderObjectSprites_Block_10:
|
||
ora #$20 ; CPU:$E461 PRG:2461 09 20
|
||
RenderObjectSprites_Block_11:
|
||
sta $14 ; CPU:$E463 PRG:2463 85 14
|
||
lda #$43 ; CPU:$E465 PRG:2465 A9 43
|
||
sta $21 ; CPU:$E467 PRG:2467 85 21
|
||
lda #$E0 ; CPU:$E469 PRG:2469 A9 E0
|
||
sta $22 ; CPU:$E46B PRG:246B 85 22
|
||
lda $0448,x ; CPU:$E46D PRG:246D BD 48 04
|
||
beq RenderObjectSprites_Block_12 ; CPU:$E470 PRG:2470 F0 08
|
||
lda #$79 ; CPU:$E472 PRG:2472 A9 79
|
||
sta $21 ; CPU:$E474 PRG:2474 85 21
|
||
lda #$E0 ; CPU:$E476 PRG:2476 A9 E0
|
||
sta $22 ; CPU:$E478 PRG:2478 85 22
|
||
RenderObjectSprites_Block_12:
|
||
ldy #$00 ; CPU:$E47A PRG:247A A0 00
|
||
lda ($1D),y ; CPU:$E47C PRG:247C B1 1D
|
||
inc $1D ; CPU:$E47E PRG:247E E6 1D
|
||
bne RenderObjectSprites_Block_13 ; CPU:$E480 PRG:2480 D0 02
|
||
inc $1E ; CPU:$E482 PRG:2482 E6 1E
|
||
RenderObjectSprites_Block_13:
|
||
asl a ; CPU:$E484 PRG:2484 0A
|
||
sta $13 ; CPU:$E485 PRG:2485 85 13
|
||
asl a ; CPU:$E487 PRG:2487 0A
|
||
adc $13 ; CPU:$E488 PRG:2488 65 13
|
||
adc $21 ; CPU:$E48A PRG:248A 65 21
|
||
sta $21 ; CPU:$E48C PRG:248C 85 21
|
||
bcc RenderObjectSprites_Block_14 ; CPU:$E48E PRG:248E 90 02
|
||
inc $22 ; CPU:$E490 PRG:2490 E6 22
|
||
RenderObjectSprites_Block_14:
|
||
txa ; CPU:$E492 PRG:2492 8A
|
||
pha ; CPU:$E493 PRG:2493 48
|
||
ldx #$05 ; CPU:$E494 PRG:2494 A2 05
|
||
ldy #$00 ; CPU:$E496 PRG:2496 A0 00
|
||
RenderObjectSprites_Block_15:
|
||
lda $12 ; CPU:$E498 PRG:2498 A5 12
|
||
clc ; CPU:$E49A PRG:249A 18
|
||
adc $E03D,x ; CPU:$E49B PRG:249B 7D 3D E0
|
||
sta ($1F),y ; CPU:$E49E PRG:249E 91 1F
|
||
sta $12 ; CPU:$E4A0 PRG:24A0 85 12
|
||
iny ; CPU:$E4A2 PRG:24A2 C8
|
||
sty $13 ; CPU:$E4A3 PRG:24A3 84 13
|
||
ldy #$00 ; CPU:$E4A5 PRG:24A5 A0 00
|
||
lda ($1D),y ; CPU:$E4A7 PRG:24A7 B1 1D
|
||
inc $1D ; CPU:$E4A9 PRG:24A9 E6 1D
|
||
bne RenderObjectSprites_Block_16 ; CPU:$E4AB PRG:24AB D0 02
|
||
inc $1E ; CPU:$E4AD PRG:24AD E6 1E
|
||
RenderObjectSprites_Block_16:
|
||
ldy $13 ; CPU:$E4AF PRG:24AF A4 13
|
||
sta ($1F),y ; CPU:$E4B1 PRG:24B1 91 1F
|
||
iny ; CPU:$E4B3 PRG:24B3 C8
|
||
lda $14 ; CPU:$E4B4 PRG:24B4 A5 14
|
||
sta ($1F),y ; CPU:$E4B6 PRG:24B6 91 1F
|
||
iny ; CPU:$E4B8 PRG:24B8 C8
|
||
sty $13 ; CPU:$E4B9 PRG:24B9 84 13
|
||
ldy #$00 ; CPU:$E4BB PRG:24BB A0 00
|
||
lda $15 ; CPU:$E4BD PRG:24BD A5 15
|
||
clc ; CPU:$E4BF PRG:24BF 18
|
||
adc ($21),y ; CPU:$E4C0 PRG:24C0 71 21
|
||
inc $21 ; CPU:$E4C2 PRG:24C2 E6 21
|
||
bne RenderObjectSprites_Block_17 ; CPU:$E4C4 PRG:24C4 D0 02
|
||
inc $22 ; CPU:$E4C6 PRG:24C6 E6 22
|
||
RenderObjectSprites_Block_17:
|
||
ldy $13 ; CPU:$E4C8 PRG:24C8 A4 13
|
||
sta ($1F),y ; CPU:$E4CA PRG:24CA 91 1F
|
||
iny ; CPU:$E4CC PRG:24CC C8
|
||
dex ; CPU:$E4CD PRG:24CD CA
|
||
bpl RenderObjectSprites_Block_15 ; CPU:$E4CE PRG:24CE 10 C8
|
||
pla ; CPU:$E4D0 PRG:24D0 68
|
||
tax ; CPU:$E4D1 PRG:24D1 AA
|
||
rts ; CPU:$E4D2 PRG:24D2 60
|
||
; RenderLargeObjectSprites
|
||
; Purpose: emit a fixed multi-sprite object and update animation/expiry state.
|
||
; Inputs: X = object slot; $1F selects the OAM destination.
|
||
; Returns: OAM entries updated; X restored; expired objects disabled.
|
||
RenderLargeObjectSprites:
|
||
txa ; CPU:$E4D3 PRG:24D3 8A
|
||
pha ; CPU:$E4D4 PRG:24D4 48
|
||
ldy $1F ; CPU:$E4D5 PRG:24D5 A4 1F
|
||
lda $9A,x ; CPU:$E4D7 PRG:24D7 B5 9A
|
||
sta $0200,y ; CPU:$E4D9 PRG:24D9 99 00 02
|
||
sta $0204,y ; CPU:$E4DC PRG:24DC 99 04 02
|
||
clc ; CPU:$E4DF PRG:24DF 18
|
||
adc #$08 ; CPU:$E4E0 PRG:24E0 69 08
|
||
sta $0208,y ; CPU:$E4E2 PRG:24E2 99 08 02
|
||
sta $020C,y ; CPU:$E4E5 PRG:24E5 99 0C 02
|
||
lda #$F0 ; CPU:$E4E8 PRG:24E8 A9 F0
|
||
sta $0210,y ; CPU:$E4EA PRG:24EA 99 10 02
|
||
sta $0214,y ; CPU:$E4ED PRG:24ED 99 14 02
|
||
lda $91,x ; CPU:$E4F0 PRG:24F0 B5 91
|
||
sta $0203,y ; CPU:$E4F2 PRG:24F2 99 03 02
|
||
sta $020B,y ; CPU:$E4F5 PRG:24F5 99 0B 02
|
||
clc ; CPU:$E4F8 PRG:24F8 18
|
||
adc #$08 ; CPU:$E4F9 PRG:24F9 69 08
|
||
sta $0207,y ; CPU:$E4FB PRG:24FB 99 07 02
|
||
sta $020F,y ; CPU:$E4FE PRG:24FE 99 0F 02
|
||
lda $9A,x ; CPU:$E501 PRG:2501 B5 9A
|
||
cmp #$D0 ; CPU:$E503 PRG:2503 C9 D0
|
||
lda #$03 ; CPU:$E505 PRG:2505 A9 03
|
||
bcc RenderLargeObjectSprites_Block ; CPU:$E507 PRG:2507 90 02
|
||
lda #$23 ; CPU:$E509 PRG:2509 A9 23
|
||
RenderLargeObjectSprites_Block:
|
||
sta $0202,y ; CPU:$E50B PRG:250B 99 02 02
|
||
lda $7F,x ; CPU:$E50E PRG:250E B5 7F
|
||
bne RenderLargeObjectSprites_Block_3 ; CPU:$E510 PRG:2510 D0 3F
|
||
lda $0202,y ; CPU:$E512 PRG:2512 B9 02 02
|
||
sta $0206,y ; CPU:$E515 PRG:2515 99 06 02
|
||
sta $020A,y ; CPU:$E518 PRG:2518 99 0A 02
|
||
sta $020E,y ; CPU:$E51B PRG:251B 99 0E 02
|
||
lda #$DA ; CPU:$E51E PRG:251E A9 DA
|
||
sta $0201,y ; CPU:$E520 PRG:2520 99 01 02
|
||
lda #$DB ; CPU:$E523 PRG:2523 A9 DB
|
||
sta $0205,y ; CPU:$E525 PRG:2525 99 05 02
|
||
lda #$DC ; CPU:$E528 PRG:2528 A9 DC
|
||
sta $0209,y ; CPU:$E52A PRG:252A 99 09 02
|
||
lda #$DD ; CPU:$E52D PRG:252D A9 DD
|
||
sta $020D,y ; CPU:$E52F PRG:252F 99 0D 02
|
||
ldx $1F ; CPU:$E532 PRG:2532 A6 1F
|
||
lda $19 ; CPU:$E534 PRG:2534 A5 19
|
||
and #$20 ; CPU:$E536 PRG:2536 29 20
|
||
beq RenderLargeObjectSprites_Block_2 ; CPU:$E538 PRG:2538 F0 14
|
||
lda $19 ; CPU:$E53A PRG:253A A5 19
|
||
and #$40 ; CPU:$E53C PRG:253C 29 40
|
||
bne RenderLargeObjectSprites_Block_1 ; CPU:$E53E PRG:253E D0 08
|
||
inc $0200,x ; CPU:$E540 PRG:2540 FE 00 02
|
||
inc $0204,x ; CPU:$E543 PRG:2543 FE 04 02
|
||
bne RenderLargeObjectSprites_Block_2 ; CPU:$E546 PRG:2546 D0 06
|
||
RenderLargeObjectSprites_Block_1:
|
||
inc $0203,x ; CPU:$E548 PRG:2548 FE 03 02
|
||
inc $020B,x ; CPU:$E54B PRG:254B FE 0B 02
|
||
RenderLargeObjectSprites_Block_2:
|
||
pla ; CPU:$E54E PRG:254E 68
|
||
tax ; CPU:$E54F PRG:254F AA
|
||
rts ; CPU:$E550 PRG:2550 60
|
||
RenderLargeObjectSprites_Block_3:
|
||
lda $0202,y ; CPU:$E551 PRG:2551 B9 02 02
|
||
ora #$40 ; CPU:$E554 PRG:2554 09 40
|
||
sta $0206,y ; CPU:$E556 PRG:2556 99 06 02
|
||
ora #$80 ; CPU:$E559 PRG:2559 09 80
|
||
sta $020E,y ; CPU:$E55B PRG:255B 99 0E 02
|
||
and #$BF ; CPU:$E55E PRG:255E 29 BF
|
||
sta $020A,y ; CPU:$E560 PRG:2560 99 0A 02
|
||
lda #$DE ; CPU:$E563 PRG:2563 A9 DE
|
||
sta $0201,y ; CPU:$E565 PRG:2565 99 01 02
|
||
sta $0205,y ; CPU:$E568 PRG:2568 99 05 02
|
||
sta $0209,y ; CPU:$E56B PRG:256B 99 09 02
|
||
sta $020D,y ; CPU:$E56E PRG:256E 99 0D 02
|
||
dec $045A,x ; CPU:$E571 PRG:2571 DE 5A 04
|
||
bpl RenderLargeObjectSprites_Block_4 ; CPU:$E574 PRG:2574 10 0C
|
||
lda #$FF ; CPU:$E576 PRG:2576 A9 FF
|
||
sta $88,x ; CPU:$E578 PRG:2578 95 88
|
||
lda #$F0 ; CPU:$E57A PRG:257A A9 F0
|
||
sta $9A,x ; CPU:$E57C PRG:257C 95 9A
|
||
lda #$04 ; CPU:$E57E PRG:257E A9 04
|
||
sta $F1 ; CPU:$E580 PRG:2580 85 F1
|
||
RenderLargeObjectSprites_Block_4:
|
||
pla ; CPU:$E582 PRG:2582 68
|
||
tax ; CPU:$E583 PRG:2583 AA
|
||
rts ; CPU:$E584 PRG:2584 60
|
||
; CopyOverlaySpriteStream
|
||
; Purpose: copy a selected 16-byte overlay sprite stream into OAM and apply Y offset.
|
||
; Inputs: $BB = stream index, $BC = vertical offset.
|
||
; Returns: overlay OAM region updated; may decrement $BB.
|
||
CopyOverlaySpriteStream:
|
||
ldx $BB ; CPU:$E585 PRG:2585 A6 BB
|
||
bmi CopyOverlaySpriteStream_Block_3 ; CPU:$E587 PRG:2587 30 39
|
||
lda OverlaySpriteStreamLoTable,x ; CPU:$E589 PRG:2589 BD C5 E5
|
||
sta $1D ; CPU:$E58C PRG:258C 85 1D
|
||
lda OverlaySpriteStreamHiTable,x ; CPU:$E58E PRG:258E BD CA E5
|
||
sta $1E ; CPU:$E591 PRG:2591 85 1E
|
||
ldy #$00 ; CPU:$E593 PRG:2593 A0 00
|
||
ldx #$00 ; CPU:$E595 PRG:2595 A2 00
|
||
CopyOverlaySpriteStream_Block:
|
||
lda ($1D),y ; CPU:$E597 PRG:2597 B1 1D
|
||
sta $02E0,x ; CPU:$E599 PRG:2599 9D E0 02
|
||
iny ; CPU:$E59C PRG:259C C8
|
||
inx ; CPU:$E59D PRG:259D E8
|
||
cmp #$F0 ; CPU:$E59E PRG:259E C9 F0
|
||
bne CopyOverlaySpriteStream_Block_1 ; CPU:$E5A0 PRG:25A0 D0 03
|
||
inx ; CPU:$E5A2 PRG:25A2 E8
|
||
inx ; CPU:$E5A3 PRG:25A3 E8
|
||
inx ; CPU:$E5A4 PRG:25A4 E8
|
||
CopyOverlaySpriteStream_Block_1:
|
||
cpx #$10 ; CPU:$E5A5 PRG:25A5 E0 10
|
||
bne CopyOverlaySpriteStream_Block ; CPU:$E5A7 PRG:25A7 D0 EE
|
||
ldy #$0F ; CPU:$E5A9 PRG:25A9 A0 0F
|
||
CopyOverlaySpriteStream_Block_2:
|
||
lda $02E0,y ; CPU:$E5AB PRG:25AB B9 E0 02
|
||
clc ; CPU:$E5AE PRG:25AE 18
|
||
adc $BC ; CPU:$E5AF PRG:25AF 65 BC
|
||
sta $02E0,y ; CPU:$E5B1 PRG:25B1 99 E0 02
|
||
dey ; CPU:$E5B4 PRG:25B4 88
|
||
dey ; CPU:$E5B5 PRG:25B5 88
|
||
dey ; CPU:$E5B6 PRG:25B6 88
|
||
dey ; CPU:$E5B7 PRG:25B7 88
|
||
bpl CopyOverlaySpriteStream_Block_2 ; CPU:$E5B8 PRG:25B8 10 F1
|
||
lda $19 ; CPU:$E5BA PRG:25BA A5 19
|
||
and #$03 ; CPU:$E5BC PRG:25BC 29 03
|
||
bne CopyOverlaySpriteStream_Block_3 ; CPU:$E5BE PRG:25BE D0 02
|
||
dec $BB ; CPU:$E5C0 PRG:25C0 C6 BB
|
||
CopyOverlaySpriteStream_Block_3:
|
||
rts ; CPU:$E5C2 PRG:25C2 60
|
||
|
||
; Rendering streams and object motion/physics lookup data
|
||
OverlaySpriteStreamLoTable:
|
||
.byte $FD, $ED, $E0, $D6, $CF ; CPU:$E5C3 PRG:25C3 FD ED E0 D6 CF
|
||
OverlaySpriteStreamHiTable:
|
||
.byte $E5, $E5, $E5, $E5, $E5, $D0, $AE, $03 ; CPU:$E5C8 PRG:25C8 E5 E5 E5 E5 E5 D0 AE 03
|
||
.byte $04, $F0, $F0, $F0, $C8, $AF, $03, $04 ; CPU:$E5D0 PRG:25D0 04 F0 F0 F0 C8 AF 03 04
|
||
.byte $D0, $B0, $03, $04, $F0, $F0, $C8, $B1 ; CPU:$E5D8 PRG:25D8 D0 B0 03 04 F0 F0 C8 B1
|
||
.byte $03, $FC, $C8, $B2, $03, $04, $D0, $B3 ; CPU:$E5E0 PRG:25E0 03 FC C8 B2 03 04 D0 B3
|
||
.byte $03, $04, $F0, $C8, $B4, $03, $00, $C8 ; CPU:$E5E8 PRG:25E8 03 04 F0 C8 B4 03 00 C8
|
||
.byte $B4, $43, $08, $D0, $B5, $03, $00, $D0 ; CPU:$E5F0 PRG:25F0 B4 43 08 D0 B5 03 00 D0
|
||
.byte $B5, $43, $08, $F0, $F0, $F0, $F0 ; CPU:$E5F8 PRG:25F8 B5 43 08 F0 F0 F0 F0
|
||
ObjectAccelerationTableA:
|
||
.byte $04, $04, $05, $06, $03, $03, $03, $06 ; CPU:$E5FF PRG:25FF 04 04 05 06 03 03 03 06
|
||
.byte $0A, $0A, $0A, $0A ; CPU:$E607 PRG:2607 0A 0A 0A 0A
|
||
ObjectAccelerationTableB:
|
||
.byte $28, $32, $46, $78, $00, $00, $00, $64 ; CPU:$E60B PRG:260B 28 32 46 78 00 00 00 64
|
||
.byte $00, $00, $00, $00 ; CPU:$E613 PRG:2613 00 00 00 00
|
||
ObjectVelocityTableA:
|
||
.byte $0A, $1E, $32, $70, $00, $00, $00, $70 ; CPU:$E617 PRG:2617 0A 1E 32 70 00 00 00 70
|
||
.byte $00, $00, $00, $00 ; CPU:$E61F PRG:261F 00 00 00 00
|
||
ObjectVelocityTableB:
|
||
.byte $14, $3C, $64, $A0, $00, $00, $00, $A0 ; CPU:$E623 PRG:2623 14 3C 64 A0 00 00 00 A0
|
||
.byte $00, $00, $00, $00 ; CPU:$E62B PRG:262B 00 00 00 00
|
||
ObjectVelocityTableC:
|
||
.byte $70, $B0, $E0, $40, $80, $80, $80, $40 ; CPU:$E62F PRG:262F 70 B0 E0 40 80 80 80 40
|
||
.byte $00, $00, $00, $00 ; CPU:$E637 PRG:2637 00 00 00 00
|
||
ObjectVelocityTableD:
|
||
.byte $00, $00, $00, $01, $00, $00, $00, $01 ; CPU:$E63B PRG:263B 00 00 00 01 00 00 00 01
|
||
.byte $00, $00, $00, $00 ; CPU:$E643 PRG:2643 00 00 00 00
|
||
ObjectVelocityTableE:
|
||
.byte $90, $50, $20, $C0, $80, $80, $80, $C0 ; CPU:$E647 PRG:2647 90 50 20 C0 80 80 80 C0
|
||
.byte $00, $00, $00, $00 ; CPU:$E64F PRG:264F 00 00 00 00
|
||
ObjectVelocityTableF:
|
||
.byte $FF, $FF, $FF, $FE, $FF, $FF, $FF, $FE ; CPU:$E653 PRG:2653 FF FF FF FE FF FF FF FE
|
||
.byte $00, $00, $00, $00 ; CPU:$E65B PRG:265B 00 00 00 00
|
||
ObjectMotionTableA:
|
||
.byte $50, $90, $C0, $40, $40, $40, $40, $40 ; CPU:$E65F PRG:265F 50 90 C0 40 40 40 40 40
|
||
.byte $00, $00, $00, $00 ; CPU:$E667 PRG:2667 00 00 00 00
|
||
ObjectMotionTableB:
|
||
.byte $00, $00, $00, $01, $00, $00, $00, $01 ; CPU:$E66B PRG:266B 00 00 00 01 00 00 00 01
|
||
.byte $02, $02, $02, $02 ; CPU:$E673 PRG:2673 02 02 02 02
|
||
ObjectMotionTableC:
|
||
.byte $B0, $70, $40, $C0, $C0, $C0, $C0, $C0 ; CPU:$E677 PRG:2677 B0 70 40 C0 C0 C0 C0 C0
|
||
.byte $C0, $C0, $C0, $C0 ; CPU:$E67F PRG:267F C0 C0 C0 C0
|
||
ObjectMotionTableD:
|
||
.byte $FF, $FF, $FF, $FE, $FF, $FF, $FF, $FE ; CPU:$E683 PRG:2683 FF FF FF FE FF FF FF FE
|
||
.byte $FE, $01, $FE, $FE ; CPU:$E68B PRG:268B FE 01 FE FE
|
||
; UpdateAllObjects
|
||
; Purpose: update active object slots, physics, interactions, and sprite rendering.
|
||
; Inputs: global object arrays; no explicit register parameters.
|
||
; Returns: all active objects processed; X exhausted to $FF.
|
||
UpdateAllObjects:
|
||
jsr $EE25 ; CPU:$E68F PRG:268F 20 25 EE
|
||
ldx #$07 ; CPU:$E692 PRG:2692 A2 07
|
||
UpdateAllObjects_Block:
|
||
lda $88,x ; CPU:$E694 PRG:2694 B5 88
|
||
bpl UpdateAllObjects_Block_1 ; CPU:$E696 PRG:2696 10 0A
|
||
cmp #$FF ; CPU:$E698 PRG:2698 C9 FF
|
||
beq UpdateAllObjects_Block_5 ; CPU:$E69A PRG:269A F0 44
|
||
jsr $ECBA ; CPU:$E69C PRG:269C 20 BA EC
|
||
jmp UpdateAllObjects_Block_5 ; CPU:$E69F PRG:269F 4C E2 E6
|
||
UpdateAllObjects_Block_1:
|
||
cpx #$02 ; CPU:$E6A2 PRG:26A2 E0 02
|
||
bcc UpdateAllObjects_Block_2 ; CPU:$E6A4 PRG:26A4 90 10
|
||
cmp #$01 ; CPU:$E6A6 PRG:26A6 C9 01
|
||
bne UpdateAllObjects_Block_2 ; CPU:$E6A8 PRG:26A8 D0 0C
|
||
lda $7F,x ; CPU:$E6AA PRG:26AA B5 7F
|
||
cmp #$02 ; CPU:$E6AC PRG:26AC C9 02
|
||
bcs UpdateAllObjects_Block_2 ; CPU:$E6AE PRG:26AE B0 06
|
||
lda $F1 ; CPU:$E6B0 PRG:26B0 A5 F1
|
||
ora #$20 ; CPU:$E6B2 PRG:26B2 09 20
|
||
sta $F1 ; CPU:$E6B4 PRG:26B4 85 F1
|
||
UpdateAllObjects_Block_2:
|
||
dec $043F,x ; CPU:$E6B6 PRG:26B6 DE 3F 04
|
||
bne UpdateAllObjects_Block_4 ; CPU:$E6B9 PRG:26B9 D0 1C
|
||
lda #$03 ; CPU:$E6BB PRG:26BB A9 03
|
||
sta $043F,x ; CPU:$E6BD PRG:26BD 9D 3F 04
|
||
cpx #$02 ; CPU:$E6C0 PRG:26C0 E0 02
|
||
bcs UpdateAllObjects_Block_3 ; CPU:$E6C2 PRG:26C2 B0 08
|
||
dec $BF,x ; CPU:$E6C4 PRG:26C4 D6 BF
|
||
bne UpdateAllObjects_Block_3 ; CPU:$E6C6 PRG:26C6 D0 04
|
||
lda #$00 ; CPU:$E6C8 PRG:26C8 A9 00
|
||
sta $BD,x ; CPU:$E6CA PRG:26CA 95 BD
|
||
UpdateAllObjects_Block_3:
|
||
jsr $EA18 ; CPU:$E6CC PRG:26CC 20 18 EA
|
||
stx $3E ; CPU:$E6CF PRG:26CF 86 3E
|
||
jsr $EBC4 ; CPU:$E6D1 PRG:26D1 20 C4 EB
|
||
jsr $E796 ; CPU:$E6D4 PRG:26D4 20 96 E7
|
||
UpdateAllObjects_Block_4:
|
||
jsr $EA58 ; CPU:$E6D7 PRG:26D7 20 58 EA
|
||
jsr $ED28 ; CPU:$E6DA PRG:26DA 20 28 ED
|
||
jsr $E983 ; CPU:$E6DD PRG:26DD 20 83 E9
|
||
UpdateAllObjects_Block_5:
|
||
jsr $E3A4 ; CPU:$E6E0 PRG:26E0 20 A4 E3
|
||
dex ; CPU:$E6E3 PRG:26E3 CA
|
||
bpl UpdateAllObjects_Block ; CPU:$E6E4 PRG:26E4 10 AE
|
||
rts ; CPU:$E6E6 PRG:26E6 60
|
||
; UpdatePlayerInputState
|
||
; Purpose: update per-player directional input and animation timing state.
|
||
; Inputs: X = player object slot.
|
||
; Returns: direction/state byte $31,X updated.
|
||
UpdatePlayerInputState:
|
||
cpx #$02 ; CPU:$E6E7 PRG:26E7 E0 02
|
||
bcs UpdatePlayerInputState_Block_2 ; CPU:$E6E9 PRG:26E9 B0 18
|
||
lda $19 ; CPU:$E6EB PRG:26EB A5 19
|
||
and #$0F ; CPU:$E6ED PRG:26ED 29 0F
|
||
bne UpdatePlayerInputState_Block ; CPU:$E6EF PRG:26EF D0 05
|
||
jsr $F1B3 ; CPU:$E6F1 PRG:26F1 20 B3 F1
|
||
sta $31,x ; CPU:$E6F4 PRG:26F4 95 31
|
||
UpdatePlayerInputState_Block:
|
||
lda $3A ; CPU:$E6F6 PRG:26F6 A5 3A
|
||
bne UpdatePlayerInputState_Block_2 ; CPU:$E6F8 PRG:26F8 D0 09
|
||
jsr $E76A ; CPU:$E6FA PRG:26FA 20 6A E7
|
||
lda $061C,x ; CPU:$E6FD PRG:26FD BD 1C 06
|
||
sta $31,x ; CPU:$E700 PRG:2700 95 31
|
||
UpdatePlayerInputState_Block_1:
|
||
rts ; CPU:$E702 PRG:2702 60
|
||
UpdatePlayerInputState_Block_2:
|
||
lda $9A,x ; CPU:$E703 PRG:2703 B5 9A
|
||
cmp #$A0 ; CPU:$E705 PRG:2705 C9 A0
|
||
bcc UpdatePlayerInputState_Block_3 ; CPU:$E707 PRG:2707 90 07
|
||
lda $31,x ; CPU:$E709 PRG:2709 B5 31
|
||
ora #$40 ; CPU:$E70B PRG:270B 09 40
|
||
sta $31,x ; CPU:$E70D PRG:270D 95 31
|
||
rts ; CPU:$E70F PRG:270F 60
|
||
UpdatePlayerInputState_Block_3:
|
||
dec $045A,x ; CPU:$E710 PRG:2710 DE 5A 04
|
||
bne UpdatePlayerInputState_Block_1 ; CPU:$E713 PRG:2713 D0 ED
|
||
jsr $F1B3 ; CPU:$E715 PRG:2715 20 B3 F1
|
||
ldy $0451,x ; CPU:$E718 PRG:2718 BC 51 04
|
||
and ObjectAnimationPeriodTable,y ; CPU:$E71B PRG:271B 39 62 E7
|
||
adc ControllerBitMaskTable,y ; CPU:$E71E PRG:271E 79 65 E7
|
||
sta $045A,x ; CPU:$E721 PRG:2721 9D 5A 04
|
||
stx $12 ; CPU:$E724 PRG:2724 86 12
|
||
lda $19 ; CPU:$E726 PRG:2726 A5 19
|
||
rol a ; CPU:$E728 PRG:2728 2A
|
||
rol a ; CPU:$E729 PRG:2729 2A
|
||
eor $12 ; CPU:$E72A PRG:272A 45 12
|
||
and #$01 ; CPU:$E72C PRG:272C 29 01
|
||
tay ; CPU:$E72E PRG:272E A8
|
||
lda a:$0088,y ; CPU:$E72F PRG:272F B9 88 00
|
||
bmi UpdatePlayerInputState_Block_4 ; CPU:$E732 PRG:2732 30 13
|
||
lda a:$00BD,y ; CPU:$E734 PRG:2734 B9 BD 00
|
||
bne UpdatePlayerInputState_Block_4 ; CPU:$E737 PRG:2737 D0 0E
|
||
lda #$00 ; CPU:$E739 PRG:2739 A9 00
|
||
sta $31,x ; CPU:$E73B PRG:273B 95 31
|
||
lda a:$009A,y ; CPU:$E73D PRG:273D B9 9A 00
|
||
sec ; CPU:$E740 PRG:2740 38
|
||
sbc #$04 ; CPU:$E741 PRG:2741 E9 04
|
||
cmp $9A,x ; CPU:$E743 PRG:2743 D5 9A
|
||
bcs UpdatePlayerInputState_Block_5 ; CPU:$E745 PRG:2745 B0 04
|
||
UpdatePlayerInputState_Block_4:
|
||
lda #$40 ; CPU:$E747 PRG:2747 A9 40
|
||
sta $31,x ; CPU:$E749 PRG:2749 95 31
|
||
UpdatePlayerInputState_Block_5:
|
||
lda $91,x ; CPU:$E74B PRG:274B B5 91
|
||
cmp a:$0091,y ; CPU:$E74D PRG:274D D9 91 00
|
||
bcs UpdatePlayerInputState_Block_6 ; CPU:$E750 PRG:2750 B0 07
|
||
lda $31,x ; CPU:$E752 PRG:2752 B5 31
|
||
ora #$01 ; CPU:$E754 PRG:2754 09 01
|
||
sta $31,x ; CPU:$E756 PRG:2756 95 31
|
||
rts ; CPU:$E758 PRG:2758 60
|
||
UpdatePlayerInputState_Block_6:
|
||
lda $31,x ; CPU:$E759 PRG:2759 B5 31
|
||
ora #$02 ; CPU:$E75B PRG:275B 09 02
|
||
sta $31,x ; CPU:$E75D PRG:275D 95 31
|
||
rts ; CPU:$E75F PRG:275F 60
|
||
|
||
; Per-object animation timer masks selected by object type/state.
|
||
ObjectAnimationPeriodTable:
|
||
.byte $1F, $0F, $07 ; CPU:$E760 PRG:2760 1F 0F 07
|
||
|
||
; Base timer periods paired with ObjectAnimationPeriodTable.
|
||
ObjectAnimationBasePeriodTable:
|
||
ControllerBitMaskTable:
|
||
.byte $20, $10, $08 ; CPU:$E763 PRG:2763 20 10 08
|
||
|
||
; PollControllers
|
||
; Purpose: strobe both NES controller ports and update current/pressed input bytes.
|
||
; Inputs: none.
|
||
; Returns: controller history at $061C-$061F updated; A/X/Y modified.
|
||
PollControllers:
|
||
ldx #$00 ; CPU:$E766 PRG:2766 A2 00
|
||
ReadControllerPort:
|
||
lda #$01 ; CPU:$E768 PRG:2768 A9 01
|
||
sta $4016 ; CPU:$E76A PRG:276A 8D 16 40
|
||
lda #$00 ; CPU:$E76D PRG:276D A9 00
|
||
sta $4016 ; CPU:$E76F PRG:276F 8D 16 40
|
||
ldy #$07 ; CPU:$E772 PRG:2772 A0 07
|
||
ReadControllerPort_Block:
|
||
lda $4016,x ; CPU:$E774 PRG:2774 BD 16 40
|
||
sta $12 ; CPU:$E777 PRG:2777 85 12
|
||
lsr a ; CPU:$E779 PRG:2779 4A
|
||
ora $12 ; CPU:$E77A PRG:277A 05 12
|
||
lsr a ; CPU:$E77C PRG:277C 4A
|
||
rol $061C,x ; CPU:$E77D PRG:277D 3E 1C 06
|
||
dey ; CPU:$E780 PRG:2780 88
|
||
bpl ReadControllerPort_Block ; CPU:$E781 PRG:2781 10 F1
|
||
ldy $061E,x ; CPU:$E783 PRG:2783 BC 1E 06
|
||
lda $061C,x ; CPU:$E786 PRG:2786 BD 1C 06
|
||
sta $061E,x ; CPU:$E789 PRG:2789 9D 1E 06
|
||
tya ; CPU:$E78C PRG:278C 98
|
||
eor $061C,x ; CPU:$E78D PRG:278D 5D 1C 06
|
||
and $061C,x ; CPU:$E790 PRG:2790 3D 1C 06
|
||
rts ; CPU:$E793 PRG:2793 60
|
||
; UpdateObjectMotionState
|
||
; Purpose: clear motion accumulators for inactive objects and integrate active-object velocity.
|
||
; Inputs: X = object slot.
|
||
; Returns: per-object fixed-point motion values updated.
|
||
UpdateObjectMotionState:
|
||
lda $88,x ; CPU:$E794 PRG:2794 B5 88
|
||
bne UpdateObjectMotionState_Block_1 ; CPU:$E796 PRG:2796 D0 09
|
||
UpdateObjectMotionState_Block:
|
||
lda #$00 ; CPU:$E798 PRG:2798 A9 00
|
||
sta $0424,x ; CPU:$E79A PRG:279A 9D 24 04
|
||
sta $042D,x ; CPU:$E79D PRG:279D 9D 2D 04
|
||
rts ; CPU:$E7A0 PRG:27A0 60
|
||
UpdateObjectMotionState_Block_1:
|
||
cmp #$02 ; CPU:$E7A1 PRG:27A1 C9 02
|
||
beq UpdateObjectVelocity_Block ; CPU:$E7A3 PRG:27A3 F0 41
|
||
cpx #$02 ; CPU:$E7A5 PRG:27A5 E0 02
|
||
bcc UpdateObjectVelocity_Block ; CPU:$E7A7 PRG:27A7 90 3D
|
||
lda $7F,x ; CPU:$E7A9 PRG:27A9 B5 7F
|
||
cmp #$02 ; CPU:$E7AB PRG:27AB C9 02
|
||
bcs UpdateObjectMotionState_Block ; CPU:$E7AD PRG:27AD B0 E9
|
||
; UpdateObjectVelocity
|
||
; Purpose: select movement state and adjust horizontal velocity from directional state.
|
||
; Inputs: X = object slot.
|
||
; Returns: state $7F,X, facing $0448,X, and velocity $0424/$042D updated.
|
||
UpdateObjectVelocity:
|
||
lda $0424,x ; CPU:$E7AF PRG:27AF BD 24 04
|
||
sta $12 ; CPU:$E7B2 PRG:27B2 85 12
|
||
lda $042D,x ; CPU:$E7B4 PRG:27B4 BD 2D 04
|
||
sta $13 ; CPU:$E7B7 PRG:27B7 85 13
|
||
jsr $F1A6 ; CPU:$E7B9 PRG:27B9 20 A6 F1
|
||
lda $0463,x ; CPU:$E7BC PRG:27BC BD 63 04
|
||
clc ; CPU:$E7BF PRG:27BF 18
|
||
adc $12 ; CPU:$E7C0 PRG:27C0 65 12
|
||
sta $0463,x ; CPU:$E7C2 PRG:27C2 9D 63 04
|
||
sta $12 ; CPU:$E7C5 PRG:27C5 85 12
|
||
lda $046C,x ; CPU:$E7C7 PRG:27C7 BD 6C 04
|
||
adc $13 ; CPU:$E7CA PRG:27CA 65 13
|
||
sta $046C,x ; CPU:$E7CC PRG:27CC 9D 6C 04
|
||
sta $13 ; CPU:$E7CF PRG:27CF 85 13
|
||
jsr $F1A6 ; CPU:$E7D1 PRG:27D1 20 A6 F1
|
||
lda $0424,x ; CPU:$E7D4 PRG:27D4 BD 24 04
|
||
sec ; CPU:$E7D7 PRG:27D7 38
|
||
sbc $12 ; CPU:$E7D8 PRG:27D8 E5 12
|
||
sta $0424,x ; CPU:$E7DA PRG:27DA 9D 24 04
|
||
lda $042D,x ; CPU:$E7DD PRG:27DD BD 2D 04
|
||
sbc $13 ; CPU:$E7E0 PRG:27E0 E5 13
|
||
sta $042D,x ; CPU:$E7E2 PRG:27E2 9D 2D 04
|
||
rts ; CPU:$E7E5 PRG:27E5 60
|
||
UpdateObjectVelocity_Block:
|
||
lda $7F,x ; CPU:$E7E6 PRG:27E6 B5 7F
|
||
cmp #$06 ; CPU:$E7E8 PRG:27E8 C9 06
|
||
bcc UpdateObjectVelocity_Block_1 ; CPU:$E7EA PRG:27EA 90 01
|
||
rts ; CPU:$E7EC PRG:27EC 60
|
||
UpdateObjectVelocity_Block_1:
|
||
lda $7F,x ; CPU:$E7ED PRG:27ED B5 7F
|
||
cmp #$04 ; CPU:$E7EF PRG:27EF C9 04
|
||
bne UpdateObjectVelocity_Block_4 ; CPU:$E7F1 PRG:27F1 D0 1C
|
||
lda $31,x ; CPU:$E7F3 PRG:27F3 B5 31
|
||
and #$02 ; CPU:$E7F5 PRG:27F5 29 02
|
||
beq UpdateObjectVelocity_Block_2 ; CPU:$E7F7 PRG:27F7 F0 07
|
||
lda $0448,x ; CPU:$E7F9 PRG:27F9 BD 48 04
|
||
beq UpdateObjectVelocity_Block_4 ; CPU:$E7FC PRG:27FC F0 11
|
||
bne UpdateObjectVelocity_Block_3 ; CPU:$E7FE PRG:27FE D0 0B
|
||
UpdateObjectVelocity_Block_2:
|
||
lda $31,x ; CPU:$E800 PRG:2800 B5 31
|
||
and #$01 ; CPU:$E802 PRG:2802 29 01
|
||
beq UpdateObjectVelocity_Block_4 ; CPU:$E804 PRG:2804 F0 09
|
||
lda $0448,x ; CPU:$E806 PRG:2806 BD 48 04
|
||
bne UpdateObjectVelocity_Block_4 ; CPU:$E809 PRG:2809 D0 04
|
||
UpdateObjectVelocity_Block_3:
|
||
lda #$05 ; CPU:$E80B PRG:280B A9 05
|
||
sta $7F,x ; CPU:$E80D PRG:280D 95 7F
|
||
UpdateObjectVelocity_Block_4:
|
||
lda $7F,x ; CPU:$E80F PRG:280F B5 7F
|
||
cmp #$02 ; CPU:$E811 PRG:2811 C9 02
|
||
bne UpdateObjectVelocity_Block_8 ; CPU:$E813 PRG:2813 D0 1B
|
||
lda $31,x ; CPU:$E815 PRG:2815 B5 31
|
||
and #$02 ; CPU:$E817 PRG:2817 29 02
|
||
beq UpdateObjectVelocity_Block_5 ; CPU:$E819 PRG:2819 F0 04
|
||
lda #$00 ; CPU:$E81B PRG:281B A9 00
|
||
beq UpdateObjectVelocity_Block_6 ; CPU:$E81D PRG:281D F0 08
|
||
UpdateObjectVelocity_Block_5:
|
||
lda $31,x ; CPU:$E81F PRG:281F B5 31
|
||
and #$01 ; CPU:$E821 PRG:2821 29 01
|
||
beq UpdateObjectVelocity_Block_7 ; CPU:$E823 PRG:2823 F0 07
|
||
lda #$01 ; CPU:$E825 PRG:2825 A9 01
|
||
UpdateObjectVelocity_Block_6:
|
||
cmp $0448,x ; CPU:$E827 PRG:2827 DD 48 04
|
||
beq UpdateObjectVelocity_Block_8 ; CPU:$E82A PRG:282A F0 04
|
||
UpdateObjectVelocity_Block_7:
|
||
lda #$04 ; CPU:$E82C PRG:282C A9 04
|
||
sta $7F,x ; CPU:$E82E PRG:282E 95 7F
|
||
UpdateObjectVelocity_Block_8:
|
||
lda $7F,x ; CPU:$E830 PRG:2830 B5 7F
|
||
cmp #$04 ; CPU:$E832 PRG:2832 C9 04
|
||
bcc UpdateObjectVelocity_Block_11 ; CPU:$E834 PRG:2834 90 1C
|
||
lda $31,x ; CPU:$E836 PRG:2836 B5 31
|
||
and #$02 ; CPU:$E838 PRG:2838 29 02
|
||
beq UpdateObjectVelocity_Block_9 ; CPU:$E83A PRG:283A F0 07
|
||
lda $0448,x ; CPU:$E83C PRG:283C BD 48 04
|
||
bne UpdateObjectVelocity_Block_11 ; CPU:$E83F PRG:283F D0 11
|
||
beq UpdateObjectVelocity_Block_10 ; CPU:$E841 PRG:2841 F0 0B
|
||
UpdateObjectVelocity_Block_9:
|
||
lda $31,x ; CPU:$E843 PRG:2843 B5 31
|
||
and #$01 ; CPU:$E845 PRG:2845 29 01
|
||
beq UpdateObjectVelocity_Block_11 ; CPU:$E847 PRG:2847 F0 09
|
||
lda $0448,x ; CPU:$E849 PRG:2849 BD 48 04
|
||
beq UpdateObjectVelocity_Block_11 ; CPU:$E84C PRG:284C F0 04
|
||
UpdateObjectVelocity_Block_10:
|
||
lda #$02 ; CPU:$E84E PRG:284E A9 02
|
||
sta $7F,x ; CPU:$E850 PRG:2850 95 7F
|
||
UpdateObjectVelocity_Block_11:
|
||
lda $7F,x ; CPU:$E852 PRG:2852 B5 7F
|
||
cmp #$03 ; CPU:$E854 PRG:2854 C9 03
|
||
bne UpdateObjectVelocity_Block_12 ; CPU:$E856 PRG:2856 D0 0A
|
||
lda $31,x ; CPU:$E858 PRG:2858 B5 31
|
||
and #$03 ; CPU:$E85A PRG:285A 29 03
|
||
beq UpdateObjectVelocity_Block_12 ; CPU:$E85C PRG:285C F0 04
|
||
lda #$02 ; CPU:$E85E PRG:285E A9 02
|
||
sta $7F,x ; CPU:$E860 PRG:2860 95 7F
|
||
UpdateObjectVelocity_Block_12:
|
||
lda $7F,x ; CPU:$E862 PRG:2862 B5 7F
|
||
cmp #$04 ; CPU:$E864 PRG:2864 C9 04
|
||
bcs UpdateObjectVelocity_Block_15 ; CPU:$E866 PRG:2866 B0 15
|
||
lda $31,x ; CPU:$E868 PRG:2868 B5 31
|
||
and #$02 ; CPU:$E86A PRG:286A 29 02
|
||
beq UpdateObjectVelocity_Block_13 ; CPU:$E86C PRG:286C F0 04
|
||
lda #$00 ; CPU:$E86E PRG:286E A9 00
|
||
beq UpdateObjectVelocity_Block_14 ; CPU:$E870 PRG:2870 F0 08
|
||
UpdateObjectVelocity_Block_13:
|
||
lda $31,x ; CPU:$E872 PRG:2872 B5 31
|
||
and #$01 ; CPU:$E874 PRG:2874 29 01
|
||
beq UpdateObjectVelocity_Block_15 ; CPU:$E876 PRG:2876 F0 05
|
||
lda #$01 ; CPU:$E878 PRG:2878 A9 01
|
||
UpdateObjectVelocity_Block_14:
|
||
sta $0448,x ; CPU:$E87A PRG:287A 9D 48 04
|
||
UpdateObjectVelocity_Block_15:
|
||
lda $7F,x ; CPU:$E87D PRG:287D B5 7F
|
||
cmp #$04 ; CPU:$E87F PRG:287F C9 04
|
||
bcc UpdateObjectVelocity_Block_17 ; CPU:$E881 PRG:2881 90 33
|
||
lda $0436,x ; CPU:$E883 PRG:2883 BD 36 04
|
||
cmp #$01 ; CPU:$E886 PRG:2886 C9 01
|
||
bne UpdateObjectVelocity_Block_17 ; CPU:$E888 PRG:2888 D0 2C
|
||
ldy $0451,x ; CPU:$E88A PRG:288A BC 51 04
|
||
lda $0448,x ; CPU:$E88D PRG:288D BD 48 04
|
||
beq UpdateObjectVelocity_Block_16 ; CPU:$E890 PRG:2890 F0 12
|
||
lda $0424,x ; CPU:$E892 PRG:2892 BD 24 04
|
||
sec ; CPU:$E895 PRG:2895 38
|
||
sbc $E625,y ; CPU:$E896 PRG:2896 F9 25 E6
|
||
sta $0424,x ; CPU:$E899 PRG:2899 9D 24 04
|
||
lda $042D,x ; CPU:$E89C PRG:289C BD 2D 04
|
||
sbc #$00 ; CPU:$E89F PRG:289F E9 00
|
||
jmp UpdateObjectVelocity_Store ; CPU:$E8A1 PRG:28A1 4C 01 E9
|
||
UpdateObjectVelocity_Block_16:
|
||
lda $0424,x ; CPU:$E8A4 PRG:28A4 BD 24 04
|
||
clc ; CPU:$E8A7 PRG:28A7 18
|
||
adc $E625,y ; CPU:$E8A8 PRG:28A8 79 25 E6
|
||
sta $0424,x ; CPU:$E8AB PRG:28AB 9D 24 04
|
||
lda $042D,x ; CPU:$E8AE PRG:28AE BD 2D 04
|
||
adc #$00 ; CPU:$E8B1 PRG:28B1 69 00
|
||
jmp UpdateObjectVelocity_Store ; CPU:$E8B3 PRG:28B3 4C 01 E9
|
||
UpdateObjectVelocity_Block_17:
|
||
lda $7F,x ; CPU:$E8B6 PRG:28B6 B5 7F
|
||
beq UpdateObjectVelocity_Block_18 ; CPU:$E8B8 PRG:28B8 F0 0B
|
||
cmp #$02 ; CPU:$E8BA PRG:28BA C9 02
|
||
beq UpdateObjectVelocity_Block_21 ; CPU:$E8BC PRG:28BC F0 47
|
||
cmp #$03 ; CPU:$E8BE PRG:28BE C9 03
|
||
beq UpdateObjectVelocity_Block_18 ; CPU:$E8C0 PRG:28C0 F0 03
|
||
jmp UpdateObjectVelocity_Load ; CPU:$E8C2 PRG:28C2 4C 51 E9
|
||
UpdateObjectVelocity_Block_18:
|
||
lda $0436,x ; CPU:$E8C5 PRG:28C5 BD 36 04
|
||
cmp #$01 ; CPU:$E8C8 PRG:28C8 C9 01
|
||
beq UpdateObjectVelocity_Block_19 ; CPU:$E8CA PRG:28CA F0 03
|
||
jmp UpdateObjectVelocity_Load ; CPU:$E8CC PRG:28CC 4C 51 E9
|
||
UpdateObjectVelocity_Block_19:
|
||
ldy $0451,x ; CPU:$E8CF PRG:28CF BC 51 04
|
||
lda $31,x ; CPU:$E8D2 PRG:28D2 B5 31
|
||
and #$02 ; CPU:$E8D4 PRG:28D4 29 02
|
||
beq UpdateObjectVelocity_Block_20 ; CPU:$E8D6 PRG:28D6 F0 12
|
||
lda $0424,x ; CPU:$E8D8 PRG:28D8 BD 24 04
|
||
sec ; CPU:$E8DB PRG:28DB 38
|
||
sbc $E619,y ; CPU:$E8DC PRG:28DC F9 19 E6
|
||
sta $0424,x ; CPU:$E8DF PRG:28DF 9D 24 04
|
||
lda $042D,x ; CPU:$E8E2 PRG:28E2 BD 2D 04
|
||
sbc #$00 ; CPU:$E8E5 PRG:28E5 E9 00
|
||
jmp UpdateObjectVelocity_Store ; CPU:$E8E7 PRG:28E7 4C 01 E9
|
||
UpdateObjectVelocity_Block_20:
|
||
lda $31,x ; CPU:$E8EA PRG:28EA B5 31
|
||
and #$01 ; CPU:$E8EC PRG:28EC 29 01
|
||
beq UpdateObjectVelocity_Load ; CPU:$E8EE PRG:28EE F0 5F
|
||
lda $0424,x ; CPU:$E8F0 PRG:28F0 BD 24 04
|
||
clc ; CPU:$E8F3 PRG:28F3 18
|
||
adc $E619,y ; CPU:$E8F4 PRG:28F4 79 19 E6
|
||
sta $0424,x ; CPU:$E8F7 PRG:28F7 9D 24 04
|
||
lda $042D,x ; CPU:$E8FA PRG:28FA BD 2D 04
|
||
adc #$00 ; CPU:$E8FD PRG:28FD 69 00
|
||
UpdateObjectVelocity_Store:
|
||
sta $042D,x ; CPU:$E8FF PRG:28FF 9D 2D 04
|
||
jmp UpdateObjectVelocity_Load ; CPU:$E902 PRG:2902 4C 51 E9
|
||
UpdateObjectVelocity_Block_21:
|
||
lda $0436,x ; CPU:$E905 PRG:2905 BD 36 04
|
||
cmp #$01 ; CPU:$E908 PRG:2908 C9 01
|
||
bne UpdateObjectVelocity_Load ; CPU:$E90A PRG:290A D0 43
|
||
ldy $0451,x ; CPU:$E90C PRG:290C BC 51 04
|
||
lda $31,x ; CPU:$E90F PRG:290F B5 31
|
||
and #$02 ; CPU:$E911 PRG:2911 29 02
|
||
beq UpdateObjectVelocity_Block_22 ; CPU:$E913 PRG:2913 F0 12
|
||
lda $0424,x ; CPU:$E915 PRG:2915 BD 24 04
|
||
sec ; CPU:$E918 PRG:2918 38
|
||
sbc $E625,y ; CPU:$E919 PRG:2919 F9 25 E6
|
||
sta $0424,x ; CPU:$E91C PRG:291C 9D 24 04
|
||
lda $042D,x ; CPU:$E91F PRG:291F BD 2D 04
|
||
sbc #$00 ; CPU:$E922 PRG:2922 E9 00
|
||
jmp UpdateObjectVelocity_Store_1 ; CPU:$E924 PRG:2924 4C 3E E9
|
||
UpdateObjectVelocity_Block_22:
|
||
lda $31,x ; CPU:$E927 PRG:2927 B5 31
|
||
and #$01 ; CPU:$E929 PRG:2929 29 01
|
||
beq UpdateObjectVelocity_Load ; CPU:$E92B PRG:292B F0 22
|
||
lda $0424,x ; CPU:$E92D PRG:292D BD 24 04
|
||
clc ; CPU:$E930 PRG:2930 18
|
||
adc $E625,y ; CPU:$E931 PRG:2931 79 25 E6
|
||
sta $0424,x ; CPU:$E934 PRG:2934 9D 24 04
|
||
lda $042D,x ; CPU:$E937 PRG:2937 BD 2D 04
|
||
adc #$00 ; CPU:$E93A PRG:293A 69 00
|
||
UpdateObjectVelocity_Store_1:
|
||
sta $042D,x ; CPU:$E93C PRG:293C 9D 2D 04
|
||
lda $31,x ; CPU:$E93F PRG:293F B5 31
|
||
and #$03 ; CPU:$E941 PRG:2941 29 03
|
||
beq UpdateObjectVelocity_Load ; CPU:$E943 PRG:2943 F0 0A
|
||
cpx #$02 ; CPU:$E945 PRG:2945 E0 02
|
||
bcs UpdateObjectVelocity_Load ; CPU:$E947 PRG:2947 B0 06
|
||
lda $F0 ; CPU:$E949 PRG:2949 A5 F0
|
||
ora #$08 ; CPU:$E94B PRG:294B 09 08
|
||
sta $F0 ; CPU:$E94D PRG:294D 85 F0
|
||
UpdateObjectVelocity_Load:
|
||
lda $7F,x ; CPU:$E94F PRG:294F B5 7F
|
||
cmp #$04 ; CPU:$E951 PRG:2951 C9 04
|
||
bcc UpdateObjectVelocity_Block_26 ; CPU:$E953 PRG:2953 90 2B
|
||
lda $0448,x ; CPU:$E955 PRG:2955 BD 48 04
|
||
bne UpdateObjectVelocity_Block_23 ; CPU:$E958 PRG:2958 D0 07
|
||
lda $042D,x ; CPU:$E95A PRG:295A BD 2D 04
|
||
bmi UpdateObjectVelocity_Block_26 ; CPU:$E95D PRG:295D 30 21
|
||
bpl UpdateObjectVelocity_Block_24 ; CPU:$E95F PRG:295F 10 05
|
||
UpdateObjectVelocity_Block_23:
|
||
lda $042D,x ; CPU:$E961 PRG:2961 BD 2D 04
|
||
bpl UpdateObjectVelocity_Block_26 ; CPU:$E964 PRG:2964 10 1A
|
||
UpdateObjectVelocity_Block_24:
|
||
lda $7F,x ; CPU:$E966 PRG:2966 B5 7F
|
||
cmp #$05 ; CPU:$E968 PRG:2968 C9 05
|
||
bne UpdateObjectVelocity_Block_25 ; CPU:$E96A PRG:296A D0 08
|
||
lda $0448,x ; CPU:$E96C PRG:296C BD 48 04
|
||
eor #$01 ; CPU:$E96F PRG:296F 49 01
|
||
sta $0448,x ; CPU:$E971 PRG:2971 9D 48 04
|
||
UpdateObjectVelocity_Block_25:
|
||
lda #$03 ; CPU:$E974 PRG:2974 A9 03
|
||
sta $7F,x ; CPU:$E976 PRG:2976 95 7F
|
||
lda #$00 ; CPU:$E978 PRG:2978 A9 00
|
||
sta $0424,x ; CPU:$E97A PRG:297A 9D 24 04
|
||
sta $042D,x ; CPU:$E97D PRG:297D 9D 2D 04
|
||
UpdateObjectVelocity_Block_26:
|
||
rts ; CPU:$E980 PRG:2980 60
|
||
; UpdateObjectFacingAndState
|
||
; Purpose: normalize movement/facing state using controller direction and object mode.
|
||
; Inputs: X = object slot.
|
||
; Returns: object state and facing fields updated.
|
||
UpdateObjectFacingAndState:
|
||
lda $CB ; CPU:$E981 PRG:2981 A5 CB
|
||
bne UpdateObjectFacingAndState_Block_2 ; CPU:$E983 PRG:2983 D0 2F
|
||
lda $BD,x ; CPU:$E985 PRG:2985 B5 BD
|
||
beq UpdateObjectFacingAndState_Block ; CPU:$E987 PRG:2987 F0 0F
|
||
lda $0488 ; CPU:$E989 PRG:2989 AD 88 04
|
||
beq UpdateObjectFacingAndState_Block ; CPU:$E98C PRG:298C F0 0A
|
||
sec ; CPU:$E98E PRG:298E 38
|
||
sbc $91,x ; CPU:$E98F PRG:298F F5 91
|
||
jsr $F08E ; CPU:$E991 PRG:2991 20 8E F0
|
||
cmp #$05 ; CPU:$E994 PRG:2994 C9 05
|
||
bcc UpdateObjectFacingAndState_Block_2 ; CPU:$E996 PRG:2996 90 1C
|
||
UpdateObjectFacingAndState_Block:
|
||
cpx #$02 ; CPU:$E998 PRG:2998 E0 02
|
||
bcc UpdateObjectFacingAndState_Block_1 ; CPU:$E99A PRG:299A 90 06
|
||
lda $88,x ; CPU:$E99C PRG:299C B5 88
|
||
cmp #$02 ; CPU:$E99E PRG:299E C9 02
|
||
bne UpdateObjectFacingAndState_Block_3 ; CPU:$E9A0 PRG:29A0 D0 4E
|
||
UpdateObjectFacingAndState_Block_1:
|
||
lda $7F,x ; CPU:$E9A2 PRG:29A2 B5 7F
|
||
cmp #$02 ; CPU:$E9A4 PRG:29A4 C9 02
|
||
bcc UpdateObjectFacingAndState_Block_3 ; CPU:$E9A6 PRG:29A6 90 48
|
||
cmp #$06 ; CPU:$E9A8 PRG:29A8 C9 06
|
||
bcs UpdateObjectFacingAndState_Block_3 ; CPU:$E9AA PRG:29AA B0 44
|
||
lda #$01 ; CPU:$E9AC PRG:29AC A9 01
|
||
sta $7F,x ; CPU:$E9AE PRG:29AE 95 7F
|
||
sta $045A,x ; CPU:$E9B0 PRG:29B0 9D 5A 04
|
||
rts ; CPU:$E9B3 PRG:29B3 60
|
||
UpdateObjectFacingAndState_Block_2:
|
||
lda #$00 ; CPU:$E9B4 PRG:29B4 A9 00
|
||
sta $0412,x ; CPU:$E9B6 PRG:29B6 9D 12 04
|
||
sta $041B,x ; CPU:$E9B9 PRG:29B9 9D 1B 04
|
||
sta $0409,x ; CPU:$E9BC PRG:29BC 9D 09 04
|
||
sta $CB ; CPU:$E9BF PRG:29BF 85 CB
|
||
cpx #$02 ; CPU:$E9C1 PRG:29C1 E0 02
|
||
bcc UpdateObjectFacingAndState_Block_5 ; CPU:$E9C3 PRG:29C3 90 36
|
||
lda $88,x ; CPU:$E9C5 PRG:29C5 B5 88
|
||
cmp #$02 ; CPU:$E9C7 PRG:29C7 C9 02
|
||
beq UpdateObjectFacingAndState_Block_4 ; CPU:$E9C9 PRG:29C9 F0 26
|
||
cmp #$01 ; CPU:$E9CB PRG:29CB C9 01
|
||
bne UpdateObjectFacingAndState_Block_3 ; CPU:$E9CD PRG:29CD D0 21
|
||
lda $7F,x ; CPU:$E9CF PRG:29CF B5 7F
|
||
cmp #$02 ; CPU:$E9D1 PRG:29D1 C9 02
|
||
bcs UpdateObjectFacingAndState_Block_3 ; CPU:$E9D3 PRG:29D3 B0 1B
|
||
lda #$02 ; CPU:$E9D5 PRG:29D5 A9 02
|
||
sta $7F,x ; CPU:$E9D7 PRG:29D7 95 7F
|
||
lda $C6 ; CPU:$E9D9 PRG:29D9 A5 C6
|
||
sta $043F,x ; CPU:$E9DB PRG:29DB 9D 3F 04
|
||
lda #$00 ; CPU:$E9DE PRG:29DE A9 00
|
||
sta $0424,x ; CPU:$E9E0 PRG:29E0 9D 24 04
|
||
sta $042D,x ; CPU:$E9E3 PRG:29E3 9D 2D 04
|
||
sta $0463,x ; CPU:$E9E6 PRG:29E6 9D 63 04
|
||
sta $046C,x ; CPU:$E9E9 PRG:29E9 9D 6C 04
|
||
lda #$40 ; CPU:$E9EC PRG:29EC A9 40
|
||
sta $F1 ; CPU:$E9EE PRG:29EE 85 F1
|
||
UpdateObjectFacingAndState_Block_3:
|
||
rts ; CPU:$E9F0 PRG:29F0 60
|
||
UpdateObjectFacingAndState_Block_4:
|
||
lda #$00 ; CPU:$E9F1 PRG:29F1 A9 00
|
||
sta $7F,x ; CPU:$E9F3 PRG:29F3 95 7F
|
||
lda #$01 ; CPU:$E9F5 PRG:29F5 A9 01
|
||
sta $045A,x ; CPU:$E9F7 PRG:29F7 9D 5A 04
|
||
rts ; CPU:$E9FA PRG:29FA 60
|
||
UpdateObjectFacingAndState_Block_5:
|
||
lda $7F,x ; CPU:$E9FB PRG:29FB B5 7F
|
||
cmp #$01 ; CPU:$E9FD PRG:29FD C9 01
|
||
bne UpdateObjectFacingAndState_Block_8 ; CPU:$E9FF PRG:29FF D0 14
|
||
cmp #$06 ; CPU:$EA01 PRG:2A01 C9 06
|
||
bcs UpdateObjectFacingAndState_Block_8 ; CPU:$EA03 PRG:2A03 B0 10
|
||
lda $0424,x ; CPU:$EA05 PRG:2A05 BD 24 04
|
||
ora $042D,x ; CPU:$EA08 PRG:2A08 1D 2D 04
|
||
bne UpdateObjectFacingAndState_Block_6 ; CPU:$EA0B PRG:2A0B D0 04
|
||
lda #$03 ; CPU:$EA0D PRG:2A0D A9 03
|
||
bne UpdateObjectFacingAndState_Block_7 ; CPU:$EA0F PRG:2A0F D0 02
|
||
UpdateObjectFacingAndState_Block_6:
|
||
lda #$02 ; CPU:$EA11 PRG:2A11 A9 02
|
||
UpdateObjectFacingAndState_Block_7:
|
||
sta $7F,x ; CPU:$EA13 PRG:2A13 95 7F
|
||
UpdateObjectFacingAndState_Block_8:
|
||
rts ; CPU:$EA15 PRG:2A15 60
|
||
; ApplyObjectHorizontalMotion
|
||
; Purpose: clamp and integrate horizontal fixed-point velocity.
|
||
; Inputs: X = object slot.
|
||
; Returns: horizontal position/velocity updated; may deactivate escaped objects.
|
||
ApplyObjectHorizontalMotion:
|
||
cpx #$02 ; CPU:$EA16 PRG:2A16 E0 02
|
||
bcs ApplyObjectHorizontalMotion_Block ; CPU:$EA18 PRG:2A18 B0 10
|
||
lda $BD,x ; CPU:$EA1A PRG:2A1A B5 BD
|
||
bne ApplyObjectHorizontalMotion_Block_2 ; CPU:$EA1C PRG:2A1C D0 24
|
||
lda $7F,x ; CPU:$EA1E PRG:2A1E B5 7F
|
||
cmp #$01 ; CPU:$EA20 PRG:2A20 C9 01
|
||
beq ApplyObjectHorizontalMotion_Block_1 ; CPU:$EA22 PRG:2A22 F0 18
|
||
cmp #$03 ; CPU:$EA24 PRG:2A24 C9 03
|
||
bne ApplyObjectHorizontalMotion_Block_2 ; CPU:$EA26 PRG:2A26 D0 1A
|
||
beq ApplyObjectHorizontalMotion_Block_1 ; CPU:$EA28 PRG:2A28 F0 12
|
||
ApplyObjectHorizontalMotion_Block:
|
||
lda $7F,x ; CPU:$EA2A PRG:2A2A B5 7F
|
||
cmp #$01 ; CPU:$EA2C PRG:2A2C C9 01
|
||
beq ApplyObjectHorizontalMotion_Block_1 ; CPU:$EA2E PRG:2A2E F0 0C
|
||
cmp #$03 ; CPU:$EA30 PRG:2A30 C9 03
|
||
bcc ApplyObjectHorizontalMotion_Block_2 ; CPU:$EA32 PRG:2A32 90 0E
|
||
lda $19 ; CPU:$EA34 PRG:2A34 A5 19
|
||
and #$03 ; CPU:$EA36 PRG:2A36 29 03
|
||
bne ApplyObjectHorizontalMotion_Block_3 ; CPU:$EA38 PRG:2A38 D0 0B
|
||
beq ApplyObjectHorizontalMotion_Block_2 ; CPU:$EA3A PRG:2A3A F0 06
|
||
ApplyObjectHorizontalMotion_Block_1:
|
||
lda $19 ; CPU:$EA3C PRG:2A3C A5 19
|
||
and #$07 ; CPU:$EA3E PRG:2A3E 29 07
|
||
bne ApplyObjectHorizontalMotion_Block_3 ; CPU:$EA40 PRG:2A40 D0 03
|
||
ApplyObjectHorizontalMotion_Block_2:
|
||
inc $0436,x ; CPU:$EA42 PRG:2A42 FE 36 04
|
||
ApplyObjectHorizontalMotion_Block_3:
|
||
lda $0436,x ; CPU:$EA45 PRG:2A45 BD 36 04
|
||
and #$03 ; CPU:$EA48 PRG:2A48 29 03
|
||
sta $0436,x ; CPU:$EA4A PRG:2A4A 9D 36 04
|
||
bne ApplyObjectHorizontalMotion_Block_4 ; CPU:$EA4D PRG:2A4D D0 06
|
||
lda $7F,x ; CPU:$EA4F PRG:2A4F B5 7F
|
||
bne ApplyObjectHorizontalMotion_Block_4 ; CPU:$EA51 PRG:2A51 D0 02
|
||
inc $7F,x ; CPU:$EA53 PRG:2A53 F6 7F
|
||
ApplyObjectHorizontalMotion_Block_4:
|
||
rts ; CPU:$EA55 PRG:2A55 60
|
||
; ApplyObjectVerticalMotion
|
||
; Purpose: clamp and integrate vertical fixed-point velocity.
|
||
; Inputs: X = object slot.
|
||
; Returns: vertical position/velocity updated; may trigger object removal.
|
||
ApplyObjectVerticalMotion:
|
||
lda $0475,x ; CPU:$EA56 PRG:2A56 BD 75 04
|
||
beq ApplyObjectVerticalMotion_Block ; CPU:$EA59 PRG:2A59 F0 03
|
||
dec $0475,x ; CPU:$EA5B PRG:2A5B DE 75 04
|
||
ApplyObjectVerticalMotion_Block:
|
||
cpx #$02 ; CPU:$EA5E PRG:2A5E E0 02
|
||
bcs ApplyObjectVerticalMotion_Block_2 ; CPU:$EA60 PRG:2A60 B0 28
|
||
lda $C1,x ; CPU:$EA62 PRG:2A62 B5 C1
|
||
beq ApplyObjectVerticalMotion_Block_2 ; CPU:$EA64 PRG:2A64 F0 24
|
||
lda $19 ; CPU:$EA66 PRG:2A66 A5 19
|
||
lsr a ; CPU:$EA68 PRG:2A68 4A
|
||
bcc ApplyObjectVerticalMotion_Block_1 ; CPU:$EA69 PRG:2A69 90 1E
|
||
inc $0436,x ; CPU:$EA6B PRG:2A6B FE 36 04
|
||
lda $0436,x ; CPU:$EA6E PRG:2A6E BD 36 04
|
||
and #$03 ; CPU:$EA71 PRG:2A71 29 03
|
||
sta $0436,x ; CPU:$EA73 PRG:2A73 9D 36 04
|
||
lda #$01 ; CPU:$EA76 PRG:2A76 A9 01
|
||
sta $7F,x ; CPU:$EA78 PRG:2A78 95 7F
|
||
dec $045A,x ; CPU:$EA7A PRG:2A7A DE 5A 04
|
||
bne ApplyObjectVerticalMotion_Block_1 ; CPU:$EA7D PRG:2A7D D0 0A
|
||
lda #$00 ; CPU:$EA7F PRG:2A7F A9 00
|
||
sta $C1,x ; CPU:$EA81 PRG:2A81 95 C1
|
||
sta $7F,x ; CPU:$EA83 PRG:2A83 95 7F
|
||
lda #$20 ; CPU:$EA85 PRG:2A85 A9 20
|
||
sta $F0 ; CPU:$EA87 PRG:2A87 85 F0
|
||
ApplyObjectVerticalMotion_Block_1:
|
||
rts ; CPU:$EA89 PRG:2A89 60
|
||
ApplyObjectVerticalMotion_Block_2:
|
||
lda $0412,x ; CPU:$EA8A PRG:2A8A BD 12 04
|
||
clc ; CPU:$EA8D PRG:2A8D 18
|
||
ldy $0451,x ; CPU:$EA8E PRG:2A8E BC 51 04
|
||
adc $E601,y ; CPU:$EA91 PRG:2A91 79 01 E6
|
||
sta $0412,x ; CPU:$EA94 PRG:2A94 9D 12 04
|
||
bcc ApplyObjectVerticalMotion_Block_3 ; CPU:$EA97 PRG:2A97 90 03
|
||
inc $041B,x ; CPU:$EA99 PRG:2A99 FE 1B 04
|
||
ApplyObjectVerticalMotion_Block_3:
|
||
lda $041B,x ; CPU:$EA9C PRG:2A9C BD 1B 04
|
||
bmi ApplyObjectVerticalMotion_Block_5 ; CPU:$EA9F PRG:2A9F 30 1E
|
||
cmp $E66D,y ; CPU:$EAA1 PRG:2AA1 D9 6D E6
|
||
bcc ApplyObjectVerticalMotion_Block_7 ; CPU:$EAA4 PRG:2AA4 90 34
|
||
bne ApplyObjectVerticalMotion_Block_4 ; CPU:$EAA6 PRG:2AA6 D0 08
|
||
lda $0412,x ; CPU:$EAA8 PRG:2AA8 BD 12 04
|
||
cmp $E661,y ; CPU:$EAAB PRG:2AAB D9 61 E6
|
||
bcc ApplyObjectVerticalMotion_Block_7 ; CPU:$EAAE PRG:2AAE 90 2A
|
||
ApplyObjectVerticalMotion_Block_4:
|
||
lda $E661,y ; CPU:$EAB0 PRG:2AB0 B9 61 E6
|
||
sta $0412,x ; CPU:$EAB3 PRG:2AB3 9D 12 04
|
||
lda $E66D,y ; CPU:$EAB6 PRG:2AB6 B9 6D E6
|
||
sta $041B,x ; CPU:$EAB9 PRG:2AB9 9D 1B 04
|
||
jmp ApplyObjectVerticalMotion_Block_7 ; CPU:$EABC PRG:2ABC 4C DC EA
|
||
ApplyObjectVerticalMotion_Block_5:
|
||
cmp $E685,y ; CPU:$EABF PRG:2ABF D9 85 E6
|
||
bcc ApplyObjectVerticalMotion_Block_6 ; CPU:$EAC2 PRG:2AC2 90 0A
|
||
bne ApplyObjectVerticalMotion_Block_7 ; CPU:$EAC4 PRG:2AC4 D0 14
|
||
lda $0412,x ; CPU:$EAC6 PRG:2AC6 BD 12 04
|
||
cmp $E679,y ; CPU:$EAC9 PRG:2AC9 D9 79 E6
|
||
bcs ApplyObjectVerticalMotion_Block_7 ; CPU:$EACC PRG:2ACC B0 0C
|
||
ApplyObjectVerticalMotion_Block_6:
|
||
lda $E679,y ; CPU:$EACE PRG:2ACE B9 79 E6
|
||
sta $0412,x ; CPU:$EAD1 PRG:2AD1 9D 12 04
|
||
lda $E685,y ; CPU:$EAD4 PRG:2AD4 B9 85 E6
|
||
sta $041B,x ; CPU:$EAD7 PRG:2AD7 9D 1B 04
|
||
ApplyObjectVerticalMotion_Block_7:
|
||
jsr IntegrateVerticalPosition ; CPU:$EADA PRG:2ADA 20 A0 EB
|
||
cmp #$F8 ; CPU:$EADD PRG:2ADD C9 F8
|
||
bcs ApplyObjectVerticalMotion_Block_9 ; CPU:$EADF PRG:2ADF B0 2A
|
||
cmp #$E8 ; CPU:$EAE1 PRG:2AE1 C9 E8
|
||
bcc ApplyObjectVerticalMotion_Block_9 ; CPU:$EAE3 PRG:2AE3 90 26
|
||
lda #$FF ; CPU:$EAE5 PRG:2AE5 A9 FF
|
||
sta $88,x ; CPU:$EAE7 PRG:2AE7 95 88
|
||
lda #$04 ; CPU:$EAE9 PRG:2AE9 A9 04
|
||
sta $BB ; CPU:$EAEB PRG:2AEB 85 BB
|
||
lda $91,x ; CPU:$EAED PRG:2AED B5 91
|
||
sta $BC ; CPU:$EAEF PRG:2AEF 85 BC
|
||
cpx #$02 ; CPU:$EAF1 PRG:2AF1 E0 02
|
||
bcc ApplyObjectVerticalMotion_Block_8 ; CPU:$EAF3 PRG:2AF3 90 0E
|
||
lda #$80 ; CPU:$EAF5 PRG:2AF5 A9 80
|
||
sta $88,x ; CPU:$EAF7 PRG:2AF7 95 88
|
||
lda #$00 ; CPU:$EAF9 PRG:2AF9 A9 00
|
||
sta $7F,x ; CPU:$EAFB PRG:2AFB 95 7F
|
||
lda #$01 ; CPU:$EAFD PRG:2AFD A9 01
|
||
sta $F3 ; CPU:$EAFF PRG:2AFF 85 F3
|
||
bne ApplyObjectVerticalMotion_Block_9 ; CPU:$EB01 PRG:2B01 D0 08
|
||
ApplyObjectVerticalMotion_Block_8:
|
||
lda $C8 ; CPU:$EB03 PRG:2B03 A5 C8
|
||
bne ApplyObjectVerticalMotion_Block_9 ; CPU:$EB05 PRG:2B05 D0 04
|
||
lda #$40 ; CPU:$EB07 PRG:2B07 A9 40
|
||
sta $F0 ; CPU:$EB09 PRG:2B09 85 F0
|
||
ApplyObjectVerticalMotion_Block_9:
|
||
lda $042D,x ; CPU:$EB0B PRG:2B0B BD 2D 04
|
||
bmi ApplyObjectVerticalMotion_Block_11 ; CPU:$EB0E PRG:2B0E 30 1E
|
||
cmp $E63D,y ; CPU:$EB10 PRG:2B10 D9 3D E6
|
||
bcc ApplyObjectVerticalMotion_Block_13 ; CPU:$EB13 PRG:2B13 90 34
|
||
bne ApplyObjectVerticalMotion_Block_10 ; CPU:$EB15 PRG:2B15 D0 08
|
||
lda $0424,x ; CPU:$EB17 PRG:2B17 BD 24 04
|
||
cmp $E631,y ; CPU:$EB1A PRG:2B1A D9 31 E6
|
||
bcc ApplyObjectVerticalMotion_Block_13 ; CPU:$EB1D PRG:2B1D 90 2A
|
||
ApplyObjectVerticalMotion_Block_10:
|
||
lda $E631,y ; CPU:$EB1F PRG:2B1F B9 31 E6
|
||
sta $0424,x ; CPU:$EB22 PRG:2B22 9D 24 04
|
||
lda $E63D,y ; CPU:$EB25 PRG:2B25 B9 3D E6
|
||
sta $042D,x ; CPU:$EB28 PRG:2B28 9D 2D 04
|
||
jmp ApplyObjectVerticalMotion_Block_13 ; CPU:$EB2B PRG:2B2B 4C 4B EB
|
||
ApplyObjectVerticalMotion_Block_11:
|
||
cmp $E655,y ; CPU:$EB2E PRG:2B2E D9 55 E6
|
||
bcc ApplyObjectVerticalMotion_Block_12 ; CPU:$EB31 PRG:2B31 90 0A
|
||
bne ApplyObjectVerticalMotion_Block_13 ; CPU:$EB33 PRG:2B33 D0 14
|
||
lda $0424,x ; CPU:$EB35 PRG:2B35 BD 24 04
|
||
cmp $E649,y ; CPU:$EB38 PRG:2B38 D9 49 E6
|
||
bcs ApplyObjectVerticalMotion_Block_13 ; CPU:$EB3B PRG:2B3B B0 0C
|
||
ApplyObjectVerticalMotion_Block_12:
|
||
lda $E649,y ; CPU:$EB3D PRG:2B3D B9 49 E6
|
||
sta $0424,x ; CPU:$EB40 PRG:2B40 9D 24 04
|
||
lda $E655,y ; CPU:$EB43 PRG:2B43 B9 55 E6
|
||
sta $042D,x ; CPU:$EB46 PRG:2B46 9D 2D 04
|
||
ApplyObjectVerticalMotion_Block_13:
|
||
jsr IntegrateHorizontalPosition ; CPU:$EB49 PRG:2B49 20 8E EB
|
||
lda $16 ; CPU:$EB4C PRG:2B4C A5 16
|
||
beq ApplyObjectVerticalMotion_Block_16 ; CPU:$EB4E PRG:2B4E F0 10
|
||
lda $91,x ; CPU:$EB50 PRG:2B50 B5 91
|
||
cmp #$10 ; CPU:$EB52 PRG:2B52 C9 10
|
||
bcs ApplyObjectVerticalMotion_Block_14 ; CPU:$EB54 PRG:2B54 B0 02
|
||
lda #$10 ; CPU:$EB56 PRG:2B56 A9 10
|
||
ApplyObjectVerticalMotion_Block_14:
|
||
cmp #$E0 ; CPU:$EB58 PRG:2B58 C9 E0
|
||
bcc ApplyObjectVerticalMotion_Block_15 ; CPU:$EB5A PRG:2B5A 90 02
|
||
lda #$E0 ; CPU:$EB5C PRG:2B5C A9 E0
|
||
ApplyObjectVerticalMotion_Block_15:
|
||
sta $91,x ; CPU:$EB5E PRG:2B5E 95 91
|
||
ApplyObjectVerticalMotion_Block_16:
|
||
lda $C8 ; CPU:$EB60 PRG:2B60 A5 C8
|
||
beq ApplyObjectVerticalMotion_Block_18 ; CPU:$EB62 PRG:2B62 F0 27
|
||
lda $88,x ; CPU:$EB64 PRG:2B64 B5 88
|
||
bne ApplyObjectVerticalMotion_Block_18 ; CPU:$EB66 PRG:2B66 D0 23
|
||
lda $9A,x ; CPU:$EB68 PRG:2B68 B5 9A
|
||
cmp #$C8 ; CPU:$EB6A PRG:2B6A C9 C8
|
||
bcc ApplyObjectVerticalMotion_Block_18 ; CPU:$EB6C PRG:2B6C 90 1D
|
||
lda #$C7 ; CPU:$EB6E PRG:2B6E A9 C7
|
||
sta $9A,x ; CPU:$EB70 PRG:2B70 95 9A
|
||
lda $0451,x ; CPU:$EB72 PRG:2B72 BD 51 04
|
||
cmp #$0B ; CPU:$EB75 PRG:2B75 C9 0B
|
||
bne ApplyObjectVerticalMotion_Block_17 ; CPU:$EB77 PRG:2B77 D0 09
|
||
dec $0451,x ; CPU:$EB79 PRG:2B79 DE 51 04
|
||
jsr $F107 ; CPU:$EB7C PRG:2B7C 20 07 F1
|
||
jmp $F18C ; CPU:$EB7F PRG:2B7F 4C 8C F1
|
||
ApplyObjectVerticalMotion_Block_17:
|
||
lda #$02 ; CPU:$EB82 PRG:2B82 A9 02
|
||
sta $88,x ; CPU:$EB84 PRG:2B84 95 88
|
||
lda #$03 ; CPU:$EB86 PRG:2B86 A9 03
|
||
sta $0451,x ; CPU:$EB88 PRG:2B88 9D 51 04
|
||
ApplyObjectVerticalMotion_Block_18:
|
||
rts ; CPU:$EB8B PRG:2B8B 60
|
||
; IntegrateHorizontalPosition
|
||
; Purpose: add horizontal velocity to fixed-point X position.
|
||
; Inputs: X = object slot.
|
||
; Returns: $0400,X and $91,X updated.
|
||
IntegrateHorizontalPosition:
|
||
lda $0400,x ; CPU:$EB8C PRG:2B8C BD 00 04
|
||
clc ; CPU:$EB8F PRG:2B8F 18
|
||
adc $0424,x ; CPU:$EB90 PRG:2B90 7D 24 04
|
||
sta $0400,x ; CPU:$EB93 PRG:2B93 9D 00 04
|
||
lda $91,x ; CPU:$EB96 PRG:2B96 B5 91
|
||
adc $042D,x ; CPU:$EB98 PRG:2B98 7D 2D 04
|
||
sta $91,x ; CPU:$EB9B PRG:2B9B 95 91
|
||
rts ; CPU:$EB9D PRG:2B9D 60
|
||
; IntegrateVerticalPosition
|
||
; Purpose: add vertical velocity to fixed-point Y position.
|
||
; Inputs: X = object slot.
|
||
; Returns: $0409,X and $9A,X updated.
|
||
IntegrateVerticalPosition:
|
||
lda $0409,x ; CPU:$EB9E PRG:2B9E BD 09 04
|
||
clc ; CPU:$EBA1 PRG:2BA1 18
|
||
adc $0412,x ; CPU:$EBA2 PRG:2BA2 7D 12 04
|
||
sta $0409,x ; CPU:$EBA5 PRG:2BA5 9D 09 04
|
||
lda $9A,x ; CPU:$EBA8 PRG:2BA8 B5 9A
|
||
adc $041B,x ; CPU:$EBAA PRG:2BAA 7D 1B 04
|
||
sta $9A,x ; CPU:$EBAD PRG:2BAD 95 9A
|
||
rts ; CPU:$EBAF PRG:2BAF 60
|
||
; ApplyHorizontalCollisionResponse
|
||
; Purpose: run collision handling around horizontal integration.
|
||
; Inputs: X = object slot.
|
||
; Returns: collision response and position updated.
|
||
ApplyHorizontalCollisionResponse:
|
||
jsr $F0B4 ; CPU:$EBB0 PRG:2BB0 20 B4 F0
|
||
jsr IntegrateHorizontalPosition ; CPU:$EBB3 PRG:2BB3 20 8E EB
|
||
jmp $F0B4 ; CPU:$EBB6 PRG:2BB6 4C B4 F0
|
||
; ApplyVerticalCollisionResponse
|
||
; Purpose: run collision handling around vertical integration.
|
||
; Inputs: X = object slot.
|
||
; Returns: collision response and position updated.
|
||
ApplyVerticalCollisionResponse:
|
||
jsr $F0B4 ; CPU:$EBB9 PRG:2BB9 20 B4 F0
|
||
jsr IntegrateVerticalPosition ; CPU:$EBBC PRG:2BBC 20 A0 EB
|
||
jmp $F0B4 ; CPU:$EBBF PRG:2BBF 4C B4 F0
|
||
; UpdateObjectEnvironmentState
|
||
; Purpose: update environment-dependent object motion and collision flags.
|
||
; Inputs: X = object slot.
|
||
; Returns: movement flags and velocities adjusted.
|
||
UpdateObjectEnvironmentState:
|
||
cpx #$02 ; CPU:$EBC2 PRG:2BC2 E0 02
|
||
bcs UpdateObjectEnvironmentState_Block_1 ; CPU:$EBC4 PRG:2BC4 B0 1B
|
||
lda $88,x ; CPU:$EBC6 PRG:2BC6 B5 88
|
||
bne UpdateObjectEnvironmentState_Block ; CPU:$EBC8 PRG:2BC8 D0 0A
|
||
lda $0436,x ; CPU:$EBCA PRG:2BCA BD 36 04
|
||
bne UpdateObjectEnvironmentState_Block ; CPU:$EBCD PRG:2BCD D0 05
|
||
lda #$00 ; CPU:$EBCF PRG:2BCF A9 00
|
||
sta $7F,x ; CPU:$EBD1 PRG:2BD1 95 7F
|
||
rts ; CPU:$EBD3 PRG:2BD3 60
|
||
UpdateObjectEnvironmentState_Block:
|
||
lda $7F,x ; CPU:$EBD4 PRG:2BD4 B5 7F
|
||
cmp #$06 ; CPU:$EBD6 PRG:2BD6 C9 06
|
||
bcc UpdateObjectEnvironmentState_Block_7 ; CPU:$EBD8 PRG:2BD8 90 5C
|
||
lda #$01 ; CPU:$EBDA PRG:2BDA A9 01
|
||
sta $7F,x ; CPU:$EBDC PRG:2BDC 95 7F
|
||
dec $88,x ; CPU:$EBDE PRG:2BDE D6 88
|
||
rts ; CPU:$EBE0 PRG:2BE0 60
|
||
UpdateObjectEnvironmentState_Block_1:
|
||
lda $88,x ; CPU:$EBE1 PRG:2BE1 B5 88
|
||
cmp #$02 ; CPU:$EBE3 PRG:2BE3 C9 02
|
||
beq UpdateObjectEnvironmentState_Block_7 ; CPU:$EBE5 PRG:2BE5 F0 4F
|
||
lda $0436,x ; CPU:$EBE7 PRG:2BE7 BD 36 04
|
||
bne UpdateObjectEnvironmentState_Block_3 ; CPU:$EBEA PRG:2BEA D0 0F
|
||
lda $88,x ; CPU:$EBEC PRG:2BEC B5 88
|
||
bne UpdateObjectEnvironmentState_Block_2 ; CPU:$EBEE PRG:2BEE D0 05
|
||
lda #$00 ; CPU:$EBF0 PRG:2BF0 A9 00
|
||
sta $7F,x ; CPU:$EBF2 PRG:2BF2 95 7F
|
||
rts ; CPU:$EBF4 PRG:2BF4 60
|
||
UpdateObjectEnvironmentState_Block_2:
|
||
lda $7F,x ; CPU:$EBF5 PRG:2BF5 B5 7F
|
||
bne UpdateObjectEnvironmentState_Block_4 ; CPU:$EBF7 PRG:2BF7 D0 03
|
||
inc $7F,x ; CPU:$EBF9 PRG:2BF9 F6 7F
|
||
UpdateObjectEnvironmentState_Block_3:
|
||
rts ; CPU:$EBFB PRG:2BFB 60
|
||
UpdateObjectEnvironmentState_Block_4:
|
||
cmp #$02 ; CPU:$EBFC PRG:2BFC C9 02
|
||
bcc UpdateObjectEnvironmentState_Block_3 ; CPU:$EBFE PRG:2BFE 90 FB
|
||
dec $045A,x ; CPU:$EC00 PRG:2C00 DE 5A 04
|
||
bne UpdateObjectEnvironmentState_Block_6 ; CPU:$EC03 PRG:2C03 D0 30
|
||
lda $C7 ; CPU:$EC05 PRG:2C05 A5 C7
|
||
sta $045A,x ; CPU:$EC07 PRG:2C07 9D 5A 04
|
||
inc $7F,x ; CPU:$EC0A PRG:2C0A F6 7F
|
||
lda $7F,x ; CPU:$EC0C PRG:2C0C B5 7F
|
||
cmp #$07 ; CPU:$EC0E PRG:2C0E C9 07
|
||
bcc UpdateObjectEnvironmentState_Block_6 ; CPU:$EC10 PRG:2C10 90 23
|
||
lda #$02 ; CPU:$EC12 PRG:2C12 A9 02
|
||
sta $88,x ; CPU:$EC14 PRG:2C14 95 88
|
||
lda #$00 ; CPU:$EC16 PRG:2C16 A9 00
|
||
sta $7F,x ; CPU:$EC18 PRG:2C18 95 7F
|
||
ldy $0451,x ; CPU:$EC1A PRG:2C1A BC 51 04
|
||
lda EnvironmentStateTable,y ; CPU:$EC1D PRG:2C1D B9 AE EC
|
||
ldy $047E,x ; CPU:$EC20 PRG:2C20 BC 7E 04
|
||
bne UpdateObjectEnvironmentState_Block_5 ; CPU:$EC23 PRG:2C23 D0 08
|
||
dec $047E,x ; CPU:$EC25 PRG:2C25 DE 7E 04
|
||
lda $0451,x ; CPU:$EC28 PRG:2C28 BD 51 04
|
||
and #$03 ; CPU:$EC2B PRG:2C2B 29 03
|
||
UpdateObjectEnvironmentState_Block_5:
|
||
sta $0451,x ; CPU:$EC2D PRG:2C2D 9D 51 04
|
||
lda #$FE ; CPU:$EC30 PRG:2C30 A9 FE
|
||
sta $041B,x ; CPU:$EC32 PRG:2C32 9D 1B 04
|
||
UpdateObjectEnvironmentState_Block_6:
|
||
rts ; CPU:$EC35 PRG:2C35 60
|
||
UpdateObjectEnvironmentState_Block_7:
|
||
jsr $E6E9 ; CPU:$EC36 PRG:2C36 20 E9 E6
|
||
lda $31,x ; CPU:$EC39 PRG:2C39 B5 31
|
||
and #$C3 ; CPU:$EC3B PRG:2C3B 29 C3
|
||
beq UpdateObjectEnvironmentState_Block_8 ; CPU:$EC3D PRG:2C3D F0 08
|
||
cpx #$02 ; CPU:$EC3F PRG:2C3F E0 02
|
||
bcs UpdateObjectEnvironmentState_Block_8 ; CPU:$EC41 PRG:2C41 B0 04
|
||
lda #$00 ; CPU:$EC43 PRG:2C43 A9 00
|
||
sta $BD,x ; CPU:$EC45 PRG:2C45 95 BD
|
||
UpdateObjectEnvironmentState_Block_8:
|
||
lda $31,x ; CPU:$EC47 PRG:2C47 B5 31
|
||
and #$40 ; CPU:$EC49 PRG:2C49 29 40
|
||
bne UpdateObjectEnvironmentState_Block_10 ; CPU:$EC4B PRG:2C4B D0 12
|
||
lda $31,x ; CPU:$EC4D PRG:2C4D B5 31
|
||
and #$80 ; CPU:$EC4F PRG:2C4F 29 80
|
||
bne UpdateObjectEnvironmentState_Block_9 ; CPU:$EC51 PRG:2C51 D0 07
|
||
lda #$00 ; CPU:$EC53 PRG:2C53 A9 00
|
||
sta $0620,x ; CPU:$EC55 PRG:2C55 9D 20 06
|
||
beq UpdateObjectEnvironmentState_Block_14 ; CPU:$EC58 PRG:2C58 F0 51
|
||
UpdateObjectEnvironmentState_Block_9:
|
||
lda $0620,x ; CPU:$EC5A PRG:2C5A BD 20 06
|
||
bne UpdateObjectEnvironmentState_Block_14 ; CPU:$EC5D PRG:2C5D D0 4C
|
||
UpdateObjectEnvironmentState_Block_10:
|
||
lda $7F,x ; CPU:$EC5F PRG:2C5F B5 7F
|
||
cmp #$02 ; CPU:$EC61 PRG:2C61 C9 02
|
||
bcc UpdateObjectEnvironmentState_Block_11 ; CPU:$EC63 PRG:2C63 90 0E
|
||
dec $9A,x ; CPU:$EC65 PRG:2C65 D6 9A
|
||
dec $9A,x ; CPU:$EC67 PRG:2C67 D6 9A
|
||
lda #$00 ; CPU:$EC69 PRG:2C69 A9 00
|
||
sta $0412,x ; CPU:$EC6B PRG:2C6B 9D 12 04
|
||
sta $041B,x ; CPU:$EC6E PRG:2C6E 9D 1B 04
|
||
beq UpdateObjectEnvironmentState_Block_12 ; CPU:$EC71 PRG:2C71 F0 09
|
||
UpdateObjectEnvironmentState_Block_11:
|
||
cmp #$01 ; CPU:$EC73 PRG:2C73 C9 01
|
||
beq UpdateObjectEnvironmentState_Block_12 ; CPU:$EC75 PRG:2C75 F0 05
|
||
lda $0436,x ; CPU:$EC77 PRG:2C77 BD 36 04
|
||
bne UpdateObjectEnvironmentState_Block_14 ; CPU:$EC7A PRG:2C7A D0 2F
|
||
UpdateObjectEnvironmentState_Block_12:
|
||
lda #$00 ; CPU:$EC7C PRG:2C7C A9 00
|
||
sta $7F,x ; CPU:$EC7E PRG:2C7E 95 7F
|
||
lda #$01 ; CPU:$EC80 PRG:2C80 A9 01
|
||
sta $0436,x ; CPU:$EC82 PRG:2C82 9D 36 04
|
||
lda #$01 ; CPU:$EC85 PRG:2C85 A9 01
|
||
sta $0620,x ; CPU:$EC87 PRG:2C87 9D 20 06
|
||
ldy #$00 ; CPU:$EC8A PRG:2C8A A0 00
|
||
cpx #$02 ; CPU:$EC8C PRG:2C8C E0 02
|
||
bcc UpdateObjectEnvironmentState_Block_13 ; CPU:$EC8E PRG:2C8E 90 01
|
||
iny ; CPU:$EC90 PRG:2C90 C8
|
||
UpdateObjectEnvironmentState_Block_13:
|
||
lda a:$00F0,y ; CPU:$EC91 PRG:2C91 B9 F0 00
|
||
ora #$10 ; CPU:$EC94 PRG:2C94 09 10
|
||
sta a:$00F0,y ; CPU:$EC96 PRG:2C96 99 F0 00
|
||
lda $0412,x ; CPU:$EC99 PRG:2C99 BD 12 04
|
||
sec ; CPU:$EC9C PRG:2C9C 38
|
||
ldy $0451,x ; CPU:$EC9D PRG:2C9D BC 51 04
|
||
sbc $E60D,y ; CPU:$ECA0 PRG:2CA0 F9 0D E6
|
||
sta $0412,x ; CPU:$ECA3 PRG:2CA3 9D 12 04
|
||
bcs UpdateObjectEnvironmentState_Block_14 ; CPU:$ECA6 PRG:2CA6 B0 03
|
||
dec $041B,x ; CPU:$ECA8 PRG:2CA8 DE 1B 04
|
||
UpdateObjectEnvironmentState_Block_14:
|
||
rts ; CPU:$ECAB PRG:2CAB 60
|
||
|
||
; Environment response pattern used by UpdateObjectEnvironmentState.
|
||
EnvironmentStateTable:
|
||
.byte $01, $02, $02, $03, $01, $02, $02, $03 ; CPU:$ECAC PRG:2CAC 01 02 02 03 01 02 02 03
|
||
.byte $01, $02, $02, $03 ; CPU:$ECB4 PRG:2CB4 01 02 02 03
|
||
; UpdateSpecialObjectState
|
||
; Purpose: update special/falling object states and test contact with active players.
|
||
; Inputs: X = object slot.
|
||
; Returns: position/state/event fields updated; X restored.
|
||
UpdateSpecialObjectState:
|
||
lda $7F,x ; CPU:$ECB8 PRG:2CB8 B5 7F
|
||
bne UpdateSpecialObjectState_Block_3 ; CPU:$ECBA PRG:2CBA D0 69
|
||
jsr $E7B1 ; CPU:$ECBC PRG:2CBC 20 B1 E7
|
||
jsr $EB8E ; CPU:$ECBF PRG:2CBF 20 8E EB
|
||
lda $0409,x ; CPU:$ECC2 PRG:2CC2 BD 09 04
|
||
sec ; CPU:$ECC5 PRG:2CC5 38
|
||
sbc #$60 ; CPU:$ECC6 PRG:2CC6 E9 60
|
||
sta $0409,x ; CPU:$ECC8 PRG:2CC8 9D 09 04
|
||
lda $9A,x ; CPU:$ECCB PRG:2CCB B5 9A
|
||
sbc #$00 ; CPU:$ECCD PRG:2CCD E9 00
|
||
sta $9A,x ; CPU:$ECCF PRG:2CCF 95 9A
|
||
cmp #$F1 ; CPU:$ECD1 PRG:2CD1 C9 F1
|
||
bcc UpdateSpecialObjectState_Block ; CPU:$ECD3 PRG:2CD3 90 04
|
||
lda #$FF ; CPU:$ECD5 PRG:2CD5 A9 FF
|
||
sta $88,x ; CPU:$ECD7 PRG:2CD7 95 88
|
||
UpdateSpecialObjectState_Block:
|
||
txa ; CPU:$ECD9 PRG:2CD9 8A
|
||
pha ; CPU:$ECDA PRG:2CDA 48
|
||
ldy #$01 ; CPU:$ECDB PRG:2CDB A0 01
|
||
UpdateSpecialObjectState_Block_1:
|
||
lda a:$0088,y ; CPU:$ECDD PRG:2CDD B9 88 00
|
||
beq UpdateSpecialObjectState_Block_2 ; CPU:$ECE0 PRG:2CE0 F0 3E
|
||
bmi UpdateSpecialObjectState_Block_2 ; CPU:$ECE2 PRG:2CE2 30 3C
|
||
lda $9A,x ; CPU:$ECE4 PRG:2CE4 B5 9A
|
||
sec ; CPU:$ECE6 PRG:2CE6 38
|
||
sbc a:$009A,y ; CPU:$ECE7 PRG:2CE7 F9 9A 00
|
||
jsr $F08E ; CPU:$ECEA PRG:2CEA 20 8E F0
|
||
cmp #$18 ; CPU:$ECED PRG:2CED C9 18
|
||
bcs UpdateSpecialObjectState_Block_2 ; CPU:$ECEF PRG:2CEF B0 2F
|
||
lda $91,x ; CPU:$ECF1 PRG:2CF1 B5 91
|
||
sec ; CPU:$ECF3 PRG:2CF3 38
|
||
sbc a:$0091,y ; CPU:$ECF4 PRG:2CF4 F9 91 00
|
||
jsr $F08E ; CPU:$ECF7 PRG:2CF7 20 8E F0
|
||
cmp #$10 ; CPU:$ECFA PRG:2CFA C9 10
|
||
bcs UpdateSpecialObjectState_Block_2 ; CPU:$ECFC PRG:2CFC B0 22
|
||
lda #$FF ; CPU:$ECFE PRG:2CFE A9 FF
|
||
sta $7F,x ; CPU:$ED00 PRG:2D00 95 7F
|
||
lda #$03 ; CPU:$ED02 PRG:2D02 A9 03
|
||
sta $045A,x ; CPU:$ED04 PRG:2D04 9D 5A 04
|
||
lda #$78 ; CPU:$ED07 PRG:2D07 A9 78
|
||
sta $C5 ; CPU:$ED09 PRG:2D09 85 C5
|
||
lda #$02 ; CPU:$ED0B PRG:2D0B A9 02
|
||
sta $F0 ; CPU:$ED0D PRG:2D0D 85 F0
|
||
lda #$32 ; CPU:$ED0F PRG:2D0F A9 32
|
||
sty $3E ; CPU:$ED11 PRG:2D11 84 3E
|
||
jsr $D6DE ; CPU:$ED13 PRG:2D13 20 DE D6
|
||
lda #$01 ; CPU:$ED16 PRG:2D16 A9 01
|
||
ldx $3E ; CPU:$ED18 PRG:2D18 A6 3E
|
||
jsr $D871 ; CPU:$ED1A PRG:2D1A 20 71 D8
|
||
pla ; CPU:$ED1D PRG:2D1D 68
|
||
tax ; CPU:$ED1E PRG:2D1E AA
|
||
rts ; CPU:$ED1F PRG:2D1F 60
|
||
UpdateSpecialObjectState_Block_2:
|
||
dey ; CPU:$ED20 PRG:2D20 88
|
||
bpl UpdateSpecialObjectState_Block_1 ; CPU:$ED21 PRG:2D21 10 BA
|
||
pla ; CPU:$ED23 PRG:2D23 68
|
||
tax ; CPU:$ED24 PRG:2D24 AA
|
||
UpdateSpecialObjectState_Block_3:
|
||
rts ; CPU:$ED25 PRG:2D25 60
|
||
; ResolveStageCollision
|
||
; Purpose: test an object against stage collision boundaries and classify contact side.
|
||
; Inputs: X = object slot; stage collision pointers in zero page.
|
||
; Returns: collision mask in $CC and response fields updated.
|
||
ResolveStageCollision:
|
||
ldy $88,x ; CPU:$ED26 PRG:2D26 B4 88
|
||
dey ; CPU:$ED28 PRG:2D28 88
|
||
bpl ResolveStageCollision_Block_1 ; CPU:$ED29 PRG:2D29 10 01
|
||
ResolveStageCollision_Block:
|
||
rts ; CPU:$ED2B PRG:2D2B 60
|
||
ResolveStageCollision_Block_1:
|
||
lda $9A,x ; CPU:$ED2C PRG:2D2C B5 9A
|
||
cmp #$F9 ; CPU:$ED2E PRG:2D2E C9 F9
|
||
bcc ResolveStageCollision_Block_2 ; CPU:$ED30 PRG:2D30 90 0C
|
||
lda $041B,x ; CPU:$ED32 PRG:2D32 BD 1B 04
|
||
bpl ResolveStageCollision_Block ; CPU:$ED35 PRG:2D35 10 F4
|
||
lda #$00 ; CPU:$ED37 PRG:2D37 A9 00
|
||
sta $CC ; CPU:$ED39 PRG:2D39 85 CC
|
||
jmp ResolveStageCollision_Store ; CPU:$ED3B PRG:2D3B 4C E1 ED
|
||
ResolveStageCollision_Block_2:
|
||
ldy $CD ; CPU:$ED3E PRG:2D3E A4 CD
|
||
bmi UpdateSpecialObjectState_Block_3 ; CPU:$ED40 PRG:2D40 30 E3
|
||
ResolveStageCollision_Load:
|
||
lda #$00 ; CPU:$ED42 PRG:2D42 A9 00
|
||
sta $CC ; CPU:$ED44 PRG:2D44 85 CC
|
||
lda ($27),y ; CPU:$ED46 PRG:2D46 B1 27
|
||
sec ; CPU:$ED48 PRG:2D48 38
|
||
sbc #$18 ; CPU:$ED49 PRG:2D49 E9 18
|
||
cmp $9A,x ; CPU:$ED4B PRG:2D4B D5 9A
|
||
bcs ResolveStageCollision_Block_10 ; CPU:$ED4D PRG:2D4D B0 65
|
||
adc #$03 ; CPU:$ED4F PRG:2D4F 69 03
|
||
cmp $9A,x ; CPU:$ED51 PRG:2D51 D5 9A
|
||
bcc ResolveStageCollision_Block_3 ; CPU:$ED53 PRG:2D53 90 04
|
||
lda #$01 ; CPU:$ED55 PRG:2D55 A9 01
|
||
bne ResolveStageCollision_Block_4 ; CPU:$ED57 PRG:2D57 D0 0E
|
||
ResolveStageCollision_Block_3:
|
||
lda ($29),y ; CPU:$ED59 PRG:2D59 B1 29
|
||
cmp $9A,x ; CPU:$ED5B PRG:2D5B D5 9A
|
||
bcc ResolveStageCollision_Block_10 ; CPU:$ED5D PRG:2D5D 90 55
|
||
sbc #$03 ; CPU:$ED5F PRG:2D5F E9 03
|
||
cmp $9A,x ; CPU:$ED61 PRG:2D61 D5 9A
|
||
bcs ResolveStageCollision_Block_7 ; CPU:$ED63 PRG:2D63 B0 22
|
||
lda #$02 ; CPU:$ED65 PRG:2D65 A9 02
|
||
ResolveStageCollision_Block_4:
|
||
sta $CC ; CPU:$ED67 PRG:2D67 85 CC
|
||
lda ($23),y ; CPU:$ED69 PRG:2D69 B1 23
|
||
cmp #$10 ; CPU:$ED6B PRG:2D6B C9 10
|
||
beq ResolveStageCollision_Block_5 ; CPU:$ED6D PRG:2D6D F0 07
|
||
sec ; CPU:$ED6F PRG:2D6F 38
|
||
sbc #$0C ; CPU:$ED70 PRG:2D70 E9 0C
|
||
cmp $91,x ; CPU:$ED72 PRG:2D72 D5 91
|
||
bcs ResolveStageCollision_Block_6 ; CPU:$ED74 PRG:2D74 B0 0D
|
||
ResolveStageCollision_Block_5:
|
||
lda ($25),y ; CPU:$ED76 PRG:2D76 B1 25
|
||
cmp #$FF ; CPU:$ED78 PRG:2D78 C9 FF
|
||
beq ResolveStageCollision_Block_7 ; CPU:$ED7A PRG:2D7A F0 0B
|
||
sec ; CPU:$ED7C PRG:2D7C 38
|
||
sbc #$04 ; CPU:$ED7D PRG:2D7D E9 04
|
||
cmp $91,x ; CPU:$ED7F PRG:2D7F D5 91
|
||
bcs ResolveStageCollision_Block_7 ; CPU:$ED81 PRG:2D81 B0 04
|
||
ResolveStageCollision_Block_6:
|
||
lda #$00 ; CPU:$ED83 PRG:2D83 A9 00
|
||
sta $CC ; CPU:$ED85 PRG:2D85 85 CC
|
||
ResolveStageCollision_Block_7:
|
||
lda ($23),y ; CPU:$ED87 PRG:2D87 B1 23
|
||
sec ; CPU:$ED89 PRG:2D89 38
|
||
sbc #$10 ; CPU:$ED8A PRG:2D8A E9 10
|
||
beq ResolveStageCollision_Block_8 ; CPU:$ED8C PRG:2D8C F0 10
|
||
cmp $91,x ; CPU:$ED8E PRG:2D8E D5 91
|
||
bcs ResolveStageCollision_Block_10 ; CPU:$ED90 PRG:2D90 B0 22
|
||
adc #$04 ; CPU:$ED92 PRG:2D92 69 04
|
||
cmp $91,x ; CPU:$ED94 PRG:2D94 D5 91
|
||
bcc ResolveStageCollision_Block_8 ; CPU:$ED96 PRG:2D96 90 06
|
||
lda $CC ; CPU:$ED98 PRG:2D98 A5 CC
|
||
ora #$04 ; CPU:$ED9A PRG:2D9A 09 04
|
||
bne ResolveStageCollision_Block_9 ; CPU:$ED9C PRG:2D9C D0 14
|
||
ResolveStageCollision_Block_8:
|
||
lda ($25),y ; CPU:$ED9E PRG:2D9E B1 25
|
||
cmp #$FF ; CPU:$EDA0 PRG:2DA0 C9 FF
|
||
beq ResolveStageCollision_Block_10 ; CPU:$EDA2 PRG:2DA2 F0 10
|
||
cmp $91,x ; CPU:$EDA4 PRG:2DA4 D5 91
|
||
bcc ResolveStageCollision_Block_10 ; CPU:$EDA6 PRG:2DA6 90 0C
|
||
sbc #$04 ; CPU:$EDA8 PRG:2DA8 E9 04
|
||
cmp $91,x ; CPU:$EDAA PRG:2DAA D5 91
|
||
bcs ResolveStageCollision_Block_10 ; CPU:$EDAC PRG:2DAC B0 06
|
||
lda $CC ; CPU:$EDAE PRG:2DAE A5 CC
|
||
ora #$08 ; CPU:$EDB0 PRG:2DB0 09 08
|
||
ResolveStageCollision_Block_9:
|
||
sta $CC ; CPU:$EDB2 PRG:2DB2 85 CC
|
||
ResolveStageCollision_Block_10:
|
||
lda $CC ; CPU:$EDB4 PRG:2DB4 A5 CC
|
||
bne ResolveStageCollision_Block_12 ; CPU:$EDB6 PRG:2DB6 D0 07
|
||
dey ; CPU:$EDB8 PRG:2DB8 88
|
||
bmi ResolveStageCollision_Block_11 ; CPU:$EDB9 PRG:2DB9 30 03
|
||
jmp ResolveStageCollision_Load ; CPU:$EDBB PRG:2DBB 4C 44 ED
|
||
ResolveStageCollision_Block_11:
|
||
rts ; CPU:$EDBE PRG:2DBE 60
|
||
ResolveStageCollision_Block_12:
|
||
lsr $CC ; CPU:$EDBF PRG:2DBF 46 CC
|
||
bcc ResolveStageCollision_Block_13 ; CPU:$EDC1 PRG:2DC1 90 11
|
||
lda $041B,x ; CPU:$EDC3 PRG:2DC3 BD 1B 04
|
||
bmi ResolveStageCollision_Block_13 ; CPU:$EDC6 PRG:2DC6 30 0C
|
||
lda ($27),y ; CPU:$EDC8 PRG:2DC8 B1 27
|
||
sbc #$18 ; CPU:$EDCA PRG:2DCA E9 18
|
||
sta $9A,x ; CPU:$EDCC PRG:2DCC 95 9A
|
||
inc $9A,x ; CPU:$EDCE PRG:2DCE F6 9A
|
||
lda #$01 ; CPU:$EDD0 PRG:2DD0 A9 01
|
||
sta $CB ; CPU:$EDD2 PRG:2DD2 85 CB
|
||
ResolveStageCollision_Block_13:
|
||
lsr $CC ; CPU:$EDD4 PRG:2DD4 46 CC
|
||
bcc ResolveStageCollision_Block_15 ; CPU:$EDD6 PRG:2DD6 90 1A
|
||
lda $041B,x ; CPU:$EDD8 PRG:2DD8 BD 1B 04
|
||
bpl ResolveStageCollision_Block_15 ; CPU:$EDDB PRG:2DDB 10 15
|
||
lda ($29),y ; CPU:$EDDD PRG:2DDD B1 29
|
||
ResolveStageCollision_Store:
|
||
sta $9A,x ; CPU:$EDDF PRG:2DDF 95 9A
|
||
jsr $F107 ; CPU:$EDE1 PRG:2DE1 20 07 F1
|
||
jsr $F18C ; CPU:$EDE4 PRG:2DE4 20 8C F1
|
||
cpx #$02 ; CPU:$EDE7 PRG:2DE7 E0 02
|
||
bcs ResolveStageCollision_Block_14 ; CPU:$EDE9 PRG:2DE9 B0 03
|
||
jsr $CC33 ; CPU:$EDEB PRG:2DEB 20 33 CC
|
||
ResolveStageCollision_Block_14:
|
||
lda $CB ; CPU:$EDEE PRG:2DEE A5 CB
|
||
bne ResolveStageCollision_Block_18 ; CPU:$EDF0 PRG:2DF0 D0 30
|
||
ResolveStageCollision_Block_15:
|
||
lsr $CC ; CPU:$EDF2 PRG:2DF2 46 CC
|
||
bcc ResolveStageCollision_Block_16 ; CPU:$EDF4 PRG:2DF4 90 07
|
||
lda $042D,x ; CPU:$EDF6 PRG:2DF6 BD 2D 04
|
||
bmi ResolveStageCollision_Block_16 ; CPU:$EDF9 PRG:2DF9 30 02
|
||
bpl ResolveStageCollision_Block_17 ; CPU:$EDFB PRG:2DFB 10 09
|
||
ResolveStageCollision_Block_16:
|
||
lsr $CC ; CPU:$EDFD PRG:2DFD 46 CC
|
||
bcc ResolveStageCollision_Block_18 ; CPU:$EDFF PRG:2DFF 90 21
|
||
lda $042D,x ; CPU:$EE01 PRG:2E01 BD 2D 04
|
||
bpl ResolveStageCollision_Block_18 ; CPU:$EE04 PRG:2E04 10 1C
|
||
ResolveStageCollision_Block_17:
|
||
jsr $F0DE ; CPU:$EE06 PRG:2E06 20 DE F0
|
||
jsr $F172 ; CPU:$EE09 PRG:2E09 20 72 F1
|
||
lda $042D,x ; CPU:$EE0C PRG:2E0C BD 2D 04
|
||
ora $0424,x ; CPU:$EE0F PRG:2E0F 1D 24 04
|
||
beq ResolveStageCollision_Block_18 ; CPU:$EE12 PRG:2E12 F0 0E
|
||
lda $0448,x ; CPU:$EE14 PRG:2E14 BD 48 04
|
||
eor #$01 ; CPU:$EE17 PRG:2E17 49 01
|
||
sta $0448,x ; CPU:$EE19 PRG:2E19 9D 48 04
|
||
lda $F1 ; CPU:$EE1C PRG:2E1C A5 F1
|
||
ora #$02 ; CPU:$EE1E PRG:2E1E 09 02
|
||
sta $F1 ; CPU:$EE20 PRG:2E20 85 F1
|
||
ResolveStageCollision_Block_18:
|
||
rts ; CPU:$EE22 PRG:2E22 60
|
||
; CheckObjectInteractions
|
||
; Purpose: compare active object pairs and dispatch overlap resolution.
|
||
; Inputs: active object arrays.
|
||
; Returns: collisions resolved; event and score state may be updated.
|
||
CheckObjectInteractions:
|
||
ldx #$07 ; CPU:$EE23 PRG:2E23 A2 07
|
||
CheckObjectInteractions_Block:
|
||
stx $12 ; CPU:$EE25 PRG:2E25 86 12
|
||
ldy $12 ; CPU:$EE27 PRG:2E27 A4 12
|
||
dey ; CPU:$EE29 PRG:2E29 88
|
||
bpl CheckObjectInteractions_Load ; CPU:$EE2A PRG:2E2A 10 03
|
||
CheckObjectInteractions_Block_1:
|
||
jmp CheckObjectInteractions_Decrement ; CPU:$EE2C PRG:2E2C 4C 2A EF
|
||
CheckObjectInteractions_Load:
|
||
lda $88,x ; CPU:$EE2F PRG:2E2F B5 88
|
||
bmi CheckObjectInteractions_Block_1 ; CPU:$EE31 PRG:2E31 30 F9
|
||
beq CheckObjectInteractions_Block_1 ; CPU:$EE33 PRG:2E33 F0 F7
|
||
lda a:$0088,y ; CPU:$EE35 PRG:2E35 B9 88 00
|
||
bmi CheckObjectInteractions_Block_1 ; CPU:$EE38 PRG:2E38 30 F2
|
||
beq CheckObjectInteractions_Block_1 ; CPU:$EE3A PRG:2E3A F0 F0
|
||
lda #$00 ; CPU:$EE3C PRG:2E3C A9 00
|
||
sta $CC ; CPU:$EE3E PRG:2E3E 85 CC
|
||
lda a:$009A,y ; CPU:$EE40 PRG:2E40 B9 9A 00
|
||
sec ; CPU:$EE43 PRG:2E43 38
|
||
sbc $9A,x ; CPU:$EE44 PRG:2E44 F5 9A
|
||
jsr $F08E ; CPU:$EE46 PRG:2E46 20 8E F0
|
||
cmp #$18 ; CPU:$EE49 PRG:2E49 C9 18
|
||
bcs CheckObjectInteractions_Block_7 ; CPU:$EE4B PRG:2E4B B0 71
|
||
lda $9A,x ; CPU:$EE4D PRG:2E4D B5 9A
|
||
clc ; CPU:$EE4F PRG:2E4F 18
|
||
adc #$18 ; CPU:$EE50 PRG:2E50 69 18
|
||
sta $12 ; CPU:$EE52 PRG:2E52 85 12
|
||
lda a:$009A,y ; CPU:$EE54 PRG:2E54 B9 9A 00
|
||
clc ; CPU:$EE57 PRG:2E57 18
|
||
adc #$07 ; CPU:$EE58 PRG:2E58 69 07
|
||
sec ; CPU:$EE5A PRG:2E5A 38
|
||
sbc $12 ; CPU:$EE5B PRG:2E5B E5 12
|
||
jsr $F08E ; CPU:$EE5D PRG:2E5D 20 8E F0
|
||
cmp #$04 ; CPU:$EE60 PRG:2E60 C9 04
|
||
bcs CheckObjectInteractions_Block_2 ; CPU:$EE62 PRG:2E62 B0 04
|
||
lda #$01 ; CPU:$EE64 PRG:2E64 A9 01
|
||
bne CheckObjectInteractions_Block_3 ; CPU:$EE66 PRG:2E66 D0 12
|
||
CheckObjectInteractions_Block_2:
|
||
lda a:$009A,y ; CPU:$EE68 PRG:2E68 B9 9A 00
|
||
clc ; CPU:$EE6B PRG:2E6B 18
|
||
adc #$11 ; CPU:$EE6C PRG:2E6C 69 11
|
||
sec ; CPU:$EE6E PRG:2E6E 38
|
||
sbc $9A,x ; CPU:$EE6F PRG:2E6F F5 9A
|
||
jsr $F08E ; CPU:$EE71 PRG:2E71 20 8E F0
|
||
cmp #$04 ; CPU:$EE74 PRG:2E74 C9 04
|
||
bcs CheckObjectInteractions_Block_4 ; CPU:$EE76 PRG:2E76 B0 15
|
||
lda #$02 ; CPU:$EE78 PRG:2E78 A9 02
|
||
CheckObjectInteractions_Block_3:
|
||
sta $CC ; CPU:$EE7A PRG:2E7A 85 CC
|
||
lda a:$0091,y ; CPU:$EE7C PRG:2E7C B9 91 00
|
||
sec ; CPU:$EE7F PRG:2E7F 38
|
||
sbc $91,x ; CPU:$EE80 PRG:2E80 F5 91
|
||
jsr $F08E ; CPU:$EE82 PRG:2E82 20 8E F0
|
||
cmp #$10 ; CPU:$EE85 PRG:2E85 C9 10
|
||
bcc CheckObjectInteractions_Block_4 ; CPU:$EE87 PRG:2E87 90 04
|
||
lda #$00 ; CPU:$EE89 PRG:2E89 A9 00
|
||
sta $CC ; CPU:$EE8B PRG:2E8B 85 CC
|
||
CheckObjectInteractions_Block_4:
|
||
lda $91,x ; CPU:$EE8D PRG:2E8D B5 91
|
||
clc ; CPU:$EE8F PRG:2E8F 18
|
||
adc #$10 ; CPU:$EE90 PRG:2E90 69 10
|
||
sta $12 ; CPU:$EE92 PRG:2E92 85 12
|
||
lda a:$0091,y ; CPU:$EE94 PRG:2E94 B9 91 00
|
||
clc ; CPU:$EE97 PRG:2E97 18
|
||
adc #$07 ; CPU:$EE98 PRG:2E98 69 07
|
||
sec ; CPU:$EE9A PRG:2E9A 38
|
||
sbc $12 ; CPU:$EE9B PRG:2E9B E5 12
|
||
jsr $F08E ; CPU:$EE9D PRG:2E9D 20 8E F0
|
||
cmp #$04 ; CPU:$EEA0 PRG:2EA0 C9 04
|
||
bcs CheckObjectInteractions_Block_5 ; CPU:$EEA2 PRG:2EA2 B0 04
|
||
lda #$04 ; CPU:$EEA4 PRG:2EA4 A9 04
|
||
bne CheckObjectInteractions_Block_6 ; CPU:$EEA6 PRG:2EA6 D0 12
|
||
CheckObjectInteractions_Block_5:
|
||
lda a:$0091,y ; CPU:$EEA8 PRG:2EA8 B9 91 00
|
||
clc ; CPU:$EEAB PRG:2EAB 18
|
||
adc #$09 ; CPU:$EEAC PRG:2EAC 69 09
|
||
sec ; CPU:$EEAE PRG:2EAE 38
|
||
sbc $91,x ; CPU:$EEAF PRG:2EAF F5 91
|
||
jsr $F08E ; CPU:$EEB1 PRG:2EB1 20 8E F0
|
||
cmp #$04 ; CPU:$EEB4 PRG:2EB4 C9 04
|
||
bcs CheckObjectInteractions_Block_7 ; CPU:$EEB6 PRG:2EB6 B0 06
|
||
lda #$08 ; CPU:$EEB8 PRG:2EB8 A9 08
|
||
CheckObjectInteractions_Block_6:
|
||
ora $CC ; CPU:$EEBA PRG:2EBA 05 CC
|
||
sta $CC ; CPU:$EEBC PRG:2EBC 85 CC
|
||
CheckObjectInteractions_Block_7:
|
||
lda #$00 ; CPU:$EEBE PRG:2EBE A9 00
|
||
sta $4B ; CPU:$EEC0 PRG:2EC0 85 4B
|
||
lsr $CC ; CPU:$EEC2 PRG:2EC2 46 CC
|
||
bcc CheckObjectInteractions_Block_8 ; CPU:$EEC4 PRG:2EC4 90 05
|
||
jsr $F0A6 ; CPU:$EEC6 PRG:2EC6 20 A6 F0
|
||
bmi CheckObjectInteractions_Block_9 ; CPU:$EEC9 PRG:2EC9 30 09
|
||
CheckObjectInteractions_Block_8:
|
||
lsr $CC ; CPU:$EECB PRG:2ECB 46 CC
|
||
bcc CheckObjectInteractions_Block_11 ; CPU:$EECD PRG:2ECD 90 20
|
||
jsr $F0A6 ; CPU:$EECF PRG:2ECF 20 A6 F0
|
||
bmi CheckObjectInteractions_Block_11 ; CPU:$EED2 PRG:2ED2 30 1B
|
||
CheckObjectInteractions_Block_9:
|
||
jsr $F0BD ; CPU:$EED4 PRG:2ED4 20 BD F0
|
||
bcs CheckObjectInteractions_Block_10 ; CPU:$EED7 PRG:2ED7 B0 12
|
||
jsr $F107 ; CPU:$EED9 PRG:2ED9 20 07 F1
|
||
jsr $F18C ; CPU:$EEDC PRG:2EDC 20 8C F1
|
||
jsr $F0B4 ; CPU:$EEDF PRG:2EDF 20 B4 F0
|
||
jsr $F107 ; CPU:$EEE2 PRG:2EE2 20 07 F1
|
||
jsr $F18C ; CPU:$EEE5 PRG:2EE5 20 8C F1
|
||
jsr $F0B4 ; CPU:$EEE8 PRG:2EE8 20 B4 F0
|
||
CheckObjectInteractions_Block_10:
|
||
lda #$01 ; CPU:$EEEB PRG:2EEB A9 01
|
||
sta $4B ; CPU:$EEED PRG:2EED 85 4B
|
||
CheckObjectInteractions_Block_11:
|
||
lsr $CC ; CPU:$EEEF PRG:2EEF 46 CC
|
||
bcc CheckObjectInteractions_Block_12 ; CPU:$EEF1 PRG:2EF1 90 05
|
||
jsr $F098 ; CPU:$EEF3 PRG:2EF3 20 98 F0
|
||
bmi CheckObjectInteractions_Block_13 ; CPU:$EEF6 PRG:2EF6 30 09
|
||
CheckObjectInteractions_Block_12:
|
||
lsr $CC ; CPU:$EEF8 PRG:2EF8 46 CC
|
||
bcc CheckObjectInteractions_Block_15 ; CPU:$EEFA PRG:2EFA 90 20
|
||
jsr $F098 ; CPU:$EEFC PRG:2EFC 20 98 F0
|
||
bmi CheckObjectInteractions_Block_15 ; CPU:$EEFF PRG:2EFF 30 1B
|
||
CheckObjectInteractions_Block_13:
|
||
jsr $F0BD ; CPU:$EF01 PRG:2F01 20 BD F0
|
||
bcs CheckObjectInteractions_Block_14 ; CPU:$EF04 PRG:2F04 B0 12
|
||
jsr $F0DE ; CPU:$EF06 PRG:2F06 20 DE F0
|
||
jsr $F172 ; CPU:$EF09 PRG:2F09 20 72 F1
|
||
jsr $F0B4 ; CPU:$EF0C PRG:2F0C 20 B4 F0
|
||
jsr $F0DE ; CPU:$EF0F PRG:2F0F 20 DE F0
|
||
jsr $F172 ; CPU:$EF12 PRG:2F12 20 72 F1
|
||
jsr $F0B4 ; CPU:$EF15 PRG:2F15 20 B4 F0
|
||
CheckObjectInteractions_Block_14:
|
||
lda #$01 ; CPU:$EF18 PRG:2F18 A9 01
|
||
sta $4B ; CPU:$EF1A PRG:2F1A 85 4B
|
||
CheckObjectInteractions_Block_15:
|
||
jsr ResolveObjectCollisionPair ; CPU:$EF1C PRG:2F1C 20 37 EF
|
||
jsr $F0B4 ; CPU:$EF1F PRG:2F1F 20 B4 F0
|
||
jsr ResolveObjectCollisionPair ; CPU:$EF22 PRG:2F22 20 37 EF
|
||
jsr $F0B4 ; CPU:$EF25 PRG:2F25 20 B4 F0
|
||
CheckObjectInteractions_Decrement:
|
||
dey ; CPU:$EF28 PRG:2F28 88
|
||
bmi CheckObjectInteractions_Block_16 ; CPU:$EF29 PRG:2F29 30 03
|
||
jmp CheckObjectInteractions_Load ; CPU:$EF2B PRG:2F2B 4C 31 EE
|
||
CheckObjectInteractions_Block_16:
|
||
dex ; CPU:$EF2E PRG:2F2E CA
|
||
bmi CheckObjectInteractions_Block_17 ; CPU:$EF2F PRG:2F2F 30 03
|
||
jmp CheckObjectInteractions_Block ; CPU:$EF31 PRG:2F31 4C 27 EE
|
||
CheckObjectInteractions_Block_17:
|
||
rts ; CPU:$EF34 PRG:2F34 60
|
||
; ResolveObjectCollisionPair
|
||
; Purpose: resolve one overlapping pair and apply state, score, sound, and knockback effects.
|
||
; Inputs: X/Y = object pair.
|
||
; Returns: both object records and global event flags may change.
|
||
ResolveObjectCollisionPair:
|
||
cpx #$02 ; CPU:$EF35 PRG:2F35 E0 02
|
||
bcc ResolveObjectCollisionPair_Block ; CPU:$EF37 PRG:2F37 90 07
|
||
cpy #$02 ; CPU:$EF39 PRG:2F39 C0 02
|
||
bcc ResolveObjectCollisionPair_Block ; CPU:$EF3B PRG:2F3B 90 03
|
||
jmp ResolveObjectCollisionPair_Load ; CPU:$EF3D PRG:2F3D 4C 43 F0
|
||
ResolveObjectCollisionPair_Block:
|
||
lda #$00 ; CPU:$EF40 PRG:2F40 A9 00
|
||
sta $0487 ; CPU:$EF42 PRG:2F42 8D 87 04
|
||
lda $0475,x ; CPU:$EF45 PRG:2F45 BD 75 04
|
||
beq ResolveObjectCollisionPair_Block_1 ; CPU:$EF48 PRG:2F48 F0 03
|
||
jmp ResolveObjectCollisionPair_Load ; CPU:$EF4A PRG:2F4A 4C 43 F0
|
||
ResolveObjectCollisionPair_Block_1:
|
||
lda $4B ; CPU:$EF4D PRG:2F4D A5 4B
|
||
bne ResolveObjectCollisionPair_Block_2 ; CPU:$EF4F PRG:2F4F D0 03
|
||
jmp ResolveObjectCollisionPair_Load ; CPU:$EF51 PRG:2F51 4C 43 F0
|
||
ResolveObjectCollisionPair_Block_2:
|
||
cpx #$02 ; CPU:$EF54 PRG:2F54 E0 02
|
||
bcs ResolveObjectCollisionPair_Block_3 ; CPU:$EF56 PRG:2F56 B0 07
|
||
lda $BD,x ; CPU:$EF58 PRG:2F58 B5 BD
|
||
beq ResolveObjectCollisionPair_Block_4 ; CPU:$EF5A PRG:2F5A F0 14
|
||
jmp ResolveObjectCollisionPair_Load ; CPU:$EF5C PRG:2F5C 4C 43 F0
|
||
ResolveObjectCollisionPair_Block_3:
|
||
lda $88,x ; CPU:$EF5F PRG:2F5F B5 88
|
||
cmp #$01 ; CPU:$EF61 PRG:2F61 C9 01
|
||
bne ResolveObjectCollisionPair_Block_4 ; CPU:$EF63 PRG:2F63 D0 0B
|
||
lda $7F,x ; CPU:$EF65 PRG:2F65 B5 7F
|
||
cmp #$02 ; CPU:$EF67 PRG:2F67 C9 02
|
||
bcs ResolveObjectCollisionPair_Block_5 ; CPU:$EF69 PRG:2F69 B0 12
|
||
lda #$01 ; CPU:$EF6B PRG:2F6B A9 01
|
||
sta $0487 ; CPU:$EF6D PRG:2F6D 8D 87 04
|
||
ResolveObjectCollisionPair_Block_4:
|
||
lda a:$009A,y ; CPU:$EF70 PRG:2F70 B9 9A 00
|
||
clc ; CPU:$EF73 PRG:2F73 18
|
||
adc #$04 ; CPU:$EF74 PRG:2F74 69 04
|
||
cmp $9A,x ; CPU:$EF76 PRG:2F76 D5 9A
|
||
bcc ResolveObjectCollisionPair_Block_5 ; CPU:$EF78 PRG:2F78 90 03
|
||
jmp ResolveObjectCollisionPair_Load ; CPU:$EF7A PRG:2F7A 4C 43 F0
|
||
ResolveObjectCollisionPair_Block_5:
|
||
lda #$14 ; CPU:$EF7D PRG:2F7D A9 14
|
||
sta $0475,x ; CPU:$EF7F PRG:2F7F 9D 75 04
|
||
lda #$00 ; CPU:$EF82 PRG:2F82 A9 00
|
||
sta $0436,x ; CPU:$EF84 PRG:2F84 9D 36 04
|
||
cpy #$02 ; CPU:$EF87 PRG:2F87 C0 02
|
||
bcc ResolveObjectCollisionPair_Block_6 ; CPU:$EF89 PRG:2F89 90 0A
|
||
lda a:$0088,y ; CPU:$EF8B PRG:2F8B B9 88 00
|
||
cmp #$02 ; CPU:$EF8E PRG:2F8E C9 02
|
||
beq ResolveObjectCollisionPair_Block_6 ; CPU:$EF90 PRG:2F90 F0 03
|
||
jmp ResolveObjectCollisionPair_Load ; CPU:$EF92 PRG:2F92 4C 43 F0
|
||
ResolveObjectCollisionPair_Block_6:
|
||
lda $F0 ; CPU:$EF95 PRG:2F95 A5 F0
|
||
ora #$02 ; CPU:$EF97 PRG:2F97 09 02
|
||
sta $F0 ; CPU:$EF99 PRG:2F99 85 F0
|
||
lda $88,x ; CPU:$EF9B PRG:2F9B B5 88
|
||
cmp #$02 ; CPU:$EF9D PRG:2F9D C9 02
|
||
bne ResolveObjectCollisionPair_Block_8 ; CPU:$EF9F PRG:2F9F D0 1D
|
||
cpx #$02 ; CPU:$EFA1 PRG:2FA1 E0 02
|
||
bcs ResolveObjectCollisionPair_Block_8 ; CPU:$EFA3 PRG:2FA3 B0 19
|
||
sty $12 ; CPU:$EFA5 PRG:2FA5 84 12
|
||
ldy $7F,x ; CPU:$EFA7 PRG:2FA7 B4 7F
|
||
lda CollisionResultStateTable,y ; CPU:$EFA9 PRG:2FA9 B9 53 F0
|
||
ldy $12 ; CPU:$EFAC PRG:2FAC A4 12
|
||
pha ; CPU:$EFAE PRG:2FAE 48
|
||
pla ; CPU:$EFAF PRG:2FAF 68
|
||
bne ResolveObjectCollisionPair_Block_7 ; CPU:$EFB0 PRG:2FB0 D0 03
|
||
jmp ResolveObjectCollisionPair_Load ; CPU:$EFB2 PRG:2FB2 4C 43 F0
|
||
ResolveObjectCollisionPair_Block_7:
|
||
sta $7F,x ; CPU:$EFB5 PRG:2FB5 95 7F
|
||
lda #$00 ; CPU:$EFB7 PRG:2FB7 A9 00
|
||
sta $0436,x ; CPU:$EFB9 PRG:2FB9 9D 36 04
|
||
beq ResolveObjectCollisionPair_Block_12 ; CPU:$EFBC PRG:2FBC F0 2A
|
||
ResolveObjectCollisionPair_Block_8:
|
||
dec $88,x ; CPU:$EFBE PRG:2FBE D6 88
|
||
bne ResolveObjectCollisionPair_Block_9 ; CPU:$EFC0 PRG:2FC0 D0 0A
|
||
lda #$FF ; CPU:$EFC2 PRG:2FC2 A9 FF
|
||
sta $041B,x ; CPU:$EFC4 PRG:2FC4 9D 1B 04
|
||
lda #$00 ; CPU:$EFC7 PRG:2FC7 A9 00
|
||
sta $0412,x ; CPU:$EFC9 PRG:2FC9 9D 12 04
|
||
ResolveObjectCollisionPair_Block_9:
|
||
lda #$00 ; CPU:$EFCC PRG:2FCC A9 00
|
||
sta $7F,x ; CPU:$EFCE PRG:2FCE 95 7F
|
||
sta $0424,x ; CPU:$EFD0 PRG:2FD0 9D 24 04
|
||
sta $042D,x ; CPU:$EFD3 PRG:2FD3 9D 2D 04
|
||
lda $91,x ; CPU:$EFD6 PRG:2FD6 B5 91
|
||
bmi ResolveObjectCollisionPair_Block_10 ; CPU:$EFD8 PRG:2FD8 30 04
|
||
lda #$FF ; CPU:$EFDA PRG:2FDA A9 FF
|
||
bne ResolveObjectCollisionPair_Block_11 ; CPU:$EFDC PRG:2FDC D0 02
|
||
ResolveObjectCollisionPair_Block_10:
|
||
lda #$00 ; CPU:$EFDE PRG:2FDE A9 00
|
||
ResolveObjectCollisionPair_Block_11:
|
||
sta $046C,x ; CPU:$EFE0 PRG:2FE0 9D 6C 04
|
||
lda #$80 ; CPU:$EFE3 PRG:2FE3 A9 80
|
||
sta $0463,x ; CPU:$EFE5 PRG:2FE5 9D 63 04
|
||
ResolveObjectCollisionPair_Block_12:
|
||
sty $12 ; CPU:$EFE8 PRG:2FE8 84 12
|
||
ldy $0451,x ; CPU:$EFEA PRG:2FEA BC 51 04
|
||
lda ObjectStateTransitionTable,y ; CPU:$EFED PRG:2FED B9 5E F0
|
||
sta $0451,x ; CPU:$EFF0 PRG:2FF0 9D 51 04
|
||
lda #$01 ; CPU:$EFF3 PRG:2FF3 A9 01
|
||
sta $047E,x ; CPU:$EFF5 PRG:2FF5 9D 7E 04
|
||
ldy $12 ; CPU:$EFF8 PRG:2FF8 A4 12
|
||
cpy #$02 ; CPU:$EFFA PRG:2FFA C0 02
|
||
bcs ResolveObjectCollisionPair_Load ; CPU:$EFFC PRG:2FFC B0 43
|
||
lda $0451,x ; CPU:$EFFE PRG:2FFE BD 51 04
|
||
cmp #$07 ; CPU:$F001 PRG:3001 C9 07
|
||
beq ResolveObjectCollisionPair_Block_13 ; CPU:$F003 PRG:3003 F0 0A
|
||
cmp #$08 ; CPU:$F005 PRG:3005 C9 08
|
||
bcc ResolveObjectCollisionPair_Block_13 ; CPU:$F007 PRG:3007 90 06
|
||
lda $F1 ; CPU:$F009 PRG:3009 A5 F1
|
||
ora #$80 ; CPU:$F00B PRG:300B 09 80
|
||
sta $F1 ; CPU:$F00D PRG:300D 85 F1
|
||
ResolveObjectCollisionPair_Block_13:
|
||
ldy $0451,x ; CPU:$F00F PRG:300F BC 51 04
|
||
lda CollisionSoundTable,y ; CPU:$F012 PRG:3012 B9 6A F0
|
||
sta $13 ; CPU:$F015 PRG:3015 85 13
|
||
lda $0487 ; CPU:$F017 PRG:3017 AD 87 04
|
||
beq ResolveObjectCollisionPair_Block_14 ; CPU:$F01A PRG:301A F0 05
|
||
lda CollisionScoreTable,y ; CPU:$F01C PRG:301C B9 76 F0
|
||
sta $13 ; CPU:$F01F PRG:301F 85 13
|
||
ResolveObjectCollisionPair_Block_14:
|
||
lda CollisionEventTable,y ; CPU:$F021 PRG:3021 B9 82 F0
|
||
clc ; CPU:$F024 PRG:3024 18
|
||
adc $0487 ; CPU:$F025 PRG:3025 6D 87 04
|
||
sta $14 ; CPU:$F028 PRG:3028 85 14
|
||
lda $12 ; CPU:$F02A PRG:302A A5 12
|
||
sta $3E ; CPU:$F02C PRG:302C 85 3E
|
||
pha ; CPU:$F02E PRG:302E 48
|
||
txa ; CPU:$F02F PRG:302F 8A
|
||
pha ; CPU:$F030 PRG:3030 48
|
||
lda $13 ; CPU:$F031 PRG:3031 A5 13
|
||
pha ; CPU:$F033 PRG:3033 48
|
||
lda $14 ; CPU:$F034 PRG:3034 A5 14
|
||
jsr $D871 ; CPU:$F036 PRG:3036 20 71 D8
|
||
pla ; CPU:$F039 PRG:3039 68
|
||
jsr $D6DE ; CPU:$F03A PRG:303A 20 DE D6
|
||
pla ; CPU:$F03D PRG:303D 68
|
||
tax ; CPU:$F03E PRG:303E AA
|
||
pla ; CPU:$F03F PRG:303F 68
|
||
tay ; CPU:$F040 PRG:3040 A8
|
||
ResolveObjectCollisionPair_Load:
|
||
lda $0451,x ; CPU:$F041 PRG:3041 BD 51 04
|
||
cmp #$0B ; CPU:$F044 PRG:3044 C9 0B
|
||
bne ResolveObjectCollisionPair_Block_15 ; CPU:$F046 PRG:3046 D0 08
|
||
lda $C8 ; CPU:$F048 PRG:3048 A5 C8
|
||
bne ResolveObjectCollisionPair_Block_15 ; CPU:$F04A PRG:304A D0 04
|
||
lda #$20 ; CPU:$F04C PRG:304C A9 20
|
||
sta $F0 ; CPU:$F04E PRG:304E 85 F0
|
||
ResolveObjectCollisionPair_Block_15:
|
||
rts ; CPU:$F050 PRG:3050 60
|
||
|
||
; Collision outcome state values indexed by collision class.
|
||
CollisionResultStateTable:
|
||
.byte $06, $06, $07, $08, $09, $0A, $00, $00, $00, $00, $00 ; CPU:$F051 PRG:3051 06 06 07 08 09 0A 00 00 00 00 00
|
||
; Post-collision object-state transitions.
|
||
ObjectStateTransitionTable:
|
||
.byte $04, $05, $06, $07, $08, $09, $0A, $0B, $08, $09, $0A, $0B ; CPU:$F05C PRG:305C 04 05 06 07 08 09 0A 0B 08 09 0A 0B
|
||
; Collision sound/event magnitude values.
|
||
CollisionSoundTable:
|
||
.byte $00, $00, $00, $00, $32, $4B, $64, $64, $4B, $64, $96, $64 ; CPU:$F068 PRG:3068 00 00 00 00 32 4B 64 64 4B 64 96 64
|
||
; Collision score/reward values.
|
||
CollisionScoreTable:
|
||
.byte $00, $00, $00, $00, $32, $4B, $64, $64, $64, $96, $C8, $64 ; CPU:$F074 PRG:3074 00 00 00 00 32 4B 64 64 64 96 C8 64
|
||
; Collision event identifiers.
|
||
CollisionEventTable:
|
||
.byte $00, $00, $00, $00, $01, $02, $03, $03, $02, $03, $04, $03 ; CPU:$F080 PRG:3080 00 00 00 00 01 02 03 03 02 03 04 03
|
||
; AbsoluteDifferenceA
|
||
; Purpose: return the absolute value of signed accumulator A.
|
||
; Inputs: A = signed delta.
|
||
; Returns: A = absolute magnitude.
|
||
AbsoluteDifferenceA:
|
||
pha ; CPU:$F08C PRG:308C 48
|
||
pla ; CPU:$F08D PRG:308D 68
|
||
bpl AbsoluteDifferenceA_Block ; CPU:$F08E PRG:308E 10 05
|
||
eor #$FF ; CPU:$F090 PRG:3090 49 FF
|
||
clc ; CPU:$F092 PRG:3092 18
|
||
adc #$01 ; CPU:$F093 PRG:3093 69 01
|
||
AbsoluteDifferenceA_Block:
|
||
rts ; CPU:$F095 PRG:3095 60
|
||
; SubtractHorizontalVelocityPair
|
||
; Purpose: calculate Y-object minus X-object horizontal velocity.
|
||
; Inputs: X/Y = object indexes.
|
||
; Returns: A/high arithmetic state from $0424/$042D difference.
|
||
SubtractHorizontalVelocityPair:
|
||
lda $0424,y ; CPU:$F096 PRG:3096 B9 24 04
|
||
sec ; CPU:$F099 PRG:3099 38
|
||
sbc $0424,x ; CPU:$F09A PRG:309A FD 24 04
|
||
lda $042D,y ; CPU:$F09D PRG:309D B9 2D 04
|
||
sbc $042D,x ; CPU:$F0A0 PRG:30A0 FD 2D 04
|
||
rts ; CPU:$F0A3 PRG:30A3 60
|
||
; SubtractVerticalVelocityPair
|
||
; Purpose: calculate Y-object minus X-object vertical velocity.
|
||
; Inputs: X/Y = object indexes.
|
||
; Returns: A/high arithmetic state from $0412/$041B difference.
|
||
SubtractVerticalVelocityPair:
|
||
lda $0412,y ; CPU:$F0A4 PRG:30A4 B9 12 04
|
||
sec ; CPU:$F0A7 PRG:30A7 38
|
||
sbc $0412,x ; CPU:$F0A8 PRG:30A8 FD 12 04
|
||
lda $041B,y ; CPU:$F0AB PRG:30AB B9 1B 04
|
||
sbc $041B,x ; CPU:$F0AE PRG:30AE FD 1B 04
|
||
rts ; CPU:$F0B1 PRG:30B1 60
|
||
; SwapObjectIndexes
|
||
; Purpose: exchange X and Y through scratch bytes.
|
||
; Inputs: X/Y = object indexes.
|
||
; Returns: X/Y swapped.
|
||
SwapObjectIndexes:
|
||
stx $12 ; CPU:$F0B2 PRG:30B2 86 12
|
||
sty $13 ; CPU:$F0B4 PRG:30B4 84 13
|
||
ldx $13 ; CPU:$F0B6 PRG:30B6 A6 13
|
||
ldy $12 ; CPU:$F0B8 PRG:30B8 A4 12
|
||
rts ; CPU:$F0BA PRG:30BA 60
|
||
; TestPairCollisionEligibility
|
||
; Purpose: test whether an object pair can participate in collision response.
|
||
; Inputs: X/Y = object indexes.
|
||
; Returns: A = zero if rejected, nonzero if eligible.
|
||
TestPairCollisionEligibility:
|
||
cpx #$02 ; CPU:$F0BB PRG:30BB E0 02
|
||
bcc TestPairCollisionEligibility_Block ; CPU:$F0BD PRG:30BD 90 1C
|
||
lda $7F,x ; CPU:$F0BF PRG:30BF B5 7F
|
||
cmp #$02 ; CPU:$F0C1 PRG:30C1 C9 02
|
||
bcc TestPairCollisionEligibility_Block ; CPU:$F0C3 PRG:30C3 90 16
|
||
lda #$01 ; CPU:$F0C5 PRG:30C5 A9 01
|
||
cmp $88,x ; CPU:$F0C7 PRG:30C7 D5 88
|
||
bcs TestPairCollisionEligibility_Block ; CPU:$F0C9 PRG:30C9 B0 10
|
||
cpy #$02 ; CPU:$F0CB PRG:30CB C0 02
|
||
bcc TestPairCollisionEligibility_Block ; CPU:$F0CD PRG:30CD 90 0C
|
||
lda a:$007F,y ; CPU:$F0CF PRG:30CF B9 7F 00
|
||
cmp #$02 ; CPU:$F0D2 PRG:30D2 C9 02
|
||
bcc TestPairCollisionEligibility_Block ; CPU:$F0D4 PRG:30D4 90 05
|
||
lda #$01 ; CPU:$F0D6 PRG:30D6 A9 01
|
||
cmp a:$0088,y ; CPU:$F0D8 PRG:30D8 D9 88 00
|
||
TestPairCollisionEligibility_Block:
|
||
rts ; CPU:$F0DB PRG:30DB 60
|
||
; NegateHorizontalMotion
|
||
; Purpose: negate an object horizontal velocity and acceleration pair.
|
||
; Inputs: X = object slot.
|
||
; Returns: horizontal motion fields negated; direction flag normalized.
|
||
NegateHorizontalMotion:
|
||
lda #$00 ; CPU:$F0DC PRG:30DC A9 00
|
||
sec ; CPU:$F0DE PRG:30DE 38
|
||
sbc $0424,x ; CPU:$F0DF PRG:30DF FD 24 04
|
||
sta $0424,x ; CPU:$F0E2 PRG:30E2 9D 24 04
|
||
lda #$00 ; CPU:$F0E5 PRG:30E5 A9 00
|
||
sbc $042D,x ; CPU:$F0E7 PRG:30E7 FD 2D 04
|
||
sta $042D,x ; CPU:$F0EA PRG:30EA 9D 2D 04
|
||
lda #$00 ; CPU:$F0ED PRG:30ED A9 00
|
||
sec ; CPU:$F0EF PRG:30EF 38
|
||
sbc $0463,x ; CPU:$F0F0 PRG:30F0 FD 63 04
|
||
sta $0463,x ; CPU:$F0F3 PRG:30F3 9D 63 04
|
||
lda #$00 ; CPU:$F0F6 PRG:30F6 A9 00
|
||
sbc $046C,x ; CPU:$F0F8 PRG:30F8 FD 6C 04
|
||
sta $046C,x ; CPU:$F0FB PRG:30FB 9D 6C 04
|
||
lda $31,x ; CPU:$F0FE PRG:30FE B5 31
|
||
and #$40 ; CPU:$F100 PRG:3100 29 40
|
||
sta $31,x ; CPU:$F102 PRG:3102 95 31
|
||
rts ; CPU:$F104 PRG:3104 60
|
||
; NegateVerticalMotion
|
||
; Purpose: negate an object vertical velocity pair.
|
||
; Inputs: X = object slot.
|
||
; Returns: vertical motion fields negated.
|
||
NegateVerticalMotion:
|
||
lda #$00 ; CPU:$F105 PRG:3105 A9 00
|
||
sec ; CPU:$F107 PRG:3107 38
|
||
sbc $0412,x ; CPU:$F108 PRG:3108 FD 12 04
|
||
sta $0412,x ; CPU:$F10B PRG:310B 9D 12 04
|
||
lda #$00 ; CPU:$F10E PRG:310E A9 00
|
||
sbc $041B,x ; CPU:$F110 PRG:3110 FD 1B 04
|
||
sta $041B,x ; CPU:$F113 PRG:3113 9D 1B 04
|
||
rts ; CPU:$F116 PRG:3116 60
|
||
; MultiplySignedValue
|
||
; Purpose: multiply a signed 16-bit value by an 8-bit factor.
|
||
; Inputs: signed value in $2B/$2C, multiplier in A.
|
||
; Returns: signed product in $2E-$30.
|
||
MultiplySignedValue:
|
||
sta $2D ; CPU:$F117 PRG:3117 85 2D
|
||
lda $2C ; CPU:$F119 PRG:3119 A5 2C
|
||
bpl MultiplyUnsigned16By8 ; CPU:$F11B PRG:311B 10 24
|
||
lda #$00 ; CPU:$F11D PRG:311D A9 00
|
||
sec ; CPU:$F11F PRG:311F 38
|
||
sbc $2B ; CPU:$F120 PRG:3120 E5 2B
|
||
sta $2B ; CPU:$F122 PRG:3122 85 2B
|
||
lda #$00 ; CPU:$F124 PRG:3124 A9 00
|
||
sbc $2C ; CPU:$F126 PRG:3126 E5 2C
|
||
sta $2C ; CPU:$F128 PRG:3128 85 2C
|
||
jsr MultiplyUnsigned16By8 ; CPU:$F12A PRG:312A 20 43 F1
|
||
lda #$00 ; CPU:$F12D PRG:312D A9 00
|
||
sec ; CPU:$F12F PRG:312F 38
|
||
sbc $2E ; CPU:$F130 PRG:3130 E5 2E
|
||
sta $2E ; CPU:$F132 PRG:3132 85 2E
|
||
lda #$00 ; CPU:$F134 PRG:3134 A9 00
|
||
sbc $2F ; CPU:$F136 PRG:3136 E5 2F
|
||
sta $2F ; CPU:$F138 PRG:3138 85 2F
|
||
lda #$00 ; CPU:$F13A PRG:313A A9 00
|
||
sbc $30 ; CPU:$F13C PRG:313C E5 30
|
||
sta $30 ; CPU:$F13E PRG:313E 85 30
|
||
rts ; CPU:$F140 PRG:3140 60
|
||
; MultiplyUnsigned16By8
|
||
; Purpose: perform the unsigned shift-add multiply core.
|
||
; Inputs: $2B/$2C multiplicand, $2D multiplier.
|
||
; Returns: 24-bit product in $2E-$30.
|
||
MultiplyUnsigned16By8:
|
||
txa ; CPU:$F141 PRG:3141 8A
|
||
pha ; CPU:$F142 PRG:3142 48
|
||
lda #$00 ; CPU:$F143 PRG:3143 A9 00
|
||
sta $2E ; CPU:$F145 PRG:3145 85 2E
|
||
sta $2F ; CPU:$F147 PRG:3147 85 2F
|
||
sta $30 ; CPU:$F149 PRG:3149 85 30
|
||
ldx #$08 ; CPU:$F14B PRG:314B A2 08
|
||
MultiplyUnsigned16By8_Block:
|
||
asl $2E ; CPU:$F14D PRG:314D 06 2E
|
||
rol $2F ; CPU:$F14F PRG:314F 26 2F
|
||
rol $30 ; CPU:$F151 PRG:3151 26 30
|
||
asl $2D ; CPU:$F153 PRG:3153 06 2D
|
||
bcc MultiplyUnsigned16By8_Block_1 ; CPU:$F155 PRG:3155 90 13
|
||
clc ; CPU:$F157 PRG:3157 18
|
||
lda $2B ; CPU:$F158 PRG:3158 A5 2B
|
||
adc $2E ; CPU:$F15A PRG:315A 65 2E
|
||
sta $2E ; CPU:$F15C PRG:315C 85 2E
|
||
lda $2C ; CPU:$F15E PRG:315E A5 2C
|
||
adc $2F ; CPU:$F160 PRG:3160 65 2F
|
||
sta $2F ; CPU:$F162 PRG:3162 85 2F
|
||
lda #$00 ; CPU:$F164 PRG:3164 A9 00
|
||
adc $30 ; CPU:$F166 PRG:3166 65 30
|
||
sta $30 ; CPU:$F168 PRG:3168 85 30
|
||
MultiplyUnsigned16By8_Block_1:
|
||
dex ; CPU:$F16A PRG:316A CA
|
||
bne MultiplyUnsigned16By8_Block ; CPU:$F16B PRG:316B D0 E0
|
||
pla ; CPU:$F16D PRG:316D 68
|
||
tax ; CPU:$F16E PRG:316E AA
|
||
rts ; CPU:$F16F PRG:316F 60
|
||
; ScaleHorizontalVelocity
|
||
; Purpose: scale horizontal velocity by the fixed collision factor.
|
||
; Inputs: X = object slot.
|
||
; Returns: $0424/$042D scaled.
|
||
ScaleHorizontalVelocity:
|
||
lda $0424,x ; CPU:$F170 PRG:3170 BD 24 04
|
||
sta $2B ; CPU:$F173 PRG:3173 85 2B
|
||
lda $042D,x ; CPU:$F175 PRG:3175 BD 2D 04
|
||
sta $2C ; CPU:$F178 PRG:3178 85 2C
|
||
lda #$CD ; CPU:$F17A PRG:317A A9 CD
|
||
jsr MultiplySignedValue ; CPU:$F17C PRG:317C 20 19 F1
|
||
lda $2F ; CPU:$F17F PRG:317F A5 2F
|
||
sta $0424,x ; CPU:$F181 PRG:3181 9D 24 04
|
||
lda $30 ; CPU:$F184 PRG:3184 A5 30
|
||
sta $042D,x ; CPU:$F186 PRG:3186 9D 2D 04
|
||
rts ; CPU:$F189 PRG:3189 60
|
||
; ScaleVerticalVelocity
|
||
; Purpose: scale vertical velocity by the fixed collision factor.
|
||
; Inputs: X = object slot.
|
||
; Returns: $0412/$041B scaled.
|
||
ScaleVerticalVelocity:
|
||
lda $0412,x ; CPU:$F18A PRG:318A BD 12 04
|
||
sta $2B ; CPU:$F18D PRG:318D 85 2B
|
||
lda $041B,x ; CPU:$F18F PRG:318F BD 1B 04
|
||
sta $2C ; CPU:$F192 PRG:3192 85 2C
|
||
lda #$CD ; CPU:$F194 PRG:3194 A9 CD
|
||
jsr MultiplySignedValue ; CPU:$F196 PRG:3196 20 19 F1
|
||
lda $2F ; CPU:$F199 PRG:3199 A5 2F
|
||
sta $0412,x ; CPU:$F19B PRG:319B 9D 12 04
|
||
lda $30 ; CPU:$F19E PRG:319E A5 30
|
||
sta $041B,x ; CPU:$F1A0 PRG:31A0 9D 1B 04
|
||
rts ; CPU:$F1A3 PRG:31A3 60
|
||
; ShiftInputVectorRight4
|
||
; Purpose: arithmetic-shift the two-byte input vector right four places.
|
||
; Inputs: vector in $12/$13.
|
||
; Returns: scaled vector in $12/$13.
|
||
ShiftInputVectorRight4:
|
||
ldy #$04 ; CPU:$F1A4 PRG:31A4 A0 04
|
||
ShiftInputVectorRight4_Block:
|
||
lda $13 ; CPU:$F1A6 PRG:31A6 A5 13
|
||
asl a ; CPU:$F1A8 PRG:31A8 0A
|
||
ror $13 ; CPU:$F1A9 PRG:31A9 66 13
|
||
ror $12 ; CPU:$F1AB PRG:31AB 66 12
|
||
dey ; CPU:$F1AD PRG:31AD 88
|
||
bne ShiftInputVectorRight4_Block ; CPU:$F1AE PRG:31AE D0 F6
|
||
rts ; CPU:$F1B0 PRG:31B0 60
|
||
; NextRandomByte
|
||
; Purpose: advance the game pseudo-random shift register.
|
||
; Inputs: random state in $1B/$1C.
|
||
; Returns: A and $1B contain the next random byte.
|
||
NextRandomByte:
|
||
txa ; CPU:$F1B1 PRG:31B1 8A
|
||
pha ; CPU:$F1B2 PRG:31B2 48
|
||
ldx #$0B ; CPU:$F1B3 PRG:31B3 A2 0B
|
||
NextRandomByte_Block:
|
||
asl $1B ; CPU:$F1B5 PRG:31B5 06 1B
|
||
rol $1C ; CPU:$F1B7 PRG:31B7 26 1C
|
||
rol a ; CPU:$F1B9 PRG:31B9 2A
|
||
rol a ; CPU:$F1BA PRG:31BA 2A
|
||
eor $1B ; CPU:$F1BB PRG:31BB 45 1B
|
||
rol a ; CPU:$F1BD PRG:31BD 2A
|
||
eor $1B ; CPU:$F1BE PRG:31BE 45 1B
|
||
lsr a ; CPU:$F1C0 PRG:31C0 4A
|
||
lsr a ; CPU:$F1C1 PRG:31C1 4A
|
||
eor #$FF ; CPU:$F1C2 PRG:31C2 49 FF
|
||
and #$01 ; CPU:$F1C4 PRG:31C4 29 01
|
||
ora $1B ; CPU:$F1C6 PRG:31C6 05 1B
|
||
sta $1B ; CPU:$F1C8 PRG:31C8 85 1B
|
||
dex ; CPU:$F1CA PRG:31CA CA
|
||
bne NextRandomByte_Block ; CPU:$F1CB PRG:31CB D0 E8
|
||
pla ; CPU:$F1CD PRG:31CD 68
|
||
tax ; CPU:$F1CE PRG:31CE AA
|
||
lda $1B ; CPU:$F1CF PRG:31CF A5 1B
|
||
rts ; CPU:$F1D1 PRG:31D1 60
|
||
NextRandomByte_Block_1:
|
||
jsr $DAC1 ; CPU:$F1D2 PRG:31D2 20 C1 DA
|
||
ldx #$09 ; CPU:$F1D5 PRG:31D5 A2 09
|
||
NextRandomByte_Block_2:
|
||
lda #$00 ; CPU:$F1D7 PRG:31D7 A9 00
|
||
sta $03,x ; CPU:$F1D9 PRG:31D9 95 03
|
||
dex ; CPU:$F1DB PRG:31DB CA
|
||
bpl NextRandomByte_Block_2 ; CPU:$F1DC PRG:31DC 10 F9
|
||
sta $3E ; CPU:$F1DE PRG:31DE 85 3E
|
||
inc $41 ; CPU:$F1E0 PRG:31E0 E6 41
|
||
jsr $D6DE ; CPU:$F1E2 PRG:31E2 20 DE D6
|
||
lda #$0F ; CPU:$F1E5 PRG:31E5 A9 0F
|
||
sta $4015 ; CPU:$F1E7 PRG:31E7 8D 15 40
|
||
lda #$01 ; CPU:$F1EA PRG:31EA A9 01
|
||
sta $F0 ; CPU:$F1EC PRG:31EC 85 F0
|
||
lda #$02 ; CPU:$F1EE PRG:31EE A9 02
|
||
; InitializeRoundObjects
|
||
; Purpose: initialize object slots and round-specific gameplay state.
|
||
; Inputs: round/stage globals.
|
||
; Returns: object arrays, sound state, and counters initialized.
|
||
InitializeRoundObjects:
|
||
sta $41 ; CPU:$F1F0 PRG:31F0 85 41
|
||
ldy $40 ; CPU:$F1F2 PRG:31F2 A4 40
|
||
bne InitializeRoundObjects_Block ; CPU:$F1F4 PRG:31F4 D0 02
|
||
lda #$FF ; CPU:$F1F6 PRG:31F6 A9 FF
|
||
InitializeRoundObjects_Block:
|
||
sta $42 ; CPU:$F1F8 PRG:31F8 85 42
|
||
ldx #$00 ; CPU:$F1FA PRG:31FA A2 00
|
||
stx $0488 ; CPU:$F1FC PRG:31FC 8E 88 04
|
||
stx $3B ; CPU:$F1FF PRG:31FF 86 3B
|
||
stx $3C ; CPU:$F201 PRG:3201 86 3C
|
||
stx $0558 ; CPU:$F203 PRG:3203 8E 58 05
|
||
dex ; CPU:$F206 PRG:3206 CA
|
||
stx $89 ; CPU:$F207 PRG:3207 86 89
|
||
ldx $40 ; CPU:$F209 PRG:3209 A6 40
|
||
InitializeRoundObjects_Block_1:
|
||
jsr $F3B0 ; CPU:$F20B PRG:320B 20 B0 F3
|
||
dex ; CPU:$F20E PRG:320E CA
|
||
bpl InitializeRoundObjects_Block_1 ; CPU:$F20F PRG:320F 10 FA
|
||
InitializeRoundObjects_Load:
|
||
lda #$00 ; CPU:$F211 PRG:3211 A9 00
|
||
sta $C8 ; CPU:$F213 PRG:3213 85 C8
|
||
lda $3C ; CPU:$F215 PRG:3215 A5 3C
|
||
lsr a ; CPU:$F217 PRG:3217 4A
|
||
lsr a ; CPU:$F218 PRG:3218 4A
|
||
cmp #$08 ; CPU:$F219 PRG:3219 C9 08
|
||
bcc InitializeRoundObjects_Block_2 ; CPU:$F21B PRG:321B 90 02
|
||
lda #$08 ; CPU:$F21D PRG:321D A9 08
|
||
InitializeRoundObjects_Block_2:
|
||
tax ; CPU:$F21F PRG:321F AA
|
||
lda RoundObjectTypeTable,x ; CPU:$F220 PRG:3220 BD BA F3
|
||
sta $C6 ; CPU:$F223 PRG:3223 85 C6
|
||
lda RoundObjectPositionTable,x ; CPU:$F225 PRG:3225 BD C3 F3
|
||
sta $C7 ; CPU:$F228 PRG:3228 85 C7
|
||
lda $3C ; CPU:$F22A PRG:322A A5 3C
|
||
cmp #$02 ; CPU:$F22C PRG:322C C9 02
|
||
bcs InitializeRoundObjects_Block_3 ; CPU:$F22E PRG:322E B0 06
|
||
lda #$03 ; CPU:$F230 PRG:3230 A9 03
|
||
sta $C6 ; CPU:$F232 PRG:3232 85 C6
|
||
sta $C7 ; CPU:$F234 PRG:3234 85 C7
|
||
InitializeRoundObjects_Block_3:
|
||
ldx #$07 ; CPU:$F236 PRG:3236 A2 07
|
||
InitializeRoundObjects_Block_4:
|
||
lda #$00 ; CPU:$F238 PRG:3238 A9 00
|
||
sta $0448,x ; CPU:$F23A PRG:323A 9D 48 04
|
||
sta $0475,x ; CPU:$F23D PRG:323D 9D 75 04
|
||
sta $047E,x ; CPU:$F240 PRG:3240 9D 7E 04
|
||
sta $0424,x ; CPU:$F243 PRG:3243 9D 24 04
|
||
sta $042D,x ; CPU:$F246 PRG:3246 9D 2D 04
|
||
sta $0412,x ; CPU:$F249 PRG:3249 9D 12 04
|
||
sta $041B,x ; CPU:$F24C PRG:324C 9D 1B 04
|
||
sta $0463,x ; CPU:$F24F PRG:324F 9D 63 04
|
||
sta $046C,x ; CPU:$F252 PRG:3252 9D 6C 04
|
||
sta $0400,x ; CPU:$F255 PRG:3255 9D 00 04
|
||
sta $0409,x ; CPU:$F258 PRG:3258 9D 09 04
|
||
lda #$01 ; CPU:$F25B PRG:325B A9 01
|
||
sta $043F,x ; CPU:$F25D PRG:325D 9D 3F 04
|
||
sta $045A,x ; CPU:$F260 PRG:3260 9D 5A 04
|
||
lda #$03 ; CPU:$F263 PRG:3263 A9 03
|
||
sta $0436,x ; CPU:$F265 PRG:3265 9D 36 04
|
||
dex ; CPU:$F268 PRG:3268 CA
|
||
bpl InitializeRoundObjects_Block_4 ; CPU:$F269 PRG:3269 10 CD
|
||
ldx #$05 ; CPU:$F26B PRG:326B A2 05
|
||
InitializeRoundObjects_Block_5:
|
||
lda #$FF ; CPU:$F26D PRG:326D A9 FF
|
||
sta $8A,x ; CPU:$F26F PRG:326F 95 8A
|
||
dex ; CPU:$F271 PRG:3271 CA
|
||
bpl InitializeRoundObjects_Block_5 ; CPU:$F272 PRG:3272 10 F9
|
||
ldx $40 ; CPU:$F274 PRG:3274 A6 40
|
||
InitializeRoundObjects_Block_6:
|
||
jsr ResetObjectMotion ; CPU:$F276 PRG:3276 20 86 F3
|
||
dex ; CPU:$F279 PRG:3279 CA
|
||
bpl InitializeRoundObjects_Block_6 ; CPU:$F27A PRG:327A 10 FA
|
||
jsr $D246 ; CPU:$F27C PRG:327C 20 46 D2
|
||
jsr $D293 ; CPU:$F27F PRG:327F 20 93 D2
|
||
lda $C6 ; CPU:$F282 PRG:3282 A5 C6
|
||
cmp #$10 ; CPU:$F284 PRG:3284 C9 10
|
||
bcs InitializeRoundObjects_Block_7 ; CPU:$F286 PRG:3286 B0 04
|
||
lda #$58 ; CPU:$F288 PRG:3288 A9 58
|
||
sta $C6 ; CPU:$F28A PRG:328A 85 C6
|
||
InitializeRoundObjects_Block_7:
|
||
jsr $F4A5 ; CPU:$F28C PRG:328C 20 A5 F4
|
||
jsr $D8FF ; CPU:$F28F PRG:328F 20 FF D8
|
||
lda $16 ; CPU:$F292 PRG:3292 A5 16
|
||
beq InitializeRoundObjects_Block_8 ; CPU:$F294 PRG:3294 F0 03
|
||
jmp $C1C5 ; CPU:$F296 PRG:3296 4C C5 C1
|
||
InitializeRoundObjects_Block_8:
|
||
lda $C8 ; CPU:$F299 PRG:3299 A5 C8
|
||
beq InitializeRoundObjects_Block_9 ; CPU:$F29B PRG:329B F0 03
|
||
jmp $CF13 ; CPU:$F29D PRG:329D 4C 13 CF
|
||
InitializeRoundObjects_Block_9:
|
||
jsr $C716 ; CPU:$F2A0 PRG:32A0 20 16 C7
|
||
lda $3B ; CPU:$F2A3 PRG:32A3 A5 3B
|
||
and #$03 ; CPU:$F2A5 PRG:32A5 29 03
|
||
bne InitializeRoundObjects_Block_10 ; CPU:$F2A7 PRG:32A7 D0 08
|
||
lda #$08 ; CPU:$F2A9 PRG:32A9 A9 08
|
||
sta $F2 ; CPU:$F2AB PRG:32AB 85 F2
|
||
ldx $3A ; CPU:$F2AD PRG:32AD A6 3A
|
||
bne InitializeRoundObjects_Block_11 ; CPU:$F2AF PRG:32AF D0 06
|
||
InitializeRoundObjects_Block_10:
|
||
lda #$FF ; CPU:$F2B1 PRG:32B1 A9 FF
|
||
sta $3D ; CPU:$F2B3 PRG:32B3 85 3D
|
||
inc $3C ; CPU:$F2B5 PRG:32B5 E6 3C
|
||
InitializeRoundObjects_Block_11:
|
||
jsr $F470 ; CPU:$F2B7 PRG:32B7 20 70 F4
|
||
lda $3D ; CPU:$F2BA PRG:32BA A5 3D
|
||
beq InitializeRoundObjects_Block_12 ; CPU:$F2BC PRG:32BC F0 05
|
||
dec $3D ; CPU:$F2BE PRG:32BE C6 3D
|
||
jsr $F3CC ; CPU:$F2C0 PRG:32C0 20 CC F3
|
||
InitializeRoundObjects_Block_12:
|
||
jsr NextRandomByte ; CPU:$F2C3 PRG:32C3 20 B3 F1
|
||
jsr $E691 ; CPU:$F2C6 PRG:32C6 20 91 E6
|
||
jsr $C6F9 ; CPU:$F2C9 PRG:32C9 20 F9 C6
|
||
jsr $C790 ; CPU:$F2CC PRG:32CC 20 90 C7
|
||
jsr $C831 ; CPU:$F2CF PRG:32CF 20 31 C8
|
||
jsr $C8B7 ; CPU:$F2D2 PRG:32D2 20 B7 C8
|
||
jsr $D8DD ; CPU:$F2D5 PRG:32D5 20 DD D8
|
||
jsr $E587 ; CPU:$F2D8 PRG:32D8 20 87 E5
|
||
jsr $CB74 ; CPU:$F2DB PRG:32DB 20 74 CB
|
||
inc $4C ; CPU:$F2DE PRG:32DE E6 4C
|
||
ldx $40 ; CPU:$F2E0 PRG:32E0 A6 40
|
||
InitializeRoundObjects_Block_13:
|
||
lda $88,x ; CPU:$F2E2 PRG:32E2 B5 88
|
||
bpl InitializeRoundObjects_Block_14 ; CPU:$F2E4 PRG:32E4 10 25
|
||
lda $3A ; CPU:$F2E6 PRG:32E6 A5 3A
|
||
bne InitializeRoundObjects_Block_16 ; CPU:$F2E8 PRG:32E8 D0 3A
|
||
lda $41,x ; CPU:$F2EA PRG:32EA B5 41
|
||
bmi InitializeRoundObjects_Block_14 ; CPU:$F2EC PRG:32EC 30 1D
|
||
dec $C3,x ; CPU:$F2EE PRG:32EE D6 C3
|
||
bne InitializeRoundObjects_Block_17 ; CPU:$F2F0 PRG:32F0 D0 33
|
||
txa ; CPU:$F2F2 PRG:32F2 8A
|
||
pha ; CPU:$F2F3 PRG:32F3 48
|
||
jsr $C726 ; CPU:$F2F4 PRG:32F4 20 26 C7
|
||
pla ; CPU:$F2F7 PRG:32F7 68
|
||
tax ; CPU:$F2F8 PRG:32F8 AA
|
||
ldy #$02 ; CPU:$F2F9 PRG:32F9 A0 02
|
||
dec $41,x ; CPU:$F2FB PRG:32FB D6 41
|
||
sty $46 ; CPU:$F2FD PRG:32FD 84 46
|
||
bmi InitializeRoundObjects_Block_14 ; CPU:$F2FF PRG:32FF 30 0A
|
||
jsr ResetObjectMotion ; CPU:$F301 PRG:3301 20 86 F3
|
||
jsr $F3B0 ; CPU:$F304 PRG:3304 20 B0 F3
|
||
lda #$80 ; CPU:$F307 PRG:3307 A9 80
|
||
sta $F2 ; CPU:$F309 PRG:3309 85 F2
|
||
InitializeRoundObjects_Block_14:
|
||
dex ; CPU:$F30B PRG:330B CA
|
||
bpl InitializeRoundObjects_Block_13 ; CPU:$F30C PRG:330C 10 D4
|
||
lda $41 ; CPU:$F30E PRG:330E A5 41
|
||
bpl InitializeRoundObjects_Block_15 ; CPU:$F310 PRG:3310 10 04
|
||
lda $42 ; CPU:$F312 PRG:3312 A5 42
|
||
bmi InitializeRoundObjects_Block_23 ; CPU:$F314 PRG:3314 30 4E
|
||
InitializeRoundObjects_Block_15:
|
||
lda $3A ; CPU:$F316 PRG:3316 A5 3A
|
||
beq InitializeRoundObjects_Block_17 ; CPU:$F318 PRG:3318 F0 0B
|
||
jsr $E768 ; CPU:$F31A PRG:331A 20 68 E7
|
||
lda $061C ; CPU:$F31D PRG:331D AD 1C 06
|
||
and #$30 ; CPU:$F320 PRG:3320 29 30
|
||
beq InitializeRoundObjects_Block_11 ; CPU:$F322 PRG:3322 F0 93
|
||
InitializeRoundObjects_Block_16:
|
||
rts ; CPU:$F324 PRG:3324 60
|
||
InitializeRoundObjects_Block_17:
|
||
ldx #$05 ; CPU:$F325 PRG:3325 A2 05
|
||
InitializeRoundObjects_Block_18:
|
||
lda $8A,x ; CPU:$F327 PRG:3327 B5 8A
|
||
beq InitializeRoundObjects_Block_19 ; CPU:$F329 PRG:3329 F0 02
|
||
bpl InitializeRoundObjects_Block_11 ; CPU:$F32B PRG:332B 10 8A
|
||
InitializeRoundObjects_Block_19:
|
||
dex ; CPU:$F32D PRG:332D CA
|
||
bpl InitializeRoundObjects_Block_18 ; CPU:$F32E PRG:332E 10 F7
|
||
lda $BB ; CPU:$F330 PRG:3330 A5 BB
|
||
bpl InitializeRoundObjects_Block_11 ; CPU:$F332 PRG:3332 10 83
|
||
ldx $40 ; CPU:$F334 PRG:3334 A6 40
|
||
InitializeRoundObjects_Block_20:
|
||
ldy $88,x ; CPU:$F336 PRG:3336 B4 88
|
||
dey ; CPU:$F338 PRG:3338 88
|
||
bpl InitializeRoundObjects_Block_21 ; CPU:$F339 PRG:3339 10 0F
|
||
lda $41,x ; CPU:$F33B PRG:333B B5 41
|
||
bmi InitializeRoundObjects_Block_21 ; CPU:$F33D PRG:333D 30 0B
|
||
lda #$FF ; CPU:$F33F PRG:333F A9 FF
|
||
sta $88,x ; CPU:$F341 PRG:3341 95 88
|
||
lda #$01 ; CPU:$F343 PRG:3343 A9 01
|
||
sta $C3,x ; CPU:$F345 PRG:3345 95 C3
|
||
jmp InitializeRoundObjects_Block_11 ; CPU:$F347 PRG:3347 4C B9 F2
|
||
InitializeRoundObjects_Block_21:
|
||
dex ; CPU:$F34A PRG:334A CA
|
||
bpl InitializeRoundObjects_Block_20 ; CPU:$F34B PRG:334B 10 E9
|
||
lda #$02 ; CPU:$F34D PRG:334D A9 02
|
||
sta $F2 ; CPU:$F34F PRG:334F 85 F2
|
||
ldx #$96 ; CPU:$F351 PRG:3351 A2 96
|
||
jsr $F45E ; CPU:$F353 PRG:3353 20 5E F4
|
||
ldx $3B ; CPU:$F356 PRG:3356 A6 3B
|
||
inx ; CPU:$F358 PRG:3358 E8
|
||
cpx #$10 ; CPU:$F359 PRG:3359 E0 10
|
||
bne InitializeRoundObjects_Block_22 ; CPU:$F35B PRG:335B D0 02
|
||
ldx #$04 ; CPU:$F35D PRG:335D A2 04
|
||
InitializeRoundObjects_Block_22:
|
||
stx $3B ; CPU:$F35F PRG:335F 86 3B
|
||
jmp InitializeRoundObjects_Load ; CPU:$F361 PRG:3361 4C 13 F2
|
||
InitializeRoundObjects_Block_23:
|
||
lda #$01 ; CPU:$F364 PRG:3364 A9 01
|
||
sta $F2 ; CPU:$F366 PRG:3366 85 F2
|
||
lda #$00 ; CPU:$F368 PRG:3368 A9 00
|
||
sta $17 ; CPU:$F36A PRG:336A 85 17
|
||
sta $18 ; CPU:$F36C PRG:336C 85 18
|
||
sta $15 ; CPU:$F36E PRG:336E 85 15
|
||
jsr $F40B ; CPU:$F370 PRG:3370 20 0B F4
|
||
InitializeRoundObjects_Block_24:
|
||
jsr $F465 ; CPU:$F373 PRG:3373 20 65 F4
|
||
jsr $E768 ; CPU:$F376 PRG:3376 20 68 E7
|
||
and #$30 ; CPU:$F379 PRG:3379 29 30
|
||
bne InitializeRoundObjects_Block_25 ; CPU:$F37B PRG:337B D0 04
|
||
dec $15 ; CPU:$F37D PRG:337D C6 15
|
||
bne InitializeRoundObjects_Block_24 ; CPU:$F37F PRG:337F D0 F2
|
||
InitializeRoundObjects_Block_25:
|
||
jmp NextRandomByte_Block_1 ; CPU:$F381 PRG:3381 4C D4 F1
|
||
; ResetObjectMotion
|
||
; Purpose: clear an object motion/state record.
|
||
; Inputs: X = object slot.
|
||
; Returns: motion fields cleared and default state restored.
|
||
ResetObjectMotion:
|
||
lda $41,x ; CPU:$F384 PRG:3384 B5 41
|
||
bmi ResetObjectMotion_Block_1 ; CPU:$F386 PRG:3386 30 23
|
||
lda ObjectSpawnStateTable,x ; CPU:$F388 PRG:3388 BD AE F3
|
||
sta $91,x ; CPU:$F38B PRG:338B 95 91
|
||
lda #$B8 ; CPU:$F38D PRG:338D A9 B8
|
||
sta $9A,x ; CPU:$F38F PRG:338F 95 9A
|
||
sta $BD,x ; CPU:$F391 PRG:3391 95 BD
|
||
lda #$C8 ; CPU:$F393 PRG:3393 A9 C8
|
||
sta $BF,x ; CPU:$F395 PRG:3395 95 BF
|
||
lda #$5A ; CPU:$F397 PRG:3397 A9 5A
|
||
ldy $41,x ; CPU:$F399 PRG:3399 B4 41
|
||
bpl ResetObjectMotion_Block ; CPU:$F39B PRG:339B 10 02
|
||
lda #$01 ; CPU:$F39D PRG:339D A9 01
|
||
ResetObjectMotion_Block:
|
||
sta $C3,x ; CPU:$F39F PRG:339F 95 C3
|
||
lda #$00 ; CPU:$F3A1 PRG:33A1 A9 00
|
||
sta $C1,x ; CPU:$F3A3 PRG:33A3 95 C1
|
||
sta $042D,x ; CPU:$F3A5 PRG:33A5 9D 2D 04
|
||
sta $0424,x ; CPU:$F3A8 PRG:33A8 9D 24 04
|
||
ResetObjectMotion_Block_1:
|
||
rts ; CPU:$F3AB PRG:33AB 60
|
||
|
||
ObjectSpawnStateTable:
|
||
.byte $20, $D0 ; CPU:$F3AC PRG:33AC 20 D0
|
||
; ActivateSpawnedObject
|
||
; Purpose: finalize a newly spawned object record.
|
||
; Inputs: X = object slot.
|
||
; Returns: object type/state initialized and slot activated.
|
||
ActivateSpawnedObject:
|
||
lda #$03 ; CPU:$F3AE PRG:33AE A9 03
|
||
sta $0451,x ; CPU:$F3B0 PRG:33B0 9D 51 04
|
||
lda #$02 ; CPU:$F3B3 PRG:33B3 A9 02
|
||
sta $88,x ; CPU:$F3B5 PRG:33B5 95 88
|
||
rts ; CPU:$F3B7 PRG:33B7 60
|
||
RoundObjectTypeTable:
|
||
.byte $58, $50, $58, $50, $50, $40, $38, $30 ; CPU:$F3B8 PRG:33B8 58 50 58 50 50 40 38 30
|
||
.byte $28 ; CPU:$F3C0 PRG:33C0 28
|
||
RoundObjectPositionTable:
|
||
.byte $04, $04, $03, $03, $02, $02, $02, $02 ; CPU:$F3C1 PRG:33C1 04 04 03 03 02 02 02 02
|
||
.byte $02 ; CPU:$F3C9 PRG:33C9 02
|
||
; LoadRoundScreenData
|
||
; Purpose: select and queue round-specific screen/status data.
|
||
; Inputs: round and mode globals.
|
||
; Returns: display data pointers and buffers initialized.
|
||
LoadRoundScreenData:
|
||
lda $3D ; CPU:$F3CA PRG:33CA A5 3D
|
||
and #$20 ; CPU:$F3CC PRG:33CC 29 20
|
||
beq LoadRoundScreenData_Block_1 ; CPU:$F3CE PRG:33CE F0 1C
|
||
ldx #$0A ; CPU:$F3D0 PRG:33D0 A2 0A
|
||
LoadRoundScreenData_Block:
|
||
lda $F3F5,x ; CPU:$F3D2 PRG:33D2 BD F5 F3
|
||
sta $57,x ; CPU:$F3D5 PRG:33D5 95 57
|
||
dex ; CPU:$F3D7 PRG:33D7 CA
|
||
bpl LoadRoundScreenData_Block ; CPU:$F3D8 PRG:33D8 10 F8
|
||
ldy #$0A ; CPU:$F3DA PRG:33DA A0 0A
|
||
lda $3C ; CPU:$F3DC PRG:33DC A5 3C
|
||
sta $43 ; CPU:$F3DE PRG:33DE 85 43
|
||
jsr $D77C ; CPU:$F3E0 PRG:33E0 20 7C D7
|
||
sta $60 ; CPU:$F3E3 PRG:33E3 85 60
|
||
lda $43 ; CPU:$F3E5 PRG:33E5 A5 43
|
||
sta $61 ; CPU:$F3E7 PRG:33E7 85 61
|
||
jmp $C12D ; CPU:$F3E9 PRG:33E9 4C 2D C1
|
||
LoadRoundScreenData_Block_1:
|
||
lda #$00 ; CPU:$F3EC PRG:33EC A9 00
|
||
ldy #$F4 ; CPU:$F3EE PRG:33EE A0 F4
|
||
jmp $C131 ; CPU:$F3F0 PRG:33F0 4C 31 C1
|
||
RoundInitAttributeTable:
|
||
.byte $20, $6C, $08, $19, $11, $0A, $1C, $0E ; CPU:$F3F3 PRG:33F3 20 6C 08 19 11 0A 1C 0E
|
||
.byte $25, $00, $00, $20, $6C, $08, $24, $24 ; CPU:$F3FB PRG:33FB 25 00 00 20 6C 08 24 24
|
||
.byte $24, $24, $24, $24, $24, $24 ; CPU:$F403 PRG:3403 24 24 24 24 24 24
|
||
; DrawRoundStatusPanel
|
||
; Purpose: write fixed round-status tile rows and numeric fields.
|
||
; Inputs: round status globals.
|
||
; Returns: status-panel buffer populated.
|
||
DrawRoundStatusPanel:
|
||
jsr WaitOneFrame ; CPU:$F409 PRG:3409 20 65 F4
|
||
ldx #$01 ; CPU:$F40C PRG:340C A2 01
|
||
DrawRoundStatusPanel_Block:
|
||
lda $F43B,x ; CPU:$F40E PRG:340E BD 3B F4
|
||
ldy $F43D,x ; CPU:$F411 PRG:3411 BC 3D F4
|
||
jsr $C131 ; CPU:$F414 PRG:3414 20 31 C1
|
||
dex ; CPU:$F417 PRG:3417 CA
|
||
bpl DrawRoundStatusPanel_Block ; CPU:$F418 PRG:3418 10 F4
|
||
ldx #$0F ; CPU:$F41A PRG:341A A2 0F
|
||
DrawRoundStatusPanel_Block_1:
|
||
lda #$24 ; CPU:$F41C PRG:341C A9 24
|
||
sta $5A,x ; CPU:$F41E PRG:341E 95 5A
|
||
dex ; CPU:$F420 PRG:3420 CA
|
||
bpl DrawRoundStatusPanel_Block_1 ; CPU:$F421 PRG:3421 10 F9
|
||
lda #$10 ; CPU:$F423 PRG:3423 A9 10
|
||
sta $59 ; CPU:$F425 PRG:3425 85 59
|
||
lda #$21 ; CPU:$F427 PRG:3427 A9 21
|
||
sta $57 ; CPU:$F429 PRG:3429 85 57
|
||
ldx #$02 ; CPU:$F42B PRG:342B A2 02
|
||
DrawRoundStatusPanel_Block_2:
|
||
lda $F43F,x ; CPU:$F42D PRG:342D BD 3F F4
|
||
sta $58 ; CPU:$F430 PRG:3430 85 58
|
||
jsr $C12D ; CPU:$F432 PRG:3432 20 2D C1
|
||
dex ; CPU:$F435 PRG:3435 CA
|
||
bpl DrawRoundStatusPanel_Block_2 ; CPU:$F436 PRG:3436 10 F5
|
||
rts ; CPU:$F438 PRG:3438 60
|
||
StatusPanelAddressLoTable:
|
||
.byte $42, $55 ; CPU:$F439 PRG:3439 42 55
|
||
StatusPanelAddressHiTable:
|
||
.byte $F4, $F4 ; CPU:$F43B PRG:343B F4 F4
|
||
StatusPanelTileData:
|
||
.byte $88, $A8, $E8, $21, $C8, $10, $24, $24 ; CPU:$F43D PRG:343D 88 A8 E8 21 C8 10 24 24
|
||
.byte $24, $10, $0A, $16, $0E, $24, $24, $18 ; CPU:$F445 PRG:3445 24 10 0A 16 0E 24 24 18
|
||
.byte $1F, $0E, $1B, $24, $24, $24, $23, $DA ; CPU:$F44D PRG:344D 1F 0E 1B 24 24 24 23 DA
|
||
.byte $04, $AA, $AA, $AA, $AA ; CPU:$F455 PRG:3455 04 AA AA AA AA
|
||
; DelayFrames
|
||
; Purpose: wait for a fixed number of frame ticks.
|
||
; Inputs: A = frame count.
|
||
; Returns: after A frame-counter transitions.
|
||
DelayFrames:
|
||
ldx #$14 ; CPU:$F45A PRG:345A A2 14
|
||
DelayFramesLoop:
|
||
jsr WaitOneFrame ; CPU:$F45C PRG:345C 20 65 F4
|
||
dex ; CPU:$F45F PRG:345F CA
|
||
bne DelayFramesLoop ; CPU:$F460 PRG:3460 D0 FA
|
||
rts ; CPU:$F462 PRG:3462 60
|
||
; WaitOneFrame
|
||
; Purpose: block until the NMI/frame counter changes.
|
||
; Inputs: none.
|
||
; Returns: one frame elapsed.
|
||
WaitOneFrame:
|
||
lda #$00 ; CPU:$F463 PRG:3463 A9 00
|
||
sta $02 ; CPU:$F465 PRG:3465 85 02
|
||
WaitForFrameCounter:
|
||
lda $02 ; CPU:$F467 PRG:3467 A5 02
|
||
beq WaitForFrameCounter ; CPU:$F469 PRG:3469 F0 FC
|
||
dec $02 ; CPU:$F46B PRG:346B C6 02
|
||
WaitForFrameCounter_Block:
|
||
rts ; CPU:$F46D PRG:346D 60
|
||
; WaitForStartPress
|
||
; Purpose: wait for Start while maintaining frame and PPU state.
|
||
; Inputs: global controller/game state.
|
||
; Returns: Start detected; transition-delay fields updated.
|
||
WaitForStartPress:
|
||
jsr WaitForFrameCounter ; CPU:$F46E PRG:346E 20 69 F4
|
||
lda $3A ; CPU:$F471 PRG:3471 A5 3A
|
||
bne WaitForFrameCounter_Block ; CPU:$F473 PRG:3473 D0 F8
|
||
jsr $E768 ; CPU:$F475 PRG:3475 20 68 E7
|
||
and #$10 ; CPU:$F478 PRG:3478 29 10
|
||
beq WaitForFrameCounter_Block ; CPU:$F47A PRG:347A F0 F1
|
||
lda #$04 ; CPU:$F47C PRG:347C A9 04
|
||
sta $F2 ; CPU:$F47E PRG:347E 85 F2
|
||
lda $01 ; CPU:$F480 PRG:3480 A5 01
|
||
and #$EF ; CPU:$F482 PRG:3482 29 EF
|
||
sta $2001 ; CPU:$F484 PRG:3484 8D 01 20
|
||
WaitForStartPress_Block:
|
||
jsr WaitOneFrame ; CPU:$F487 PRG:3487 20 65 F4
|
||
jsr $E768 ; CPU:$F48A PRG:348A 20 68 E7
|
||
and #$10 ; CPU:$F48D PRG:348D 29 10
|
||
beq WaitForStartPress_Block ; CPU:$F48F PRG:348F F0 F6
|
||
lda $01 ; CPU:$F491 PRG:3491 A5 01
|
||
sta $2001 ; CPU:$F493 PRG:3493 8D 01 20
|
||
ldy #$04 ; CPU:$F496 PRG:3496 A0 04
|
||
lda $C8 ; CPU:$F498 PRG:3498 A5 C8
|
||
ora $16 ; CPU:$F49A PRG:349A 05 16
|
||
beq WaitForStartPress_Block_1 ; CPU:$F49C PRG:349C F0 02
|
||
ldy #$20 ; CPU:$F49E PRG:349E A0 20
|
||
WaitForStartPress_Block_1:
|
||
sty $F2 ; CPU:$F4A0 PRG:34A0 84 F2
|
||
rts ; CPU:$F4A2 PRG:34A2 60
|
||
; InitializeGameplayGlobals
|
||
; Purpose: initialize common gameplay flags, counters, and player defaults.
|
||
; Inputs: none.
|
||
; Returns: core gameplay globals reset.
|
||
InitializeGameplayGlobals:
|
||
lda #$01 ; CPU:$F4A3 PRG:34A3 A9 01
|
||
sta $048E ; CPU:$F4A5 PRG:34A5 8D 8E 04
|
||
sta $048F ; CPU:$F4A8 PRG:34A8 8D 8F 04
|
||
lda #$FF ; CPU:$F4AB PRG:34AB A9 FF
|
||
sta $BB ; CPU:$F4AD PRG:34AD 85 BB
|
||
sta $87 ; CPU:$F4AF PRG:34AF 85 87
|
||
sta $048C ; CPU:$F4B1 PRG:34B1 8D 8C 04
|
||
ldx #$01 ; CPU:$F4B4 PRG:34B4 A2 01
|
||
stx $0459 ; CPU:$F4B6 PRG:34B6 8E 59 04
|
||
stx $90 ; CPU:$F4B9 PRG:34B9 86 90
|
||
inx ; CPU:$F4BB PRG:34BB E8
|
||
stx $46 ; CPU:$F4BC PRG:34BC 86 46
|
||
lda #$40 ; CPU:$F4BE PRG:34BE A9 40
|
||
sta $99 ; CPU:$F4C0 PRG:34C0 85 99
|
||
rts ; CPU:$F4C2 PRG:34C2 60
|
||
|
||
; $F4C5-$F4FF - trailing $FF padding after the sound-init routine's RTS at $F4C4.
|
||
; Pass 1: emitted as explicit classified bytes so no ROM byte stays hidden in an
|
||
; .incbin. Unreached padding, never executed.
|
||
TrailingFillBeforeApuTables:
|
||
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F4C3 PRG:34C3 FF FF FF FF FF FF FF FF
|
||
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F4CB PRG:34CB FF FF FF FF FF FF FF FF
|
||
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F4D3 PRG:34D3 FF FF FF FF FF FF FF FF
|
||
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F4DB PRG:34DB FF FF FF FF FF FF FF FF
|
||
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F4E3 PRG:34E3 FF FF FF FF FF FF FF FF
|
||
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F4EB PRG:34EB FF FF FF FF FF FF FF FF
|
||
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; CPU:$F4F3 PRG:34F3 FF FF FF FF FF FF FF FF
|
||
.byte $FF, $FF, $FF ; CPU:$F4FB PRG:34FB FF FF FF
|
||
|
||
; UpdateSoundEngine
|
||
; Purpose: invoke the sound-effect/music sequencer for the current frame.
|
||
; Inputs: sound state and stream pointers in zero page.
|
||
; Returns: APU registers and per-channel sequencer state updated.
|
||
UpdateSoundEngine:
|
||
jsr $F78F ; CPU:$F4FE PRG:34FE 20 8F F7
|
||
UpdateSoundEngine_Block:
|
||
rts ; CPU:$F501 PRG:3501 60
|
||
; ProcessSoundChannels
|
||
; Purpose: interpret active sound streams for pulse, triangle, and noise channels.
|
||
; Inputs: sound pointers, timers, envelopes, and channel flags in $D0-$FF.
|
||
; Returns: APU channel registers and stream cursors updated.
|
||
ProcessSoundChannels:
|
||
lda #$00 ; CPU:$F502 PRG:3502 A9 00
|
||
tax ; CPU:$F504 PRG:3504 AA
|
||
sta $FD ; CPU:$F505 PRG:3505 85 FD
|
||
beq ProcessSoundChannels_Block_1 ; CPU:$F507 PRG:3507 F0 10
|
||
ProcessSoundChannels_Block:
|
||
txa ; CPU:$F509 PRG:3509 8A
|
||
lsr a ; CPU:$F50A PRG:350A 4A
|
||
tax ; CPU:$F50B PRG:350B AA
|
||
ProcessSoundChannels_Increment:
|
||
inx ; CPU:$F50C PRG:350C E8
|
||
txa ; CPU:$F50D PRG:350D 8A
|
||
cmp #$04 ; CPU:$F50E PRG:350E C9 04
|
||
beq UpdateSoundEngine_Block ; CPU:$F510 PRG:3510 F0 EF
|
||
lda $FD ; CPU:$F512 PRG:3512 A5 FD
|
||
clc ; CPU:$F514 PRG:3514 18
|
||
adc #$04 ; CPU:$F515 PRG:3515 69 04
|
||
sta $FD ; CPU:$F517 PRG:3517 85 FD
|
||
ProcessSoundChannels_Block_1:
|
||
txa ; CPU:$F519 PRG:3519 8A
|
||
asl a ; CPU:$F51A PRG:351A 0A
|
||
tax ; CPU:$F51B PRG:351B AA
|
||
lda $E0,x ; CPU:$F51C PRG:351C B5 E0
|
||
sta $FE ; CPU:$F51E PRG:351E 85 FE
|
||
lda $E1,x ; CPU:$F520 PRG:3520 B5 E1
|
||
sta $FF ; CPU:$F522 PRG:3522 85 FF
|
||
lda $E1,x ; CPU:$F524 PRG:3524 B5 E1
|
||
beq ProcessSoundChannels_Block ; CPU:$F526 PRG:3526 F0 E1
|
||
txa ; CPU:$F528 PRG:3528 8A
|
||
lsr a ; CPU:$F529 PRG:3529 4A
|
||
tax ; CPU:$F52A PRG:352A AA
|
||
dec $D0,x ; CPU:$F52B PRG:352B D6 D0
|
||
bne ProcessSoundChannels_Increment ; CPU:$F52D PRG:352D D0 DD
|
||
ProcessSoundChannels_Block_2:
|
||
ldy $E8,x ; CPU:$F52F PRG:352F B4 E8
|
||
inc $E8,x ; CPU:$F531 PRG:3531 F6 E8
|
||
lda ($FE),y ; CPU:$F533 PRG:3533 B1 FE
|
||
beq UpdateSoundEngine ; CPU:$F535 PRG:3535 F0 C7
|
||
tay ; CPU:$F537 PRG:3537 A8
|
||
cmp #$FF ; CPU:$F538 PRG:3538 C9 FF
|
||
beq ProcessSoundChannels_Block_3 ; CPU:$F53A PRG:353A F0 09
|
||
and #$C0 ; CPU:$F53C PRG:353C 29 C0
|
||
cmp #$C0 ; CPU:$F53E PRG:353E C9 C0
|
||
beq ProcessSoundChannels_Block_4 ; CPU:$F540 PRG:3540 F0 0F
|
||
jmp ProcessSoundChannels_Block_6 ; CPU:$F542 PRG:3542 4C 61 F5
|
||
ProcessSoundChannels_Block_3:
|
||
lda $D8,x ; CPU:$F545 PRG:3545 B5 D8
|
||
beq ProcessSoundChannels_Block_5 ; CPU:$F547 PRG:3547 F0 13
|
||
dec $D8,x ; CPU:$F549 PRG:3549 D6 D8
|
||
lda $EC,x ; CPU:$F54B PRG:354B B5 EC
|
||
sta $E8,x ; CPU:$F54D PRG:354D 95 E8
|
||
bne ProcessSoundChannels_Block_5 ; CPU:$F54F PRG:354F D0 0B
|
||
ProcessSoundChannels_Block_4:
|
||
tya ; CPU:$F551 PRG:3551 98
|
||
and #$3F ; CPU:$F552 PRG:3552 29 3F
|
||
sta $D8,x ; CPU:$F554 PRG:3554 95 D8
|
||
dec $D8,x ; CPU:$F556 PRG:3556 D6 D8
|
||
lda $E8,x ; CPU:$F558 PRG:3558 B5 E8
|
||
sta $EC,x ; CPU:$F55A PRG:355A 95 EC
|
||
ProcessSoundChannels_Block_5:
|
||
jmp ProcessSoundChannels_Block_2 ; CPU:$F55C PRG:355C 4C 31 F5
|
||
ProcessSoundChannels_Block_6:
|
||
tya ; CPU:$F55F PRG:355F 98
|
||
bpl ProcessSoundChannels_Block_8 ; CPU:$F560 PRG:3560 10 17
|
||
and #$0F ; CPU:$F562 PRG:3562 29 0F
|
||
clc ; CPU:$F564 PRG:3564 18
|
||
adc $DF ; CPU:$F565 PRG:3565 65 DF
|
||
tay ; CPU:$F567 PRG:3567 A8
|
||
lda SoundCommandMaskTable,y ; CPU:$F568 PRG:3568 B9 60 F6
|
||
sta $D4,x ; CPU:$F56B PRG:356B 95 D4
|
||
tay ; CPU:$F56D PRG:356D A8
|
||
txa ; CPU:$F56E PRG:356E 8A
|
||
cmp #$02 ; CPU:$F56F PRG:356F C9 02
|
||
beq ProcessSoundChannels_Block_14 ; CPU:$F571 PRG:3571 F0 4F
|
||
ProcessSoundChannels_Block_7:
|
||
ldy $E8,x ; CPU:$F573 PRG:3573 B4 E8
|
||
inc $E8,x ; CPU:$F575 PRG:3575 F6 E8
|
||
lda ($FE),y ; CPU:$F577 PRG:3577 B1 FE
|
||
ProcessSoundChannels_Block_8:
|
||
tay ; CPU:$F579 PRG:3579 A8
|
||
txa ; CPU:$F57A PRG:357A 8A
|
||
cmp #$03 ; CPU:$F57B PRG:357B C9 03
|
||
beq ProcessSoundChannels_Block_17 ; CPU:$F57D PRG:357D F0 60
|
||
pha ; CPU:$F57F PRG:357F 48
|
||
tax ; CPU:$F580 PRG:3580 AA
|
||
cmp #$01 ; CPU:$F581 PRG:3581 C9 01
|
||
beq ProcessSoundChannels_Block_13 ; CPU:$F583 PRG:3583 F0 32
|
||
ProcessSoundChannels_Block_9:
|
||
ldx $FD ; CPU:$F585 PRG:3585 A6 FD
|
||
lda ApuPeriodLowTable,y ; CPU:$F587 PRG:3587 B9 01 F6
|
||
beq ProcessSoundChannels_Block_10 ; CPU:$F58A PRG:358A F0 0B
|
||
sta $4002,x ; CPU:$F58C PRG:358C 9D 02 40
|
||
lda ApuPeriodHighTable,y ; CPU:$F58F PRG:358F B9 00 F6
|
||
ora #$08 ; CPU:$F592 PRG:3592 09 08
|
||
sta $4003,x ; CPU:$F594 PRG:3594 9D 03 40
|
||
ProcessSoundChannels_Block_10:
|
||
tay ; CPU:$F597 PRG:3597 A8
|
||
pla ; CPU:$F598 PRG:3598 68
|
||
tax ; CPU:$F599 PRG:3599 AA
|
||
tya ; CPU:$F59A PRG:359A 98
|
||
bne ProcessSoundChannels_Block_11 ; CPU:$F59B PRG:359B D0 0B
|
||
ldy #$00 ; CPU:$F59D PRG:359D A0 00
|
||
txa ; CPU:$F59F PRG:359F 8A
|
||
cmp #$02 ; CPU:$F5A0 PRG:35A0 C9 02
|
||
beq ProcessSoundChannels_Block_12 ; CPU:$F5A2 PRG:35A2 F0 06
|
||
ldy #$10 ; CPU:$F5A4 PRG:35A4 A0 10
|
||
bne ProcessSoundChannels_Block_12 ; CPU:$F5A6 PRG:35A6 D0 02
|
||
ProcessSoundChannels_Block_11:
|
||
ldy $DC,x ; CPU:$F5A8 PRG:35A8 B4 DC
|
||
ProcessSoundChannels_Block_12:
|
||
tya ; CPU:$F5AA PRG:35AA 98
|
||
ldy $FD ; CPU:$F5AB PRG:35AB A4 FD
|
||
sta $4000,y ; CPU:$F5AD PRG:35AD 99 00 40
|
||
ProcessSoundChannels_Load:
|
||
lda $D4,x ; CPU:$F5B0 PRG:35B0 B5 D4
|
||
sta $D0,x ; CPU:$F5B2 PRG:35B2 95 D0
|
||
jmp ProcessSoundChannels_Increment ; CPU:$F5B4 PRG:35B4 4C 0E F5
|
||
ProcessSoundChannels_Block_13:
|
||
lda $F5 ; CPU:$F5B7 PRG:35B7 A5 F5
|
||
and #$02 ; CPU:$F5B9 PRG:35B9 29 02
|
||
beq ProcessSoundChannels_Block_9 ; CPU:$F5BB PRG:35BB F0 C8
|
||
pla ; CPU:$F5BD PRG:35BD 68
|
||
tax ; CPU:$F5BE PRG:35BE AA
|
||
jmp ProcessSoundChannels_Load ; CPU:$F5BF PRG:35BF 4C B2 F5
|
||
ProcessSoundChannels_Block_14:
|
||
tya ; CPU:$F5C2 PRG:35C2 98
|
||
ldy $07F0 ; CPU:$F5C3 PRG:35C3 AC F0 07
|
||
beq ProcessSoundChannels_Block_15 ; CPU:$F5C6 PRG:35C6 F0 04
|
||
lda #$FF ; CPU:$F5C8 PRG:35C8 A9 FF
|
||
bne ProcessSoundChannels_Block_16 ; CPU:$F5CA PRG:35CA D0 0B
|
||
ProcessSoundChannels_Block_15:
|
||
clc ; CPU:$F5CC PRG:35CC 18
|
||
adc #$FE ; CPU:$F5CD PRG:35CD 69 FE
|
||
asl a ; CPU:$F5CF PRG:35CF 0A
|
||
asl a ; CPU:$F5D0 PRG:35D0 0A
|
||
cmp #$3C ; CPU:$F5D1 PRG:35D1 C9 3C
|
||
bcc ProcessSoundChannels_Block_16 ; CPU:$F5D3 PRG:35D3 90 02
|
||
lda #$3C ; CPU:$F5D5 PRG:35D5 A9 3C
|
||
ProcessSoundChannels_Block_16:
|
||
sta $4008 ; CPU:$F5D7 PRG:35D7 8D 08 40
|
||
sta $DE ; CPU:$F5DA PRG:35DA 85 DE
|
||
jmp ProcessSoundChannels_Block_7 ; CPU:$F5DC PRG:35DC 4C 75 F5
|
||
ProcessSoundChannels_Block_17:
|
||
lda $F4 ; CPU:$F5DF PRG:35DF A5 F4
|
||
cmp #$02 ; CPU:$F5E1 PRG:35E1 C9 02
|
||
beq ProcessSoundChannels_Block_18 ; CPU:$F5E3 PRG:35E3 F0 12
|
||
lda $F700,y ; CPU:$F5E5 PRG:35E5 B9 00 F7
|
||
sta $400C ; CPU:$F5E8 PRG:35E8 8D 0C 40
|
||
lda $F701,y ; CPU:$F5EB PRG:35EB B9 01 F7
|
||
sta $400E ; CPU:$F5EE PRG:35EE 8D 0E 40
|
||
lda $F702,y ; CPU:$F5F1 PRG:35F1 B9 02 F7
|
||
sta $400F ; CPU:$F5F4 PRG:35F4 8D 0F 40
|
||
ProcessSoundChannels_Block_18:
|
||
jmp ProcessSoundChannels_Load ; CPU:$F5F7 PRG:35F7 4C B2 F5
|
||
|
||
; $F5FC-$F5FF - four unreached bytes between the sound engine's final JMP
|
||
; ($F5F9) and ApuPeriodTable ($F600). Left as data: the preceding instruction
|
||
; is an unconditional JMP so control never falls through here, and the bytes do
|
||
; not form a coherent instruction sequence.
|
||
SoundEngineTailBytes:
|
||
.byte $16, $FF, $10, $C5 ; CPU:$F5FA PRG:35FA 16 FF 10 C5
|
||
|
||
; Interleaved APU timer high/low bytes; aliases below preserve the original odd/even indexed accesses.
|
||
ApuPeriodTable:
|
||
.byte $07, $F0, $00, $00, $00, $D4, $00, $C8 ; CPU:$F5FE PRG:35FE 07 F0 00 00 00 D4 00 C8
|
||
.byte $00, $BD, $00, $B2, $00, $A8, $00, $9F ; CPU:$F606 PRG:3606 00 BD 00 B2 00 A8 00 9F
|
||
.byte $00, $96, $00, $8D, $00, $85, $00, $7E ; CPU:$F60E PRG:360E 00 96 00 8D 00 85 00 7E
|
||
.byte $00, $76, $00, $70, $01, $AB, $01, $93 ; CPU:$F616 PRG:3616 00 76 00 70 01 AB 01 93
|
||
.byte $01, $7C, $01, $67, $01, $52, $01, $3F ; CPU:$F61E PRG:361E 01 7C 01 67 01 52 01 3F
|
||
.byte $01, $2D, $01, $1C, $01, $0C, $00, $FD ; CPU:$F626 PRG:3626 01 2D 01 1C 01 0C 00 FD
|
||
.byte $00, $EE, $00, $E1, $03, $57, $03, $27 ; CPU:$F62E PRG:362E 00 EE 00 E1 03 57 03 27
|
||
.byte $02, $F9, $02, $CF, $02, $A6, $02, $80 ; CPU:$F636 PRG:3636 02 F9 02 CF 02 A6 02 80
|
||
.byte $02, $5C, $02, $3A, $02, $1A, $01, $FC ; CPU:$F63E PRG:363E 02 5C 02 3A 02 1A 01 FC
|
||
.byte $01, $DF, $01, $C4, $03, $F8, $00, $69 ; CPU:$F646 PRG:3646 01 DF 01 C4 03 F8 00 69
|
||
.byte $00, $63, $00, $5E, $00, $58, $00, $53 ; CPU:$F64E PRG:364E 00 63 00 5E 00 58 00 53
|
||
.byte $00, $4F, $00, $4A, $00, $46, $00, $42 ; CPU:$F656 PRG:3656 00 4F 00 4A 00 46 00 42
|
||
ApuPeriodHighTable = ApuPeriodTable
|
||
ApuPeriodLowTable = ApuPeriodTable + 1
|
||
; Sound command masks, duration patterns, and channel-selection values.
|
||
SoundCommandMaskTable:
|
||
.byte $03, $06, $0C, $18, $30, $12, $24, $09 ; CPU:$F65E PRG:365E 03 06 0C 18 30 12 24 09
|
||
.byte $08, $04, $07, $01, $04, $08, $10, $20 ; CPU:$F666 PRG:3666 08 04 07 01 04 08 10 20
|
||
.byte $40, $18, $30, $0C, $01, $06, $0C, $18 ; CPU:$F66E PRG:366E 40 18 30 0C 01 06 0C 18
|
||
.byte $30, $60, $24, $48, $12, $10, $08, $0E ; CPU:$F676 PRG:3676 30 60 24 48 12 10 08 0E
|
||
.byte $02, $03, $04 ; CPU:$F67E PRG:367E 02 03 04
|
||
; SelectSoundChannelOffset
|
||
; Purpose: select the pulse 1 APU register shadow offset.
|
||
; Inputs: none.
|
||
; Returns: A = $00 and control flows into the common selector.
|
||
SelectSoundChannelOffset:
|
||
lda #$00 ; CPU:$F681 PRG:3681 A9 00
|
||
beq CopyFourBytesToApuShadow_Block ; CPU:$F683 PRG:3683 F0 0A
|
||
; SelectPulse2Offset
|
||
; Purpose: select the pulse 2 APU register shadow offset.
|
||
; Inputs: none.
|
||
; Returns: A = $08 and control flows into the common selector.
|
||
SelectPulse2Offset:
|
||
lda #$08 ; CPU:$F685 PRG:3685 A9 08
|
||
bne CopyFourBytesToApuShadow_Block ; CPU:$F687 PRG:3687 D0 06
|
||
; SelectTriangleOffset
|
||
; Purpose: select the triangle/noise APU shadow offset.
|
||
; Inputs: none.
|
||
; Returns: A = $0C or $04 through the common selector.
|
||
SelectTriangleOffset:
|
||
lda #$0C ; CPU:$F689 PRG:3689 A9 0C
|
||
bne CopyFourBytesToApuShadow_Block ; CPU:$F68B PRG:368B D0 02
|
||
; CopyFourBytesToApuShadow
|
||
; Purpose: copy four bytes from a source pointer to the selected APU shadow/register block.
|
||
; Inputs: X/Y form source pointer; selector entry determines destination offset.
|
||
; Returns: four bytes copied; source pointer retained in $FB/$FC.
|
||
CopyFourBytesToApuShadow:
|
||
lda #$04 ; CPU:$F68D PRG:368D A9 04
|
||
CopyFourBytesToApuShadow_Block:
|
||
sta $F9 ; CPU:$F68F PRG:368F 85 F9
|
||
lda #$40 ; CPU:$F691 PRG:3691 A9 40
|
||
sta $FA ; CPU:$F693 PRG:3693 85 FA
|
||
stx $FB ; CPU:$F695 PRG:3695 86 FB
|
||
sty $FC ; CPU:$F697 PRG:3697 84 FC
|
||
ldy #$00 ; CPU:$F699 PRG:3699 A0 00
|
||
CopyFourBytesToApuShadow_Block_1:
|
||
lda ($FB),y ; CPU:$F69B PRG:369B B1 FB
|
||
sta ($F9),y ; CPU:$F69D PRG:369D 91 F9
|
||
iny ; CPU:$F69F PRG:369F C8
|
||
tya ; CPU:$F6A0 PRG:36A0 98
|
||
cmp #$04 ; CPU:$F6A1 PRG:36A1 C9 04
|
||
bne CopyFourBytesToApuShadow_Block_1 ; CPU:$F6A3 PRG:36A3 D0 F6
|
||
rts ; CPU:$F6A5 PRG:36A5 60
|
||
; InitializeSoundSequence
|
||
; Purpose: resolve a sound sequence, load its initial state, and reset channel cursors.
|
||
; Inputs: A = sound request/sequence selector.
|
||
; Returns: stream state $DF-$EB and sound flags initialized.
|
||
InitializeSoundSequence:
|
||
tax ; CPU:$F6A6 PRG:36A6 AA
|
||
jsr $F798 ; CPU:$F6A7 PRG:36A7 20 98 F7
|
||
stx $F6 ; CPU:$F6AA PRG:36AA 86 F6
|
||
lda $07F5 ; CPU:$F6AC PRG:36AC AD F5 07
|
||
beq InitializeSoundSequence_Block ; CPU:$F6AF PRG:36AF F0 0B
|
||
cmp #$02 ; CPU:$F6B1 PRG:36B1 C9 02
|
||
bne InitializeSoundSequence_Block ; CPU:$F6B3 PRG:36B3 D0 07
|
||
sta $F0 ; CPU:$F6B5 PRG:36B5 85 F0
|
||
lda #$00 ; CPU:$F6B7 PRG:36B7 A9 00
|
||
sta $07F5 ; CPU:$F6B9 PRG:36B9 8D F5 07
|
||
InitializeSoundSequence_Block:
|
||
lda SoundSequencePointerTable,y ; CPU:$F6BC PRG:36BC B9 CA FB
|
||
tay ; CPU:$F6BF PRG:36BF A8
|
||
ldx #$00 ; CPU:$F6C0 PRG:36C0 A2 00
|
||
InitializeSoundSequence_Block_1:
|
||
lda SoundSequencePointerTable,y ; CPU:$F6C2 PRG:36C2 B9 CA FB
|
||
sta $DF,x ; CPU:$F6C5 PRG:36C5 95 DF
|
||
iny ; CPU:$F6C7 PRG:36C7 C8
|
||
inx ; CPU:$F6C8 PRG:36C8 E8
|
||
txa ; CPU:$F6C9 PRG:36C9 8A
|
||
cmp #$09 ; CPU:$F6CA PRG:36CA C9 09
|
||
bne InitializeSoundSequence_Block_1 ; CPU:$F6CC PRG:36CC D0 F4
|
||
lda #$01 ; CPU:$F6CE PRG:36CE A9 01
|
||
sta $D0 ; CPU:$F6D0 PRG:36D0 85 D0
|
||
sta $D1 ; CPU:$F6D2 PRG:36D2 85 D1
|
||
sta $D2 ; CPU:$F6D4 PRG:36D4 85 D2
|
||
sta $D3 ; CPU:$F6D6 PRG:36D6 85 D3
|
||
lda #$00 ; CPU:$F6D8 PRG:36D8 A9 00
|
||
sta $E8 ; CPU:$F6DA PRG:36DA 85 E8
|
||
sta $E9 ; CPU:$F6DC PRG:36DC 85 E9
|
||
sta $EA ; CPU:$F6DE PRG:36DE 85 EA
|
||
sta $EB ; CPU:$F6E0 PRG:36E0 85 EB
|
||
rts ; CPU:$F6E2 PRG:36E2 60
|
||
|
||
; Preserved sound data / unused bytes
|
||
Data_F6E5:
|
||
.byte $94, $AB, $FD, $58, $00, $7F, $04, $18 ; CPU:$F6E3 PRG:36E3 94 AB FD 58 00 7F 04 18
|
||
.byte $3F, $7F, $00, $00, $06, $7F, $0A, $C0 ; CPU:$F6EB PRG:36EB 3F 7F 00 00 06 7F 0A C0
|
||
.byte $08, $7F, $05, $C0, $C1, $89, $02, $0F ; CPU:$F6F3 PRG:36F3 08 7F 05 C0 C1 89 02 0F
|
||
.byte $FF, $FF, $FF, $10, $00, $18, $10, $01 ; CPU:$F6FB PRG:36FB FF FF FF 10 00 18 10 01
|
||
.byte $18, $00, $01, $88, $02, $02, $40, $03 ; CPU:$F703 PRG:3703 18 00 01 88 02 02 40 03
|
||
.byte $05, $40, $04, $07, $40 ; CPU:$F70B PRG:370B 05 40 04 07 40
|
||
; SilencePulseChannels
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
SilencePulseChannels:
|
||
lda #$7F ; CPU:$F710 PRG:3710 A9 7F
|
||
sta $4001 ; CPU:$F712 PRG:3712 8D 01 40
|
||
sta $4005 ; CPU:$F715 PRG:3715 8D 05 40
|
||
; InitializeApuChannelState
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
InitializeApuChannelState:
|
||
stx $DC ; CPU:$F718 PRG:3718 86 DC
|
||
sty $DD ; CPU:$F71A PRG:371A 84 DD
|
||
rts ; CPU:$F71C PRG:371C 60
|
||
Sound_F71F:
|
||
ldx #$E5 ; CPU:$F71D PRG:371D A2 E5
|
||
ldy #$F6 ; CPU:$F71F PRG:371F A0 F6
|
||
bne Sound_F745 ; CPU:$F721 PRG:3721 D0 20
|
||
; UpdateMusicTempo
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
UpdateMusicTempo:
|
||
lda $F3 ; CPU:$F723 PRG:3723 A5 F3
|
||
lsr a ; CPU:$F725 PRG:3725 4A
|
||
bcs Sound_F736 ; CPU:$F726 PRG:3726 B0 0C
|
||
lda $F7 ; CPU:$F728 PRG:3728 A5 F7
|
||
lsr a ; CPU:$F72A PRG:372A 4A
|
||
bcs Sound_F749 ; CPU:$F72B PRG:372B B0 1A
|
||
lda $F0 ; CPU:$F72D PRG:372D A5 F0
|
||
and #$10 ; CPU:$F72F PRG:372F 29 10
|
||
bne Sound_F71F ; CPU:$F731 PRG:3731 D0 EA
|
||
rts ; CPU:$F733 PRG:3733 60
|
||
Sound_F736:
|
||
lda $F7 ; CPU:$F734 PRG:3734 A5 F7
|
||
ora #$01 ; CPU:$F736 PRG:3736 09 01
|
||
sta $F7 ; CPU:$F738 PRG:3738 85 F7
|
||
lda #$00 ; CPU:$F73A PRG:373A A9 00
|
||
sta $07E4 ; CPU:$F73C PRG:373C 8D E4 07
|
||
ldx #$FC ; CPU:$F73F PRG:373F A2 FC
|
||
ldy #$F5 ; CPU:$F741 PRG:3741 A0 F5
|
||
Sound_F745:
|
||
jsr $F683 ; CPU:$F743 PRG:3743 20 83 F6
|
||
rts ; CPU:$F746 PRG:3746 60
|
||
Sound_F749:
|
||
inc $07E4 ; CPU:$F747 PRG:3747 EE E4 07
|
||
lda $07E4 ; CPU:$F74A PRG:374A AD E4 07
|
||
cmp #$58 ; CPU:$F74D PRG:374D C9 58
|
||
bne Sound_F77B ; CPU:$F74F PRG:374F D0 28
|
||
lda #$00 ; CPU:$F751 PRG:3751 A9 00
|
||
sta $F7 ; CPU:$F753 PRG:3753 85 F7
|
||
rts ; CPU:$F755 PRG:3755 60
|
||
Sound_F758:
|
||
lda #$C0 ; CPU:$F756 PRG:3756 A9 C0
|
||
sta $4017 ; CPU:$F758 PRG:3758 8D 17 40
|
||
jsr UpdateSoundPriority ; CPU:$F75B PRG:375B 20 25 FB
|
||
jsr ProcessMusicRequest ; CPU:$F75E PRG:375E 20 0A F9
|
||
jsr UpdatePulseEffects ; CPU:$F761 PRG:3761 20 38 FA
|
||
jsr UpdateNoiseEffects ; CPU:$F764 PRG:3764 20 AC FA
|
||
jsr ProcessSoundEffectRequests ; CPU:$F767 PRG:3767 20 24 F8
|
||
lda $F1 ; CPU:$F76A PRG:376A A5 F1
|
||
sta $07E9 ; CPU:$F76C PRG:376C 8D E9 07
|
||
lda #$00 ; CPU:$F76F PRG:376F A9 00
|
||
sta $F0 ; CPU:$F771 PRG:3771 85 F0
|
||
sta $F1 ; CPU:$F773 PRG:3773 85 F1
|
||
sta $F2 ; CPU:$F775 PRG:3775 85 F2
|
||
sta $F3 ; CPU:$F777 PRG:3777 85 F3
|
||
Sound_F77B:
|
||
rts ; CPU:$F779 PRG:3779 60
|
||
Sound_F77C:
|
||
lda $F4 ; CPU:$F77A PRG:377A A5 F4
|
||
and #$06 ; CPU:$F77C PRG:377C 29 06
|
||
bne Sound_F77B ; CPU:$F77E PRG:377E D0 F9
|
||
lda $F4 ; CPU:$F780 PRG:3780 A5 F4
|
||
and #$F0 ; CPU:$F782 PRG:3782 29 F0
|
||
sta $F4 ; CPU:$F784 PRG:3784 85 F4
|
||
ldx #$E9 ; CPU:$F786 PRG:3786 A2 E9
|
||
ldy #$F6 ; CPU:$F788 PRG:3788 A0 F6
|
||
jmp Sound_F879 ; CPU:$F78A PRG:378A 4C 79 F8
|
||
; UpdateSoundRequests
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
UpdateSoundRequests:
|
||
lda $F6 ; CPU:$F78D PRG:378D A5 F6
|
||
cmp #$20 ; CPU:$F78F PRG:378F C9 20
|
||
bne Sound_F79F ; CPU:$F791 PRG:3791 D0 0A
|
||
inc $07E8 ; CPU:$F793 PRG:3793 EE E8 07
|
||
; InitializeSoundDataPointers
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
InitializeSoundDataPointers:
|
||
and #$0F ; CPU:$F796 PRG:3796 29 0F
|
||
cmp #$0F ; CPU:$F798 PRG:3798 C9 0F
|
||
bne ResetAllSoundState ; CPU:$F79A PRG:379A D0 07
|
||
txa ; CPU:$F79C PRG:379C 8A
|
||
Sound_F79F:
|
||
lda $F4 ; CPU:$F79D PRG:379D A5 F4
|
||
and #$20 ; CPU:$F79F PRG:379F 29 20
|
||
bne Sound_F7C7 ; CPU:$F7A1 PRG:37A1 D0 22
|
||
; ResetAllSoundState
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
ResetAllSoundState:
|
||
lda #$10 ; CPU:$F7A3 PRG:37A3 A9 10
|
||
sta $400C ; CPU:$F7A5 PRG:37A5 8D 0C 40
|
||
sta $4000 ; CPU:$F7A8 PRG:37A8 8D 00 40
|
||
sta $4004 ; CPU:$F7AB PRG:37AB 8D 04 40
|
||
lda #$00 ; CPU:$F7AE PRG:37AE A9 00
|
||
sta $F4 ; CPU:$F7B0 PRG:37B0 85 F4
|
||
Sound_F7B4:
|
||
sta $F5 ; CPU:$F7B2 PRG:37B2 85 F5
|
||
sta $F6 ; CPU:$F7B4 PRG:37B4 85 F6
|
||
sta $07FA ; CPU:$F7B6 PRG:37B6 8D FA 07
|
||
sta $F7 ; CPU:$F7B9 PRG:37B9 85 F7
|
||
sta $4008 ; CPU:$F7BB PRG:37BB 8D 08 40
|
||
sta $4011 ; CPU:$F7BE PRG:37BE 8D 11 40
|
||
sta $07F0 ; CPU:$F7C1 PRG:37C1 8D F0 07
|
||
rts ; CPU:$F7C4 PRG:37C4 60
|
||
Sound_F7C7:
|
||
lda #$10 ; CPU:$F7C5 PRG:37C5 A9 10
|
||
sta $4004 ; CPU:$F7C7 PRG:37C7 8D 04 40
|
||
sta $400C ; CPU:$F7CA PRG:37CA 8D 0C 40
|
||
lda #$00 ; CPU:$F7CD PRG:37CD A9 00
|
||
beq Sound_F7B4 ; CPU:$F7CF PRG:37CF F0 E1
|
||
Sound_F7D3:
|
||
lda #$00 ; CPU:$F7D1 PRG:37D1 A9 00
|
||
sta $07FA ; CPU:$F7D3 PRG:37D3 8D FA 07
|
||
rts ; CPU:$F7D6 PRG:37D6 60
|
||
Sound_F7D9:
|
||
ldx #$F5 ; CPU:$F7D7 PRG:37D7 A2 F5
|
||
ldy #$F6 ; CPU:$F7D9 PRG:37D9 A0 F6
|
||
jmp Sound_F879 ; CPU:$F7DB PRG:37DB 4C 79 F8
|
||
Sound_F7E0:
|
||
inc $07FB ; CPU:$F7DE PRG:37DE EE FB 07
|
||
lda $07FB ; CPU:$F7E1 PRG:37E1 AD FB 07
|
||
cmp #$10 ; CPU:$F7E4 PRG:37E4 C9 10
|
||
beq Sound_F7D9 ; CPU:$F7E6 PRG:37E6 F0 EF
|
||
cmp #$20 ; CPU:$F7E8 PRG:37E8 C9 20
|
||
beq Sound_F7D3 ; CPU:$F7EA PRG:37EA F0 E5
|
||
rts ; CPU:$F7EC PRG:37EC 60
|
||
Sound_F7EF:
|
||
lda #$00 ; CPU:$F7ED PRG:37ED A9 00
|
||
sta $07FB ; CPU:$F7EF PRG:37EF 8D FB 07
|
||
lda #$F0 ; CPU:$F7F2 PRG:37F2 A9 F0
|
||
sta $07FA ; CPU:$F7F4 PRG:37F4 8D FA 07
|
||
ldx #$F1 ; CPU:$F7F7 PRG:37F7 A2 F1
|
||
ldy #$F6 ; CPU:$F7F9 PRG:37F9 A0 F6
|
||
jmp Sound_F879 ; CPU:$F7FB PRG:37FB 4C 79 F8
|
||
Sound_F800:
|
||
lda $F4 ; CPU:$F7FE PRG:37FE A5 F4
|
||
and #$F0 ; CPU:$F800 PRG:3800 29 F0
|
||
ora #$02 ; CPU:$F802 PRG:3802 09 02
|
||
sta $F4 ; CPU:$F804 PRG:3804 85 F4
|
||
lda #$00 ; CPU:$F806 PRG:3806 A9 00
|
||
sta $07F7 ; CPU:$F808 PRG:3808 8D F7 07
|
||
ldx #$F1 ; CPU:$F80B PRG:380B A2 F1
|
||
ldy #$F6 ; CPU:$F80D PRG:380D A0 F6
|
||
jmp Sound_F879 ; CPU:$F80F PRG:380F 4C 79 F8
|
||
Sound_F814:
|
||
inc $07F7 ; CPU:$F812 PRG:3812 EE F7 07
|
||
lda $07F7 ; CPU:$F815 PRG:3815 AD F7 07
|
||
cmp #$10 ; CPU:$F818 PRG:3818 C9 10
|
||
bne Sound_F85B ; CPU:$F81A PRG:381A D0 3D
|
||
jmp Sound_F89B ; CPU:$F81C PRG:381C 4C 9B F8
|
||
Sound_F821:
|
||
jmp ResetAllSoundState ; CPU:$F81F PRG:381F 4C A5 F7
|
||
; ProcessSoundEffectRequests
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
ProcessSoundEffectRequests:
|
||
lda $F0 ; CPU:$F822 PRG:3822 A5 F0
|
||
lsr a ; CPU:$F824 PRG:3824 4A
|
||
bcs Sound_F821 ; CPU:$F825 PRG:3825 B0 F8
|
||
lda $F6 ; CPU:$F827 PRG:3827 A5 F6
|
||
cmp #$DF ; CPU:$F829 PRG:3829 C9 DF
|
||
beq Sound_F83B ; CPU:$F82B PRG:382B F0 0C
|
||
cmp #$7F ; CPU:$F82D PRG:382D C9 7F
|
||
beq Sound_F83B ; CPU:$F82F PRG:382F F0 08
|
||
cmp #$20 ; CPU:$F831 PRG:3831 C9 20
|
||
beq Sound_F83B ; CPU:$F833 PRG:3833 F0 04
|
||
lda $F6 ; CPU:$F835 PRG:3835 A5 F6
|
||
bne Sound_F85B ; CPU:$F837 PRG:3837 D0 20
|
||
Sound_F83B:
|
||
lda $07FA ; CPU:$F839 PRG:3839 AD FA 07
|
||
cmp #$0F ; CPU:$F83C PRG:383C C9 0F
|
||
beq Sound_F7EF ; CPU:$F83E PRG:383E F0 AD
|
||
cmp #$F0 ; CPU:$F840 PRG:3840 C9 F0
|
||
beq Sound_F7E0 ; CPU:$F842 PRG:3842 F0 9A
|
||
lda $F0 ; CPU:$F844 PRG:3844 A5 F0
|
||
lsr a ; CPU:$F846 PRG:3846 4A
|
||
lsr a ; CPU:$F847 PRG:3847 4A
|
||
bcs Sound_F800 ; CPU:$F848 PRG:3848 B0 B4
|
||
lsr a ; CPU:$F84A PRG:384A 4A
|
||
bcs Sound_F85F ; CPU:$F84B PRG:384B B0 10
|
||
lsr a ; CPU:$F84D PRG:384D 4A
|
||
bcs Sound_F85C ; CPU:$F84E PRG:384E B0 0A
|
||
lda $F4 ; CPU:$F850 PRG:3850 A5 F4
|
||
lsr a ; CPU:$F852 PRG:3852 4A
|
||
lsr a ; CPU:$F853 PRG:3853 4A
|
||
bcs Sound_F814 ; CPU:$F854 PRG:3854 B0 BC
|
||
lsr a ; CPU:$F856 PRG:3856 4A
|
||
bcs Sound_F87D ; CPU:$F857 PRG:3857 B0 22
|
||
Sound_F85B:
|
||
rts ; CPU:$F859 PRG:3859 60
|
||
Sound_F85C:
|
||
jmp Sound_F77C ; CPU:$F85A PRG:385A 4C 7C F7
|
||
Sound_F85F:
|
||
lda $F4 ; CPU:$F85D PRG:385D A5 F4
|
||
and #$80 ; CPU:$F85F PRG:385F 29 80
|
||
bne Sound_F85B ; CPU:$F861 PRG:3861 D0 F6
|
||
lda $F4 ; CPU:$F863 PRG:3863 A5 F4
|
||
and #$F0 ; CPU:$F865 PRG:3865 29 F0
|
||
ora #$04 ; CPU:$F867 PRG:3867 09 04
|
||
sta $F4 ; CPU:$F869 PRG:3869 85 F4
|
||
lda #$00 ; CPU:$F86B PRG:386B A9 00
|
||
sta $07F3 ; CPU:$F86D PRG:386D 8D F3 07
|
||
sta $07F1 ; CPU:$F870 PRG:3870 8D F1 07
|
||
ldx #$ED ; CPU:$F873 PRG:3873 A2 ED
|
||
ldy #$F6 ; CPU:$F875 PRG:3875 A0 F6
|
||
Sound_F879:
|
||
jsr $F68B ; CPU:$F877 PRG:3877 20 8B F6
|
||
rts ; CPU:$F87A PRG:387A 60
|
||
Sound_F87D:
|
||
inc $07F3 ; CPU:$F87B PRG:387B EE F3 07
|
||
lda $07F3 ; CPU:$F87E PRG:387E AD F3 07
|
||
cmp #$03 ; CPU:$F881 PRG:3881 C9 03
|
||
bne Sound_F8A1 ; CPU:$F883 PRG:3883 D0 1A
|
||
lda #$00 ; CPU:$F885 PRG:3885 A9 00
|
||
sta $07F3 ; CPU:$F887 PRG:3887 8D F3 07
|
||
inc $07F1 ; CPU:$F88A PRG:388A EE F1 07
|
||
lda $07F1 ; CPU:$F88D PRG:388D AD F1 07
|
||
cmp #$10 ; CPU:$F890 PRG:3890 C9 10
|
||
bne Sound_F8A2 ; CPU:$F892 PRG:3892 D0 0C
|
||
lda #$10 ; CPU:$F894 PRG:3894 A9 10
|
||
sta $400C ; CPU:$F896 PRG:3896 8D 0C 40
|
||
Sound_F89B:
|
||
lda $F4 ; CPU:$F899 PRG:3899 A5 F4
|
||
and #$F0 ; CPU:$F89B PRG:389B 29 F0
|
||
sta $F4 ; CPU:$F89D PRG:389D 85 F4
|
||
Sound_F8A1:
|
||
rts ; CPU:$F89F PRG:389F 60
|
||
Sound_F8A2:
|
||
sta $400E ; CPU:$F8A0 PRG:38A0 8D 0E 40
|
||
rts ; CPU:$F8A3 PRG:38A3 60
|
||
Sound_F8A6:
|
||
lda #$00 ; CPU:$F8A4 PRG:38A4 A9 00
|
||
sta $07E0 ; CPU:$F8A6 PRG:38A6 8D E0 07
|
||
clc ; CPU:$F8A9 PRG:38A9 18
|
||
lda $1B ; CPU:$F8AA PRG:38AA A5 1B
|
||
and #$07 ; CPU:$F8AC PRG:38AC 29 07
|
||
adc #$02 ; CPU:$F8AE PRG:38AE 69 02
|
||
sta $07E1 ; CPU:$F8B0 PRG:38B0 8D E1 07
|
||
lda $F7 ; CPU:$F8B3 PRG:38B3 A5 F7
|
||
and #$00 ; CPU:$F8B5 PRG:38B5 29 00
|
||
ora #$80 ; CPU:$F8B7 PRG:38B7 09 80
|
||
sta $F7 ; CPU:$F8B9 PRG:38B9 85 F7
|
||
bne Sound_F8E8 ; CPU:$F8BB PRG:38BB D0 29
|
||
Sound_F8BF:
|
||
inc $07E0 ; CPU:$F8BD PRG:38BD EE E0 07
|
||
lda $07E0 ; CPU:$F8C0 PRG:38C0 AD E0 07
|
||
cmp $07E1 ; CPU:$F8C3 PRG:38C3 CD E1 07
|
||
bne Sound_F8E8 ; CPU:$F8C6 PRG:38C6 D0 1E
|
||
Sound_F8CA:
|
||
lda #$10 ; CPU:$F8C8 PRG:38C8 A9 10
|
||
sta $4000 ; CPU:$F8CA PRG:38CA 8D 00 40
|
||
sta $4004 ; CPU:$F8CD PRG:38CD 8D 04 40
|
||
lda #$00 ; CPU:$F8D0 PRG:38D0 A9 00
|
||
sta $F7 ; CPU:$F8D2 PRG:38D2 85 F7
|
||
lda $F4 ; CPU:$F8D4 PRG:38D4 A5 F4
|
||
and #$0F ; CPU:$F8D6 PRG:38D6 29 0F
|
||
sta $F4 ; CPU:$F8D8 PRG:38D8 85 F4
|
||
rts ; CPU:$F8DA PRG:38DA 60
|
||
Sound_F8DD:
|
||
jsr ResetAllSoundState ; CPU:$F8DB PRG:38DB 20 A5 F7
|
||
lda #$80 ; CPU:$F8DE PRG:38DE A9 80
|
||
sta $F4 ; CPU:$F8E0 PRG:38E0 85 F4
|
||
lda #$02 ; CPU:$F8E2 PRG:38E2 A9 02
|
||
sta $F0 ; CPU:$F8E4 PRG:38E4 85 F0
|
||
Sound_F8E8:
|
||
ldx #$F9 ; CPU:$F8E6 PRG:38E6 A2 F9
|
||
ldy #$F6 ; CPU:$F8E8 PRG:38E8 A0 F6
|
||
jsr $F683 ; CPU:$F8EA PRG:38EA 20 83 F6
|
||
lda $1B ; CPU:$F8ED PRG:38ED A5 1B
|
||
and #$0F ; CPU:$F8EF PRG:38EF 29 0F
|
||
sta $4002 ; CPU:$F8F1 PRG:38F1 8D 02 40
|
||
ldx #$F9 ; CPU:$F8F4 PRG:38F4 A2 F9
|
||
ldy #$F6 ; CPU:$F8F6 PRG:38F6 A0 F6
|
||
jsr $F68F ; CPU:$F8F8 PRG:38F8 20 8F F6
|
||
lda $1B ; CPU:$F8FB PRG:38FB A5 1B
|
||
lsr a ; CPU:$F8FD PRG:38FD 4A
|
||
lsr a ; CPU:$F8FE PRG:38FE 4A
|
||
and #$0F ; CPU:$F8FF PRG:38FF 29 0F
|
||
sta $4006 ; CPU:$F901 PRG:3901 8D 06 40
|
||
rts ; CPU:$F904 PRG:3904 60
|
||
Sound_F907:
|
||
jmp Sound_F8A6 ; CPU:$F905 PRG:3905 4C A6 F8
|
||
; ProcessMusicRequest
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
ProcessMusicRequest:
|
||
lda $F6 ; CPU:$F908 PRG:3908 A5 F6
|
||
beq Sound_F91B ; CPU:$F90A PRG:390A F0 0D
|
||
cmp #$DF ; CPU:$F90C PRG:390C C9 DF
|
||
beq Sound_F91B ; CPU:$F90E PRG:390E F0 09
|
||
lda $F0 ; CPU:$F910 PRG:3910 A5 F0
|
||
and #$E0 ; CPU:$F912 PRG:3912 29 E0
|
||
beq Sound_F94E ; CPU:$F914 PRG:3914 F0 36
|
||
jsr ResetAllSoundState ; CPU:$F916 PRG:3916 20 A5 F7
|
||
Sound_F91B:
|
||
lda $F0 ; CPU:$F919 PRG:3919 A5 F0
|
||
asl a ; CPU:$F91B PRG:391B 0A
|
||
bcs Sound_F8DD ; CPU:$F91C PRG:391C B0 BD
|
||
asl a ; CPU:$F91E PRG:391E 0A
|
||
bcs Sound_F952 ; CPU:$F91F PRG:391F B0 2F
|
||
asl a ; CPU:$F921 PRG:3921 0A
|
||
bcs Sound_F965 ; CPU:$F922 PRG:3922 B0 3F
|
||
lda $F4 ; CPU:$F924 PRG:3924 A5 F4
|
||
asl a ; CPU:$F926 PRG:3926 0A
|
||
bcs Sound_F8E8 ; CPU:$F927 PRG:3927 B0 BD
|
||
lda $F4 ; CPU:$F929 PRG:3929 A5 F4
|
||
and #$E0 ; CPU:$F92B PRG:392B 29 E0
|
||
bne Sound_F94E ; CPU:$F92D PRG:392D D0 1D
|
||
lda $F6 ; CPU:$F92F PRG:392F A5 F6
|
||
cmp #$DF ; CPU:$F931 PRG:3931 C9 DF
|
||
beq Sound_F94B ; CPU:$F933 PRG:3933 F0 14
|
||
lda $F6 ; CPU:$F935 PRG:3935 A5 F6
|
||
bne Sound_F94E ; CPU:$F937 PRG:3937 D0 13
|
||
lda $F3 ; CPU:$F939 PRG:3939 A5 F3
|
||
asl a ; CPU:$F93B PRG:393B 0A
|
||
bcs Sound_F907 ; CPU:$F93C PRG:393C B0 C7
|
||
asl a ; CPU:$F93E PRG:393E 0A
|
||
bcs Sound_F977 ; CPU:$F93F PRG:393F B0 34
|
||
lda $F7 ; CPU:$F941 PRG:3941 A5 F7
|
||
asl a ; CPU:$F943 PRG:3943 0A
|
||
bcs Sound_F94F ; CPU:$F944 PRG:3944 B0 07
|
||
asl a ; CPU:$F946 PRG:3946 0A
|
||
bcs Sound_F993 ; CPU:$F947 PRG:3947 B0 48
|
||
Sound_F94B:
|
||
jsr UpdateMusicTempo ; CPU:$F949 PRG:3949 20 25 F7
|
||
Sound_F94E:
|
||
rts ; CPU:$F94C PRG:394C 60
|
||
Sound_F94F:
|
||
jmp Sound_F8BF ; CPU:$F94D PRG:394D 4C BF F8
|
||
Sound_F952:
|
||
lda #$0F ; CPU:$F950 PRG:3950 A9 0F
|
||
sta $07FA ; CPU:$F952 PRG:3952 8D FA 07
|
||
lda $F4 ; CPU:$F955 PRG:3955 A5 F4
|
||
and #$0F ; CPU:$F957 PRG:3957 29 0F
|
||
ora #$40 ; CPU:$F959 PRG:3959 09 40
|
||
sta $F4 ; CPU:$F95B PRG:395B 85 F4
|
||
ldx #$D1 ; CPU:$F95D PRG:395D A2 D1
|
||
ldy #$F9 ; CPU:$F95F PRG:395F A0 F9
|
||
bne Sound_F98F ; CPU:$F961 PRG:3961 D0 2A
|
||
Sound_F965:
|
||
lda #$02 ; CPU:$F963 PRG:3963 A9 02
|
||
sta $F0 ; CPU:$F965 PRG:3965 85 F0
|
||
lda $F4 ; CPU:$F967 PRG:3967 A5 F4
|
||
and #$0F ; CPU:$F969 PRG:3969 29 0F
|
||
ora #$20 ; CPU:$F96B PRG:396B 09 20
|
||
sta $F4 ; CPU:$F96D PRG:396D 85 F4
|
||
ldx #$CD ; CPU:$F96F PRG:396F A2 CD
|
||
ldy #$F9 ; CPU:$F971 PRG:3971 A0 F9
|
||
bne Sound_F98F ; CPU:$F973 PRG:3973 D0 18
|
||
Sound_F977:
|
||
lda #$00 ; CPU:$F975 PRG:3975 A9 00
|
||
sta $07FC ; CPU:$F977 PRG:3977 8D FC 07
|
||
lda $F7 ; CPU:$F97A PRG:397A A5 F7
|
||
and #$00 ; CPU:$F97C PRG:397C 29 00
|
||
ora #$40 ; CPU:$F97E PRG:397E 09 40
|
||
sta $F7 ; CPU:$F980 PRG:3980 85 F7
|
||
ldx #$D5 ; CPU:$F982 PRG:3982 A2 D5
|
||
ldy #$F9 ; CPU:$F984 PRG:3984 A0 F9
|
||
jsr $F68F ; CPU:$F986 PRG:3986 20 8F F6
|
||
ldx #$D9 ; CPU:$F989 PRG:3989 A2 D9
|
||
ldy #$F9 ; CPU:$F98B PRG:398B A0 F9
|
||
Sound_F98F:
|
||
jsr $F683 ; CPU:$F98D PRG:398D 20 83 F6
|
||
rts ; CPU:$F990 PRG:3990 60
|
||
Sound_F993:
|
||
inc $07FC ; CPU:$F991 PRG:3991 EE FC 07
|
||
lda $07FC ; CPU:$F994 PRG:3994 AD FC 07
|
||
cmp #$12 ; CPU:$F997 PRG:3997 C9 12
|
||
beq Sound_F9CA ; CPU:$F999 PRG:3999 F0 2D
|
||
cmp #$06 ; CPU:$F99B PRG:399B C9 06
|
||
bcc Sound_F9B1 ; CPU:$F99D PRG:399D 90 10
|
||
lda $1B ; CPU:$F99F PRG:399F A5 1B
|
||
ora #$10 ; CPU:$F9A1 PRG:39A1 09 10
|
||
and #$7F ; CPU:$F9A3 PRG:39A3 29 7F
|
||
sta $07FE ; CPU:$F9A5 PRG:39A5 8D FE 07
|
||
rol a ; CPU:$F9A8 PRG:39A8 2A
|
||
sta $07FD ; CPU:$F9A9 PRG:39A9 8D FD 07
|
||
jmp Sound_F9BD ; CPU:$F9AC PRG:39AC 4C BD F9
|
||
Sound_F9B1:
|
||
inc $07FD ; CPU:$F9AF PRG:39AF EE FD 07
|
||
inc $07FD ; CPU:$F9B2 PRG:39B2 EE FD 07
|
||
inc $07FE ; CPU:$F9B5 PRG:39B5 EE FE 07
|
||
inc $07FE ; CPU:$F9B8 PRG:39B8 EE FE 07
|
||
Sound_F9BD:
|
||
lda $07FD ; CPU:$F9BB PRG:39BB AD FD 07
|
||
sta $4006 ; CPU:$F9BE PRG:39BE 8D 06 40
|
||
lda $07FE ; CPU:$F9C1 PRG:39C1 AD FE 07
|
||
sta $4002 ; CPU:$F9C4 PRG:39C4 8D 02 40
|
||
rts ; CPU:$F9C7 PRG:39C7 60
|
||
Sound_F9CA:
|
||
jmp Sound_F8CA ; CPU:$F9C8 PRG:39C8 4C CA F8
|
||
; Preserved sound data / unused bytes
|
||
Data_F9CD:
|
||
.byte $B8, $D5, $20, $00, $9F, $93, $80, $22 ; CPU:$F9CB PRG:39CB B8 D5 20 00 9F 93 80 22
|
||
.byte $3F, $BA, $E0, $06, $3F, $BB, $CE, $06 ; CPU:$F9D3 PRG:39D3 3F BA E0 06 3F BB CE 06
|
||
.byte $B8, $93, $50, $02, $80, $7F, $60, $68 ; CPU:$F9DB PRG:39DB B8 93 50 02 80 7F 60 68
|
||
.byte $80, $7F, $62, $68 ; CPU:$F9E3 PRG:39E3 80 7F 62 68
|
||
; UpdateSoundEnvelopes
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
UpdateSoundEnvelopes:
|
||
lda $F5 ; CPU:$F9E7 PRG:39E7 A5 F5
|
||
and #$02 ; CPU:$F9E9 PRG:39E9 29 02
|
||
bne Sound_FA26 ; CPU:$F9EB PRG:39EB D0 37
|
||
lda $F6 ; CPU:$F9ED PRG:39ED A5 F6
|
||
cmp #$DF ; CPU:$F9EF PRG:39EF C9 DF
|
||
beq Sound_F9F9 ; CPU:$F9F1 PRG:39F1 F0 04
|
||
lda $F6 ; CPU:$F9F3 PRG:39F3 A5 F6
|
||
bne Sound_FA26 ; CPU:$F9F5 PRG:39F5 D0 2D
|
||
Sound_F9F9:
|
||
lda #$00 ; CPU:$F9F7 PRG:39F7 A9 00
|
||
sta $07F9 ; CPU:$F9F9 PRG:39F9 8D F9 07
|
||
lda $F5 ; CPU:$F9FC PRG:39FC A5 F5
|
||
and #$E0 ; CPU:$F9FE PRG:39FE 29 E0
|
||
ora #$02 ; CPU:$FA00 PRG:3A00 09 02
|
||
sta $F5 ; CPU:$FA02 PRG:3A02 85 F5
|
||
ldx #$DD ; CPU:$FA04 PRG:3A04 A2 DD
|
||
ldy #$F9 ; CPU:$FA06 PRG:3A06 A0 F9
|
||
bne Sound_FA7F ; CPU:$FA08 PRG:3A08 D0 73
|
||
Sound_FA0C:
|
||
inc $07F9 ; CPU:$FA0A PRG:3A0A EE F9 07
|
||
lda $07F9 ; CPU:$FA0D PRG:3A0D AD F9 07
|
||
cmp #$07 ; CPU:$FA10 PRG:3A10 C9 07
|
||
bne Sound_FA26 ; CPU:$FA12 PRG:3A12 D0 10
|
||
lda #$7F ; CPU:$FA14 PRG:3A14 A9 7F
|
||
sta $4005 ; CPU:$FA16 PRG:3A16 8D 05 40
|
||
lda #$10 ; CPU:$FA19 PRG:3A19 A9 10
|
||
sta $4004 ; CPU:$FA1B PRG:3A1B 8D 04 40
|
||
lda $F5 ; CPU:$FA1E PRG:3A1E A5 F5
|
||
and #$E0 ; CPU:$FA20 PRG:3A20 29 E0
|
||
sta $F5 ; CPU:$FA22 PRG:3A22 85 F5
|
||
Sound_FA26:
|
||
rts ; CPU:$FA24 PRG:3A24 60
|
||
Sound_FA27:
|
||
jsr ResetAllSoundState ; CPU:$FA25 PRG:3A25 20 A5 F7
|
||
ldx #$E1 ; CPU:$FA28 PRG:3A28 A2 E1
|
||
ldy #$F9 ; CPU:$FA2A PRG:3A2A A0 F9
|
||
jsr $F683 ; CPU:$FA2C PRG:3A2C 20 83 F6
|
||
ldx #$E5 ; CPU:$FA2F PRG:3A2F A2 E5
|
||
ldy #$F9 ; CPU:$FA31 PRG:3A31 A0 F9
|
||
jmp Sound_FA7F ; CPU:$FA33 PRG:3A33 4C 7F FA
|
||
; UpdatePulseEffects
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
UpdatePulseEffects:
|
||
lda $F6 ; CPU:$FA36 PRG:3A36 A5 F6
|
||
beq Sound_FA42 ; CPU:$FA38 PRG:3A38 F0 06
|
||
and #$0F ; CPU:$FA3A PRG:3A3A 29 0F
|
||
cmp #$0F ; CPU:$FA3C PRG:3A3C C9 0F
|
||
bne Sound_FA63 ; CPU:$FA3E PRG:3A3E D0 21
|
||
Sound_FA42:
|
||
lda $F4 ; CPU:$FA40 PRG:3A40 A5 F4
|
||
and #$80 ; CPU:$FA42 PRG:3A42 29 80
|
||
bne Sound_FA63 ; CPU:$FA44 PRG:3A44 D0 1B
|
||
lda $F7 ; CPU:$FA46 PRG:3A46 A5 F7
|
||
and #$C0 ; CPU:$FA48 PRG:3A48 29 C0
|
||
bne Sound_FA63 ; CPU:$FA4A PRG:3A4A D0 15
|
||
lda $F1 ; CPU:$FA4C PRG:3A4C A5 F1
|
||
lsr a ; CPU:$FA4E PRG:3A4E 4A
|
||
bcs Sound_FA27 ; CPU:$FA4F PRG:3A4F B0 D4
|
||
lsr a ; CPU:$FA51 PRG:3A51 4A
|
||
bcs UpdateSoundEnvelopes ; CPU:$FA52 PRG:3A52 B0 93
|
||
lsr a ; CPU:$FA54 PRG:3A54 4A
|
||
bcs Sound_FA83 ; CPU:$FA55 PRG:3A55 B0 2A
|
||
lsr a ; CPU:$FA57 PRG:3A57 4A
|
||
lsr a ; CPU:$FA58 PRG:3A58 4A
|
||
bcs Sound_FA64 ; CPU:$FA59 PRG:3A59 B0 07
|
||
lda $F5 ; CPU:$FA5B PRG:3A5B A5 F5
|
||
lsr a ; CPU:$FA5D PRG:3A5D 4A
|
||
lsr a ; CPU:$FA5E PRG:3A5E 4A
|
||
bcs Sound_FA0C ; CPU:$FA5F PRG:3A5F B0 A9
|
||
Sound_FA63:
|
||
rts ; CPU:$FA61 PRG:3A61 60
|
||
Sound_FA64:
|
||
lda $F6 ; CPU:$FA62 PRG:3A62 A5 F6
|
||
bne Sound_FA63 ; CPU:$FA64 PRG:3A64 D0 FB
|
||
lda $F5 ; CPU:$FA66 PRG:3A66 A5 F5
|
||
and #$02 ; CPU:$FA68 PRG:3A68 29 02
|
||
bne Sound_FA63 ; CPU:$FA6A PRG:3A6A D0 F5
|
||
ldx #$8A ; CPU:$FA6C PRG:3A6C A2 8A
|
||
ldy #$FA ; CPU:$FA6E PRG:3A6E A0 FA
|
||
jsr $F68F ; CPU:$FA70 PRG:3A70 20 8F F6
|
||
lda $1B ; CPU:$FA73 PRG:3A73 A5 1B
|
||
and #$3F ; CPU:$FA75 PRG:3A75 29 3F
|
||
ora #$10 ; CPU:$FA77 PRG:3A77 09 10
|
||
sta $4006 ; CPU:$FA79 PRG:3A79 8D 06 40
|
||
rts ; CPU:$FA7C PRG:3A7C 60
|
||
Sound_FA7F:
|
||
jsr $F68F ; CPU:$FA7D PRG:3A7D 20 8F F6
|
||
rts ; CPU:$FA80 PRG:3A80 60
|
||
Sound_FA83:
|
||
ldy #$0A ; CPU:$FA81 PRG:3A81 A0 0A
|
||
lda #$EF ; CPU:$FA83 PRG:3A83 A9 EF
|
||
jmp Sound_FBA5 ; CPU:$FA85 PRG:3A85 4C A5 FB
|
||
; Preserved sound data / unused bytes
|
||
Data_FA8A:
|
||
.byte $D9, $86, $A8, $48, $08, $7F, $40, $28 ; CPU:$FA88 PRG:3A88 D9 86 A8 48 08 7F 40 28
|
||
.byte $08, $7F, $45, $28 ; CPU:$FA90 PRG:3A90 08 7F 45 28
|
||
; UpdateTriangleEffects
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
UpdateTriangleEffects:
|
||
inc $07F6 ; CPU:$FA94 PRG:3A94 EE F6 07
|
||
lda $07F6 ; CPU:$FA97 PRG:3A97 AD F6 07
|
||
cmp #$04 ; CPU:$FA9A PRG:3A9A C9 04
|
||
bne Sound_FAD8 ; CPU:$FA9C PRG:3A9C D0 38
|
||
lda $F5 ; CPU:$FA9E PRG:3A9E A5 F5
|
||
and #$1F ; CPU:$FAA0 PRG:3AA0 29 1F
|
||
sta $F5 ; CPU:$FAA2 PRG:3AA2 85 F5
|
||
ldx #$92 ; CPU:$FAA4 PRG:3AA4 A2 92
|
||
ldy #$FA ; CPU:$FAA6 PRG:3AA6 A0 FA
|
||
bne Sound_FB00 ; CPU:$FAA8 PRG:3AA8 D0 54
|
||
; UpdateNoiseEffects
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
UpdateNoiseEffects:
|
||
lda $F6 ; CPU:$FAAA PRG:3AAA A5 F6
|
||
beq Sound_FABA ; CPU:$FAAC PRG:3AAC F0 0A
|
||
cmp #$08 ; CPU:$FAAE PRG:3AAE C9 08
|
||
beq Sound_FABA ; CPU:$FAB0 PRG:3AB0 F0 06
|
||
and #$0F ; CPU:$FAB2 PRG:3AB2 29 0F
|
||
cmp #$0F ; CPU:$FAB4 PRG:3AB4 C9 0F
|
||
bne Sound_FAD8 ; CPU:$FAB6 PRG:3AB6 D0 1E
|
||
Sound_FABA:
|
||
lda $F4 ; CPU:$FAB8 PRG:3AB8 A5 F4
|
||
and #$80 ; CPU:$FABA PRG:3ABA 29 80
|
||
bne Sound_FAD8 ; CPU:$FABC PRG:3ABC D0 18
|
||
lda $F1 ; CPU:$FABE PRG:3ABE A5 F1
|
||
asl a ; CPU:$FAC0 PRG:3AC0 0A
|
||
bcs Sound_FB17 ; CPU:$FAC1 PRG:3AC1 B0 52
|
||
asl a ; CPU:$FAC3 PRG:3AC3 0A
|
||
bcs Sound_FAE2 ; CPU:$FAC4 PRG:3AC4 B0 1A
|
||
lda $F5 ; CPU:$FAC6 PRG:3AC6 A5 F5
|
||
asl a ; CPU:$FAC8 PRG:3AC8 0A
|
||
asl a ; CPU:$FAC9 PRG:3AC9 0A
|
||
bcs UpdateTriangleEffects ; CPU:$FACA PRG:3ACA B0 C8
|
||
lda $F1 ; CPU:$FACC PRG:3ACC A5 F1
|
||
and #$20 ; CPU:$FACE PRG:3ACE 29 20
|
||
beq Sound_FAD9 ; CPU:$FAD0 PRG:3AD0 F0 05
|
||
lda $F6 ; CPU:$FAD2 PRG:3AD2 A5 F6
|
||
beq Sound_FB04 ; CPU:$FAD4 PRG:3AD4 F0 2C
|
||
Sound_FAD8:
|
||
rts ; CPU:$FAD6 PRG:3AD6 60
|
||
Sound_FAD9:
|
||
lda $F6 ; CPU:$FAD7 PRG:3AD7 A5 F6
|
||
cmp #$DF ; CPU:$FAD9 PRG:3AD9 C9 DF
|
||
bne Sound_FAD8 ; CPU:$FADB PRG:3ADB D0 F9
|
||
jmp Sound_F79F ; CPU:$FADD PRG:3ADD 4C 9F F7
|
||
Sound_FAE2:
|
||
lda $F5 ; CPU:$FAE0 PRG:3AE0 A5 F5
|
||
and #$1F ; CPU:$FAE2 PRG:3AE2 29 1F
|
||
ora #$40 ; CPU:$FAE4 PRG:3AE4 09 40
|
||
sta $F5 ; CPU:$FAE6 PRG:3AE6 85 F5
|
||
lda #$00 ; CPU:$FAE8 PRG:3AE8 A9 00
|
||
sta $4008 ; CPU:$FAEA PRG:3AEA 8D 08 40
|
||
sta $F6 ; CPU:$FAED PRG:3AED 85 F6
|
||
sta $07F6 ; CPU:$FAEF PRG:3AEF 8D F6 07
|
||
lda #$10 ; CPU:$FAF2 PRG:3AF2 A9 10
|
||
sta $4004 ; CPU:$FAF4 PRG:3AF4 8D 04 40
|
||
sta $400C ; CPU:$FAF7 PRG:3AF7 8D 0C 40
|
||
ldx #$8E ; CPU:$FAFA PRG:3AFA A2 8E
|
||
ldy #$FA ; CPU:$FAFC PRG:3AFC A0 FA
|
||
Sound_FB00:
|
||
jsr $F687 ; CPU:$FAFE PRG:3AFE 20 87 F6
|
||
rts ; CPU:$FB01 PRG:3B01 60
|
||
Sound_FB04:
|
||
lda $07E9 ; CPU:$FB02 PRG:3B02 AD E9 07
|
||
and #$20 ; CPU:$FB05 PRG:3B05 29 20
|
||
bne Sound_FB10 ; CPU:$FB07 PRG:3B07 D0 05
|
||
lda #$02 ; CPU:$FB09 PRG:3B09 A9 02
|
||
sta $07F5 ; CPU:$FB0B PRG:3B0B 8D F5 07
|
||
Sound_FB10:
|
||
ldy #$08 ; CPU:$FB0E PRG:3B0E A0 08
|
||
lda #$DF ; CPU:$FB10 PRG:3B10 A9 DF
|
||
jmp Sound_FBA5 ; CPU:$FB12 PRG:3B12 4C A5 FB
|
||
Sound_FB17:
|
||
ldy #$04 ; CPU:$FB15 PRG:3B15 A0 04
|
||
lda #$7F ; CPU:$FB17 PRG:3B17 A9 7F
|
||
jmp Sound_FBA5 ; CPU:$FB19 PRG:3B19 4C A5 FB
|
||
Sound_FB1E:
|
||
ldy #$00 ; CPU:$FB1C PRG:3B1C A0 00
|
||
lda #$02 ; CPU:$FB1E PRG:3B1E A9 02
|
||
jmp Sound_FBC1 ; CPU:$FB20 PRG:3B20 4C C1 FB
|
||
; UpdateSoundPriority
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
UpdateSoundPriority:
|
||
lda $07E8 ; CPU:$FB23 PRG:3B23 AD E8 07
|
||
bne Sound_FB5E ; CPU:$FB26 PRG:3B26 D0 34
|
||
lda $F2 ; CPU:$FB28 PRG:3B28 A5 F2
|
||
lsr a ; CPU:$FB2A PRG:3B2A 4A
|
||
bcs Sound_FB82 ; CPU:$FB2B PRG:3B2B B0 53
|
||
lsr a ; CPU:$FB2D PRG:3B2D 4A
|
||
bcs Sound_FB1E ; CPU:$FB2E PRG:3B2E B0 EC
|
||
lsr a ; CPU:$FB30 PRG:3B30 4A
|
||
bcs Sound_FB4C ; CPU:$FB31 PRG:3B31 B0 17
|
||
lsr a ; CPU:$FB33 PRG:3B33 4A
|
||
bcs Sound_FB7C ; CPU:$FB34 PRG:3B34 B0 44
|
||
lsr a ; CPU:$FB36 PRG:3B36 4A
|
||
bcs Sound_FB69 ; CPU:$FB37 PRG:3B37 B0 2E
|
||
lsr a ; CPU:$FB39 PRG:3B39 4A
|
||
bcs Sound_FB5E ; CPU:$FB3A PRG:3B3A B0 20
|
||
lsr a ; CPU:$FB3C PRG:3B3C 4A
|
||
bcs Sound_FB58 ; CPU:$FB3D PRG:3B3D B0 17
|
||
lsr a ; CPU:$FB3F PRG:3B3F 4A
|
||
bcs Sound_FB52 ; CPU:$FB40 PRG:3B40 B0 0E
|
||
lda $F6 ; CPU:$FB42 PRG:3B42 A5 F6
|
||
bne Sound_FB49 ; CPU:$FB44 PRG:3B44 D0 01
|
||
rts ; CPU:$FB46 PRG:3B46 60
|
||
Sound_FB49:
|
||
jmp $F504 ; CPU:$FB47 PRG:3B47 4C 04 F5
|
||
Sound_FB4C:
|
||
ldy #$02 ; CPU:$FB4A PRG:3B4A A0 02
|
||
lda #$04 ; CPU:$FB4C PRG:3B4C A9 04
|
||
bne Sound_FBA5 ; CPU:$FB4E PRG:3B4E D0 53
|
||
Sound_FB52:
|
||
ldy #$09 ; CPU:$FB50 PRG:3B50 A0 09
|
||
lda #$80 ; CPU:$FB52 PRG:3B52 A9 80
|
||
bne Sound_FB6D ; CPU:$FB54 PRG:3B54 D0 15
|
||
Sound_FB58:
|
||
ldy #$07 ; CPU:$FB56 PRG:3B56 A0 07
|
||
lda #$40 ; CPU:$FB58 PRG:3B58 A9 40
|
||
bne Sound_FB6D ; CPU:$FB5A PRG:3B5A D0 0F
|
||
Sound_FB5E:
|
||
lda #$00 ; CPU:$FB5C PRG:3B5C A9 00
|
||
sta $07E8 ; CPU:$FB5E PRG:3B5E 8D E8 07
|
||
ldy #$06 ; CPU:$FB61 PRG:3B61 A0 06
|
||
lda #$20 ; CPU:$FB63 PRG:3B63 A9 20
|
||
bne Sound_FBC1 ; CPU:$FB65 PRG:3B65 D0 58
|
||
Sound_FB69:
|
||
ldy #$05 ; CPU:$FB67 PRG:3B67 A0 05
|
||
lda #$10 ; CPU:$FB69 PRG:3B69 A9 10
|
||
Sound_FB6D:
|
||
jsr $F6A8 ; CPU:$FB6B PRG:3B6B 20 A8 F6
|
||
ldx #$FC ; CPU:$FB6E PRG:3B6E A2 FC
|
||
ldy #$FC ; CPU:$FB70 PRG:3B70 A0 FC
|
||
jsr SilencePulseChannels ; CPU:$FB72 PRG:3B72 20 12 F7
|
||
inc $07F0 ; CPU:$FB75 PRG:3B75 EE F0 07
|
||
bne Sound_FB49 ; CPU:$FB78 PRG:3B78 D0 CD
|
||
Sound_FB7C:
|
||
ldy #$03 ; CPU:$FB7A PRG:3B7A A0 03
|
||
lda #$08 ; CPU:$FB7C PRG:3B7C A9 08
|
||
bne Sound_FB86 ; CPU:$FB7E PRG:3B7E D0 04
|
||
Sound_FB82:
|
||
ldy #$01 ; CPU:$FB80 PRG:3B80 A0 01
|
||
lda #$01 ; CPU:$FB82 PRG:3B82 A9 01
|
||
Sound_FB86:
|
||
jsr $F6A8 ; CPU:$FB84 PRG:3B84 20 A8 F6
|
||
ldx #$80 ; CPU:$FB87 PRG:3B87 A2 80
|
||
ldy #$80 ; CPU:$FB89 PRG:3B89 A0 80
|
||
Sound_FB8D:
|
||
jsr InitializeApuChannelState ; CPU:$FB8B PRG:3B8B 20 1A F7
|
||
lda #$83 ; CPU:$FB8E PRG:3B8E A9 83
|
||
sta $4001 ; CPU:$FB90 PRG:3B90 8D 01 40
|
||
lda #$7F ; CPU:$FB93 PRG:3B93 A9 7F
|
||
sta $4005 ; CPU:$FB95 PRG:3B95 8D 05 40
|
||
bne Sound_FBAF ; CPU:$FB98 PRG:3B98 D0 13
|
||
jsr $F6A8 ; CPU:$FB9A PRG:3B9A 20 A8 F6
|
||
ldx #$04 ; CPU:$FB9D PRG:3B9D A2 04
|
||
ldy #$04 ; CPU:$FB9F PRG:3B9F A0 04
|
||
bne Sound_FBAC ; CPU:$FBA1 PRG:3BA1 D0 07
|
||
Sound_FBA5:
|
||
jsr $F6A8 ; CPU:$FBA3 PRG:3BA3 20 A8 F6
|
||
ldx #$80 ; CPU:$FBA6 PRG:3BA6 A2 80
|
||
ldy #$80 ; CPU:$FBA8 PRG:3BA8 A0 80
|
||
Sound_FBAC:
|
||
jsr SilencePulseChannels ; CPU:$FBAA PRG:3BAA 20 12 F7
|
||
Sound_FBAF:
|
||
lda #$00 ; CPU:$FBAD PRG:3BAD A9 00
|
||
sta $07F0 ; CPU:$FBAF PRG:3BAF 8D F0 07
|
||
lda $F4 ; CPU:$FBB2 PRG:3BB2 A5 F4
|
||
and #$20 ; CPU:$FBB4 PRG:3BB4 29 20
|
||
beq Sound_FB49 ; CPU:$FBB6 PRG:3BB6 F0 8F
|
||
lda #$D5 ; CPU:$FBB8 PRG:3BB8 A9 D5
|
||
sta $4001 ; CPU:$FBBA PRG:3BBA 8D 01 40
|
||
bne Sound_FB49 ; CPU:$FBBD PRG:3BBD D0 88
|
||
Sound_FBC1:
|
||
jsr $F6A8 ; CPU:$FBBF PRG:3BBF 20 A8 F6
|
||
ldx #$80 ; CPU:$FBC2 PRG:3BC2 A2 80
|
||
ldy #$BA ; CPU:$FBC4 PRG:3BC4 A0 BA
|
||
bne Sound_FB8D ; CPU:$FBC6 PRG:3BC6 D0 C3
|
||
; Sound sequence pointer/index table and encoded sequence data.
|
||
SoundSequencePointerTable:
|
||
.byte $0B, $14, $1D, $26, $2F, $38, $41, $4A ; CPU:$FBC8 PRG:3BC8 0B 14 1D 26 2F 38 41 4A
|
||
.byte $53, $5C, $65, $0C, $02, $FF, $0B, $FF ; CPU:$FBD0 PRG:3BD0 53 5C 65 0C 02 FF 0B FF
|
||
.byte $1E, $FF, $31, $FF, $15, $18, $FE, $2A ; CPU:$FBD8 PRG:3BD8 1E FF 31 FF 15 18 FE 2A
|
||
.byte $FE, $65, $FE, $86, $FE, $0C, $0D, $FE ; CPU:$FBE0 PRG:3BE0 FE 65 FE 86 FE 0C 0D FE
|
||
.byte $00, $00, $13, $FE, $00, $00, $15, $38 ; CPU:$FBE8 PRG:3BE8 00 00 13 FE 00 00 15 38
|
||
.byte $FF, $5A, $FF, $79, $FF, $94, $FF, $00 ; CPU:$FBF0 PRG:3BF0 FF 5A FF 79 FF 94 FF 00
|
||
.byte $00, $00, $D7, $FE, $ED, $FE, $00, $00 ; CPU:$FBF8 PRG:3BF8 00 00 D7 FE ED FE 00 00
|
||
.byte $00, $B3, $FF, $C9, $FF, $DA, $FF, $EF ; CPU:$FC00 PRG:3C00 00 B3 FF C9 FF DA FF EF
|
||
.byte $FF, $15, $A5, $FC, $0A, $FD, $98, $FD ; CPU:$FC08 PRG:3C08 FF 15 A5 FC 0A FD 98 FD
|
||
.byte $E0, $FD, $15, $B2, $FE, $00, $00, $C5 ; CPU:$FC10 PRG:3C10 E0 FD 15 B2 FE 00 00 C5
|
||
.byte $FE, $00, $00, $15, $00, $00, $92, $FE ; CPU:$FC18 PRG:3C18 FE 00 00 15 00 00 92 FE
|
||
.byte $A1, $FE, $00, $00, $0C, $59, $FC, $72 ; CPU:$FC20 PRG:3C20 A1 FE 00 00 0C 59 FC 72
|
||
.byte $FC, $8C, $FC, $00, $00, $00, $00, $00 ; CPU:$FC28 PRG:3C28 FC 8C FC 00 00 00 00 00
|
||
.byte $38, $FC, $49, $FC, $00, $00, $82, $02 ; CPU:$FC30 PRG:3C30 38 FC 49 FC 00 00 82 02
|
||
.byte $8B, $02, $80, $08, $02, $10, $02, $16 ; CPU:$FC38 PRG:3C38 8B 02 80 08 02 10 02 16
|
||
.byte $02, $52, $02, $02, $02, $1A, $00, $82 ; CPU:$FC40 PRG:3C40 02 52 02 02 02 1A 00 82
|
||
.byte $02, $80, $10, $02, $16, $02, $52, $02 ; CPU:$FC48 PRG:3C48 02 80 10 02 16 02 52 02
|
||
.byte $5A, $02, $02, $02, $56, $81, $02, $80 ; CPU:$FC50 PRG:3C50 5A 02 02 02 56 81 02 80
|
||
.byte $12, $02, $0C, $02, $04, $02, $0C, $02 ; CPU:$FC58 PRG:3C58 12 02 0C 02 04 02 0C 02
|
||
.byte $04, $02, $2A, $02, $81, $04, $02, $80 ; CPU:$FC60 PRG:3C60 04 02 2A 02 81 04 02 80
|
||
.byte $04, $02, $81, $04, $88, $02, $02, $00 ; CPU:$FC68 PRG:3C68 04 02 81 04 88 02 02 00
|
||
.byte $88, $02, $02, $80, $04, $02, $2A, $02 ; CPU:$FC70 PRG:3C70 88 02 02 80 04 02 2A 02
|
||
.byte $24, $02, $2A, $02, $24, $02, $1C, $02 ; CPU:$FC78 PRG:3C78 24 02 2A 02 24 02 1C 02
|
||
.byte $81, $22, $02, $80, $22, $02, $81, $24 ; CPU:$FC80 PRG:3C80 81 22 02 80 22 02 81 24
|
||
.byte $88, $02, $88, $02, $80, $56, $02, $4E ; CPU:$FC88 PRG:3C88 88 02 88 02 80 56 02 4E
|
||
.byte $02, $12, $02, $4E, $02, $12, $02, $0C ; CPU:$FC90 PRG:3C90 02 12 02 4E 02 12 02 0C
|
||
.byte $02, $81, $10, $02, $80, $10, $02, $81 ; CPU:$FC98 PRG:3C98 02 81 10 02 80 10 02 81
|
||
.byte $12, $88, $02, $C3, $81, $02, $02, $1C ; CPU:$FCA0 PRG:3CA0 12 88 02 C3 81 02 02 1C
|
||
.byte $02, $02, $02, $1C, $1C, $FF, $C6, $88 ; CPU:$FCA8 PRG:3CA8 02 02 02 1C 1C FF C6 88
|
||
.byte $1C, $FF, $C7, $82, $4C, $4C, $2A, $4C ; CPU:$FCB0 PRG:3CB0 1C FF C7 82 4C 4C 2A 4C
|
||
.byte $FF, $C6, $88, $1C, $FF, $C4, $81, $46 ; CPU:$FCB8 PRG:3CB8 FF C6 88 1C FF C4 81 46
|
||
.byte $02, $46, $02, $32, $02, $46, $80, $2E ; CPU:$FCC0 PRG:3CC0 02 46 02 32 02 46 80 2E
|
||
.byte $2E, $FF, $C3, $82, $46, $46, $81, $32 ; CPU:$FCC8 PRG:3CC8 2E FF C3 82 46 46 81 32
|
||
.byte $32, $46, $2E, $FF, $80, $0C, $0C, $81 ; CPU:$FCD0 PRG:3CD0 32 46 2E FF 80 0C 0C 81
|
||
.byte $46, $46, $46, $80, $04, $04, $81, $46 ; CPU:$FCD8 PRG:3CD8 46 46 46 80 04 04 81 46
|
||
.byte $46, $02, $C8, $82, $4C, $4C, $2A, $4C ; CPU:$FCE0 PRG:3CE0 46 02 C8 82 4C 4C 2A 4C
|
||
.byte $FF, $C2, $81, $46, $80, $32, $32, $82 ; CPU:$FCE8 PRG:3CE8 FF C2 81 46 80 32 32 82
|
||
.byte $46, $04, $81, $46, $2A, $FF, $C2, $81 ; CPU:$FCF0 PRG:3CF0 46 04 81 46 2A FF C2 81
|
||
.byte $0C, $0C, $80, $04, $04, $81, $04, $80 ; CPU:$FCF8 PRG:3CF8 0C 0C 80 04 04 81 04 80
|
||
.byte $2E, $2E, $81, $2E, $82, $24, $FF, $00 ; CPU:$FD00 PRG:3D00 2E 2E 81 2E 82 24 FF 00
|
||
.byte $81, $32, $02, $02, $06, $0C, $32, $02 ; CPU:$FD08 PRG:3D08 81 32 02 02 06 0C 32 02
|
||
.byte $02, $8A, $2E, $8B, $02, $8A, $2E, $8B ; CPU:$FD10 PRG:3D10 02 8A 2E 8B 02 8A 2E 8B
|
||
.byte $02, $8A, $2E, $8B, $02, $88, $2E, $32 ; CPU:$FD18 PRG:3D18 02 8A 2E 8B 02 88 2E 32
|
||
.byte $2E, $D0, $8C, $2C, $24, $FF, $D0, $2E ; CPU:$FD20 PRG:3D20 2E D0 8C 2C 24 FF D0 2E
|
||
.byte $20, $FF, $C3, $80, $28, $02, $82, $02 ; CPU:$FD28 PRG:3D28 20 FF C3 80 28 02 82 02
|
||
.byte $80, $2C, $02, $32, $02, $24, $02, $82 ; CPU:$FD30 PRG:3D30 80 2C 02 32 02 24 02 82
|
||
.byte $02, $81, $02, $80, $28, $02, $06, $02 ; CPU:$FD38 PRG:3D38 02 81 02 80 28 02 06 02
|
||
.byte $28, $02, $81, $02, $80, $24, $02, $32 ; CPU:$FD40 PRG:3D40 28 02 81 02 80 24 02 32
|
||
.byte $02, $24, $02, $FF, $80, $28, $02, $82 ; CPU:$FD48 PRG:3D48 02 24 02 FF 80 28 02 82
|
||
.byte $02, $80, $2C, $02, $32, $02, $24, $02 ; CPU:$FD50 PRG:3D50 02 80 2C 02 32 02 24 02
|
||
.byte $82, $02, $89, $0C, $0A, $08, $06, $32 ; CPU:$FD58 PRG:3D58 82 02 89 0C 0A 08 06 32
|
||
.byte $30, $2E, $2C, $2A, $28, $26, $24, $02 ; CPU:$FD60 PRG:3D60 30 2E 2C 2A 28 26 24 02
|
||
.byte $02, $02, $86, $02, $C7, $84, $02, $FF ; CPU:$FD68 PRG:3D68 02 02 86 02 C7 84 02 FF
|
||
.byte $C4, $80, $28, $02, $82, $02, $80, $2C ; CPU:$FD70 PRG:3D70 C4 80 28 02 82 02 80 2C
|
||
.byte $02, $32, $02, $24, $02, $82, $02, $81 ; CPU:$FD78 PRG:3D78 02 32 02 24 02 82 02 81
|
||
.byte $02, $80, $28, $02, $06, $02, $28, $02 ; CPU:$FD80 PRG:3D80 02 80 28 02 06 02 28 02
|
||
.byte $81, $02, $80, $24, $02, $32, $02, $24 ; CPU:$FD88 PRG:3D88 81 02 80 24 02 32 02 24
|
||
.byte $02, $FF, $C8, $84, $02, $FF, $81, $14 ; CPU:$FD90 PRG:3D90 02 FF C8 84 02 FF 81 14
|
||
.byte $02, $02, $14, $1A, $14, $02, $02, $88 ; CPU:$FD98 PRG:3D98 02 02 14 1A 14 02 02 88
|
||
.byte $10, $10, $10, $10, $14, $10, $85, $3C ; CPU:$FDA0 PRG:3DA0 10 10 10 10 14 10 85 3C
|
||
.byte $81, $44, $85, $4A, $81, $44, $88, $28 ; CPU:$FDA8 PRG:3DA8 81 44 85 4A 81 44 88 28
|
||
.byte $24, $20, $46, $42, $40, $C6, $81, $3C ; CPU:$FDB0 PRG:3DB0 24 20 46 42 40 C6 81 3C
|
||
.byte $02, $02, $44, $02, $02, $02, $4A, $02 ; CPU:$FDB8 PRG:3DB8 02 02 44 02 02 02 4A 02
|
||
.byte $46, $36, $36, $38, $38, $02, $3A, $02 ; CPU:$FDC0 PRG:3DC0 46 36 36 38 38 02 3A 02
|
||
.byte $80, $3C, $3C, $81, $02, $24, $02, $02 ; CPU:$FDC8 PRG:3DC8 80 3C 3C 81 02 24 02 02
|
||
.byte $2C, $24, $88, $24, $1E, $46, $36, $38 ; CPU:$FDD0 PRG:3DD0 2C 24 88 24 1E 46 36 38
|
||
.byte $3A, $FF, $C4, $84, $02, $FF, $D8, $81 ; CPU:$FDD8 PRG:3DD8 3A FF C4 84 02 FF D8 81
|
||
.byte $06, $FF, $C6, $88, $06, $FF, $C7, $81 ; CPU:$FDE0 PRG:3DE0 06 FF C6 88 06 FF C7 81
|
||
.byte $06, $06, $80, $06, $06, $81, $06, $06 ; CPU:$FDE8 PRG:3DE8 06 06 80 06 06 81 06 06
|
||
.byte $80, $06, $06, $81, $06, $06, $FF, $C6 ; CPU:$FDF0 PRG:3DF0 80 06 06 81 06 06 FF C6
|
||
.byte $88, $06, $FF, $E0, $81, $06, $06, $FF ; CPU:$FDF8 PRG:3DF8 88 06 FF E0 81 06 06 FF
|
||
.byte $82, $0F, $81, $06, $06, $EA, $06, $06 ; CPU:$FE00 PRG:3E00 82 0F 81 06 06 EA 06 06
|
||
.byte $06, $06, $FF, $C5, $80, $0E, $58, $FF ; CPU:$FE08 PRG:3E08 06 06 FF C5 80 0E 58 FF
|
||
.byte $00, $C5, $80, $0E, $58, $FF, $82, $1C ; CPU:$FE10 PRG:3E10 00 C5 80 0E 58 FF 82 1C
|
||
.byte $1C, $C3, $82, $1C, $1C, $81, $1C, $1C ; CPU:$FE18 PRG:3E18 1C C3 82 1C 1C 81 1C 1C
|
||
.byte $1C, $02, $FF, $C7, $88, $1C, $FF, $00 ; CPU:$FE20 PRG:3E20 1C 02 FF C7 88 1C FF 00
|
||
.byte $83, $02, $80, $0E, $02, $0E, $02, $0C ; CPU:$FE28 PRG:3E28 83 02 80 0E 02 0E 02 0C
|
||
.byte $02, $0E, $02, $4E, $02, $02, $02, $0E ; CPU:$FE30 PRG:3E30 02 0E 02 4E 02 02 02 0E
|
||
.byte $02, $0C, $02, $02, $02, $0E, $02, $0C ; CPU:$FE38 PRG:3E38 02 0C 02 02 02 0E 02 0C
|
||
.byte $02, $0E, $02, $4E, $02, $02, $02, $0E ; CPU:$FE40 PRG:3E40 02 0E 02 4E 02 02 02 0E
|
||
.byte $02, $0C, $02, $0E, $02, $0E, $02, $0C ; CPU:$FE48 PRG:3E48 02 0C 02 0E 02 0E 02 0C
|
||
.byte $02, $0E, $02, $4E, $02, $02, $02, $0E ; CPU:$FE50 PRG:3E50 02 0E 02 4E 02 02 02 0E
|
||
.byte $02, $0C, $02, $88, $4E, $18, $16, $12 ; CPU:$FE58 PRG:3E58 02 0C 02 88 4E 18 16 12
|
||
.byte $0E, $0C, $0E, $83, $02, $81, $3E, $3E ; CPU:$FE60 PRG:3E60 0E 0C 0E 83 02 81 3E 3E
|
||
.byte $82, $46, $1C, $46, $81, $02, $38, $3E ; CPU:$FE68 PRG:3E68 82 46 1C 46 81 02 38 3E
|
||
.byte $02, $82, $46, $1C, $82, $48, $48, $81 ; CPU:$FE70 PRG:3E70 02 82 46 1C 82 48 48 81
|
||
.byte $3E, $3E, $82, $38, $88, $24, $20, $1C ; CPU:$FE78 PRG:3E78 3E 3E 82 38 88 24 20 1C
|
||
.byte $48, $46, $42, $3E, $82, $09, $09, $C6 ; CPU:$FE80 PRG:3E80 48 46 42 3E 82 09 09 C6
|
||
.byte $82, $03, $0C, $FF, $C6, $88, $06, $FF ; CPU:$FE88 PRG:3E88 82 03 0C FF C6 88 06 FF
|
||
.byte $ED, $89, $2A, $02, $04, $0C, $02, $04 ; CPU:$FE90 PRG:3E90 ED 89 2A 02 04 0C 02 04
|
||
.byte $08, $02, $30, $26, $02, $30, $FF, $80 ; CPU:$FE98 PRG:3E98 08 02 30 26 02 30 FF 80
|
||
.byte $02, $ED, $89, $0C, $02, $12, $4E, $02 ; CPU:$FEA0 PRG:3EA0 02 ED 89 0C 02 12 4E 02
|
||
.byte $12, $18, $02, $0E, $08, $02, $0E, $FF ; CPU:$FEA8 PRG:3EA8 12 18 02 0E 08 02 0E FF
|
||
.byte $80, $42, $02, $48, $02, $1E, $02, $24 ; CPU:$FEB0 PRG:3EB0 80 42 02 48 02 1E 02 24
|
||
.byte $02, $02, $02, $2A, $02, $C6, $8C, $30 ; CPU:$FEB8 PRG:3EB8 02 02 02 2A 02 C6 8C 30
|
||
.byte $2A, $FF, $00, $80, $24, $02, $2A, $02 ; CPU:$FEC0 PRG:3EC0 2A FF 00 80 24 02 2A 02
|
||
.byte $30, $02, $06, $02, $02, $02, $0C, $02 ; CPU:$FEC8 PRG:3EC8 30 02 06 02 02 02 0C 02
|
||
.byte $C6, $8C, $12, $18, $FF, $80, $56, $54 ; CPU:$FED0 PRG:3ED0 C6 8C 12 18 FF 80 56 54
|
||
.byte $52, $50, $81, $02, $80, $5E, $5A, $54 ; CPU:$FED8 PRG:3ED8 52 50 81 02 80 5E 5A 54
|
||
.byte $50, $18, $14, $10, $0A, $06, $30, $2C ; CPU:$FEE0 PRG:3EE0 50 18 14 10 0A 06 30 2C
|
||
.byte $28, $02, $00, $80, $1A, $18, $16, $14 ; CPU:$FEE8 PRG:3EE8 28 02 00 80 1A 18 16 14
|
||
.byte $81, $02, $80, $02, $5E, $5A, $54, $50 ; CPU:$FEF0 PRG:3EF0 81 02 80 02 5E 5A 54 50
|
||
.byte $18, $14, $10, $0A, $06, $30, $2C, $28 ; CPU:$FEF8 PRG:3EF8 18 14 10 0A 06 30 2C 28
|
||
.byte $82, $1C, $02, $1C, $02, $02, $1C, $1C ; CPU:$FF00 PRG:3F00 82 1C 02 1C 02 02 1C 1C
|
||
.byte $00, $81, $10, $0A, $32, $28, $80, $32 ; CPU:$FF08 PRG:3F08 00 81 10 0A 32 28 80 32
|
||
.byte $02, $32, $02, $82, $32, $81, $06, $02 ; CPU:$FF10 PRG:3F10 02 32 02 82 32 81 06 02
|
||
.byte $06, $02, $82, $32, $81, $54, $1A, $10 ; CPU:$FF18 PRG:3F18 06 02 82 32 81 54 1A 10
|
||
.byte $0A, $80, $10, $02, $10, $02, $82, $10 ; CPU:$FF20 PRG:3F20 0A 80 10 02 10 02 82 10
|
||
.byte $81, $16, $02, $16, $02, $82, $0A, $83 ; CPU:$FF28 PRG:3F28 81 16 02 16 02 82 0A 83
|
||
.byte $03, $0C, $82, $03, $0C, $0C, $C2, $88 ; CPU:$FF30 PRG:3F30 03 0C 82 03 0C 0C C2 88
|
||
.byte $1C, $1C, $1C, $1C, $1C, $1C, $83, $1C ; CPU:$FF38 PRG:3F38 1C 1C 1C 1C 1C 1C 83 1C
|
||
.byte $80, $04, $04, $2A, $02, $82, $1C, $FF ; CPU:$FF40 PRG:3F40 80 04 04 2A 02 82 1C FF
|
||
.byte $81, $4C, $02, $4C, $02, $2A, $02, $4C ; CPU:$FF48 PRG:3F48 81 4C 02 4C 02 2A 02 4C
|
||
.byte $1C, $81, $4C, $02, $4C, $02, $4C, $00 ; CPU:$FF50 PRG:3F50 1C 81 4C 02 4C 02 4C 00
|
||
.byte $88, $2E, $2E, $2E, $30, $04, $30, $C4 ; CPU:$FF58 PRG:3F58 88 2E 2E 2E 30 04 30 C4
|
||
.byte $80, $2E, $04, $FF, $83, $02, $88, $2E ; CPU:$FF60 PRG:3F60 80 2E 04 FF 83 02 88 2E
|
||
.byte $2E, $2E, $30, $04, $30, $C4, $80, $2E ; CPU:$FF68 PRG:3F68 2E 2E 30 04 30 C4 80 2E
|
||
.byte $04, $FF, $83, $02, $84, $02, $02, $C2 ; CPU:$FF70 PRG:3F70 04 FF 83 02 84 02 02 C2
|
||
.byte $88, $3E, $3E, $3E, $42, $46, $42, $84 ; CPU:$FF78 PRG:3F78 88 3E 3E 3E 42 46 42 84
|
||
.byte $3E, $FF, $85, $3E, $81, $3E, $88, $1C ; CPU:$FF80 PRG:3F80 3E FF 85 3E 81 3E 88 1C
|
||
.byte $46, $1C, $81, $02, $3E, $3E, $3E, $82 ; CPU:$FF88 PRG:3F88 46 1C 81 02 3E 3E 3E 82
|
||
.byte $34, $02, $C2, $88, $06, $06, $06, $06 ; CPU:$FF90 PRG:3F90 34 02 C2 88 06 06 06 06
|
||
.byte $06, $06, $82, $06, $06, $06, $06, $FF ; CPU:$FF98 PRG:3F98 06 06 82 06 06 06 06 FF
|
||
.byte $C2, $81, $06, $06, $80, $06, $06, $81 ; CPU:$FFA0 PRG:3FA0 C2 81 06 06 80 06 06 81
|
||
.byte $06, $06, $06, $06, $80, $06, $06, $FF ; CPU:$FFA8 PRG:3FA8 06 06 06 06 80 06 06 FF
|
||
.byte $09, $80, $10, $02, $10, $02, $10, $02 ; CPU:$FFB0 PRG:3FB0 09 80 10 02 10 02 10 02
|
||
.byte $0C, $0C, $0C, $02, $0C, $02, $14, $14 ; CPU:$FFB8 PRG:3FB8 0C 0C 0C 02 0C 02 14 14
|
||
.byte $14, $02, $14, $02, $85, $10, $00, $80 ; CPU:$FFC0 PRG:3FC0 14 02 14 02 85 10 00 80
|
||
.byte $32, $02, $32, $02, $32, $02, $C2, $32 ; CPU:$FFC8 PRG:3FC8 32 02 32 02 32 02 C2 32
|
||
.byte $32, $32, $02, $32, $02, $FF, $85, $32 ; CPU:$FFD0 PRG:3FD0 32 32 02 32 02 FF 85 32
|
||
.byte $80, $54, $02, $54, $02, $54, $02, $50 ; CPU:$FFD8 PRG:3FD8 80 54 02 54 02 54 02 50
|
||
.byte $50, $50, $02, $50, $02, $56, $56, $56 ; CPU:$FFE0 PRG:3FE0 50 50 02 50 02 56 56 56
|
||
.byte $02, $56, $02, $85, $54, $C4, $85, $0C ; CPU:$FFE8 PRG:3FE8 02 56 02 85 54 C4 85 0C
|
||
.byte $FF, $FF, $FF, $FF, $FF ; CPU:$FFF0 PRG:3FF0 FF FF FF FF FF
|
||
; UpdateAudioFrame
|
||
; Purpose: sound-driver routine identified from call flow and register/state access.
|
||
; Inputs: sound request, channel, and stream state in zero page/global RAM as used locally.
|
||
; Returns: corresponding APU or sequencer state updated.
|
||
UpdateAudioFrame:
|
||
jmp Sound_F758 ; CPU:$FFF5 PRG:3FF5 4C 58 F7
|
||
; NES interrupt vectors
|
||
InterruptVectors:
|
||
.word $C094, $C000, $C0F7 ; CPU:$FFF8 PRG:3FF8 94 C0 00 C0 F7 C0
|
||
|