Started on Memory Protection

This commit is contained in:
Scalpel_cp 2008-06-10 17:15:35 +00:00
parent 22b6e45022
commit f298dadc1b

View file

@ -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");