1
0
mirror of https://github.com/pkimpel/retro-b5500.git synced 2026-02-11 10:55:09 +00:00

Commit DCMCP transcription and emulator WIP as of 2012-06-19.

This commit is contained in:
paul
2012-06-19 17:35:32 +00:00
parent 668ee4eae8
commit 7531c4f747
16 changed files with 490 additions and 167 deletions

View File

@@ -4017,3 +4017,82 @@ PROB: 04683350
ELSE IOD ~ OIOD & SECREC[CTC]; 04684050
% STANDARD LENGTH 04684100
DOIONOW; 04684150
% WRITE SECOND RECORD. 04684200
IF RESULT.[28:1] THEN GO PROB; 04684250
IOD ~ OIOD; 04684300
% ORIGINAL BAD IO ON NEW UNIT 04684350
DOIONOW; 04684400
IF RESULT.[28:1] THEN GO PROB; 04684450
KAPUT: 04684500
IF NOT DSED THEN 04684550
BEGIN 04684600
MODE ~ 0; 04684650
STARTIMING(FNUM,U); 04684700
END; 04684750
% CHANGE OVER SUCCESSFUL. 04684800
FIB[15].[24:6] ~ U; 04684850
% NEW LUN INTO FIB. 04684900
OLDU ~ TINU[U].[3:5]; 04684950
% OLDU LOADED WITH NEW PHYSICAL UNIT NUMBER. 04685000
IF NOT RC THEN 04685050
BEGIN 04685100
RESETUNITS: 04685150
IOQUE[S] ~ (*P(DUP)) & OLDU[3:43:5]; 04685200
FINALQUE[S] ~ (*P(DUP)) & OLDU[3:43:5]; 04685250
LOCATQUE[S] ~ (*P(DUP)) & U[12:42:6]; 04685300
% RESET DESCRIPTORS IN IOQUE. 04685350
IF (S ~ LOCATQUE[S].[FF]!@77777 THEN GO RESETUNITS; 04685400
END; 04685450
FIB[16] ~ (*P(DUP)) & OLDU[3:43:5]; 04685500
FIB[19] ~ (*P(DUP)) & OLDU[3:43:5]; 04685550
% CHANGE UNIT FIELD OF DESCRIPTORS IN FIB. 04685600
FIB[6] ~ ((RC=0)|2)+HOLDCT; 04685650
% LOAD NEW BLOCK COUNT INTO FIB 04685700
FIB[7] ~ (((RC=0)|2) | NUMRECS)+HOLDCT | NUMRECS+LOGICLRC; 04685750
% LOAD NEW RECORD COUNT 04685800
TINU[U].[24:6] ~ 0; 04685850
UNIT[U].[5:10] ~ 0; 04685900
% RESET ERROR FLAGS. 04685950
IF NOT DSED THEN 04686000
BEGIN 04686050
STREAM(A~TINU[U], T~T2~SPACE(4)); 04686100
BEGIN 04686150
DS ~ 26 LIT"#REEL SWITCH COMPLETED ON "; 04686200
SI ~ LOC A; SI ~ SI+5; DS ~ 3 CHR; DS ~ LIT"~"; 04686250
END; 04686300
SPOUTER(T2,UNITNO,1); 04686350
END; 04686400
TOPIOD ~ TEMP ~ (IF RC THEN FIB[19] ELSE OIOD).[CF]-2; 04686450
% MUST RESET LUN IN I/O BUFFER FOR PROGRAM RELEASE 04686500
ARN: M[TEMP] ~ (*P(DUP)) & U[12:42:6]; 04686550
IF M[TEMP].[FF]-2!TOPIOD THEN 04686600
BEGIN 04686650
TEMP ~ M[TEMP].[FF]-2; 04686700
GO ARN; 04686750
END; 04686800
GO EXIT; 04686850
ERROROUT: 04686900
STREAM(T~T2~SPACE(3)); 04686950
DS ~ 21 LIT"#REEL SWITCH ABORTED~"; 04687000
SPOUTER(T2,UNITNO,1); 04687050
IF U < 0 THEN % JOB BEING DS-ED AT MT REQ 04687100
BEGIN 04687150
U ~ TEMP; 04687200
% SET U TO LAST UNIT. 04687250
IF U=SAVEU THEN GO EXIT; 04687300
DSED ~ 1; 04687350
GO KAPUT; 04687400
% GO TO KAPUT TO COUNTINUE HOUSE-KEEPING 04687450
END; 04687500
EXIT: 04687550
P1MIX ~ 0; 04687600
IF FIRSTREC!0 THEN 04687650
BEGIN 04687700
FORGETSPACE(FIRSTREC-2); 04687750
FORGETSPACE(SECREC-2); 04687800
END; 04687850
IF NOT NORMALPROCESS THEN NOPROCESSTOG ~ NOPROCESSTOG-1; 04687900
% WAS UNABLE TO FREE NORMAL PROCESS DUE TO UNFILLED BUFFERS. 04687950
% THIS SITUATION MAY NEVER OCCUR, BUT JUST IN CASE 04688000
WRITEPARITYREELSWITCH ~ UNIT[U] & MODE[5:40:8]; 04688050
END WRITEPARITYREELSWITCH; 04688100

View File

@@ -155,18 +155,18 @@ B5500CentralControl.prototype.bit = function(word, bit) {
B5500CentralControl.prototype.bitSet = function(word, bit) {
/* Sets the specified bit in word and returns the updated word */
return this.insert(word, bit, 1, 1);
return this.fieldInsert(word, bit, 1, 1);
}
/**************************************/
B5500CentralControl.prototype.bitReset = function(word, bit) {
/* Resets the specified bit in word and returns the updated word */
return this.insert(word, bit, 1, 0);
return this.fieldInsert(word, bit, 1, 0);
}
/**************************************/
B5500CentralControl.prototype.isolate = function(word, start, width) {
B5500CentralControl.prototype.fieldIsolate = function(word, start, width) {
/* Extracts a bit field [start:width] from word and returns the field */
var ue = 48-start; // upper power exponent
var le = ue-width; // lower power exponent
@@ -175,8 +175,8 @@ B5500CentralControl.prototype.isolate = function(word, start, width) {
}
/**************************************/
B5500CentralControl.prototype.insert = function(word, start, width, value) {
/* Inserts a value into word.[start:width] and returns the updated word */
B5500CentralControl.prototype.fieldInsert = function(word, start, width, value) {
/* Inserts a bit field into word.[start:width] and returns the updated word */
var ue = 48-start; // upper power exponent
var le = ue-width; // lower power exponent
var bpower = 1; // bottom portion power of 2
@@ -428,7 +428,7 @@ B5500CentralControl.prototype.tock = function tock() {
} else {
that.TM = 0;
that.CCI03F = 1; // set timer interrupt
// for now // that.signalInterrupt();
// inhibit for now // that.signalInterrupt();
}
that.nextTimeStamp += that.rtcTick;
that.timer = setTimeout(function() {that.tock()},
@@ -441,23 +441,24 @@ B5500CentralControl.prototype.initiateP2 = function() {
memory location @10. If P2 is busy or not present, sets the P2 busy
interrupt. Otherwise, loads the INCW into P2's A register and initiates
the processor. */
var p2 = this.P2;
if (!this.P2 || this.P2BF) {
this.CCI12F = 1; // set P2 busy interrupt
this.signalInterrupt();
} else {
this.P2.M = 8; // Now have P2 pick up the INCW
this.P2.access(0x04); // A = [M]
this.P2.AROF = 1;
this.P2.T = 0x849; // inject 4111=IP1 into P2's T register
this.P2.TROF = 1;
this.P2.NCSF = 0; // make sure P2 is in control state
p2.M = 8; // Now have P2 pick up the INCW
p2.access(0x04); // A = [M]
p2.AROF = 1;
p2.T = 0x849; // inject 4111=IP1 into P2's T register
p2.TROF = 1;
p2.NCSF = 0; // make sure P2 is in control state
this.P2BF = 1;
this.HP2F = 0;
// Now start scheduling P2 on the Javascript thread
this.P2.procTime = new Date().getTime()*1000;
this.P2.scheduler = setTimeout(this.P2.schedule, 0);
p2.procTime = new Date().getTime()*1000;
p2.scheduler = setTimeout(p2.schedule, 0);
}
}

View File

@@ -1,98 +0,0 @@
/***********************************************************************
* retro-b5500/emulator B5500DDPanel.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 panel
* utility constructors.
************************************************************************
* 2012-06-18 P.Kimpel
* Original version, from thin air.
***********************************************************************/
/***********************************************************************
* Panel Lamp *
***********************************************************************/
function B5500DDLamp(x, y) {
/* Constructor for the lamp objects used within D&D. x & y are the
coordinates of the lamp within its containing element */
this.state = 0; // current lamp state, 0=off
// visible DOM element
this.element = document.createElement("div");
this.element.className = "ddLamp";
this.element.style.left = String(x) + "px";
this.element.style.top = String(y) + "px";
}
/**************************************/
B5500DDLamp.prototype.onColor = "#FF9900";
B5500DDLamp.prototype.offColor = "#999999";
/**************************************/
B5500DDLamp.prototype.set = function(v) {
/* Changes the visible state of the lamp according to the low-order
bit of "v". */
newState = v & 1;
if (this.state ^ newState) { // the state has changed
this.element.backgroundColor = (v & 1 ? this.onColor : this.offColor);
this.state = newState;
}
}
/***********************************************************************
* Panel Register *
***********************************************************************/
function B5500DDRegister(bits, x, y, rows, caption) {
/* Constructor for the register objects used within D&D:
bits: number of bits in register
x: horizontal coordinate of upper-left corner [hSpacing increments]
y: vertical coordinate of upper-left corner [vSpacing increments]
rows: number of rows used to display the bit lamps
*/
var cols = Math.floor((bits+rows-1)/rows);
var height = rows*this.vSpacing;
var width = cols*this.hSpacing;
var b;
var cx = Math.floor((x-0.25)*this.hSpacing);
var cy = Math.floor((y-0.25)*this.vSpacing);
var lamp;
this.bits = bits; // number of bits in the register
this.left = cx; // horizontal offset relative to container
this.top = cy; // vertical offset relative to container
this.caption = caption; // panel caption
this.lamps = new Array(bits+1); // bit lamps
// visible DOM element
this.element = document.createElement("div");
this.element.className = "ddRegister";
this.element.style.left = String(cx) + "px";
this.element.style.top = String(cy) + "px";
this.element.style.width = width;
this.element.style.height = height;
cx = Math.floor((cols+0.25)*this.hSpacing);
for (b=1; b<=bits; b++) {
if ((b-1)%rows == 0) {
cy = Math.floor((rows-0.75)*this.vSpacing);
cx -= this.hSpacing;
} else {
cy -= this.vSpacing;
}
lamp = new B5500DDLamp(cx, cy);
this.lamps[b] = lamp;
this.element.appendChild(lamp.element);
}
}
/**************************************/
B5500DDRegister.prototype.hSpacing = 24; // horizontal lamp spacing, pixels
B5500DDRegister.prototype.vSpacing = 24; // vertical lamp spacing, pixels

View File

@@ -1075,7 +1075,7 @@ B5500Processor.prototype.run = function() {
variant = 48-t2;
}
if (variant > 0) {
this.B = cc.insert(this.B, t2, variant, cc.isolate(this.A, t1, variant));
this.B = cc.fieldInsert(this.B, t2, variant, cc.fieldIsolate(this.A, t1, variant));
}
this.AROF = 0;
this.cycleCount += variant + this.G + this.K; // approximate the shift counts
@@ -1092,7 +1092,7 @@ B5500Processor.prototype.run = function() {
if (t2+variant > 48) {
variant = 48-t2;
}
if (variant > 0 && cc.isolate(this.B, t2, variant) < cc.isolate(this.A, t1, variant)) {
if (variant > 0 && cc.fieldIsolate(this.B, t2, variant) < cc.fieldIsolate(this.A, t1, variant)) {
this.A = 1;
} else {
this.A = 0;
@@ -1111,7 +1111,7 @@ B5500Processor.prototype.run = function() {
if (t2+variant > 48) {
variant = 48-t2;
}
if (variant > 0 && cc.isolate(this.B, t2, variant) == cc.isolate(this.A, t1, variant)) {
if (variant > 0 && cc.fieldIsolate(this.B, t2, variant) == cc.fieldIsolate(this.A, t1, variant)) {
this.A = 1;
} else {
this.A = 0;

View File

@@ -1,25 +0,0 @@
<html>
<head>
<title>B5500 Distribution & Display Processor Panel</title>
<meta name="Author" content="Williams & 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="B5500DistributionAndDisplay.css">
<script src="B5500DDPanel.js"></script>
<script src="B5500ProcessorPanel.js"></script>
<script>
var panel;
window.onload = function() {
window.resizeTo(screen.availWidth, screen.availHeight*0.8);
window.moveTo(0, 300);
panel = new B5500ProcessorPanel(window);
};
</script>
</head>
<body>
</body>
</html>

View File

@@ -1,24 +0,0 @@
/***********************************************************************
* retro-b5500/emulator B5500ProcessorPanel.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 D&D Processor panels.
************************************************************************
* 2012-06-18 P.Kimpel
* Original version, from thin air.
***********************************************************************/
/**************************************/
function B5500ProcessorPanel(win) {
/* Constructor for the B5500 D&D Processor Panel object. Creates the
panel UI on window "win" */
var body = win.document.body;
this.X = new B5500DDRegister(39, 1, 1, 3, "X REG");
body.appendChild(this.X.element);
this.J = new B5500DDRegister(4, 14, 1, 3, "J REG");
body.appendChild(this.J.element);
}

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

158
webUI/B5500DDPanel.js Normal file
View File

@@ -0,0 +1,158 @@
/***********************************************************************
* retro-b5500/emulator B5500DDPanel.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 panel
* utility constructors.
************************************************************************
* 2012-06-18 P.Kimpel
* Original version, from thin air.
***********************************************************************/
/***********************************************************************
* Panel Lamp *
***********************************************************************/
function B5500DDLamp(x, y) {
/* Constructor for the lamp objects used within D&D. x & y are the
coordinates of the lamp within its containing element */
this.state = 0; // current lamp state, 0=off
// visible DOM element
this.element = document.createElement("div");
this.element.className = "ddLamp";
this.element.style.left = String(x) + "px";
this.element.style.top = String(y) + "px";
}
/**************************************/
B5500DDLamp.onColor = "#FFCC33";
B5500DDLamp.offColor = "#999999";
/**************************************/
B5500DDLamp.prototype.set = function(v) {
/* Changes the visible state of the lamp according to the low-order
bit of "v". */
var newState = v & 1;
if (this.state ^ newState) { // the state has changed
this.element.backgroundColor = (newState ? B5500DDLamp.onColor : B5500DDLamp.offColor);
this.state = newState;
}
}
/**************************************/
B5500DDLamp.prototype.flip = function() {
/* Complements the visible state of the lamp */
var newState = this.state ^ 1;
this.element.backgroundColor = (newState ? B5500DDLamp.onColor : B5500DDLamp.offColor);
this.state = newState;
}
/**************************************/
B5500DDLamp.prototype.setCaption = function(caption) {
/* Establishes an optional caption for a single lamp */
var e = document.createElement("div");
e.className = "ddLampCaption";
e.appendChild(document.createTextNode(caption));
this.element.appendChild(e);
}
/***********************************************************************
* Panel Register *
***********************************************************************/
function B5500DDRegister(bits, x, y, rows, caption) {
/* Constructor for the register objects used within D&D:
bits: number of bits in register
x: horizontal coordinate of upper-left corner [hSpacing increments]
y: vertical coordinate of upper-left corner [vSpacing increments]
rows: number of rows used to display the bit lamps
*/
var cols = Math.floor((bits+rows-1)/rows);
var height = rows*B5500DDRegister.vSpacing;
var width = cols*B5500DDRegister.hSpacing;
var b;
var cx = Math.floor((x-0.25)*B5500DDRegister.hSpacing);
var cy = Math.floor((y-0.25)*B5500DDRegister.vSpacing);
var lamp;
this.bits = bits; // number of bits in the register
this.left = cx; // horizontal offset relative to container
this.top = cy; // vertical offset relative to container
this.caption = caption || ""; // panel caption
this.lastValue = 0; // prior register value
this.lamps = new Array(bits+1); // bit lamps
// visible DOM element
this.element = document.createElement("div");
this.element.className = "ddRegister";
this.element.style.left = String(cx) + "px";
this.element.style.top = String(cy) + "px";
this.element.style.width = String(width) + "px";
this.element.style.height = String(height) + "px";
cx = cols*B5500DDRegister.hSpacing + B5500DDRegister.hOffset;
for (b=1; b<=bits; b++) {
if ((b-1)%rows == 0) {
cy = (rows-1)*B5500DDRegister.vSpacing + B5500DDRegister.vOffset;
cx -= B5500DDRegister.hSpacing;
} else {
cy -= B5500DDRegister.vSpacing;
}
lamp = new B5500DDLamp(cx, cy);
this.lamps[b] = lamp;
this.element.appendChild(lamp.element);
}
this.captionDiv = document.createElement("div");
this.captionDiv.className = "ddRegCaption";
this.captionDiv.style.left = "2px";
this.captionDiv.style.right = "2px";
this.captionDiv.style.top = String(-B5500DDRegister.vOffset) + "px";
if (caption) {
lamp = document.createElement("span");
lamp.className = "ddRegSpan";
lamp.appendChild(document.createTextNode(caption));
this.captionDiv.appendChild(lamp);
}
this.element.appendChild(this.captionDiv);
}
/**************************************/
B5500DDRegister.hSpacing = 24; // horizontal lamp spacing, pixels
B5500DDRegister.hOffset = 5; // horizontal lamp offset within container
B5500DDRegister.vSpacing = 24; // vertical lamp spacing, pixels
B5500DDRegister.vOffset = 5; // vertical lamp offset within container
/**************************************/
B5500DDRegister.prototype.update = function(value) {
/* Update the register lamps from the value of the parameter */
var bitNr = 0;
var low = (this.lastValue % 0x1000000) ^ (value % 0x1000000);
var high = (Math.floor(this.lastValue / 0x1000000) % 0x1000000) ^ (Math.floor(value / 0x1000000) % 0x1000000);
while (low) {
bitNr++;
if (low & 1) {
this.lamps[bitNr].flip();
}
low >>>= 1;
}
bitNr = 23;
while (high) {
bitNr++;
if (high & 1) {
this.lamps[bitNr].flip();
}
high >>>= 1;
}
this.lastValue = value;
}

View File

@@ -14,6 +14,10 @@ BODY.consoleBody {
background-color: #666666;
margin: 4px}
BODY.panelBody {
background-color: #EEEEEE;
margin: 4px}
DIV#BurroughsLogo {
background-color: black;
position: absolute;
@@ -78,15 +82,40 @@ DIV.ddLamp {
width: 12px;
height: 12px;
font-size: 4px;
background-color: #FF9900;
background-color: #FFCC33;
border-radius: 8px;
border: 1px solid black}
DIV.ddLampCaption {
position: absolute;
width: 16px;
top: 14px;
left: -3px;
font-size: 6px;
text-align: center}
DIV.ddRegister {
position: absolute;
border: 1px solid black;
font-size: 6px}
DIV.ddRegCaption {
position: absolute;
font-family: Arial, Helvetica, sans-serif;
font-size: 10px;
font-weight: bold;
text-align: center;
height: 10px;
border-top: 1px solid black;
border-left: 1px solid black;
border-right: 1px solid black}
SPAN.ddRegSpan {
position: relative;
top: -7px;
padding-left: 2px;
padding-right: 2px;
background-color: #EEEEEE}
IMG#BurroughsLogoImage {
width: 150px;
text-align: center;

View File

@@ -0,0 +1,55 @@
<html>
<head>
<title>B5500 Distribution & Display Processor Panel</title>
<meta name="Author" content="Williams & 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="B5500DistributionAndDisplay.css">
<script src="B5500DDPanel.js"></script>
<script src="B5500ProcessorPanel.js"></script>
<script>
var panel;
var displayRefreshPeriod = 50; // milliseconds
var nextRefresh = 0;
var refreshTimer = null;
var totalTime = 0;
var totalDelay = 0;
var updateDisplay = function updateDisplay() {
/* Schedules itself to update the display on a periodic basis. */
var that = updateDisplay.that;
var thisTime = new Date().getTime();
var delta;
var meter = document.getElementById("idleMeter");
panel.X.update(Math.random()*0x8000000000);
// Schedule ourself for the next period
nextRefresh += displayRefreshPeriod;
delta = nextRefresh-thisTime;
refreshTimer = setTimeout(updateDisplay, (delta < 0 ? 0 : delta));
totalTime += displayRefreshPeriod;
totalDelay += delta;
meter.value = (totalDelay/totalTime*100).toFixed(1) + "%";
};
window.onload = function() {
window.resizeTo(screen.availWidth, screen.availHeight*0.8);
window.moveTo(0, 300);
document.title = "B5500 Processor A";
panel = new B5500ProcessorPanel(window);
updateDisplay.that = this;
nextRefresh = new Date().getTime();
updateDisplay();
};
</script>
</head>
<body class="panelBody">
<div style="text-align:right">
Idle: <input id=idleMeter type=text size=5 style="text-align:right">
</div>
</body>
</html>

View File

@@ -0,0 +1,145 @@
/***********************************************************************
* retro-b5500/emulator B5500ProcessorPanel.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 D&D Processor panels.
************************************************************************
* 2012-06-18 P.Kimpel
* Original version, from thin air.
***********************************************************************/
/**************************************/
function B5500ProcessorPanel(win) {
/* Constructor for the B5500 D&D Processor Panel object. Creates the
panel UI on window "win" */
var body = win.document.body;
// Row 1
this.X = new B5500DDRegister(39, 1, 1, 3, "X REG");
body.appendChild(this.X.element);
this.J = new B5500DDRegister(4, 14, 1, 3, "J REG");
body.appendChild(this.J.element);
this.J.lamps[1].setCaption("1");
this.J.lamps[2].setCaption("2");
this.J.lamps[3].setCaption("4");
this.J.lamps[4].setCaption("8");
// adjust the weird position of the "8" bit
this.J.lamps[4].element.style.top = String(B5500DDRegister.vOffset) + "px";
this.Q = new B5500DDRegister(21, 16, 1, 3, "Q REG");
body.appendChild(this.Q.element);
this.Q.lamps[2].setCaption("CCCF");
this.Q.lamps[3].setCaption("VARF");
this.Q.lamps[4].setCaption("1");
this.Q.lamps[5].setCaption("2");
this.Q.lamps[6].setCaption("3");
this.Q.lamps[7].setCaption("4");
this.Q.lamps[8].setCaption("5");
this.Q.lamps[9].setCaption("6");
this.Q.lamps[10].setCaption("7");
this.Q.lamps[11].setCaption("8");
this.Q.lamps[12].setCaption("9");
this.Q.lamps[13].setCaption("12");
this.Q.lamps[14].setCaption("MRAF");
this.Q.lamps[15].setCaption("MROF");
this.Q.lamps[16].setCaption("HLTF");
this.Q.lamps[17].setCaption("EIHF");
this.Q.lamps[18].setCaption("MWOF");
this.Q.lamps[19].setCaption("NCSF");
this.Q.lamps[20].setCaption("SALF");
this.Q.lamps[21].setCaption("CWMF");
this.R = new B5500DDRegister(9, 23, 1, 3, "R REG");
body.appendChild(this.R.element);
// Row 2
this.A = new B5500DDRegister(48, 1, 5, 3, "A REG");
body.appendChild(this.A.element);
this.AROF = new B5500DDRegister(1, 17, 5, 1, null);
body.appendChild(this.AROF.element);
this.AROF.lamps[1].setCaption("AROF");
this.G = new B5500DDRegister(3, 18, 5, 3, "G");
body.appendChild(this.G.element);
this.H = new B5500DDRegister(3, 19, 5, 3, "H");
body.appendChild(this.H.element);
this.Y = new B5500DDRegister(6, 21, 5, 6, "Y");
body.appendChild(this.Y.element);
this.Z = new B5500DDRegister(6, 22, 5, 6, "Z");
body.appendChild(this.Z.element);
this.M = new B5500DDRegister(15, 23, 5, 3, "M REG");
body.appendChild(this.M.element);
// Row 3
this.B = new B5500DDRegister(48, 1, 9, 3, "B REG");
body.appendChild(this.B.element);
this.BROF = new B5500DDRegister(1, 17, 9, 1, null);
body.appendChild(this.BROF.element);
this.BROF.lamps[1].setCaption("BROF");
this.K = new B5500DDRegister(3, 18, 9, 3, "K");
body.appendChild(this.K.element);
this.V = new B5500DDRegister(3, 19, 9, 3, "V");
body.appendChild(this.V.element);
this.N = new B5500DDRegister(4, 20, 8, 4, "N");
body.appendChild(this.N.element);
this.S = new B5500DDRegister(15, 23, 9, 3, "S REG");
body.appendChild(this.S.element);
// Row 4
this.P = new B5500DDRegister(48, 1, 13, 3, "P REG");
body.appendChild(this.P.element);
this.PROF = new B5500DDRegister(3, 17, 13, 3, null);
body.appendChild(this.PROF.element);
this.PROF.lamps[1].setCaption("L1");
this.PROF.lamps[2].setCaption("L2");
this.PROF.lamps[3].setCaption("PROF");
this.T = new B5500DDRegister(12, 18, 13, 3, "T REG");
body.appendChild(this.T.element);
this.TROF = new B5500DDRegister(1, 22, 13, 1, null);
body.appendChild(this.TROF.element);
this.TROF.lamps[1].setCaption("TROF");
this.C = new B5500DDRegister(15, 23, 13, 3, "C REG");
body.appendChild(this.C.element);
// Row 5
this.I = new B5500DDRegister(9, 3, 17, 1, "I REG");
body.appendChild(this.I.element);
this.TM = new B5500DDRegister(9, 3, 19, 1, "TM REG");
body.appendChild(this.TM.element);
this.E = new B5500DDRegister(6, 17, 17, 1, "E REG");
body.appendChild(this.E.element);
this.F = new B5500DDRegister(15, 23, 17, 3, "F REG");
body.appendChild(this.F.element);
}
/**************************************/
B5500ProcessorPanel.prototype.updateDisplay = function() {
/* Update the processor panel lamps.
For now, just supply random values */
}

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -13,7 +13,7 @@ TD {
border-radius: 8px}
</style>
<script src="B5500CentralControl.js"></script>
<script src="../emulator/B5500CentralControl.js"></script>
<script>
var displayRefreshPeriod = 50; // milliseconds
@@ -56,6 +56,8 @@ window.onload = function() {
</head>
<body>
<fieldset>
<legend>Test Reg</legend>
<table cellspacing=4 cellpadding=0 border=0>
<tr>
<td id=CCI03F>&nbsp;
@@ -66,6 +68,7 @@ window.onload = function() {
<td id=CCTM2>&nbsp;
<td id=CCTM1>&nbsp;
</table>
</fieldset>
<div id=wanderer style="position:absolute; top:50px; right:10px; width:12px; height:12px; font-size:4px; border-radius:8px; border:2px solid black; background-color:#FF9900">