private void ListRegisters() { CodeEngine en = m_Machine.ProcessorCore; m_ListBox_Regs.Items.Clear(); m_ListBox_Regs.Items.Add("PC: " + en.PC.ToString("x")); m_ListBox_Regs.Items.Add("I: " + en.AddressRegister.ToString("x")); m_ListBox_Regs.Items.Add("V0: " + en.VRegisters[0].ToString("x")); m_ListBox_Regs.Items.Add("V1: " + en.VRegisters[1].ToString("x")); m_ListBox_Regs.Items.Add("V2: " + en.VRegisters[2].ToString("x")); m_ListBox_Regs.Items.Add("V3: " + en.VRegisters[3].ToString("x")); m_ListBox_Regs.Items.Add("V4: " + en.VRegisters[4].ToString("x")); m_ListBox_Regs.Items.Add("V5: " + en.VRegisters[5].ToString("x")); m_ListBox_Regs.Items.Add("V6: " + en.VRegisters[6].ToString("x")); m_ListBox_Regs.Items.Add("V7: " + en.VRegisters[7].ToString("x")); m_ListBox_Regs.Items.Add("V8: " + en.VRegisters[8].ToString("x")); m_ListBox_Regs.Items.Add("V9: " + en.VRegisters[9].ToString("x")); m_ListBox_Regs.Items.Add("VA: " + en.VRegisters[10].ToString("x")); m_ListBox_Regs.Items.Add("VB: " + en.VRegisters[11].ToString("x")); m_ListBox_Regs.Items.Add("VC: " + en.VRegisters[12].ToString("x")); m_ListBox_Regs.Items.Add("VD: " + en.VRegisters[13].ToString("x")); m_ListBox_Regs.Items.Add("VE: " + en.VRegisters[14].ToString("x")); m_ListBox_Regs.Items.Add("VF: " + en.VRegisters[15].ToString("x")); m_ListBox_Regs.Items.Add("RPL0: " + en.RPLRegisters[0].ToString("x")); m_ListBox_Regs.Items.Add("RPL1: " + en.RPLRegisters[1].ToString("x")); m_ListBox_Regs.Items.Add("RPL2: " + en.RPLRegisters[2].ToString("x")); m_ListBox_Regs.Items.Add("RPL3: " + en.RPLRegisters[3].ToString("x")); m_ListBox_Regs.Items.Add("RPL4: " + en.RPLRegisters[4].ToString("x")); m_ListBox_Regs.Items.Add("RPL5: " + en.RPLRegisters[5].ToString("x")); m_ListBox_Regs.Items.Add("RPL6: " + en.RPLRegisters[6].ToString("x")); m_ListBox_Regs.Items.Add("RPL7: " + en.RPLRegisters[7].ToString("x")); }
public static void DumpRegs(ushort address, CodeEngine engine, ushort d, ushort p, ushort x, ushort t, ushort df) { Console.WriteLine("\n======== Register State (" + address.ToString("x") + ") ========="); Console.WriteLine("Register D: " + d.ToString("x")); Console.WriteLine("Register P: " + p.ToString("x")); Console.WriteLine("Register X: " + x.ToString("x")); Console.WriteLine("Register T: " + t.ToString("x")); Console.WriteLine("Register DF: " + df.ToString("x")); Console.WriteLine("Register R0: " + engine.Read1802Register(0).ToString("x")); Console.WriteLine("Register R1: " + engine.Read1802Register(1).ToString("x")); Console.WriteLine("Register R2: " + engine.Read1802Register(2).ToString("x")); Console.WriteLine("Register R3: " + engine.Read1802Register(3).ToString("x")); Console.WriteLine("Register R4: " + engine.Read1802Register(4).ToString("x")); Console.WriteLine("Register R5: " + engine.Read1802Register(5).ToString("x")); Console.WriteLine("Register R6: " + engine.Read1802Register(6).ToString("x")); Console.WriteLine("Register R7: " + engine.Read1802Register(7).ToString("x")); Console.WriteLine("Register R8: " + engine.Read1802Register(8).ToString("x")); Console.WriteLine("Register R9: " + engine.Read1802Register(9).ToString("x")); Console.WriteLine("Register RA: " + engine.Read1802Register(10).ToString("x")); Console.WriteLine("Register RB: " + engine.Read1802Register(11).ToString("x")); Console.WriteLine("Register RC: " + engine.Read1802Register(12).ToString("x")); Console.WriteLine("Register RD: " + engine.Read1802Register(13).ToString("x")); Console.WriteLine("Register RE: " + engine.Read1802Register(14).ToString("x")); Console.WriteLine("Register RF: " + engine.Read1802Register(15).ToString("x")); Console.WriteLine("=================================\n"); }
public static void DumpRegs(ushort address, CodeEngine engine, ushort d, ushort p, ushort x, ushort t, ushort df) { Console.WriteLine("======== Register State (" + address.ToString("x") + ") ========="); Console.WriteLine("Register D: " + d.ToString("x")); Console.WriteLine("Register P: " + p.ToString("x")); Console.WriteLine("Register X: " + x.ToString("x")); Console.WriteLine("Register T: " + t.ToString("x")); Console.WriteLine("Register DF: " + df.ToString("x")); Console.WriteLine("Register R0: " + ReadFake1802Reg(engine, 0).ToString("x")); Console.WriteLine("Register R1: " + ReadFake1802Reg(engine, 1).ToString("x")); Console.WriteLine("Register R2: " + ReadFake1802Reg(engine, 2).ToString("x")); Console.WriteLine("Register R3: " + ReadFake1802Reg(engine, 3).ToString("x")); Console.WriteLine("Register R4: " + ReadFake1802Reg(engine, 4).ToString("x")); Console.WriteLine("Register R5: " + ReadFake1802Reg(engine, 5).ToString("x")); Console.WriteLine("Register R6: " + ReadFake1802Reg(engine, 6).ToString("x")); Console.WriteLine("Register R7: " + ReadFake1802Reg(engine, 7).ToString("x")); Console.WriteLine("Register R8: " + ReadFake1802Reg(engine, 8).ToString("x")); Console.WriteLine("Register R9: " + ReadFake1802Reg(engine, 9).ToString("x")); Console.WriteLine("Register RA: " + ReadFake1802Reg(engine, 10).ToString("x")); Console.WriteLine("Register RB: " + ReadFake1802Reg(engine, 11).ToString("x")); Console.WriteLine("Register RC: " + ReadFake1802Reg(engine, 12).ToString("x")); Console.WriteLine("Register RD: " + ReadFake1802Reg(engine, 13).ToString("x")); Console.WriteLine("Register RE: " + ReadFake1802Reg(engine, 14).ToString("x")); Console.WriteLine("Register RF: " + ReadFake1802Reg(engine, 15).ToString("x")); Console.WriteLine("================================="); }
protected override void RunEmitter(long address, object coreState) { m_CodeEngine = (CodeEngine)coreState; WriteDebug("1802: Emitting function: " + address.ToString("x") + "\n"); WriteDebug("Emitting Registers D,P,X,R,DF\n"); // First emit fake registers that all functions can use EmitLocal(typeof(byte), false); // D local.0 EmitLocal(typeof(byte), false); // P local.1 EmitLocal(typeof(byte), false); // X local.2 EmitLocal(typeof(byte), false); // T local.3 EmitLocal(typeof(byte), false); // DF local.4 // Set P to 3 WriteDebug("Setup P register fake default"); EmitByteConstant(3); EmitRegisterWrite(SelectedRegister.P); // Set X to 2 WriteDebug("\nSetup X register fake default"); EmitByteConstant(2); EmitRegisterWrite(SelectedRegister.X); WriteDebug("\nEmitting Opcodes..."); EmitOpcodes(); //EmitReportRegsCall(); WriteDebug("\nEmitting Return code\n"); EmitNop(); ILGenerator.Emit(OpCodes.Ret); }
public static DynamicMethod CreateSyscallMethod(ushort address, CodeEngine engine) { s_Regs = new ushort[16]; s_CodeEngine = engine; DynamicMethod function = new DynamicMethod( "SysFunc_" + address.ToString("x"), typeof(void), new Type[] { typeof(CodeEngine) }, typeof(C1802ILEmitter).Module); RunEmitter(function.GetILGenerator(), address); //AssemblyName assn = new AssemblyName("TestAssembly_" + address.ToString("x")); //AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(assn, AssemblyBuilderAccess.Save); //ModuleBuilder mb = ab.DefineDynamicModule(assn.Name, assn.Name + ".dll"); //TypeBuilder tb = mb.DefineType("MyTestType"); //ConstructorBuilder cb = tb.DefineDefaultConstructor(MethodAttributes.Public); //MethodBuilder mtb = tb.DefineMethod("SysFunc_" + address.ToString("x"), // MethodAttributes.Public | MethodAttributes.Static, CallingConventions.Standard, typeof(void), new Type[] { typeof(CodeEngine) }); //RunEmitter(mtb.GetILGenerator(), address); //tb.CreateType(); //ab.Save(assn.Name + ".dll"); return(function); }
public static void ReportRegs(CodeEngine engine) { Console.WriteLine("\n=== New Code Engine State ===="); Console.WriteLine("PC: " + engine.Read1802Register(5).ToString("x")); Console.WriteLine("Timers: " + engine.Read1802Register(8).ToString("x")); Console.WriteLine("Address Register: " + engine.Read1802Register(10).ToString("x")); Console.WriteLine("==============================\n"); }
public void Test3() { CodeEngine engine = new CodeEngine(); var template = "<#=this.Item.Name#>, <#=this.Item.Age#>, <#=this.Item.IsBoy#>"; var result = engine.ToCode(template, "public class TT { public string Name { get; set; } public int Age { get; set; } public bool IsBoy { get; set; } } public TT Item { get;set; }", "{\"Name\":\"zhang\", \"Age\": 18, \"IsBoy\": true}"); Assert.AreEqual("zhang, 18, True", result.Output); }
public void Test2() { CodeEngine engine = new CodeEngine(); var template = "<#=this.Item.Name#>"; var result = engine.ToCode(template, null, "{\"Name\":\"zhang\"}"); Assert.AreEqual("zhang", result.Output); }
public static string GetTableName(string name) { var indexOf = name.IndexOf(".", System.StringComparison.Ordinal); if (indexOf > -1) { name = name.Substring(indexOf + 1); } return(CodeEngine.CleanName(name)); }
public void MemoryWrite(CodeEngine engine, ushort address, byte value) { if (address <= m_CodeEngine.Memory.Size) { engine.Memory[address] = value; } else { WriteDebug("1802 Dynarec: Invalid Memory Write Access " + address.ToString("x") + "\n"); } }
public byte MemoryRead(CodeEngine engine, ushort address) { if (address <= m_CodeEngine.Memory.Size) { return(engine.Memory[address]); } else { WriteDebug("1802 Dynarec: Invalid Memory Read Access " + address.ToString("x") + "\n"); return(0); } }
public void Test1() { CodeEngine engine = new CodeEngine(); var template = "<#for(var i=0;i<3;i++){#><#=i#><#}#>"; var result = engine.ToCode(template, null, null); Assert.AreEqual("012", result.Output); Console.WriteLine(result.Output); }
public static void MemoryWrite(CodeEngine engine, ushort address, byte value) { if (address >= 0x7F00) // DMA into video memory { engine.m_VideoInterface.PokePixels(address - 0x7F00, value); } else if (address >= 0 && address < s_CodeEngine.CurrentMemory.Size) { engine.CurrentMemory[address] = value; } else { Console.WriteLine("1802 Dynarec: Invalid Memory Write Access " + address.ToString("x")); } }
public static byte MemoryRead(CodeEngine engine, ushort address) { if (address >= 0x7F00) // DMA into video memory { return(engine.m_VideoInterface.PeekPixels(address - 0x7F00)); } else if (address >= 0 && address < s_CodeEngine.CurrentMemory.Size) { return(engine.CurrentMemory[address]); } else { Console.WriteLine("1802 Dynarec: Invalid Memory Read Access " + address.ToString("x")); return(0); } }
private void PlayBtn_Click(object sender, RoutedEventArgs e) { if (string.Equals(PlayBtn.Content.ToString(), "Play", StringComparison.CurrentCultureIgnoreCase)) { engine = new CodeEngine <TrackFaceSample>(); engine.Run(); PlayBtn.Content = "Stop"; } else { if (engine != null) { engine.Stop(); engine.Dispose(); } PlayBtn.Content = "Play"; } }
public List <IPersistentAttributeInfo> Create(Table table, IPersistentClassInfo owner, IMapperInfo mapperInfo) { var persistentAttributeInfos = new List <IPersistentAttributeInfo>(); if (owner.TypeAttributes.OfType <IPersistentPersistentAttribute>().FirstOrDefault() == null) { persistentAttributeInfos.Add(GetPersistentPersistentAttribute(table.Name)); } if (!(string.IsNullOrEmpty(mapperInfo.NavigationPath)) && owner.TypeAttributes.OfType <IPersistentNavigationItemAttribute>().FirstOrDefault() == null) { var persistentNavigationItemAttribute = ObjectSpace.CreateWCObject <IPersistentNavigationItemAttribute>(); var cleanName = CodeEngine.CleanName(owner.Name); persistentNavigationItemAttribute.Path = mapperInfo.NavigationPath + "/" + cleanName; persistentNavigationItemAttribute.ViewId = cleanName + "_ListView"; persistentAttributeInfos.Add(persistentNavigationItemAttribute); } return(persistentAttributeInfos); }
public IEnumerable <IPersistentAttributeInfo> Create() { var persistentAttributeInfos = new List <IPersistentAttributeInfo>(); if (_persistentClassInfo.TypeAttributes.OfType <IPersistentPersistentAttribute>().FirstOrDefault() == null) { persistentAttributeInfos.Add(GetPersistentPersistentAttribute(_dbTable.Name)); } if (!(string.IsNullOrEmpty(_navigationPath)) && _persistentClassInfo.TypeAttributes.OfType <IPersistentNavigationItemAttribute>().FirstOrDefault() == null) { var persistentNavigationItemAttribute = _objectSpace.CreateWCObject <IPersistentNavigationItemAttribute>(); var cleanName = CodeEngine.CleanName(_persistentClassInfo.Name); persistentNavigationItemAttribute.Path = _navigationPath + "/" + cleanName; persistentNavigationItemAttribute.ViewId = cleanName + "_ListView"; persistentAttributeInfos.Add(persistentNavigationItemAttribute); } return(persistentAttributeInfos); }
public void Call(ushort address, CodeEngine engine) { //// Debugging: Skip certain syscalls //switch (address) //{ // case 0x40e: return; // default: break; //} DynamicMethod syscall; if (!m_CallLookup.TryGetValue(address, out syscall)) { syscall = C1802ILEmitter.CreateSyscallMethod(address, engine); m_CallLookup.Add(address, syscall); } ((MachineCall)syscall.CreateDelegate(typeof(MachineCall)))(engine); }
public void Create() { Dictionary <string, ClassGeneratorInfo> generatorInfos = new ClassGenerator(_persistentAssemblyInfo, _storageTables).CreateAll().ToDictionary(classGeneratorInfo => classGeneratorInfo.PersistentClassInfo.Name); foreach (var classGeneratorInfo in generatorInfos.Where(pair => pair.Value.PersistentClassInfo.CodeTemplateInfo.CodeTemplate.TemplateType == TemplateType.Class)) { var generatorInfo = classGeneratorInfo.Value; new ClassAtrributeGenerator(generatorInfo, _logonObject.NavigationPath).Create().Each(info => generatorInfo.PersistentClassInfo.TypeAttributes.Add(info)); var memberGeneratorInfos = new MemberGenerator(classGeneratorInfo.Value.DbTable, generatorInfos).Create(); memberGeneratorInfos.Each(info => new MemberAttributeGenerator(info, generatorInfo).Create()); } var oneToOneMemberInfos = _persistentAssemblyInfo.PersistentClassInfos.SelectMany(info => info.OwnMembers.OfType <IPersistentReferenceMemberInfo>()).Where(info => info.CodeTemplateInfo.CodeTemplate.TemplateType == TemplateType.XPOneToOnePropertyMember); foreach (var oneToOneMemberInfo in oneToOneMemberInfos) { var codeTemplate = _objectSpace.CreateWCObject <ICodeTemplate>(); codeTemplate.TemplateCode = oneToOneMemberInfo.ReferenceClassInfo.OwnMembers.OfType <IPersistentReferenceMemberInfo>().Single(info => info.CodeTemplateInfo.CodeTemplate.TemplateType == TemplateType.XPOneToOnePropertyMember).Name; oneToOneMemberInfo.TemplateInfos.Add(codeTemplate); } CodeEngine.SupportCompositeKeyPersistentObjects(_persistentAssemblyInfo); CreateAssemblyAttributes(); }
public static ushort ReadFake1802Reg(CodeEngine engine, byte num) { switch (num) { //case 2: return (ushort)engine.m_Stack.Count; case 3: return(s_CurrentAddress); case 5: return((ushort)engine.m_PC); //case 4: return 0; // VIP PC //case 6: return 0; // TOOD: figure out VX selection //case 7: return 0; // TODO: figure out VY selection //case 8: return (ushort)engine.m_ST; //?? case 9: return(engine.m_LastRand); case 10: return(engine.m_IReg); case 11: return(0x7F00); // Return the defualt display pointer (Video RAM DMA pointer default: return(s_Regs[num]); } }
public void Map(Database database, IMapperInfo mapperInfo) { var attributeMapper = new AttributeMapper(_objectSpace); var tableMapper = new TableMapper(_objectSpace, database, attributeMapper); var dataTypeMapper = new DataTypeMapper(); var columnMapper = new ColumnMapper(dataTypeMapper, attributeMapper); Tracing.Tracer.LogSeparator("DBMapper Start mapping database " + database.Name); foreach (Table table in database.Tables.OfType <Table>().Where(table => !(table.IsSystemObject))) { Tracing.Tracer.LogValue("Table", table.Name); IPersistentClassInfo persistentClassInfo = tableMapper.Create(table, _persistentAssemblyInfo, mapperInfo); foreach (Column column in table.Columns) { columnMapper.Create(column, persistentClassInfo); } } _dataStoreLogonObject = (IDataStoreLogonObject)XafTypesInfo.Instance.FindBussinessObjectType <IDataStoreLogonObject>().CreateInstance(new object[] { _persistentAssemblyInfo.Session, _dataStoreLogonObject }); attributeMapper.Create(_persistentAssemblyInfo, _dataStoreLogonObject); Func <ITemplateInfo, bool> templateInfoPredicate = info => info.Name == ExtraInfoBuilder.SupportPersistentObjectsAsAPartOfACompositeKey; CodeEngine.SupportCompositeKeyPersistentObjects(_persistentAssemblyInfo, templateInfoPredicate); }
public static void WriteFake1802Reg(CodeEngine engine, byte num, ushort value) { switch (num) { // should use workable regs anywyas, let game fill in empty vars case 3: s_CurrentAddress = value; break; case 4: s_Regs[4] = value; break; case 5: engine.m_PC = (int)value; break; // case 6: s_Regs[0] = value; break; // TOOD: figure out VX selection //case 7: s_Regs[0] = value; break; // TODO: figure out VY selection case 9: engine.m_LastRand = value; break; case 10: engine.m_IReg = value; break; default: { s_Regs[num] = value; break; //Console.WriteLine("Emitter: Unknown reg write! (" + num.ToString("x") + ")"); break; } } }
public Form1() { InitializeComponent(); codeEngine = new CodeEngine(); this.Load += Form1_Load; }
public CodeAnalyzer(CodeEngine engine) { m_Engine = engine; m_Memory = engine.Memory; }