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();
|
pmemorymanager.init();
|
||||||
vmemorymanager.init();
|
vmemorymanager.init();
|
||||||
|
|
||||||
//
|
|
||||||
vmemorymanager.new_page(0);
|
vmemorymanager.new_page(0);
|
||||||
pint:= puint32(0);
|
pint:= puint32(0);
|
||||||
|
|
||||||
console.writestringln('Writing 1234 to Logical Address $00000000');
|
console.writestringln('Writing 1234 to Logical Address $00000000');
|
||||||
pint^:= 1234;
|
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();
|
//scheduler.init();
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ var
|
|||||||
|
|
||||||
procedure init;
|
procedure init;
|
||||||
function new_page(page_number : uint16) : boolean;
|
function new_page(page_number : uint16) : boolean;
|
||||||
|
function map_page(page_number : uint16; block : uint16) : boolean;
|
||||||
function new_page_at_address(address : uint32) : boolean;
|
function new_page_at_address(address : uint32) : boolean;
|
||||||
procedure free_page(page_number : uint16);
|
procedure free_page(page_number : uint16);
|
||||||
procedure free_page_at_address(address : uint32);
|
procedure free_page_at_address(address : uint32);
|
||||||
@ -57,35 +58,22 @@ var
|
|||||||
begin
|
begin
|
||||||
console.writestringln('VMM: INIT BEGIN.');
|
console.writestringln('VMM: INIT BEGIN.');
|
||||||
PageDirectory:= load_current_page_directory;
|
PageDirectory:= load_current_page_directory;
|
||||||
PageDirectory^[KERNEL_PAGE_NUMBER + 1].Present:= True;
|
map_page(KERNEL_PAGE_NUMBER + 1, 1);
|
||||||
PageDirectory^[KERNEL_PAGE_NUMBER + 1].PageSize:= True;
|
map_page(KERNEL_PAGE_NUMBER + 2, 2);
|
||||||
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);
|
|
||||||
console.writestringln('VMM: INIT END.');
|
console.writestringln('VMM: INIT END.');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function new_page(page_number : uint16) : boolean;
|
function map_page(page_number : uint16; block : uint16) : boolean;
|
||||||
var
|
var
|
||||||
block : uint16;
|
addr : ubit20;
|
||||||
page : uint16;
|
page : uint16;
|
||||||
rldpd : uint32;
|
rldpd : uint32;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
new_page:= false;
|
map_page:= false;
|
||||||
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^[page_number].Present:= true;
|
PageDirectory^[page_number].Present:= true;
|
||||||
PageDirectory^[page_number].Address:= block-1;
|
addr:= block;
|
||||||
|
PageDirectory^[page_number].Address:= addr;
|
||||||
PageDirectory^[page_number].PageSize:= true;
|
PageDirectory^[page_number].PageSize:= true;
|
||||||
PageDirectory^[page_number].Writable:= true;
|
PageDirectory^[page_number].Writable:= true;
|
||||||
rldpd:= uint32(PageDirectory) - KERNEL_VIRTUAL_BASE;
|
rldpd:= uint32(PageDirectory) - KERNEL_VIRTUAL_BASE;
|
||||||
@ -93,7 +81,6 @@ begin
|
|||||||
mov eax, rldpd
|
mov eax, rldpd
|
||||||
mov CR3, eax
|
mov CR3, eax
|
||||||
end;
|
end;
|
||||||
new_page:= true;
|
|
||||||
console.writestringln('New Page Added:');
|
console.writestringln('New Page Added:');
|
||||||
|
|
||||||
console.writestring('- P:');
|
console.writestring('- P:');
|
||||||
@ -102,7 +89,7 @@ begin
|
|||||||
console.writehexln(block);
|
console.writehexln(block);
|
||||||
|
|
||||||
console.writestring('- P:[');
|
console.writestring('- P:[');
|
||||||
console.writeword(page_number SHL 22);
|
console.writehex(page_number SHL 22);
|
||||||
console.writestring(' - ');
|
console.writestring(' - ');
|
||||||
console.writehex(((page_number+1) SHL 22));
|
console.writehex(((page_number+1) SHL 22));
|
||||||
console.writestring(']-->B:[');
|
console.writestring(']-->B:[');
|
||||||
@ -110,6 +97,23 @@ begin
|
|||||||
console.writestring(' - ');
|
console.writestring(' - ');
|
||||||
console.writehex(((block+1) SHL 22));
|
console.writehex(((block+1) SHL 22));
|
||||||
console.writestringln(']');
|
console.writestringln(']');
|
||||||
|
map_page:= true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function new_page(page_number : uint16) : boolean;
|
||||||
|
var
|
||||||
|
block : uint16;
|
||||||
|
|
||||||
|
begin
|
||||||
|
new_page:= false;
|
||||||
|
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
|
||||||
|
new_page:= map_page(page_number, block);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user