Ejemplo n.º 1
0
        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"));
        }
Ejemplo n.º 2
0
 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");
 }
Ejemplo n.º 3
0
 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("=================================");
 }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 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");
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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));
        }
Ejemplo n.º 10
0
 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");
     }
 }
Ejemplo n.º 11
0
 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);
     }
 }
Ejemplo n.º 12
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);
        }
Ejemplo n.º 13
0
 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"));
     }
 }
Ejemplo n.º 14
0
 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);
     }
 }
Ejemplo n.º 15
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";
     }
 }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
        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();
        }
Ejemplo n.º 20
0
        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]);
            }
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 22
0
        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;
            }
            }
        }
Ejemplo n.º 23
0
 public Form1()
 {
     InitializeComponent();
     codeEngine = new CodeEngine();
     this.Load += Form1_Load;
 }
Ejemplo n.º 24
0
 public CodeAnalyzer(CodeEngine engine)
 {
     m_Engine = engine;
     m_Memory = engine.Memory;
 }