'
'                                 Q4mat V1.00
'                                ------------- 
'
'             written in AMOS V1.31 by Volker Stepprath 26/10/92 
'
'                       press left AMIGA+A to use Q4mat
'
'                      Q4mat V1.00 formats track 0 & 40 !
'                  This is enough to make new empty DOS disk ! 
'                        ( AND THAT IN AMOS !?! WOW ! )
'
N$=Upper$(Command Line$)
'
Global HANDLE
'
XOPEN
'
T$=Chr$($9B)+"32;43m"+"Q4mat V1.00 26/10/92 by Volker Stepprath"
T$=T$+Chr$($9B)+"0m"+Chr$(10)
'
If Len(N$)>0 and Asc(N$)<>63
  DISK$=N$
  N$=N$-"DF"
  UNIT=Val(N$)
  T$=T$+"Insert DOS disk to be formatted in drive "
  T$=T$+Chr$($9B)+"32;40m"+DISK$+Chr$($9B)+"0m !"+Chr$(10)
  T$=T$+"Press left mousebutton when ready:"
  XWRITE[T$]
  Repeat : Until Not Btst(6,$BFE001)
  XWRITE[Chr$(10)]
  If Exist(DISK$)
    _Q4MAT[UNIT]
  Else 
    XWRITE["No DOS disk in drive !"+Chr$(10)]
  End If 
Else 
  T$=T$+"Usage: Q4mat [DEVICE]"+Chr$(10)
  XWRITE[T$]
End If 
'
XCLOSE
'
'**** Track 0 & 40 formatieren ****
Procedure _Q4MAT[UNIT]
  '
  Reserve As Chip Data 2,11264
  '
  '**** Variablen & Adressen definieren **** 
  DISKREP$=Space$(40)+Chr$(0)
  DEVNAME$="trackdisk.device"+Chr$(0)
  IOREQ$=Space$(80)+Chr$(0)
  DISKREP=Varptr(DISKREP$)
  IOREQADR=Varptr(IOREQ$)
  '
  '**** Eigene Taskadresse suchen **** 
  Areg(0)=0
  Areg(1)=0
  Dreg(0)=0
  Dreg(1)=0
  XFINDTASK=Execall(-294)
  Loke DISKREP+$10,XFINDTASK
  '
  '**** Device öffnen **** 
  Areg(0)=Varptr(DEVNAME$)
  Areg(1)=IOREQADR
  Dreg(0)=UNIT
  Dreg(1)=0
  XOPENDEVICE=Execall(-444)
  '
  '**** Befehl aufrufen **** 
  Loke IOREQADR+14,DISKREP
  Loke IOREQADR+40,Start(2)
  Loke IOREQADR+36,11264
  '
  '**** BootBlock **** 
  For I=0 To 12
    Read N
    Loke Start(2)+I*4,N
  Next I
  TRACK=0
  Gosub _QFORMAT
  '
  '**** Root / BitMap **** 
  Erase 2
  Reserve As Chip Data 2,11264
  Loke IOREQADR+40,Start(2)
  N=Start(2)
  For I=$204 To $2DF
    Poke N+I,$FF
  Next I
  Doke N+2,$2
  Poke N+15,$48
  Loke N+20,$A661AEF3
  Doke N+$13A,$1
  Doke N+$13E,$371
  Poke N+$1B0,$5
  Poke N+$1B1,$45
  Poke N+$1B2,$4D
  Poke N+$1B3,$50
  Poke N+$1B4,$54
  Poke N+$1B5,$59
  Poke N+$1FF,$1
  Loke N+$200,$C000C037
  Poke N+$272,$3F
  Poke N+$2DC,$3F
  Loke IOREQADR+44,$6E000
  TRACK=40
  Gosub _QFORMAT
  Erase 2
  '
  '**** Motor ausschalten **** 
  Doke IOREQADR+28,9
  Loke IOREQADR+36,0
  XDOIO=Execall(-456)
  '
  '**** Device schließen ****
  XCLOSEDEVICE=Execall(-450)
  '
  Pop Proc
  '
  '**** Track formattieren ****
  _QFORMAT:
    Doke IOREQADR+28,11
    Loke IOREQADR+44,TRACK*11264
    XDOIO=Execall(-456)
  Return 
'
'**** BootBlockDaten ****
Data $444F5300,$C0200F19,$370,$43FA0018,$4EAEFFA0,$4A80670A
Data $20402068,$167000,$4E7570FF,$60FA646F,$732E6C69,$62726172,$79000000
End Proc
'
'**** Fensters/Datei öffnen **** 
Procedure XOPEN
  DATEI$="*"+Chr$(0)
  Dreg(1)=Varptr(DATEI$)
  Dreg(2)=1005
  HANDLE=Doscall(-30)
End Proc
'
'**** Text schreiben ****
Procedure XWRITE[T$]
  T$=T$+Chr$(0)
  Dreg(1)=HANDLE
  Dreg(2)=Varptr(T$)
  Dreg(3)=Len(T$)
  XWRITE=Doscall(-48)
End Proc
'
'**** Fensters/Datei schließen ****
Procedure XCLOSE
  Dreg(1)=HANDLE
  XCLOSE=Doscall(-36)
End Proc
