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

This commit is contained in:
kieron 2018-05-22 03:33:51 +00:00
parent 4a1d7a942d
commit 8066634367
97 changed files with 422 additions and 123 deletions

BIN
Asuro.iso

Binary file not shown.

Binary file not shown.

View File

@ -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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/icmp.ppu Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/types.ppu Normal file

Binary file not shown.

Binary file not shown.

BIN
lib/vm.ppu Normal file

Binary file not shown.

BIN
lib/vm_instance.ppu Normal file

Binary file not shown.

BIN
lib/vm_scheduler.ppu Normal file

Binary file not shown.

Binary file not shown.

BIN
lib/vmlog.ppu Normal file

Binary file not shown.

View File

@ -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

View File

@ -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.

View File

@ -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;

View File

@ -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.

View File

@ -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

View File

@ -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
View File

@ -0,0 +1,9 @@
unit types;
interface
{ THIS IS JUST HERE SO THAT VM PLAYS NICE WITHOUT CHANGES }
implementation
end.

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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
View 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
View 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