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 "======================="
|
||||
echo " "
|
||||
echo "Checking out latest VM Source..."
|
||||
echo " "
|
||||
./updatevm.sh
|
||||
echo " "
|
||||
echo "Compiling ASM Stub..."
|
||||
echo " "
|
||||
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.
100
src/console.pas
100
src/console.pas
@ -71,11 +71,6 @@ procedure writeintln(i: Integer);
|
||||
procedure writeintex(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 writehex(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 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 writehexpairExWND(b : uint8; Attributes : uint32; WND : uint32);
|
||||
procedure writehexWND(i: DWORD; WND : uint32);
|
||||
@ -283,12 +273,16 @@ type
|
||||
end;
|
||||
PWindow = ^TWindow;
|
||||
|
||||
TWindows = Array[0..MAX_WINDOWS-1] of PWindow;
|
||||
TZOrder = Array[0..MAX_WINDOWS-1] of uint32;
|
||||
TWindows = Array[0..MAX_WINDOWS-1] of PWindow;
|
||||
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
|
||||
Windows : TWindows;
|
||||
Z_Order : TZOrder;
|
||||
Back_Order : TBackOrder;
|
||||
Front_Order : TFrontOrder;
|
||||
MousePos : TMouseCoord;
|
||||
MousePrev : TMouseCoord;
|
||||
end;
|
||||
@ -544,6 +538,7 @@ var
|
||||
WND : PWindow;
|
||||
|
||||
begin
|
||||
tracer.push_trace('console.newWindow');
|
||||
newWindow:= 0;
|
||||
for idx:=1 to MAX_WINDOWS-1 do begin
|
||||
if WindowManager.Windows[idx] = nil then begin
|
||||
@ -927,6 +922,16 @@ begin
|
||||
WND^.Closed:= false;
|
||||
WND^.Border:= 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;
|
||||
AddToZOrder(0);
|
||||
FocusZOrder(0);
|
||||
@ -1252,11 +1257,6 @@ begin
|
||||
console.writeintex(i, Console_Properties.Default_Attribute);
|
||||
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'];
|
||||
begin
|
||||
console.writecharlnex(character, Console_Properties.Default_Attribute);
|
||||
@ -1272,13 +1272,9 @@ begin
|
||||
console.writeintlnex(i, Console_Properties.Default_Attribute);
|
||||
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'];
|
||||
begin
|
||||
serial.send(COM1, uint8(character), 10000);
|
||||
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].Attributes:= attributes;
|
||||
@ -1436,24 +1432,6 @@ begin
|
||||
console.writestringex(str, attributes);
|
||||
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'];
|
||||
begin
|
||||
console.writecharex(character, attributes);
|
||||
@ -1472,12 +1450,6 @@ begin
|
||||
console._safeincrement_y();
|
||||
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;
|
||||
begin
|
||||
combinecolors:= (uint32(Foreground) SHL 16) OR Background;
|
||||
@ -1558,6 +1530,8 @@ end;
|
||||
|
||||
procedure _safeincrement_y(); [public, alias: '_console_safeincrement_y'];
|
||||
begin
|
||||
serial.send(COM1, uint8(13), 10000);
|
||||
serial.send(COM1, uint8(10), 10000);
|
||||
if WindowManager.Windows[DefaultWND] <> nil then begin
|
||||
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
|
||||
@ -1758,11 +1732,6 @@ begin
|
||||
console.writeintexWND(i, Console_Properties.Default_Attribute, WND);
|
||||
end;
|
||||
|
||||
procedure writewordWND(i: DWORD; WND : uint32);
|
||||
begin
|
||||
console.writewordexWND(i, Console_Properties.Default_Attribute, WND);
|
||||
end;
|
||||
|
||||
procedure writecharlnWND(character: char; WND : uint32);
|
||||
begin
|
||||
console.writecharlnexWND(character, Console_Properties.Default_Attribute, WND);
|
||||
@ -1778,11 +1747,6 @@ begin
|
||||
console.writeintlnexWND(i, Console_Properties.Default_Attribute, WND);
|
||||
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);
|
||||
begin
|
||||
if WindowManager.Windows[WND] <> nil then begin
|
||||
@ -1947,24 +1911,6 @@ begin
|
||||
console.writestringexWND(str, attributes, WND);
|
||||
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);
|
||||
begin
|
||||
console.writecharexWND(character, attributes, WND);
|
||||
@ -1983,12 +1929,6 @@ begin
|
||||
console._safeincrement_y_WND(WND);
|
||||
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);
|
||||
begin
|
||||
if WindowManager.Windows[WND] <> nil then begin
|
||||
|
@ -3,7 +3,7 @@ unit serial;
|
||||
interface
|
||||
|
||||
uses
|
||||
util, isrmanager;
|
||||
util, isrmanager, strings;
|
||||
|
||||
const
|
||||
COM1 = $3F8;
|
||||
@ -14,6 +14,7 @@ const
|
||||
procedure init();
|
||||
function receive(PORT : uint16; timeout : uint32) : uint8;
|
||||
function send(PORT : uint16; data : uint8; timeout : uint32) : boolean;
|
||||
function sendString(str : pchar) : boolean;
|
||||
|
||||
implementation
|
||||
|
||||
@ -85,4 +86,17 @@ begin
|
||||
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.
|
@ -22,6 +22,7 @@ function MACToIIPv4(mac : puint8) : puint8;
|
||||
procedure sendGratuitous;
|
||||
procedure sendRequest(ip : puint8);
|
||||
procedure send(hType : uint16; pType : uint16; op : uint16; p_context : PPacketContext);
|
||||
function resolveIP(ip : puint8) : puint8;
|
||||
|
||||
implementation
|
||||
|
||||
@ -67,18 +68,6 @@ begin
|
||||
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);
|
||||
var
|
||||
buf : void;
|
||||
@ -171,6 +160,21 @@ begin
|
||||
sendRequestGateway(ip);
|
||||
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);
|
||||
var
|
||||
Header : PARPHeader;
|
||||
|
@ -3,26 +3,114 @@ unit icmp;
|
||||
interface
|
||||
|
||||
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 sendICMPRequest(ip : puint8; Sequence : uint16; TTL : uint8; OnRep : TARPReplyCallback; OnErr : TARPErrorCallback);
|
||||
|
||||
procedure ping_err(hdr : PICMPHeader; Reason : TARPErrorCode);
|
||||
procedure ping_rep(hdr : PICMPHeader);
|
||||
|
||||
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);
|
||||
begin
|
||||
|
||||
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
|
||||
|
||||
end;
|
||||
end;}
|
||||
|
||||
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||
var
|
||||
Header : PICMPHeader;
|
||||
CHK : uint16;
|
||||
Handle : uint8;
|
||||
|
||||
begin
|
||||
writeToLogLn(' L4: icmp.recv');
|
||||
@ -45,13 +133,100 @@ begin
|
||||
end;
|
||||
$00:begin //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;
|
||||
|
||||
procedure register;
|
||||
var
|
||||
i : uint32;
|
||||
|
||||
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);
|
||||
terminal.registerCommand('PING', @terminal_command_ping, 'Ping a host.');
|
||||
end;
|
||||
|
||||
end.
|
@ -45,9 +45,7 @@ procedure register();
|
||||
begin
|
||||
if not registered then begin
|
||||
asm
|
||||
mov al, $36
|
||||
out $46, al
|
||||
mov ax, 1165
|
||||
mov ax, 1193
|
||||
out $40, al
|
||||
mov al, ah
|
||||
out $40, al
|
||||
|
@ -3,20 +3,20 @@ unit asuro;
|
||||
interface
|
||||
|
||||
const
|
||||
VERSION = '1.0.1-728ia';
|
||||
VERSION = '1.0.1-745ia';
|
||||
VERSION_MAJOR = '1';
|
||||
VERSION_MINOR = '0';
|
||||
VERSION_SUB = '1';
|
||||
REVISION = '728';
|
||||
REVISION = '745';
|
||||
RELEASE = 'ia';
|
||||
LINE_COUNT = 28522;
|
||||
FILE_COUNT = 90;
|
||||
LINE_COUNT = 29372;
|
||||
FILE_COUNT = 110;
|
||||
DRIVER_COUNT = 32;
|
||||
FPC_VERSION = '2.6.4';
|
||||
NASM_VERSION = '2.10.09';
|
||||
MAKE_VERSION = '3.81';
|
||||
COMPILE_DATE = '13/05/18';
|
||||
COMPILE_TIME = '16:34:39';
|
||||
COMPILE_DATE = '22/05/18';
|
||||
COMPILE_TIME = '04:31:53';
|
||||
|
||||
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 getTSC : uint64;
|
||||
|
||||
function div6432(dividend : uint64; divisor : uint32) : uint64;
|
||||
|
||||
function BCDToUint8(bcd : uint8) : uint8;
|
||||
|
||||
function HexCharToDecimal(hex : char) : uint8;
|
||||
@ -61,6 +63,8 @@ procedure resetSystem();
|
||||
|
||||
function getESP : uint32;
|
||||
|
||||
function MsSinceSystemBoot : uint64;
|
||||
|
||||
var
|
||||
endptr : uint32; external name '__end';
|
||||
stack : uint32; external name 'KERNEL_STACK';
|
||||
@ -70,6 +74,33 @@ implementation
|
||||
uses
|
||||
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;
|
||||
begin
|
||||
switchendian32:= ((b AND $FF000000) SHR 24) OR
|
||||
@ -254,6 +285,7 @@ begin
|
||||
POP EDX
|
||||
POP EAX
|
||||
end;
|
||||
io_wait;
|
||||
end;
|
||||
|
||||
procedure outw(port : uint16; val : uint16); [public, alias: 'util_outw'];
|
||||
@ -267,6 +299,7 @@ begin
|
||||
POP EDX
|
||||
POP EAX
|
||||
end;
|
||||
io_wait;
|
||||
end;
|
||||
|
||||
procedure outb(port : uint16; val : uint8); [public, alias: 'util_outb'];
|
||||
@ -280,6 +313,7 @@ begin
|
||||
POP EDX
|
||||
POP EAX
|
||||
end;
|
||||
io_wait;
|
||||
end;
|
||||
|
||||
procedure halt_and_catch_fire(); [public, alias: 'util_halt_and_catch_fire'];
|
||||
@ -307,6 +341,7 @@ begin
|
||||
POP EDX
|
||||
POP EAX
|
||||
end;
|
||||
io_wait;
|
||||
end;
|
||||
|
||||
function inw(port : uint16) : uint16; [public, alias: 'util_inw'];
|
||||
@ -320,6 +355,7 @@ begin
|
||||
POP EDX
|
||||
POP EAX
|
||||
end;
|
||||
io_wait;
|
||||
end;
|
||||
|
||||
function inb(port : uint16) : uint8; [public, alias: 'util_inb'];
|
||||
@ -333,6 +369,7 @@ begin
|
||||
POP EDX
|
||||
POP EAX
|
||||
end;
|
||||
io_wait;
|
||||
end;
|
||||
|
||||
procedure memset(location : uint32; value : uint8; size : uint32);
|
||||
|
@ -43,7 +43,9 @@ uses
|
||||
splash,
|
||||
cpu,
|
||||
themer,
|
||||
netlog;
|
||||
netlog,
|
||||
vmlog,
|
||||
vm;
|
||||
|
||||
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
||||
|
||||
@ -97,6 +99,9 @@ var
|
||||
l : PLinkedListBase;
|
||||
|
||||
begin
|
||||
{ Serial Init }
|
||||
serial.init();
|
||||
|
||||
{ Store Multiboot info }
|
||||
multibootinfo:= mbinfo;
|
||||
multibootmagic:= mbmagic;
|
||||
@ -133,6 +138,15 @@ begin
|
||||
BSOD('GDT', 'Failed to load the GDT correctly.');
|
||||
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 }
|
||||
idt.init();
|
||||
irq.init();
|
||||
@ -151,9 +165,6 @@ begin
|
||||
{ CPUID }
|
||||
cpu.init();
|
||||
|
||||
{ Serial Init }
|
||||
serial.init();
|
||||
|
||||
{ Call Tracer }
|
||||
tracer.init();
|
||||
|
||||
@ -184,7 +195,7 @@ begin
|
||||
{ Bus Drivers }
|
||||
tracer.push_trace('kmain.BUSDRV');
|
||||
console.outputln('KERNEL', 'BUS DRIVERS: INIT BEGIN.');
|
||||
USB.init();
|
||||
//USB.init();
|
||||
pci.init();
|
||||
console.outputln('KERNEL', 'BUS DRIVERS: INIT END.');
|
||||
|
||||
@ -192,26 +203,43 @@ begin
|
||||
tracer.push_trace('kmain.NETDRV');
|
||||
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 }
|
||||
tracer.push_trace('kmain.EOB');
|
||||
|
||||
console.writestringln('');
|
||||
console.setdefaultattribute(console.combinecolors($17E0, $0000));
|
||||
console.writestringln('Asuro Booted Correctly!');
|
||||
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.TICK');
|
||||
while true do begin
|
||||
tracer.push_trace('kmain.RedrawWindows');
|
||||
console.redrawWindows;
|
||||
tracer.push_trace('kmain.VMTick');
|
||||
vm.tick();
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -125,7 +125,7 @@ begin
|
||||
force_alloc_block(2, 0); //First 12MiB reserved for Kernel/BIOS.
|
||||
force_alloc_block(3, 0);
|
||||
console.output('PMM',' ');
|
||||
console.writeword(nPresent);
|
||||
console.writeint(nPresent);
|
||||
console.writestringln('/1024 Block Available for Allocation.');
|
||||
console.outputln('PMM','INIT END.');
|
||||
pop_trace;
|
||||
|
@ -27,6 +27,8 @@ procedure run(Params : PParamList);
|
||||
begin
|
||||
if Handle = 0 then begin
|
||||
Handle:= newWindow(20, 40, 63, 14, 'NETLOG');
|
||||
clearWND(Handle);
|
||||
registerEventHandler(Handle, EVENT_CLOSE, void(@OnClose));
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -3,7 +3,7 @@ unit shell;
|
||||
interface
|
||||
|
||||
uses
|
||||
Console, RTC, terminal, strings, asuro;
|
||||
Console, RTC, terminal, strings, asuro, tracer;
|
||||
|
||||
procedure init();
|
||||
function getTaskbarColorsPtr : puint32;
|
||||
@ -197,24 +197,38 @@ end;
|
||||
|
||||
procedure init();
|
||||
begin
|
||||
tracer.push_trace('shell.init.1');
|
||||
Takbar_Colors:= console.combinecolors($0000, $FFFF);
|
||||
tracer.push_trace('shell.init.2');
|
||||
Explore_Colors:= console.combinecolors($01C3, $07EE);
|
||||
tracer.push_trace('shell.init.3');
|
||||
Desktop_Colors:= console.combinecolors($FFFF, $34DB);
|
||||
|
||||
tracer.push_trace('shell.init.4');
|
||||
DesktopHandle:= Console.newWindow(0, 0, 159, 63, 'DESKTOP');
|
||||
tracer.push_trace('shell.init.5');
|
||||
TaskBarHandle:= Console.newWindow(0, 63, 159, 1, 'SHELL');
|
||||
|
||||
tracer.push_trace('shell.init.6');
|
||||
console.bordersEnabled(TaskBarHandle, false);
|
||||
tracer.push_trace('shell.init.7');
|
||||
console.setShellWindow(TaskBarHandle, false);
|
||||
|
||||
tracer.push_trace('shell.init.8');
|
||||
console.bordersEnabled(DesktopHandle, false);
|
||||
tracer.push_trace('shell.init.9');
|
||||
console.setShellWindow(DesktopHandle, false);
|
||||
|
||||
tracer.push_trace('shell.init.10');
|
||||
console.registerEventHandler(TaskBarHandle, EVENT_DRAW, void(@Draw));
|
||||
tracer.push_trace('shell.init.11');
|
||||
console.registerEventHandler(TaskBarHandle, EVENT_MOUSE_CLICK, void(@OnMouseClick));
|
||||
tracer.push_trace('shell.init.12');
|
||||
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>');
|
||||
tracer.push_trace('shell.init.14');
|
||||
terminal.registerCommand('COLORS', @Command_Colors, 'Set the desktop colors');
|
||||
end;
|
||||
|
||||
|
@ -71,7 +71,7 @@ function done(id : uint32) : boolean;
|
||||
implementation
|
||||
|
||||
uses
|
||||
RTC;
|
||||
RTC, cpu;
|
||||
|
||||
var
|
||||
TERMINAL_HWND : HWND = 0;
|
||||
@ -520,6 +520,27 @@ begin
|
||||
terminal.halt(555, @teapot_halt);
|
||||
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;
|
||||
begin
|
||||
console.writestringln('TERMINAL: INIT BEGIN.');
|
||||
@ -533,6 +554,7 @@ begin
|
||||
registerCommandEx('SERIAL', @SendSerial, 'Send ''helloworld'' through COM1.', true);
|
||||
registerCommand('REBOOT', @Reboot, 'Reboot the system.');
|
||||
registerCommandEx('LOLWUT', @teapot, '?', true);
|
||||
registerCommandEx('TEST', @testt, '?', true);
|
||||
console.writestringln('TERMINAL: INIT 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