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.
|
||
|