execbase = 4
putmsg = -366
getmsg = -372
findname = -276
wait = -318
qblit = -276
header = $ff150802

run:
 move.l  execbase,a6          ;Zeiger auf Execbase
 lea     trdname,a1           ;Zeiger auf Device-Name
 lea     350(a6),a0           ;Zeiger auf Device-List
 jsr     findname(a6)         ;Device finden
 tst.l   d0                   ;gefunden ?
 beq     notfound             ;Nein, ende
 move.l  276(a6),a0           ;Zeiger auf eigenen Task
 move.l  d0,a6                ;Device-Struktur in A6
 move.l  36(a6),a3            ;Zeiger auf Laufwerk-Port (df0:)
 lea     174(a3),a1           ;Adresse des Reply-Ports
 move.l  16(a1),-(a7)         ;Zeiger auf Empfänger-Task retten
 move.l  a1,-(a7)             ;Reply-Port retten
 move.l  a0,16(a1)            ;eigenen Task als Empfänger eintragen
 bset    #0,34(a3)            ;Trackdisk-Task auf Warteposition setzen

 move.l  #track,d0            ;Tracknummer in D0
 move.w  d0,74(a3)            ;in Laufwerks-Port eintragen
 move.l  78(a3),a2            ;Zeiger auf Load Puffer
 move.w  d0,(a2)              ;Tracknummer eintragen
 bclr    #0,2(a2)             ;Bit 0 des nächsten Wortes löschen
 clr.b   66(a3)               ;Fehleranzahl auf Null
 jsr     readtrack            ;Track lesen
 clr.l   d0                   ;Wert fÜr Motor aus
 jsr     motorschalten        ;Motor ausschalten
 move.b  3(a2),d0             ;erste Blocknummer in D0
 cmp.b   #11,d0               ;Blocknummer größer als 11?
 bcc     ende                 ;Ja, Fehler
 move.b  #11,d6               ;Sektoranzahl
 clr.l   d0                   ;erster Block = Null
 sub.b   3(a2),d0             ;erste Blocknummer abziehen
 bpl     nummerpositiv        ;Ist Blocknummer positiv?
 add.b   #11,d0               ;Ja, dann positiv machen
nummerpositiv:
 mulu    #1088,d0             ;Anzahl Bytes pro Block
 lea     1664(a2),a4          ;Zeiger auf Datenanfang
 adda.l  d0,a4                ;Zeiger auf Block 0
 lea     ziel,a5              ;Zeiger auf Ziel
 clr.l   d7                   ;Anfang bei Sektor 0
blockloop:
 lea     64(a4),a1            ;Zeiger auf Datenblock
 move.l  a5,a0                ;Ziel nach A0
 move.l  #512,d0              ;Anzahl zu decodierender Bytes
 jsr     decodeblock          ;Daten eines Blocks decodieren
 adda.l  #512,a5              ;Zeiger auf Ziel erhöhen
 sub.b   #1,d6                ;Anzahl der Blöcke verringern
 beq     ende                 ;Alle 11 Sektoren
 add.b   #1,d7                ;Nächster Block
 cmp.b   3(a2),d7             ;am Pufferanfang weitermachen?
 bne     normal               ;Nein, normal weitermachen
 lea     1664(a2),a4          ;sonst neuer Zeiger auf Pufferanfang
 bra     blockloop            ;restlichen Blöcke decodieren
normal:
 add.l   #1088,a4             ;Zeigt auf nächsten Block
 bra     blockloop            ;restlichen Blöcke decodieren
ende:
 bclr    #0,34(a3)            ;Trackdisk-Task wieder freigeben
 move.l  (a7)+,a1             ;Reply-Port zurÜckholen
 move.l  (a7)+,16(a1)         ;alten Empfängertask wieder eintragen
fehler:
 rts                          ;Programmende
