add a routine to set interrupt level from C
This commit is contained in:
@@ -1001,3 +1001,29 @@ video_chg_end:
|
|||||||
lea 7 * 4(sp),a7
|
lea 7 * 4(sp),a7
|
||||||
rte
|
rte
|
||||||
|
|
||||||
|
|
||||||
|
asm_set_ipl:
|
||||||
|
_asm_set_ipl:
|
||||||
|
link a6,#-8 // some space for locals
|
||||||
|
movem.l d6-d7,(sp) // save register
|
||||||
|
move.w sr,d7 // current sr
|
||||||
|
|
||||||
|
move.l d7,d0 // prepare return value
|
||||||
|
andi.l #0x0700,d0 // maks out ipl bits
|
||||||
|
lsr.l #8,d0 // IPL
|
||||||
|
|
||||||
|
move.l 8(a6),d6 // get argument
|
||||||
|
andi.l #0x07,d6 // least significant three bits
|
||||||
|
lsl.l #8,d6 // shift to make mask
|
||||||
|
|
||||||
|
andi.l #0x0000f8ff,d7 // zero out current ipl
|
||||||
|
or.l d6,d7 // place new ipl in sr
|
||||||
|
move.w d7,sr
|
||||||
|
|
||||||
|
movem.l (sp),d6-d7 // restore registers
|
||||||
|
lea 8(sp),sp // clear local variables
|
||||||
|
unlk a6
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user