git-svn-id: https://spexeah.com:8443/svn/Asuro@746 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
4a1d7a942d
commit
8066634367
BIN
bin/kernel.bin
BIN
bin/kernel.bin
Binary file not shown.
@ -5,6 +5,10 @@ echo "======================="
|
|||||||
echo "== ASURO COMPILATION =="
|
echo "== ASURO COMPILATION =="
|
||||||
echo "======================="
|
echo "======================="
|
||||||
echo " "
|
echo " "
|
||||||
|
echo "Checking out latest VM Source..."
|
||||||
|
echo " "
|
||||||
|
./updatevm.sh
|
||||||
|
echo " "
|
||||||
echo "Compiling ASM Stub..."
|
echo "Compiling ASM Stub..."
|
||||||
echo " "
|
echo " "
|
||||||
rm lib/*
|
rm lib/*
|
||||||
|
Binary file not shown.
BIN
lib/ACE.ppu
BIN
lib/ACE.ppu
Binary file not shown.
BIN
lib/BPE.ppu
BIN
lib/BPE.ppu
Binary file not shown.
BIN
lib/BTSSE.ppu
BIN
lib/BTSSE.ppu
Binary file not shown.
BIN
lib/CFE.ppu
BIN
lib/CFE.ppu
Binary file not shown.
BIN
lib/CSOE.ppu
BIN
lib/CSOE.ppu
Binary file not shown.
BIN
lib/DBGE.ppu
BIN
lib/DBGE.ppu
Binary file not shown.
BIN
lib/DBZ.ppu
BIN
lib/DBZ.ppu
Binary file not shown.
BIN
lib/DFE.ppu
BIN
lib/DFE.ppu
Binary file not shown.
BIN
lib/E1000.ppu
BIN
lib/E1000.ppu
Binary file not shown.
BIN
lib/EHCI.ppu
BIN
lib/EHCI.ppu
Binary file not shown.
BIN
lib/GPF.ppu
BIN
lib/GPF.ppu
Binary file not shown.
BIN
lib/IDE.ppu
BIN
lib/IDE.ppu
Binary file not shown.
BIN
lib/IDOE.ppu
BIN
lib/IDOE.ppu
Binary file not shown.
BIN
lib/IOPE.ppu
BIN
lib/IOPE.ppu
Binary file not shown.
BIN
lib/MCE.ppu
BIN
lib/MCE.ppu
Binary file not shown.
BIN
lib/NCE.ppu
BIN
lib/NCE.ppu
Binary file not shown.
BIN
lib/NMIE.ppu
BIN
lib/NMIE.ppu
Binary file not shown.
BIN
lib/OHCI.ppu
BIN
lib/OHCI.ppu
Binary file not shown.
BIN
lib/OOBE.ppu
BIN
lib/OOBE.ppu
Binary file not shown.
BIN
lib/PCI.ppu
BIN
lib/PCI.ppu
Binary file not shown.
BIN
lib/PF.ppu
BIN
lib/PF.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/RTC.ppu
BIN
lib/RTC.ppu
Binary file not shown.
BIN
lib/SFE.ppu
BIN
lib/SFE.ppu
Binary file not shown.
BIN
lib/SNPE.ppu
BIN
lib/SNPE.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/UHCI.ppu
BIN
lib/UHCI.ppu
Binary file not shown.
BIN
lib/UIE.ppu
BIN
lib/UIE.ppu
Binary file not shown.
BIN
lib/USB.ppu
BIN
lib/USB.ppu
Binary file not shown.
BIN
lib/XHCI.ppu
BIN
lib/XHCI.ppu
Binary file not shown.
BIN
lib/arp.ppu
BIN
lib/arp.ppu
Binary file not shown.
BIN
lib/asuro.ppu
BIN
lib/asuro.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/console.o
BIN
lib/console.o
Binary file not shown.
BIN
lib/console.ppu
BIN
lib/console.ppu
Binary file not shown.
BIN
lib/cpu.ppu
BIN
lib/cpu.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/eth2.ppu
BIN
lib/eth2.ppu
Binary file not shown.
BIN
lib/fat32.ppu
BIN
lib/fat32.ppu
Binary file not shown.
BIN
lib/gdt.ppu
BIN
lib/gdt.ppu
Binary file not shown.
BIN
lib/icmp.ppu
Normal file
BIN
lib/icmp.ppu
Normal file
Binary file not shown.
BIN
lib/idt.ppu
BIN
lib/idt.ppu
Binary file not shown.
BIN
lib/ipv4.ppu
BIN
lib/ipv4.ppu
Binary file not shown.
BIN
lib/irq.ppu
BIN
lib/irq.ppu
Binary file not shown.
BIN
lib/isr.ppu
BIN
lib/isr.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/kernel.ppu
BIN
lib/kernel.ppu
Binary file not shown.
BIN
lib/keyboard.ppu
BIN
lib/keyboard.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.
BIN
lib/lists.ppu
BIN
lib/lists.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/memview.ppu
BIN
lib/memview.ppu
Binary file not shown.
BIN
lib/mouse.ppu
BIN
lib/mouse.ppu
Binary file not shown.
BIN
lib/net.ppu
BIN
lib/net.ppu
Binary file not shown.
BIN
lib/netlog.ppu
BIN
lib/netlog.ppu
Binary file not shown.
BIN
lib/netutils.ppu
BIN
lib/netutils.ppu
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/serial.ppu
BIN
lib/serial.ppu
Binary file not shown.
BIN
lib/shell.ppu
BIN
lib/shell.ppu
Binary file not shown.
BIN
lib/splash.ppu
BIN
lib/splash.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/strings.ppu
BIN
lib/strings.ppu
Binary file not shown.
BIN
lib/system.ppu
BIN
lib/system.ppu
Binary file not shown.
BIN
lib/terminal.ppu
BIN
lib/terminal.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/themer.ppu
BIN
lib/themer.ppu
Binary file not shown.
BIN
lib/tracer.ppu
BIN
lib/tracer.ppu
Binary file not shown.
BIN
lib/tss.ppu
BIN
lib/tss.ppu
Binary file not shown.
BIN
lib/types.ppu
Normal file
BIN
lib/types.ppu
Normal file
Binary file not shown.
BIN
lib/util.ppu
BIN
lib/util.ppu
Binary file not shown.
BIN
lib/vm.ppu
Normal file
BIN
lib/vm.ppu
Normal file
Binary file not shown.
BIN
lib/vm_instance.ppu
Normal file
BIN
lib/vm_instance.ppu
Normal file
Binary file not shown.
BIN
lib/vm_scheduler.ppu
Normal file
BIN
lib/vm_scheduler.ppu
Normal file
Binary file not shown.
Binary file not shown.
BIN
lib/vmlog.ppu
Normal file
BIN
lib/vmlog.ppu
Normal file
Binary file not shown.
@ -71,11 +71,6 @@ procedure writeintln(i: Integer);
|
|||||||
procedure writeintex(i: Integer; attributes: uint32);
|
procedure writeintex(i: Integer; attributes: uint32);
|
||||||
procedure writeintlnex(i: Integer; attributes: uint32);
|
procedure writeintlnex(i: Integer; attributes: uint32);
|
||||||
|
|
||||||
procedure writeword(i: DWORD);
|
|
||||||
procedure writewordln(i: DWORD);
|
|
||||||
procedure writewordex(i: DWORD; attributes: uint32);
|
|
||||||
procedure writewordlnex(i: DWORD; attributes: uint32);
|
|
||||||
|
|
||||||
procedure writehexpair(b : uint8);
|
procedure writehexpair(b : uint8);
|
||||||
procedure writehex(i: DWORD);
|
procedure writehex(i: DWORD);
|
||||||
procedure writehexln(i: DWORD);
|
procedure writehexln(i: DWORD);
|
||||||
@ -130,11 +125,6 @@ procedure writeintlnWND(i: Integer; WND : uint32);
|
|||||||
procedure writeintexWND(i: Integer; attributes: uint32; WND : uint32);
|
procedure writeintexWND(i: Integer; attributes: uint32; WND : uint32);
|
||||||
procedure writeintlnexWND(i: Integer; attributes: uint32; WND : uint32);
|
procedure writeintlnexWND(i: Integer; attributes: uint32; WND : uint32);
|
||||||
|
|
||||||
procedure writewordWND(i: DWORD; WND : uint32);
|
|
||||||
procedure writewordlnWND(i: DWORD; WND : uint32);
|
|
||||||
procedure writewordexWND(i: DWORD; attributes: uint32; WND : uint32);
|
|
||||||
procedure writewordlnexWND(i: DWORD; attributes: uint32; WND : uint32);
|
|
||||||
|
|
||||||
procedure writehexpairWND(b : uint8; WND : uint32);
|
procedure writehexpairWND(b : uint8; WND : uint32);
|
||||||
procedure writehexpairExWND(b : uint8; Attributes : uint32; WND : uint32);
|
procedure writehexpairExWND(b : uint8; Attributes : uint32; WND : uint32);
|
||||||
procedure writehexWND(i: DWORD; WND : uint32);
|
procedure writehexWND(i: DWORD; WND : uint32);
|
||||||
@ -285,10 +275,14 @@ type
|
|||||||
|
|
||||||
TWindows = Array[0..MAX_WINDOWS-1] of PWindow;
|
TWindows = Array[0..MAX_WINDOWS-1] of PWindow;
|
||||||
TZOrder = Array[0..MAX_WINDOWS-1] of uint32;
|
TZOrder = Array[0..MAX_WINDOWS-1] of uint32;
|
||||||
|
TBackOrder = Array[0..MAX_WINDOWS-1] of uint32;
|
||||||
|
TFrontOrder = Array[0..MAX_WINDOWS-1] of uint32;
|
||||||
|
|
||||||
TWindowManager = record
|
TWindowManager = record
|
||||||
Windows : TWindows;
|
Windows : TWindows;
|
||||||
Z_Order : TZOrder;
|
Z_Order : TZOrder;
|
||||||
|
Back_Order : TBackOrder;
|
||||||
|
Front_Order : TFrontOrder;
|
||||||
MousePos : TMouseCoord;
|
MousePos : TMouseCoord;
|
||||||
MousePrev : TMouseCoord;
|
MousePrev : TMouseCoord;
|
||||||
end;
|
end;
|
||||||
@ -544,6 +538,7 @@ var
|
|||||||
WND : PWindow;
|
WND : PWindow;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
tracer.push_trace('console.newWindow');
|
||||||
newWindow:= 0;
|
newWindow:= 0;
|
||||||
for idx:=1 to MAX_WINDOWS-1 do begin
|
for idx:=1 to MAX_WINDOWS-1 do begin
|
||||||
if WindowManager.Windows[idx] = nil then begin
|
if WindowManager.Windows[idx] = nil then begin
|
||||||
@ -927,6 +922,16 @@ begin
|
|||||||
WND^.Closed:= false;
|
WND^.Closed:= false;
|
||||||
WND^.Border:= false;
|
WND^.Border:= false;
|
||||||
WND^.ShellWND:= false;
|
WND^.ShellWND:= false;
|
||||||
|
WND^.Hooks.OnDraw:= nil;
|
||||||
|
WND^.Hooks.OnMouseClick:= nil;
|
||||||
|
WND^.Hooks.OnMouseMove:= nil;
|
||||||
|
WND^.Hooks.OnMouseDown:= nil;
|
||||||
|
WND^.Hooks.OnMouseUp:= nil;
|
||||||
|
WND^.Hooks.OnKeyPressed:= nil;
|
||||||
|
WND^.Hooks.OnClose:= nil;
|
||||||
|
WND^.Hooks.OnMinimize:= nil;
|
||||||
|
WND^.Hooks.OnFocus:= nil;
|
||||||
|
WND^.Hooks.OnLoseFocus:= nil;
|
||||||
WindowManager.Windows[0]:= WND;
|
WindowManager.Windows[0]:= WND;
|
||||||
AddToZOrder(0);
|
AddToZOrder(0);
|
||||||
FocusZOrder(0);
|
FocusZOrder(0);
|
||||||
@ -1252,11 +1257,6 @@ begin
|
|||||||
console.writeintex(i, Console_Properties.Default_Attribute);
|
console.writeintex(i, Console_Properties.Default_Attribute);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure writeword(i: DWORD); [public, alias: 'console_writeword'];
|
|
||||||
begin
|
|
||||||
console.writewordex(i, Console_Properties.Default_Attribute);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure writecharln(character: char); [public, alias: 'console_writecharln'];
|
procedure writecharln(character: char); [public, alias: 'console_writecharln'];
|
||||||
begin
|
begin
|
||||||
console.writecharlnex(character, Console_Properties.Default_Attribute);
|
console.writecharlnex(character, Console_Properties.Default_Attribute);
|
||||||
@ -1272,13 +1272,9 @@ begin
|
|||||||
console.writeintlnex(i, Console_Properties.Default_Attribute);
|
console.writeintlnex(i, Console_Properties.Default_Attribute);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure writewordln(i: DWORD); [public, alias: 'console_writewordln'];
|
|
||||||
begin
|
|
||||||
console.writewordlnex(i, Console_Properties.Default_Attribute);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure writecharex(character: char; attributes: uint32); [public, alias: 'console_writecharex'];
|
procedure writecharex(character: char; attributes: uint32); [public, alias: 'console_writecharex'];
|
||||||
begin
|
begin
|
||||||
|
serial.send(COM1, uint8(character), 10000);
|
||||||
if WindowManager.Windows[DefaultWND] <> nil then begin
|
if WindowManager.Windows[DefaultWND] <> nil then begin
|
||||||
WindowManager.Windows[DefaultWND]^.Buffer[WindowManager.Windows[DefaultWND]^.Cursor.Y][WindowManager.Windows[DefaultWND]^.Cursor.X].Character:= character;
|
WindowManager.Windows[DefaultWND]^.Buffer[WindowManager.Windows[DefaultWND]^.Cursor.Y][WindowManager.Windows[DefaultWND]^.Cursor.X].Character:= character;
|
||||||
WindowManager.Windows[DefaultWND]^.Buffer[WindowManager.Windows[DefaultWND]^.Cursor.Y][WindowManager.Windows[DefaultWND]^.Cursor.X].Attributes:= attributes;
|
WindowManager.Windows[DefaultWND]^.Buffer[WindowManager.Windows[DefaultWND]^.Cursor.Y][WindowManager.Windows[DefaultWND]^.Cursor.X].Attributes:= attributes;
|
||||||
@ -1436,24 +1432,6 @@ begin
|
|||||||
console.writestringex(str, attributes);
|
console.writestringex(str, attributes);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure writewordex(i: DWORD; attributes: uint32); [public, alias: 'console_writedwordex'];
|
|
||||||
var
|
|
||||||
buffer: array [0..11] of Char;
|
|
||||||
str: PChar;
|
|
||||||
digit: DWORD;
|
|
||||||
begin
|
|
||||||
for digit := 0 to 10 do buffer[digit] := '0';
|
|
||||||
str := @buffer[11];
|
|
||||||
str^ := #0;
|
|
||||||
digit := i;
|
|
||||||
repeat
|
|
||||||
Dec(str);
|
|
||||||
str^ := Char((digit mod 10) + Byte('0'));
|
|
||||||
digit := digit div 10;
|
|
||||||
until (digit = 0);
|
|
||||||
console.writestringex(@Buffer[0], attributes);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure writecharlnex(character: char; attributes: uint32); [public, alias: 'console_writecharlnex'];
|
procedure writecharlnex(character: char; attributes: uint32); [public, alias: 'console_writecharlnex'];
|
||||||
begin
|
begin
|
||||||
console.writecharex(character, attributes);
|
console.writecharex(character, attributes);
|
||||||
@ -1472,12 +1450,6 @@ begin
|
|||||||
console._safeincrement_y();
|
console._safeincrement_y();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure writewordlnex(i: DWORD; attributes: uint32); [public, alias: 'console_writewordlnex'];
|
|
||||||
begin
|
|
||||||
console.writewordex(i, attributes);
|
|
||||||
console._safeincrement_y();
|
|
||||||
end;
|
|
||||||
|
|
||||||
function combinecolors(Foreground, Background: uint16): uint32;
|
function combinecolors(Foreground, Background: uint16): uint32;
|
||||||
begin
|
begin
|
||||||
combinecolors:= (uint32(Foreground) SHL 16) OR Background;
|
combinecolors:= (uint32(Foreground) SHL 16) OR Background;
|
||||||
@ -1558,6 +1530,8 @@ end;
|
|||||||
|
|
||||||
procedure _safeincrement_y(); [public, alias: '_console_safeincrement_y'];
|
procedure _safeincrement_y(); [public, alias: '_console_safeincrement_y'];
|
||||||
begin
|
begin
|
||||||
|
serial.send(COM1, uint8(13), 10000);
|
||||||
|
serial.send(COM1, uint8(10), 10000);
|
||||||
if WindowManager.Windows[DefaultWND] <> nil then begin
|
if WindowManager.Windows[DefaultWND] <> nil then begin
|
||||||
WindowManager.Windows[DefaultWND]^.Cursor.Y:= WindowManager.Windows[DefaultWND]^.Cursor.Y+1;
|
WindowManager.Windows[DefaultWND]^.Cursor.Y:= WindowManager.Windows[DefaultWND]^.Cursor.Y+1;
|
||||||
if WindowManager.Windows[DefaultWND]^.Cursor.Y > WindowManager.Windows[DefaultWND]^.WND_H-1 then begin
|
if WindowManager.Windows[DefaultWND]^.Cursor.Y > WindowManager.Windows[DefaultWND]^.WND_H-1 then begin
|
||||||
@ -1758,11 +1732,6 @@ begin
|
|||||||
console.writeintexWND(i, Console_Properties.Default_Attribute, WND);
|
console.writeintexWND(i, Console_Properties.Default_Attribute, WND);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure writewordWND(i: DWORD; WND : uint32);
|
|
||||||
begin
|
|
||||||
console.writewordexWND(i, Console_Properties.Default_Attribute, WND);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure writecharlnWND(character: char; WND : uint32);
|
procedure writecharlnWND(character: char; WND : uint32);
|
||||||
begin
|
begin
|
||||||
console.writecharlnexWND(character, Console_Properties.Default_Attribute, WND);
|
console.writecharlnexWND(character, Console_Properties.Default_Attribute, WND);
|
||||||
@ -1778,11 +1747,6 @@ begin
|
|||||||
console.writeintlnexWND(i, Console_Properties.Default_Attribute, WND);
|
console.writeintlnexWND(i, Console_Properties.Default_Attribute, WND);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure writewordlnWND(i: DWORD; WND : uint32);
|
|
||||||
begin
|
|
||||||
console.writewordlnexWND(i, Console_Properties.Default_Attribute, WND);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure writecharexWND(character: char; attributes: uint32; WND : uint32);
|
procedure writecharexWND(character: char; attributes: uint32; WND : uint32);
|
||||||
begin
|
begin
|
||||||
if WindowManager.Windows[WND] <> nil then begin
|
if WindowManager.Windows[WND] <> nil then begin
|
||||||
@ -1947,24 +1911,6 @@ begin
|
|||||||
console.writestringexWND(str, attributes, WND);
|
console.writestringexWND(str, attributes, WND);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure writewordexWND(i: DWORD; attributes: uint32; WND : uint32);
|
|
||||||
var
|
|
||||||
buffer: array [0..11] of Char;
|
|
||||||
str: PChar;
|
|
||||||
digit: DWORD;
|
|
||||||
begin
|
|
||||||
for digit := 0 to 10 do buffer[digit] := '0';
|
|
||||||
str := @buffer[11];
|
|
||||||
str^ := #0;
|
|
||||||
digit := i;
|
|
||||||
repeat
|
|
||||||
Dec(str);
|
|
||||||
str^ := Char((digit mod 10) + Byte('0'));
|
|
||||||
digit := digit div 10;
|
|
||||||
until (digit = 0);
|
|
||||||
console.writestringexWND(@Buffer[0], attributes, WND);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure writecharlnexWND(character: char; attributes: uint32; WND : uint32);
|
procedure writecharlnexWND(character: char; attributes: uint32; WND : uint32);
|
||||||
begin
|
begin
|
||||||
console.writecharexWND(character, attributes, WND);
|
console.writecharexWND(character, attributes, WND);
|
||||||
@ -1983,12 +1929,6 @@ begin
|
|||||||
console._safeincrement_y_WND(WND);
|
console._safeincrement_y_WND(WND);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure writewordlnexWND(i: DWORD; attributes: uint32; WND : uint32);
|
|
||||||
begin
|
|
||||||
console.writewordexWND(i, attributes, WND);
|
|
||||||
console._safeincrement_y_WND(WND);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure backspaceWND(WND : uint32);
|
procedure backspaceWND(WND : uint32);
|
||||||
begin
|
begin
|
||||||
if WindowManager.Windows[WND] <> nil then begin
|
if WindowManager.Windows[WND] <> nil then begin
|
||||||
|
@ -3,7 +3,7 @@ unit serial;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
util, isrmanager;
|
util, isrmanager, strings;
|
||||||
|
|
||||||
const
|
const
|
||||||
COM1 = $3F8;
|
COM1 = $3F8;
|
||||||
@ -14,6 +14,7 @@ const
|
|||||||
procedure init();
|
procedure init();
|
||||||
function receive(PORT : uint16; timeout : uint32) : uint8;
|
function receive(PORT : uint16; timeout : uint32) : uint8;
|
||||||
function send(PORT : uint16; data : uint8; timeout : uint32) : boolean;
|
function send(PORT : uint16; data : uint8; timeout : uint32) : boolean;
|
||||||
|
function sendString(str : pchar) : boolean;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -85,4 +86,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function sendString(str : pchar) : boolean;
|
||||||
|
var
|
||||||
|
i : uint32;
|
||||||
|
|
||||||
|
begin
|
||||||
|
sendString:= true;
|
||||||
|
for i:=0 to StringSize(str)-1 do begin
|
||||||
|
sendString:= sendString AND send(COM1, uint8(str[i]), 10000);
|
||||||
|
end;
|
||||||
|
sendString:= sendString AND send(COM1, uint8(13), 10000);
|
||||||
|
sendString:= sendString AND send(COM1, uint8(10), 10000);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
@ -22,6 +22,7 @@ function MACToIIPv4(mac : puint8) : puint8;
|
|||||||
procedure sendGratuitous;
|
procedure sendGratuitous;
|
||||||
procedure sendRequest(ip : puint8);
|
procedure sendRequest(ip : puint8);
|
||||||
procedure send(hType : uint16; pType : uint16; op : uint16; p_context : PPacketContext);
|
procedure send(hType : uint16; pType : uint16; op : uint16; p_context : PPacketContext);
|
||||||
|
function resolveIP(ip : puint8) : puint8;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -67,18 +68,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function findCacheRecord(ip : puint8) : PARPCacheRecord;
|
|
||||||
var
|
|
||||||
CacheRecord : PARPCacheRecord;
|
|
||||||
|
|
||||||
begin
|
|
||||||
CacheRecord:= findCacheRecordByIP(ip);
|
|
||||||
if CacheRecord = nil then begin
|
|
||||||
|
|
||||||
end;
|
|
||||||
findCacheRecord:= CacheRecord;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure send(hType : uint16; pType : uint16; op : uint16; p_context : PPacketContext);
|
procedure send(hType : uint16; pType : uint16; op : uint16; p_context : PPacketContext);
|
||||||
var
|
var
|
||||||
buf : void;
|
buf : void;
|
||||||
@ -171,6 +160,21 @@ begin
|
|||||||
sendRequestGateway(ip);
|
sendRequestGateway(ip);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function resolveIP(ip : puint8) : puint8;
|
||||||
|
var
|
||||||
|
CacheRecord : PARPCacheRecord;
|
||||||
|
|
||||||
|
begin
|
||||||
|
CacheRecord:= findCacheRecordByIP(ip);
|
||||||
|
resolveIP:= nil;
|
||||||
|
if CacheRecord = nil then begin
|
||||||
|
sendRequest(ip);
|
||||||
|
sendRequestGateway(ip);
|
||||||
|
end else begin
|
||||||
|
resolveIP:= @CacheRecord^.MAC[0];
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||||
var
|
var
|
||||||
Header : PARPHeader;
|
Header : PARPHeader;
|
||||||
|
@ -3,26 +3,114 @@ unit icmp;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
net, nettypes, netutils, ipv4, console, terminal;
|
bios_data_area,
|
||||||
|
lmemorymanager,
|
||||||
|
net, nettypes, netutils, ipv4, console, terminal, arp, util;
|
||||||
|
|
||||||
|
type
|
||||||
|
TARPErrorCode = (aecFailedToResolveHost, aecNoRouteToHost, aecTimeout, aecTTLExpired);
|
||||||
|
TARPReplyCallback = procedure(hdr : PICMPHeader);
|
||||||
|
TARPErrorCallback = procedure(hdr : PICMPHeader; Reason : TARPErrorCode);
|
||||||
|
TARPHandler = record
|
||||||
|
Active : Boolean;
|
||||||
|
OnReply : TARPReplyCallback;
|
||||||
|
OnError : TARPErrorCallback;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure register;
|
procedure register;
|
||||||
|
procedure sendICMPRequest(ip : puint8; Sequence : uint16; TTL : uint8; OnRep : TARPReplyCallback; OnErr : TARPErrorCallback);
|
||||||
|
|
||||||
|
procedure ping_err(hdr : PICMPHeader; Reason : TARPErrorCode);
|
||||||
|
procedure ping_rep(hdr : PICMPHeader);
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
var
|
||||||
|
Handlers : Array[0..255] of TARPHandler;
|
||||||
|
|
||||||
|
function nextInactiveHandler : uint8;
|
||||||
|
var
|
||||||
|
i : uint8;
|
||||||
|
|
||||||
|
begin
|
||||||
|
nextInactiveHandler:= 0;
|
||||||
|
for i:=1 to 255 do begin
|
||||||
|
if not Handlers[i].Active then begin
|
||||||
|
nextInactiveHandler:= i;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure sendResponse(p_context : PPacketContext);
|
procedure sendResponse(p_context : PPacketContext);
|
||||||
begin
|
begin
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure sendRequest(ip : puint8);
|
procedure sendICMPRequest(ip : puint8; Sequence : uint16; TTL : uint8; OnRep : TARPReplyCallback; OnErr : TARPErrorCallback);
|
||||||
|
var
|
||||||
|
handle : uint8;
|
||||||
|
dest_mac : puint8;
|
||||||
|
context : PPacketContext;
|
||||||
|
Header : PICMPHeader;
|
||||||
|
Buffer : void;
|
||||||
|
CHK : uint16;
|
||||||
|
Size : uint32;
|
||||||
|
|
||||||
|
begin
|
||||||
|
handle:= nextInactiveHandler;
|
||||||
|
Handlers[handle].Active:= true;
|
||||||
|
Handlers[handle].OnReply:= OnRep;
|
||||||
|
Handlers[handle].OnError:= OnErr;
|
||||||
|
if SameSubnetIPv4(ip, @getIPv4Config^.Address[0], @getIPv4Config^.Netmask[0]) then begin
|
||||||
|
dest_mac:= arp.resolveIP(ip);
|
||||||
|
end else begin
|
||||||
|
dest_mac:= arp.resolveIP(@getIPv4Config^.Gateway[0]);
|
||||||
|
end;
|
||||||
|
if dest_mac = nil then begin
|
||||||
|
if Handlers[handle].OnError <> nil then Handlers[handle].OnError(nil, aecFailedToResolveHost);
|
||||||
|
Handlers[handle].Active:= false;
|
||||||
|
end else begin
|
||||||
|
context:= newPacketContext;
|
||||||
|
copyMAC(getMAC, @context^.MAC.Source[0]);
|
||||||
|
copyIPv4(@getIPv4Config^.Address[0], @context^.IP.Source[0]);
|
||||||
|
copyMAC(dest_mac, @context^.MAC.Destination[0]);
|
||||||
|
copyIPv4(ip, @context^.IP.Destination[0]);
|
||||||
|
context^.TTL:= TTL;
|
||||||
|
context^.Protocol.L4:= $01;
|
||||||
|
|
||||||
|
Size:= sizeof(TICMPHeader) + sizeof(ICMP_DATA_GENERIC);
|
||||||
|
Buffer:= kalloc(Size);
|
||||||
|
Header:= PICMPHeader(Buffer);
|
||||||
|
Header^.ICMP_Type:= $08;
|
||||||
|
Header^.ICMP_CHK_Hi:= 0;
|
||||||
|
Header^.ICMP_CHK_Lo:= 0;
|
||||||
|
Header^.Identifier:= handle;
|
||||||
|
Header^.Sequence:= Sequence;
|
||||||
|
|
||||||
|
memcpy(uint32(@ICMP_DATA_GENERIC[0]), uint32(Buffer) + sizeof(TICMPHeader), sizeof(ICMP_DATA_GENERIC));
|
||||||
|
|
||||||
|
CHK:= calculateChecksum(puint16(Buffer), Size);
|
||||||
|
|
||||||
|
Header^.ICMP_CHK_Hi:= CHK AND $FF;
|
||||||
|
Header^.ICMP_CHK_Lo:= CHK SHR 8;
|
||||||
|
|
||||||
|
ipv4.send(Buffer, size, context);
|
||||||
|
|
||||||
|
freePacketContext(context);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{procedure sendRequest(ip : puint8);
|
||||||
begin
|
begin
|
||||||
|
|
||||||
end;
|
end;}
|
||||||
|
|
||||||
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||||
var
|
var
|
||||||
Header : PICMPHeader;
|
Header : PICMPHeader;
|
||||||
CHK : uint16;
|
CHK : uint16;
|
||||||
|
Handle : uint8;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
writeToLogLn(' L4: icmp.recv');
|
writeToLogLn(' L4: icmp.recv');
|
||||||
@ -45,13 +133,100 @@ begin
|
|||||||
end;
|
end;
|
||||||
$00:begin //Reply
|
$00:begin //Reply
|
||||||
writeToLogLn(' L4: icmp.reply');
|
writeToLogLn(' L4: icmp.reply');
|
||||||
|
Handle:= Header^.Identifier;
|
||||||
|
if (Handle > 0) and (Handle < 256) then begin
|
||||||
|
If Handlers[Handle].Active then begin
|
||||||
|
If Handlers[Handle].OnReply <> nil then Handlers[Handle].OnReply(Header);
|
||||||
|
Handlers[Handle].Active:= false;
|
||||||
|
Handlers[Handle].OnError:= nil;
|
||||||
|
Handlers[Handle].OnReply:= nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
PING_T1 : uint64;
|
||||||
|
PING_N : uint16;
|
||||||
|
PING_C : uint16;
|
||||||
|
PING_L : uint32;
|
||||||
|
PING_IP : puint8;
|
||||||
|
|
||||||
|
procedure ping_err(hdr : PICMPHeader; Reason : TARPErrorCode);
|
||||||
|
begin
|
||||||
|
writestringWND('Ping Error: ', getTerminalHWND);
|
||||||
|
case Reason of
|
||||||
|
aecFailedToResolveHost:writestringlnWND('Failed to resolve host.', getTerminalHWND);
|
||||||
|
aecNoRouteToHost:writestringlnWND('No route to host.', getTerminalHWND);
|
||||||
|
aecTimeout:writestringlnWND('Timeout expired.', getTerminalHWND);
|
||||||
|
aecTTLExpired:writestringlnWND('TTL Expired.', getTerminalHWND);
|
||||||
|
end;
|
||||||
|
PING_T1:= Counters.c64;
|
||||||
|
INC(PING_C);
|
||||||
|
if PING_C < PING_N then begin
|
||||||
|
sendICMPRequest(PING_IP, PING_C, 128, @ping_rep, @ping_err);
|
||||||
|
end else begin
|
||||||
|
terminal.done(PING_L);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ping_rep(hdr : PICMPHeader);
|
||||||
|
var
|
||||||
|
PING_T2 : uint64;
|
||||||
|
|
||||||
|
begin
|
||||||
|
PING_T2:= Counters.c64;
|
||||||
|
writestringWND('Ping Reply: ', getTerminalHWND);
|
||||||
|
writeIntWND(PING_T2-PING_T1, getTerminalHWND);
|
||||||
|
writeStringlnWND('ms.', getTerminalHWND);
|
||||||
|
PING_T1:= PING_T2;
|
||||||
|
INC(PING_C);
|
||||||
|
if PING_C < PING_N then begin
|
||||||
|
sendICMPRequest(PING_IP, PING_C, 128, @ping_rep, @ping_err);
|
||||||
|
end else begin
|
||||||
|
terminal.done(PING_L);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ping_terminate();
|
||||||
|
begin
|
||||||
|
PING_N:= 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure terminal_command_ping(Params : PParamList);
|
||||||
|
var
|
||||||
|
ip_str : pchar;
|
||||||
|
ip : puint8;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount(Params) > 0 then begin
|
||||||
|
ip_str:= getParam(0, Params);
|
||||||
|
ip:= stringToIPv4(ip_str);
|
||||||
|
if ip <> nil then begin
|
||||||
|
terminal.halt(PING_L, @ping_terminate);
|
||||||
|
PING_L:= Counters.c32;
|
||||||
|
PING_N:= 10;
|
||||||
|
PING_C:= 0;
|
||||||
|
PING_T1:= Counters.c64;
|
||||||
|
PING_IP:= ip;
|
||||||
|
sendICMPRequest(PING_IP, PING_C, 128, @ping_rep, @ping_err);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure register;
|
procedure register;
|
||||||
|
var
|
||||||
|
i : uint32;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
for i:=0 to 255 do begin
|
||||||
|
Handlers[i].Active:= false;
|
||||||
|
Handlers[i].OnError:= nil;
|
||||||
|
Handlers[i].OnReply:= nil;
|
||||||
|
end;
|
||||||
ipv4.registerProtocol($01, @recv);
|
ipv4.registerProtocol($01, @recv);
|
||||||
|
terminal.registerCommand('PING', @terminal_command_ping, 'Ping a host.');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
@ -45,9 +45,7 @@ procedure register();
|
|||||||
begin
|
begin
|
||||||
if not registered then begin
|
if not registered then begin
|
||||||
asm
|
asm
|
||||||
mov al, $36
|
mov ax, 1193
|
||||||
out $46, al
|
|
||||||
mov ax, 1165
|
|
||||||
out $40, al
|
out $40, al
|
||||||
mov al, ah
|
mov al, ah
|
||||||
out $40, al
|
out $40, al
|
||||||
|
@ -3,20 +3,20 @@ unit asuro;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
const
|
const
|
||||||
VERSION = '1.0.1-728ia';
|
VERSION = '1.0.1-745ia';
|
||||||
VERSION_MAJOR = '1';
|
VERSION_MAJOR = '1';
|
||||||
VERSION_MINOR = '0';
|
VERSION_MINOR = '0';
|
||||||
VERSION_SUB = '1';
|
VERSION_SUB = '1';
|
||||||
REVISION = '728';
|
REVISION = '745';
|
||||||
RELEASE = 'ia';
|
RELEASE = 'ia';
|
||||||
LINE_COUNT = 28522;
|
LINE_COUNT = 29372;
|
||||||
FILE_COUNT = 90;
|
FILE_COUNT = 110;
|
||||||
DRIVER_COUNT = 32;
|
DRIVER_COUNT = 32;
|
||||||
FPC_VERSION = '2.6.4';
|
FPC_VERSION = '2.6.4';
|
||||||
NASM_VERSION = '2.10.09';
|
NASM_VERSION = '2.10.09';
|
||||||
MAKE_VERSION = '3.81';
|
MAKE_VERSION = '3.81';
|
||||||
COMPILE_DATE = '13/05/18';
|
COMPILE_DATE = '22/05/18';
|
||||||
COMPILE_TIME = '16:34:39';
|
COMPILE_TIME = '04:31:53';
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
9
src/include/types.pas
Normal file
9
src/include/types.pas
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
unit types;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
{ THIS IS JUST HERE SO THAT VM PLAYS NICE WITHOUT CHANGES }
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
end.
|
@ -53,6 +53,8 @@ function get32bitcounter : uint32;
|
|||||||
function get64bitcounter : uint64;
|
function get64bitcounter : uint64;
|
||||||
function getTSC : uint64;
|
function getTSC : uint64;
|
||||||
|
|
||||||
|
function div6432(dividend : uint64; divisor : uint32) : uint64;
|
||||||
|
|
||||||
function BCDToUint8(bcd : uint8) : uint8;
|
function BCDToUint8(bcd : uint8) : uint8;
|
||||||
|
|
||||||
function HexCharToDecimal(hex : char) : uint8;
|
function HexCharToDecimal(hex : char) : uint8;
|
||||||
@ -61,6 +63,8 @@ procedure resetSystem();
|
|||||||
|
|
||||||
function getESP : uint32;
|
function getESP : uint32;
|
||||||
|
|
||||||
|
function MsSinceSystemBoot : uint64;
|
||||||
|
|
||||||
var
|
var
|
||||||
endptr : uint32; external name '__end';
|
endptr : uint32; external name '__end';
|
||||||
stack : uint32; external name 'KERNEL_STACK';
|
stack : uint32; external name 'KERNEL_STACK';
|
||||||
@ -70,6 +74,33 @@ implementation
|
|||||||
uses
|
uses
|
||||||
console, RTC, cpu;
|
console, RTC, cpu;
|
||||||
|
|
||||||
|
function MsSinceSystemBoot : uint64;
|
||||||
|
begin
|
||||||
|
MsSinceSystemBoot:= div6432(getTSC, (CPUID.ClockSpeed.Hz div 1000));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function div6432(dividend : uint64; divisor : uint32) : uint64;
|
||||||
|
var
|
||||||
|
d0, d4 : uint32;
|
||||||
|
r0, r4 : uint32;
|
||||||
|
|
||||||
|
begin
|
||||||
|
d4:= dividend SHR 32;
|
||||||
|
d0:= dividend AND $FFFFFFFF;
|
||||||
|
asm
|
||||||
|
PUSHAD
|
||||||
|
xor edx, edx
|
||||||
|
mov eax, d4
|
||||||
|
div divisor
|
||||||
|
mov r4, eax
|
||||||
|
mov eax, d0
|
||||||
|
div divisor
|
||||||
|
mov r0, eax
|
||||||
|
POPAD
|
||||||
|
end;
|
||||||
|
div6432:= (r0 SHL 32) OR r4;
|
||||||
|
end;
|
||||||
|
|
||||||
function switchendian32(b : uint32) : uint32;
|
function switchendian32(b : uint32) : uint32;
|
||||||
begin
|
begin
|
||||||
switchendian32:= ((b AND $FF000000) SHR 24) OR
|
switchendian32:= ((b AND $FF000000) SHR 24) OR
|
||||||
@ -254,6 +285,7 @@ begin
|
|||||||
POP EDX
|
POP EDX
|
||||||
POP EAX
|
POP EAX
|
||||||
end;
|
end;
|
||||||
|
io_wait;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure outw(port : uint16; val : uint16); [public, alias: 'util_outw'];
|
procedure outw(port : uint16; val : uint16); [public, alias: 'util_outw'];
|
||||||
@ -267,6 +299,7 @@ begin
|
|||||||
POP EDX
|
POP EDX
|
||||||
POP EAX
|
POP EAX
|
||||||
end;
|
end;
|
||||||
|
io_wait;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure outb(port : uint16; val : uint8); [public, alias: 'util_outb'];
|
procedure outb(port : uint16; val : uint8); [public, alias: 'util_outb'];
|
||||||
@ -280,6 +313,7 @@ begin
|
|||||||
POP EDX
|
POP EDX
|
||||||
POP EAX
|
POP EAX
|
||||||
end;
|
end;
|
||||||
|
io_wait;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure halt_and_catch_fire(); [public, alias: 'util_halt_and_catch_fire'];
|
procedure halt_and_catch_fire(); [public, alias: 'util_halt_and_catch_fire'];
|
||||||
@ -307,6 +341,7 @@ begin
|
|||||||
POP EDX
|
POP EDX
|
||||||
POP EAX
|
POP EAX
|
||||||
end;
|
end;
|
||||||
|
io_wait;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function inw(port : uint16) : uint16; [public, alias: 'util_inw'];
|
function inw(port : uint16) : uint16; [public, alias: 'util_inw'];
|
||||||
@ -320,6 +355,7 @@ begin
|
|||||||
POP EDX
|
POP EDX
|
||||||
POP EAX
|
POP EAX
|
||||||
end;
|
end;
|
||||||
|
io_wait;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function inb(port : uint16) : uint8; [public, alias: 'util_inb'];
|
function inb(port : uint16) : uint8; [public, alias: 'util_inb'];
|
||||||
@ -333,6 +369,7 @@ begin
|
|||||||
POP EDX
|
POP EDX
|
||||||
POP EAX
|
POP EAX
|
||||||
end;
|
end;
|
||||||
|
io_wait;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure memset(location : uint32; value : uint8; size : uint32);
|
procedure memset(location : uint32; value : uint8; size : uint32);
|
||||||
|
@ -43,7 +43,9 @@ uses
|
|||||||
splash,
|
splash,
|
||||||
cpu,
|
cpu,
|
||||||
themer,
|
themer,
|
||||||
netlog;
|
netlog,
|
||||||
|
vmlog,
|
||||||
|
vm;
|
||||||
|
|
||||||
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
||||||
|
|
||||||
@ -97,6 +99,9 @@ var
|
|||||||
l : PLinkedListBase;
|
l : PLinkedListBase;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
{ Serial Init }
|
||||||
|
serial.init();
|
||||||
|
|
||||||
{ Store Multiboot info }
|
{ Store Multiboot info }
|
||||||
multibootinfo:= mbinfo;
|
multibootinfo:= mbinfo;
|
||||||
multibootmagic:= mbmagic;
|
multibootmagic:= mbmagic;
|
||||||
@ -133,6 +138,15 @@ begin
|
|||||||
BSOD('GDT', 'Failed to load the GDT correctly.');
|
BSOD('GDT', 'Failed to load the GDT correctly.');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
console.output('MULTIBOOT', 'Assigned Framebuffer: ');
|
||||||
|
console.writehexln(multibootinfo^.framebuffer_addr);
|
||||||
|
console.output('MULTIBOOT', 'Assigned Framebuffer Metrics: ');
|
||||||
|
console.writeint(multibootinfo^.framebuffer_width);
|
||||||
|
console.writestring('x');
|
||||||
|
console.writeint(multibootinfo^.framebuffer_height);
|
||||||
|
console.writestring('x');
|
||||||
|
console.writeintln(multibootinfo^.framebuffer_bpp);
|
||||||
|
|
||||||
{ Memory/CPU Init }
|
{ Memory/CPU Init }
|
||||||
idt.init();
|
idt.init();
|
||||||
irq.init();
|
irq.init();
|
||||||
@ -151,9 +165,6 @@ begin
|
|||||||
{ CPUID }
|
{ CPUID }
|
||||||
cpu.init();
|
cpu.init();
|
||||||
|
|
||||||
{ Serial Init }
|
|
||||||
serial.init();
|
|
||||||
|
|
||||||
{ Call Tracer }
|
{ Call Tracer }
|
||||||
tracer.init();
|
tracer.init();
|
||||||
|
|
||||||
@ -184,7 +195,7 @@ begin
|
|||||||
{ Bus Drivers }
|
{ Bus Drivers }
|
||||||
tracer.push_trace('kmain.BUSDRV');
|
tracer.push_trace('kmain.BUSDRV');
|
||||||
console.outputln('KERNEL', 'BUS DRIVERS: INIT BEGIN.');
|
console.outputln('KERNEL', 'BUS DRIVERS: INIT BEGIN.');
|
||||||
USB.init();
|
//USB.init();
|
||||||
pci.init();
|
pci.init();
|
||||||
console.outputln('KERNEL', 'BUS DRIVERS: INIT END.');
|
console.outputln('KERNEL', 'BUS DRIVERS: INIT END.');
|
||||||
|
|
||||||
@ -192,26 +203,43 @@ begin
|
|||||||
tracer.push_trace('kmain.NETDRV');
|
tracer.push_trace('kmain.NETDRV');
|
||||||
net.init;
|
net.init;
|
||||||
|
|
||||||
|
tracer.push_trace('kmain.VMINIT');
|
||||||
|
vm.init();
|
||||||
|
|
||||||
|
{ Init Progs }
|
||||||
|
tracer.push_trace('kmain.SHELLINIT');
|
||||||
|
shell.init();
|
||||||
|
tracer.push_trace('kmain.MEMVIEWINIT');
|
||||||
|
memview.init();
|
||||||
|
tracer.push_trace('kmain.THEMERINIT');
|
||||||
|
themer.init();
|
||||||
|
tracer.push_trace('kmain.NETLOGINIT');
|
||||||
|
netlog.init();
|
||||||
|
tracer.push_trace('kmain.VMLOGINIT');
|
||||||
|
vmlog.init();
|
||||||
|
|
||||||
|
terminal.run();
|
||||||
|
|
||||||
|
{ Init Splash }
|
||||||
|
tracer.push_trace('kmain.SPLASHINIT');
|
||||||
|
splash.init();
|
||||||
|
|
||||||
{ End of Boot }
|
{ End of Boot }
|
||||||
tracer.push_trace('kmain.EOB');
|
tracer.push_trace('kmain.EOB');
|
||||||
|
|
||||||
console.writestringln('');
|
console.writestringln('');
|
||||||
console.setdefaultattribute(console.combinecolors($17E0, $0000));
|
console.setdefaultattribute(console.combinecolors($17E0, $0000));
|
||||||
console.writestringln('Asuro Booted Correctly!');
|
console.writestringln('Asuro Booted Correctly!');
|
||||||
console.setdefaultattribute(console.combinecolors($FFFF, $0000));
|
console.setdefaultattribute(console.combinecolors($FFFF, $0000));
|
||||||
|
|
||||||
{ Init Progs }
|
|
||||||
shell.init();
|
|
||||||
memview.init();
|
|
||||||
themer.init();
|
|
||||||
netlog.init();
|
|
||||||
|
|
||||||
{ Init Splash }
|
|
||||||
splash.init();
|
|
||||||
|
|
||||||
tracer.push_trace('kmain.END');
|
tracer.push_trace('kmain.END');
|
||||||
|
|
||||||
|
tracer.push_trace('kmain.TICK');
|
||||||
while true do begin
|
while true do begin
|
||||||
|
tracer.push_trace('kmain.RedrawWindows');
|
||||||
console.redrawWindows;
|
console.redrawWindows;
|
||||||
|
tracer.push_trace('kmain.VMTick');
|
||||||
|
vm.tick();
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ begin
|
|||||||
force_alloc_block(2, 0); //First 12MiB reserved for Kernel/BIOS.
|
force_alloc_block(2, 0); //First 12MiB reserved for Kernel/BIOS.
|
||||||
force_alloc_block(3, 0);
|
force_alloc_block(3, 0);
|
||||||
console.output('PMM',' ');
|
console.output('PMM',' ');
|
||||||
console.writeword(nPresent);
|
console.writeint(nPresent);
|
||||||
console.writestringln('/1024 Block Available for Allocation.');
|
console.writestringln('/1024 Block Available for Allocation.');
|
||||||
console.outputln('PMM','INIT END.');
|
console.outputln('PMM','INIT END.');
|
||||||
pop_trace;
|
pop_trace;
|
||||||
|
@ -27,6 +27,8 @@ procedure run(Params : PParamList);
|
|||||||
begin
|
begin
|
||||||
if Handle = 0 then begin
|
if Handle = 0 then begin
|
||||||
Handle:= newWindow(20, 40, 63, 14, 'NETLOG');
|
Handle:= newWindow(20, 40, 63, 14, 'NETLOG');
|
||||||
|
clearWND(Handle);
|
||||||
|
registerEventHandler(Handle, EVENT_CLOSE, void(@OnClose));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ unit shell;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Console, RTC, terminal, strings, asuro;
|
Console, RTC, terminal, strings, asuro, tracer;
|
||||||
|
|
||||||
procedure init();
|
procedure init();
|
||||||
function getTaskbarColorsPtr : puint32;
|
function getTaskbarColorsPtr : puint32;
|
||||||
@ -197,24 +197,38 @@ end;
|
|||||||
|
|
||||||
procedure init();
|
procedure init();
|
||||||
begin
|
begin
|
||||||
|
tracer.push_trace('shell.init.1');
|
||||||
Takbar_Colors:= console.combinecolors($0000, $FFFF);
|
Takbar_Colors:= console.combinecolors($0000, $FFFF);
|
||||||
|
tracer.push_trace('shell.init.2');
|
||||||
Explore_Colors:= console.combinecolors($01C3, $07EE);
|
Explore_Colors:= console.combinecolors($01C3, $07EE);
|
||||||
|
tracer.push_trace('shell.init.3');
|
||||||
Desktop_Colors:= console.combinecolors($FFFF, $34DB);
|
Desktop_Colors:= console.combinecolors($FFFF, $34DB);
|
||||||
|
|
||||||
|
tracer.push_trace('shell.init.4');
|
||||||
DesktopHandle:= Console.newWindow(0, 0, 159, 63, 'DESKTOP');
|
DesktopHandle:= Console.newWindow(0, 0, 159, 63, 'DESKTOP');
|
||||||
|
tracer.push_trace('shell.init.5');
|
||||||
TaskBarHandle:= Console.newWindow(0, 63, 159, 1, 'SHELL');
|
TaskBarHandle:= Console.newWindow(0, 63, 159, 1, 'SHELL');
|
||||||
|
|
||||||
|
tracer.push_trace('shell.init.6');
|
||||||
console.bordersEnabled(TaskBarHandle, false);
|
console.bordersEnabled(TaskBarHandle, false);
|
||||||
|
tracer.push_trace('shell.init.7');
|
||||||
console.setShellWindow(TaskBarHandle, false);
|
console.setShellWindow(TaskBarHandle, false);
|
||||||
|
|
||||||
|
tracer.push_trace('shell.init.8');
|
||||||
console.bordersEnabled(DesktopHandle, false);
|
console.bordersEnabled(DesktopHandle, false);
|
||||||
|
tracer.push_trace('shell.init.9');
|
||||||
console.setShellWindow(DesktopHandle, false);
|
console.setShellWindow(DesktopHandle, false);
|
||||||
|
|
||||||
|
tracer.push_trace('shell.init.10');
|
||||||
console.registerEventHandler(TaskBarHandle, EVENT_DRAW, void(@Draw));
|
console.registerEventHandler(TaskBarHandle, EVENT_DRAW, void(@Draw));
|
||||||
|
tracer.push_trace('shell.init.11');
|
||||||
console.registerEventHandler(TaskBarHandle, EVENT_MOUSE_CLICK, void(@OnMouseClick));
|
console.registerEventHandler(TaskBarHandle, EVENT_MOUSE_CLICK, void(@OnMouseClick));
|
||||||
|
tracer.push_trace('shell.init.12');
|
||||||
console.registerEventHandler(DesktopHandle, EVENT_DRAW, void(@onBaseDraw));
|
console.registerEventHandler(DesktopHandle, EVENT_DRAW, void(@onBaseDraw));
|
||||||
|
|
||||||
|
tracer.push_trace('shell.init.13');
|
||||||
terminal.registerCommand('BACKGROUND', @Command_Background, 'Hide/Show background - usage: BACKGROUND <hide/show>');
|
terminal.registerCommand('BACKGROUND', @Command_Background, 'Hide/Show background - usage: BACKGROUND <hide/show>');
|
||||||
|
tracer.push_trace('shell.init.14');
|
||||||
terminal.registerCommand('COLORS', @Command_Colors, 'Set the desktop colors');
|
terminal.registerCommand('COLORS', @Command_Colors, 'Set the desktop colors');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ function done(id : uint32) : boolean;
|
|||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
RTC;
|
RTC, cpu;
|
||||||
|
|
||||||
var
|
var
|
||||||
TERMINAL_HWND : HWND = 0;
|
TERMINAL_HWND : HWND = 0;
|
||||||
@ -520,6 +520,27 @@ begin
|
|||||||
terminal.halt(555, @teapot_halt);
|
terminal.halt(555, @teapot_halt);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
c1, c2 : uint64;
|
||||||
|
first : boolean = true;
|
||||||
|
|
||||||
|
procedure testt(Params : PParamList);
|
||||||
|
var
|
||||||
|
diff : uint32;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if first then begin
|
||||||
|
c1:= Counters.c64;
|
||||||
|
first:= false;
|
||||||
|
end else begin
|
||||||
|
c2:= Counters.c64;
|
||||||
|
diff:= c2 - c1;
|
||||||
|
writeIntWND(diff, getTerminalHWND);
|
||||||
|
writeStringlnWND('ms', getTerminalHWND);
|
||||||
|
c1:= c2;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure init;
|
procedure init;
|
||||||
begin
|
begin
|
||||||
console.writestringln('TERMINAL: INIT BEGIN.');
|
console.writestringln('TERMINAL: INIT BEGIN.');
|
||||||
@ -533,6 +554,7 @@ begin
|
|||||||
registerCommandEx('SERIAL', @SendSerial, 'Send ''helloworld'' through COM1.', true);
|
registerCommandEx('SERIAL', @SendSerial, 'Send ''helloworld'' through COM1.', true);
|
||||||
registerCommand('REBOOT', @Reboot, 'Reboot the system.');
|
registerCommand('REBOOT', @Reboot, 'Reboot the system.');
|
||||||
registerCommandEx('LOLWUT', @teapot, '?', true);
|
registerCommandEx('LOLWUT', @teapot, '?', true);
|
||||||
|
registerCommandEx('TEST', @testt, '?', true);
|
||||||
console.writestringln('TERMINAL: INIT END.');
|
console.writestringln('TERMINAL: INIT END.');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
41
src/prog/vmlog.pas
Normal file
41
src/prog/vmlog.pas
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
unit vmlog;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
console, terminal, keyboard, util, strings, tracer;
|
||||||
|
|
||||||
|
procedure init();
|
||||||
|
function getVMLogHWND : HWND;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
var
|
||||||
|
Handle : HWND = 0;
|
||||||
|
|
||||||
|
function getVMLogHWND : HWND;
|
||||||
|
begin
|
||||||
|
getVMLogHWND:= Handle;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure OnClose();
|
||||||
|
begin
|
||||||
|
Handle:= 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure run(Params : PParamList);
|
||||||
|
begin
|
||||||
|
if Handle = 0 then begin
|
||||||
|
Handle:= newWindow(20, 40, 63, 14, 'VMLOG');
|
||||||
|
clearWND(Handle);
|
||||||
|
registerEventHandler(Handle, EVENT_CLOSE, void(@OnClose));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure init();
|
||||||
|
begin
|
||||||
|
tracer.push_trace('vmlog.init');
|
||||||
|
terminal.registerCommand('VMLOG', @Run, 'View virtual-machine event log.');
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
11
updatevm.sh
Executable file
11
updatevm.sh
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
DIRECTORY="src/vm"
|
||||||
|
if [ -d "$DIRECTORY" ]; then
|
||||||
|
cd "src/vm"
|
||||||
|
svn update
|
||||||
|
cd ".."
|
||||||
|
cd ".."
|
||||||
|
else
|
||||||
|
cd src
|
||||||
|
svn checkout http://ovh.spexeah.com:81/svn/MINJ/src/vm
|
||||||
|
fi
|
Loading…
x
Reference in New Issue
Block a user