view level1/cmds/format_d64.asm @ 2898:28ed72477814 lwtools-port

Dummy merge of default branch into lwtools hg -y merge --tool=internal:fail default hg revert --all --no-backup --rev . hg resolve -a -m This dummy merge discards any changes from the default branch so that the result is the same as what lwtools already had. When merging back to default branch later, the discarded changes will be discarded there also, so the result will be that the default branch will contain what the lwtools branch had before these merges. Only scripts/burst was "rescued" from default branch.
author Tormod Volden <debian.tormod@gmail.com>
date Sat, 11 Jan 2014 18:40:44 +0100
parents 7dea3d77ba0b
children
line wrap: on
line source

********************************************************************
* Format - Initialize disk media
*
* $Id$
*
* Ed.    Comments                                       Who YY/MM/DD
* ------------------------------------------------------------------
*  18    From Dragon OS-9 Level One VR 01.02.00

* The Dragon edition is slightly different from the Color Computer's
* Even though the strings  "Change from 96tpi to 48tpi? "
* and "Double sided? " are in here Dragon doesn't use them.

         nam   Format
         ttl   Initialize disk media

* Disassembled 02/07/09 18:53:41 by Disasm v1.6 (C) 1988 by RML

         ifp1
         use   defsfile
         endc

tylg     set   Prgrm+Objct   
atrv     set   ReEnt+rev
rev      set   $01
edition  set   18

         mod   eom,name,tylg,atrv,start,size

u0000    rmb   1
u0001    rmb   1
PathNm   rmb   1
u0003    rmb   1
u0004    rmb   1
u0005    rmb   2
u0007    rmb   1
u0008    rmb   1
u0009    rmb   1
u000A    rmb   1
u000B    rmb   1
u000C    rmb   2
u000E    rmb   1
u000F    rmb   1
u0010    rmb   1
u0011    rmb   1
u0012    rmb   1
u0013    rmb   2
u0015    rmb   1
u0016    rmb   1
u0017    rmb   1
u0018    rmb   1
u0019    rmb   1
u001A    rmb   1
u001B    rmb   1
u001C    rmb   1
u001D    rmb   2
u001F    rmb   1
u0020    rmb   2
u0022    rmb   1
u0023    rmb   1
u0024    rmb   1
ClustSz  rmb   1
u0026    rmb   1
u0027    rmb   1
u0028    rmb   1
u0029    rmb   1
u002A    rmb   1
u002B    rmb   1
u002C    rmb   1
u002D    rmb   2
u002F    rmb   1
u0030    rmb   1
u0031    rmb   1
u0032    rmb   1
u0033    rmb   1
u0034    rmb   2
u0036    rmb   2
u0038    rmb   2
u003A    rmb   1
u003B    rmb   2
u003D    rmb   2
u003F    rmb   4
u0043    rmb   1
u0044    rmb   2
u0046    rmb   1
DevPath  rmb   1     Contains "/"
Device   rmb   13
u0055    rmb   15
u0064    rmb   3
u0067    rmb   32
u0087    rmb   40
u00AF    rmb   14
u00BD    rmb   12
DateBf   rmb   5
u00CE    rmb   9
u00D7    rmb   17
u00E8    rmb   6
u00EE    rmb   177
u019F    rmb   2
u01A1    rmb   2
u01A3    rmb   12
DDBuf    rmb   256
u02AF    rmb   3
u02B2    rmb   9924
u2976    rmb   451
size     equ   .

name     fcs   /Format/
         fcb   edition

L0014    fcb   $00 
         fcb   $00 
L0016    fcb   $00 
         fcb   $00 
L0018    fcb   $00 
         fcb   $00 
L001A    fcb   $80 
         fcb   $E5 e
         fcb   $80 
         fcb   $E5 e
         fcb   $00 
         fcb   $00 
L0020    fcb   $01 
         fcb   $00 
         fcb   $28 (
         fcb   $FF 
         fcb   $06 
         fcb   $00 
         fcb   $01 
         fcb   $FC 
         fcb   $0C 
         fcb   $FF 
         fcb   $00 
         fcb   $00 
         fcb   $06 
         fcb   $00 
         fcb   $01 
         fcb   $FE 
         fcb   $04 
         fcb   $00 
         fcb   $01 
         fcb   $F7 w
         fcb   $0A 
         fcb   $FF 
         fcb   $06 
         fcb   $00 
         fcb   $01 
         fcb   $FB 
         fcb   $80 
         fcb   $E5 e
         fcb   $80 
         fcb   $E5 e
         fcb   $01 
         fcb   $F7 w
         fcb   $0A 
         fcb   $FF 
         fcb   $00 
         fcb   $00 
         fcb   $FF 
         fcb   $00 
         fcb   $43 C
         fcb   $01 
         fcb   $28 (
L0049    fcb   $50 P
         fcb   $4E N
         fcb   $0C 
         fcb   $00 
         fcb   $03 
         fcb   $F6 v
         fcb   $01 
         fcb   $FC 
         fcb   $20 
         fcb   $4E N
         fcb   $00 
         fcb   $00 
         fcb   $0C 
         fcb   $00 
         fcb   $03 
         fcb   $F5 u
         fcb   $01 
         fcb   $FE 
         fcb   $04 
         fcb   $00 
         fcb   $01 
         fcb   $F7 w
         fcb   $16 
         fcb   $4E N
         fcb   $0C 
         fcb   $00 
         fcb   $03 
         fcb   $F5 u
         fcb   $01 
         fcb   $FB 
         fcb   $80 
         fcb   $E5 e
         fcb   $80 
         fcb   $E5 e
         fcb   $01 
         fcb   $F7 w
         fcb   $16 
         fcb   $4E N
         fcb   $00 
         fcb   $00 
         fcb   $4E N
         fcb   $00 
         fcb   $90 
         fcb   $01 
         fcb   $52 R
L0076    fcb   $20 
         fcb   $4E N
         fcb   $00 
         fcb   $00 
         fcb   $08 
         fcb   $00 
         fcb   $03 
         fcb   $F5 u
         fcb   $01 
         fcb   $FE 
         fcb   $04 
         fcb   $00 
         fcb   $01 
         fcb   $F7 w
         fcb   $16 
         fcb   $4E N
         fcb   $0C 
         fcb   $00 
         fcb   $03 
         fcb   $F5 u
         fcb   $01 
         fcb   $FB 
         fcb   $80 
         fcb   $E5 e
         fcb   $80 
         fcb   $E5 e
         fcb   $01 
         fcb   $F7 w
         fcb   $18 
         fcb   $4E N
         fcb   $00 
         fcb   $00 
         fcb   $4E N
         fcb   $00 
         fcb   $2C ,
         fcb   $01 
         fcb   $50 P
start    equ   *
         stu   <u0000
         bsr   L00BE
         bsr   L00CF
         bsr   L011A
         lbsr  L0295
         lbsr  AskBoth
         lbsr  L04A9
         lbsr  L0589
         lbsr  L05BF
         lbsr  L07C0
         ldu   <u0044
         os9   I$Detach 
         clrb  
Exit     os9   F$Exit   

L00BE    leay  PathNm,u
         pshs  y
         leay  >u00AF,u
L00C6    clr   ,-y
         cmpy  ,s
         bhi   L00C6
         puls  pc,y

L00CF    lda   ,x+
         cmpa  #'/
         beq   L00DA
L00D5    ldb   #E$BPNam
         lbra  ErrExit
L00DA    os9   F$PrsNam 
         lbcs  ErrExit
         lda   #'/
         cmpa  ,y
         beq   L00D5
         sty   <u0020
*
* Copy device name from arg to DevPath
         leay  <DevPath,u
L00ED    sta   ,y+
         lda   ,x+
         decb  
         bpl   L00ED
         leax  <Device,u
         lda   #$20
         sta   ,y

         clra              0 = Use device capabilities
         os9   I$Attach 
         lbcs  ErrExit
         stu   <u0044
         ldu   <u0000
         lda   #$40
         ldb   #$20
         std   ,y
         lda   #WRITE.
         leax  <DevPath,u
         os9   I$Open   
         bcs   Exit
         sta   <PathNm
         rts   
L011A    bsr   L0122
         bsr   L015D
         lbsr  L0216
         rts   

L0122    leax  >DDBuf,u
         clrb  
         os9   I$GetStt 
         bcs   Exit
         ldb   $07,x
         stb   <u0012
         ldb   $04,x
         pshs  b
         andb  #$01
         stb   <u0010
         puls  b
         lsrb  
         andb  #$01
         stb   <u0011
         ldd   $05,x
         std   <u0013
         ldb   $03,x
         stb   <u001B
         andb  #$20
         stb   <u0046
         ldd   $09,x
         std   <u0017
         ldd   $0B,x
         std   <u0019
         ldb   $0D,x
         stb   <u001F
         ldb   #$01
         stb   <ClustSz
         clrb  
         rts   
L015D    ldx   <u0020
L015F    leay  >L0188,pcr
         bsr   L0176
         bcs   L017F
         pshs  b,a
         ldd   $02,y
         leay  d,y
         puls  b,a
         jsr   ,y
         bcc   L015F
         lbra  Exit
L0176    lda   ,x+
L0178    cmpa  ,y
         bne   L0180
         ldb   $01,y
         clra  
L017F    rts   
L0180    leay  $04,y
         tst   ,y
         bne   L0178
         coma  
         rts   
L0188    fdb   $5259,$002c,$7259,$0028
         fdb   $2200,$002d,$3a00,$005d,$4300,$0022,$6300,$001e
         fdb   $2800,$0013,$2900,$000f,$2c00,$000b,$2000,$0007
         fdb   $00d7,$1039,$d71c,$39d7,$1239,$0c46,$3931,$c867

         ldb   #$20
L01C2    lda   ,x+
         cmpa  #$22
         beq   L01D9
         sta   ,y+
         decb  
         bne   L01C2
L01CD    ldb   ,x+
         cmpb  #$22
         beq   L01DF
         cmpb  #$20
         bcc   L01CD
         bra   L01DF
L01D9    lda   #$20
         cmpb  #$20
         beq   L01E3
L01DF    leay  -$01,y
         lda   ,y
L01E3    adda  #$80
         sta   ,y
         clrb  
         rts   
         lbsr  L08AF
         ldd   <u001D
         std   <u0013
         rts   
         lbsr  L08AF
         ldd   <u001D
         tsta  
         beq   L01FB
         ldb   #$01
L01FB    stb   <u001F
L01FD    rts   
         lbsr  L08AF
         ldd   <u001D
         tsta  
         beq   L0208
         ldb   #$01
L0208    stb   <ClustSz
         negb  
         decb  
         andb  <ClustSz
         beq   L0214
         ldb   #$01
         stb   <ClustSz
L0214    clrb  
         rts   
L0216    leax  >Title,pcr
         lbsr  L0272
         leay  >DDBuf,u
         ldx   $0B,y
         tst   <u0010
         beq   L0229
         ldx   $09,y
L0229    stx   <u0017
         leax  >FmtMsg,pcr
         ldy   #FmtMLen
         lbsr  L0276
         leax  <DevPath,u
         tfr   x,y
L023B    lda   ,y+
         cmpa  #$40
         bne   L023B
         pshs  y
         lda   #$0D
         sta   -$01,y
         lbsr  L0272
         puls  y
         lda   #$40
         sta   -$01,y
         lda   <u001C
         bne   L01FD
L0254    leax  >Query,pcr
         ldy   #QueryLen
         lbsr  GetYN
         anda  #$DF
         cmpa  #'Y
         beq   L01FD
         clrb  
         cmpa  #'N
         lbeq  Exit
         bra   L0254
L026E    leax  >HelpCR,pcr
L0272    ldy   #$0050
L0276    lda   #$01
         os9   I$WritLn 
         rts   
*
* Read a one-byte answer
*
GetYN    pshs  u,y,x,b,a
         bsr   L0276
         leax  ,s
         ldy   #$0001
         clra  
         os9   I$Read   
         lbcs  Exit
         bsr   L026E
         puls  u,y,x,b,a
         anda  #$7F
         rts   

L0295    leax  >L001A,pcr
         stx   <u000A
         ldb   <u001B
         bitb  #$C0
         bne   L02B9
         ldb   <u0046
         beq   L02AB
         leax  >L0076,pcr
         bra   L02B9
L02AB    leax  >L0020,pcr
         stx   <u000A
         tst   <u0010
         beq   L02B9
         leax  >L0049,pcr
L02B9    stx   <u000C
         clra  
         ldb   <u0012
         tfr   d,y
         clrb  
         ldx   <u0013
         bsr   L0303
         exg   d,x
         subd  #$0001
         bcc   L02CE
         leax  -$01,x
L02CE    exg   d,x
         ldy   <u0017
         bsr   L0303
         exg   d,x
         addd  <u0019
         std   <u0023
         exg   d,x
         adcb  #$00
         stb   <u0022
         lda   #$08
         pshs  a
         ldx   <u0023
         ldb   <u0022
         bsr   L034C
         lda   <ClustSz
         pshs  a
         bsr   L034C
         tstb  
         beq   L02FE
         leax  >ClustMsg,pcr
         lbsr  L0272
         lbra  L0528
L02FE    leas  $02,s
         stx   <u0026
         rts   
L0303    lda   #$08
L0305    clr   ,-s
         deca  
         bne   L0305
         sty   ,s
         stb   $02,s
         stx   $03,s
L0311    ldd   ,s
         beq   L0334
         lsra  
         rorb  
         std   ,s
         bcc   L0327
         ldd   $03,s
         addd  $06,s
         std   $06,s
         lda   $02,s
         adca  $05,s
         sta   $05,s
L0327    ldd   $03,s
         lslb  
         rola  
         std   $03,s
         lda   $02,s
         rola  
         sta   $02,s
         bra   L0311
L0334    leas  $05,s
         puls  pc,x,b
L0338    pshs  x,b
         lsr   ,s
         ror   $01,s
         ror   $02,s
         puls  x,b
         exg   d,x
         adcb  #$00
         adca  #$00
         exg   d,x
         adcb  #$00
L034C    lsr   $02,s
         bne   L0338
         rts   

AskBoth  tst   <u001B
         bpl   L036B
         leax  >Both,pcr
         ldy   #BothLen
         lbsr  GetYN
         anda  #$DF
         cmpa  #'Y
         beq   L036B
         cmpa  #'N
         bne   AskBoth
         rts   

L036B    lda   <PathNm
         ldb   #SS.Reset
         os9   I$SetStt 
         lbcs  Exit
         ldd   #$0000
         std   <u0003
         inca  
         sta   <u0007
L037E    clr   <u0005
L0380    bsr   L03DA
         leax  >u00AF,u
         ldu   <u0003
         clrb  
         tst   <u0010
         beq   L039B
         tst   <u0046
         bne   L0399
         tst   <u0004
         bne   L0399
         tst   <u0005
         beq   L039B
L0399    orb   #$02
L039B    tst   <u0011
         beq   L03A1
         orb   #$04
L03A1    lda   <u0005
         beq   L03A7
         orb   #$01
L03A7    tfr   d,y
         lda   <PathNm
         ldb   #SS.WTrk
         os9   I$SetStt 
         lbcs  Exit
         ldu   <u0000
         ldb   <u0005
         incb  
         stb   <u0005
         cmpb  <u0012
         bcs   L0380
         ldd   <u0003
         addd  #$0001
         std   <u0003
         cmpd  <u0013
         bcs   L037E
         rts   
L03CC    ldy   <u000E
L03CF    ldd   ,y++
         beq   L03E9
L03D3    stb   ,x+
         deca  
         bne   L03D3
         bra   L03CF
L03DA    lda   <u001B
         bita  #$C0
         beq   L03EA
         ldy   <u000C
         leax  >u00AF,u
         bsr   L03CF
L03E9    rts   
L03EA    ldy   <u000C
         ldb   <u0018
         tst   <u0046
         bne   L0400
         tst   <u0004
         bne   L0400
         tst   <u0005
         bne   L0400
         ldy   <u000A
         ldb   <u001A
L0400    sty   <u000E
         stb   <u0009
         stb   <u0016
         bsr   L0466
         leax  >u00AF,u
         bsr   L03CF
         sty   <u000E
L0412    bsr   L03CC
         dec   <u0009
         bne   L0412
         lda   ,y+
         sty   <u000E
         stx   <u003B
         leay  >u2976,u
         sty   <u001D
         tfr   a,b
L0428    std   ,x++
         cmpx  <u001D
         bcs   L0428
         ldy   <u000E
         ldd   ,y++
         std   <u003D
         ldd   ,y
         std   <u003F
         clr   <u0009
         leax  >u00AF,u
         ldd   <u003D
         leay  >u0087,u
L0445    leax  d,x
         ldd   <u0004
         std   ,x
         ldb   <u0009
         lda   b,y
         incb  
         stb   <u0009
         ldb   <u0007
         tst   <u0046
         beq   L0459
         inca  
L0459    std   $02,x
         lda   <u0009
         cmpa  <u0016
         bcc   L0465
         ldd   <u003F
         bra   L0445
L0465    rts   
L0466    pshs  y,b
         tfr   b,a
         ldb   <u0004
         cmpb  #$01
         bhi   L0492
         leax  >u0087,u
         leay  a,x
         ldb   <u001F
         bne   L0481
L047A    leax  >Abort,pcr
         lbra  L0676
L0481    cmpb  <u0016
         bhi   L047A
         nega  
         pshs  y,x,b,a
         clra  
L0489    sta   ,x
         inca  
         cmpa  <u0016
         bne   L0494
         leas  $06,s
L0492    puls  pc,y,b
L0494    ldb   <u001F
         abx   
         cmpx  $04,s
         bcs   L049F
         ldb   ,s
         leax  b,x
L049F    cmpx  $02,s
         bne   L0489
         leax  $01,x
         stx   $02,s
         bra   L0489
L04A9    lbsr  L081B
         ldd   <u0023
         std   $01,x     DD.TOT+1
         ldb   <u0022
         stb   ,x        DD.TOT?
         ldd   <u0017
         std   <$11,x    DD.SPT?
         stb   $03,x     DD.TKS?
         lda   <ClustSz
         sta   $07,x     DD.BIT+1
         clra  
         ldb   <u0026
         tst   <u0027
         beq   L04C9
         addd  #$0001
L04C9    addd  #$0001
         addd  #$0010
         std   $09,x   DD.DIR?
         clra  
         tst   <u0010
         beq   L04D8
         ora   #$02
L04D8    ldb   <u0012
         cmpb  #$01
         beq   L04E0
         ora   #$01
L04E0    tst   <u0011
         beq   L04E6
         ora   #$04
L04E6    sta   <$10,x    DD.FMT?
         ldd   <u0026
         std   $04,x
         lda   #$FF
         sta   $0D,x     Is FF always put in DD.ATT?
         leax  >DateBf,u
         os9   F$Time   
         leax  >u00CE,u
         leay  <u0067,u
         tst   ,y
         beq   L050B
L0503    lda   ,y+
         sta   ,x+
         bpl   L0503
         bra   L053E
L050B    leax  >DName,pcr
         ldy   #DNameLen
         lbsr  L0276
         leax  >u00CE,u
         ldy   #$0021
         clra  
         os9   I$ReadLn 
         bcc   L052F
         cmpa  #E$EOF
         bne   L050B
L0528    leax  >Aborted,pcr
         lbra  L0676
L052F    tfr   y,d
         leax  d,x
         clr   ,-x
         decb  
         beq   L050B
         lda   ,-x
         ora   #$80
         sta   ,x
L053E    leax  >DateBf,u
         leay  <$40,x
         pshs  y
         ldd   #$0000
L054A    addd  ,x++
         cmpx  ,s
         bcs   L054A
         leas  $02,s
         std   >u00BD,u
         ldd   >L0014,pcr
         std   >u019F,u
         ldd   >L0016,pcr
         std   >u01A1,u
         ldd   >L0018,pcr
         std   >u01A3,u
         lda   <PathNm
         ldb   #SS.Opt
         leax  >u00EE,u
         os9   I$GetStt 
         ldb   #SS.Reset
         os9   I$SetStt 
         lbcs  Exit
         leax  >u00AF,u
         lbra  L0827
L0589    lda   <PathNm
         os9   I$Close  
         leax  <DevPath,u
         lda   #READ.
         os9   I$Open   
         lbcs  L0672
         sta   <PathNm
         leax  >u00AF,u
         ldy   #$0100
         os9   I$Read   
         lbcs  L0672
         lda   <PathNm
         os9   I$Close  
         leax  <DevPath,u
         lda   #UPDAT.
         os9   I$Open   
         lbcs  L0672
         sta   <PathNm
         rts   
L05BF    lda   <u001B
         clr   <u0043
         bita  #$80
         beq   L05DE
L05C7    leax  >Verify,pcr
         ldy   #VerifyLen
         lbsr  GetYN
         anda  #$DF
         cmpa  #'Y
         beq   L05DE
         cmpa  #'N
         bne   L05C7

         sta   <u0043
L05DE    ldd   <u0019
         std   <u0015
         clra  
         clrb  
         std   <u0034
         std   <u0003
         std   <u0008
         std   <u0030
         stb   <u002F
         sta   <u003A
         leax  >DDBuf,u
         stx   <u0036
         lbsr  L081F
         leax  >$0100,x
         stx   <u0038
         clra  
         ldb   #$01
         std   <u0032
         lda   <ClustSz
         sta   <u0029
         clr   <u0028
         clra  
         ldb   <u0026
         tst   <u0027
         beq   L0614
         addd  #$0001
L0614    addd  #$0009
         addd  #$0010
         std   <u002B
         lda   <ClustSz
L061E    lsra  
         bcs   L062F
         lsr   <u002B
         ror   <u002C
         bcc   L061E
         inc   <u002C
         bne   L061E
         inc   <u002B
         bra   L061E
L062F    ldb   <u002C
         stb   <u002D
         lda   <ClustSz
         mul   
         std   <u002B
         subd  #$0001
         subb  <u0026
         sbca  #$00
         subd  #$0010
         tst   <u0027
         beq   L0649
         subd  #$0001
L0649    stb   <u002A
L064B    tst   <u0043
         bne   L067D
         lda   <PathNm
         leax  >u00AF,u
         ldy   #$0100
         os9   I$Read   
         bcc   L067D
         os9   F$PErr   
         lbsr  L084B
         lda   #$FF
         sta   <u0028
         tst   <u002F
         bne   L067D
         ldx   <u0030
         cmpx  <u002B
         bhi   L067D
L0672    leax  >BadSect,pcr
L0676    lbsr  L0272
         clrb  
         lbra  Exit
L067D    ldd   <u0008
         addd  #$0001
         std   <u0008
         cmpd  <u0015
         bcs   L06C2
         clr   <u0008
         clr   <u0009
         tst   <u0043
         bne   L06B7
         lda   #$20
         pshs  a
         lda   <u0004
         lbsr  L0724
         pshs  b,a
         lda   <u0003
         lbsr  L0724
         pshs  b
         tfr   s,x
         ldy   #$0004
         lbsr  L0276
         lda   $02,s
         cmpa  #$46
         bne   L06B5
         lbsr  L026E
L06B5    leas  $04,s
L06B7    ldd   <u0003
         addd  #$0001
         std   <u0003
         ldd   <u0017
         std   <u0015
L06C2    dec   <u0029
         bne   L06D8
         bsr   L0701
         tst   <u0028
         bne   L06D2
         ldx   <u0034
         leax  $01,x
         stx   <u0034
L06D2    clr   <u0028
         lda   <ClustSz
         sta   <u0029
L06D8    ldb   <u002F
         ldx   <u0030
         leax  $01,x
         bne   L06E1
         incb  
L06E1    cmpb  <u0022
         bcs   L06E9
         cmpx  <u0023
         bcc   L06F0
L06E9    stb   <u002F
         stx   <u0030
         lbra  L064B
L06F0    lda   #$FF
         sta   <u0028
         leay  >DDBuf,u
L06F8    cmpy  <u0036
         beq   L073C
         bsr   L0701
         bra   L06F8
L0701    ldx   <u0036
         lda   <u0028
         rora  
         rol   ,x+
         inc   <u003A
         lda   <u003A
         cmpa  #$08
         bcs   L0723
         clr   <u003A
         stx   <u0036
         cmpx  <u0038
         bne   L0723
         bsr   L0780
         leax  >DDBuf,u
         stx   <u0036
         lbsr  L081F
L0723    rts   
L0724    tfr   a,b
         lsra  
         lsra  
         lsra  
         lsra  
         andb  #$0F
         addd  #$3030
         cmpa  #$39
         bls   L0735
         adda  #$07
L0735    cmpb  #$39
         bls   L073B
         addb  #$07
L073B    rts   
L073C    lbsr  L026E
         leax  >NumGood,pcr
         ldy   #NumGoodLen
         lbsr  L0276
         ldb   <ClustSz
         clra  
         ldx   <u0034
         pshs  x,a
L0751    lsrb  
         bcs   L075C
         lsl   $02,s
         rol   $01,s
         rol   ,s
         bra   L0751
L075C    puls  x,a
         ldb   #$0D
         pshs  b
         tfr   d,y
         tfr   x,d
         tfr   b,a
         bsr   L0724
         pshs  b,a
         tfr   x,d
         bsr   L0724
         pshs  b,a
         tfr   y,d
         bsr   L0724
         pshs  b,a
         tfr   s,x
         lbsr  L0272
         leas  $07,s
         rts   
L0780    pshs  y
         clra  
         ldb   #$01
         cmpd  <u0032
         bne   L079B
         leax  >DDBuf,u
         clra  
         ldb   <u002D
         tfr   d,y
         clrb  
         os9   F$AllBit 
         lbcs  L0672
L079B    lbsr  L0835
         leax  >DDBuf,u
         lbsr  L0827
         ldd   <u0022
         cmpd  <u002F
         bcs   L07B7
         bhi   L07B4
         ldb   <u0024
         cmpb  <u0031
         bcc   L07B7
L07B4    lbsr  L084B
L07B7    ldd   <u0032
         addd  #$0001
         std   <u0032
         puls  pc,y
L07C0    ldd   #$0010
         addd  <u0032
         std   <u0032
         bsr   L0835
         leax  >u02AF,u
         bsr   L081F
         leax  >u02B2,u
         os9   F$Time   
         leax  >u02AF,u
         lda   #$BF
         sta   ,x
         lda   #$02
         sta   $08,x
         clra  
         ldb   #$40
         std   $0B,x
         ldb   <u002A
         decb  
         stb   <$14,x
         ldd   <u0032
         addd  #$0001
         std   <$11,x
         bsr   L0827
         bsr   L081B
         ldd   #$2EAE
         std   ,x
         stb   <$20,x
         ldd   <u0032
         std   <$1E,x
         std   <$3E,x
         bsr   L0827
         bsr   L081B
         ldb   <u002A
L080F    decb  
         bne   L0813
         rts   
L0813    pshs  b
         bsr   L0827
         puls  b
         bra   L080F
L081B    leax  >u00AF,u
L081F    clra  
         clrb  
L0821    sta   d,x
         decb  
         bne   L0821
         rts   
L0827    lda   <PathNm
         ldy   #$0100
         os9   I$Write  
         lbcs  Exit
         rts   
L0835    clra  
         ldb   <u0032
         tfr   d,x
         lda   <u0033
         clrb  
         tfr   d,u
L083F    lda   <PathNm
         os9   I$Seek   
         ldu   <u0000
         lbcs  Exit
         rts   
L084B    ldx   <u002F
         lda   <u0031
         clrb  
         addd  #$0100
         tfr   d,u
         bcc   L083F
         leax  $01,x
         bra   L083F
         ldd   ,y
         leau  >u00AF,u
         leax  >L08A3,pcr
         ldy   #$2F20
L0869    leay  >$0100,y
         subd  ,x
         bcc   L0869
         addd  ,x++
         pshs  b,a
         ldd   ,x
         tfr   y,d
         beq   L0891
         ldy   #$2F30
         cmpd  #$3020
         bne   L088B
         ldy   #$2F20
         tfr   b,a
L088B    sta   ,u+
         puls  b,a
         bra   L0869
L0891    sta   ,u+
         lda   #$0D
         sta   ,u
         ldu   <u0000
         leas  $02,s
         leax  >u00AF,u
         lbsr  L0272
         rts   
L08A3
         fdb   $2710,$03e8,$0064,$000a,$0001,$0000

L08AF    ldd   #$0000
L08B2    bsr   L08C2
         bcs   L08BC
         bne   L08B2
         std   <u001D
         bne   L08C1
L08BC    ldd   #$0001
         std   <u001D
L08C1    rts   
L08C2    pshs  y,b,a
         ldb   ,x+
         subb  #$30
         cmpb  #$0A
         bcc   L08E0
         lda   #$00
         ldy   #$000A
L08D2    addd  ,s
         bcs   L08DE
         leay  -$01,y
         bne   L08D2
         std   ,s
         andcc #^Zero
L08DE    puls  pc,y,b,a
L08E0    orcc  #Zero
         puls  pc,y,b,a

ErrExit  lda   #$02
         os9   F$PErr   
         leax  <HelpMsg,pcr
         ldy   #$0154
         lda   #$02
         os9   I$WritLn 
         clrb  
         os9   F$Exit   

Title    fcb   C$LF
         fcc   "DRAGON FORMAT UTILITY"
HelpCR   fcb   C$CR
HelpMsg  fcc   "Use: FORMAT /devname <opts>"
         fcb   C$LF
         fcc   "  opts: R  - Ready"
         fcb   C$LF
         fcc   /        "disk name"/
         fcb   C$LF,C$CR
FmtMsg   fcc   "Formatting drive "
FmtMLen  equ   *-FmtMsg

Query    fcc   "y (yes) or n (no)"
         fcb   C$LF
         fcc   "Ready?  "
QueryLen equ   *-Query

Abort    fcc   "ABORT Interleave value out of range"
         fcb   C$CR
DName    fcc   "Disk name: "
DNameLen equ   *-DName
         fcc   "How many Cylinders (Tracks?) : "
BadSect  fcc   "Bad system sector, "
Aborted   fcc   "FORMAT ABORTED"
         fcb   C$CR
ClustMsg fcc   "Cluster size mismatch"
         fcb   C$CR
         fcc   "Double density? "
TPIChg   fcc   "Change from 96tpi to 48tpi? "
DSided   fcc   "Double sided? "
NumGood  fcc   "Number of good sectors: $"
NumGoodLen equ *-NumGood
Both     fcc   "Both PHYSICAL and LOGICAL format? "
BothLen  equ   *-Both
Verify   fcc   "Physical Verify desired? "
VerifyLen equ  *-Verify

         emod
eom      equ   *
         end