$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