Last active
January 3, 2022 17:04
-
-
Save x4fx77x4f/cbb89c4e90dc157ef03b820eefa706ed to your computer and use it in GitHub Desktop.
Implementation of logic gates and BROKEN binary adder in the form of a Source Engine .cfg file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Logic gate implementation in Source | |
// Usage: | |
// 1. Preprocess this file with cfgpp.lua (or use the preprocessed file below this one) and put it in your game's 'cfg' folder (which will be inside a folder with the name of the game, e.g. 'cstrike' for CS:S, or 'tf' for TF2) | |
// 2. Run the file by putting this in the developer console: 'exec circuit2' (replace "circuit2" with whatever name you gave the processed file) | |
// initialization (floating pins will break things) | |
alias 0 | |
alias 1 | |
alias a 0 | |
alias b 0 | |
alias c 0 | |
// "echo_pins" displays the state of pins a, b, and c as "$a, $b -> $c" | |
alias echo_pins { | |
alias 1 echo_pins_1xx | |
alias 0 echo_pins_0xx | |
a | |
} | |
alias echo_pins_1xx { | |
alias 1 echo_pins_11x | |
alias 0 echo_pins_10x | |
b | |
} | |
alias echo_pins_11x { | |
alias 1 echo 1, 1 -> 1 | |
alias 0 echo 1, 1 -> 0 | |
c | |
} | |
alias echo_pins_10x { | |
alias 1 echo 1, 0 -> 1 | |
alias 0 echo 1, 0 -> 0 | |
c | |
} | |
alias echo_pins_0xx { | |
alias 1 echo_pins_01x | |
alias 0 echo_pins_00x | |
b | |
} | |
alias echo_pins_01x { | |
alias 1 echo 0, 1 -> 1 | |
alias 0 echo 0, 1 -> 0 | |
c | |
} | |
alias echo_pins_00x { | |
alias 1 echo 0, 0 -> 1 | |
alias 0 echo 0, 0 -> 0 | |
c | |
} | |
// NOT gate | |
alias not { | |
alias 0 alias c 1 | |
alias 1 alias c 0 | |
a | |
} | |
echo not | |
alias a 0 | |
not | |
echo_pins | |
alias a 1 | |
not | |
echo_pins | |
// AND gate | |
alias and { | |
alias c 1 | |
alias 1 | |
alias 0 alias c 0 | |
a | |
b | |
} | |
echo and | |
alias a 0 | |
alias b 0 | |
and | |
echo_pins | |
alias a 0 | |
alias b 1 | |
and | |
echo_pins | |
alias a 1 | |
alias b 0 | |
and | |
echo_pins | |
alias a 1 | |
alias b 1 | |
and | |
echo_pins | |
// OR gate | |
alias or { | |
alias c 0 | |
alias 1 alias c 1 | |
alias 0 | |
a | |
b | |
} | |
echo or | |
alias a 0 | |
alias b 0 | |
or | |
echo_pins | |
alias a 0 | |
alias b 1 | |
or | |
echo_pins | |
alias a 1 | |
alias b 0 | |
or | |
echo_pins | |
alias a 1 | |
alias b 1 | |
or | |
echo_pins | |
// NAND gate | |
alias nand { | |
alias c 0 | |
alias 1 | |
alias 0 alias c 1 | |
a | |
b | |
} | |
echo nand | |
alias a 0 | |
alias b 0 | |
nand | |
echo_pins | |
alias a 0 | |
alias b 1 | |
nand | |
echo_pins | |
alias a 1 | |
alias b 0 | |
nand | |
echo_pins | |
alias a 1 | |
alias b 1 | |
nand | |
echo_pins | |
// NOR gate | |
alias nor { | |
alias c 1 | |
alias 1 alias c 0 | |
alias 0 | |
a | |
b | |
} | |
echo nor | |
alias a 0 | |
alias b 0 | |
nor | |
echo_pins | |
alias a 0 | |
alias b 1 | |
nor | |
echo_pins | |
alias a 1 | |
alias b 0 | |
nor | |
echo_pins | |
alias a 1 | |
alias b 1 | |
nor | |
echo_pins | |
// XOR gate | |
alias xor_1x { | |
alias 1 | |
alias 0 alias c 1 | |
b | |
} | |
alias xor_0x { | |
alias 1 alias c 1 | |
alias 0 | |
b | |
} | |
alias xor { | |
alias c 0 | |
alias 1 xor_1x | |
alias 0 xor_0x | |
a | |
} | |
echo xor | |
alias a 0 | |
alias b 0 | |
xor | |
echo_pins | |
alias a 0 | |
alias b 1 | |
xor | |
echo_pins | |
alias a 1 | |
alias b 0 | |
xor | |
echo_pins | |
alias a 1 | |
alias b 1 | |
xor | |
echo_pins | |
// XNOR gate | |
alias xnor { | |
xor | |
alias 1 alias c 0 | |
alias 0 alias c 1 | |
c | |
} | |
echo xnor | |
alias a 0 | |
alias b 0 | |
xnor | |
echo_pins | |
alias a 0 | |
alias b 1 | |
xnor | |
echo_pins | |
alias a 1 | |
alias b 0 | |
xnor | |
echo_pins | |
alias a 1 | |
alias b 1 | |
xnor | |
echo_pins | |
// binary adder | |
echo binary adder | |
// 4-bit unsigned integer (3 is leftmost bit, 0 is rightmost bit) | |
alias a3 0 | |
alias a2 0 | |
alias a1 1 | |
alias a0 0 | |
// 4-bit unsigned integer | |
alias b3 0 | |
alias b2 1 | |
alias b1 1 | |
alias b0 0 | |
alias echo_uint4 { | |
alias 0 echo_uint4_0xxx | |
alias 1 echo_uint4_1xxx | |
x3 | |
} | |
alias echo_uint4_0xxx { | |
alias 0 echo_uint4_00xx | |
alias 1 echo_uint4_01xx | |
x2 | |
} | |
alias echo_uint4_1xxx { | |
alias 0 echo_uint4_10xx | |
alias 1 echo_uint4_11xx | |
x2 | |
} | |
alias echo_uint4_00xx { | |
alias 0 echo_uint4_000x | |
alias 1 echo_uint4_001x | |
x1 | |
} | |
alias echo_uint4_01xx { | |
alias 0 echo_uint4_010x | |
alias 1 echo_uint4_011x | |
x1 | |
} | |
alias echo_uint4_10xx { | |
alias 0 echo_uint4_100x | |
alias 1 echo_uint4_101x | |
x1 | |
} | |
alias echo_uint4_11xx { | |
alias 0 echo_uint4_110x | |
alias 1 echo_uint4_111x | |
x1 | |
} | |
alias echo_uint4_000x { | |
alias 0 echo bin 0000 dec 0 hex 0 | |
alias 1 echo bin 0001 dec 1 hex 1 | |
x0 | |
} | |
alias echo_uint4_001x { | |
alias 0 echo bin 0010 dec 2 hex 2 | |
alias 1 echo bin 0011 dec 3 hex 3 | |
x0 | |
} | |
alias echo_uint4_010x { | |
alias 0 echo bin 0100 dec 4 hex 4 | |
alias 1 echo bin 0101 dec 5 hex 5 | |
x0 | |
} | |
alias echo_uint4_011x { | |
alias 0 echo bin 0110 dec 6 hex 6 | |
alias 1 echo bin 0111 dec 7 hex 7 | |
x0 | |
} | |
alias echo_uint4_100x { | |
alias 0 echo bin 1000 dec 8 hex 8 | |
alias 1 echo bin 1001 dec 9 hex 9 | |
x0 | |
} | |
alias echo_uint4_101x { | |
alias 0 echo bin 1010 dec 10 hex a | |
alias 1 echo bin 1011 dec 11 hex b | |
x0 | |
} | |
alias echo_uint4_110x { | |
alias 0 echo bin 1100 dec 12 hex c | |
alias 1 echo bin 1101 dec 13 hex d | |
x0 | |
} | |
alias echo_uint4_111x { | |
alias 0 echo bin 1110 dec 14 hex e | |
alias 1 echo bin 1111 dec 15 hex f | |
x0 | |
} | |
echo a = | |
alias x3 a3 | |
alias x2 a2 | |
alias x1 a1 | |
alias x0 a0 | |
echo_uint4 | |
echo b = | |
alias x3 b3 | |
alias x2 b2 | |
alias x1 b1 | |
alias x0 b0 | |
echo_uint4 | |
alias half_adder { | |
xor | |
alias 0 alias sum 0 | |
alias 1 alias sum 1 | |
c | |
and | |
alias 0 alias carry 0 | |
alias 1 alias carry 1 | |
c | |
} | |
alias full_adder { | |
alias 0 alias carry2 0 | |
alias 1 alias carry2 1 | |
carry | |
half_adder | |
alias a sum | |
alias b carry2 | |
half_adder | |
alias carry2 | |
alias a carry | |
or | |
alias 0 alias carry 0 | |
alias 1 alias carry 1 | |
c | |
} | |
// tests | |
alias echo_sum_carry { | |
alias c sum | |
//echo_pins | |
alias 0 echo carry is 0 | |
alias 1 echo carry is 1 | |
//carry | |
} | |
// half_adder tests | |
alias a 0 | |
alias b 0 | |
half_adder | |
echo_sum_carry | |
alias a 0 | |
alias b 1 | |
half_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 0 | |
half_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 1 | |
half_adder | |
echo_sum_carry | |
// full_adder tests | |
alias a 0 | |
alias b 0 | |
alias carry 0 | |
full_adder | |
echo_sum_carry | |
alias a 0 | |
alias b 1 | |
alias carry 0 | |
full_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 0 | |
alias carry 0 | |
full_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 1 | |
alias carry 0 | |
full_adder | |
echo_sum_carry | |
alias a 0 | |
alias b 0 | |
alias carry 1 | |
full_adder | |
echo_sum_carry | |
alias a 0 | |
alias b 1 | |
alias carry 1 | |
full_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 0 | |
alias carry 1 | |
full_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 1 | |
alias carry 1 | |
full_adder | |
echo_sum_carry | |
// addition | |
alias a a0 | |
alias b b0 | |
half_adder | |
alias 0 alias a0 0 | |
alias 1 alias a0 1 | |
sum | |
alias a a1 | |
alias b b1 | |
full_adder | |
alias 0 alias a1 0 | |
alias 1 alias a1 1 | |
sum | |
alias a a2 | |
alias b b2 | |
full_adder | |
alias 0 alias a2 0 | |
alias 1 alias a2 1 | |
sum | |
alias a a3 | |
alias b b3 | |
full_adder | |
alias 0 alias a3 0 | |
alias 1 alias a3 1 | |
sum | |
echo c = | |
alias x3 a3 | |
alias x2 a2 | |
alias x1 a1 | |
alias x0 a0 | |
echo_uint4 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
alias 0 | |
alias 1 | |
alias a 0 | |
alias b 0 | |
alias c 0 | |
alias echo_pins "alias 1 echo_pins_1xx;alias 0 echo_pins_0xx;a" | |
alias echo_pins_1xx "alias 1 echo_pins_11x;alias 0 echo_pins_10x;b" | |
alias echo_pins_11x "alias 1 echo 1, 1 -> 1;alias 0 echo 1, 1 -> 0;c" | |
alias echo_pins_10x "alias 1 echo 1, 0 -> 1;alias 0 echo 1, 0 -> 0;c" | |
alias echo_pins_0xx "alias 1 echo_pins_01x;alias 0 echo_pins_00x;b" | |
alias echo_pins_01x "alias 1 echo 0, 1 -> 1;alias 0 echo 0, 1 -> 0;c" | |
alias echo_pins_00x "alias 1 echo 0, 0 -> 1;alias 0 echo 0, 0 -> 0;c" | |
alias not "alias 0 alias c 1;alias 1 alias c 0;a" | |
echo not | |
alias a 0 | |
not | |
echo_pins | |
alias a 1 | |
not | |
echo_pins | |
alias and "alias c 1;alias 1;alias 0 alias c 0;a;b" | |
echo and | |
alias a 0 | |
alias b 0 | |
and | |
echo_pins | |
alias a 0 | |
alias b 1 | |
and | |
echo_pins | |
alias a 1 | |
alias b 0 | |
and | |
echo_pins | |
alias a 1 | |
alias b 1 | |
and | |
echo_pins | |
alias or "alias c 0;alias 1 alias c 1;alias 0;a;b" | |
echo or | |
alias a 0 | |
alias b 0 | |
or | |
echo_pins | |
alias a 0 | |
alias b 1 | |
or | |
echo_pins | |
alias a 1 | |
alias b 0 | |
or | |
echo_pins | |
alias a 1 | |
alias b 1 | |
or | |
echo_pins | |
alias nand "alias c 0;alias 1;alias 0 alias c 1;a;b" | |
echo nand | |
alias a 0 | |
alias b 0 | |
nand | |
echo_pins | |
alias a 0 | |
alias b 1 | |
nand | |
echo_pins | |
alias a 1 | |
alias b 0 | |
nand | |
echo_pins | |
alias a 1 | |
alias b 1 | |
nand | |
echo_pins | |
alias nor "alias c 1;alias 1 alias c 0;alias 0;a;b" | |
echo nor | |
alias a 0 | |
alias b 0 | |
nor | |
echo_pins | |
alias a 0 | |
alias b 1 | |
nor | |
echo_pins | |
alias a 1 | |
alias b 0 | |
nor | |
echo_pins | |
alias a 1 | |
alias b 1 | |
nor | |
echo_pins | |
alias xor_1x "alias 1;alias 0 alias c 1;b" | |
alias xor_0x "alias 1 alias c 1;alias 0;b" | |
alias xor "alias c 0;alias 1 xor_1x;alias 0 xor_0x;a" | |
echo xor | |
alias a 0 | |
alias b 0 | |
xor | |
echo_pins | |
alias a 0 | |
alias b 1 | |
xor | |
echo_pins | |
alias a 1 | |
alias b 0 | |
xor | |
echo_pins | |
alias a 1 | |
alias b 1 | |
xor | |
echo_pins | |
alias xnor "xor;alias 1 alias c 0;alias 0 alias c 1;c" | |
echo xnor | |
alias a 0 | |
alias b 0 | |
xnor | |
echo_pins | |
alias a 0 | |
alias b 1 | |
xnor | |
echo_pins | |
alias a 1 | |
alias b 0 | |
xnor | |
echo_pins | |
alias a 1 | |
alias b 1 | |
xnor | |
echo_pins | |
echo binary adder | |
alias a3 0 | |
alias a2 0 | |
alias a1 1 | |
alias a0 0 | |
alias b3 0 | |
alias b2 1 | |
alias b1 1 | |
alias b0 0 | |
alias echo_uint4 "alias 0 echo_uint4_0xxx;alias 1 echo_uint4_1xxx;x3" | |
alias echo_uint4_0xxx "alias 0 echo_uint4_00xx;alias 1 echo_uint4_01xx;x2" | |
alias echo_uint4_1xxx "alias 0 echo_uint4_10xx;alias 1 echo_uint4_11xx;x2" | |
alias echo_uint4_00xx "alias 0 echo_uint4_000x;alias 1 echo_uint4_001x;x1" | |
alias echo_uint4_01xx "alias 0 echo_uint4_010x;alias 1 echo_uint4_011x;x1" | |
alias echo_uint4_10xx "alias 0 echo_uint4_100x;alias 1 echo_uint4_101x;x1" | |
alias echo_uint4_11xx "alias 0 echo_uint4_110x;alias 1 echo_uint4_111x;x1" | |
alias echo_uint4_000x "alias 0 echo bin 0000 dec 0 hex 0;alias 1 echo bin 0001 dec 1 hex 1;x0" | |
alias echo_uint4_001x "alias 0 echo bin 0010 dec 2 hex 2;alias 1 echo bin 0011 dec 3 hex 3;x0" | |
alias echo_uint4_010x "alias 0 echo bin 0100 dec 4 hex 4;alias 1 echo bin 0101 dec 5 hex 5;x0" | |
alias echo_uint4_011x "alias 0 echo bin 0110 dec 6 hex 6;alias 1 echo bin 0111 dec 7 hex 7;x0" | |
alias echo_uint4_100x "alias 0 echo bin 1000 dec 8 hex 8;alias 1 echo bin 1001 dec 9 hex 9;x0" | |
alias echo_uint4_101x "alias 0 echo bin 1010 dec 10 hex a;alias 1 echo bin 1011 dec 11 hex b;x0" | |
alias echo_uint4_110x "alias 0 echo bin 1100 dec 12 hex c;alias 1 echo bin 1101 dec 13 hex d;x0" | |
alias echo_uint4_111x "alias 0 echo bin 1110 dec 14 hex e;alias 1 echo bin 1111 dec 15 hex f;x0" | |
echo a = | |
alias x3 a3 | |
alias x2 a2 | |
alias x1 a1 | |
alias x0 a0 | |
echo_uint4 | |
echo b = | |
alias x3 b3 | |
alias x2 b2 | |
alias x1 b1 | |
alias x0 b0 | |
echo_uint4 | |
alias half_adder "xor;alias 0 alias sum 0;alias 1 alias sum 1;c;and;alias 0 alias carry 0;alias 1 alias carry 1;c" | |
alias full_adder "alias 0 alias carry2 0;alias 1 alias carry2 1;carry;half_adder;alias a sum;alias b carry2;half_adder;alias carry2;alias a carry;or;alias 0 alias carry 0;alias 1 alias carry 1;c" | |
alias echo_sum_carry "alias c sum;alias 0 echo carry is 0;alias 1 echo carry is 1" | |
alias a 0 | |
alias b 0 | |
half_adder | |
echo_sum_carry | |
alias a 0 | |
alias b 1 | |
half_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 0 | |
half_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 1 | |
half_adder | |
echo_sum_carry | |
alias a 0 | |
alias b 0 | |
alias carry 0 | |
full_adder | |
echo_sum_carry | |
alias a 0 | |
alias b 1 | |
alias carry 0 | |
full_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 0 | |
alias carry 0 | |
full_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 1 | |
alias carry 0 | |
full_adder | |
echo_sum_carry | |
alias a 0 | |
alias b 0 | |
alias carry 1 | |
full_adder | |
echo_sum_carry | |
alias a 0 | |
alias b 1 | |
alias carry 1 | |
full_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 0 | |
alias carry 1 | |
full_adder | |
echo_sum_carry | |
alias a 1 | |
alias b 1 | |
alias carry 1 | |
full_adder | |
echo_sum_carry | |
alias a a0 | |
alias b b0 | |
half_adder | |
alias 0 alias a0 0 | |
alias 1 alias a0 1 | |
sum | |
alias a a1 | |
alias b b1 | |
full_adder | |
alias 0 alias a1 0 | |
alias 1 alias a1 1 | |
sum | |
alias a a2 | |
alias b b2 | |
full_adder | |
alias 0 alias a2 0 | |
alias 1 alias a2 1 | |
sum | |
alias a a3 | |
alias b b3 | |
full_adder | |
alias 0 alias a3 0 | |
alias 1 alias a3 1 | |
sum | |
echo c = | |
alias x3 a3 | |
alias x2 a2 | |
alias x1 a1 | |
alias x0 a0 | |
echo_uint4 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
not | |
0, 0 -> 1 | |
1, 0 -> 0 | |
and | |
0, 0 -> 0 | |
0, 1 -> 0 | |
1, 0 -> 0 | |
1, 1 -> 1 | |
or | |
0, 0 -> 0 | |
0, 1 -> 1 | |
1, 0 -> 1 | |
1, 1 -> 1 | |
nand | |
0, 0 -> 1 | |
0, 1 -> 1 | |
1, 0 -> 1 | |
1, 1 -> 0 | |
nor | |
0, 0 -> 1 | |
0, 1 -> 0 | |
1, 0 -> 0 | |
1, 1 -> 0 | |
xor | |
0, 0 -> 0 | |
0, 1 -> 1 | |
1, 0 -> 1 | |
1, 1 -> 0 | |
xnor | |
0, 0 -> 1 | |
0, 1 -> 0 | |
1, 0 -> 0 | |
1, 1 -> 1 | |
binary adder | |
a = | |
bin 0010 dec 2 hex 2 | |
b = | |
bin 0110 dec 6 hex 6 | |
c = | |
bin 0100 dec 4 hex 4 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment