46 lines
858 B
Plaintext
46 lines
858 B
Plaintext
include "cowgol.coh";
|
|
|
|
sub gray_encode(n: uint8): (r: uint8) is
|
|
r := n ^ n >> 1;
|
|
end sub;
|
|
|
|
sub gray_decode(n: uint8): (r: uint8) is
|
|
r := n;
|
|
while n > 0 loop
|
|
n := n >> 1;
|
|
r := r ^ n;
|
|
end loop;
|
|
end sub;
|
|
|
|
sub print_binary(n: uint8) is
|
|
var buf: uint8[9];
|
|
var ptr := &buf[8];
|
|
[ptr] := 0;
|
|
loop
|
|
ptr := @prev ptr;
|
|
[ptr] := (n & 1) + '0';
|
|
n := n >> 1;
|
|
if n == 0 then break; end if;
|
|
end loop;
|
|
print(ptr);
|
|
end sub;
|
|
|
|
sub print_row(n: uint8) is
|
|
print_i8(n);
|
|
print(":\t");
|
|
print_binary(n);
|
|
print("\t=>\t");
|
|
var gray_code := gray_encode(n);
|
|
print_binary(gray_code);
|
|
print("\t=>\t");
|
|
var decoded := gray_decode(gray_code);
|
|
print_i8(decoded);
|
|
print_nl();
|
|
end sub;
|
|
|
|
var i: uint8 := 0;
|
|
while i <= 31 loop
|
|
print_row(i);
|
|
i := i + 1;
|
|
end loop;
|