 .PAGE ' TSTFND '
; NEXT TRACK & SECTOR
;  RETURNS NEXT AVAILABLE TRACK & SECTOR
;  GIVEN CURRENT T & S
; 
;  ALLOCATION IS FROM TRACK 18
;  TOWARDS 1 & 35, BY FULL TRACKS
NXTTS
 JSR GETHDR
 LDA #3
 STA TEMP
NXTDS LDX DRVNUM
 LDA IPBM,X
 STA BMPNT+1
 LDA #0
 STA BMPNT
NXT1 LDA TRACK
 ASL A
 ASL A
 TAY
 LDA (BMPNT),Y
 BNE FNDNXT
 LDA TRACK
 CMP #18
 BEQ NXTERR
 BCC NXT2
 INC TRACK
 LDA TRACK
 CMP #MAXTRK
 BNE NXT1
 LDA #17
 STA TRACK
 LDA #0
 STA SECTOR
 DEC TEMP
 BNE NXT1
NXTERR LDA #DSKFUL
 JMP CMDERR
NXT2 DEC TRACK
 BNE NXT1
 LDA #19
 STA TRACK
 LDA #0
 STA SECTOR
 DEC TEMP
 BNE NXT1
 BEQ NXTERR
;
; FIND THE NEXT OPTIMUM SECTOR
; NEXT SECTOR=CURRENT SECTOR+N
;
FNDNXT LDA SECTOR
 CLC
 ADC SECINC
 STA SECTOR
 LDA TRACK
 JSR MAXSEC
 STA LSTSEC
 STA CMD
 CMP SECTOR
 BCS FNDN0
 .SKIP
 SEC
 LDA SECTOR
 SBC LSTSEC
 STA SECTOR
 BEQ FNDN0
 .SKIP
 DEC SECTOR
 BNE FNDN0
 .SKIP
FNDN3 LDA #0
 STA SECTOR
FNDN0 JSR AVAIL
FNDN1 JSR AV2
 BCS FNDN2
 DEC CMD
 BPL FNDN5
 LDA #DIRERR
 JMP CMDER2
FNDN5 LDA SECTOR
 INC SECTOR
 CMP LSTSEC
 BNE FNDN1
 BEQ FNDN3
FNDN2 JMP USEDTS
;
;
; RETURNS OPTIMUM INITIAL TRACK,SECTOR
;
INTTS LDA #17
 STA TRACK
 JSR SETBMP
LOOP LDA TRACK
 ASL A
 ASL A
 TAY
 LDA (BMPNT),Y
 BNE FNDSEC
 LDA #36
 SEC
 SBC TRACK
 ASL A
 ASL A
 TAY
 LDA (BMPNT),Y
 BNE FNDSEC
 DEC TRACK
 BNE LOOP
 LDA #DSKFUL
 JMP CMDERR
FNDSEC TYA
 LSR A
 LSR A
 STA TRACK
 LDA #0
 STA SECTOR
 JSR AVAIL
FND1 JSR AV2
 BCS FND3
 INC SECTOR
 BNE FND1
 LDA #DIRERR
 JMP CMDER2
FND3 JMP USEDTS
;
; SET (INDIRECT) BAM PNTR BY DRVNUM
SETBMP LDX DRVNUM
 LDA IPBM,X
 STA BMPNT+1
 LDA #0
 STA BMPNT
 RTS
;
; LOAD TRACK BAM INTO TEMP AND FINDS
; AVAILABLE SECTOR ON THE TRACK
;
AVAIL LDA TRACK
 ASL A
 ASL A
 TAY
 LDA (BMPNT),Y
 STA TEMP+3
 LDX #2
AV1 INY
 LDA (BMPNT),Y
 STA TEMP,X
 DEX
 BPL AV1
 JSR AVCK
 LDY SECTOR
 BEQ AV4
 BNE AV3
AV2 LDY #1
AV3 ROR TEMP
 ROR TEMP+1
 ROR TEMP+2
 DEY
 BNE AV3
AV4 RTS
 .SKIP
;BIT MAP VALIDITY CHECK
AVCK LDX #0
 LDY #3
 BNE AVCK5 ;(BRANCH)
AVCK3 INX
AVCK4 LSR A
 BCS AVCK3
 BNE AVCK4
 .SKIP
AVCK5 LDA TEMP-1,Y
 DEY
 BPL AVCK4
 .SKIP
 CPX TEMP+3
 BEQ AVCK6
 LDA #DIRERR
 LDY #0
 JMP CMDER2
AVCK6 RTS
 .SKIP
; .A=TRACK # ,RETURNS #SECTORS ON THIS TRACK
MAXSEC LDX #4
MAX1 CMP TRKNUM-1,X
 DEX
 BCS MAX1
 LDA NUMSEC,X
 RTS
; TABLES USED BY MAXSEC
;
;
TRKNUM .BYT 36,31,25,18
.END
