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

This commit is contained in:
kieron 2018-04-07 16:44:40 +00:00
parent 1fbdf09f72
commit 37d442edfc
70 changed files with 360 additions and 71 deletions

BIN
Asuro.iso

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -71,7 +71,7 @@ end;
procedure init();
begin
console.writestringln('BDA: Loaded.');
console.outputln('BDA','Loaded.');
//TO-DO search for important structures like the MCFG or the EBDA.
end;

View File

@ -42,6 +42,9 @@ procedure writecharln(character : char);
procedure writecharex(character : char; attributes : char);
procedure writecharlnex(character : char; attributes : char);
procedure Output(identifier : PChar; str : PChar);
procedure Outputln(identifier : PChar; str : PChar);
procedure writestring(str: PChar);
procedure writestringln(str: PChar);
procedure writestringex(str: PChar; attributes : char);
@ -57,6 +60,7 @@ procedure writewordln(i: DWORD);
procedure writewordex(i: DWORD; attributes : char);
procedure writewordlnex(i: DWORD; attributes : char);
procedure writehexpair(b : uint8);
procedure writehex(i: DWORD);
procedure writehexln(i: DWORD);
procedure writehexex(i : DWORD; attributes : char);
@ -278,6 +282,36 @@ begin
console._safeincrement_x();
end;
procedure writehexpair(b : uint8);
var
bn : Array[0..1] of uint8;
i : uint8;
begin
bn[0]:= b SHR 4;
bn[1]:= b AND $0F;
for i:=0 to 1 do begin
case bn[i] of
0:writestring('0');
1:writestring('1');
2:writestring('2');
3:writestring('3');
4:writestring('4');
5:writestring('5');
6:writestring('6');
7:writestring('7');
8:writestring('8');
9:writestring('9');
10:writestring('A');
11:writestring('B');
12:writestring('C');
13:writestring('D');
14:writestring('E');
15:writestring('F');
end;
end;
end;
procedure writehexex(i : dword; attributes: char); [public, alias: 'console_writehexex'];
var
Hex : Array[0..7] of Byte;
@ -340,6 +374,20 @@ begin
writehexlnex(i, Console_Properties.Default_Attribute);
end;
procedure Output(identifier : PChar; str : PChar);
begin
writestring('[');
writestring(identifier);
writestring('] ');
writestring(str);
end;
procedure Outputln(identifier : PChar; str : PChar);
begin
Output(identifier, str);
writestringln(' ');
end;
procedure writestringex(str: PChar; attributes: char); [public, alias: 'console_writestringex'];
var
i : integer;

View File

@ -62,7 +62,7 @@ end;
function load(ptr : void) : boolean;
begin
isr33.hook(uint32(@callback));
console.writestringln('PS/2 KEYBOARD: LOADED.');
console.outputln('PS/2 KEYBOARD', 'LOADED.');
load:= true;
end;
@ -71,7 +71,7 @@ var
devid : TDeviceIdentifier;
begin
console.writestringln('PS/2 KEYBOARD: INIT BEGIN.');
console.outputln('PS/2 KEYBOARD', 'INIT BEGIN.');
if keyboard_layout[1].key_code = 0 then lang_USA();
devid.bus:= biUnknown;
devid.id0:= 0;
@ -81,7 +81,7 @@ begin
devid.id4:= 0;
devid.ex:= nil;
drivermanagement.register_driver_ex('PS/2 Keyboard', @devid, @load, true);
console.writestringln('PS/2 KEYBOARD: INIT END.');
console.outputln('PS/2 KEYBOARD', 'INIT END.');
end;
//2A AA

View File

@ -107,7 +107,7 @@ end;
function load(ptr : void) : boolean;
begin
isr44.hook(uint32(@callback));
console.writestringln('PS/2 MOUSE: LOADED.');
console.outputln('PS/2 MOUSE', 'LOADED.');
load:= true;
end;
@ -116,7 +116,7 @@ var
devid : TDeviceIdentifier;
begin
console.writestringln('PS/2 MOUSE: INIT BEGIN.');
console.outputln('PS/2 MOUSE', 'INIT BEGIN.');
devid.bus:= biUnknown;
devid.id0:= 0;
devid.id1:= 0;
@ -125,7 +125,7 @@ begin
devid.id4:= 0;
devid.ex:= nil;
drivermanagement.register_driver_ex('PS/2 Mouse', @devid, @load, true);
console.writestringln('PS/2 MOUSE: INIT END.');
console.outputln('PS/2 MOUSE', 'INIT END.');
end;
end.

