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

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;
@ -1435,24 +1431,6 @@ begin
end;
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
@ -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
@ -1946,24 +1910,6 @@ begin
end;
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
@ -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;
procedure register;
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.