LoadEnemies: 0001D89B: A9 06 lda #$06 0001D89D: 8D 06 C0 sta $C006 バンク6に切り替え 0001D8A0: 85 42 sta CurrentBank CurrentBank$42=6 0001D8A9: A5 92 lda AutoSpawnObjectFFcounter 一度FFが出現した場合0x10から1フレームごとに減少するカウンタ 0001D8AB: F0 03 beq + 0001D8AD: 20 66 C6 jsr SpawnObject_TypeIsFF 一度FFが出現していた場合10フレーム連続でオブジェクトFFの処理が実行される SpawnObject_TypeIsFF: オブジェクトFFの処理実行 0001C666: A5 42 lda CurrentBank バンク番号CurrentBank$42=6をスタックに保存 0001C668: 48 pha スタックα=6 0001C685: BD B1 C6 lda ObjectFF_defs+1,x 全てA=2となる 0001C688: 20 AE C7 jsr SwitchBankTile SwitchBankTile 0001C7AE: 48 pha スタックβ=A=2 (中略) 0001C7BB: 68 pla A=スタックβ=2を取り出し 0001C7BC: 29 03 and #$03 2 AND 3 = 2 0001C7BE: A8 tay Y=2 0001C7BF: 85 42 sta CurrentBank CurrentBank$42=2 0001C7C1: 99 00 C0 sta $C000,y バンク2に切り替え 0001C7C4: 60 rts 0001C6AA: 68 pla A=スタックα=6 0001C6AB: AA tax X=6 0001C6AC: 9D 00 C0 sta $C000,x ; バンク6に切り替え (End SpawnObject_TypeIsFF) 0001D8BA: D0 03 4C 21 D9 beq LoadEnemies_Backward LoadEnemies_Backward: 後ろ向きの敵出現処理 0001D921: A5 1B lda ScrollPosScreen 0001D923: 85 05 sta $05 0001D925: A5 1A lda ScrollPosX 0001D927: 85 04 sta $04 - 0001D929: A5 8B lda PreviousEnemyIndex 0001D92B: C9 FF cmp #$FF 0001D92D: F0 2B beq ++ 0001D92F: 20 89 D9 jsr LoadEnemyNumber 敵番号を読み込み LoadEnemyNumber: 0001D99A: BD 52 A4 lda EnemyDataPointers+0,x ←バンク6から読み込み 0001D99D: 65 06 adc CurrentRoomPointer 0001D99F: 85 06 sta CurrentRoomPointer ←(CurrentRoomPointer+1)=$06=正常(バンク6由来) 0001D9A1: A5 07 lda CurrentRoomPointer+1 0001D9A3: 29 03 and #$03 0001D9A5: 7D 53 A4 adc EnemyDataPointers+1,x ←バンク6から読み込み 0001D9A8: 85 07 sta CurrentRoomPointer+1 ←(CurrentRoomPointer+1)=$07=正常(バンク6由来) 0001D9AA: A0 00 ldy #$00 0001D9AC: 60 rts (End LoadEnemyNumber) 0001D932: B1 06 lda (CurrentRoomPointer),y 敵のスクリーン番号 0001D934: C5 1B cmp ScrollPosScreen 0001D936: 90 22 bcc ++ 0001D938: D0 08 bne + 0001D93A: C8 iny 0001D93B: B1 06 lda (CurrentRoomPointer),y 敵のX座標 0001D93D: 88 dey 0001D93E: C5 1A cmp ScrollPosX 0001D940: 90 18 bcc ++ + 0001D942: C8 iny 0001D943: B1 06 lda (CurrentRoomPointer),y 敵のX座標 0001D945: 85 00 sta $00 0001D947: C8 iny 0001D948: B1 06 lda (CurrentRoomPointer),y 敵のY座標 0001D94A: 85 01 sta $01 0001D94C: C8 iny 0001D94D: B1 06 lda (CurrentRoomPointer),y 敵のオブジェクト番号 A=FF すなわちObjectFFが出現したとする 0001D94F: C8 iny 0001D950: A6 8B ldx PreviousEnemyIndex 0001D952: 20 AD D9 jsr SpawnObject SpawnObject: FFのオブジェクト処理実行 0001D9AD: 85 02 sta $02 0001D9AF: 84 03 sty $03 0001D9B1: C9 FF cmp #$FF 0001D9B3: D0 06 bne + 0001D9B5: 20 66 C6 jsr SpawnObject_TypeIsFF SpawnObject_TypeIsFF: 0001C666: A5 42 lda CurrentBank バンク番号CurrentBank$42=2をスタックに保存 0001C668: 48 pha スタックα=2 0001C685: BD B1 C6 lda ObjectFF_defs+1,x 全てA=2となる 0001C688: 20 AE C7 jsr SwitchBankTile SwitchBankTile 0001C7AE: 48 pha スタックβ=2 0001C7BB: 68 pla A=スタックβ=2を取り出し 0001C7BC: 29 03 and #$03 2 AND 3 = 2 0001C7BE: A8 tay Y=2 0001C7BF: 85 42 sta CurrentBank CurrentBank$42=2 0001C7C1: 99 00 C0 sta $C000,y バンク2に切り替え 0001C7C4: 60 rts 0001C6AA: 68 pla A=スタックα=2 0001C6AB: AA tax X=2 0001C6AC: 9D 00 C0 sta $C000,x ; バンク2に切り替え (End SpawnObject_TypeIsFF) 0001D9B8: 4C 2F DA jmp EndSpawnObject 0001DA2F: A4 03 ldy $03 0001DA31: 60 rts (End SpawnObject) 0001D955: C6 8B dec PreviousEnemyIndex 0001D957: 4C 29 D9 jmp -($D929) 次のオブジェクトの生成処理へ 0001D929: A5 8B lda PreviousEnemyIndex 0001D92B: C9 FF cmp #$FF 0001D92D: F0 2B beq ++ 0001D92F: 20 89 D9 jsr LoadEnemyNumber 敵番号を読み込み LoadEnemyNumber: 0001D99A: BD 52 A4 lda EnemyDataPointers+0,x ←バンク2から読み込み 0001D99D: 65 06 adc CurrentRoomPointer 0001D99F: 85 06 sta CurrentRoomPointer ←(CurrentRoomPointer+1)=$06=異常(バンク2由来) 0001D9A1: A5 07 lda CurrentRoomPointer+1 0001D9A3: 29 03 and #$03 0001D9A5: 7D 53 A4 adc EnemyDataPointers+1,x ←バンク2から読み込み 0001D9A8: 85 07 sta CurrentRoomPointer+1 ←(CurrentRoomPointer+1)=$07=異常(バンク2由来) 0001D9AA: A0 00 ldy #$00 0001D9AC: 60 rts (End LoadEnemyNumber) 0001D932: B1 06 lda (CurrentRoomPointer),y 敵のスクリーン番号 0001D934: C5 1B cmp ScrollPosScreen 0001D936: 90 22 bcc ++ 0001D938: D0 08 bne + 0001D93A: C8 iny 0001D93B: B1 06 lda (CurrentRoomPointer),y 敵のX座標 0001D93D: 88 dey 0001D93E: C5 1A cmp ScrollPosX 0001D940: 90 18 bcc ++ + 0001D942: C8 iny 0001D943: B1 06 lda (CurrentRoomPointer),y 敵のX座標 0001D945: 85 00 sta $00 0001D947: C8 iny 0001D948: B1 06 lda (CurrentRoomPointer),y 敵のY座標 0001D94A: 85 01 sta $01 0001D94C: C8 iny 0001D94D: B1 06 lda (CurrentRoomPointer),y ←ここで(CurrentRoomPointer)がいつもと違うので通常と違うオブジェクト番号となる 0001D94F: C8 iny 0001D950: A6 8B ldx PreviousEnemyIndex 0001D952: 20 AD D9 jsr SpawnObject