1
0
mirror of https://github.com/pkimpel/retro-220.git synced 2026-01-13 07:10:08 +00:00
pkimpel.retro-220/webUI/B220DiagMonitor.html
Paul Kimpel 06a4eb3f08 Release emulator version 0.00e:
1. Rework the partial-word operators for better efficiency.
2. Correct emulated processor clock update during I/O operations.
3. Centralize common I/O initialization and termination code.
4. Correct statistics calculations in schedule().
5. Correct timing for integer and floating divide operators.
6. Correct remainder shifting in floating divide.
7. Implement diagnostic monitor window, opened by double-click on retro-220 logo on home page.
8. Correct timing for ConsolePrinter carriage control functions.
9. Implement simple demo programs pre-loaded into memory.
2017-05-13 18:44:56 -07:00

130 lines
4.7 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>retro-220 Emulator Diagnostic Panel</title>
<!--
/***********************************************************************
* retro-220/webUI B220DiagMonitor.html
************************************************************************
* Copyright (c) 2017, Paul Kimpel.
* Licensed under the MIT License, see
* http://www.opensource.org/licenses/mit-license.php
************************************************************************
* Burroughs 220 emulator diagnostic monitoring panel.
************************************************************************
* 2017-05-13 P.Kimpel
* Original version, from retro-205 D205DiagMonitor.html.
***********************************************************************/
-->
<meta name="Author" content="Paul Kimpel">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<link id=defaultStyleSheet rel=stylesheet type="text/css" href="B220Common.css">
<link id=diagStyleSheet rel=stylesheet type="text/css" href="B220.css">
<script>
window.addEventListener("load", function(ev) {
var body = document.getElementById("DiagBody");
var delayDevNodes = {};
var getCallbackState = window.global.getCallbackState;
var intervalPeriod = 300; // milliseconds
var intervalToken = 0;
var p = null; // the Processor object
var delayDeltaNode = document.getElementById("DelayDeltaAvg").firstChild;
var execClockNode = document.getElementById("ExecClock").firstChild;
var procRunNode = document.getElementById("ProcRunAvg").firstChild;
var procSlackNode = document.getElementById("ProcSlackAvg").firstChild;
var procTimeNode = document.getElementById("ProcTime").firstChild;
var timeStampNode = document.getElementById("TimeStamp").firstChild;
function clockIn(stamp, val) {
/* Clocks in a clocked-out timer */
var t = val;
while (t < 0) {
t += stamp;
}
return t;
}
function refreshStats() {
/* Obtains the current "delayDev" has from the SetCallback mechanism and
formats the data to DiagBody */
var cat;
var cell;
var textNode;
var delayDev;
var e;
var row;
var stamp = performance.now();
var state;
if (!p) {
p = window.global.B220Processor.instance;
} else {
timeStampNode.nodeValue = p.runStamp.toFixed(2);
execClockNode.nodeValue = clockIn(stamp, p.execClock).toFixed(2);
procTimeNode.nodeValue = clockIn(stamp, p.procTime).toFixed(2);
delayDeltaNode.nodeValue = p.delayDeltaAvg.toFixed(2);
procSlackNode.nodeValue = p.procSlackAvg.toFixed(4);
procRunNode.nodeValue = p.procRunAvg.toFixed(4);
}
state = getCallbackState(0x01); // get delayDev hash only
delayDev = state.delayDev;
for (cat in delayDev) {
textNode = delayDevNodes[cat];
if (!textNode) {
row = document.createElement("tr");
cell = document.createElement("td");
cell.className = "rj";
textNode = document.createTextNode("");
delayDevNodes[cat] = textNode;
cell.appendChild(textNode);
row.appendChild(cell);
cell = document.createElement("td");
cell.appendChild(document.createTextNode(cat));
row.appendChild(cell);
body.appendChild(row);
}
textNode.nodeValue = delayDev[cat].toFixed(2);
} // for cat
}
window.resizeTo(300, 500);
window.moveTo(0, screen.availHeight-500);
intervalToken = setInterval(refreshStats, intervalPeriod);
window.addEventListener("unload", function(ev) {
if (intervalToken) {
clearInterval(intervalToken);
}
});
});
</script>
</head>
<body>
<h3>retro-220<br>Diagnostic Monitor</h1>
<hr>
<table id=DiagTable border=1 cellpadding=1 cellspacing=0>
<colgoup>
<col style="width:7em">
<col style="width:12em">
</colgroup>
<thead>
<tr>
<th>Delta (ms)<th>Category
<tbody id=DiagBody>
<tr><td id=TimeStamp class=rj> <td>Time Stamp
<tr><td id=ExecClock class=rj> <td>Exec Clock
<tr><td id=ProcTime class=rj> <td>Proc Time
<tr><td id=DelayDeltaAvg class=rj> <td>Delay Delta Avg
<tr><td id=ProcSlackAvg class=rj> <td>Proc Slack Avg
<tr><td id=ProcRunAvg class=rj> <td>Proc Run Avg
</table>
</body>
</html>