120 lines
5.0 KiB
ObjectPascal
120 lines
5.0 KiB
ObjectPascal
unit vmstate;
|
|
|
|
interface
|
|
|
|
uses
|
|
console, terminal, keyboard, util, strings, tracer,
|
|
vm_scheduler, vm_instance;
|
|
|
|
procedure init();
|
|
|
|
implementation
|
|
|
|
var
|
|
Handle : HWND = 0;
|
|
|
|
procedure OnClose();
|
|
begin
|
|
Handle:= 0;
|
|
end;
|
|
|
|
procedure OnDraw();
|
|
begin
|
|
if Handle <> 0 then begin
|
|
clearWND(Handle);
|
|
if vm_instance.Task.Valid then begin
|
|
console.writeStringlnWND(' ', Handle);
|
|
|
|
console.writeStringWND(' Task: ', Handle);
|
|
console.writeIntWND (vm_instance.Task.State^.TASK_ID, Handle);
|
|
console.writeStringWND(' | SCHED: ', Handle);
|
|
console.writeintlnWND (vm_scheduler.getActiveTask, Handle);
|
|
|
|
console.writeStringlnWND(' ', Handle);
|
|
|
|
console.writeStringWND(' OBJ1: ', Handle);
|
|
console.writeintWND (vm_instance.Task.State^.Registers[OBJ1], Handle);
|
|
console.writeStringWND(' | OBJ2: ', Handle);
|
|
console.writeintlnWND (vm_instance.Task.State^.Registers[OBJ2], Handle);
|
|
|
|
console.writeStringWND(' C1: ', Handle);
|
|
console.writeintWND (vm_instance.Task.State^.Registers[C1], Handle);
|
|
console.writeStringWND(' | C2: ', Handle);
|
|
console.writeintlnWND (vm_instance.Task.State^.Registers[C2], Handle);
|
|
|
|
console.writeStringWND(' RET: ', Handle);
|
|
console.writeintlnWND (vm_instance.Task.State^.Registers[RET], Handle);
|
|
|
|
console.writeStringWND(' INSTANCEID: ', Handle);
|
|
console.writeintlnWND (vm_instance.Task.State^.Registers[INSTANCEID], Handle);
|
|
|
|
console.writeStringWND(' PC: ', Handle);
|
|
console.writeintlnWND (vm_instance.Task.State^.Registers[PC], Handle);
|
|
|
|
console.writeStringWND(' STORE1: ', Handle);
|
|
console.writeintWND (vm_instance.Task.State^.Registers[STORE1], Handle);
|
|
console.writeStringWND(' | STORE2: ', Handle);
|
|
console.writeintlnWND (vm_instance.Task.State^.Registers[STORE2], Handle);
|
|
|
|
console.writeStringWND(' STORE3: ', Handle);
|
|
console.writeintWND (vm_instance.Task.State^.Registers[STORE3], Handle);
|
|
console.writeStringWND(' | STORE4: ', Handle);
|
|
console.writeintlnWND (vm_instance.Task.State^.Registers[STORE4], Handle);
|
|
|
|
console.writeStringWND(' STORE5: ', Handle);
|
|
console.writeintlnWND (vm_instance.Task.State^.Registers[STORE1], Handle);
|
|
{WriteLn('Task: ', Task.State^.TASK_ID);
|
|
WriteLn('OBJ1: ', Task.State^.Registers[OBJ1]);
|
|
WriteLn('OBJ2: ', Task.State^.Registers[OBJ2]);
|
|
WriteLn('C1: ', Task.State^.Registers[C1]);
|
|
WriteLn('C2: ', Task.State^.Registers[C2]);
|
|
WriteLn('RET: ', Task.State^.Registers[RET]);
|
|
WriteLn('INSTANCEID: ', Task.State^.Registers[INSTANCEID]);
|
|
WriteLn('PC: ', Task.State^.Registers[PC]);
|
|
WriteLn('STORE1: ', Task.State^.Registers[STORE1]);
|
|
WriteLn('STORE2: ', Task.State^.Registers[STORE2]);
|
|
WriteLn('STORE3: ', Task.State^.Registers[STORE3]);
|
|
WriteLn('STORE4: ', Task.State^.Registers[STORE4]);
|
|
WriteLn('STORE5: ', Task.State^.Registers[STORE5]);
|
|
Writeln(' ');}
|
|
end else begin
|
|
console.writeStringlnWND(' ', Handle);
|
|
console.writeStringWND (' Task: IDLE |', Handle);
|
|
console.writeStringWND (' SCHED: ', Handle);
|
|
console.writeintlnWND (vm_scheduler.getActiveTask, Handle);
|
|
console.writeStringlnWND(' ', Handle);
|
|
console.writeStringWND (' OBJ1: IDLE |', Handle);
|
|
console.writeStringlnWND(' OBJ2: IDLE', Handle);
|
|
console.writeStringWND (' C1: IDLE |', Handle);
|
|
console.writeStringlnWND(' C2: IDLE', Handle);
|
|
console.writeStringlnWND(' RET: IDLE', Handle);
|
|
console.writeStringlnWND(' INSTANCEID: IDLE', Handle);
|
|
console.writeStringlnWND(' PC: IDLE', Handle);
|
|
console.writeStringWND (' STORE1: IDLE |', Handle);
|
|
console.writeStringlnWND(' STORE2: IDLE', Handle);
|
|
console.writeStringWND (' STORE3: IDLE |', Handle);
|
|
console.writeStringlnWND(' STORE4: IDLE', Handle);
|
|
console.writeStringlnWND(' STORE5: IDLE', Handle);
|
|
//console.writeHexWND(vm_instance.Task.State^.TASK_ID);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure run(Params : PParamList);
|
|
begin
|
|
if Handle = 0 then begin
|
|
Handle:= newWindow(20, 40, 63, 14, 'VMSTATE');
|
|
clearWND(Handle);
|
|
registerEventHandler(Handle, EVENT_CLOSE, void(@OnClose));
|
|
registerEventHandler(Handle, EVENT_DRAW, void(@OnDraw));
|
|
end;
|
|
end;
|
|
|
|
procedure init();
|
|
begin
|
|
tracer.push_trace('vmstate.init');
|
|
terminal.registerCommand('VMSTATE', @Run, 'View virtual-machine state.');
|
|
end;
|
|
|
|
end.
|