mirror of
https://github.com/danbulant/Cosmos
synced 2026-06-05 07:42:45 +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"
|
+ ", 0xFF,0xFF,0,0,0,0x93,0xCF,0"
|
||||||
// SS
|
// SS
|
||||||
+ ", 0xFF,0xFF,0,0,0,0x93,0xCF,0";
|
+ ", 0xFF,0xFF,0,0,0,0x93,0xCF,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(xFieldName, "db", xFieldData)));
|
||||||
xFieldName = "_NATIVE_GDT_Pointer";
|
//xFieldName = "_NATIVE_GDT_Pointer";
|
||||||
//xFieldData = "0x17, (_NATIVE_GDT_Contents and 0xFFFF), (_NATIVE_GDT_Contents shr 16)";
|
////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, "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(Registers.EAX, "_NATIVE_GDT_Pointer");
|
||||||
new CPUx86.Move("dword [_NATIVE_GDT_Pointer + 2]", "_NATIVE_GDT_Contents");
|
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 Label(".RegisterGDT");
|
||||||
new CPUNative.Lgdt(Registers.AtEAX);
|
new CPUNative.Lgdt(Registers.AtEAX);
|
||||||
new CPUx86.Move(Registers.AX, "0x10");
|
new CPUx86.Move(Registers.AX, "0x10");
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue