execbase = 4
findtask = -294
addport = -354
remport = -360
opendevice = -444
closedevice = -450
doio = -456
openlib = -408
closelib = -414
write = -48
output = -60

run:
 move.l execbase,a6       ;Zeiger auf Exec-Basisadresse
 sub.l  a1,a1             ;0 als Argument => eigener Task
 jsr    findtask(a6)      ;Eigenen Task suchen
 move.l d0,replyport+16   ;Task als Empfänger in MsgPort eintragen

 lea    replyport,a1      ;Zeiger auf Reply-Port
 jsr    addport(a6)       ;Reply-Port in globale Liste eintragen

 lea    diskio,a1         ;Zeiger auf IOStdReq-Struktur
 move.l #replyport,14(a1) ;Reply-Port in Message eintragen
 move.l #0,d0             ;Laufwerksnummer (hier df0:)
 clr.l  d1                ;keine Flags
 lea    trdname,a0        ;Zeiger auf Devicename
 jsr    opendevice(a6)    ;Trackdisk-Device öffnen
 tst.l  d0                ;Fehler?
 bne    error             ;Ja! Programm beenden

 lea    dosname,a1        ;Zeiger auf Libraryname
 jsr    openlib(a6)       ;Dos-Library öffnen
 move.l d0,dosbase        ;Dos-Basisadresse speichern
 move.l d0,a6             ;Dos-Basisadresse in A6
 jsr    output(a6)        ;Handle des CLI-Fensters ermittels
 move.l d0,handle         ;und speichern
 move.l execbase,a6       ;A6 wieder auf ExecBase zeigen lassen

 lea    diskio,a1         ;Zeiger auf IOStdReq-Struktur
 move   #19,28(a1)        ;Kommando: GETNUMTRACKS
 jsr    doio(a6)          ;Kommando ausfÜhren
 cmp.l  #$a0,32(a1)       ;160 Tracks (normaler Wert)?
 bne    extratracks       ;Nein, Trackzahl <> 160
 move.l #normtext,d2      ;Adresse des Textes
 move.l #43,d3            ;Länge des Textes in Zeichen
 jmp    marke             ;folgenden Abschnitt Überspringen
extratracks:
 move.l #extratext,d2     ;Adresse des Textes
 move.l #58,d3            ;Länge des Textes in Zeichen
marke:
 move.l dosbase,a6        ;Dos-Basisadresse
 move.l handle,d1         ;Handle des CLI-Fensters
 jsr    write(a6)         ;Text ausgeben
 move.l execbase,a6       ;A6 wieder auf ExecBase zeigen lassen

 lea    diskio,a1         ;Zeiger auf IOStdReq-Struktur
 move   #18,28(a1)        ;Kommando: GETDRIVETYPE
 jsr    doio(a6)          ;Befehl ausfÜhren
 cmp.l  #1,32(a1)         ;3.5 Zoll?
 bne    zoll5             ;Nein, 5.25 Zoll
 move.l #text35,d2        ;Adresse des Textes
 move.l #40,d3            ;Länge des Textes in Zeichen
 jmp    print             ;folgenden Abschnitt Überspringen
zoll5:
 move.l #text525,d2       ;Adresse des Textes
 move.l #41,d3            ;Länge des Textes in Zeichen
print:
 move.l dosbase,a6        ;Dos-Basisadresse
 move.l handle,d1         ;Handle des CLI-Fensters
 jsr    write(a6)         ;Text ausgeben
 move.l execbase,a6       ;A6 wieder auf ExecBase zeigen lassen

 lea    diskio,a1         ;Zeiger auf IOStdReq-Struktur
 move   #14,28(a1)        ;Kommando: CHANGESTATE
 jsr    doio(a6)          ;Befehl ausfÜhren
 cmp.l  #0,32(a1)         ;Diskette eingelegt?
 beq    diskok            ;Ja, dann verzweige
 move.l dosbase,a6        ;Dos-Basisadresse
 move.l handle,d1         ;Handle des CLI-Fensters
 move.l #nodisktext,d2    ;Adresse des Textes
 move.l #28,d3            ;Länge des Textes in Zeichen
 jsr    write(a6)         ;Text ausgeben
 jmp    ende              ;Programm beenden

diskok:
 move   #15,28(a1)        ;Kommando: PROTSTATUS
 jsr    doio(a6)          ;Befehl ausfÜhren
 cmp.l  #0,32(a1)         ;Diskette schreibgeschÜtzt?
 beq    ende              ;Nein, dann verzweige
 move.l dosbase,a6        ;Dos-Basisadresse
 move.l handle,d1         ;Handle des CLI-Fensters
 move.l #prottext,d2      ;Adresse des Textes
 move.l #31,d3            ;Länge des Textes in Zeichen
 jsr    write(a6)         ;Text ausgeben

ende:
 move.l execbase,a6       ;A6 wieder auf ExecBase zeigen lassen
 lea    replyport,a1      ;Zeiger auf Reply-Port
 jsr    remport(a6)       ;Msgport aus globaler Liste entfernen

 lea    diskio,a1         ;Zeiger auf IOStdReq-Struktur
 jsr    closedevice(a6)   ;Trackdisk-Device schließen

error:
 rts                      ;Programmende

trdname: dc.b "trackdisk.device",0
dosname: dc.b "dos.library",0
normtext: dc.b "Die Diskette hat 160 Tracks (80 Cylinder).",10
extratext: dc.b "Die Diskette hat nicht die normale Anzahl von "
           dc.b "160 Tracks!",10
text35: dc.b "Das Laufwerk ist ein 3.5 Zoll-Laufwerk.",10
text525: dc.b "Das Laufwerk ist ein 5.25 Zoll-Laufwerk.",10
nodisktext: dc.b "Keine Diskette im Laufwerk!",10
prottext: dc.b "Diskette ist schreibgeschÜtzt!",10
even
handle: dc.l 0
dosbase: dc.l 0
diskio: blk.l 20,0
replyport: blk.l 8,0
