Memory Manager Started.
git-svn-id: https://spexeah.com:8443/svn/Asuro@103 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
1414f10ba1
commit
c595bfb819
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/libpsystem.a
BIN
lib/libpsystem.a
Binary file not shown.
@ -26,6 +26,7 @@ var
|
||||
mbm : uint32;
|
||||
z : uint32;
|
||||
dds : uint32;
|
||||
pint : puint32;
|
||||
|
||||
begin
|
||||
mbi:= mbinfo;
|
||||
@ -46,6 +47,14 @@ begin
|
||||
isr.init();
|
||||
irq.init();
|
||||
|
||||
memorymanager.init();
|
||||
pint:= kalloc(sizeof(uint32));
|
||||
if pint = nil then console.writestringln('!');
|
||||
pint^:= 1234;
|
||||
console.writeintln(pint^);
|
||||
pint:= kalloc(18);
|
||||
util.halt_and_catch_fire;
|
||||
|
||||
STI;
|
||||
isr32.hook(uint32(@bios_data_area.tick_update));
|
||||
|
||||
|
@ -3,7 +3,8 @@ unit memorymanager;
|
||||
interface
|
||||
|
||||
uses
|
||||
util;
|
||||
util,
|
||||
console;
|
||||
|
||||
const
|
||||
ALLOC_SPACE = 8; //64-Bit Allocations
|
||||
@ -17,16 +18,47 @@ implementation
|
||||
|
||||
var
|
||||
Memory_Start : uint32;
|
||||
Memory_Manager : bitpacked array[1..MAX_ENTRIES] of Boolean;
|
||||
Memory_Manager : packed array[1..MAX_ENTRIES] of Boolean;
|
||||
|
||||
procedure init;
|
||||
var
|
||||
i : uint32;
|
||||
|
||||
begin
|
||||
For i:=0 to MAX_ENTRIES-1 do begin
|
||||
Memory_Manager[i]:= false;
|
||||
end;
|
||||
Memory_Start:= uint32(@util.endptr);
|
||||
end;
|
||||
|
||||
function kalloc(size : uint32) : void;
|
||||
var
|
||||
blocks : uint32;
|
||||
rem : uint32;
|
||||
i,j : uint32;
|
||||
miss : boolean;
|
||||
|
||||
begin
|
||||
kalloc:= void(0);
|
||||
blocks:= size div 8;
|
||||
rem:= size - (blocks * 8);
|
||||
if rem > 0 then blocks:= blocks + 1;
|
||||
kalloc:= nil;
|
||||
for i:=0 to MAX_ENTRIES-1 do begin
|
||||
miss:= false;
|
||||
for j:=0 to blocks-1 do begin
|
||||
if Memory_Manager[i+j] then miss:= true;
|
||||
end;
|
||||
if not miss then begin
|
||||
kalloc:= void(Memory_Start+(i * 8));
|
||||
for j:=0 to blocks-1 do begin
|
||||
Memory_Manager[i+j]:= true;
|
||||
end;
|
||||
console.writestring('Allocated ');
|
||||
console.writeint(blocks);
|
||||
console.writestringln(' Block(s).');
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure kfree(area : void);
|
||||
|
Loading…
x
Reference in New Issue
Block a user