static Registers() { var factory = new StorageFactory(); GpRegisters = factory.RangeOfReg32(8, "er{0}"); GpRegisters[7] = new RegisterStorage("sp", 7, 0, PrimitiveType.Ptr32); RRegisters = GpRegisters.Select((r, i) => new RegisterStorage($"r{i}", r.Number, 0, PrimitiveType.Word16)).ToArray(); ERegisters = GpRegisters.Select((r, i) => new RegisterStorage($"e{i}", r.Number, 16, PrimitiveType.Word16)).ToArray(); RlRegisters = GpRegisters.Select((r, i) => new RegisterStorage($"r{i}l", r.Number, 0, PrimitiveType.Byte)).ToArray(); RhRegisters = GpRegisters.Select((r, i) => new RegisterStorage($"r{i}h", r.Number, 8, PrimitiveType.Byte)).ToArray(); Gp16Registers = RRegisters.Concat(ERegisters).ToArray(); Gp8Registers = RhRegisters.Concat(RlRegisters).ToArray(); PcRegister = factory.Reg32("pc"); CcRegister = factory.Reg("ccr", PrimitiveType.Byte); ByName = GpRegisters .Concat(Gp16Registers) .Concat(Gp8Registers) .Concat(new[] { PcRegister, CcRegister }) .ToDictionary(r => r.Name); }
static Registers() { var factory = new StorageFactory(); GpRegisters = factory.RangeOfReg32(32, "r{0}"); GpRegisters[0] = new RegisterStorage("zero", 0, 0, PrimitiveType.Word32); sp = GpRegisters[27] = new RegisterStorage("sp", 27, 0, PrimitiveType.Word32); ra = GpRegisters[31] = new RegisterStorage("ra", 31, 0, PrimitiveType.Word32); var ctrlFactory = new StorageFactory(StorageDomain.SystemRegister); ControlRegisters = new RegisterStorage?[] { ctrlFactory.Reg32("status"), // 0 - Refer to The status Register on page 45 ctrlFactory.Reg32("estatus"), // 1 - Refer to The estatus Register on page 47 ctrlFactory.Reg32("bstatus"), // 2 - Refer to The bstatus Register ctrlFactory.Reg32("ienable"), // 3 - Internal interrupt - enable bits - Available only when the external interrupt controller interface is not present.Otherwise reserved. ctrlFactory.Reg32("ipending"), // 4 - Pending internal interrupt bits Available only when the external interrupt controller interface is not present. ctrlFactory.Reg32("cpuid"), // 5 - Unique processor identifier null, // 6 - Reserved ctrlFactory.Reg32("exception"), // 7 - Refer to The exception Register ctrlFactory.Reg32("pteaddr"), // 8 - Refer to The pteaddr Register Available only when the MMU is present. ctrlFactory.Reg32("tlbacc"), // 9 - Refer to The tlbacc Register Available only when the MMU is present. ctrlFactory.Reg32("tlbmisc"), // 10 - Refer to The tlbmisc Register Available only when the MMU is present. ctrlFactory.Reg32("eccinj"), // 11 - Refer to The eccinj Register Available only when ECC is present. ctrlFactory.Reg32("badaddr"), // 12 - Refer to The badaddr Register ctrlFactory.Reg32("config"), // 13 - Refer to The config Register on page 55. Available only when the MPU or ECC is present. ctrlFactory.Reg32("mpubase"), // 14 - Refer to The mpubase Register Available only when the MPU is present. ctrlFactory.Reg32("mpuacc"), // 15 - Refer to The mpuacc Register for MASK variations table }; RegsByName = GpRegisters.ToDictionary(r => r.Name); }
static Registers() { var factory = new StorageFactory(); GpRegisters = factory.RangeOfReg(16, i => $"r{i}", PrimitiveType.Word16); GpRegisters[15] = new RegisterStorage("sp", 15, 0, PrimitiveType.Word16); ByName = GpRegisters.ToDictionary(r => r.Name); }
static Registers() { var factory = new StorageFactory(); GpRegisters = factory.RangeOfReg64(127, "r{0}"); PredicateRegisters = factory.RangeOfReg(64, n => $"p{n:00}", PrimitiveType.Bool); RegistersByName = GpRegisters .Concat(PredicateRegisters) .ToDictionary(r => r.Name); }