Source code for ducky.cpu.registers

import enum

[docs]class Registers(enum.IntEnum): # General purpose registers R00 = 0 R01 = 1 R02 = 2 R03 = 3 R04 = 4 R05 = 5 R06 = 6 R07 = 7 R08 = 8 R09 = 9 R10 = 10 R11 = 11 R12 = 12 R13 = 13 R14 = 14 R15 = 15 R16 = 16 R17 = 17 R18 = 18 R19 = 19 R20 = 20 R21 = 21 R22 = 22 R23 = 23 R24 = 24 R25 = 25 R26 = 26 R27 = 27 R28 = 28 R29 = 29 # Special registers FP = 30 # Frame Pointer SP = 31 # Stack Pointer # Inaccessible registers IP = 32 # Instruction pointer CNT = 33 # Instruction counter # First special register REGISTER_SPECIAL = 30 # How many registers do we have? This many... REGISTER_COUNT = 34
PROTECTED_REGISTERS = [ Registers.FP, Registers.IP, Registers.CNT ] FLAGS = Registers.REGISTER_COUNT.value + 100 GENERAL_REGISTERS = [r for r in Registers if r.value < Registers.REGISTER_SPECIAL.value] RESETABLE_REGISTERS = [r for r in Registers if r.value < Registers.IP] REGISTER_NAMES = ['r{}'.format(r.value) for r in Registers if r.value < Registers.REGISTER_SPECIAL.value] + ['fp', 'sp', 'ip', 'cnt']
[docs]class RegisterSet(list): def __init__(self): super(RegisterSet, self).__init__() for reg_name in REGISTER_NAMES: self.append(0)