git-svn-id: https://spexeah.com:8443/svn/Asuro@496 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c

This commit is contained in:
kieron
2018-04-11 17:11:13 +00:00
parent 7303cb9dd7
commit 82a497430f
67 changed files with 96 additions and 10 deletions

View File

@ -37,6 +37,8 @@ procedure init();
procedure clear();
procedure setdefaultattribute(attribute : char);
procedure disable_cursor;
procedure writechar(character : char);
procedure writecharln(character : char);
procedure writecharex(character : char; attributes : char);
@ -121,6 +123,12 @@ var
Console_Matrix : P2DVideoMemory = P2DVideoMemory($C00b8000);
Console_Cursor : TCoord;
procedure disable_cursor;
begin
outb($3D4, $0A);
outb($3D5, $20);
end;
procedure init(); [public, alias: 'console_init'];
Begin
Console_Properties.Default_Attribute:= console.combinecolors(White, Black);

View File

@ -3,6 +3,7 @@ unit USB;
interface
uses
tracer,
Console,
PCI,
drivertypes,
@ -49,6 +50,7 @@ var
MMR : POHCI_MMR;
begin
push_trace('USB.loadOHCI');
devices:= PCI.getDeviceInfo($0C, $03, $10, count);
console.output('USB-OHCI Driver', 'Found ');
console.writeint(count);
@ -70,6 +72,7 @@ begin
end;
end;
loadOHCI:= true;
pop_trace;
end;
function loadUHCI(ptr : void) : boolean;
@ -79,6 +82,7 @@ var
i : uint32;
begin
push_trace('USB.loadUHCI');
devices:= PCI.getDeviceInfo($0C, $03, $00, count);
console.output('USB-UHCI Driver','Found ');
console.writeint(count);
@ -96,6 +100,7 @@ begin
end;
end;
loadUHCI:= true;
pop_trace;
end;
procedure init;
@ -103,6 +108,7 @@ var
UHCI_ID, OHCI_ID : TDeviceIdentifier;
begin
push_trace('USB.init');
console.outputln('USB Driver', 'INIT BEGIN.');
UHCI_ID.Bus:= biPCI;
@ -125,6 +131,7 @@ begin
drivermanagement.register_driver('USB-OHCI Driver', @OHCI_ID, @loadOHCI);
console.outputln('USB Driver', 'INIT END.');
pop_trace;
end;
end.

View File

@ -3,7 +3,7 @@ unit testdriver;
interface
uses
console, drivermanagement;
tracer, console, drivermanagement;
procedure init;
@ -11,7 +11,9 @@ implementation
function load(ptr : void) : boolean;
begin
console.outputln('DUMMY DRIVER', 'LOADED.')
push_trace('testdriver.load');
console.outputln('DUMMY DRIVER', 'LOADED.');
pop_trace;
end;
procedure init;
@ -19,6 +21,7 @@ var
devID : TDeviceIdentifier;
begin
push_trace('testdriver.init');
devID.bus:= biPCI; { PCI BUS }
devID.id0:= idANY; { ANY DEVICE ID }
devID.id1:= $00000006; { CLASS }
@ -27,6 +30,7 @@ begin
devID.id4:= idANY;
devID.ex:= nil; { NO EXTENDED INFO }
drivermanagement.register_driver('DUMMY DRIVER', @devID, @load);
pop_trace;
end;
end.

View File

