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.

45 lines
1.0 KiB

6 years ago
6 years ago
  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_val(self, value, bits=None):
  12. if bits is None:
  13. bits = self.n_bits
  14. return value & ((1 << bits) - 1)
  15. def trucate(self):
  16. self.value = self.truncate_val(self.value)
  17. def set(self, value):
  18. if value < 0:
  19. self.value = self.truncate_val(abs(value), self.n_bits - 1)
  20. self.negate()
  21. self.trucate()
  22. def get(self):
  23. return self.value
  24. def complement(self):
  25. self.value = self.value ^ ((1 << self.n_bits) - 1)
  26. def negate(self):
  27. self.complement()
  28. self.value += 1
  29. class Acumulator(Register):
  30. positive_flag = False
  31. negative_flag = False
  32. zero_flag = False
  33. carry = False
  34. def add(self, register):
  35. pass