You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
895 B

  1. class Register:
  2. registers = []
  3. def __init__(self, n_bits, name=None):
  4. self.n_bits = n_bits
  5. if name is None:
  6. self.name = "r{}".format(len(Register.registers))
  7. else:
  8. self.name = name
  9. self.value = 0
  10. Register.registers.append(self)
  11. def truncate(self, value, bits=None):
  12. if bits is None:
  13. bits = self.n_bits
  14. return value & (1 << bits - 1)
  15. def set(self, value):
  16. if value < 0:
  17. self.value = self.truncate(abs(value), self.n_bits - 1)
  18. self.negate()
  19. self.value = self.truncate(value)
  20. def get(self):
  21. return self.value
  22. def negate(self):
  23. self.value = ~self.value + 1
  24. class Acumulator(Register):
  25. positive_flag = False
  26. negative_flag = False
  27. zero_flag = False
  28. carry = False
  29. def add(self, register):
  30. pass