74 lines
2.6 KiB
Plaintext
74 lines
2.6 KiB
Plaintext
|
DEFINITION MODULE BitByteOps;
|
|||
|
|
|||
|
(* Bitwise operations on bytes.
|
|||
|
Bits in bytes are numbered from 0 to 7 *)
|
|||
|
|
|||
|
FROM SYSTEM IMPORT BYTE;
|
|||
|
|
|||
|
PROCEDURE GetBits (source : BYTE;
|
|||
|
firstBit, lastBit : CARDINAL): BYTE;
|
|||
|
(* Extracts the bits of source from firstBit to lastBit and returns
|
|||
|
them as a byte in which bit 0 correspond to the firstBit of the
|
|||
|
source. *)
|
|||
|
|
|||
|
PROCEDURE SetBits (VAR byte : BYTE;
|
|||
|
firstBit, lastBit: CARDINAL;
|
|||
|
pattern : BYTE);
|
|||
|
(* Masks byte with pattern from firstBit to lastBit. The first
|
|||
|
(lastBit - firstBit + 1 of pattern are used, with leading zeros
|
|||
|
if necessary.
|
|||
|
Examples : To set the bits to 1, the pattern 0FFH should be passed,
|
|||
|
and to set the bits to 0, the pattern 0 should be passed. *)
|
|||
|
|
|||
|
PROCEDURE ByteAnd (left, right : BYTE): BYTE;
|
|||
|
(* Bitwise AND *)
|
|||
|
|
|||
|
PROCEDURE ByteOr (left, right : BYTE): BYTE;
|
|||
|
(* Bitwise OR *)
|
|||
|
|
|||
|
PROCEDURE ByteXor (left, right : BYTE): BYTE;
|
|||
|
(* Bitwise XOR *)
|
|||
|
|
|||
|
PROCEDURE ByteNot (byte : BYTE): BYTE;
|
|||
|
(* Bitwise complement to 1 *)
|
|||
|
|
|||
|
PROCEDURE ByteShr (byte : BYTE;
|
|||
|
count : CARDINAL): BYTE;
|
|||
|
(* Shift Logical Right
|
|||
|
shifts the bits in byte to the right by the number of bits specified
|
|||
|
in count. Zeros are shifted in on the left. *)
|
|||
|
|
|||
|
PROCEDURE ByteSar (byte : BYTE;
|
|||
|
count : CARDINAL): BYTE;
|
|||
|
(* Shift Arithmetic Right
|
|||
|
shifts the bits in byte to the right by the number of bits specified
|
|||
|
in count. Bits equal to the original high order bit are shifted in
|
|||
|
on the left, preserving the sign of the original value. *)
|
|||
|
|
|||
|
PROCEDURE ByteShl (byte : BYTE;
|
|||
|
count : CARDINAL): BYTE;
|
|||
|
(* Shift Left
|
|||
|
shifts the bits in byte to the left by the number of bits specified
|
|||
|
in count. Zeros are shifted in on the right. *)
|
|||
|
|
|||
|
PROCEDURE ByteRor (byte : BYTE;
|
|||
|
count : CARDINAL): BYTE;
|
|||
|
(* Rotate Right
|
|||
|
rotates byte right by the number of bits specified in count *)
|
|||
|
|
|||
|
PROCEDURE ByteRol (byte : BYTE;
|
|||
|
count : CARDINAL): BYTE;
|
|||
|
(* Rotate Left
|
|||
|
rotates byte left by the number of bits specified in count *)
|
|||
|
|
|||
|
PROCEDURE HighNibble (byte : BYTE): BYTE;
|
|||
|
(* Returns the high order nibble (4 bits) value of byte *)
|
|||
|
|
|||
|
PROCEDURE LowNibble (byte : BYTE): BYTE;
|
|||
|
(* Returns the low order nibble (4 bits) value of byte *)
|
|||
|
|
|||
|
PROCEDURE Swap (VAR byte : BYTE);
|
|||
|
(* Swaps the high and low order nibble values of byte *)
|
|||
|
|
|||
|
END BitByteOps.
|
|||
|
|