dillon@CORY.BERKELEY.EDU.UUCP (01/23/88)
:ReciISR()
:{
:abort = TRUE;
:}
:
: ...
: mp = (struct MsgPort *) CreateInterruptPort("intport", 0, ReciISR);
If you are using the small code model it will not work. If you
are using the large code model it still might not work. There are three
problems:
(1) The registers contain specific information and in no way reflect
the registers of the task/process. Therefore,
(2) The register used for the global base (small code model) does
not hold the proper value and thus the reference to 'abort'
will go to a random memory location.
(3) Certain registers must be saved and restored. For interrupt
service routines, D0/D1/A0/A1/A5/A6 are all scratch. Thus,
if Lattice does not save D2 and D3 (I don't have Lattice so I
don't know), they must be saved manually. I think Lattice does
save D2 and D3, in which case you only need to worry about (2).
-Matt