Welcome to Euroland
[AROS.git] / arch / m68k-all / exec / setsr.S
blobe84ca4bd198672d073629c902de1eeb8b562d410
1 /*
2     Copyright © 1995-2001, The AROS Development Team. All rights reserved.
3     $Id$
5     Desc: SetSR() - Modify the CPU status register.
6     Lang: english
7 */
9 /*****************************************************************************
11     NAME
12 #include <proto/exec.h>
14         AROS_LH2(ULONG, SetSR,
16     SYNOPSIS
17         AROS_LHA(ULONG, newSR, D0),
18         AROS_LHA(ULONG, mask,  D1),
20     LOCATION
21         struct ExecBase *, SysBase, 24, Exec)
23     FUNCTION
24         Read/Modify the CPU status register in an easy way. Only the bits
25         set it the mask parameter will be changed.
27         The bits in the register mapped to those of the Motorola MC680x0
28         family of microprocessors.
30     INPUTS
31         newSR   -   The new contents of the status register.
32         mask    -   Mask of bits to change.
34     RESULT
35         The old contents of the status register or ~0UL if this function
36         is not implemented.
38     NOTES
39         This function is of limited use.
41     EXAMPLE
42         You can read the status register by calling SetSR(0,0).
44     BUGS
45         This function may do nothing on non-mc680x0 systems.
47     SEE ALSO
49     INTERNALS
51 ******************************************************************************/
53         #include "aros/m68k/asm.h"
55         .text
56         .balign 4
57         .globl  AROS_SLIB_ENTRY(SetSR,Exec,24)
59 AROS_SLIB_ENTRY(SetSR,Exec,24):
61         movem.l %d2/%a5,%sp@-
62         lea su(%pc),%a5
63         jsr Supervisor(%a6)
64         movem.l %sp@+,%d2/%a5
65         rts
67 su: move.w %sp@,%d2
68         and.w %d1,%d0
69         not.w %d1
70         and.w %d1,%sp@
71         or.w %d0,%sp@
72         moveq #0,%d0
73     move.w %d2,%d0
74     rte