Things.
git-svn-id: https://spexeah.com:8443/svn/Asuro@171 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
d1e6d28f90
commit
b7d7f17c3a
BIN
lib/PCI.ppu
Normal file
BIN
lib/PCI.ppu
Normal file
Binary file not shown.
BIN
lib/lmemorymanager.ppu
Normal file
BIN
lib/lmemorymanager.ppu
Normal file
Binary file not shown.
BIN
lib/tss.ppu
Normal file
BIN
lib/tss.ppu
Normal file
Binary file not shown.
17
src/processloader.pas
Normal file
17
src/processloader.pas
Normal file
@ -0,0 +1,17 @@
|
||||
{ ************************************************
|
||||
* Asuro
|
||||
* Unit: ProcessLoader
|
||||
* Description: Loads a Process and any related
|
||||
* structers into memory ready for
|
||||
* execution.
|
||||
************************************************
|
||||
* Author: K Morris
|
||||
* Contributors:
|
||||
************************************************ }
|
||||
unit processloader;
|
||||
|
||||
interface
|
||||
|
||||
implementation;
|
||||
|
||||
end.
|
104
src/tss.pas
Normal file
104
src/tss.pas
Normal file
@ -0,0 +1,104 @@
|
||||
{ ************************************************
|
||||
* Asuro
|
||||
* Unit: tss
|
||||
* Description: Representation of Kernel Space to
|
||||
* Enable System Calls Via Interrupts.
|
||||
************************************************
|
||||
* Author: K Morris
|
||||
* Contributors:
|
||||
************************************************ }
|
||||
unit tss;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
gdt,
|
||||
vmemorymanager,
|
||||
console;
|
||||
|
||||
type
|
||||
TTaskStateSegment = packed record
|
||||
Res1 : uint16;
|
||||
IOPBOffset : uint16;
|
||||
LDTR : uint16;
|
||||
Res2 : uint16;
|
||||
GS : uint16;
|
||||
Res3 : uint16;
|
||||
FS : uint16;
|
||||
Res4 : uint16;
|
||||
DS : uint16;
|
||||
Res5 : uint16;
|
||||
SS : uint16;
|
||||
Res6 : uint16;
|
||||
CS : uint16;
|
||||
Res7 : uint16;
|
||||
ES : uint16;
|
||||
Res8 : uint16;
|
||||
EDI : uint32;
|
||||
ESI : uint32;
|
||||
EBP : uint32;
|
||||
ESP : uint32;
|
||||
EBX : uint32;
|
||||
EDX : uint32;
|
||||
ECX : uint32;
|
||||
EAX : uint32;
|
||||
EFLAGS : uint32;
|
||||
EIP : uint32;
|
||||
CR3 : uint32;
|
||||
SS2 : uint16;
|
||||
Res9 : uint16;
|
||||
SS1 : uint16;
|
||||
Res10 : uint16;
|
||||
SS0 : uint16;
|
||||
Res11 : uint16;
|
||||
ESP0 : uint32;
|
||||
LINK : uint16;
|
||||
Res12 : uint16;
|
||||
end;
|
||||
PTaskStateSegment = ^TTaskStateSegment;
|
||||
|
||||
var
|
||||
TaskStateSegment : TTaskStateSegment;
|
||||
ptrTaskStateSegment : PTaskStateSegment = @TaskStateSegment;
|
||||
|
||||
procedure init;
|
||||
|
||||
implementation
|
||||
|
||||
procedure init;
|
||||
var
|
||||
i : uint32;
|
||||
cESP : uint32;
|
||||
|
||||
begin
|
||||
console.writestringln('A');
|
||||
i:=KERNEL_PAGE_NUMBER+4;
|
||||
console.writestringln('B');
|
||||
while not vmemorymanager.new_page(i) do begin
|
||||
i:= i + 1;
|
||||
end;
|
||||
console.writestringln('C');
|
||||
ptrTaskStateSegment:= PTaskStateSegment(i SHL 22);
|
||||
console.writestringln('D');
|
||||
ptrTaskStateSegment^.SS0:= $10;
|
||||
console.writestringln('E');
|
||||
ptrTaskStateSegment^.ESP0:= $00;
|
||||
console.writestringln('F');
|
||||
ptrTaskStateSegment^.IOPBOffset:= sizeof(TTaskStateSegment);
|
||||
console.writestringln('G');
|
||||
gdt.set_gate($05, i SHL 22 - KERNEL_VIRTUAL_BASE, sizeof(TTaskStateSegment), $89, $40); //OFFSET: 40
|
||||
console.writestringln('H');
|
||||
asm
|
||||
MOV cESP, ESP
|
||||
end;
|
||||
console.writestringln('I');
|
||||
ptrTaskStateSegment^.ESP0:= cESP;
|
||||
console.writestringln('J');
|
||||
asm
|
||||
mov AX, 40
|
||||
ltr AX
|
||||
end;
|
||||
console.writestringln('K');
|
||||
end;
|
||||
|
||||
end.
|
Loading…
x
Reference in New Issue
Block a user