View File

@ -79,14 +79,14 @@ var
current_bus : uint8;
begin
console.writestringln('PCI: Scanning Bus: 0');
console.outputln('PCI', 'Scanning Bus: 0');
scanBus(0);
//while unscanned busses scan busses
current_bus := 1;
while true do begin
if current_bus < bus_count then begin
console.writestringln('PCI: Scanning Bus: ');
console.writeint(bus_count);
console.output('PCI', 'Scanning Bus: ');
console.writeintln(bus_count);
scanBus(current_bus);
current_bus := current_bus + 1;
end else break;
@ -99,7 +99,7 @@ var
DevID : TDeviceIdentifier;
begin
console.writestringln('PCI: INIT BEGIN.');
console.outputln('PCI','INIT BEGIN.');
DevID.Bus:= biUnknown;
DevID.id0:= 0;
DevID.id1:= 0;
@ -107,7 +107,7 @@ begin
DevID.id3:= 0;
DevID.ex:= nil;
drivermanagement.register_driver_ex('PCI Driver', @DevID, @load, true);
console.writestringln('PCI: INIT END.');
console.outputln('PCI', 'INIT END.');
end;
procedure scanBus(bus : uint8);
@ -315,7 +315,7 @@ begin
DevID^.id4:= device.vendor_id;
DevID^.ex:= nil;
console.writestring('PCI: Found Device: ');
console.output('PCI', 'Found Device: ');
console.writehex(device.header_type);
console.writestring(' ');
console.writehex(device.device_id);

View File

@ -50,12 +50,12 @@ var
begin
devices:= PCI.getDeviceInfo($0C, $03, $10, count);
console.writestring('USB-OHCI: Found ');
console.output('USB-OHCI Driver', 'Found ');
console.writeint(count);
console.writestringln(' USB Controller(s).');
if count > 0 then begin
for i:=0 to count-1 do begin
console.writestring('USB: Controller[');
console.output('USB-OHCI Driver', 'Controller[');
console.writeint(i);
console.writestring(']: ');
console.writehex(devices[i].device_id);
@ -80,12 +80,12 @@ var
begin
devices:= PCI.getDeviceInfo($0C, $03, $00, count);
console.writestring('USB-UHCI: Found ');
console.output('USB-UHCI Driver','Found ');
console.writeint(count);
console.writestringln(' USB Controller(s).');
if count > 0 then begin
for i:=0 to count-1 do begin
console.writestring('USB: Controller[');
console.output('USB-UHCI Driver','Controller[');
console.writeint(i);
console.writestring(']: ');
console.writehex(devices[i].device_id);
@ -103,7 +103,7 @@ var
UHCI_ID, OHCI_ID : TDeviceIdentifier;
begin
console.writestringln('USB: INIT BEGIN.');
console.outputln('USB Driver', 'INIT BEGIN.');
UHCI_ID.Bus:= biPCI;
UHCI_ID.id0:= idANY;
@ -124,7 +124,7 @@ begin
drivermanagement.register_driver('USB-UHCI Driver', @UHCI_ID, @loadUHCI);
drivermanagement.register_driver('USB-OHCI Driver', @OHCI_ID, @loadOHCI);
console.writestringln('USB: INIT END.');
console.outputln('USB Driver', 'INIT END.');
end;
end.

View File

@ -7,7 +7,9 @@ uses
strings,
vmemorymanager,
lmemorymanager,
drivermanagement;
drivermanagement,
drivertypes,
util;
const
INTEL_VEND = $8086;
@ -95,6 +97,9 @@ const
TSTA_LC = (1 SHL 2); // Late Collision
LSTA_TU = (1 SHL 3); // Transmit Underrun
E1000_NUM_RX_DESC = 32;
E1000_NUM_TX_DESC = 8;
type
PE1000_rx_desc = ^TE1000_rx_desc;
TE1000_rx_desc = bitpacked record
@ -117,62 +122,203 @@ type
special : uint16;
end;
TCardType = (ctUnknown, ctE1000, ctI217, ct82577LM);
procedure init();
procedure fire();
function getMACAddress : uint8;
function getMACAddress : puint8;
function sendPacket(p_data : void; p_len : uint16) : sint32;
implementation
var
loaded : boolean;
card_type : TCardType;
bar_type : uint8;
io_base : uint16;
mem_base : uint64;
eeprom_exists : boolean;
mac : array[0..5] of uint8;
rx_descs : array[0..65535] of TE1000_rx_desc;
tx_descs : array[0..65535] of TE1000_tx_desc;
rx_descs : array[0..E1000_NUM_RX_DESC-1] of PE1000_rx_desc;
tx_descs : array[0..E1000_NUM_TX_DESC-1] of PE1000_tx_desc;
rx_curr : uint16;
tx_curr : uint16;
procedure writeCommand(p_address : uint16; p_value : uint32);
begin
var
mem : puint32;
begin
if (bar_type = 0) then begin
mem:= puint32(mem_base + p_address);
mem^:= p_value;
end else begin
outl(io_base + 0, p_address);
outl(io_base + 4, p_address)
end;
end;
function readCommand(p_address : uint16) : uint32;
begin
var
mem : puint32;
begin
if (bar_type = 0) then begin
mem:= puint32(mem_base + p_address);
readCommand:= mem^;
end else begin
outl(io_base, p_address);
readCommand:= inl(io_base + 4);
end;
end;
function detectEEPROM() : boolean;
begin
var
val, i : uint32;
begin
val:= 0;
writeCommand(REG_EEPROM, $1);
for i:=0 to 1000 do begin
if eeprom_exists then break;
val:= readCommand(REG_EEPROM);
if (val and $10) > 0 then eeprom_exists:= true else eeprom_exists:= false;
end;
detectEEPROM:= eeprom_exists;
end;
function EEPROMRead( address : uint8 ) : uint32;
begin
var
data : uint16;
tmp : uint32;
begin
tmp:= 0;
if (eeprom_exists) then begin
writeCommand( REG_EEPROM, 1 OR (uint32(address) SHL 8) );
while (tmp AND (1 SHL 4)) = 0 do begin
tmp:= readCommand(REG_EEPROM); //Might be wrong?
end;
end else begin
writeCommand( REG_EEPROM, 1 OR (uint32(address) SHL 2) );
while (tmp AND (1 SHL 1)) = 0 do begin
tmp:= readCommand(REG_EEPROM); //Might be wrong?
end;
end;
data:= uint16( (tmp SHR 16) AND ($FFFF) );
EEPROMRead:= data;
end;
function readMACAddress() : boolean;
begin
var
temp : uint32;
mem_base_mac_8 : puint8;
mem_base_mac_32 : puint32;
res : boolean;
i : uint32;
begin
res:= true;
if (eeprom_exists) then begin
temp:= EEPROMRead(0);
mac[0]:= temp AND $FF;
mac[1]:= temp SHR 8;
temp:= EEPROMRead(1);
mac[2]:= temp AND $FF;
mac[3]:= temp SHR 8;
temp:= EEPROMRead(2);
mac[4]:= temp AND $FF;
mac[5]:= temp SHR 8;
end else begin
mem_base_mac_8:= puint8(mem_base + $5400);
mem_base_mac_32:= puint32(mem_base + $5400);
if (mem_base_mac_32[0] <> 0) then begin
for i:=0 to 6 do begin
mac[i]:= mem_base_mac_8[i];
end;
end else begin
res:= false;
end;
end;
readMACAddress:= res;
end;
procedure startLink();
begin
var
val : uint32;
begin
val:= readCommand(REG_CTRL);
writeCommand(REG_CTRL, val OR ECTRL_SLU);
end;
procedure rxinit();
begin
var
ptr : puint8;
outptr : puint8;
descs : PE1000_rx_desc;
i : uint32;
begin
ptr:= puint8(kalloc(sizeof(TE1000_rx_desc) * E1000_NUM_RX_DESC + 16));
descs:= PE1000_rx_desc(ptr);
for i:=0 to E1000_NUM_RX_DESC do begin
rx_descs[i]:= PE1000_rx_desc(uint32(descs + i*16));
rx_descs[i]^.address:= uint64(kalloc(8192 + 16));
rx_descs[i]^.status:= 0;
end;
outptr:= puint8(uint32(ptr) - KERNEL_VIRTUAL_BASE);
writeCommand(REG_TXDESCLO, uint32(uint64(outptr) SHR 32));
writeCommand(REG_TXDESCHI, uint32(uint64(outptr) AND $FFFFFFFF));
writeCommand(REG_RXDESCLO, uint32(outptr));
writeCommand(REG_RXDESCHI, 0);
writeCommand(REG_RXDESCLEN, E1000_NUM_RX_DESC * 16);
writeCommand(REG_RXDESCHEAD, 0);
writeCommand(REG_RXDESCTAIL, E1000_NUM_RX_DESC-1);
rx_curr:= 0;
writeCommand(REG_RCTRL, RCTL_EN OR RCTL_SBP OR RCTL_UPE OR RCTL_MPE OR RCTL_LBM_NONE OR RTCL_RDMTS_HALF OR RCTL_BAM OR RCTL_SECRC OR RCTL_BSIZE_2048);
end;
procedure txinit();
begin
var
ptr : puint8;
outptr : puint8;
descs : PE1000_tx_desc;
i : uint32;
begin
ptr:= puint8(kalloc(sizeof(TE1000_tx_desc) * E1000_NUM_TX_DESC + 16));
descs:= PE1000_tx_desc(ptr);
for i:=0 to E1000_NUM_TX_DESC do begin
tx_descs[i]:= PE1000_tx_desc(uint32(descs + i*16));
tx_descs[i]^.address:= 0;
tx_descs[i]^.cmd:= 0;
tx_descs[i]^.status:= TSTA_DD;
end;
outptr:= puint8(uint32(ptr) - KERNEL_VIRTUAL_BASE);
writeCommand(REG_TXDESCHI, uint32(uint64(outptr) SHR 32));
writeCommand(REG_TXDESCLO, uint32(uint64(outptr) AND $FFFFFFFF));
writeCommand(REG_TXDESCLEN, E1000_NUM_TX_DESC * 16);
writeCommand( REG_TXDESCHEAD, 0 );
writeCommand( REG_TXDESCTAIL, 0 );
tx_curr:= 0;
writeCommand(REG_TCTRL, TCTL_EN OR TCTL_PSP OR (15 SHL TCTL_CT_SHIFT) OR (64 SHL TCTL_COLD_SHIFT) OR TCTL_RTLC);
//The following is needed for I217 & 82577LM
if (card_type = ct82577LM) OR (card_type = ctI217) then begin
writeCommand(REG_TCTRL, $3003F0FA);
writeCommand(REG_TIPG, $0060200A);
end;
end;
procedure enableInturrupt();
@ -185,9 +331,88 @@ begin
end;
function load(ptr : void) : boolean;
procedure writeCardType();
begin
console.output('E1000 Driver', 'Card Type: ');
case card_type of
ctUnknown:writestringln('Unknown');
ct82577LM:writestringln('82577LM');
ctE1000:writestringln('Generic E1000');
ctI217:writestringln('I217');
end;
end;
procedure writeMACAddress();
var
i : integer;
begin
console.writehexpair(mac[0]);
for i:=1 to 5 do begin
console.writestring(':');
console.writehexpair(mac[i]);
end;
console.writestringln(' ');
end;
function load(ptr : void) : boolean;
var
PCI_Info : PPCI_Device;
begin
console.outputln('E1000 Driver', 'Load Start.');
writeCardType();
PCI_Info:= PPCI_Device(ptr);
bar_type:= PCI_Info^.address0 AND $00000001;
io_base:= PCI_Info^.address0 AND $FFFFFFF0;
mem_base:= PCI_INFO^.address0 AND $FFFFFFFC;
{ !!!!! Dirty way to alloc the pages, needs fixing !!!!! }
kpalloc(io_base);
kpalloc(mem_base);
eeprom_exists:= false;
detectEEPROM();
if eeprom_exists then console.outputln('E1000 Driver', 'EEPROM Exists: YES.') else console.outputln('E1000 Driver', 'EEPROM Exists: NO.');
if not readMACAddress() then begin
console.outputln('E1000 Driver', 'MAC Read Failed.');
load:= false;
exit;
end;
console.output('E1000 Driver', 'MAC Address: ');
writeMACAddress();
startLink();
load:= true;
console.outputln('E1000 Driver', 'Load Finish.');
end;
function loadE1000(ptr : void) : boolean;
begin
loadE1000:= false;
if not Loaded then begin
card_type:= ctE1000;
loadE1000:= load(ptr);
end;
end;
function load82577LM(ptr : void) : boolean;
begin
load82577LM:= false;
if not Loaded then begin
card_type:= ct82577LM;
load82577LM:= load(ptr);
end;
end;
function loadI217(ptr : void) : boolean;
begin
loadI217:= false;
if not Loaded then begin
card_type:= ctI217;
loadI217:= load(ptr);
end;
end;
procedure init();
@ -195,6 +420,7 @@ var
dev : TDeviceIdentifier;
begin
card_type:= ctUnknown;
dev.Bus:= biPCI;
dev.id0:= INTEL_VEND;
dev.id1:= idANY;
@ -202,11 +428,11 @@ begin
dev.id3:= idANY;
dev.id4:= E1000_DEV;
dev.ex:= nil;
drivermanagement.register_driver('E1000 Ethernet Driver', @dev, @load);
drivermanagement.register_driver('E1000 Ethernet Driver', @dev, @loadE1000);
dev.id4:= I217_DEV;
drivermanagement.register_driver('I217 Ethernet Driver', @dev, @load);
drivermanagement.register_driver('I217 Ethernet Driver', @dev, @loadI217);
dev.id4:= LM82577_DEV;
drivermanagement.register_driver('82577LM Ethernet Driver', @dev, @load);
drivermanagement.register_driver('82577LM Ethernet Driver', @dev, @load82577LM);
end;
procedure fire();
@ -214,9 +440,9 @@ begin
end;
function getMACAddress : uint8;
function getMACAddress : puint8;
begin
getMACAddress:= puint8(@mac[0]);
end;
function sendPacket(p_data : void; p_len : uint16) : sint32;

View File

@ -11,7 +11,7 @@ implementation
function load(ptr : void) : boolean;
begin
console.writestringln('DUMMY DRIVER LOADED.')
console.outputln('DUMMY DRIVER', 'LOADED.')
end;
procedure init;

View File

@ -307,7 +307,12 @@ begin
end;
RegList^.Next:= NewReg;
end;
console.output('Driver Management', 'New Driver Registered: ');
console.writestringln(NewReg^.Driver_Name);
if force_load then begin
console.output('Driver Management', 'Driver (');
console.writestring(NewReg^.Driver_Name);
console.writestringln(') forced to load.');
NewReg^.Loaded:= True;
NewReg^.Driver_Load(nil);
end;
@ -336,9 +341,18 @@ begin
end;
dev_list^.Next:= new_dev;
end;
console.output('Driver Management', 'New Device Registered: ');
console.writestringln(new_dev^.Device_Name);
while drv <> nil do begin
if identifiers_match(drv^.Identifier, DeviceID) then begin
console.output('Driver Management', 'Device/Driver Match: ');
console.writestring(new_dev^.Device_Name);
console.writestring('->');
console.writestringln(drv^.Driver_Name);
if drv^.Driver_Load(ptr) then begin
console.output('Driver Management', 'Driver (');
console.writestring(drv^.Driver_Name);
console.writestringln(') successfully loaded.');
drv^.Loaded:= true;
new_dev^.Driver_Loaded:= true;
new_dev^.Driver:= drv;

