2026-04-10 02:13:26 +02:00

48 lines
856 B
Plaintext

(def nand (a b vin) (r) (
(let (a_and_b) (relay_default_off a b))
(set r (relay_default_on a_and_b vin))
))
(def not (a) (r) (
(set r (nand a a))
))
(def and (a b) (r) (
(set r (not (nand a b)))
))
(def or (a b) (r) (
(set r (nand (not a) (not b)))
))
(def xor (a b) (r) (
(set r (and (or a b) (not (and a b))))
))
(def xor_optimized (a b) (r) (
(let (c) (nand a b))
(set r (nand (nand a c) (nand b c)))
))
(def half_add (a b) (r0 r1) (
(set r0 (xor a b))
(set r1 (and a b))
))
(def add (a b carry) (r0 r1) (
(let (d0 d1) (half_add a b))
(let (e0 e1) (half_add carry d0))
(set r0 e0)
(set r1 (or d1 e1))
))
(def add2 (a0 a1 b0 b1 carry_in) (r0 r1 carry_out) (
(let (d0 d1) (add a0 b0 carry_in))
(let (e0 e1) (add a1 b1 d1))
(set r0 d0)
(set r1 e0)
(set carry_out e1)
))