Code: Select all
Macro _lockB(op,var,val)
DisableDebugger
EnableASM
!db 0xf0
op var, val
DisableASM
EnableDebugger
EndMacro
Macro _lockU(op,var)
DisableDebugger
EnableASM
!db 0xf0
op var
DisableASM
EnableDebugger
EndMacro
Macro Atomic_SUB(var,val)
_lockB(sub,var,val)
EndMacro
Macro Atomic_ADD(var, val)
_lockB(add,var,val)
EndMacro
Macro Atomic_AND(var,val)
_lockB(And,var,val)
EndMacro
Macro Atomic_XOR(var,val)
_lockB(XOr,var,val)
EndMacro
Macro Atomic_OR(var,val)
_lockB(Or,var,val)
EndMacro
Macro Atomic_Not(var)
_lockU(Not,var)
EndMacro
Macro Atomic_NEG(var)
_lockU(Neg,var)
EndMacro
Macro Atomic_INC(var)
_lockU(inc,var)
EndMacro
Macro Atomic_DEC(var)
_lockU(dec,var)
EndMacro
Macro Atomic_BTS(var,bit)
_lockB(BTS,var,bit)
EndMacro
Macro Atomic_BTR(var,bit)
_lockB(BTR,var,bit)
EndMacro
Macro Atomic_BTC(var,bit)
_lockb(BTC,var,bit)
EndMacro
Global a.i,b.i
Atomic_ADD(a,2)
Atomic_SUB(a,1)
Atomic_INC(a)
Atomic_DEC(a)
Debug a
Atomic_BTS(b,7)
Atomic_BTR(b,7)
Atomic_BTC(b,7)
Debug b