diff --git a/Asuro.iso b/Asuro.iso index 389f2825..87a71e02 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 50bc8114..b3fbbd14 100755 Binary files a/bin/kernel.bin and b/bin/kernel.bin differ diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index 50bc8114..b3fbbd14 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/bios_data_area.ppu b/lib/bios_data_area.ppu index 383ab212..ff719010 100644 Binary files a/lib/bios_data_area.ppu and b/lib/bios_data_area.ppu differ diff --git a/lib/console.ppu b/lib/console.ppu index 5c416903..6b2854d6 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/gdt.ppu b/lib/gdt.ppu index ee1a1d55..498c76d0 100644 Binary files a/lib/gdt.ppu and b/lib/gdt.ppu differ diff --git a/lib/idt.ppu b/lib/idt.ppu index 0a206c20..4153bcec 100644 Binary files a/lib/idt.ppu and b/lib/idt.ppu differ diff --git a/lib/irq.ppu b/lib/irq.ppu index 8d3bb7b8..0acfaa37 100644 Binary files a/lib/irq.ppu and b/lib/irq.ppu differ diff --git a/lib/isr.ppu b/lib/isr.ppu index 4848de78..c4aa5869 100644 Binary files a/lib/isr.ppu and b/lib/isr.ppu differ diff --git a/lib/isr0.ppu b/lib/isr0.ppu index f255977e..ef5fd818 100644 Binary files a/lib/isr0.ppu and b/lib/isr0.ppu differ diff --git a/lib/isr1.ppu b/lib/isr1.ppu index b5313edd..d82a86e0 100644 Binary files a/lib/isr1.ppu and b/lib/isr1.ppu differ diff --git a/lib/isr10.ppu b/lib/isr10.ppu index f1926922..597cc11e 100644 Binary files a/lib/isr10.ppu and b/lib/isr10.ppu differ diff --git a/lib/isr11.ppu b/lib/isr11.ppu index b775a154..56baa4f0 100644 Binary files a/lib/isr11.ppu and b/lib/isr11.ppu differ diff --git a/lib/isr12.ppu b/lib/isr12.ppu index eb02d3e5..5dffa8d7 100644 Binary files a/lib/isr12.ppu and b/lib/isr12.ppu differ diff --git a/lib/isr13.ppu b/lib/isr13.ppu index 5221f7c6..09826754 100644 Binary files a/lib/isr13.ppu and b/lib/isr13.ppu differ diff --git a/lib/isr14.ppu b/lib/isr14.ppu index 3b0fb447..f9b1c99b 100644 Binary files a/lib/isr14.ppu and b/lib/isr14.ppu differ diff --git a/lib/isr15.ppu b/lib/isr15.ppu index d7208889..d64ceb8c 100644 Binary files a/lib/isr15.ppu and b/lib/isr15.ppu differ diff --git a/lib/isr16.ppu b/lib/isr16.ppu index 418a7b60..9f66d2c2 100644 Binary files a/lib/isr16.ppu and b/lib/isr16.ppu differ diff --git a/lib/isr17.ppu b/lib/isr17.ppu index 76f6c794..523c2966 100644 Binary files a/lib/isr17.ppu and b/lib/isr17.ppu differ diff --git a/lib/isr18.ppu b/lib/isr18.ppu index 940649ec..147eeb35 100644 Binary files a/lib/isr18.ppu and b/lib/isr18.ppu differ diff --git a/lib/isr2.ppu b/lib/isr2.ppu index c8b0a4dd..8f9da643 100644 Binary files a/lib/isr2.ppu and b/lib/isr2.ppu differ diff --git a/lib/isr3.ppu b/lib/isr3.ppu index e8ff35a0..a7abd107 100644 Binary files a/lib/isr3.ppu and b/lib/isr3.ppu differ diff --git a/lib/isr32.ppu b/lib/isr32.ppu index db28b7ae..668a3864 100644 Binary files a/lib/isr32.ppu and b/lib/isr32.ppu differ diff --git a/lib/isr33.ppu b/lib/isr33.ppu index dacb7aee..6bf666e1 100644 Binary files a/lib/isr33.ppu and b/lib/isr33.ppu differ diff --git a/lib/isr4.ppu b/lib/isr4.ppu index cef14086..c9abc04f 100644 Binary files a/lib/isr4.ppu and b/lib/isr4.ppu differ diff --git a/lib/isr40.ppu b/lib/isr40.ppu index 2d3ad2fe..67318eb7 100644 Binary files a/lib/isr40.ppu and b/lib/isr40.ppu differ diff --git a/lib/isr5.ppu b/lib/isr5.ppu index 9850a26c..e112eb47 100644 Binary files a/lib/isr5.ppu and b/lib/isr5.ppu differ diff --git a/lib/isr6.ppu b/lib/isr6.ppu index ee3ab42a..96ed6873 100644 Binary files a/lib/isr6.ppu and b/lib/isr6.ppu differ diff --git a/lib/isr7.ppu b/lib/isr7.ppu index 598005dd..c7510aaa 100644 Binary files a/lib/isr7.ppu and b/lib/isr7.ppu differ diff --git a/lib/isr8.ppu b/lib/isr8.ppu index e3e839e1..0a4cc43b 100644 Binary files a/lib/isr8.ppu and b/lib/isr8.ppu differ diff --git a/lib/isr9.ppu b/lib/isr9.ppu index 1137442a..0b016773 100644 Binary files a/lib/isr9.ppu and b/lib/isr9.ppu differ diff --git a/lib/isr_types.ppu b/lib/isr_types.ppu index 938a2a1c..21010f08 100644 Binary files a/lib/isr_types.ppu and b/lib/isr_types.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index ebef6820..e80a03db 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index 740580be..84a5660f 100644 Binary files a/lib/keyboard.ppu and b/lib/keyboard.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 308b368d..1f73006c 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 74dae6b1..0053aa03 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 777a6780..fc7c73a5 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/multiboot.ppu b/lib/multiboot.ppu index c97dd0c2..831f0fe6 100644 Binary files a/lib/multiboot.ppu and b/lib/multiboot.ppu differ diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index de5668bd..a10ff16d 100644 Binary files a/lib/pmemorymanager.ppu and b/lib/pmemorymanager.ppu differ diff --git a/lib/system.o b/lib/system.o index 6db25fd7..d41d8c6c 100644 Binary files a/lib/system.o and b/lib/system.o differ diff --git a/lib/system.ppu b/lib/system.ppu index bbc70c3f..d3908f7c 100644 Binary files a/lib/system.ppu and b/lib/system.ppu differ diff --git a/lib/util.ppu b/lib/util.ppu index 02b996b8..c8cd40fc 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index 652efeb8..93d513c8 100644 Binary files a/lib/vmemorymanager.ppu and b/lib/vmemorymanager.ppu differ diff --git a/src/kernel.pas b/src/kernel.pas index c695e56e..5389c5b2 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -14,8 +14,8 @@ uses bios_data_area, keyboard, vmemorymanager, - pmemorymanager, - scheduler; + pmemorymanager; + //scheduler; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; @@ -53,7 +53,13 @@ begin irq.init(); pmemorymanager.init(); vmemorymanager.init(); - scheduler.init(); + + vmemorymanager.new_page(0); + pint:= puint32(0); + console.writestringln('Writing 1234 to Logical Address $00000000'); + pint^:= 1234; + if pint^ = 1234 then console.writestringln('Read 1234 back from Logical Address $00000000!!!'); + //scheduler.init(); STI; isr32.hook(uint32(@bios_data_area.tick_update)); diff --git a/src/pmemorymanager.pas b/src/pmemorymanager.pas index 533b3952..dad6c187 100644 --- a/src/pmemorymanager.pas +++ b/src/pmemorymanager.pas @@ -14,8 +14,8 @@ type TPhysicalMemory = array[0..1023] of TPhysicalMemoryEntry; procedure init; -function newblock(caller : uint32) : uint16; -procedure freeblock(block : uint16; caller : uint32); +function new_block(caller : uint32) : uint16; +procedure free_block(block : uint16; caller : uint32); implementation @@ -24,6 +24,7 @@ var procedure init; begin + console.writestringln('PMM: INIT BEGIN.'); with PhysicalMemory[0] do begin Present:= True; MappedTo:= 0; @@ -32,25 +33,33 @@ begin Present:= True; MappedTo:= 0; end; + console.writestringln('PMM: INIT END.'); end; -function newblock(caller : uint32) : uint16; +function new_block(caller : uint32) : uint16; var i : uint16; begin - newblock:= 0; + new_block:= 0; for i:=2 to 1023 do begin if not PhysicalMemory[i].Present then begin PhysicalMemory[i].Present:= True; PhysicalMemory[i].MappedTo:= caller; - newblock:= i; + new_block:= i; + console.writestring('4MiB Block Added @ '); + console.writeword(i); + console.writestring(' ['); + console.writeword(i SHL 22); + console.writestring(' - '); + console.writeword((i+1 SHL 22)-1); + console.writestringln(']'); exit; end; end; end; -procedure freeblock(block : uint16; caller : uint32); +procedure free_block(block : uint16; caller : uint32); begin if block > 1023 then begin GPF; @@ -60,7 +69,7 @@ begin GPF; exit; end; - if PhysicalMemory[block].caller <> caller then begin + if PhysicalMemory[block].MappedTo <> caller then begin GPF; exit; end; diff --git a/src/scheduler.pas b/src/scheduler.pas index a6225113..2e518b39 100644 --- a/src/scheduler.pas +++ b/src/scheduler.pas @@ -5,7 +5,7 @@ interface uses console, isr32, - pmemorymanager; + lmemorymanager; const Quantum = 64; diff --git a/src/vmemorymanager.pas b/src/vmemorymanager.pas index 5fcd2c5d..fc10cecb 100644 --- a/src/vmemorymanager.pas +++ b/src/vmemorymanager.pas @@ -33,6 +33,7 @@ procedure init; function new_page(page_number : uint16) : boolean; function new_page_at_address(address : uint32) : boolean; procedure free_page(page_number : uint16); +procedure free_page_at_address(address : uint32); implementation @@ -63,20 +64,42 @@ function new_page(page_number : uint16) : boolean; var block : uint16; page : uint16; + rldpd : uint32; begin new_page:= false; - if PageDirectory^[block].Present then exit; - if PageDirectory^[block].Reserved then exit; - block:= pmemorymanager.newblock(uint32(PageDirectory)); + if PageDirectory^[page_number].Present then exit; + if PageDirectory^[page_number].Reserved then exit; + block:= pmemorymanager.new_block(uint32(PageDirectory)); if block < 2 then begin GPF; exit; end else begin - PageDirectory^[block].Present:= true; - PageDirectory^[block].Address:= block; - PageDirectory^[block].PageSize:= true; + PageDirectory^[page_number].Present:= true; + PageDirectory^[page_number].Address:= block; + PageDirectory^[page_number].PageSize:= true; + rldpd:= uint32(PageDirectory) - KERNEL_VIRTUAL_BASE; + asm + mov eax, rldpd + mov CR3, eax + end; new_page:= true; + console.writestringln('New Page Added:'); + + console.writestring('- P:'); + console.writeword(page_number); + console.writestring('-->B:'); + console.writewordln(block); + + console.writestring('- P:['); + console.writeword(page_number SHL 22); + console.writestring(' - '); + console.writeword((page_number+1 SHL 22) - 1); + console.writestring(']-->B:['); + console.writeword(block SHL 22); + console.writestring(' - '); + console.writeword((block+1 SHL 22) - 1); + console.writestringln(']'); end; end; @@ -90,17 +113,22 @@ begin end; procedure free_page(page_number : uint16); +var + block : uint16; + begin if PageDirectory^[page_number].Present then begin + block:= PageDirectory^[page_number].Address; asm invlpg [page_number] - end; + end; + pmemorymanager.free_block(block, uint32(PageDirectory)); end else begin GPF; end; end; -function free_page_at_address(address : uint32); +procedure free_page_at_address(address : uint32); var page_number : uint16;