Updated the KernelInformationStruct, added BGA (Bochs Graphics Extensions) mode termimal, added new system calls to get terminal width. Updated world.bin to calculate sizes. Fixed a bug where GetExhaustive would crash when given a completely null path. Started work on V86 for VBE support.
This commit is contained in:
+16
-12
@@ -38,7 +38,7 @@ tss_struct tss = (tss_struct) {
|
||||
.ldtr = 0,
|
||||
._reserved10 = 0,
|
||||
._reserved11 = 0,
|
||||
.iopb = 104
|
||||
.iopb = sizeof(tss_struct)
|
||||
};
|
||||
|
||||
constexpr gdt_entry::gdt_entry(uint32_t limit, uint32_t base, bool rw, bool exec, bool system, uint8_t ring) :
|
||||
@@ -77,25 +77,29 @@ constexpr gdt_entry::gdt_entry() :
|
||||
base_hi(0)
|
||||
{}
|
||||
|
||||
gdt_entry gdt[] = {
|
||||
gdt_entry(), // Null Segment
|
||||
gdt_entry(0xfffff, 0, 1, 1, 1, 0), // Kernel Code Segment
|
||||
gdt_entry(0xfffff, 0, 1, 0, 1, 0), // Kernel Data Segment
|
||||
gdt_and_iopb gai = {
|
||||
.gdt = {
|
||||
gdt_entry(), // Null Segment
|
||||
gdt_entry(0xfffff, 0, 1, 1, 1, 0), // Kernel Code Segment
|
||||
gdt_entry(0xfffff, 0, 1, 0, 1, 0), // Kernel Data Segment
|
||||
|
||||
gdt_entry(0xfffff, 0, 1, 1, 1, 3), // User Code Segment
|
||||
gdt_entry(0xfffff, 0, 1, 0, 1, 3), // User Data Segment
|
||||
gdt_entry(0xfffff, 0, 1, 1, 1, 3), // User Code Segment
|
||||
gdt_entry(0xfffff, 0, 1, 0, 1, 3), // User Data Segment
|
||||
|
||||
gdt_entry() // Empty Task State Segment
|
||||
gdt_entry() // Empty Task State Segment
|
||||
}
|
||||
};
|
||||
|
||||
gdt_descr descr = (gdt_descr){
|
||||
.size = sizeof(gdt) - 1,
|
||||
.offset = gdt,
|
||||
.size = sizeof(gai.gdt) - 1,
|
||||
.offset = gai.gdt,
|
||||
};
|
||||
|
||||
void init_gdt() {
|
||||
gdt[5] = gdt_entry(sizeof(tss), &tss, 0, 1, 0, 0); // Initialise the TSS.
|
||||
gdt[5].accessed = 1;
|
||||
gai.gdt[5] = gdt_entry(sizeof(tss) + 8193, &tss, 0, 1, 0, 0); // Initialise the TSS.
|
||||
gai.gdt[5].accessed = 1;
|
||||
for (int i=0; i<8192; i++)
|
||||
gai.iopb[i] = 0;
|
||||
asm volatile("lgdt %0;"
|
||||
"mov $0x10, %%eax;"
|
||||
"mov %%eax, %%ss;"
|
||||
|
||||
Reference in New Issue
Block a user