2 Copyright © 2010, The AROS Development Team. All rights reserved.
5 Desc: AddICRVector() function.
9 #include <exec/interrupts.h>
10 #include <proto/cia.h>
11 #include <proto/exec.h>
13 #include "cia_intern.h"
15 AROS_LH2(struct Interrupt
*, AddICRVector
,
16 AROS_LHA(LONG
, iCRBit
, D0
),
17 AROS_LHA(struct Interrupt
*, interrupt
, A1
),
18 struct Library
*, resource
, 1, Cia
)
22 struct CIABase
*CiaBase
= (struct CIABase
*)resource
;
23 struct Interrupt
*old
;
26 /* Hack. Was called by timer.device, see below */
27 CiaBase
->hook_func
= (void(*)(APTR
, APTR
, WORD
))interrupt
->is_Code
;
28 CiaBase
->hook_data
= interrupt
->is_Data
;
32 /* 68k lowlevel library calls have garbage in upper word */
33 iCRBit
= (WORD
)iCRBit
;
35 old
= CiaBase
->Vectors
[iCRBit
];
37 /* timer.device move out of our way hack.
38 * Check timer.device for details
40 if (CiaBase
->hook_func
) {
41 void (*hook
)(APTR
, APTR
, WORD
) = CiaBase
->hook_func
;
42 CiaBase
->hook_func
= NULL
;
43 hook(CiaBase
, CiaBase
->hook_data
, iCRBit
);
44 CiaBase
->hook_func
= hook
;
45 old
= CiaBase
->Vectors
[iCRBit
];
49 CiaBase
->Vectors
[iCRBit
] = interrupt
;
50 AbleICR(resource
, 0x80 | (1 << iCRBit
));