dos_compilers/Logitech Modula-2 v34/M2LIB/DEF/BITBYTEO.DEF

74 lines
2.6 KiB
Plaintext
Raw Normal View History

2024-07-02 16:25:31 +02:00
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.