$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 |