mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-27 22:12:25 +00:00
Started on Memory Protection
This commit is contained in:
parent
22b6e45022
commit
f298dadc1b
1 changed files with 23 additions and 4 deletions
|
|
@ -26,12 +26,31 @@ namespace Cosmos.Kernel.Plugs.Assemblers {
|
|||
+ ", 0xFF,0xFF,0,0,0,0x93,0xCF,0"
|
||||
// SS
|
||||
+ ", 0xFF,0xFF,0,0,0,0x93,0xCF,0";
|
||||
aAssembler.DataMembers.Add(new KeyValuePair<string, DataMember> (aAssembler.CurrentGroup,new DataMember(xFieldName, "db", xFieldData)));
|
||||
xFieldName = "_NATIVE_GDT_Pointer";
|
||||
//xFieldData = "0x17, (_NATIVE_GDT_Contents and 0xFFFF), (_NATIVE_GDT_Contents shr 16)";
|
||||
aAssembler.DataMembers.Add(new KeyValuePair<string, DataMember> (aAssembler.CurrentGroup,new DataMember(xFieldName, "dw", "0x37,0,0")));
|
||||
//aAssembler.DataMembers.Add(new KeyValuePair<string, DataMember> (aAssembler.CurrentGroup,new DataMember(xFieldName, "db", xFieldData)));
|
||||
//xFieldName = "_NATIVE_GDT_Pointer";
|
||||
////xFieldData = "0x17, (_NATIVE_GDT_Contents and 0xFFFF), (_NATIVE_GDT_Contents shr 16)";
|
||||
//aAssembler.DataMembers.Add(new KeyValuePair<string, DataMember> (aAssembler.CurrentGroup,new DataMember(xFieldName, "dw", "0x37,0,0")));
|
||||
|
||||
aAssembler.DataMembers.Add(new KeyValuePair<string, DataMember>(aAssembler.CurrentGroup, new DataMember(xFieldName, "db", xFieldData)));
|
||||
aAssembler.DataMembers.Add(new KeyValuePair<string, DataMember>(aAssembler.CurrentGroup, new DataMember("_NATIVE_GDT_Pointer", "dw", "0x37,0,0")));
|
||||
|
||||
new CPUx86.Move(Registers.EAX, "_NATIVE_GDT_Pointer");
|
||||
new CPUx86.Move("dword [_NATIVE_GDT_Pointer + 2]", "_NATIVE_GDT_Contents");
|
||||
|
||||
//Memory Protection
|
||||
//new CPUx86.Move(Registers.EAX, "Kernel_Start");
|
||||
//new CPUx86.ShiftRight(Registers.EAX, "12");
|
||||
//new CPUx86.Move(Registers.AX, "[" + xFieldName + " + 10]");
|
||||
//new CPUx86.ShiftRight(Registers.EAX, "16");
|
||||
//new CPUx86.Move(Registers.AL, "[" + xFieldName + " + 12]");
|
||||
//new CPUx86.Move(Registers.EAX, "(_end_data - Kernel_Start)");
|
||||
//new CPUx86.ShiftRight(Registers.EAX, "12");
|
||||
//new CPUx86.Move(Registers.AX, "[" + xFieldName + " + 8]");
|
||||
//new CPUx86.ShiftRight(Registers.EAX, "16");
|
||||
////Note; the uppto part of the limit is skipped
|
||||
////new CPUx86.Move(Registers.AL, "[" + xFieldName + " + 12]");
|
||||
|
||||
|
||||
new Label(".RegisterGDT");
|
||||
new CPUNative.Lgdt(Registers.AtEAX);
|
||||
new CPUx86.Move(Registers.AX, "0x10");
|
||||
|
|
|
|||
Loading…
Reference in a new issue