 opt nol
 lib sysdef
 opt lis
 ttl UniFLEX Disk Formatter
 sttl WD 1000 5" Winchester Format
 pag

 text
 global blkdev,dev,DNT,DNTend,format,setDP

*
* setDP - set up disk parameters
*
setDP pshs d,x,y,u save registers
 ldd N_CYL set up Boot
 std DCtbl
 ldd BRW Begin Reduced Write Cylinder
 std DCtbl+3
 ldd BWP Begin Write Precomp Cylinder
 std DCtbl+5
 ldd N_HD set up Boot
 stb DCtbl+2
 puls d,x,y,u,pc return

*
* format
*
* Format disk
*

format
 ldd #0 set up track #
 std track
 sta track+2
10 lda track end of volume?
 cmpa VOLCNT
 bne 20f
 ldd track+1
 cmpd VOLCNT+1
 beq 99f end of volume - all done
20 ldd track+1 get track
 std wsk2+1 save in call
 lda track
 sta wsk2
 ldd dfd get file desc
 sys ind,wsk do seek
 ldd dfd get file desc
 sys write,secmap,FT_SIZ write track
 bec 30f no error - move to next track
 jsr setbtk determine bad track #
 bra 10b
30 ldd track+1 bump track #
 addd N_ST
 std track+1
 lda track
 adca #0
 sta track
 bra 10b
99 rts

*
* setbtk - Mark an entire track bad
*
setbtk pshs d,x,y,u save registers
 ldd N_ST get sectors/track
10 pshs d save count
 jsr setbsc mark block bad
 ldd track+1 bump block #
 addd #1
 std track+1
 lda track
 adca #0
 sta track
 puls d update count
 subd #1
 bne 10b
99 puls d,x,y,u,pc return

 data

dev fcc '/dev/wc0',0
 rzb 32-(*-dev)
blkdev fcc '/dev/w0',0
 rzb 32-(*-blkdev)

 lib DNT
DNT equ *
 lib winchesters
DNTend equ *
*
* Interleave factor = 5
*
secmap
 fcb 0,$01
 fcb 0,$08
 fcb 0,$0F
 fcb 0,$05
 fcb 0,$0C
 fcb 0,$02
 fcb 0,$09
 fcb 0,$10
 fcb 0,$06
 fcb 0,$0D
 fcb 0,$03
 fcb 0,$0A
 fcb 0,$11
 fcb 0,$07
 fcb 0,$0E
 fcb 0,$04
 fcb 0,$0B
FT_SIZ equ *-secmap Magic Number for Format Track
 end
