execbase = 4
findname = -276
track = 20
adresse = $50000

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  #1,d0                ;Wert fÜr Motor ein
 jsr     motorschalten        ;Motor einschalten
 move.l  #track,d2            ;Tracknummer nach D2
 move.l  d2,d0                ;Tracknummer nach D0 kopieren
 jsr     movehead             ;Kopf positionieren
 lea     adresse,a5           ;Zeiger auf Startadresse der zu schreibenden
                              ;Daten
 move.l  82(a3),a2            ;Zeiger auf Schreibpuffer
 lea     4(a2),a2
 move.w  #$fff,d0             ;Zählwert
 move.l  #$aaaaaaaa,d1        ;Wert fÜr Löschen
loesche:
 move.l  d1,(a2)+             ;aktuelles Langwort löschen
 dbra    d0,loesche           ;den ganzen Schreibpuffer
 move.l  82(a3),a2            ;Zeiger auf Schreibpuffer
 lea     1664(a2),a2          ;Zeiger auf Anfang der Daten
 moveq   #11,d4               ;Anzahl der Blöcke
 moveq   #0,d5                ;D5 als Blockzähler
makeblock:
 move.l  #$ff000000,d0        ;Format-Kennung des Headers
 move.l  d5,d1                ;Blocknummer nach D1
 lsl.l   #8,d1                ;Nummer auf richtige Position schieben
 or.l    d1,d0                ;in Header eintragen
 or.l    d4,d0                ;Anzahl der Blöcke bis zur LÜcke eintragen
 move.l  d2,d1                ;Tracknummer nach D1
 swap    d1                   ;Nummer in richtige Position bringen
 or.l    d1,d0                ;und in Header eintragen
 move.l  a2,a1                ;Schreibpuffer nach A1
 move.l  a5,a0                ;Zeiger auf Daten nach A0
 jsr     blockcodierung       ;Daten codieren und in Schreibpuffer schreiben
 addq.l  #1,d5                ;Blockzähler erhöhen
 adda.l  #1088,a2             ;Zeiger auf nächsten Block im Schreibpuffer
 adda.l  #512,a5              ;Zeiger auf nächsten Datenteil
 subq.l  #1,d4                ;Anzahl der Blöcke verringern
 bne     makeblock            ;den ganzen Track durch
 move.l  82(a3),a0            ;Zeiger auf Schreibpuffer
 lea     4(a0),a0
 move.w  #13630,d0            ;Anzahl zu schreibender Bytes
 jsr     writetrack           ;Track schreiben
 moveq   #0,d0                ;Wert fÜr Motor aus
 jsr     motorschalten        ;Motor ausschalten

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

name: dc.b "trackdisk.device",0
