eXec.plMAGAZYN UŻYTKOWNIKÓW KOMPUTERÓW AMIGA
MAGAZYN UŻYTKOWNIKÓW KOMPUTERÓW AMIGA

niedziela, 21. lipca, 2019, 02:26

Amiga forum / AmigaOS 2.x i starsze / Amiga i przerwania !!!

Czytasz wątek: Amiga i przerwania !!!

68k_tester
Nieaktywny użytkownik starego forum

Amiga i przerwania !!! wysłany: 2009-04-27 20:06

Oto maksymalnie uproszczony przykład podpinania własnej procedury
pod określone przerwanie komputera Amiga

W tym przypadku chodzi o przewanie wywoływane w chwili kiedy
bufor portu serial (RS232) otrzymał nowy bajt danej.

Problem:

Ten przykładowy programik nie działa czemu???


Oto program:

;-------------------------------------------------------

;CPU: MC 68000
;System: Amiga 500 OS v1.3 Kickstart (v34)
;Assembler: DevPac v3.02 (HiSoft)



Exec: equ 4
AddIntServer: equ -168
RemIntServer: equ -174


;Lista przerwań

INTB_TBE = 0
INTB_DSKBLK = 1
INTB_SOFTINT = 2
INTB_PORTS = 3
INTB_COPER = 4
INTB_VERTB = 5
INTB_BLIT = 6
INTB_AUD2 = 7
INTB_AUD0 = 8
INTB_AUD3 = 9
INTB_AUD1 = 10
INTB_RBF = 11
INTB_DSKSYNC = 12
INTB_EXTER = 13
INTB_INTEN = 14




;Teraz podpinamy procedure obsługi przerwania i oczekujemy
;na klawisz 'Esc' po którym usuwamy dodaną procedurę i wychodzimy.

Start: move.l 4,a6
move.l #INTB_RBF,d0
move.l #Interrupt_RBF,a1
jsr AddIntServer(a6)

Wait_Key_Esc: cmp.b #$75,$BFEC01 ;Sprawdzamy stan klawisza 'ESC'
bne.s Wait_Key_Esc

move.l 4,a6
move.l #INTB_RBF,d0
move.l #Interrupt_RBF,a1
jsr RemIntServer(a6)
moveq #0,d0
rts



;Struktura "Interrupt" definująca dodawaną procedurę.

Interrupt_RBF: dc.l 0 ;ln_Succ
dc.l 0 ;ln_Pred
dc.b 2 ;ln_Type - dla Node typu Intterupt
dc.b 0 ;ln_Pri
dc.l Int_RBF_NAME ;ln_Name - adres do nazwy naszej procedury
dc.l 0 ;is_Data
dc.l Int_RBF_CODE ;is_Code - adres do procedury przerwania

Int_RBF_NAME: dc.b 'Test przerwania RS232',0

;Tutaj procedura wykonywana w chwili przyjęcia przerwania.

Int_RBF_CODE: movem.l d0-a6,-(sp)

bchg.b #1,$BFE001 ;Zmieniamy stan diody PowerLED na przeciwny.

movem.l (sp)+,d0-a6
rts ;z takiej systemowej procedury przerwania
;wychodzimy zwykłym rozkazem RTS

;---------------------------------------------------------

Odpowiedz

AmigaOS.pl