1 ifndef bitfuncsinc ; avoid multiple inclusion 2bitfuncsinc equ 1 3 4 save 5 listing off ; no listing over this file 6 7;**************************************************************************** 8;* * 9;* AS 1.42 - File BITFUNCS.INC * 10;* * 11;* Contains Functions For Bit Manipulation * 12;* * 13;**************************************************************************** 14 15 if mompass=1 16 message "Standard Bit Manipulation Functions (C) 1993 Alfred Arnold" 17 endif 18 19;---------------------------------------------------------------------------- 20; some sub-functions for a start: 21 22; delivers a mask with 'bits' bits set, starting at position 'start', used for 23; masking individual bits: 24 25mask function start,bits,((1<<bits)-1)<<start 26 27; the same in inverted form to clear bit groups: 28 29invmask function start,bits,~mask(start,bits) 30 31; delivers the bits from 'start' to 'start'+'bits'-1 from 'x': 32 33cutout function x,start,bits,x&mask(start,bits) 34 35;---------------------------------------------------------------------------- 36; some commonly used bit masks: 37 38; upper byte of a 16 bit word: 39 40hi function x,(x>>8)&255 41 42; the same for the lower byte: 43 44lo function x,x&255 45 46; upper half of a 32 bit word: 47 48hiword function x,(x>>16)&65535 49 50; the same for the lower half: 51 52loword function x,x&65535 53 54; boolean functions, whether a number is odd or even:: 55 56odd function x,(x&1)=1 57even function x,(x&1)=0 58 59; delivers bit 'n' from 'x': 60 61getbit function x,n,(x>>n)&1 62 63;---------------------------------------------------------------------------- 64; Shift Functions: 65 66; Shift a word of 'size' bits by 'n' positions to the left or right: 67 68shln function x,size,n,(x<<n)&mask(0,size) 69shrn function x,size,n,(x>>n)&mask(0,size-n) 70 71; Rotate a word of 'size' bits by 'n' positions to the left or right; 72; the first sub-term leaves the remaining bits unchanged and may be deleted if undesired: 73 74rotln function x,size,n,cutout(x,size,32-size)|shln(x,size,n)|shrn(x,size,size-n) 75rotrn function x,size,n,cutout(x,size,32-size)|shrn(x,size,n)|shln(x,size,size-n) 76 77 restore ; allow listing again 78 79 endif ; bitfuncsinc 80 81