diff --git a/src/include/asuro.pas b/src/include/asuro.pas index 6cfd8b63..32449ab3 100644 --- a/src/include/asuro.pas +++ b/src/include/asuro.pas @@ -3,20 +3,20 @@ unit asuro; interface const - VERSION = '1.0.1-745ia'; + VERSION = '1.0.1-746ia'; VERSION_MAJOR = '1'; VERSION_MINOR = '0'; VERSION_SUB = '1'; - REVISION = '745'; + REVISION = '746'; RELEASE = 'ia'; - LINE_COUNT = 29372; - FILE_COUNT = 110; + LINE_COUNT = 29502; + FILE_COUNT = 104; DRIVER_COUNT = 32; FPC_VERSION = '2.6.4'; NASM_VERSION = '2.10.09'; MAKE_VERSION = '3.81'; - COMPILE_DATE = '22/05/18'; - COMPILE_TIME = '04:31:53'; + COMPILE_DATE = '29/09/18'; + COMPILE_TIME = '13:46:48'; implementation diff --git a/src/kernel.pas b/src/kernel.pas index 90a70a23..aa5a845d 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -45,7 +45,8 @@ uses themer, netlog, vmlog, - vm; + vm, + vmstate; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; @@ -217,6 +218,8 @@ begin netlog.init(); tracer.push_trace('kmain.VMLOGINIT'); vmlog.init(); + tracer.push_trace('kmain.VMSTATEINIT'); + vmstate.init(); terminal.run(); diff --git a/src/prog/vmstate.pas b/src/prog/vmstate.pas new file mode 100644 index 00000000..27a82244 --- /dev/null +++ b/src/prog/vmstate.pas @@ -0,0 +1,119 @@ +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.