View File

@ -58,7 +58,7 @@ end;
procedure flush;
begin
console.writestringln('GDT: FLUSH.');
console.outputln('GDT','FLUSH.');
flush_gdt(uint32(@gdt_pointer));
end;
@ -70,7 +70,7 @@ end;
procedure reload;
begin
console.writestringln('GDT: RELOAD.');
console.outputln('GDT','RELOAD.');
reload_gdt(uint32(@gdt_pointer));
end;
@ -90,14 +90,14 @@ begin
gdt_entries[Gate_Number].limit_low := (Limit AND $FFFF);
gdt_entries[Gate_Number].granularity := ((Limit SHR 16) AND $0F) OR (Granularity AND $F0);
gdt_entries[Gate_Number].access := Access;
console.writestring('GDT: GATE ');
console.output('GDT','GATE ');
console.writeint(Gate_Number);
console.writestringln(' SET.');
end;
procedure init();
begin
console.writestringln('GDT: INIT START.');
console.outputln('GDT','INIT START.');
gdt_pointer.limit:= 0;
gdt_pointer.base := uint32(@gdt_entries);
set_gate($00, $00, $00, $00, $00); //OFFSET: 0
@ -106,7 +106,7 @@ begin
set_gate($03, $00, $FFFFFFFF, $FA, $CF); //OFFSET: 24
set_gate($04, $00, $FFFFFFFF, $F2, $CF); //OFFSET: 32
flush;
console.writestringln('GDT: INIT END.');
console.outputln('GDT','INIT END.');
end;
end.

View File

@ -52,7 +52,7 @@ begin
IDT_Entries[Number].selector:= Selector;
IDT_Entries[Number].flags:= Flags;
IDT_Entries[Number].always_0:= $00;
console.writestring('IDT: GATE ');
console.output('IDT','GATE ');
console.writeint(Number);
console.writestringln(' SET.');
end;
@ -65,14 +65,14 @@ end;
procedure init();
begin
console.writestringln('IDT: INIT START.');
console.outputln('IDT','INIT START.');
IDT_Pointer.limit:= (sizeof(TIDT_Entry) * 256) - 1;
IDT_Pointer.base:= uint32(@IDT_Entries);
console.writestringln('IDT: CLEAR.');
console.outputln('IDT','CLEAR.');
util.memset(uint32(@IDT_Entries[0]), 0, sizeof(TIDT_Entry) * 256);
console.writestringln('IDT: LOAD.');
console.outputln('IDT','LOAD.');
load(uint32(@IDT_Pointer));
console.writestringln('IDT: INIT END.');
console.outputln('IDT','INIT END.');
end;
end.

View File

@ -19,7 +19,7 @@ implementation
procedure init();
begin
console.writestringln('IRQ: INIT START.');
console.outputln('IRQ','INIT START.');
outb($20, $11);
outb($A0, $11);
outb($21, $20);
@ -30,7 +30,7 @@ begin
outb($A1, $01);
outb($21, $00);
outb($A1, $00);
console.writestringln('IRQ: INIT END.');
console.outputln('IRQ','INIT END.');
end;
end.

View File

@ -24,7 +24,7 @@ implementation
procedure init();
begin
console.writestringln('ISR: INIT START.');
console.outputln('ISR','INIT START.');
ISR0.register(); // Divide-By-Zero
ISR1.register(); // Debug
ISR2.register(); // Non-Maskable Inturrupt
@ -49,7 +49,7 @@ begin
ISR33.register(); // Keyboard
ISR40.register(); // 1024/s Timer
ISR44.register(); // Mouse
console.writestringln('ISR: INIT END.');
console.outputln('ISR','INIT END.');
end;
end.

View File

