Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def gen_input(str):
- out = []
- for n in str:
- if n != " ":
- out.append(INP(n == "1"))
- return out
- def to_digit(state):
- return "1" if state else "0"
- class NONE:
- def get_state(self):
- return False
- def set_state(self, state):
- pass
- def __add__(self, c):
- return OR(self, c)
- def __mul__(self, c):
- return AND(self, c)
- def __neg__(self):
- return NOT(self)
- def __call__(self, *args):
- return self.get_state(*(args))
- class NOT(NONE):
- def __init__(self, i0):
- self.i0 = i0
- def get_state(self):
- return not self.i0.get_state()
- class AND(NONE):
- def __init__(self, i0, i1):
- self.i0, self.i1 = i0, i1
- def get_state(self):
- return self.i0.get_state() and self.i1.get_state()
- class OR(NONE):
- def __init__(self, i0, i1):
- self.i0, self.i1 = i0, i1
- def get_state(self):
- return self.i0.get_state() or self.i1.get_state()
- class INP(NONE):
- def __init__(self, state=False):
- self.state = state
- def get_state(self):
- return self.state
- def set_state(self, state):
- self.state = state
- class XOR(NONE):
- def __init__(self, i0, i1):
- self.i0, self.i1 = i0, i1
- def get_state(self):
- a, b = self.i0(), self.i1()
- return (not a or not b) and (a or b)
- class FADD(NONE):
- def __init__(self, i0, i1, c0):
- s1 = XOR(i0, i1)
- c1 = (i0 * i1) + (s1 * c0)
- self.o = [XOR(s1, c0), c1]
- def get_state(self, i=0):
- return self.o[i]()
- class FSUB(NONE):
- def __init__(self, i0, i1, c0):
- s1 = XOR(i0, i1)
- c1 = (c0 * -s1) + (-i0 * i1)
- self.o = [XOR(s1, c0), c1]
- def get_state(self, i=0):
- return self.o[i]()
- class MEM(NONE):
- def __init__(self, i0, i1):
- self.state = False
- self.i0, self.i1 = i0, i1
- def get_state(self):
- if self.i0(): self.state = True
- elif self.i1(): self.state = False
- return self.state
- # ============= #
- class AND4(NONE):
- def __init__(self, i0, i1, i2, i3, i4, i5, i6, i7):
- self.o = [
- i0 * i4,
- i1 * i5,
- i2 * i6,
- i3 * i7
- ]
- def get_state(self, i=0):
- return self.o[i]()
- class OR4(NONE):
- def __init__(self, i0, i1, i2, i3, i4, i5, i6, i7):
- self.o = [
- i0 + i4,
- i1 + i5,
- i2 + i6,
- i3 + i7
- ]
- def get_state(self, i=0):
- return self.o[i]()
- class ADD445(NONE):
- def __init__(self, i0, i1, i2, i3, i4, i5, i6, i7, c0):
- f0 = FADD(i3, i7, c0)
- f1 = FADD(i2, i6, f0.o[1])
- f2 = FADD(i1, i5, f1.o[1])
- f3 = FADD(i0, i4, f2.o[1])
- self.o = [f0, f1, f2, f3, f3.o[1]]
- def get_state(self, i=0):
- return self.o[i]()
- class INC45(NONE):
- def __init__(self, i0, i1, i2, i3):
- f0 = FADD(i3, INP(False), INP(True))
- f1 = FADD(i2, INP(False), f0.o[1])
- f2 = FADD(i1, INP(False), f1.o[1])
- f3 = FADD(i0, INP(False), f2.o[1])
- self.o = [f0, f1, f2, f3, f3.o[1]]
- def get_state(self, i=0):
- return self.o[i]()
- class SUB445(NONE):
- def __init__(self, i0, i1, i2, i3, i4, i5, i6, i7, c0):
- f0 = FSUB(i3, i7, c0)
- f1 = FSUB(i2, i6, f0.o[1])
- f2 = FSUB(i1, i5, f1.o[1])
- f3 = FSUB(i0, i4, f2.o[1])
- self.o = [f0, f1, f2, f3, f3.o[1]]
- def get_state(self, i=0):
- return self.o[i]()
- class MEM4(NONE):
- def __init__(self, i0, i1, i2, i3, s0, r0):
- f0 = MEM(i3 * s0, r0)
- f1 = MEM(i2 * s0, r0)
- f2 = MEM(i1 * s0, r0)
- f3 = MEM(i0 * s0, r0)
- self.o = [f0, f1, f2, f3]
- def get_state(self, i=0):
- return self.o[i]()
- # ============= #
- # simple program counter
- class PCOUNT:
- def __init__(self, i0, i1, i2, i3, s0, n0, r0):
- # r0 reset
- # s0 set value
- self.n0 = n0 # next
- sum = INC45(i0, i1, i2, i3)
- self.o = MEM4(i0, i1, i2, i3, s0, r0)
- def get_status(self, i=0):
- return 0
- def main():
- pass
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement