execbase = 4
findtask = -294
addport = -354
remport = -360
opendevice = -444
closedevice = -450
doio = -456
copymem = -624

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   ;Unser Task als Empfänger eintragen

 lea    replyport,a1      ;Zeiger auf Reply-Port
 jsr    addport(a6)       ;MsgPort 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

 move   #2,28(a1)         ;Kommando: READ
 move.l #puffer1,40(a1)   ;Adresse des Puffers
 move.l #512,36(a1)       ;Länge: 1 Sektor
 move.l #880*512,44(a1)   ;Offset: 880 Sektoren
 jsr    doio(a6)          ;Sektor lesen
 move.l #puffer2,40(a1)   ;Adresse des 2. Puffers
 move.l #512,36(a1)       ;Länge: 1 Sektor
 move.l #881*512,44(a1)   ;Offset: 881 Sektoren
 jsr    doio(a6)          ;Sektor lesen

 move   #3,28(a1)         ;Kommando: WRITE
 move.l #puffer2,40(a1)   ;Adresse des 2. Puffers
 move.l #512,36(a1)       ;Länge: 1 Sektor
 move.l #880*512,44(a1)   ;Offset: 880 Sektoren
 jsr    doio(a6)          ;Sektor schreiben

;Block 881 steht nun an der Stelle, wo normalerweise Block 880 stehen
;sollte, jedoch nur im RAM und nicht auf der Diskette

 move   #5,28(a1)         ;Kommando: CLEAR
 jsr    doio(a6)          ;Trackpuffer ungÜltig machen

 move   #2,28(a1)         ;Kommando: READ
 move.l #puffer2,40(a1)   ;Adresse des 2. Puffers
 move.l #512,36(a1)       ;Länge: 1 Sektor
 move.l #881*512,44(a1)   ;Offset: 881 Sektoren
 jsr    doio(a6)          ;Trackpuffer neu einlesen

 lea    puffer1,a2        ;Zeiger auf 1. Puffer
 move.l 434(a2),d0        ;2. bis 5. Buchstabe des Disknamens in D0
 move.l 438(a2),434(a2)   ;6. bis 9. Buchstabe als 2. bis 5.
 move.l d0,438(a2)        ;2. bis 5. Buchstabe als 6. bis 9.

;Hier hat eine kleine Veränderung des Diskettennamens stattgefunden.
;Aus 'Kickstart' wÜrde z.B. 'Ktarticks' werden.

 move   #3,28(a1)         ;Kommando: WRITE
 move.l #puffer1,40(a1)   ;Adresse des 1. Puffers
 move.l #512,36(a1)       ;Länge: 1 Sektor
 move.l #880*512,44(a1)   ;Offset: 880 Sektoren
 jsr    doio(a6)          ;Sektor in Trackpuffer schreiben

 move   #4,28(a1)         ;Kommando: UPDATE
 jsr    doio(a6)          ;Trackpuffer zurÜckschreiben

 move   #2,28(a1)         ;Kommando: READ
 move.l #trackmem,40(a1)  ;Adresse eines eigenen Trackpuffers
 move.l #22*512,36(a1)    ;Länge: 22 Sektoren (1 Cylinder)
 move.l #3*22*512,44(a1)  ;Offset: 3 Cylinder
 jsr    doio(a6)          ;Cylinder lesen

 move   #11,28(a1)        ;Kommando: FORMAT
 move.l #trackmem,40(a1)  ;Adresse des eigenen Trackpuffers
 move.l #22*512,36(a1)    ;Länge: 1 Cylinder
 move.l #3*22*512,44(a1)  ;Offset: 3 Cylinder
 jsr    doio(a6)          ;Track 3 formatieren und zurÜckschreiben

 move   #9,28(a1)         ;Kommando: MOTOR
 move.l #0,36(a1)         ;Ausschalten
 jsr    doio(a6)          ;Motor ausschalten

 lea    replyport,a1      ;Zeiger auf Reply-Port
 jsr    remport(a6)       ;Reply-Port 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
even
diskio: blk.l 20,0
replyport: blk.l 8,0
puffer1: blk.b 512,0
puffer2: blk.b 512,0
trackmem: blk.b 22*512,0
