mirror of
https://github.com/pkimpel/retro-b5500.git
synced 2026-02-12 19:27:39 +00:00
77 lines
2.9 KiB
JavaScript
77 lines
2.9 KiB
JavaScript
/***********************************************************************
|
|
* retro-b5500/emulator B5500DistributionAndDisplay.js
|
|
************************************************************************
|
|
* Copyright (c) 2012, Nigel Williams and Paul Kimpel.
|
|
* Licensed under the MIT License, see http://www.opensource.org/licenses/mit-license.php
|
|
************************************************************************
|
|
* JavaScript object definition for the B5500 Distribution & Display module.
|
|
************************************************************************
|
|
* 2012-06-16 P.Kimpel
|
|
* Original version, from thin air.
|
|
***********************************************************************/
|
|
"use strict";
|
|
|
|
/**************************************/
|
|
function B5500DistributionAndDisplay() {
|
|
/* Constructor for the Distribution And Display module object */
|
|
|
|
/* Global system modules */
|
|
|
|
this.nextRefresh = 0; // Next actual Date.getTime() expected
|
|
this.timer = null; // Reference to the RTC setTimeout id.
|
|
|
|
this.panels = {}; // D&D panel object collection
|
|
|
|
this.updateDisplay.that = this; // Establish contexts for when called from setTimeout().
|
|
|
|
this.clear(); // Create and initialize the Central Control state
|
|
}
|
|
|
|
/**************************************/
|
|
/* Global constants */
|
|
|
|
B5500DistributionAndDisplay.prototype.refreshPeriod = 50; // milliseconds
|
|
|
|
/**************************************/
|
|
B5500DistributionAndDisplay.prototype.clear = function() {
|
|
/* Initializes the displays and starts the refresh timer */
|
|
|
|
if (this.timer) {
|
|
clearTimeout(this.timer);
|
|
}
|
|
|
|
this.nextTimeStamp = new Date().getTime() + this.refreshPeriod;
|
|
this.timer = setTimeout(this.tock, this.refreshPeriod);
|
|
}
|
|
}
|
|
|
|
/**************************************/
|
|
B5500DistributionAndDisplay.prototype.openProcessorPanel(p, caption) {
|
|
/* Creates a D&D panel window for a processor */
|
|
var x;
|
|
var panel = this.panels[caption];
|
|
|
|
if (panel) {
|
|
win = panel.window;
|
|
} else {
|
|
win = window.open("B5500ProcessorPanel.html", "P"+caption,
|
|
"resizable=yes,scrollbars=yes");
|
|
panel = {module:p, window:win, caption:caption};
|
|
this.panels[caption] = panel;
|
|
}
|
|
}
|
|
|
|
/**************************************/
|
|
B5500DistributionAndDisplay.prototype.updateDisplay = function updateDisplay() {
|
|
/* Schedules itself to update the display on a periodic basis. */
|
|
var delayTime;
|
|
var that = updateDisplay.that;
|
|
var thisTime = new Date().getTime();
|
|
|
|
// Schedule ourself for the next refresh period
|
|
that.nextRefresh += that.refreshPeriod;
|
|
delayTime = that.nextRefresh - thisTime;
|
|
that.timer = setTimeout(that.updateDisplay, (delayTime < 0 ? 1 : delayTime);
|
|
|
|
|
|
} |