decodeblock:
;A0 zeigt auf den Bereich, in den die decodierten Daten geschrieben werden
;A1 zeigt auf den Bereich, in dem die zu decodierenden Daten stehen
;A3 zeigt auf den Laufwerks-Port
;A6 zeigt auf die Trackdisk-Device-Struktur
;D0 enthält die Anzahl zu decodierender Bytes
 link    a2,#-30                ;Platz fÜr QBLIT-Struktur schaffen
 movem.l a1/a0/d0,-22(a2)       ;Werte in Struktur eintragen
 lsl.w   #2,d0                  ;Wert fÜr
 or.l    #8,d0                  ;BLTSIZE berechnen
 move.w  d0,-10(a2)             ;und in Struktur eintragen
 move.l  #decoroutine1,-26(a2)  ;Zeiger auf Funktion eintragen
 move.l  a3,-4(a2)              ;Laufwerks-Port eintragen
 lea     -30(a2),a1             ;Zeiger auf Strukturanfang
 move.l  a6,-(a7)               ;A6 retten
 move.l  56(a6),a6              ;Zeiger auf GfxBase
 jsr     qblit(a6)              ;QBLIT-Funktion aufrufen
 move.l  (a7)+,a6               ;A6 zurÜckholen
 bsr     waitmessage            ;Auf Reply-Message warten
 movem.l -22(a2),a1/a0/d0       ;Register zurÜckholen
 unlk    a2                     ;Speicher der Struktur freigeben
 rts                            ;RÜcksprung

decoroutine1:
;Diese Funktion wird von der QBLIT-Funktion aufgerufen, wenn der Blitter
;frei ist.
;A0 zeigt auf $DFF000
;A1 zeigt auf die QBLIT-Struktur
;A6 zeigt auf die Trackdisk-Device-Struktur
 move.l  a5,-(a7)               ;A5 retten
 move.l  a1,a5                  ;Zeiger auf QBLIT-Struktur merken
 bsr     setmodulo              ;Blitter Parameter setzen
 move.l  a5,a1                  ;Zeiger auf Struktur holen
 movem.l 8(a1),a5/d1/d0         ;Zeiger auf Quelle, Ziel und Länge holen
 adda.l  d0,a5                  ;Endadresse der Quelle fÜr ungerade Bits
 subq.l  #1,a5                  ;weniger eins
 move.l  a5,80(a0)              ;BLTAPT
 adda.l  d0,a5                  ;Endadresse der geraden Bits
 move.l  a5,76(a0)              ;BLTBPT
 add.l   d0,d1                  ;Endadresse + Länge
 subq.l  #1,d1                  ;weniger eins
 move.l  d1,84(a0)              ;BLTDPT
 move.w  #$1dd8,64(a0)          ;Wert fÜr BLTCON0
                                 ;Verschiebung um 1 nach rechts fÜr A
                                 ;DMA-Bits fÜr A,B und D
                                 ;ABC+ABc+Abc+aBC als Minterm
 move.w  #2,66(a0)              ;Wert fÜr BLTCON1
                                 ;Descent-Mode
 move.w  20(a1),88(a0)          ;BLTSIZE beschreiben (Blitter starten)
 move.l  #decoroutine2,4(a1)    ;nächste Funktion setzen
 move.l  (a7)+,a5               ;A5 zurÜckholen
 rts                            ;RÜcksprung

decoroutine2:
 moveq   #0,d0                  ;D0 löschen
 move.l  d0,4(a1)               ;Zeiger auf Funktion löschen
 move.l  26(a1),a1              ;Zeiger auf Laufwerks-Port
 bsr     sendmessage            ;Message fÜr Ende senden
 moveq   #0,d0                  ;Keine weitere Funktion aufrufen
 rts                            ;RÜcksprung
