Code: Select all
begin
var codes: array [1..16, 0..1] of byte;
var ron: array[0..7] of byte;
var over, zero: boolean; over := false; zero := false;
var bank: byte := 0;
var i: byte := 1;
while true do
begin
if (codes[i, bank and 1] shr 4) = 0 then
bank := codes[i, bank and 1] and 15;
if (codes[i, bank and 1] shr 4) = 1 then
ron[bank shr 1] := codes[i, bank and 1] and 15;
if (codes[i, bank and 1] shr 4) = 2 then
ron[bank shr 1] := (ron[bank shr 1] or codes[i, bank and 1]) and 15;
if (codes[i, bank and 1] shr 4) = 3 then
ron[bank shr 1] := (ron[bank shr 1] and codes[i, bank and 1]) and 15;
if (codes[i, bank and 1] shr 4) = 4 then
ron[bank shr 1] := (ron[bank shr 1] xor codes[i, bank and 1]) and 15;
if (codes[i, bank and 1] shr 4) = 5 then
begin
if (ron[bank shr 1] + (codes[i, bank and 1] and 15)) > 15 then
over := true; ron[bank shr 1] := (ron[bank shr 1] + codes[i, bank and 1]) and 15; end;
if (codes[i, bank and 1] shr 4) = 6 then
begin
if (ron[bank shr 1] - (codes[i, bank and 1] and 15)) > 15 then
over := true; ron[bank shr 1] := (ron[bank shr 1] - codes[i, bank and 1]) and 15; end;
if (codes[i, bank and 1] shr 4) = 7 then
if (codes[i, bank and 1] and 15) < 5 then
ron := ron shr (codes[i, bank and 1] and 15) else
ron := (ron shr ((codes[i, bank and 1] and 15) shr 2)) or (ron shl (4 - ((codes[i, bank and 1] and 15) shr 2)));
if (codes[i, bank and 1] shr 4) = 8 then
if (codes[i, bank and 1] and 15) < 5 then
ron := ron shl (codes[i, bank and 1] and 15) else
ron := (ron shl ((codes[i, bank and 1] and 15) shr 2)) or (ron shr (4 - ((codes[i, bank and 1] and 15) shr 2)));
if ((codes[i, bank and 1] shr 4) = 9) and (codes[i, bank and 1] > ron[bank shr 1]) then
i := codes[i, bank and 1] and 15;
if ((codes[i, bank and 1] shr 4) = 10) and (codes[i, bank and 1] < ron[bank shr 1]) then
i := codes[i, bank and 1] and 15;
if ((codes[i, bank and 1] shr 4) = 11) and (not over) then
begin i := codes[i, bank and 1] and 15; over := false; end;
if ((codes[i, bank and 1] shr 4) = 12) and (not zero) then
begin i := codes[i, bank and 1] and 15; zero := false; end;
if ((codes[i, bank and 1] shr 4) = 13) and over then
begin i := codes[i, bank and 1] and 15; over := false; end;
if ((codes[i, bank and 1] shr 4) = 14) and zero then
begin i := codes[i, bank and 1] and 15; zero := false; end;
if (codes[i, bank and 1] shr 4) = 15 then
i := codes[i, bank and 1] and 15;
if ron[bank shr 1] = 0 then
zero := true else zero := false;
i := i + 1;
if i = 17 then break;
end;
end.
по прикидкам можно будет закодить двоичные часы и генератор всяких сигналов (если к рону подцепить шимку)