def bmask(mode, RA, RB=None, zero=False):
- RT = RA if RB is not None and not zero else 0
mask = RB if RB is not None else 0xffffffffffffffff
- RA = RA & mask
- a1 = RA if mode&1 else ~RA
+ ra = RA & mask
+ a1 = ra if mode&1 else ~ra
mode2 = (mode >> 1) & 0b11
if mode2 == 0:
- a2 = -RA
+ a2 = -ra
if mode2 == 1:
- a2 = RA-1
+ a2 = ra-1
if mode2 == 2:
- a2 = RA+1
+ a2 = ra+1
if mode2 == 3:
- a2 = ~(RA+1)
+ a2 = ~(ra+1)
a1 = a1 & mask
a2 = a2 & mask
mode3 = (mode >> 3) & 0b11
RT = a1 & a2
if mode3 == 2:
RT = a1 ^ a2
- return RT & mask
-
-SBF = 0b01010
-SOF = 0b01001
-SIF = 0b10000 # 10011 also works no idea why yet
+ RT &= mask
+ if not zero:
+ RT |= RA & ~mask
+ return RT
+SBF = 0b01010 # set before first
+SOF = 0b01001 # set only first
+SIF = 0b10000 # set including first 10011 also works no idea why yet