$F11E/61726: Find and allocate free block
Jump from $D1A6, $DD1D, $E3A9, $E3BC, $E44E:
F11E: 20 3E DE JSR $DE3E ; get track and sector number
F121: A9 03 LDA #$03
F123: 85 6F STA $6F ; counter
F125: A9 01 LDA #$01
F127: 0D F9 02 ORA $02F9
F12A: 8D F9 02 STA $02F9
Jump from $F14A, $F158, $F161, $F16F, $D49B:
F12D: A5 6F LDA $6F ; save counter
F12F: 48 PHA
F130: 20 11 F0 JSR $F011 ; find BAM field for this track
F133: 68 PLA
F134: 85 6F STA $6F ; get counter back
F136: B1 6D LDA ($6D),Y ; number of free blocks in track
F138: D0 39 BNE $F173 ; blocks still free?
F13A: A5 80 LDA $80 ; track
F13C: CD 85 FE CMP $FE85 ; 18, directory track?
F13F: F0 19 BEQ $F15A ; yes, 'disk full'
F141: 90 1C BCC $F15F ; smaller, then next lower track
F143: E6 80 INC $80 ; increment track number
F145: A5 80 LDA $80
F147: CD D7 FE CMP $FED7 ; 36, highest track number plus one
F14A: D0 E1 BNE $F12D ; no, continue searching this track
F14C: AE 85 FE LDX $FE85 ; 18, directory track
F14F: CA DEX ; decrement
F150: 86 80 STX $80 ; save as track number
F152: A9 00 LDA #$00
F154: 85 81 STA $81 ; begin with sector number zero
F156: C6 6F DEC $6F ; decrement counter
F158: D0 D3 BNE $F12D ; not yet zero, then continue
Jump from $F13F, $F171:
F15A: A9 72 LDA #$72
F15C: 20 C8 C1 JSR $C1C8 ; 72, 'disk full'
Jump from $F141:
F15F: C6 80 DEC $80 ; decrement track number
F161: D0 CA BNE $F12D ; not yet 0, continue in this track
F163: AE 85 FE LDX $FE85 ; 18, directory track
F166: E8 INX ; increment
F167: 86 80 STX $80 ; save as track number
F169: A9 00 LDA #$00
F16B: 85 81 STA $81 ; begin with sector zero
F16D: C6 6F DEC $6F ; decrement counter
F16F: D0 BC BNE $F12D ; not yet zero, then continue
F171: F0 E7 BEQ $F15A ; else 'disk full'
Jump from $F138:
F173: A5 81 LDA $81 ; sector number
F175: 18 CLC
F176: 65 69 ADC $69 ; plus step width (10)
F178: 85 81 STA $81 ; as new number
F17A: A5 80 LDA $80 ; track number
F17C: 20 4B F2 JSR $F24B ; get maximum sector number
F17F: 8D 4E 02 STA $024E
F182: 8D 4D 02 STA $024D ; and save
F185: C5 81 CMP $81 ; greater than selected sector number?
F187: B0 0C BCS $F195 ; yes
F189: 38 SEC ; else
F18A: A5 81 LDA $81 ; sector number
F18C: ED 4E 02 SBC $024E ; minus maximum sector number
F18F: 85 81 STA $81 ; save as new sector number
F191: F0 02 BEQ $F195 ; zero?
F193: C6 81 DEC $81 ; else decrement sector number by one
Jump from $F187, $F191:
F195: 20 FA F1 JSR $F1FA ; check BAM, find free sector
F198: F0 03 BEQ $F19D ; not found?
Jump from $F1A4:
F19A: 4C 90 EF JMP $EF90 ; allocate block in BAM
Jump from $F198:
F19D: A9 00 LDA #$00
F19F: 85 81 STA $81 ; sector zero
F1A1: 20 FA F1 JSR $F1FA ; find free sector
F1A4: D0 F4 BNE $F19A ; found?
F1A6: 4C F5 F1 JMP $F1F5 ; no, 'dir sector'
Previous Page / Next Page