Skip to content

Instantly share code, notes, and snippets.

@x4fx77x4f
Last active January 3, 2022 17:04
Show Gist options
  • Save x4fx77x4f/cbb89c4e90dc157ef03b820eefa706ed to your computer and use it in GitHub Desktop.
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
// 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
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
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