@ -45,6 +45,12 @@ procedure set_gate(Number : uint8; Base : uint32; Selector : uint16; Flags : uin
implementation
procedure load(idt_pointer : uint32); assembler; nostackframe;
asm
MOV EAX, idt_pointer
LIDT [EAX]
end;
procedure set_gate(Number : uint8; Base : uint32; Selector : uint16; Flags : uint8);
begin
IDT_Entries[Number].base_high:= (Base and $FFFF0000) SHR 16;
@ -55,12 +61,7 @@ begin
console.output('IDT','GATE ');
console.writeint(Number);
console.writestringln(' SET.');
end;
procedure load(idt_pointer : uint32); assembler; nostackframe;
asm
MOV EAX, idt_pointer
LIDT [EAX]
load(uint32(@IDT_Pointer));
end;
procedure init();

View File

@ -16,6 +16,7 @@ interface
uses
bios_data_area, tracer;
function INTE : boolean;
procedure CLI();
procedure STI();
procedure GPF();
@ -32,6 +33,7 @@ procedure outl(port : uint16; val : uint32);
function inb(port : uint16) : uint8;
function inw(port : uint16) : uint16;
function inl(port : uint16) : uint32;
procedure io_wait;
procedure memset(location : uint32; value : uint8; size : uint32);
procedure memcpy(source : uint32; dest : uint32; size : uint32);
@ -52,6 +54,38 @@ implementation
uses
console;
function INTE : boolean;
var
flags : uint32;
begin
asm
PUSH EAX
PUSHF
POP EAX
MOV flags, EAX
POP EAX
end;
INTE:= (flags AND (1 SHL 9)) > 0;
end;
procedure io_wait;
var
port : uint8;
val : uint8;
begin
port:= $80;
val:= 0;
asm
PUSH EAX
PUSH EDX
MOV DX, port
MOV AL, val
OUT DX, AL
POP EDX
POP EAX
end;
end;
procedure printmemory(source : uint32; length : uint32; col : uint32; delim : PChar; offset_row : boolean);
var
buf : puint8;
@ -269,6 +303,7 @@ var
z : uint32;
begin
disable_cursor;
if not BSOD_ENABLE then exit;
console.setdefaultattribute(console.combinecolors(white, Red));
console.clear;

View File

@ -21,15 +21,25 @@ procedure init();
begin
console.outputln('IRQ','INIT START.');
outb($20, $11);
io_wait;
outb($A0, $11);
io_wait;
outb($21, $20);
io_wait;
outb($A1, $28);
io_wait;
outb($21, $04);
io_wait;
outb($A1, $02);
io_wait;
outb($21, $01);
io_wait;
outb($A1, $01);
io_wait;
outb($21, $00);
io_wait;
outb($A1, $00);
io_wait;
console.outputln('IRQ','INIT END.');
end;

View File

@ -97,9 +97,11 @@ var
begin
{ Store Multiboot info }
multibootinfo:= mbinfo;
multibootmagic:= mbmagic;
{ Ensure tracer is frozen }
tracer.freeze();
{ Console Init }
@ -144,16 +146,25 @@ begin
tss.init();
scheduler.init();
{ Management Interfaces }
{ Call Tracer }
tracer.init();
{ Management Interfaces }
tracer.push_trace('kmain.DRVMGMT');
drivermanagement.init();
tracer.pop_trace;
tracer.push_trace('kmain.STRMGMT');
storagemanagement.init();
tracer.pop_trace;
{ Hook Timer for Ticks }
tracer.push_trace('kmain.TMR');
STI;
isr32.hook(uint32(@bios_data_area.tick_update));
tracer.pop_trace;
{ Device Drivers }
tracer.push_trace('kmain.DEVDRV');
console.outputln('KERNEL', 'DEVICE DRIVERS: INIT BEGIN.');
keyboard.init(keyboard_layout);
mouse.init();
@ -161,26 +172,36 @@ begin
E1000.init();
IDE.init();
console.outputln('KERNEL', 'DEVICE DRIVERS: INIT END.');
tracer.pop_trace;
{ Bus Drivers }
tracer.push_trace('kmain.BUSDRV');
console.outputln('KERNEL', 'BUS DRIVERS: INIT BEGIN.');
USB.init();
pci.init();
console.outputln('KERNEL', 'BUS DRIVERS: INIT END.');
tracer.pop_trace;
{ Network Stack }
tracer.push_trace('kmain.NETDRV');
net.init;
tracer.pop_trace;
{ End of Boot }
tracer.push_trace('kmain.EOB');
console.writestringln('');
console.setdefaultattribute(console.combinecolors(Green, Black));
console.writestringln('Asuro Booted Correctly!');
console.setdefaultattribute(console.combinecolors(White, Black));
console.writestringln('');
console.writestringln('Press any key to boot in to Asuro Terminal...');
tracer.pop_trace;
tracer.push_trace('kmain.KEYHOOK');
keyboard.hook(@temphook);
tracer.pop_trace;
tracer.push_trace('kmain.END');
util.halt_and_dont_catch_fire;
end;