ds
git-svn-id: https://spexeah.com:8443/svn/Asuro@142 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
96e646091b
commit
805f20ca31
BIN
lib/kernel.ppu
BIN
lib/kernel.ppu
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/libpsystem.a
BIN
lib/libpsystem.a
Binary file not shown.
Binary file not shown.
@ -54,12 +54,16 @@ begin
|
||||
pmemorymanager.init();
|
||||
vmemorymanager.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!!!');
|
||||
if pint^ = 1234 then begin
|
||||
console.writestringln('Read 1234 back from Logical Address $00000000!!!');
|
||||
end;
|
||||
|
||||
while true do begin end;
|
||||
|
||||
//scheduler.init();
|
||||
|
||||
|
@ -31,6 +31,7 @@ var
|
||||
|
||||
procedure init;
|
||||
function new_page(page_number : uint16) : boolean;
|
||||
function map_page(page_number : uint16; block : uint16) : boolean;
|
||||
function new_page_at_address(address : uint32) : boolean;
|
||||
procedure free_page(page_number : uint16);
|
||||
procedure free_page_at_address(address : uint32);
|
||||
@ -57,59 +58,62 @@ var
|
||||
begin
|
||||
console.writestringln('VMM: INIT BEGIN.');
|
||||
PageDirectory:= load_current_page_directory;
|
||||
PageDirectory^[KERNEL_PAGE_NUMBER + 1].Present:= True;
|
||||
PageDirectory^[KERNEL_PAGE_NUMBER + 1].PageSize:= True;
|
||||
PageDirectory^[KERNEL_PAGE_NUMBER + 1].Writable:= True;
|
||||
PageDirectory^[KERNEL_PAGE_NUMBER + 1].Address:= (1 SHL 22);
|
||||
|
||||
PageDirectory^[KERNEL_PAGE_NUMBER + 2].Present:= True;
|
||||
PageDirectory^[KERNEL_PAGE_NUMBER + 2].PageSize:= True;
|
||||
PageDirectory^[KERNEL_PAGE_NUMBER + 2].Writable:= True;
|
||||
PageDirectory^[KERNEL_PAGE_NUMBER + 2].Address:= (2 SHL 22);
|
||||
map_page(KERNEL_PAGE_NUMBER + 1, 1);
|
||||
map_page(KERNEL_PAGE_NUMBER + 2, 2);
|
||||
console.writestringln('VMM: INIT END.');
|
||||
end;
|
||||
|
||||
function map_page(page_number : uint16; block : uint16) : boolean;
|
||||
var
|
||||
addr : ubit20;
|
||||
page : uint16;
|
||||
rldpd : uint32;
|
||||
|
||||
begin
|
||||
map_page:= false;
|
||||
PageDirectory^[page_number].Present:= true;
|
||||
addr:= block;
|
||||
PageDirectory^[page_number].Address:= addr;
|
||||
PageDirectory^[page_number].PageSize:= true;
|
||||
PageDirectory^[page_number].Writable:= true;
|
||||
rldpd:= uint32(PageDirectory) - KERNEL_VIRTUAL_BASE;
|
||||
asm
|
||||
mov eax, rldpd
|
||||
mov CR3, eax
|
||||
end;
|
||||
console.writestringln('New Page Added:');
|
||||
|
||||
console.writestring('- P:');
|
||||
console.writehex(page_number);
|
||||
console.writestring('-->B:');
|
||||
console.writehexln(block);
|
||||
|
||||
console.writestring('- P:[');
|
||||
console.writehex(page_number SHL 22);
|
||||
console.writestring(' - ');
|
||||
console.writehex(((page_number+1) SHL 22));
|
||||
console.writestring(']-->B:[');
|
||||
console.writehex(block SHL 22);
|
||||
console.writestring(' - ');
|
||||
console.writehex(((block+1) SHL 22));
|
||||
console.writestringln(']');
|
||||
map_page:= true;
|
||||
end;
|
||||
|
||||
function new_page(page_number : uint16) : boolean;
|
||||
var
|
||||
block : uint16;
|
||||
page : uint16;
|
||||
rldpd : uint32;
|
||||
|
||||
begin
|
||||
new_page:= false;
|
||||
if PageDirectory^[page_number].Present then exit;
|
||||
//if PageDirectory^[page_number].Reserved 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^[page_number].Present:= true;
|
||||
PageDirectory^[page_number].Address:= block-1;
|
||||
PageDirectory^[page_number].PageSize:= true;
|
||||
PageDirectory^[page_number].Writable:= 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.writehex(page_number);
|
||||
console.writestring('-->B:');
|
||||
console.writehexln(block);
|
||||
|
||||
console.writestring('- P:[');
|
||||
console.writeword(page_number SHL 22);
|
||||
console.writestring(' - ');
|
||||
console.writehex(((page_number+1) SHL 22));
|
||||
console.writestring(']-->B:[');
|
||||
console.writehex(block SHL 22);
|
||||
console.writestring(' - ');
|
||||
console.writehex(((block+1) SHL 22));
|
||||
console.writestringln(']');
|
||||
new_page:= map_page(page_number, block);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user