// ; (No Type Info available) //; Method 'System.Void Cosmos.Kernel.Plugs.CPU.GetCPUId(System.UInt32&, System.UInt32&, System.UInt32&, System.UInt32&, System.UInt32)' //; Locals: //; (none) //; Arguments: //; (0) 16 4 ebp + 018h (Type = System.UInt32&) //; (1) 12 4 ebp + 014h (Type = System.UInt32&) //; (2) 8 4 ebp + 010h (Type = System.UInt32&) //; (3) 4 4 ebp + 0Ch (Type = System.UInt32&) //; (4) 0 4 ebp + 08h (Type = System.UInt32) //; ReturnSize: 0 public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { new CPUx86.ClrInterruptFlag(); new CPUx86.Mov { DestinationReg = CPUx86.Registers.EAX, SourceReg = CPUx86.Registers.EBP, SourceIsIndirect = true, SourceDisplacement = 8 }; new CPUx86.CpuId(); new CPUx86.Mov { DestinationReg = CPUx86.Registers.EDI, SourceReg = CPUx86.Registers.EBP, SourceIsIndirect = true, SourceDisplacement = 0x18 }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.EDI, DestinationIsIndirect = true, SourceReg = CPUx86.Registers.EDX }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.EDI, SourceReg = CPUx86.Registers.EBP, SourceIsIndirect = true, SourceDisplacement = 0x14 }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.EDI, DestinationIsIndirect = true, SourceReg = CPUx86.Registers.ECX }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.EDI, SourceReg = CPUx86.Registers.EBP, SourceIsIndirect = true, SourceDisplacement = 0x10 }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.EDI, DestinationIsIndirect = true, SourceReg = CPUx86.Registers.EBX }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.EDI, SourceReg = CPUx86.Registers.EBP, SourceIsIndirect = true, SourceDisplacement = 0xC }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.EDI, DestinationIsIndirect = true, SourceReg = CPUx86.Registers.EAX }; new CPUx86.Sti(); }
//; Method 'System.UInt32 Cosmos.Kernel.Plugs.CPU.HasCPUIDSupport()' //; Locals: //; (0) 0 4 ebp - 04h (Type = System.UInt32) //; Arguments: //; (none) //; ReturnSize: 4 public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { /*XS.Pushfd(); * new CPUx86.Pop("eax"); * new CPUx86.Move("ecx", "eax"); * * new CPUx86.Xor("eax", "200000h"); * new CPUx86.Push("eax"); * XS.Popfd(); * * XS.Pushfd(); * new CPUx86.Pop("ebx"); * new CPUx86.Xor("eax", "ebx"); * new CPUx86.And("eax", "200000h"); * new CPUx86.JumpIfZero(".not"); * * new CPUx86.Move("eax", "1"); * new CPUx86.Jump(".return"); * * new CPUAll.Label(".not"); * new CPUx86.Xor("eax", "eax"); * * new CPUAll.Label(".return"); * new CPUx86.Push("ecx"); * XS.Popfd(); * * new CPUx86.Push("eax");*/ XS.Push(0); }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { new CPUx86.Mov { DestinationReg = CPUx86.Registers.EAX, SourceReg = CPUx86.Registers.ESP, SourceIsIndirect = true, SourceDisplacement = 0x8 }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.CR3, SourceReg = CPUx86.Registers.EAX }; }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { XS.Mov(XSRegisters.EAX, CPUAll.ElementReference.New("MultiBootInfo_Memory_High"), sourceIsIndirect: true); XS.Xor(XSRegisters.EDX, XSRegisters.CPUx86.Registers.EDX); XS.Mov(XSRegisters.ECX, 1024); XS.Divide(XSRegisters.ECX); XS.Add(XSRegisters.EAX, 1); XS.Push(XSRegisters.EAX); }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { new CPUx86.Mov { DestinationReg = CPUx86.Registers.EAX, SourceReg = CPUx86.Registers.CR4 }; new CPUx86.And { DestinationReg = CPUx86.Registers.EAX, SourceValue = 0xFFFFFFEF }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.CR4, SourceReg = CPUx86.Registers.EAX }; }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { //ACPI Way...ONLY QEMu And Boschs XS.Mov(XSRegisters.DX, 0xB004); new CPUx86.Mov { DestinationReg = CPUx86.Registers.AX, SourceValue = 0x0 | 0x2000 }; new CPUx86.Out { DestinationReg = CPUx86.Registers.AX, Size = (byte)CPUx86.Instruction.InstructionSize.Word }; //TODO: ACPI Way...see http://forum.osdev.org/viewtopic.php?t=16990 }
// ; (No Type Info available) //; Method 'System.Void Cosmos.Kernel.Plugs.CPU.GetCPUId(System.UInt32&, System.UInt32&, System.UInt32&, System.UInt32&, System.UInt32)' //; Locals: //; (none) //; Arguments: //; (0) 16 4 ebp + 018h (Type = System.UInt32&) //; (1) 12 4 ebp + 014h (Type = System.UInt32&) //; (2) 8 4 ebp + 010h (Type = System.UInt32&) //; (3) 4 4 ebp + 0Ch (Type = System.UInt32&) //; (4) 0 4 ebp + 08h (Type = System.UInt32) //; ReturnSize: 0 public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { new CPUx86.ClrInterruptFlag(); XS.Mov(XSRegisters.EAX, XSRegisters.EBP, sourceDisplacement: 8); XS.CpuId(); XS.Mov(XSRegisters.EDI, XSRegisters.EBP, sourceDisplacement: 0x18); XS.Mov(XSRegisters.EDI, XSRegisters.EDX, destinationIsIndirect: true); XS.Mov(XSRegisters.EDI, XSRegisters.EBP, sourceDisplacement: 0x14); XS.Mov(XSRegisters.EDI, XSRegisters.ECX, destinationIsIndirect: true); XS.Mov(XSRegisters.EDI, XSRegisters.EBP, sourceDisplacement: 0x10); XS.Mov(XSRegisters.EDI, XSRegisters.EBX, destinationIsIndirect: true); XS.Mov(XSRegisters.EDI, XSRegisters.EBP, sourceDisplacement: 0xC); XS.Mov(XSRegisters.EDI, XSRegisters.EAX, destinationIsIndirect: true); XS.Sti(); }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { new CPUx86.Mov { DestinationReg = CPUx86.Registers.EAX, SourceRef = CPUAll.ElementReference.New("MultiBootInfo_Memory_High"), SourceIsIndirect = true }; new CPUx86.Xor { DestinationReg = CPUx86.Registers.EDX, SourceReg = CPUx86.Registers.EDX }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.ECX, SourceValue = 1024 }; new CPUx86.Divide { DestinationReg = CPUx86.Registers.ECX }; new CPUx86.Add { DestinationReg = CPUx86.Registers.EAX, SourceValue = 1 }; new CPUx86.Push { DestinationReg = CPUx86.Registers.EAX }; }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { new CPUx86.ClrInterruptFlag(); /* Clear all keyboard buffers (output and command buffers) */ new CPUAll.Label(".waitBuffer"); XS.Mov(XSRegisters.DX, 0x64); XS.InFromDX(XSRegisters.AL); XS.Test(XSRegisters.AL, 2); XS.Jump(ConditionalTestEnum.NotEqual, ".waitBuffer"); XS.Mov(XSRegisters.AL, 0xD1); XS.Mov(XSRegisters.DX, 0x64); XS.OutToDX(XSRegisters.AL); new CPUAll.Label(".clearBuffer"); XS.Mov(XSRegisters.DX, 0x64); XS.InFromDX(XSRegisters.AL); XS.Test(XSRegisters.AL, 2); XS.Jump(ConditionalTestEnum.NotEqual, ".clearBuffer"); XS.Mov(XSRegisters.AL, 0xFE); XS.Mov(XSRegisters.DX, 0x60); XS.OutToDX(XSRegisters.AL); new CPUAll.Label(".loop");//failed... halt XS.Halt(); XS.Jump(".loop"); }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { XS.FloatInit(); }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { XS.Mov(XSRegisters.EAX, XSRegisters.ESP, sourceDisplacement: 0x8); XS.Mov(XSRegisters.CR3, XSRegisters.CPUx86.Registers.EAX); }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { new CPUx86.ClrInterruptFlag(); /* Clear all keyboard buffers (output and command buffers) */ new CPUAll.Label(".waitBuffer"); new CPUx86.Mov { SourceValue = 0x64, DestinationReg = CPUx86.Registers.DX }; new CPUx86.IN { DestinationReg = CPUx86.Registers.AL }; new CPUx86.Test { DestinationReg = CPUx86.Registers.AL, SourceValue = 2 }; new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.NotEqual, DestinationLabel = ".waitBuffer" }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.AL, SourceValue = 0xD1 }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.DX, SourceValue = 0x64 }; new CPUx86.Out { DestinationReg = CPUx86.Registers.AL }; new CPUAll.Label(".clearBuffer"); new CPUx86.Mov { SourceValue = 0x64, DestinationReg = CPUx86.Registers.DX }; new CPUx86.IN { DestinationReg = CPUx86.Registers.AL }; new CPUx86.Test { DestinationReg = CPUx86.Registers.AL, SourceValue = 2 }; new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.NotEqual, DestinationLabel = ".clearBuffer" }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.AL, SourceValue = 0xFE }; new CPUx86.Mov { DestinationReg = CPUx86.Registers.DX, SourceValue = 0x60 }; new CPUx86.Out { DestinationReg = CPUx86.Registers.AL }; new CPUAll.Label(".loop");//failed... halt new CPUx86.Halt(); new CPUx86.Jump { DestinationLabel = ".loop" }; }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { XS.Mov(XSRegisters.EAX, XSRegisters.CPUx86.Registers.CR0); XS.And(XSRegisters.EAX, 0x7FFFFFFF); XS.Mov(XSRegisters.CR0, XSRegisters.CPUx86.Registers.EAX); }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { XS.Mov(XSRegisters.EAX, XSRegisters.CPUx86.Registers.CR4); XS.Or(XSRegisters.EAX, 0x00000010); XS.Mov(XSRegisters.CR4, XSRegisters.CPUx86.Registers.EAX); }
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) { new CPUx86.x87.FloatInit(); }