@ -89,8 +89,8 @@ begin
if (multibootmagic <> MULTIBOOT_BOOTLOADER_MAGIC) then begin
console.setdefaultattribute(console.combinecolors(Red, Black));
console.writestringln('Multiboot Compliant Boot-Loader Needed!');
console.writestringln('HALTING');
console.outputln('KERNEL', 'Multiboot Compliant Boot-Loader Needed!');
console.outputln('KERNEL', 'HALTING.');
util.halt_and_catch_fire;
end;
@ -99,9 +99,10 @@ begin
MOV dds, CS
end;
if dds = $08 then begin
console.writestringlnex('GDT: LOAD SUCCESS.', console.combinecolors(Green, Black));
console.outputln('KERNEL', 'GDT: LOAD SUCCESS.');
end else begin
console.writestringlnex('GDT: LOAD FAIL.', console.combinecolors(Red, Black));
console.outputln('KERNEL', 'GDT: LOAD FAIL.');
console.outputln('KERNEL', 'HALTING.');
halt_and_catch_fire;
end;
@ -121,7 +122,7 @@ begin
isr32.hook(uint32(@bios_data_area.tick_update));
//drivers
console.writestringln('DRIVERS: INIT BEGIN.');
console.outputln('KERNEL', 'DRIVERS: INIT BEGIN.');
keyboard.init(keyboard_layout);
mouse.init();
testdriver.init();
@ -130,7 +131,7 @@ begin
//Nothing beyond here
USB.init();
pci.init();
console.writestringln('DRIVERS: INIT END.');
console.outputln('KERNEL', 'DRIVERS: INIT END.');
console.writestringln('');
console.setdefaultattribute(console.combinecolors(Green, Black));

View File

@ -86,7 +86,7 @@ var
i : uint32;
begin
console.writestringln('LMM: INIT BEGIN.');
console.outputln('LMM','INIT BEGIN.');
Root_Page:= PHeapPage(new_lmm_page);
Search_Page:= Root_Page;
Root_Page^.Next_Page:= 0;
@ -96,7 +96,7 @@ begin
Root_Page^.Entries[i].Root:= False;
Root_Page^.Entries[i].Last:= False;
end;
console.writestringln('LMM: INIT END.');
console.outputln('LMM','INIT END.');
end;
function kpalloc(address : uint32) : void;

View File

@ -109,15 +109,15 @@ end;
procedure init;
begin
console.writestringln('PMM: INIT BEGIN.');
console.outputln('PMM','INIT BEGIN.');
walk_memory_map;
force_alloc_block(0, 0);
force_alloc_block(1, 0);
force_alloc_block(2, 0); //First 12MiB reserved for Kernel/BIOS.
console.writestring('PMM: ');
console.output('PMM',' ');
console.writeword(nPresent);
console.writestringln('/1024 Block Available for Allocation.');
console.writestringln('PMM: INIT END.');
console.outputln('PMM','INIT END.');
end;
function alloc_block(block : uint16; caller : uint32) : boolean;

View File

@ -105,7 +105,7 @@ end;
procedure init;
begin
console.writestringln('SCHEDULER: INIT BEGIN.');
console.outputln('SCHEDULER','INIT BEGIN.');
Root_Task:= PScheduler_Entry(kalloc(sizeof(TScheduler_Entry)));
Root_Task^.ThreadID:= 0;
Root_Task^.Priority:= 1;
@ -116,7 +116,7 @@ begin
Active:= False;
isr32.hook(uint32(@delta));
terminal.registerCommand('TASKS', @terminal_command_tasks, 'List Active Processes.');
console.writestringln('SCHEDULER: INIT END.');
console.outputln('SCHEDULER','INIT END.');
end;
end.

View File

@ -79,7 +79,7 @@ var
cCR3 : uint32;
begin
console.writestringln('TSS: INIT BEGIN.');
console.outputln('TSS','INIT BEGIN.');
ptrTaskStateSegment^.ss0:= $08;
ptrTaskStateSegment^.iomap:= sizeof(TTaskStateSegment)-1;
asm
@ -95,7 +95,7 @@ begin
mov AX, 40
ltr AX
end;
console.writestringln('TSS: INIT END.');
console.outputln('TSS','INIT END.');
end;
end.

View File

@ -90,13 +90,13 @@ var
i : uint32;
begin
console.writestringln('VMM: INIT BEGIN.');
console.outputln('VMM','INIT BEGIN.');
PageDirectory:= load_current_page_directory;
KERNEL_PAGE_DIRECTORY:= PageDirectory;
map_page(KERNEL_PAGE_NUMBER + 1, 1);
map_page(KERNEL_PAGE_NUMBER + 2, 2);
map_page(KERNEL_PAGE_NUMBER + 3, 3);
console.writestringln('VMM: INIT END.');
console.outputln('VMM','INIT END.');
end;
function map_page_ex(page_number : uint16; block : uint16; PD : PPageDirectory) : boolean;