$F1A9/61865: Find free sector and allocate
Jump from $DCDA:
F1A9: A9 01 LDA #$01
F1AB: 0D F9 02 ORA $02F9
F1AE: 8D F9 02 STA $02F9
F1B1: A5 86 LDA $86
F1B3: 48 PHA
F1B4: A9 01 LDA #$01 ; track counter
F1B6: 85 86 STA $86
Jump from $F1E4:
F1B8: AD 85 FE LDA $FE85 ; 18, directory track
F1BB: 38 SEC
F1BC: E5 86 SBC $86 ; minus counter
F1BE: 85 80 STA $80 ; save as track number
F1C0: 90 09 BCC $F1CB ; result <= zero?
F1C2: F0 07 BEQ $F1CB ; then try top half of directory
F1C4: 20 11 F0 JSR $F011 ; find BAM field for this track
F1C7: B1 6D LDA ($6D),Y ; number of free blocks in this track
F1C9: D0 1B BNE $F1E6 ; free blocks exist
Jump from $F1C0, $F1C2:
F1CB: AD 85 FE LDA $FE85 ; 18, directory track
F1CE: 18 CLC
F1CF: 65 86 ADC $86 ; plus counter
F1D1: 85 80 STA $80 ; save as track number
F1D3: E6 86 INC $86 ; increment counter
F1D5: CD D7 FE CMP $FED7 ; 36, max track number plus one
F1D8: 90 05 BCC $F1DF ; smaller, then ok
F1DA: A9 67 LDA #$67
F1DC: 20 45 E6 JSR $E645 ; 67, 'illegal track or sector'
Jump from $F1D8:
F1DF: 20 11 F0 JSR $F011 ; find BAM field for this track
F1E2: B1 6D LDA ($6D),Y ; number of free blocks?
F1E4: F0 D2 BEQ $F1B8 ; no more free blocks?
Jump from $F1C9:
F1E6: 68 PLA
F1E7: 85 86 STA $86
F1E9: A9 00 LDA #$00
F1EB: 85 81 STA $81 ; sector 0
F1ED: 20 FA F1 JSR $F1FA ; find free sector
F1F0: F0 03 BEQ $F1F5 ; not found?
F1F2: 4C 90 EF JMP $EF90 ; allocate block in BAM
Jump from $F1F0, $F1A6:
F1F5: A9 71 LDA #$71
F1F7: 20 45 E6 JSR $E645 ; 71, 'dir error'
Previous Page / Next Page