git-svn-id: https://spexeah.com:8443/svn/Asuro@731 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
ec1c22ff0f
commit
7e293e683b
BIN
bin/kernel.bin
BIN
bin/kernel.bin
Binary file not shown.
Binary file not shown.
BIN
lib/E1000.ppu
BIN
lib/E1000.ppu
Binary file not shown.
BIN
lib/IDE.ppu
BIN
lib/IDE.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.
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/ipv4.ppu
BIN
lib/ipv4.ppu
Binary file not shown.
BIN
lib/kernel.ppu
BIN
lib/kernel.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/memview.ppu
BIN
lib/memview.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/nettypes.ppu
BIN
lib/nettypes.ppu
Binary file not shown.
BIN
lib/netutils.ppu
BIN
lib/netutils.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/shell.ppu
BIN
lib/shell.ppu
Binary file not shown.
Binary file not shown.
BIN
lib/terminal.ppu
BIN
lib/terminal.ppu
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.
@ -4,6 +4,7 @@ interface
|
|||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
{ Generic }
|
||||||
|
|
||||||
TMACAddress = Array[0..5] of uint8;
|
TMACAddress = Array[0..5] of uint8;
|
||||||
TIPv4Address = Array[0..3] of uint8;
|
TIPv4Address = Array[0..3] of uint8;
|
||||||
@ -25,6 +26,8 @@ type
|
|||||||
L4 : uint16;
|
L4 : uint16;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ Context }
|
||||||
|
|
||||||
PPacketContext = ^TPacketContext;
|
PPacketContext = ^TPacketContext;
|
||||||
TPacketContext = record
|
TPacketContext = record
|
||||||
MAC : TMACPair;
|
MAC : TMACPair;
|
||||||
@ -33,6 +36,8 @@ type
|
|||||||
TTL : uint8;
|
TTL : uint8;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ Config }
|
||||||
|
|
||||||
PIPv4Configuration = ^TIPv4Configuration;
|
PIPv4Configuration = ^TIPv4Configuration;
|
||||||
TIPv4Configuration = record
|
TIPv4Configuration = record
|
||||||
Address : array[0..3] of uint8;
|
Address : array[0..3] of uint8;
|
||||||
@ -41,6 +46,8 @@ type
|
|||||||
UP : Boolean;
|
UP : Boolean;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ ARP }
|
||||||
|
|
||||||
TARPAbstractHeader = record
|
TARPAbstractHeader = record
|
||||||
Hardware_Type : uint16;
|
Hardware_Type : uint16;
|
||||||
Protocol_Type : uint16;
|
Protocol_Type : uint16;
|
||||||
@ -69,6 +76,8 @@ type
|
|||||||
Destination_Protocol : TIPv4Address;
|
Destination_Protocol : TIPv4Address;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ ETH2 }
|
||||||
|
|
||||||
PEthernetHeader = ^TEthernetHeader;
|
PEthernetHeader = ^TEthernetHeader;
|
||||||
TEthernetHeader = bitpacked record
|
TEthernetHeader = bitpacked record
|
||||||
dst : array[0..5] of uint8;
|
dst : array[0..5] of uint8;
|
||||||
@ -77,6 +86,8 @@ type
|
|||||||
EthTypeLo : uint8;
|
EthTypeLo : uint8;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ IPv4 }
|
||||||
|
|
||||||
PIPV4Header = ^TIPV4Header;
|
PIPV4Header = ^TIPV4Header;
|
||||||
TIPV4Header = bitpacked record
|
TIPV4Header = bitpacked record
|
||||||
version : ubit4;
|
version : ubit4;
|
||||||
@ -98,11 +109,6 @@ type
|
|||||||
Padding : uint8;
|
Padding : uint8;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
PIPv4AsWORDs = ^TIPv4AsWORDs;
|
|
||||||
TIPv4AsWORDs = bitpacked record
|
|
||||||
WORDS : Array[0..11] of uint16;
|
|
||||||
end;
|
|
||||||
|
|
||||||
TTCPFlags = record
|
TTCPFlags = record
|
||||||
RS : Boolean;
|
RS : Boolean;
|
||||||
DF : Boolean;
|
DF : Boolean;
|
||||||
@ -125,9 +131,13 @@ type
|
|||||||
Options : uint32;
|
Options : uint32;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ Callback Types }
|
||||||
|
|
||||||
TNetSendCallback = function(p_data : void; p_len : uint16) : sint32;
|
TNetSendCallback = function(p_data : void; p_len : uint16) : sint32;
|
||||||
TRecvCallback = procedure(p_data : void; p_len : uint16; p_context : PPacketContext);
|
TRecvCallback = procedure(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||||
|
|
||||||
|
{ Constants }
|
||||||
|
|
||||||
const
|
const
|
||||||
BROADCAST_MAC : Array[0..5] of uint8 = ($FF, $FF, $FF, $FF, $FF, $FF);
|
BROADCAST_MAC : Array[0..5] of uint8 = ($FF, $FF, $FF, $FF, $FF, $FF);
|
||||||
NULL_MAC : Array[0..5] of uint8 = ($00, $00, $00, $00, $00, $00);
|
NULL_MAC : Array[0..5] of uint8 = ($00, $00, $00, $00, $00, $00);
|
||||||
|
@ -17,9 +17,40 @@ function MACEqual(mac1 : puint8; mac2 : puint8) : boolean;
|
|||||||
function IPEqual(ip1 : puint8; ip2 : puint8) : boolean;
|
function IPEqual(ip1 : puint8; ip2 : puint8) : boolean;
|
||||||
function newPacketContext : PPacketContext;
|
function newPacketContext : PPacketContext;
|
||||||
procedure freePacketContext(p_context : PPacketContext);
|
procedure freePacketContext(p_context : PPacketContext);
|
||||||
|
function calculateChecksum(p_data : puint16; p_len : uint16) : uint16;
|
||||||
|
function verifyChecksum(p_data : puint16; p_len : uint16) : boolean;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
function calculateChecksum(p_data : puint16; p_len : uint16) : uint16;
|
||||||
|
var
|
||||||
|
sum : uint32;
|
||||||
|
dat : puint16;
|
||||||
|
carry : uint16;
|
||||||
|
i : uint32;
|
||||||
|
l : uint32;
|
||||||
|
|
||||||
|
begin
|
||||||
|
dat:= p_data;
|
||||||
|
sum:= 0;
|
||||||
|
l:= p_len div 2;
|
||||||
|
for i:=1 to l do begin
|
||||||
|
sum:= sum + p_data^;
|
||||||
|
inc(p_data);
|
||||||
|
end;
|
||||||
|
while (sum > $FFFF) do begin
|
||||||
|
carry:= (sum AND $FFFF0000) SHR 16;
|
||||||
|
sum:= (sum AND $FFFF);
|
||||||
|
sum:= sum + carry;
|
||||||
|
end;
|
||||||
|
calculateChecksum:= not (sum AND $FFFF);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function verifyChecksum(p_data : puint16; p_len : uint16) : boolean;
|
||||||
|
begin
|
||||||
|
verifyChecksum:= calculateChecksum(p_data, p_len) = $0000;
|
||||||
|
end;
|
||||||
|
|
||||||
function stringToMAC(str : pchar) : puint8;
|
function stringToMAC(str : pchar) : puint8;
|
||||||
var
|
var
|
||||||
Mac_Delim : PLinkedListBase;
|
Mac_Delim : PLinkedListBase;
|
||||||
|
@ -30,29 +30,6 @@ begin
|
|||||||
getIPv4Config:= @Config;
|
getIPv4Config:= @Config;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function calculateChecksum(p_data : puint16; p_len : uint16) : uint16;
|
|
||||||
var
|
|
||||||
sum : uint32;
|
|
||||||
dat : puint16;
|
|
||||||
carry : uint16;
|
|
||||||
i : uint32;
|
|
||||||
l : uint32;
|
|
||||||
|
|
||||||
begin
|
|
||||||
dat:= p_data;
|
|
||||||
sum:= 0;
|
|
||||||
l:= p_len div 2;
|
|
||||||
for i:=1 to l do begin
|
|
||||||
sum:= sum + p_data^;
|
|
||||||
inc(p_data);
|
|
||||||
end;
|
|
||||||
while (sum > $FFFF) do begin
|
|
||||||
carry:= (sum AND $FFFF0000) SHR 16;
|
|
||||||
sum:= sum + carry;
|
|
||||||
end;
|
|
||||||
calculateChecksum:= not sum;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure send(p_data : void; p_len : uint16; p_context : PPacketContext);
|
procedure send(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||||
var
|
var
|
||||||
Header : TIPV4Header;
|
Header : TIPV4Header;
|
||||||
@ -133,9 +110,11 @@ begin
|
|||||||
copyIPv4(@AHeader.Src[0], @p_context^.IP.Source[0]);
|
copyIPv4(@AHeader.Src[0], @p_context^.IP.Source[0]);
|
||||||
copyIPv4(@AHeader.Dst[0], @p_context^.IP.Destination[0]);
|
copyIPv4(@AHeader.Dst[0], @p_context^.IP.Destination[0]);
|
||||||
|
|
||||||
|
if Config.UP then begin
|
||||||
if (IPEqual(@Config.Address[0], @AHeader.Dst[0])) OR (AHeader.Dst[3] = 255) then begin
|
if (IPEqual(@Config.Address[0], @AHeader.Dst[0])) OR (AHeader.Dst[3] = 255) then begin
|
||||||
if Protocols[AHeader.Protocol] <> nil then Protocols[AHeader.Protocol](void(buf), len, p_context);
|
if Protocols[AHeader.Protocol] <> nil then Protocols[AHeader.Protocol](void(buf), len, p_context);
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
pop_trace;
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -9,14 +9,14 @@ const
|
|||||||
VERSION_SUB = '1';
|
VERSION_SUB = '1';
|
||||||
REVISION = '728';
|
REVISION = '728';
|
||||||
RELEASE = 'ia';
|
RELEASE = 'ia';
|
||||||
LINE_COUNT = 28339;
|
LINE_COUNT = 28413;
|
||||||
FILE_COUNT = 90;
|
FILE_COUNT = 90;
|
||||||
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 = '12/05/18';
|
COMPILE_DATE = '12/05/18';
|
||||||
COMPILE_TIME = '16:47:26';
|
COMPILE_TIME = '18:38:28';
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ uses
|
|||||||
serial;
|
serial;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
THaltCallback = procedure();
|
||||||
PParamList = ^TParamList;
|
PParamList = ^TParamList;
|
||||||
TParamList = record
|
TParamList = record
|
||||||
Param : pchar;
|
Param : pchar;
|
||||||
@ -49,6 +50,9 @@ var
|
|||||||
bIndex : uint32 = 0;
|
bIndex : uint32 = 0;
|
||||||
Commands : array[0..65534] of TCommand;
|
Commands : array[0..65534] of TCommand;
|
||||||
Working_Directory : PChar = '/';
|
Working_Directory : PChar = '/';
|
||||||
|
Halted : Boolean = false;
|
||||||
|
HaltID : uint32 = 0;
|
||||||
|
HaltCB : THaltCallback = nil;
|
||||||
|
|
||||||
procedure run;
|
procedure run;
|
||||||
procedure init;
|
procedure init;
|
||||||
@ -60,6 +64,8 @@ function getParam(index : uint32; params : PParamList) : pchar;
|
|||||||
procedure setWorkingDirectory(str : pchar);
|
procedure setWorkingDirectory(str : pchar);
|
||||||
function getWorkingDirectory : pchar;
|
function getWorkingDirectory : pchar;
|
||||||
function getTerminalHWND : uint32;
|
function getTerminalHWND : uint32;
|
||||||
|
function halt(id : uint32; cb : THaltCallback) : boolean;
|
||||||
|
function done(id : uint32) : boolean;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -69,6 +75,42 @@ uses
|
|||||||
var
|
var
|
||||||
TERMINAL_HWND : HWND = 0;
|
TERMINAL_HWND : HWND = 0;
|
||||||
|
|
||||||
|
function halt(id : uint32; cb : THaltCallback) : boolean;
|
||||||
|
begin
|
||||||
|
halt:= false;
|
||||||
|
if not Halted then begin
|
||||||
|
Halted:= true;
|
||||||
|
halt:= true;
|
||||||
|
HaltID:= id;
|
||||||
|
HaltCB:= cb;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function done(id : uint32) : boolean;
|
||||||
|
begin
|
||||||
|
done:= false;
|
||||||
|
if Halted then begin
|
||||||
|
if id = HaltID then begin
|
||||||
|
if HaltCB <> nil then HaltCB();
|
||||||
|
HaltCB:= nil;
|
||||||
|
Halted:= false;
|
||||||
|
HaltID:= 0;
|
||||||
|
done:= true;
|
||||||
|
console.writestringWND('Asuro#', TERMINAL_HWND);
|
||||||
|
console.writestringWND(Working_Directory, TERMINAL_HWND);
|
||||||
|
console.writestringWND('> ', TERMINAL_HWND);
|
||||||
|
bIndex:= 0;
|
||||||
|
memset(uint32(@buffer[0]), 0, 1024);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure force_done;
|
||||||
|
begin
|
||||||
|
HaltID:= 0;
|
||||||
|
done(0);
|
||||||
|
end;
|
||||||
|
|
||||||
function getTerminalHWND : uint32;
|
function getTerminalHWND : uint32;
|
||||||
begin
|
begin
|
||||||
getTerminalHWND:= TERMINAL_HWND;
|
getTerminalHWND:= TERMINAL_HWND;
|
||||||
@ -381,13 +423,14 @@ begin
|
|||||||
console.writestringlnWND('Unknown Command.', TERMINAL_HWND);
|
console.writestringlnWND('Unknown Command.', TERMINAL_HWND);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if not Halted then begin
|
||||||
{ Reset the terminal ready for the next command }
|
{ Reset the terminal ready for the next command }
|
||||||
console.writestringWND('Asuro#', TERMINAL_HWND);
|
console.writestringWND('Asuro#', TERMINAL_HWND);
|
||||||
console.writestringWND(Working_Directory, TERMINAL_HWND);
|
console.writestringWND(Working_Directory, TERMINAL_HWND);
|
||||||
console.writestringWND('> ', TERMINAL_HWND);
|
console.writestringWND('> ', TERMINAL_HWND);
|
||||||
bIndex:= 0;
|
bIndex:= 0;
|
||||||
memset(uint32(@buffer[0]), 0, 1024);
|
memset(uint32(@buffer[0]), 0, 1024);
|
||||||
|
end;
|
||||||
pop_trace;
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -395,6 +438,10 @@ procedure key_event(info : TKeyInfo);
|
|||||||
begin
|
begin
|
||||||
if TERMINAL_HWND <> 0 then begin
|
if TERMINAL_HWND <> 0 then begin
|
||||||
//writeintlnWND(info.key_code, TERMINAL_HWND);
|
//writeintlnWND(info.key_code, TERMINAL_HWND);
|
||||||
|
if info.CTRL_DOWN then begin
|
||||||
|
if info.key_code = uint8('c') then force_done;
|
||||||
|
end else begin
|
||||||
|
if not halted then begin
|
||||||
if (info.key_code >= 32) and (info.key_code <= 126) then begin
|
if (info.key_code >= 32) and (info.key_code <= 126) then begin
|
||||||
if bIndex < 1024 then begin
|
if bIndex < 1024 then begin
|
||||||
buffer[bIndex]:= info.key_code;
|
buffer[bIndex]:= info.key_code;
|
||||||
@ -414,6 +461,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure change_dir(Params : PParamList);
|
procedure change_dir(Params : PParamList);
|
||||||
begin
|
begin
|
||||||
@ -452,9 +501,14 @@ begin
|
|||||||
resetSystem;
|
resetSystem;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure teapot_halt;
|
||||||
|
begin
|
||||||
|
console.writeStringlnWND('Stopped. [CTRL+C]', getTerminalHWND);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure teapot(Params : PParamList);
|
procedure teapot(Params : PParamList);
|
||||||
begin
|
begin
|
||||||
console.writestringlnWND('Teapot?', getTerminalHWND);
|
terminal.halt(555, @teapot_halt);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure init;
|
procedure init;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user