;*******************************
;
;  Interrupt demo a
;  GURU -tól           `Gaborca
;
;*******************************
;
;Ez a kis program megmutatja hogyan lehet ROM rutinok meghívása nélkül
;interrupt-ra kötni saját rutinunkat, Úgy hogy az minden gépen fusson!
;Intrók számára különösen ajánlott!
;
;*******************************

        move.w  #$4000,$dff09a          ;Interruptok kikapcsolása
        move.l  $6c,OldVector           ;régi Interrupt vektor eltárolása
        move.l  #IRQRout,$6c            ;új Vektor beállítása
        move.w  #$c000,$dff09a          ;Interruptok bekapcsolása

;*******************************
;Itt kell állnia a saját programodnak, amely alatt a saját interruptod fog
;élni. Ennek a végén vissza kell állítani az elmentett interruptot.
;*******************************

wait:   btst    #6,$bfe001              ;Várj az egérre
        bne     wait                    ;most ez a program

        move.w  #$4000,$dff09a          ;Interruptok letiltása
        move.l  OldVector,$6c           ;régi Interrupt vektor vissza
        move.w  $c000,$dff09a           ;Interruptok engedélyezése
        rts                             ;visszatéres, program vége

IRQRout:movem.l d0-d2/a0-a1,-(a7)       ;Regiszterek eltárolása
        move    SR,-(sp)                ;Statuszregiszter eltárolása

;*******************************
;  Ide kerüljön a programod ami minden egyes interruptkor végrehajtásra
;  kerül majd.  Ez a hely most üres.
;*******************************

EndIRQ: move    (sp)+,SR                ;Statuszregiszter vissza
        movem.l (sp)+,d0-d2/a0-a1       ;Regiszterek vissza
        dc.w    $4ef9                   ;Interrupt vége

OldVector:
        dc.l    $0000

;*******************************
; Amint láthatjátok a trükk a program végén bújik meg:
; Az OldVector tárolási helye egyben egy direkt ugrás utasítás cím
; argumentuma is. Így minden saját interrupt után a vezérlés átadódik
; a régi interruptra így próbálván elérni azt, hogy a rendszerszofver
; maradéka ne omoljon össze intrónk futása alatt.
;*******************************
