Groundwork for a PDP-11 emulator (starting with a gutted copy of PC8080)
This commit is contained in:
parent
a08fcab276
commit
4b778b281d
80 changed files with 24230 additions and 427 deletions
265
versions/pdp11/1.24.2/common.css
Normal file
265
versions/pdp11/1.24.2/common.css
Normal file
|
|
@ -0,0 +1,265 @@
|
|||
@CHARSET "UTF-8";
|
||||
/**
|
||||
@author Jeff Parsons (@jeffpar)
|
||||
@website http://www.pcjs.org/
|
||||
@created 2013-05-05
|
||||
@modified 2014-02-23
|
||||
@license http://www.gnu.org/licenses/gpl.html
|
||||
*/
|
||||
body {
|
||||
margin: 0;
|
||||
background: #202020;
|
||||
}
|
||||
h1, h2 {
|
||||
margin-top: 0;
|
||||
color: #cccccc;
|
||||
}
|
||||
h1, h2, h3, h4 {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
h4 a {
|
||||
color: #cccccc !important;
|
||||
}
|
||||
p {
|
||||
line-height: 1.5em;
|
||||
}
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
a img {
|
||||
vertical-align: bottom;
|
||||
}
|
||||
pre, code {
|
||||
color: #000000;
|
||||
background-color: #cccccc;
|
||||
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
||||
font-size: 12px;
|
||||
}
|
||||
pre {
|
||||
margin: 1em 2em;
|
||||
padding: 1em;
|
||||
border-radius: 5px;
|
||||
overflow: auto;
|
||||
}
|
||||
code {
|
||||
padding: 1px;
|
||||
}
|
||||
pre a, code a {
|
||||
color: #006400 !important;
|
||||
}
|
||||
.common {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
color: #cccccc;
|
||||
}
|
||||
.common a {
|
||||
|
||||
color: #7fc07f;
|
||||
text-decoration: none;
|
||||
}
|
||||
.common hr {
|
||||
border-color: #808080;
|
||||
}
|
||||
.common a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.common, .machine {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
|
||||
font-size: 15px;
|
||||
}
|
||||
.machine {
|
||||
margin: 15px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.c1pjs {
|
||||
overflow: visible;
|
||||
}
|
||||
.machine-placeholder {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
.common-top {
|
||||
background: #202020;
|
||||
font-size: small;
|
||||
}
|
||||
.common-top-left {
|
||||
float: left;
|
||||
width: 60%;
|
||||
}
|
||||
.common-top-left ul {
|
||||
line-height: 1.5em;
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 1em 1em 1em 9px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.common-top-left ul li {
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
.common-top-left ul li a {
|
||||
border-right: 1px solid #6f6f6f;
|
||||
padding: 2px 6px 2px 6px;
|
||||
}
|
||||
.common-top-left ul li:last-child a {
|
||||
border-right: none;
|
||||
}
|
||||
.common-top-right {
|
||||
float: right;
|
||||
width: 40%;
|
||||
}
|
||||
.common-top-right p {
|
||||
float: right;
|
||||
margin: 0;
|
||||
padding: 1em;
|
||||
}
|
||||
.common-middle {
|
||||
clear: both;
|
||||
padding: 1px 1em 1px 1em;
|
||||
background: #404040;
|
||||
}
|
||||
.common-sidebar {
|
||||
float: left;
|
||||
font-size: small;
|
||||
width: 140px;
|
||||
padding-bottom: 20px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.common-list {
|
||||
list-style-type: none;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
.common-list li {
|
||||
|
||||
padding-bottom: 7px;
|
||||
}
|
||||
.common-list-data {
|
||||
list-style-type: none;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
.common-list-data li {
|
||||
line-height: 1.5em;
|
||||
}
|
||||
.common-list-data-items, .common-list-data-subitems {
|
||||
font-size: x-small;
|
||||
list-style-type: none;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-left: 2em;
|
||||
}
|
||||
.common-list-data-items li, .common-list-data-subitems li {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
.common-main {
|
||||
margin-left: 150px;
|
||||
|
||||
}
|
||||
.common-main blockquote {
|
||||
text-align: justify;
|
||||
}
|
||||
.common-image-gallery {
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
.common-image-gallery:after {
|
||||
content: '';
|
||||
display: block;
|
||||
}
|
||||
.common-image-frame {
|
||||
display: inline-block;
|
||||
margin: 8px;
|
||||
text-align: center;
|
||||
}
|
||||
.common-image-link {
|
||||
padding: 5px;
|
||||
border: 1px solid black;
|
||||
border-radius: 5px;
|
||||
background-color: #FAEBD7;
|
||||
}
|
||||
.common-image-label {
|
||||
font-size: x-small;
|
||||
}
|
||||
.common-bottom {
|
||||
clear: both;
|
||||
padding-top: 1em;
|
||||
}
|
||||
.common-bottom:after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
.common-reference {
|
||||
float: left;
|
||||
font-size: x-small;
|
||||
}
|
||||
.common-reference a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.common-copyright {
|
||||
float: right;
|
||||
font-size: x-small;
|
||||
}
|
||||
.common-copyright a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.md-list {
|
||||
}
|
||||
.md-list li {
|
||||
line-height: 1.5em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.md-list li p {
|
||||
padding-left: 2em;
|
||||
}
|
||||
.md-list-compact {
|
||||
}
|
||||
.md-list-compact li {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.md-list-none {
|
||||
list-style-type: none;
|
||||
padding-left: 2em;
|
||||
}
|
||||
.md-list-none li {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
@media screen and (max-width: 900px) {
|
||||
|
||||
.common-sidebar {
|
||||
width: 100%;
|
||||
white-space: normal;
|
||||
}
|
||||
.common-list {
|
||||
padding-left: 0;
|
||||
}
|
||||
.common-list-data {
|
||||
padding-left: 0;
|
||||
}
|
||||
.common-sidebar h4, .common-list li, .common-list-data li, .common-list-data-items li {
|
||||
width: 130px;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
vertical-align: top;
|
||||
padding-right: 1em;
|
||||
margin-top: 0;
|
||||
}
|
||||
.common-list-data-subitems {
|
||||
display: none;
|
||||
}
|
||||
.common-main {
|
||||
clear: both;
|
||||
margin-left: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
.md-list-none {
|
||||
padding-left: 1em;
|
||||
}
|
||||
}
|
||||
58
versions/pdp11/1.24.2/common.xsl
Normal file
58
versions/pdp11/1.24.2/common.xsl
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY nbsp " "> <!ENTITY ne "≠"> <!ENTITY le "≤"> <!ENTITY ge "≥">
|
||||
<!ENTITY times "×"> <!ENTITY sdot "⋅"> <!ENTITY divide "÷">
|
||||
<!ENTITY copy "©"> <!ENTITY Sigma "Σ"> <!ENTITY sigma "σ"> <!ENTITY sum "∑"> <!ENTITY lbrace "{">
|
||||
]>
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<xsl:output method="html"/>
|
||||
|
||||
<xsl:template name="commonStyles">
|
||||
<meta charset="utf-8"/>
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="/versions/icons/current/pc-icon-57.png"/>
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="/versions/icons/current/pc-icon-72.png"/>
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="/versions/icons/current/pc-icon-76.png"/>
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="/versions/icons/current/pc-icon-114.png"/>
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="/versions/icons/current/pc-icon-120.png"/>
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="/versions/icons/current/pc-icon-144.png"/>
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="/versions/icons/current/pc-icon-152.png"/>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/versions/icons/current/pc-icon-180.png"/>
|
||||
<link rel="apple-touch-icon" sizes="192x192" href="/versions/icons/current/pc-icon-192.png"/>
|
||||
<link rel="apple-touch-icon" href="/versions/icons/current/apple-touch-icon.png"/>
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="/versions/icons/current/pc-icon-192.png"/>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="/versions/icons/current/favicon.ico"/>
|
||||
<link rel="stylesheet" type="text/css" href="/versions/pdp11/1.24.2/common.css"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="commonTop">
|
||||
<div class="common-top">
|
||||
<div class="common-top-left">
|
||||
<ul>
|
||||
<li><a href="/">PCjs</a></li>
|
||||
<li><a href="/apps/pcx86/">Demos</a></li>
|
||||
<li><a href="/devices/">Devices</a></li>
|
||||
<li><a href="/disks/">Disks</a></li>
|
||||
<li><a href="/docs/">Docs</a></li>
|
||||
<li><a href="/pubs/">Pubs</a></li>
|
||||
<li><a href="/docs/about/">About</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="common-top-right">
|
||||
<p>Powered by JavaScript and <a href="http://github.com/jeffpar/pcjs" target="_blank">GitHub</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="commonBottom">
|
||||
<div class="common-bottom">
|
||||
<p class="common-reference"></p>
|
||||
<p class="common-copyright">
|
||||
<span class="common-copyright"><a href="http://www.pcjs.org/">pcjs.org</a> website © 2012-2016 by <a href="http://twitter.com/jeffpar">@jeffpar</a></span><br/>
|
||||
<span class="common-copyright">PCjs and C1Pjs released under <a href="http://gnu.org/licenses/gpl.html">GPL version 3 or later</a></span>
|
||||
</p>
|
||||
</div>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
159
versions/pdp11/1.24.2/components.css
Normal file
159
versions/pdp11/1.24.2/components.css
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
@CHARSET "UTF-8";
|
||||
|
||||
|
||||
*:not(input,textarea) {
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
.pcjs-embed {
|
||||
}
|
||||
.pcjs-embed:after {
|
||||
clear:both;
|
||||
}
|
||||
.pcjs-machine {
|
||||
}
|
||||
.pcjs-name, .pcjs-menu {
|
||||
clear: both;
|
||||
font-weight: bold;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
.pcjs-menu {
|
||||
float: left;
|
||||
}
|
||||
.pcjs-canvas {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
.pcjs-container {
|
||||
color: #000000;
|
||||
position: relative;
|
||||
}
|
||||
.pcjs-label {
|
||||
font-size: small;
|
||||
line-height: 19px;
|
||||
vertical-align: middle;
|
||||
float: left;
|
||||
font-family: "Lucida Console", monospace;
|
||||
}
|
||||
.pcjs-controls textarea {
|
||||
font-family: Monaco, monospace;
|
||||
font-size: x-small;
|
||||
}
|
||||
.pcjs-fieldset {
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.pcjs-flag {
|
||||
font-family: "Lucida Console", monospace;
|
||||
font-size: small;
|
||||
text-align: center;
|
||||
line-height: 19px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.pcjs-register {
|
||||
font-family: "Lucida Console", monospace;
|
||||
font-size: small;
|
||||
text-align: center;
|
||||
line-height: 19px;
|
||||
vertical-align: middle;
|
||||
border: 1px solid black;
|
||||
}
|
||||
.pcjs-switches {
|
||||
float: left;
|
||||
}
|
||||
.pcjs-bitBucket {
|
||||
float: left;
|
||||
width: 19px;
|
||||
height: 38px;
|
||||
}
|
||||
.pcjs-bitCell {
|
||||
float: left;
|
||||
width: 19px;
|
||||
height: 19px;
|
||||
margin-right: -1px;
|
||||
margin-bottom: -1px;
|
||||
border: 1px solid black;
|
||||
text-align: center;
|
||||
line-height: 19px;
|
||||
}
|
||||
.pcjs-bitCellLeft {
|
||||
border-left: 1px solid black;
|
||||
}
|
||||
.pcjs-bitLabel {
|
||||
font-size: xx-small;
|
||||
text-align: center;
|
||||
}
|
||||
.pcjs-description, .pcjs-status {
|
||||
font-size: x-small;
|
||||
line-height: 2em;
|
||||
}
|
||||
.pcjs-key {
|
||||
border: 1px solid black;
|
||||
font-size: x-small;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
height: 34px;
|
||||
line-height: 34px;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.pcjs-led {
|
||||
float: left;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
margin: 4px;
|
||||
border: 1px solid black;
|
||||
text-align: center;
|
||||
line-height: 19px;
|
||||
background-color: #000000;
|
||||
}
|
||||
.pcjs-rled {
|
||||
float: left;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
margin: 4px;
|
||||
border: 1px solid black;
|
||||
border-radius: 50%;
|
||||
text-align: center;
|
||||
line-height: 19px;
|
||||
background-color: #000000;
|
||||
}
|
||||
.pcjs-screen {
|
||||
clear: both;
|
||||
height: auto;
|
||||
position: relative;
|
||||
line-height: 0;
|
||||
}
|
||||
.pcjs-screen textarea {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 0;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
line-height: 0;
|
||||
}
|
||||
.pcjs-reference {
|
||||
float: left;
|
||||
font-size: x-small;
|
||||
}
|
||||
.pcjs-reference a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.pcjs-copyright {
|
||||
float: right;
|
||||
font-size: x-small;
|
||||
}
|
||||
.pcjs-copyright a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 900px) {
|
||||
.pcjs-textarea {
|
||||
width: 100% !important;
|
||||
}
|
||||
.pcjs-registers {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
1242
versions/pdp11/1.24.2/components.xsl
Normal file
1242
versions/pdp11/1.24.2/components.xsl
Normal file
File diff suppressed because it is too large
Load diff
162
versions/pdp11/1.24.2/document.css
Normal file
162
versions/pdp11/1.24.2/document.css
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
@CHARSET "UTF-8";
|
||||
|
||||
.page {
|
||||
margin: 2% 2%;
|
||||
padding: 2% 2%;
|
||||
min-width: 30em;
|
||||
overflow: auto;
|
||||
font-size: large;
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
background: #303030;
|
||||
color: #ccc;
|
||||
|
||||
}
|
||||
.page-header {
|
||||
}
|
||||
.page-header-title {
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
.page a {
|
||||
color: #7fc07f;
|
||||
text-decoration: none;
|
||||
}
|
||||
a.footlink, a.paralink {
|
||||
text-decoration: none;
|
||||
}
|
||||
a.footlink:link, a.paralink:link {
|
||||
color: blue;
|
||||
}
|
||||
a.footlink:visited, a.paralink:visited {
|
||||
color: blue;
|
||||
}
|
||||
.galleryitem {
|
||||
float: left;
|
||||
width: 200px;
|
||||
}
|
||||
.item {
|
||||
float: left;
|
||||
width: 2em;
|
||||
text-indent: 1em;
|
||||
}
|
||||
.list {
|
||||
margin-left: 3em;
|
||||
text-indent: 0;
|
||||
text-align: justify;
|
||||
}
|
||||
ul {
|
||||
list-style: none;
|
||||
}
|
||||
div.pnumber {
|
||||
float: left;
|
||||
width: 2em;
|
||||
text-indent: 1em;
|
||||
}
|
||||
div.pitem {
|
||||
margin-left: 10em;
|
||||
}
|
||||
p.indent, .justified p {
|
||||
text-indent: 2em;
|
||||
text-align: justify;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
p.noindent {
|
||||
text-indent: 0;
|
||||
text-align: justify;
|
||||
}
|
||||
p.center, .center {
|
||||
text-align: center;
|
||||
}
|
||||
li.para {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.left {
|
||||
text-align: left;
|
||||
}
|
||||
.right {
|
||||
text-align: right;
|
||||
}
|
||||
blockquote.tag {
|
||||
font-size: small;
|
||||
font-family: Monaco, Fixed, monospace;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.blockquote {
|
||||
padding-left: 1em;
|
||||
text-indent: 0;
|
||||
text-align: justify;
|
||||
}
|
||||
.italics {
|
||||
font-style: italic;
|
||||
}
|
||||
.medium {
|
||||
font-size: medium;
|
||||
}
|
||||
.small {
|
||||
font-size: x-small;
|
||||
}
|
||||
.smallcaps {
|
||||
font-variant: small-caps;
|
||||
}
|
||||
.strike {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
.summation, .bracelist {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
margin-bottom: 0.5ex;
|
||||
text-indent: 0;
|
||||
}
|
||||
.bracelist-symbol {
|
||||
font-size: 3em;
|
||||
vertical-align: -40%;
|
||||
}
|
||||
.summation .summation-lower, .summation .summation-upper, .bracelist-item {
|
||||
display: block;
|
||||
font-size: 75%;
|
||||
text-align: center;
|
||||
}
|
||||
.summation .summation-upper {
|
||||
margin-bottom: 0;
|
||||
margin-left: 0.8ex;
|
||||
font-style: italic;
|
||||
}
|
||||
.summation .summation-lower{
|
||||
margin-bottom: -0.6ex;
|
||||
font-style: italic;
|
||||
}
|
||||
.summation .summation-symbol {
|
||||
font-size: 2em;
|
||||
}
|
||||
p sup {
|
||||
vertical-align: baseline;
|
||||
position: relative;
|
||||
bottom: .5em;
|
||||
font-size: small;
|
||||
}
|
||||
p sub {
|
||||
vertical-align: baseline;
|
||||
position: relative;
|
||||
bottom: -.5em;
|
||||
font-size: small;
|
||||
}
|
||||
.footnote {
|
||||
font-size: medium;
|
||||
text-indent: 1em;
|
||||
text-align: justify;
|
||||
margin-top: .5em;
|
||||
}
|
||||
.image-right {
|
||||
float: right;
|
||||
margin-left: 1em;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.image-caption {
|
||||
font-size: small;
|
||||
text-align: center;
|
||||
}
|
||||
452
versions/pdp11/1.24.2/document.xsl
Normal file
452
versions/pdp11/1.24.2/document.xsl
Normal file
|
|
@ -0,0 +1,452 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY nbsp " "> <!ENTITY ne "≠"> <!ENTITY le "≤"> <!ENTITY ge "≥">
|
||||
<!ENTITY times "×"> <!ENTITY sdot "⋅"> <!ENTITY divide "÷">
|
||||
<!ENTITY copy "©"> <!ENTITY Sigma "Σ"> <!ENTITY sigma "σ"> <!ENTITY sum "∑"> <!ENTITY lbrace "{">
|
||||
]>
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<xsl:output method="html"/>
|
||||
|
||||
<xsl:template name="documentStyles">
|
||||
<link rel="stylesheet" type="text/css" href="/versions/pdp11/1.24.2/document.css"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="title">
|
||||
<h1><xsl:apply-templates/></h1>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="p">
|
||||
<xsl:if test="@id">
|
||||
<a name="{@id}"></a>
|
||||
</xsl:if>
|
||||
<xsl:choose>
|
||||
<xsl:when test="not(@class)">
|
||||
<p><xsl:apply-templates/></p>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<p class="{@class}"><xsl:apply-templates/></p>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="p">
|
||||
<xsl:call-template name="p"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="br">
|
||||
<br/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="p[@number]">
|
||||
<div class="pnumber">
|
||||
<xsl:choose>
|
||||
<xsl:when test="not(@number) or @number = ''"> </xsl:when>
|
||||
<xsl:otherwise><xsl:value-of select="@number"/></xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</div>
|
||||
<div class="pitem">
|
||||
<xsl:call-template name="p"/>
|
||||
</div>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="span">
|
||||
<xsl:choose>
|
||||
<xsl:when test="not(@class)">
|
||||
<span><xsl:apply-templates/></span>
|
||||
</xsl:when>
|
||||
<xsl:when test="@class = 'italics'">
|
||||
<em><xsl:apply-templates/></em>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<span class="{@class}"><xsl:apply-templates/></span>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="h2">
|
||||
<h2><xsl:apply-templates/></h2>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="h3">
|
||||
<h3><xsl:apply-templates/></h3>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="h4">
|
||||
<h4><xsl:apply-templates/></h4>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="h5">
|
||||
<h5><xsl:apply-templates/></h5>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="h6">
|
||||
<h6><xsl:apply-templates/></h6>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="em">
|
||||
<em><xsl:apply-templates/></em>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="strong">
|
||||
<strong><xsl:apply-templates/></strong>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="a">
|
||||
<a href="{@href}" target="{@target}"><xsl:apply-templates/></a>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="ol">
|
||||
<blockquote><ol><xsl:apply-templates/></ol></blockquote>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="ul">
|
||||
<blockquote><ul><xsl:apply-templates/></ul></blockquote>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="li">
|
||||
<li><xsl:apply-templates/></li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="img">
|
||||
<div><img src="{@src}" alt="image"/></div>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="pre">
|
||||
<pre><xsl:apply-templates/></pre>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="figure">
|
||||
<xsl:choose>
|
||||
<xsl:when test="@pos">
|
||||
<div class="{@pos}"><img src="{@ref}" alt="{.}"/><br/><xsl:value-of select="."/></div>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<div><img src="{@ref}" alt="{.}"/><br/><xsl:value-of select="."/></div>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="sub">
|
||||
<sub><xsl:apply-templates/></sub>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="sup">
|
||||
<sup><xsl:apply-templates/></sup>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="lt"><</xsl:template>
|
||||
<xsl:template match="gt">></xsl:template>
|
||||
<xsl:template match="ne">≠</xsl:template>
|
||||
<xsl:template match="le">≤</xsl:template>
|
||||
<xsl:template match="ge">≥</xsl:template>
|
||||
<xsl:template match="times">×</xsl:template>
|
||||
<xsl:template match="dot">⋅</xsl:template>
|
||||
<xsl:template match="divide">÷</xsl:template>
|
||||
<xsl:template match="sigma">σ</xsl:template>
|
||||
|
||||
<xsl:template match="summation">
|
||||
<span class="summation">
|
||||
<span class="summation-upper"><xsl:value-of select="@upper"/></span>
|
||||
<span class="summation-symbol">∑</span>
|
||||
<span class="summation-lower"><xsl:value-of select="@lower"/></span>
|
||||
</span>
|
||||
<xsl:apply-templates/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="bracelist">
|
||||
<span class="bracelist-symbol">{</span>
|
||||
<span class="bracelist">
|
||||
<xsl:for-each select="item">
|
||||
<span class="bracelist-item"><xsl:apply-templates/></span>
|
||||
</xsl:for-each>
|
||||
</span>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="footlink">
|
||||
<xsl:variable name="docID" select="/document/@id"/>
|
||||
<a class="footlink" id="fn{$docID}_ref{@n}" href="#fn{$docID}_{@n}"><sup><xsl:if test="@quoted"><xsl:text>[</xsl:text></xsl:if><xsl:value-of select="@n"/><xsl:if test="@quoted"><xsl:text>]</xsl:text></xsl:if></sup></a>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="footnote">
|
||||
<xsl:variable name="docID" select="/document/@id"/>
|
||||
<div class="footnote"><a id="fn{$docID}_{@n}" href="#fn{$docID}_ref{@n}"><sup><xsl:value-of select="@n"/></sup></a><xsl:text> </xsl:text>
|
||||
<xsl:apply-templates/>
|
||||
</div>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="authors">
|
||||
<xsl:for-each select="author"><xsl:if test="position() != 1"><xsl:text>, </xsl:text></xsl:if><xsl:if test="position() != 1 and position() = last()"><xsl:text>and </xsl:text></xsl:if><xsl:value-of select="."/></xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="formatDate">
|
||||
<xsl:param name="date"/>
|
||||
<xsl:param name="format">MDY</xsl:param>
|
||||
<xsl:variable name="year">
|
||||
<xsl:value-of select="substring-before($date,'-')"/>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="mon-day">
|
||||
<xsl:value-of select="substring-after($date,'-')"/>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="mon">
|
||||
<xsl:value-of select="substring-before($mon-day,'-')"/>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="full-day">
|
||||
<xsl:value-of select="substring-after($mon-day,'-')"/>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="day">
|
||||
<xsl:choose>
|
||||
<xsl:when test="substring($full-day,1,1) = '0'"><xsl:value-of select="substring($full-day,2)"/></xsl:when>
|
||||
<xsl:otherwise><xsl:value-of select="$full-day"/></xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$mon = '01'">January </xsl:when>
|
||||
<xsl:when test="$mon = '02'">February </xsl:when>
|
||||
<xsl:when test="$mon = '03'">March </xsl:when>
|
||||
<xsl:when test="$mon = '04'">April </xsl:when>
|
||||
<xsl:when test="$mon = '05'">May </xsl:when>
|
||||
<xsl:when test="$mon = '06'">June </xsl:when>
|
||||
<xsl:when test="$mon = '07'">July </xsl:when>
|
||||
<xsl:when test="$mon = '08'">August </xsl:when>
|
||||
<xsl:when test="$mon = '09'">September </xsl:when>
|
||||
<xsl:when test="$mon = '10'">October </xsl:when>
|
||||
<xsl:when test="$mon = '11'">November </xsl:when>
|
||||
<xsl:when test="$mon = '12'">December </xsl:when>
|
||||
<xsl:when test="$mon = '00'"/> </xsl:choose>
|
||||
<xsl:if test="$day != '0' and $format = 'MDY'">
|
||||
<xsl:value-of select="$day"/><xsl:text>, </xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:value-of select="$year"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="gallery">
|
||||
<h2><xsl:value-of select="description"/></h2>
|
||||
<div class="gallery">
|
||||
<xsl:apply-templates select="item" mode="gallery"/>
|
||||
</div>
|
||||
<div style="clear:both;"></div>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item" mode="gallery">
|
||||
<div class="galleryitem">
|
||||
<a href="{@ref}"><img src="/versions/images/current/pdf-192.jpg" alt="{.}"/></a><br/>
|
||||
<div style="font-size:small; text-align:center;"><xsl:value-of select="."/></div>
|
||||
</div>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="list[@type = 'timeline']">
|
||||
<xsl:if test="not(description)">
|
||||
<h2>Timeline</h2>
|
||||
</xsl:if>
|
||||
<xsl:if test="description">
|
||||
<h2><xsl:value-of select="description"/></h2>
|
||||
</xsl:if>
|
||||
<blockquote>
|
||||
<xsl:apply-templates select="item" mode="timeline"/>
|
||||
</blockquote>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item" mode="timeline">
|
||||
<xsl:if test="@ref">
|
||||
<xsl:variable name="documentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
|
||||
<xsl:apply-templates select="document($documentFile)/document" mode="withDate">
|
||||
<xsl:with-param name="itemRef" select="@ref"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:if>
|
||||
<xsl:if test="not(@ref)">
|
||||
<h3><xsl:call-template name="formatDate"><xsl:with-param name="date" select="@date"/></xsl:call-template></h3>
|
||||
<blockquote>
|
||||
<xsl:value-of select="."/>
|
||||
</blockquote>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="list[@type = 'people']">
|
||||
<xsl:if test="not(description)">
|
||||
<h2>People</h2>
|
||||
</xsl:if>
|
||||
<xsl:if test="description">
|
||||
<h2><xsl:value-of select="description"/></h2>
|
||||
</xsl:if>
|
||||
<blockquote>
|
||||
<xsl:apply-templates select="item" mode="people"/>
|
||||
</blockquote>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item" mode="people">
|
||||
<h3><xsl:value-of select="name"/></h3>
|
||||
<xsl:apply-templates select="list"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="list[@type = 'documents']">
|
||||
<xsl:if test="description"><h2><xsl:value-of select="description"/></h2></xsl:if>
|
||||
<ul>
|
||||
<xsl:apply-templates select="item" mode="document"/>
|
||||
</ul>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item" mode="document">
|
||||
<xsl:variable name="documentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
|
||||
<xsl:apply-templates select="document($documentFile)/document">
|
||||
<xsl:with-param name="itemRef" select="@ref"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="document">
|
||||
<xsl:param name="itemRef"/>
|
||||
<li>
|
||||
<xsl:call-template name="documentSummary"><xsl:with-param name="itemRef" select="$itemRef"/></xsl:call-template>
|
||||
</li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="document" mode="withDate">
|
||||
<xsl:param name="itemRef"/>
|
||||
<h3><xsl:call-template name="formatDate"><xsl:with-param name="date" select="date"/><xsl:with-param name="format" select="MY"/></xsl:call-template></h3>
|
||||
<blockquote>
|
||||
<p>
|
||||
<xsl:call-template name="documentSummary"><xsl:with-param name="itemRef" select="$itemRef"/><xsl:with-param name="multiLine" select="'true'"/></xsl:call-template>
|
||||
</p>
|
||||
</blockquote>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="documentSummary">
|
||||
<xsl:param name="itemRef"/>
|
||||
<xsl:param name="multiLine">false</xsl:param>
|
||||
<xsl:choose>
|
||||
<xsl:when test="content|include">
|
||||
<a href="{$itemRef}"><xsl:value-of select="title"/></a>
|
||||
<xsl:if test="@ref">
|
||||
<span class="small">
|
||||
<xsl:text> [</xsl:text><a href="{@ref}">Original</a><xsl:text>]</xsl:text>
|
||||
</span>
|
||||
</xsl:if>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<a href="{$itemRef}"><xsl:value-of select="title"/></a>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:if test="copy">
|
||||
<span class="small">
|
||||
<xsl:text> [</xsl:text><a href="{copy/@ref}"><xsl:value-of select="copy"/></a><xsl:text>]</xsl:text>
|
||||
</span>
|
||||
</xsl:if>
|
||||
<xsl:if test="author"><xsl:if test="$multiLine = 'true'"><br/></xsl:if><span class="medium"><xsl:text> by </xsl:text><xsl:call-template name="authors"/></span></xsl:if>
|
||||
<xsl:if test="source">
|
||||
<span class="small">
|
||||
<br/>
|
||||
<xsl:text>[Source: </xsl:text>
|
||||
<xsl:if test="site">
|
||||
<a href="{site/@url}"><xsl:value-of select="site"/></a>
|
||||
</xsl:if>
|
||||
<xsl:if test="not(site)">
|
||||
<a href="{source/@url}"><xsl:value-of select="source"/></a>
|
||||
</xsl:if>
|
||||
<xsl:text>]</xsl:text>
|
||||
</span>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="list[@type = 'resources']">
|
||||
<xsl:if test="not(description)">
|
||||
<h2>Resources</h2>
|
||||
</xsl:if>
|
||||
<xsl:if test="description">
|
||||
<h2><xsl:value-of select="description"/></h2>
|
||||
</xsl:if>
|
||||
<blockquote>
|
||||
<xsl:apply-templates select="item" mode="resources"/>
|
||||
</blockquote>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item" mode="resources">
|
||||
<h3><xsl:value-of select="description"/></h3>
|
||||
<xsl:apply-templates select="list"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="list[@type = 'links']">
|
||||
<xsl:if test="description">
|
||||
<h4><xsl:value-of select="description"/></h4>
|
||||
</xsl:if>
|
||||
<ul>
|
||||
<xsl:apply-templates select="item" mode="links"/>
|
||||
</ul>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item" mode="links">
|
||||
<li><a href="{@ref}"><xsl:value-of select="."/></a></li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="list[not(@type)]">
|
||||
<xsl:if test="description">
|
||||
<h2><xsl:value-of select="description"/></h2>
|
||||
</xsl:if>
|
||||
<blockquote>
|
||||
<xsl:apply-templates select="item|tag" mode="outer"/>
|
||||
</blockquote>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item" mode="outer">
|
||||
<xsl:if test="description">
|
||||
<h3><xsl:value-of select="description"/></h3>
|
||||
</xsl:if>
|
||||
<xsl:apply-templates select="list|item|tag" mode="inner"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="list" mode="inner">
|
||||
<xsl:if test="description">
|
||||
<h4><xsl:value-of select="description"/></h4>
|
||||
</xsl:if>
|
||||
<ul>
|
||||
<xsl:apply-templates select="list|item|para|tag" mode="inner"/>
|
||||
</ul>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="innerlist">
|
||||
<xsl:if test="description">
|
||||
<xsl:value-of select="description"/>
|
||||
</xsl:if>
|
||||
<ul>
|
||||
<xsl:apply-templates select="list|item|para|tag" mode="inner"/>
|
||||
</ul>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item" mode="inner">
|
||||
<xsl:choose>
|
||||
<xsl:when test="@ref">
|
||||
<li><a href="{@ref}"><xsl:apply-templates/></a></li>
|
||||
</xsl:when>
|
||||
<xsl:when test="description">
|
||||
<li><xsl:call-template name="innerlist"/></li>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<li><xsl:apply-templates/></li>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="para" mode="inner">
|
||||
<li class="para"><xsl:apply-templates/></li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="tag" mode="outer">
|
||||
<xsl:call-template name="tag"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="tag" mode="inner">
|
||||
<xsl:call-template name="tag"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="tag">
|
||||
<blockquote class="tag">
|
||||
<xsl:text><</xsl:text><xsl:if test="@href"><a href="{@href}"><xsl:value-of select="@name"/></a></xsl:if><xsl:if test="not(@href)"><xsl:value-of select="@name"/></xsl:if><xsl:for-each select="attr"><xsl:text> </xsl:text><xsl:value-of select="@name"/><xsl:text>="</xsl:text><xsl:value-of select="@value"/><xsl:text>"</xsl:text></xsl:for-each>
|
||||
<xsl:choose>
|
||||
<xsl:when test="tag"><xsl:text>></xsl:text><xsl:apply-templates mode="inner"/><xsl:text></</xsl:text><xsl:value-of select="@name"/><xsl:text>></xsl:text></xsl:when>
|
||||
<xsl:when test="normalize-space(.) != ''"><xsl:text>></xsl:text><xsl:value-of select="."/><xsl:text></</xsl:text><xsl:value-of select="@name"/><xsl:text>></xsl:text></xsl:when>
|
||||
<xsl:otherwise><xsl:text>/></xsl:text></xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</blockquote>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
49
versions/pdp11/1.24.2/machine.xsl
Normal file
49
versions/pdp11/1.24.2/machine.xsl
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY nbsp " "> <!ENTITY sect "§"> <!ENTITY copy "©"> <!ENTITY para "¶"> <!ENTITY ndash "–"> <!ENTITY mdash "—">
|
||||
<!ENTITY lsquo "‘"> <!ENTITY rsquo "’"> <!ENTITY ldquo "“"> <!ENTITY rdquo "”"> <!ENTITY dagger "†"> <!ENTITY Dagger "‡">
|
||||
]>
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<xsl:output doctype-system="about:legacy-compat" method="html"/>
|
||||
|
||||
<xsl:include href="/versions/pdp11/1.24.2/common.xsl"/>
|
||||
<xsl:include href="/versions/pdp11/1.24.2/components.xsl"/>
|
||||
|
||||
<xsl:template match="/machine">
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title><xsl:value-of select="$SITEHOST"/></title>
|
||||
<xsl:call-template name="commonStyles"/>
|
||||
<xsl:call-template name="componentStyles"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="common">
|
||||
<xsl:call-template name="commonTop"/>
|
||||
<div class="common-middle">
|
||||
<p></p>
|
||||
<div id="{@id}" class="machine {@class}js">
|
||||
<xsl:call-template name="component">
|
||||
<xsl:with-param name="machine" select="@id"/>
|
||||
<xsl:with-param name="component" select="'machine'"/>
|
||||
<xsl:with-param name="class"><xsl:value-of select="@class"/>js</xsl:with-param>
|
||||
<xsl:with-param name="parms"><xsl:if test="@parms">,<xsl:value-of select="@parms"/></xsl:if></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</div>
|
||||
</div>
|
||||
<xsl:call-template name="commonBottom"/>
|
||||
</div>
|
||||
<xsl:call-template name="componentScripts">
|
||||
<xsl:with-param name="component">
|
||||
<xsl:choose>
|
||||
<xsl:when test="debugger"><xsl:value-of select="@class"/>-dbg</xsl:when>
|
||||
<xsl:otherwise><xsl:value-of select="@class"/></xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
247
versions/pdp11/1.24.2/manifest.xsl
Normal file
247
versions/pdp11/1.24.2/manifest.xsl
Normal file
|
|
@ -0,0 +1,247 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2014-04-10" modified="2014-04-10" license="http://www.gnu.org/licenses/gpl.html" -->
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY nbsp " "> <!ENTITY sect "§"> <!ENTITY copy "©"> <!ENTITY para "¶"> <!ENTITY ndash "–"> <!ENTITY mdash "—">
|
||||
<!ENTITY lsquo "‘"> <!ENTITY rsquo "’"> <!ENTITY ldquo "“"> <!ENTITY rdquo "”"> <!ENTITY dagger "†"> <!ENTITY Dagger "‡">
|
||||
]>
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<xsl:output doctype-system="about:legacy-compat" method="html"/>
|
||||
|
||||
<xsl:include href="/versions/pdp11/1.24.2/common.xsl"/>
|
||||
<xsl:include href="/versions/pdp11/1.24.2/components.xsl"/>
|
||||
|
||||
<xsl:template match="/manifest[@type = 'document']">
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title><xsl:value-of select="$SITEHOST"/></title>
|
||||
<xsl:call-template name="commonStyles"/>
|
||||
<xsl:call-template name="componentStyles"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="common">
|
||||
<xsl:call-template name="commonTop"/>
|
||||
<div class="common-middle">
|
||||
<h4>Document Manifest</h4>
|
||||
<div class="common-sidebar">
|
||||
<ul class="common-list-data">
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Title'"/>
|
||||
<xsl:with-param name="node" select="title"/>
|
||||
<xsl:with-param name="default">None</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Version'"/>
|
||||
<xsl:with-param name="node" select="version"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Source'"/>
|
||||
<xsl:with-param name="node" select="source"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Documents'"/>
|
||||
<xsl:with-param name="node" select="document"/>
|
||||
<xsl:with-param name="default"><xsl:value-of select="title"/> <xsl:if test="version != ''"><xsl:text> </xsl:text><xsl:value-of select="version"/></xsl:if></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="common-main">
|
||||
<p><xsl:value-of select="desc"/></p>
|
||||
<xsl:call-template name="commonBottom"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="/manifest[@type = 'software' or not(@type)]">
|
||||
<xsl:variable name="machineClass">
|
||||
<xsl:choose>
|
||||
<xsl:when test="machine/@class"><xsl:value-of select="machine/@class"/></xsl:when>
|
||||
<xsl:otherwise><xsl:value-of select="$APPCLASS"/></xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title><xsl:value-of select="$SITEHOST"/></title>
|
||||
<xsl:call-template name="commonStyles"/>
|
||||
<xsl:call-template name="componentStyles"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="common">
|
||||
<xsl:call-template name="commonTop"/>
|
||||
<div class="common-middle">
|
||||
<h4>Software Manifest</h4>
|
||||
<div class="common-sidebar">
|
||||
<ul class="common-list-data">
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Title'"/>
|
||||
<xsl:with-param name="node" select="title"/>
|
||||
<xsl:with-param name="default">None</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Version'"/>
|
||||
<xsl:with-param name="node" select="version"/>
|
||||
<xsl:with-param name="default">Unknown</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Type'"/>
|
||||
<xsl:with-param name="node" select="type"/>
|
||||
<xsl:with-param name="default">None</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Category'"/>
|
||||
<xsl:with-param name="node" select="category"/>
|
||||
<xsl:with-param name="default">None</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Created'"/>
|
||||
<xsl:with-param name="node" select="creationDate"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Creators'"/>
|
||||
<xsl:with-param name="node" select="creator"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label"><xsl:if test="creationDate">Updated</xsl:if><xsl:if test="not(creationDate)">Released</xsl:if></xsl:with-param>
|
||||
<xsl:with-param name="node" select="releaseDate"/>
|
||||
<xsl:with-param name="default">Unknown</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Company'"/>
|
||||
<xsl:with-param name="node" select="company"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Authors'"/>
|
||||
<xsl:with-param name="node" select="author"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Contributors'"/>
|
||||
<xsl:with-param name="node" select="contributor"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Publisher'"/>
|
||||
<xsl:with-param name="node" select="publisher"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'License'"/>
|
||||
<xsl:with-param name="node" select="license"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Source'"/>
|
||||
<xsl:with-param name="node" select="source"/>
|
||||
<xsl:with-param name="default" select="''"/>
|
||||
</xsl:call-template>
|
||||
<xsl:call-template name="listItem">
|
||||
<xsl:with-param name="label" select="'Disks'"/>
|
||||
<xsl:with-param name="node" select="disk"/>
|
||||
<xsl:with-param name="default"><xsl:value-of select="title"/> <xsl:if test="version != ''"><xsl:text> </xsl:text><xsl:value-of select="version"/></xsl:if></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="common-main">
|
||||
<xsl:for-each select="machine[not(@type) or @type = 'default']">
|
||||
<xsl:call-template name="machine">
|
||||
<xsl:with-param name="href" select="@href"/>
|
||||
<xsl:with-param name="state" select="@state"/>
|
||||
</xsl:call-template>
|
||||
</xsl:for-each>
|
||||
<xsl:if test="not(machine[not(@type) or @type = 'default'])">
|
||||
<p>No default machine specified for '<xsl:value-of select="title"/>' in manifest.xml</p>
|
||||
</xsl:if>
|
||||
<xsl:call-template name="commonBottom"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<xsl:call-template name="componentScripts">
|
||||
<xsl:with-param name="component">
|
||||
<xsl:choose>
|
||||
<xsl:when test="machine/@debugger"><xsl:value-of select="$machineClass"/>-dbg</xsl:when>
|
||||
<xsl:otherwise><xsl:value-of select="$machineClass"/></xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="listItem">
|
||||
<xsl:param name="label"/>
|
||||
<xsl:param name="node"/>
|
||||
<xsl:param name="default">Unknown</xsl:param>
|
||||
<xsl:if test="$node != '' or $default != ''">
|
||||
<li><xsl:value-of select="$label"/>
|
||||
<ul class="common-list-data-items">
|
||||
<xsl:for-each select="$node">
|
||||
<xsl:variable name="desc">
|
||||
<xsl:choose>
|
||||
<xsl:when test="desc"><xsl:value-of select="desc"/></xsl:when>
|
||||
<xsl:when test="org"><xsl:value-of select="org"/></xsl:when>
|
||||
<xsl:otherwise/>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<li title="{$desc}">
|
||||
<xsl:variable name="value">
|
||||
<xsl:choose>
|
||||
<xsl:when test="name">
|
||||
<xsl:value-of select="name"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="normalize-space(./text()) != ''">
|
||||
<xsl:value-of select="normalize-space(./text())"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$default"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="href">
|
||||
<xsl:if test="@href"><xsl:value-of select="@href"/></xsl:if>
|
||||
</xsl:variable>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$href != ''">
|
||||
<a href="{$href}"><xsl:value-of select="$value"/></a>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$value"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:if test="page">
|
||||
<ul class="common-list-data-subitems">
|
||||
<xsl:for-each select="page">
|
||||
<li>
|
||||
<xsl:if test="@href">
|
||||
<a href="{$href}{@href}"><xsl:value-of select="."/></a>
|
||||
</xsl:if>
|
||||
<xsl:if test="not(@href)">
|
||||
<xsl:value-of select="."/>
|
||||
</xsl:if>
|
||||
</li>
|
||||
</xsl:for-each>
|
||||
</ul>
|
||||
</xsl:if>
|
||||
</li>
|
||||
</xsl:for-each>
|
||||
<xsl:if test="not($node)">
|
||||
<xsl:if test="@href">
|
||||
<a href="{@href}"><xsl:value-of select="$default"/></a>
|
||||
</xsl:if>
|
||||
<xsl:if test="not(@href)">
|
||||
<xsl:value-of select="$default"/>
|
||||
</xsl:if>
|
||||
</xsl:if>
|
||||
</ul>
|
||||
</li>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
47
versions/pdp11/1.24.2/outline.xsl
Normal file
47
versions/pdp11/1.24.2/outline.xsl
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY nbsp " "> <!ENTITY sect "§"> <!ENTITY copy "©"> <!ENTITY para "¶"> <!ENTITY ndash "–"> <!ENTITY mdash "—">
|
||||
<!ENTITY lsquo "‘"> <!ENTITY rsquo "’"> <!ENTITY ldquo "“"> <!ENTITY rdquo "”"> <!ENTITY dagger "†"> <!ENTITY Dagger "‡">
|
||||
]>
|
||||
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<xsl:output doctype-system="about:legacy-compat" method="html"/>
|
||||
|
||||
<xsl:include href="/versions/pdp11/1.24.2/common.xsl"/>
|
||||
<xsl:include href="/versions/pdp11/1.24.2/document.xsl"/>
|
||||
<xsl:include href="/versions/pdp11/1.24.2/components.xsl"/>
|
||||
|
||||
<xsl:template match="/outline">
|
||||
<xsl:variable name="machineClass">
|
||||
<xsl:choose>
|
||||
<xsl:when test="machine/@class"><xsl:value-of select="machine/@class"/></xsl:when>
|
||||
<xsl:otherwise><xsl:value-of select="$MACHINECLASS"/></xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title><xsl:value-of select="title"/><xsl:text> | </xsl:text><xsl:value-of select="$SITEHOST"/></title>
|
||||
<xsl:call-template name="commonStyles"/>
|
||||
<xsl:call-template name="documentStyles"/>
|
||||
<xsl:call-template name="componentStyles"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="common">
|
||||
<div class="page justified">
|
||||
<xsl:apply-templates/>
|
||||
</div>
|
||||
</div>
|
||||
<xsl:call-template name="componentScripts">
|
||||
<xsl:with-param name="component">
|
||||
<xsl:choose>
|
||||
<xsl:when test="debugger"><xsl:value-of select="$machineClass"/>-dbg</xsl:when>
|
||||
<xsl:otherwise><xsl:value-of select="$machineClass"/></xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
143
versions/pdp11/1.24.2/pdp11-dbg.js
Normal file
143
versions/pdp11/1.24.2/pdp11-dbg.js
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
(function(){var g;function ba(a,b){var c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
|
||||
function n(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function ca(a){return"0x"+n(a,4)}function da(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function ea(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function ja(){var a=ka();return-1!==a.indexOf("pcjs.org",a.length-8)}
|
||||
var la={"&":"&","<":"<",">":">",'"':""","'":"'"};function ma(a){return a.replace(/[&<>"']/g,function(a){return la[a]})}function na(a,b){return(a+" ").slice(0,b)}function oa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function pa(a,b,c){var d=0,e=a.length,f=0;for(void 0===c&&(c=function(a,b){return a>b?1:a<b?-1:0});d<e;){var k=d+e>>1,h;h=c(b,a[k]);0<h?d=k+1:(e=k,f=!h)}return f?d:~d}var qa=Date.now||function(){return+new Date};
|
||||
function ra(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}function xa(a,b){var c;if(Array.prototype.indexOf)return a.indexOf(b,c);c=c||0;0>c&&(c+=a.length);0>c&&(c=0);for(var d=a.length;c<d;c++)if(c in a&&a[c]===b)return c;return-1}
|
||||
function ya(a,b,c,d){var e=0,f=null,k=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),k;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(f=h.responseText,200==h.status||!h.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a,f,e))});if(b&&"object"==
|
||||
typeof b){var l="",m;for(m in b)b.hasOwnProperty(m)&&(l&&(l+="&"),l+=m+"="+encodeURIComponent(b[m]));l=l.replace(/%20/g,"+");h.open("POST",a,!!c);h.setRequestHeader("Content-type","application/x-www-form-urlencoded");h.send(l)}else h.open("GET",a,!!c),"bytes"==b&&h.overrideMimeType("text/plain; charset=x-user-defined"),h.send();c||(f=h.responseText,200!=h.status&&(e=h.status||-1),d&&d(a,f,e),k=[f,e]);return k}function ka(){return"http://"+(window?window.location.host:"www.pcjs.org")}
|
||||
function r(a){window&&window.alert(a)}function za(a){var b=!1;window&&(b=window.confirm(a));return b}var Aa=null;function Ba(){if(null==Aa){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}Aa=a}return Aa}function Ca(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
|
||||
function Da(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Ea(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Fa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
|
||||
function Ga(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}var t={init:[],show:[],exit:[]},Ha=!1,Ia=!1,Ja=!0;function Ka(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function La(a){t.init.push(a)}
|
||||
function Ma(a){if(Ja)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){r(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function Na(a){!Ja&&a?(Ja=!0,Ha&&Oa("init"),Ia&&Oa("show")):Ja=a}function Oa(a){t[a]&&Ma(t[a])}Ka("onload",function(){Ha=!0;Ma(t.init)});Ka("onpageshow",function(){Ia=!0;Ma(t.show)});Ka(Ea("Opera")||Ea("iOS")?"onunload":"onbeforeunload",function(){Ma(t.exit)});
|
||||
function v(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.ib=b.comment;this.Fb=b;b=this.id.indexOf(".");0>b?this.Ka=this.id:(this.nb=this.id.substr(0,b),this.Ka=this.id.substr(b+1));this[a]=c;this.j={Ca:!1,za:!1,eb:!1,U:!1,Ba:!1};this.Za=null;this.j.Ba=!1;this.G={};this.C=null;this.W=d||0;x.push(this)}var Pa=void 0,Qa={};
|
||||
if(window){Pa||(Pa=window.location.search.substr(1));for(var Ra,ab=/\+/g,bb=/([^&=]+)=?([^&]*)/g;Ra=bb.exec(Pa);)Qa[decodeURIComponent(Ra[1].replace(ab," "))]=decodeURIComponent(Ra[2].replace(ab," "))}function cb(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
|
||||
function z(a,b){b||(b=v);a.prototype=cb(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var db=window.PCjs.Machines||(window.PCjs.Machines={}),x=window.PCjs.Components||(window.PCjs.Components=[])}else db={},x=[];function eb(a,b,c){db[a]&&b&&(db[a][b]=c)}function D(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<x.length;b++){var d=x[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
||||
function fb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<x.length;d++)if(c)c==x[d]&&(c=null);else if(!(a!=x[d].type||b&&x[d].id.indexOf(b)))return x[d]}return null}function E(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){r(c.message+" ("+a+")")}return b}
|
||||
function gb(a,b){for(var c=F(b.parentNode,"pdp11-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var k=e[f];if(1===k.nodeType){var h=k.getAttribute("class");if(h)for(var l=h.split(" "),m=0;m<l.length;m++)switch(h=l[m],h){case "pdp11-binding":(h=E(k))&&h.binding&&a.ba(h.type,h.binding,k,h.value),m=l.length}}}}
|
||||
function F(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
|
||||
v.prototype={constructor:v,parent:null,toString:function(){return this.name?this.name:this.id||this.type},ba:function(a,b,c){switch(b){case "clear":return this.G[b]||(this.G[b]=c,c.onclick=function(a){return function(){a.G.print&&(a.G.print.value="")}}(this)),!0;case "print":return this.G[b]||(this.ua=this.G[b]=c,c.value="",this.b=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
|
||||
this.aa=function(a){this.b(a,this.Ka)}),!0;default:return!1}},log:function(){},b:function(){},status:function(a){this.b(this.Ka+": "+a)},aa:function(a,b,c){c=c||this.type;b||r((c?c+": ":"")+a)},qa:function(){return this.j.U=!0},pa:function(a,b){b&&(this.j.U=!1);return!0}};function hb(a,b){if(a.C){a===a.C?b|=0:b=b||a.W;var c=a.C.W&b;return!!b&&c===b||!!(c&a.C.Ab)}return!1}
|
||||
function ib(a,b){if(a.j.eb)return a.j.za&&(a.j.za=!1),a.j.eb=!1;if(a.j.Ba)return a.b(a.toString()+" error"),!1;a.j.za=b;return a.j.za}function jb(a,b){a.j.za&&(b?a.j.eb=!0:void 0===b&&a.b(a.toString()+" busy"));return a.j.za}function G(a){if(!a.j.Ba&&(a.j.Ca=!0,a.j.Ca)){var b=a.Za;a.Za=null;b&&b()}}function kb(a,b){b&&(a.j.Ca?b():a.Za=b);return a.j.Ca}function lb(a,b){a.j.Ba=!0;a.aa(b)}
|
||||
var mb="undefined"!==typeof ArrayBuffer,J={cpu:1,bus:64,mem:128,keyboard:65536,key:131072,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:268435456,warn:536870912,buffer:1073741824,halt:-2147483648};function nb(a){v.call(this,"Panel",a,nb)}z(nb);g=nb.prototype;g.ba=function(a,b,c,d){return this.i&&this.i.ba(a,b,c,d)||this.g&&this.g.ba(a,b,c,d)||this.C&&this.C.ba(a,b,c,d)?!0:this.parent.ba.call(this,a,b,c,d)};g.va=function(a,b,c,d){this.i=a;this.A=b;this.g=c;this.C=d};
|
||||
g.qa=function(a,b){b||ob();return!0};g.pa=function(){return!0};g.ea=function(){};function ob(){for(var a=!1,b=F(document,"pdp11","panel"),c=0;c<b.length;c++){var d=b[c],e=E(d),f;a:{f=e.id;if(void 0!==f)for(var k=void 0,k=0;k<x.length;k++)if(x[k].id===f){f=x[k];break a}f=null}f||(a=!0,f=new nb(e));gb(f,d);a&&G(f)}}La(ob);
|
||||
function pb(a,b,c){v.call(this,"Bus",a,pb);this.g=b;this.C=c;this.w=a.busWidth||16;this.F=Math.pow(2,this.w);this.i=this.F-1|0;this.P=16>=this.w?10:20>=this.w?12:24>=this.w?14:15;this.ga=1<<this.P;this.H=this.ga>>2;this.A=this.ga-1;this.D=this.F/this.ga|0;this.B=this.D-1;a=new K;qb(a,this.C);this.I=Array(this.D);for(b=0;b<this.D;b++)this.I[b]=a;G(this)}z(pb);g=pb.prototype;g.reset=function(){};g.qa=function(a,b){b||this.reset();return!0};
|
||||
function rb(a,b,c,d){for(var e=b,f=c,k=e>>>a.P;0<f&&k<a.I.length;){var h=a.I[k],l=k*a.ga,m=a.ga-(e-l);m>f&&(m=f);if(h&&h.size){if(h.type==d){if(e+f<=h.u)return h.Xa+=h.u-e,h.u=e,!0;if(e>=h.u+h.Xa){m=h.size-(e-l);m>f&&(m=f);h.Xa=e-h.u+m;e=l+a.ga;f-=m;k++;continue}}return Eb(1,e,f)}e=new K(e,m,a.ga,d);qb(e,a.C,h);a.I[k++]=e;e=l+a.ga;f-=m}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+Fb[d]+" at "+ca(b)),!0):Eb(2,b,c)}g.ca=function(a){return this.I[(a&this.i)>>>this.P].Fa(a&this.A,a)};
|
||||
function Gb(a,b){return a.I[(b&a.i)>>>a.P].Qa(b&a.A,b)}g.Ma=function(a){var b=a&this.A,c=(a&this.i)>>>this.P;return b!=this.A?this.I[c].vb(b,a):this.I[c++].Fa(b,a)|this.I[c&this.B].Fa(0,a+1)<<8};g.Va=function(a,b){this.I[(a&this.i)>>>this.P].Ia(a&this.A,b&255,a)};g.xb=function(a,b){var c=a&this.A,d=(a&this.i)>>>this.P;c!=this.A?this.I[d].yb(c,b&65535,a):(this.I[d++].Ia(c,b&255,a),this.I[d&this.B].Ia(0,b>>8&255,a+1))};function Eb(a,b,c){r("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Hb;
|
||||
if(mb){var Ib=new ArrayBuffer(2);(new DataView(Ib)).setUint16(0,256,!0);Hb=256===(new Uint16Array(Ib))[0]}else Hb=!1;var Jb=Hb;
|
||||
function K(a,b,c,d){this.id=Kb+=2;this.g=null;this.u=a;this.Xa=b;this.size=c||0;this.type=d||Lb;this.G=d==Mb;qb(this);this.ra=this.Cb=!1;if(c)if(mb)this.D=new ArrayBuffer(c),this.F=new DataView(this.D,0,c),this.A=new Uint8Array(this.D,0,c),this.J=new Uint16Array(this.D,0,c>>1),this.g=new Int32Array(this.D,0,c>>2),Nb(this,Jb?Ob:Pb);else{this.g=Array(c>>2);for(a=0;a<this.g.length;a++)this.g[a]=0;Nb(this,Qb)}else Nb(this)}var Lb=0,Mb=2,Fb=["NONE","RAM","ROM","VID","H/W"],Kb=0;
|
||||
K.prototype={constructor:K,parent:null,save:function(){var a,b;if(mb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.F.getInt32(b<<2,!0);else a=this.g;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(mb)for(b=0;b<a.length;b++)this.F.setInt32(b<<2,a[b],!0);else this.g=a;return this.ra=!0}return!1},ta:function(a,b){b?0===this.w++&&Rb(this,Sb,!1):0===this.i++&&Tb(this,Sb,!1)},K:function(){this.C&&hb(this.C,129)&&this.C.message("attempt to read invalid block %"+n(this.u),!0);
|
||||
return 255},B:function(a,b){this.C&&hb(this.C,129)&&this.C.message("attempt to write "+ca(b)+" to invalid block %"+n(this.u),!0)},L:function(a,b){return this.Fa(a++,b++)|this.Fa(a,b)<<8},H:function(a,b,c){this.Ia(a++,b&255,c++);this.Ia(a,b>>8,c)},S:function(a){return this.g[a>>2]>>>((a&3)<<3)&255},$:function(a){var b=a>>2;a=(a&3)<<3;var c=this.g[b]>>a;return 24>a?c&65535:c&255|(this.g[b+1]&255)<<8},ma:function(a,b){var c=a>>2,d=(a&3)<<3;this.g[c]=this.g[c]&~(255<<d)|b<<d;this.ra=!0},La:function(a,
|
||||
b){var c=a>>2,d=(a&3)<<3;24>d?this.g[c]=this.g[c]&~(65535<<d)|b<<d:(this.g[c]=this.g[c]&16777215|b<<24,c++,this.g[c]=this.g[c]&-256|b>>8);this.ra=!0},N:function(a,b){if(this.C&&null!=this.u){var c=this.C;Ub(c,this.u+a,1,c.N)&&c.Y(!0)}return this.Qa(a,b)},V:function(a,b){if(this.C&&null!=this.u){var c=this.C;Ub(c,this.u+a,2,c.N)&&c.Y(!0)}return this.gb(a,b)},ja:function(a,b,c){if(this.C&&null!=this.u){var d=this.C;Ub(d,this.u+a,1,d.F)&&d.Y(!0)}this.G?this.B(a,b,c):this.Ja(a,b,c)},sa:function(a,b,c){if(this.C&&
|
||||
null!=this.u){var d=this.C;Ub(d,this.u+a,2,d.F)&&d.Y(!0)}this.G?this.B(a,b,c):this.hb(a,b,c)},M:function(a){return this.A[a]},O:function(a){return this.A[a]},T:function(a){return this.F.getUint16(a,!0)},Z:function(a){return a&1?this.A[a]|this.A[a+1]<<8:this.J[a>>1]},fa:function(a,b){this.A[a]=b;this.ra=!0},ka:function(a,b){this.A[a]=b;this.ra=!0},na:function(a,b){this.F.setUint16(a,b,!0);this.ra=!0},Ka:function(a,b){a&1?(this.A[a]=b,this.A[a+1]=b>>8):this.J[a>>1]=b;this.ra=!0}};
|
||||
function qb(a,b,c){a.C=b;a.i=a.w=0;c&&((a.i=c.i)&&Tb(a,Sb,!1),(a.w=c.w)&&Rb(a,Sb,!1))}function Vb(a,b){b?0===--a.w&&(a.Ia=a.G?a.B:a.Ja,a.yb=a.G?a.H:a.hb):0===--a.i&&(a.Fa=a.Qa,a.vb=a.gb)}function Rb(a,b,c){c&&a.w||(a.Ia=!a.G&&b[2]||a.B,a.yb=!a.G&&b[3]||a.H);if(c||void 0===c)a.Ja=b[2]||a.B,a.hb=b[3]||a.H}function Tb(a,b,c){c&&a.i||(a.Fa=b[0]||a.K,a.vb=b[1]||a.L);if(c||void 0===c)a.Qa=b[0]||a.K,a.gb=b[1]||a.L}function Nb(a,b){b||(b=Wb);Tb(a,b,void 0);Rb(a,b,void 0)}
|
||||
var Wb=[],Qb=[K.prototype.S,K.prototype.$,K.prototype.ma,K.prototype.La],Sb=[K.prototype.N,K.prototype.V,K.prototype.ja,K.prototype.sa];if(mb)var Pb=[K.prototype.M,K.prototype.T,K.prototype.fa,K.prototype.na],Ob=[K.prototype.O,K.prototype.Z,K.prototype.ka,K.prototype.Ka];
|
||||
function Xb(a,b){v.call(this,"CPU",a,Xb,1);var c=a.multiplier||1;this.$=a.cycles||b;this.xa=c;this.Z=Math.round(this.$/1E4)/100;this.wa=this.Z*this.xa;this.j.X=!1;this.j.fb=!1;this.j.rb=a.autoStart;this.j.sb=!1;this.j.Aa=!1;this.Na=this.L=0;this.Oa=a.csStart;this.Da=a.csInterval;this.Ea=a.csStop;this.S=[];this.sa=this.ya.bind(this);G(this)}z(Xb);var Yb=["power","reset"];g=Xb.prototype;
|
||||
g.va=function(a,b,c,d){this.i=a;this.A=b;this.C=d;for(b=0;b<Yb.length;b++)(c=this.G[Yb[b]])&&this.i.ba(null,Yb[b],c);this.N=null;a=Zb(a,"autoStart");null!=a&&(this.j.rb="true"==a?!0:"false"==a?!1:!!a);G(this)};g.reset=function(){};g.save=function(){return null};g.restore=function(){return!1};
|
||||
g.qa=function(a,b){if(!b){if(a&&this.restore){$b(this);if(!this.restore(a))return!1;ac(this)}else this.reset();if(this.C){var c=this.C;c.b("Type ? for help with PDP11 Debugger commands");c.ea();if(c.La){var d=c.La;c.La=null;bc(c,d)}}else this.b("No debugger detected")}L(this);return!0};g.pa=function(a){return a?this.save():!0};function cc(a){(a.j.rb||!a.C&&void 0===a.G.run)&&a.ya(!0)}g.tb=function(){return 0};
|
||||
function ac(a){void 0===a.Oa&&(a.Oa=0);void 0===a.Da&&(a.Da=-1);void 0===a.Ea&&(a.Ea=-1);a.j.Aa=0<=a.Oa&&0<a.Da;a.j.Aa&&(a.Na=0,a.L=a.Oa-a.K)}function dc(a,b){if(a.j.Aa){var c=!1;a.Na=a.Na+a.tb()|0;a.L-=b;0>=a.L&&(a.L+=a.Da,c=!0);0<=a.Ea&&a.Ea<=sc(a)&&(a.Da=a.Ea=-1,ac(a),a.Y(),c=!0);c&&a.b(sc(a)+" cycles: checksum="+n(a.Na))}}
|
||||
function tc(a,b,c,d){a.G[b]&&(void 0===c&&(lb(a,"Value for "+b+" is invalid"),a.Y()),c=!a.j.X||a.j.sb?n(c,d):"--------".substr(0,d),a.G[b].textContent!=c&&(a.G[b].textContent=c))}
|
||||
g.ba=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.G[b]=c;a=!0;break;case "run":this.G[b]=c;c.onclick=function(){var a;if(a=d.i)if(a=d.i,a.j.U)a=!0;else{var b=null,c,h=D(a.id);for(c=0;c<h.length&&(b=h[c],b===a||b.j.Ca);c++);if(c==h.length)for(c=0;c<h.length&&(b=h[c],b===a||b.j.U);c++);c==h.length&&(b=a);r("The "+b.type+" component ("+b.id+") is not "+(b.j.Ca?"powered yet":"ready yet"+(b.Za?" (waiting for notification)":""))+".");a=!1}a&&(d.j.X?d.Y():d.ya())};a=!0;break;
|
||||
case "speed":this.G[b]=c;a=!0;break;case "setSpeed":this.G[b]=c,c.onclick=function(){uc(d,d.xa<<1,!0)},c.textContent=this.wa.toFixed(2)+"Mhz",a=!0}return a};function vc(a,b,c){a.K+=b;c&&(a.w=a.g=0)}function wc(a,b){var c=1;b&&1<a.xa&&a.H&&(c=a.H/a.Z);a.ma=Math.round(1E3/30);a.V=Math.floor(a.$/30*c);b||(a.M=a.V);a.fa=0}function sc(a){return a.K+a.F+a.w-a.g}function $b(a){a.H=0;a.na=0;a.K=a.F=a.w=a.g=0;ac(a);uc(a,1)}
|
||||
function uc(a,b,c){var d=!1;if(void 0!==b){.8>a.H/a.wa?b=1:d=!0;a.xa=b;b=a.Z*a.xa;if(a.wa!=b){a.wa=b;b=a.wa.toFixed(2)+"Mhz";var e=a.G.setSpeed;e&&(e.textContent=b);a.b("target speed: "+b)}c&&a.i&&a.i.Wa()}vc(a,a.F);a.F=0;a.D=qa();a.J=0;wc(a);return d}
|
||||
g.ya=function(a){if(ib(this,!0)){if(!this.j.X){uc(this);this.i&&this.i.start(this.D,sc(this));this.j.X=!0;this.j.fb=!0;this.N&&this.N.start();var b=this.G.run;b&&(b.textContent="Halt");this.i&&(this.i.ea(!0),a&&this.i.Wa(!0))}this.fa>=this.$&&wc(this,!0);this.O=0;this.T=qa();this.J&&(a=this.T-this.J,a>this.ma&&(this.D+=a,this.D>this.T&&(this.D=this.T)));try{do{for(var c=this.j.Aa?1:this.V,d=this.S.length-1;0<=d;d--){var e=this.S[d];0>e[0]||c>e[0]&&(c=e[0])}this.Ha(c);var f=this.w-this.g;a=f;for(var k=
|
||||
this.S.length-1;0<=k;k--){var h=this.S[k];0>h[0]||(h[0]-=a,0>=h[0]&&(h[0]=-1,h[1]()))}this.O+=f;this.F+=f;vc(this,0,!0);dc(this,f);this.M-=f;if(0>=this.M){this.M+=this.V;15<=++this.na&&(this.i&&this.i.ea(),this.na=0);break}}while(this.j.X)}catch(l){this.Y();L(this);this.i&&this.i.stop(qa(),sc(this));ib(this,!1);lb(this,l.stack||l.message);return}c=setTimeout;d=this.sa;this.J=qa();e=this.ma;this.O&&(e=Math.round(e*this.O/this.V));e=e-(this.J-this.T);if(f=this.J-this.D)this.H=Math.round(this.F/(10*
|
||||
f))/100,864E5<=f&&(this.K=0,uc(this));if(0>e||this.H<this.wa)-1E3>e&&(this.D-=e),e=0;this.fa+=this.O;this.J+=e;c(d,e)}else L(this),this.i&&this.i.stop(qa(),sc(this))};g.Ha=function(){return 0};g.Y=function(a){jb(this,!0);this.w-=this.g;this.g=0;vc(this,this.F);this.F=0;if(this.j.X){this.j.X=!1;this.N&&this.N.stop();var b=this.G.run;b&&(b.textContent="Run")}this.j.Ya=a};function L(a,b){a.i&&a.i.ea(b)}
|
||||
function xc(a){this.ub=+a.model||1170;Xb.call(this,a,1E6);this.ja=yc;$b(this);this.j.Ya=this.j.Bb=!1;this.ka=0;zc(this)}z(xc,Xb);g=xc.prototype;g.reset=function(){this.j.X&&this.Y();zc(this);$b(this);this.j.Ba=!1;this.parent.reset.call(this)};function zc(a){a.Ga=0;a.Ra=0;a.$a=0;a.Sa=0;a.ab=0;a.Ta=0;a.bb=0;a.Ua=0;a.R=0;Ac(a,0);a.B=0}g.tb=function(){var a=this.Ga+this.Ra+this.$a+this.Sa+this.ab+this.Ta+this.bb|0;return a=a+this.Ua+this.R+Bc(this)|0};
|
||||
g.save=function(){var a=new M(this);N(a,0,[this.Ga,this.Ra,this.$a,this.Sa,this.ab,this.Ta,this.bb,this.Ua,this.R,Bc(this)]);N(a,1,[this.B,this.K,this.xa]);for(var b=this.A,c=0,d=[],e=0;e<b.D;e++){var f=b.I[e];if(f.ra||f.Cb){d[c++]=e;var k=c++;a:if(f=f.save()){for(var h=0,l=0,m=[];h<f.length;){for(var p=f[h],q=h+1;q<f.length&&f[q]===p;)q++;m[l++]=q-h;m[l++]=p;h=q}if(m.length<f.length){f=m;break a}}d[k]=f}}N(a,2,d);return a.data()};
|
||||
g.restore=function(a){var b=a[0];this.Ga=b[0];this.Ra=b[1];this.$a=b[2];this.Sa=b[3];this.ab=b[4];this.Ta=b[5];this.bb=b[6];this.Ua=b[7]&65535;this.R=b[8]&65535;Ac(this,b[9]);b=a[1];this.B=b[0];this.K=b[1];uc(this,b[3]);a:{b=this.A;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.H){for(var f=0,k=Array(b.H),h=0;h<e.length-1;)for(var l=e[h++],m=e[h++];l--;)k[f++]=m;e=k}f=b.I[d];if(!f||!f.restore(e)){r("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
g.ba=function(a,b,c){var d=!1;switch(b){case "PC":case "PSW":case "IF":case "SF":case "ZF":case "CF":this.G[b]=c;this.ka++;d=!0;break;default:d=this.parent.ba.call(this,a,b,c)}return d};function Bc(a){return a.ha&-214|(a.ia&128?128:0)|(a.da&255?0:64)|(a.da&256?1:0)}function Ac(a,b){a.da=a.ia=0;b&1&&(a.da|=256);b&4||(a.ia|=1);b&64||(a.da|=255);b&128&&(a.ia^=192);a.ha=a.ha&-726|b&512|2}g.ca=function(a){return this.A.ca(a)};g.Va=function(a,b){this.A.Va(a,b)};
|
||||
function Cc(a){var b=a.ca(a.R);a.R=a.R+1&65535;return b}g.ea=function(a){this.ka&&(a||!this.j.X||this.j.sb)&&(tc(this,"PC",this.R,4),a=Bc(this),tc(this,"PSW",a,4),tc(this,"IF",a&512?1:0,1),tc(this,"SF",a&128?1:0,1),tc(this,"ZF",a&64?1:0,1),tc(this,"CF",a&1?1:0,1));if(a=this.G.speed)a.textContent=this.j.X&&this.H?this.H.toFixed(2)+"Mhz":"Stopped"};
|
||||
g.Ha=function(a){this.j.Ya=!0;var b=this.j.Bb=this.C&&Dc(this.C),c=a?this.j.fb?0:1:-1;this.j.fb=!1;this.w=this.g=a;if(this.g&&this.B&255&&this.ha&512){for(a=0;8>a&&!(this.B&1<<a);a++);this.B&=~(0>a?255:1<<a);this.ha&=-513;this.B&=-257;this.ja[199|a<<3].call(this)}this.B&256?(this.w-=this.g,this.g=0,a=!1):a=!0;if(a){do{if(b){if(Ec(this.C,this.R,c)){this.Y();break}c=1}this.ja[Cc(this)].call(this)}while(0<this.g)}return this.j.Ya?this.w-this.g:void 0===this.j.Ya?0:-1};
|
||||
La(function(){for(var a=F(document,"pdp11","cpu"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new xc(d);gb(d,c)}});function O(){this.g-=4}
|
||||
var yc=[O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,
|
||||
O,O,O,O,O,O,O,O,O];function Fc(a){v.call(this,"ROM",a,Fc);this.i=null;this.F=a.addr;this.w=a.size;this.H=a.writable;this.B=a.alias;this.D=a.file;this.J=da(this.D);if(this.D){a=this.D;var b=ea(this.J);"json"!=b&&"hex"!=b&&(a=ka()+"/api/v1/dump?file="+this.D+"&format=bytes&decimal=true");var c=this;ya(a,null,!0,function(a,b,f){Gc(c,a,b,f)})}}z(Fc);Fc.prototype.va=function(a,b,c,d){this.A=b;this.g=c;this.C=d;Hc(this)};
|
||||
Fc.prototype.qa=function(){if(this.oa){if(this.C){var a=this.C,b=this.id,c=this.F,d=this.w,e=this.oa,f=[],k;for(k in e){var h=e[k];"number"==typeof h&&(e[k]=h={o:h});var l=h.o,m=h.a;if(void 0!==l){var p=f,l=[l>>>0,k],q=pa(p,l,a.lb);0>q&&p.splice(-(q+1),0,l)}m&&(h.a=m.replace(/''/g,'"'))}a.H.push({Ib:b,u:c,Hb:d,oa:e,kb:f})}delete this.oa}return!0};Fc.prototype.pa=function(){return!0};
|
||||
function Gc(a,b,c,d){if(d)a.aa("Unable to load system ROM (error "+d+": "+b+")");else{eb(a.nb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,k=e.data;if(f)a.i=f;else if(k)for(a.i=Array(4*k.length),d=c=0;c<k.length;c++)a.i[d++]=k[c]&255,a.i[d++]=k[c]>>8&255,a.i[d++]=k[c]>>16&255,a.i[d++]=k[c]>>24&255;else a.i=e;a.oa=e.symbols;if(!a.i.length){r("Empty ROM: "+b);return}if(1==a.i.length){r(a.i[0]);return}}catch(h){a.aa("ROM data error: "+h.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.i=Array(b.length),e=0;e<b.length;e++)a.i[e]=ba(b[e],16);Hc(a)}}
|
||||
function Hc(a){if(!kb(a))if(!a.D)G(a);else if(a.i&&a.A){a.w||(a.w=a.i.length);if(a.i.length!=a.w)lb(a,"ROM size (0x"+n(a.i.length)+") does not match specified size ("+("0x"+n(a.w))+")");else{var b;b=a.F;if(rb(a.A,b,a.w,a.H?1:Mb)){var c;for(c=0;c<a.i.length;c++){var d=a.A,e=b+c;d.I[(e&d.i)>>>d.P].Ja(e&d.A,a.i[c]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.B?b.push(a.B):null!=a.B&&a.B.length&&(b=a.B);for(c=0;c<b.length;c++){for(var f=a,d=b[c],e=f.A,k=f.w,h=[],l=f.F>>>e.P;0<k&&l<e.I.length;)h.push(e.I[l++]),
|
||||
k-=e.ga;e=f.A;f=f.w;k=0;for(d>>>=e.P;0<f&&d<e.I.length;){l=h[k++];if(!l)break;e.I[d++]=l;f-=e.ga}}delete a.i}}G(a)}}La(function(){for(var a=F(document,"pdp11","rom"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Fc(d);gb(d,c)}});function Ic(a){v.call(this,"RAM",a,Ic);this.B=a.addr;this.w=a.size;this.i=!1}z(Ic);g=Ic.prototype;g.va=function(a,b,c,d){this.A=b;this.g=c;this.C=d;G(this)};g.qa=function(a,b){b||this.reset();return!0};g.pa=function(a){return a?this.save():!0};
|
||||
g.reset=function(){!this.i&&this.w&&rb(this.A,this.B,this.w,1)&&(this.i=!0);this.i||r("No RAM allocated")};g.save=function(){return null};g.restore=function(){return!0};La(function(){for(var a=F(document,"pdp11","ram"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Ic(d);gb(d,c)}});function Jc(a){v.call(this,"Keyboard",a,Jc,65536);G(this)}z(Jc);Jc.prototype.ba=function(){return!1};Jc.prototype.va=function(a,b,c,d){this.i=a;this.g=c;this.C=d;this.N=null};
|
||||
La(function(){for(var a=F(document,"pdp11","keyboard"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Jc(d);gb(d,c)}});
|
||||
function Kc(a){v.call(this,"Debugger",a,Kc);this.S=this.na=this.K=0;this.M=P();this.mb=P();this.D=-1;this.B=[];this.V=!1;this.T=P();this.H=[];this.Z={};this.w=this.N=this.F=[];Lc(this);this.ja=0;Mc(this);this.sa=[];Nc(this,a.messages);this.La=a.commands;var b=this;window?void 0===window.pdp11&&(window.pdp11=function(a){return bc(b,a)}):void 0===global.pdp11&&(global.pdp11=function(a){return bc(b,a)})}z(Kc);
|
||||
var Oc={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","if":"eval expression","int [#]":"request interrupt",k:"stack trace",ln:"list nearest symbol(s)",m:"messages",p:"step over",print:"print expression",r:"dump/set registers",reset:"reset machine",s:"set options","t [#]":"trace","u [#]":"unassemble",v:"print version","var":"assign variable"},Pc=["NONE"],Qc=["PC","PSW"],Rc=[];g=Kc.prototype;
|
||||
g.va=function(a,b,c,d){this.A=b;this.g=c;this.i=a;(a=Zb(a,"messages"))&&Nc(this,a);this.jb=Rc;Sc(this,function(a){a:{var b=d.A.I,c=a[0],h=a=0,l=b.length;if(c){a=V(W(d,c));if(-1===a){d.b("invalid address: "+c);break a}h=a>>>d.A.P;l=1}d.b("blockid physical blockaddr used size type");d.b("-------- --------- ---------- ------ ------ ----");for(var c=-1,m=0;l--;){var p=b[h];p.type==c?m++||d.b("..."):(c=p.type,m=Fb[c],p&&d.b(n(p.id)+" %"+n(h<<d.A.P)+" %%"+n(p.u)+" "+ca(p.Xa)+" "+ca(p.size)+
|
||||
" "+m),c!=Lb&&(c=-1),m=0);a+=d.A.ga;h++}}});G(this)};
|
||||
g.ba=function(a,b,c){var d=this;switch(b){case "debugInput":return this.fa=this.G[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",bc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.D<d.B.length-1&&(b=d.B[++d.D]):40==a.keyCode&&(0<d.D?b=d.B[--d.D]:(b="",d.D=-1)),null!=b){var k=b.length;c.value=b;c.setSelectionRange(k,k)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.G[b]=c,Ga(c,function(){if(d.fa){var a=d.fa.value;d.fa.value=
|
||||
"";bc(d,a,!0);return!0}return!1}),!0;case "step":return this.G[b]=c,Ga(c,function(a){var b=!1;jb(d,!0)||(ib(d,!0),b=d.Ha(a?1:0),ib(d,!1));return b}),!0}return!1};g.Wa=function(){this.fa&&this.fa.focus()};function V(a){a=a&&a.u;null==a&&(a=-1);return a}g.ca=function(a,b){var c=255,d=V(a);-1!==d&&(c=Gb(this.A,d),b&&Tc(a,b));return c};g.Ma=function(a,b){var c=65535,d=V(a);if(-1!==d){var c=this.A,e=d&c.A,f=(d&c.i)>>>c.P,c=e!=c.A?c.I[f].gb(e,d):c.I[f++].Qa(e,d)|c.I[f&c.B].Qa(0,d+1)<<8;b&&Tc(a,b)}return c};
|
||||
g.Va=function(a,b,c){var d=V(a);if(-1!==d){var e=this.A;e.I[(d&e.i)>>>e.P].Ja(d&e.A,b&255,d);c&&Tc(a,c);L(this.g,!0)}};g.xb=function(a,b,c){var d=V(a);if(-1!==d){var e=this.A,f=d&e.A,k=(d&e.i)>>>e.P;f!=e.A?e.I[k].hb(f,b&65535,d):(e.I[k++].Ja(f,b&255,d),e.I[k&e.B].Ja(0,b>>8&255,d+1));c&&Tc(a,c);L(this.g,!0)}};function P(a){return{u:a,la:!1}}function Uc(a){return[a.u,a.la]}function Vc(a){return{u:a[0],la:a[1]}}
|
||||
function W(a,b,c){var d;c=(c?a.M:a.mb).u;if(void 0!==b){d=b=Wc(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.H.length;c++){var f=a.H[c].oa[d];if(void 0!==f){d=f.o;void 0!==d&&(e=P(d));break}}if(d=e)return d;c=X(a,b,void 0)}null!=c&&(d=P(c));return d}function Xc(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.zb=Yc(a,b.wb=c[2]))}function Tc(a,b){null!=a.u&&(a.u+=b||1)}
|
||||
function Zc(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.ca(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function Nc(a,b){a.C=a;a.W=a.Ab=536870912;a.ka=null;a.ma=[];var c=Yc(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in J)0<=xa(c,d)&&(a.W|=J[d],a.b(d+" messages enabled"))}function Sc(a,b){for(var c in J)if(64==J[c]){a.sa[c]=b;break}}
|
||||
function $c(a,b){var c;a=a.toUpperCase();null==b?c=xa(Qc,a):(c=xa(Qc,a.substr(b,2)),0>c&&(c=xa(Qc,a.substr(b,1))));return c}function ad(a,b){var c;if(0<=b){var d=a.g;switch(b){case 12:c=d.R;break;case 14:c=Bc(d)&255|d.Ga<<8}}return c}
|
||||
function bd(a,b){b=Wc(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));){e=$c(b,c+1);if(0<=e){d=0;var f=ad(a,e);if(void 0!==f)switch(e){case 12:case 14:d=4}b=b.substr(0,c)+(d?n(f,d):"??")+b.substr(c+1+Qc[e].length)}c++}for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=ba(e,16),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=W(a,e))?(d=e+' "'+Zc(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=
|
||||
0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=W(a,e))?(Tc(d),d=e+' "'+Zc(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}g.message=function(a,b){b&&(a+=" at "+n(P(this.g.R).u,4));if(this.W&1073741824)this.ma.push(a);else if(!this.ka||a!=this.ka)if(this.ka=a,this.W&-2147483648&&(this.Y(),a+=" (cpu halted)"),this.b(a),this.g){var c=this.g;c.M=0;c.w-=c.g;c.g=0;L(c)}};
|
||||
function Mc(a){var b;if(Dc(a)){if(!a.L||!a.L.length){a.L=Array(1E3);for(b=0;b<a.L.length;b++)a.L[b]=P();a.$=0;a.b("instruction history buffer allocated")}if(!a.J||!a.J.length)for(a.J=Array(256),b=0;b<a.J.length;b++)a.J[b]=[b,0]}else a.L&&a.L.length&&a.b("instruction history buffer freed"),a.$=0,a.L=[],a.J=[]}g.ya=function(a){if(!cd(this))return!1;this.g.ya(a);return!0};
|
||||
g.Ha=function(a,b,c){if(!cd(this))return!1;this.K=0;a||Dc(this)&&Ec(this,this.g.R,0);try{var d=this.g.Ha(a);0<d&&(this.K+=d,vc(this.g,d,!0),dc(this.g,d),this.S++)}catch(e){"number"!=typeof e&&(this.K=0,lb(this.g,e.stack||e.message))}!1!==c&&L(this.g);this.ea(b||!1);return 0<this.K};g.Y=function(a){this.g&&this.g.Y(a)};g.ea=function(a){void 0===a&&(a=!0);this.M=P(this.g.R);a&&1!=this.O?dd(this):ed(this)};
|
||||
function cd(a){var b;if(b=a.g&&kb(a.g))b=a.g,b.j.U?b=!0:(b.b(b.toString()+" not powered"),b=!1);b&&!jb(a.g)?(a=a.g,a.j.Ba?(a.b(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}g.qa=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};g.pa=function(a,b){b&&this.b(a?"suspending":"shutting down");return a?this.save():!0};g.reset=function(a){Mc(this);this.S=this.na=0;this.ka=null;this.K=0;this.M=P(this.g.R);this.j.X=!1;fd(this);a||this.ea()};
|
||||
g.save=function(){var a=new M(this);N(a,0,Uc(this.M));N(a,1,Uc(this.T));N(a,2,[this.B,this.V,this.W]);N(a,3,this.H);return a.data()};g.restore=function(a){var b=0;void 0!==a[2]&&(this.M=Vc(a[b++]),this.T=Vc(a[b++]),this.B=a[b][0],"string"==typeof this.B&&(this.B=[this.B]),this.V=a[b][1],this.W|=a[b][2]);a[3]&&(this.H=a[3]);return!0};g.start=function(a,b){this.O||this.b("running");this.j.X=!0;this.Db=a;this.Eb=b};
|
||||
g.stop=function(a,b){if(this.j.X){this.j.X=!1;this.K=b-this.Eb;if(!this.O){var c="stopped";if(this.K){var d=a-this.Db,e=0<d?Math.round(1E3*this.K/d):0,c=c+" (";Dc(this)&&(c+=this.S+" opcodes, ",this.na-=this.S,this.S=0);c+=this.K+" cycles, "+d+" ms, "+e+" hz)"}else hb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.b(c)}this.ea(!0);this.Wa();fd(this,this.g.R)}};function Dc(a){return 1<a.w.length||!!a.ja}
|
||||
function Ec(a,b,c){var d=a.g;if(0<c&&(a.ja&&!--a.ja||Ub(a,b,1,a.w)))return!0;0<=c&&a.J.length&&(a.S++,b=Gb(a.A,b),null!=b&&(a.J[b][1]++,b=a.L[a.$],b.u=d.R,b.la=!1,++a.$==a.L.length&&(a.$=0)));return!1}function Lc(a){var b,c;a.w=["bp"];if(void 0!==a.N)for(b=1;b<a.N.length;b++){c=a.N[b];var d=a.A;Vb(d.I[V(c)>>>d.P],!1)}a.N=["br"];if(void 0!==a.F)for(b=1;b<a.F.length;b++)c=a.F[b],d=a.A,Vb(d.I[V(c)>>>d.P],!0);a.F=["bw"];a.ob=0}
|
||||
g.ta=function(a,b,c){var d=!0;c||gd(this,a,b,!1,!0);if(a!=this.w){var e=V(b);if(-1===e)this.b("invalid address: "+n(b.u,4)),d=!1;else{var f=this.A;f.I[e>>>f.P].ta(e&f.A,a==this.F)}}d&&(a.push(b),c?b.la=!0:(hd(this,a,a.length-1,"set"),Mc(this)));return d};function gd(a,b,c,d,e){var f=!1;c=V(c);for(var k=1;k<b.length;k++){var h=b[k];if(c==V(h)&&(!d||h.la)){f=!0;h.la||e||hd(a,b,k,"cleared");b.splice(k,1);b!=a.w&&(d=a.A,Vb(d.I[c>>>d.P],b==a.F));h.la||Mc(a);break}}return f}
|
||||
function id(a,b){for(var c=1;c<b.length;c++)hd(a,b,c);return b.length-1}function hd(a,b,c,d){c=b[c];a.b(b[0]+" "+n(c.u,4)+(d?" "+d:c.wb?' "'+c.wb+'"':""))}function fd(a,b){if(void 0!==b)Ub(a,b,1,a.w,!0),a.O=0;else for(var c=1;c<a.w.length;c++){var d=a.w[c];if(d.la){if(!gd(a,a.w,d,!0))break;c=0}}}
|
||||
function Ub(a,b,c,d,e){var f=!1;if(!a.ob++)for(var k=1;!f&&k<d.length;k++){var h=d[k];if(!e||h.la)for(var l=V(h),m=0;m<c;m++)if(b+m==l){var p,f=!0;h.la&&(gd(a,d,h,!0),e=!0);if(p=h.zb){for(var f=!1,q=0;q<p.length;q++)if(!jd(a,p[q],!0)){if(p[q].indexOf("if")){f=!0;break}for(var w=q+1;w<p.length&&p[w].indexOf("else");w++)q++;if(w==p.length){f=!0;break}}a.g.j.X||(f=!0)}if(f){e||hd(a,d,k,"hit");break}}}a.ob--;return f}
|
||||
function kd(a,b,c,d){for(var e=P(b.u),f=a.ca(b,1),k=a.jb[f],h="",l=Pc[k[0]],m=k.length-1,p=0,q,w=1;w<=m;w++){var B="";q=k[w];if(void 0!==q){var A=q&240;if(A){var Y=q&15;Y?p=Y:q|=p;q&61440||(q|=1==w?8192:4096);if(A&32)a:{var B=a,A=q,Y=b,y=" ";switch(A&15){case 1:y=n(B.ca(Y,1),2);break;case 2:y=n(B.ca(Y,1)<<24>>24,4);break;case 3:y=n(B.Ma(Y,2),4);break;default:B="imm("+ca(A)+")";break a}A&64?y="["+y+"]":A&16||(y="0x"+y);B=y}else A&16?B=Qc[(q&3840)>>8]:A&128&&(B=(f>>3&7).toString());if(!B||!B.length){h=
|
||||
"INVALID";break}0<h.length&&(h+=",");h+=B||"???"}}}f="";k=n(e.u,4)+" ";if(-1!==e.u&&-1!==b.u){do if(f+=n(a.ca(e,1),2),null==e.u)break;while(e.u!=b.u)}k+=na(f,10);k=k+(q&32768?"*":" ")+na(l,7);h&&(k+=" "+h);c&&(k=na(k,40)+";"+c,k=a.g.j.Aa?k+("cycles="+sc(a.g).toString()+" cs="+n(a.g.Na)):k+(null!=d?"="+d.toString():""));return k}var ld={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
|
||||
function md(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<<e;break;case ">>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f<e?1:0;break;case "<=":d=f<=e?1:0;break;case ">":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
|
||||
case "^":d=f^e;break;case "|":d=f|e;break;case "&&":d=f&&e?1:0;break;case "||":d=f||e?1:0;break;default:return!1}a.push(d|0)}return!0}
|
||||
function X(a,b,c){var d;if(b){b=Wc(a,b);for(var e=0,f=!1,k=b,h=[],l=[],m=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<m.length;){var p=m[e++],q=p.length,p=oa(p);if(!p){f=!0;break}p=Ld(a,p,null,!1===c);if(void 0===p){f=!0;c=!1;break}h.push(p);if(e==m.length)break;var p=m[e++],w=p.length;l.length&&ld[p]<ld[l[l.length-1]]&&md(h,l,1);l.push(p);b=b.substr(q+w)}md(h,l)&&1==h.length||(f=!0);f?c&&a.b("error parsing '"+k+"' at character "+(k.length-b.length)):(d=h.pop(),c&&Md(a,null,
|
||||
d))}return d}function Wc(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=X(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?n(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=W(a,c[1]),b=b.replace("["+c[1]+"]",d?n(a.Ma(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.S-a.na}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
|
||||
function Ld(a,b,c,d){var e;void 0!==b?(e=$c(b),0<=e?e=ad(a,e):(e=a.Z[b],void 0===e&&(e=ba(b))),void 0!==e||d||a.b("invalid "+(c?c:"value")+": "+b)):d||a.b("missing "+(c||"value"));return e}
|
||||
function Md(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,k="";if(!f||4<f)f=4;for(var h=0;h<f;h++){k&&(k=","+k);var l=d&255,m=8,p="";void 0===m?m=32:32<m&&(m=32);if(null==l||isNaN(l))for(;0<m--;)p="?"+p;else for(;0<m--;)p=(l&1?"1":"0")+p,l>>=1;k=p+"b"+k;d>>=8}d="0x"+n(c)+" "+c+". ("+k+")"}a.b((null!=b?b+": ":"")+d);return e}function Nd(a,b){if(b)return Md(a,b,a.Z[b]);var c=0;for(b in a.Z)Md(a,b,a.Z[b]),c++;return 0<c}Kc.prototype.lb=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
|
||||
function Od(a,b,c){var d=[],e=V(b)>>>0;for(b=0;b<a.H.length;b++){var f=a.H[b],k=f.u>>>0,h=f.Hb;if(e>=k&&e<k+h){e=pa(f.kb,[e-k],a.lb);0<=e?Pd(a,b,e,d):c&&(e=~e,Pd(a,b,e-1,d),Pd(a,b,e,d));break}}return d}function Pd(a,b,c,d){var e={},f=a.H[b].kb,k=0,h=null;0<=c&&c<f.length&&(k=f[c][0],h=f[c][1]);h&&(e=a.H[b].oa[h],h="."==h.charAt(0)?null:e.l||h);d.push(h);d.push(k);d.push(e.a);d.push(e.c)}
|
||||
function Qd(a,b){if("?"==b)a.b("frequency commands:"),a.b("\tclear\tclear all frequency counts");else{var c,d=0;if(a.J)if("clear"==b){for(c=0;c<a.J.length;c++)a.J[c]=[c,0];a.b("frequency data cleared");d++}else if(void 0!==b)a.b("unknown frequency command: "+b),d++;else{var e=a.J.slice();e.sort(function(a,b){return b[1]-a[1]});for(c=0;c<e.length;c++){var f=e[c][0],k=e[c][1];k&&(a.b((Pc[a.jb[f][0]]+" ").substr(0,5)+" ("+("0x"+n(f,2))+"): "+k+" times"),d++)}}d||a.b("no frequency data available")}}
|
||||
function Rd(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Nd(a)||a.b("no variables"),!0;if(!c[2])return Nd(a,c[1]);if(!c[3])return delete a.Z[c[1]],!0;var d=X(a,c[3]);return void 0!==d?(a.Z[c[1]]=d,!0):!1}a.b("invalid assignment:"+b);return!1}
|
||||
function Sd(a,b,c){var d=null;if(b=W(a,b,!0)){var e=Od(a,b,!0);if(e.length){var f,k;e[0]&&(k="",(f=b.u-e[1])&&(k=" + "+ca(f)),f=e[0]+" ("+n(e[1],4)+")"+k,c&&a.b(f),d=f);4<e.length&&e[4]&&(k="",(f=e[5]-b.u)&&(k=" - "+ca(f)),f=e[4]+" ("+n(e[5],4)+")"+k,c&&a.b(f),d||(d=f))}else c&&a.b("no symbols")}return d}
|
||||
function dd(a,b){var c;if(b&&"?"==b[1])a.b("register commands:"),a.b("\tr\tdump registers"),a.b("\trx [#]\tset flag or register x to [#]");else{var d=a.g;null==c&&(c=!0);if(null!=b&&1<b.length){var e=b[1],f=null,k=e.indexOf("=");if(0<k)f=e.substr(k+1),e=e.substr(0,k);else if(2<b.length)f=b[2];else{a.b("missing value for "+b[1]);return}var k=!1,h=X(a,f);if(void 0!==h)switch(k=!0,e.toUpperCase()){case "A":d.Ga=h&255;break;case "B":d.Ra=h&255;break;case "BC":d.Ra=h>>8&255;case "C":d.$a=h&255;break;case "D":d.Sa=
|
||||
h&255;break;case "DE":d.Sa=h>>8&255;case "E":d.ab=h&255;break;case "H":d.Ta=h&255;break;case "HL":d.Ta=h>>8&255;case "L":d.bb=h&255;break;case "SP":d.Ua=h&65535;break;case "PC":d.R=h&65535;a.M=P(d.R);break;case "PS":Ac(d,h);break;case "PSW":Ac(d,h&255|d.ha&-256);d.Ga=h>>8;break;case "CF":d.da=h?d.da|256:d.da&255;break;case "ZF":d.da=h?d.da&-256:d.da|255;break;case "SF":h?d.ia&128||(d.ia^=192):d.ia&128&&(d.ia^=192);break;case "IF":d.ha=h?d.ha|512:d.ha&-513;break;default:a.b("unknown register: "+e);
|
||||
return}if(!k){a.b("invalid value: "+f);return}L(d);a.b("updated registers:")}a.b("no regs");c&&(a.M=P(d.R),ed(a,n(a.M.u,4)))}}function Td(a,b){b=oa(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.b(bd(a,c[2])):X(a,b,!0)}function Ud(a,b,c){var d="t"!=b;c=Ld(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Fa(c,function(){return ib(a,!0)&&a.Ha(e,d,!1)},function(){L(a.g);ib(a,!1)})}
|
||||
function ed(a,b,c,d){if(b=W(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=W(a,c,!0);if(!d||d.u<b.u)return;e=d.u-b.u;if(256<e){a.b("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=jb(a,!1)||a.O?a.K:null;var k=null!=f?"cycles":null,h=Od(a,b),l=b.u;if(h[0]&&d&&(!c&&d||0>h[0].indexOf("+"))){var m=h[0]+":";h[2]&&(m+=" "+h[2]);a.b(m)}h[3]&&(k=h[3],f=null);f=kd(a,b,k,f);a.b(f);a.M=b;e-=b.u-l;c++}}}
|
||||
function Yc(a,b,c,d){if(c)if(b){0>a.D&&a.B.length&&(a.D=0);if(0>a.D||b!=a.B[a.D])a.B.splice(0,0,b),a.D=0;a.D--}else a.V?b="end":b=a.B[a.D+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var k=b.charAt(f);if('"'==k||"'"==k)e?k==e&&(e=null):e=k;else if(k==d&&!e||!k)a.push(oa(b.substring(c,f))),c=f+1}}return a}
|
||||
function jd(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.b(">> "+b):(a.V&&(a.b("ended assemble at "+n(a.T.u,4)),a.M=a.T,a.V=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.ka=null;if(kb(a)&&0<b.length){a.V&&(b="a "+n(a.T.u,4)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var k=f[0],h=k.charAt(0),l=1;l<k.length;l++){var m=k.charAt(l);if("?"==h||"r"==h||"a">m||"z"<m){f[0]=k.substr(l);f.unshift(k.substr(0,l));break}}switch(f[0].charAt(0)){case "a":var p=W(a,f[1],!0);if(p)if(a.T=
|
||||
p,void 0===f[2])a.b("begin assemble at "+n(p.u,4)),a.V=!0,L(a.g);else{var q;a.b("not supported yet");q=[];if(q.length){for(var w=0;w<q.length;w++)a.Va(p,q[w],1);a.b(kd(a,a.T))}}break;case "b":a:{var B=f[0],A=f[1],Y=b;if("?"==A)a.b("breakpoint commands:"),a.b("\tbp [a]\tset exec breakpoint at addr [a]"),a.b("\tbr [a]\tset read breakpoint at addr [a]"),a.b("\tbw [a]\tset write breakpoint at addr [a]"),a.b("\tbc [a]\tclear breakpoint at addr [a]"),a.b("\tbl\tlist all breakpoints"),a.b("\tbn [n]\tbreak after [n] instruction(s)");
|
||||
else{var y=B.charAt(1);if("l"==y){var sa=0,sa=sa+id(a,a.w),sa=sa+id(a,a.N);(sa+=id(a,a.F))||a.b("no breakpoints")}else if("n"==y)a.ja=Ld(a,A),a.b("break after "+a.ja+" instruction(s)");else if(void 0===A)a.b("missing breakpoint address");else{var H=P();if("*"!=A&&(H=W(a,A,!0),!H))break a;"c"==y?null==H.u?(Lc(a),a.b("all breakpoints cleared")):gd(a,a.w,H)||gd(a,a.N,H)||gd(a,a.F,H)||a.b("breakpoint missing: "+n(H.u,4)):null!=H.u&&(Xc(a,H,Y),"p"==y?a.ta(a.w,H):"r"==y?a.ta(a.N,H):"w"==y?a.ta(a.F,H):a.b("unknown breakpoint command: "+
|
||||
y))}}}break;case "c":a.ua&&(a.ua.value="");break;case "d":a:{var ta,ua=f[0],Q=f[1],fa=f[2],ne=f[3];if("?"==Q){var R="";for(ta in J)a.sa[ta]&&(R&&(R+=","),R+=ta);R+=",state,symbols";a.b("dump memory commands:");a.b("\tdb [a] [#] dump # bytes at address a");a.b("\tdw [a] [#] dump # words at address a");a.b("\tdd [a] [#] dump # dwords at address a");a.b("\tdh [#] [#] dump # instructions from history");R.length&&a.b("dump extension commands:\n\t"+R)}else if("state"==Q){var nd=Vd(a.i,!0);"console"==
|
||||
fa?console.log(nd):(a.ua&&(a.ua.value=""),a.b(nd))}else if("symbols"==Q)for(var ec=0;ec<a.H.length;ec++){var fc=a.H[ec],va;for(va in fc.oa)if("."!=va.charAt(0)){var od=fc.oa[va].o;if(void 0!==od){var pd=fc.oa[va].l;pd&&(va=pd);a.b(n(od,4)+" "+va)}}}else{if("d"==ua){for(ta in J)if(f[1]==ta){var qd=a.sa[ta];qd?(f.shift(),f.shift(),qd(f)):a.b("no dump registered for "+Q);break a}Q||(ua=a.Gb||"db")}else a.Gb=ua;if("dh"==ua){var rd=Q,sd=fa,td="",ud=0,C=a.$,S=a.L;if(S.length){var I=+rd||a.qb,wa=+sd||10;
|
||||
isNaN(I)?I=wa:td="more ";I>S.length&&(a.b("note: only "+S.length+" available"),I=S.length);C-=I;0>C&&(null==S[S.length-1].u?(I=C+I,C=0):C+=S.length);var gc=[];"call"==sd&&(wa=1E5,gc=["CALL"]);for(void 0!==rd&&a.b(I+" instructions earlier:");0<wa&&C!=a.$;){var vd=S[C++];if(null==vd.u)break;var Sa=P(vd.u),oe=I--,wd=kd(a,Sa,"history",oe);(!gc.length||0<=wd.indexOf(gc[0]))&&a.b(wd);Sa.cb&&(C+=Sa.cb,wa-=Sa.cb,I-=Sa.cb);C>=S.length&&(C=0);a.qb=I;ud++;wa--}}ud||(a.b("no "+td+"history available"),a.qb=void 0)}else{var sb=
|
||||
W(a,Q);if(sb){var tb=0;fa&&("l"==fa.charAt(0)&&(fa=fa.substr(1)||ne),tb=Ld(a,fa)>>>0,65536<tb&&(tb=65536));for(var ga="",ub="dd"==ua?4:"dw"==ua?2:1,vb=ub*tb||128,pe=vb+15>>4||1;pe--&&0<vb;){var wb=0,hc=0,Ta,Ua="",ic="",Q=n(sb.u,4);for(Ta=16;0<Ta&&0<vb;Ta--){var xb=a.ca(sb,1),wb=wb|xb<<(hc++<<3);hc==ub&&(Ua+=n(wb,2*ub),Ua+=1==ub?9==Ta?"-":" ":" ",wb=hc=0);ic+=32<=xb&&128>xb?String.fromCharCode(xb):".";vb--}ga&&(ga+="\n");ga+=Q+" "+Ua+(0==Ta?" "+ic:"")}ga&&a.b(ga);a.mb=sb}}}}break;case "e":if("else"==
|
||||
f[0])break;var yb=1,xd=255,yd=a.ca,zd=a.Va;"ew"==f[0]&&(yb=2,xd=65535,yd=a.Ma,zd=a.xb);var Ad=yb<<1,Bd=f[1];if(null==Bd)a.b("edit memory commands:"),a.b("\teb [a] [...] edit bytes at address a"),a.b("\tew [a] [...] edit words at address a");else{var zb=W(a,Bd);if(zb)for(var Ab=2;Ab<f.length;Ab++){var Va=X(a,f[Ab]);if(void 0===Va){a.b("unrecognized value: "+f[Ab]);break}Va&~xd&&a.b("warning: "+n(Va)+" exceeds "+yb+"-byte value");var qe=yd.call(a,zb);a.b("changing "+n(zb.u,4)+" from 0x"+n(qe,Ad)+
|
||||
" to 0x"+n(Va,Ad));zd.call(a,zb,Va,yb)}}break;case "f":Qd(a,f[1]);break;case "g":a:{var Cd=f[1],re=b;if(void 0!==Cd){var jc=W(a,Cd,!0);if(!jc)break a;Xc(a,jc,re);a.ta(a.w,jc,!0)}a.ya(!0)||c||a.b("cpu busy or unavailable, run command ignored")}break;case "h":a:{var kc;if(a.j.X)kc="halting",a.Y();else{if(jb(a,!0))break a;kc="already halted"}c||a.b(kc)}break;case "i":if("if"==f[0]){var lc;var Wa=b.substr(2),Wa=oa(Wa);X(a,Wa)?(c||a.b("true: "+Wa),lc=!0):(c||a.b("false: "+Wa),lc=!1);lc||(d=!1);break}if("int"==
|
||||
f[0]){var Bb;var se=f[1];if(a.g.ha&512){var mc=X(a,se);if(null==mc)Bb=!1;else{a.b("requesting interrupt level "+mc);var ha=a.g;ha.B|=1<<mc;ha.ha&512&&(ha.w-=ha.g,ha.g=0);Bb=!0}}else a.b("interrupts disabled (use rif=1 to enable)"),Bb=!1;Bb||(d=!1);break}break;case "k":var te=f[0];if("?"==f[1])a.b("stack trace commands:"),a.b("\tk\tshow frame addresses"),a.b("\tks\tshow symbol information");else{var nc=0,Dd=P(),Xa=P(a.g.Ua);for(a.b("stack trace for "+n(Xa.u,4));10>nc;){for(var ia=null,ue=256;65536>
|
||||
Xa.u>>>0;){Dd.u=a.Ma(Xa,2);if(null==Xa.u||!ue--)break;for(var ve=a,Cb=Dd,Ed=null,Ya=Cb.u,Fd=Ya,oc=1;6>=oc&&Ya;oc++){if(2<oc){Cb.u=Ya;var Db=kd(ve,Cb);if(0<=Db.indexOf("CALL")){var Gd=Db.indexOf(" ");if(Ya+(Db.indexOf(" ",Gd+1)-Gd-1)/2==Fd){Ed=Db;break}}}Ya--}Cb.u=Fd;if(ia=Ed)break}if(!ia||null==ia)break;var Hd=null;if("ks"==te){var Id=ia.match(/[0-9A-F]+$/);Id&&(Hd=Sd(a,Id[0]))}ia=na(ia,50)+" ;"+(Hd||"stack="+n(Xa.u,4));a.b(ia);nc++}nc||a.b("no return addresses found")}break;case "l":if("ln"==f[0]){Sd(a,
|
||||
f[1],!0);break}break;case "m":a:{var T,U=null,u=f[1];"?"==u&&(u=void 0);if(void 0!==u){var Z=0;if("all"==u)Z=1878917119,u=null;else if("on"==u)U=!0,u=null;else if("off"==u)U=!1,u=null;else{"keys"==u&&(u="key");"kbd"==u&&(u="keyboard");for(T in J)if(u==T){Z=J[T];U=!!(a.W&Z);break}if(!Z){a.b("unknown message category: "+u);break a}}if(Z)if("on"==f[2])a.W|=Z,U=!0;else if("off"==f[2]&&(a.W&=~Z,U=!1,1073741824==Z)){for(var pc=0;pc<a.ma.length;pc++)a.b(a.ma[pc]);a.ma=[]}}var we=0,aa="";for(T in J)if(!u||
|
||||
u==T){var xe=!!(a.W&J[T]);if(null===U||U==xe)aa&&(aa+=","),++we%10||(aa+="\n\t"),"key"==T&&(T="keys"),aa+=T}void 0===u&&a.b("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.b((null!==U?U?"messages on: ":"messages off: ":"message categories:\n\t")+(aa||"none"));Mc(a)}break;case "p":if("print"==f[0]){Td(a,b.substr(5));break}var Jd="pr"==f[0]?1:0,ye=1+Jd;if(a.O)a.b("step in progress");else{var qc=P(a.g.R);switch(a.ca(qc)){case 205:a.O=ye,Tc(qc,3)}a.O?(a.ta(a.w,qc,!0),a.ya()||
|
||||
(a.i&&a.i.Wa(),a.O=0)):Ud(a,Jd?"tr":"t")}break;case "r":if("reset"==b){a.i&&a.i.reset();break}dd(a,f);break;case "s":a:switch(f[1]){case "cs":var Za;void 0!==f[3]&&(Za=+f[3]);switch(f[2]){case "int":a.g.Da=Za;break;case "start":a.g.Oa=Za;break;case "stop":a.g.Ea=Za;break;default:a.b("unknown cs option");break a}void 0!==Za&&ac(a.g);a.b("checksums "+(a.g.j.Aa?"enabled":"disabled"));break;case "sp":void 0!==f[2]&&(uc(a.g,+f[2])||a.b("warning: using 1x multiplier, previous target not reached"));a.b("target speed: "+
|
||||
(a.g.wa.toFixed(2)+"Mhz")+" ("+a.g.xa+"x)");break;case "?":a.b("debugger options:");a.b("\tcs int #\tset checksum cycle interval to #");a.b("\tcs start #\tset checksum cycle start count to #");a.b("\tcs stop #\tset checksum cycle stop count to #");a.b("\tsp #\t\tset speed multiplier to #");break;default:f[1]&&a.b("unknown option: "+f[1])}break;case "t":Ud(a,f[0],f[1]);break;case "u":ed(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Rd(a,b.substr(3))||(d=!1);break}a.b("PDP11 version 1.24.2 ("+a.g.ub+
|
||||
",RELEASE"+(mb?",TYPEDARRAYS":",LONGARRAYS")+")");a.b(window?window.navigator.userAgent:"");break;case "?":if(f[1]){Td(a,b.substr(1));break}var $a="commands:",rc;for(rc in Oc)$a+="\n"+na(rc,9)+Oc[rc];Dc(a)||($a+="\nnote: frequency/history disabled if no exec breakpoints");a.b($a);break;default:a.b("unknown command: "+b),d=!1}}}catch(Kd){a.b("debugger error: "+(Kd.stack||Kd.message)),d=!1}return d}function bc(a,b,c){b=Yc(a,b,c);for(var d in b)if(!jd(a,b[d]))return!1;return!0}
|
||||
La(function(){for(var a=F(document,"pdp11","debugger"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Kc(d);gb(d,c)}});
|
||||
function Wd(a,b,c){v.call(this,"Computer",a,Wd,67108864);this.j.U=!1;Xd(this,b);this.M=Zb(this,"autoPower",a);this.B=0;this.V=a.busWidth||a.buswidth;this.i=Yd;this.K=null;this.H=this.S=!1;this.Z=Zb(this,"url")||"";(Math.random()+.1).toString(36);this.w=Zd(this);if(this.g=fb("CPU",this.id)){this.C=fb("Debugger",this.id);this.A=new pb({id:this.nb+".bus",busWidth:this.V},this.g,this.C);var d,e=D(this.id);if((this.D=fb("Panel",this.id))&&this.D.ua)for(b=0;b<e.length;b++)d=e[b],d.aa=this.D.aa,d.b=this.D.b,
|
||||
d.ua=this.D.ua;this.b("PDP11 v1.24.2\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");for(b=0;b<e.length;b++)d=e[b],d.va&&d.va(this,this.A,this.g,this.C);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.J=d:this.i=parseInt(d,10));var f;if(a=Zb(this,"state")||(f=!0,a.state))b=this.N=a,f||(this.H=!0,this.i=Yd),this.i&&(this.L=new M(this,"1.24.2"),$d(this.L)?b=null:delete this.L);!b&&this.i&&(b=ae(this))&&(this.H=!0);if(b){var k=
|
||||
this;ya(b,null,!0,function(a,b,c){c?(k.J=null,k.H=!1,k.aa("Unable to load machine state from server (error "+c+(b?": "+oa(b):"")+")")):(k.K=b,k.S=!0);G(k)})}else G(this);this.G.power||(this.M=!0);!c&&this.M&&be(this,this.Pa)}else r("Unable to find CPU component")}z(Wd);var Yd=0;function Xd(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){r(d.message+" ("+c+")")}}a.T=b}
|
||||
function Zb(a,b,c){var d=b.toLowerCase(),d=Qa[b]||Qa[d];void 0===d&&a.T&&(d=a.T[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function be(a,b,c){for(var d=D(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!kb(f)){kb(f,function(){be(a,b,c)});return}}b.call(a,c)}
|
||||
function ce(a,b){var c=new M(a,"1.24.2","validate");if($d(c)&&de(c)){var d=ee(c,"timestamp"),e=b?ee(b,"timestamp"):"unknown";d!=e&&(a.aa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}g=Wd.prototype;
|
||||
g.Pa=function(a){void 0===a&&(a=this.i||(this.K?1:Yd));if(!this.B){this.B++;var b=!1,c=!1;this.O=!1;var d=this.L||new M(this,"1.24.2");if(-1==a)b=!0;else if(a>Yd){if($d(d,this.K)){this.F=new M(this,"1.24.2","failsafe");$d(this.F)&&(fe(this,d),a=2,ge(this.F));N(this.F,"timestamp",ra());he(this.F);var e=this.i&&!this.H;if(1==a||za("Click OK to restore the previous PDP11 machine state, or CANCEL to reset the machine.")){if(c=de(d)){var f=ee(d,"code"),k=ee(d,"data");f&&("ok"==f?$d(d,k):("error"==f&&"no machine state"!=
|
||||
k?(this.aa("Error: "+k),"unable to verify user"==k&&(Da("user",""),this.w=null)):this.b(f+": "+k),ge(d),$d(d)?(c=de(d),e=!0):c=!1))}e&&ce(this,c?d:null)}else 2==a&&d.clear()}else ce(this);delete this.K;delete this.L}e=D(this.id);for(f=0;f<e.length;f++)k=e[f],k!==this&&k!=this.g&&(c=ie(this,k,d,b,c));b=[d,a,c];-1!=a?be(this,this.pb,b):this.pb(b)}};
|
||||
function ie(a,b,c,d,e){if(!b.j.U){b.j.U=!0;if(b.qa){var f=null;e&&((f=ee(c,b.id))||(f=ee(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.qa(f,d)&&f&&(r("Unable to restore state for "+b.type),a.N&&!a.S?(c.clear(),a.i=Yd,window&&window.location.reload()):a.O=!0,b.qa(null),e=!1)}if(!d&&b.ib)for(a=b.ib.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
||||
g.pb=function(a){var b=a[0],c=0>a[1];a=a[2];this.$=!0;this.j.U=!0;var d=this.G.power;d&&(d.textContent="Shutdown");this.g&&(ie(this,this.g,b,c,a),cc(this.g));this.O&&(fe(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.B=0};
|
||||
function fe(a,b){if(za("There may be a problem with your PDP11 machine.\n\nTo help us diagnose it, click OK to send this PDP11 machine state to http://www.pcjs.org.")){var c=a.w||"",d=b.toString(),e={app:"PDP11",ver:"1.24.2"};e.url=a.Z;e.user=c;e.type="bug";e.data=d;ya("http://www.pcjs.org/api/v1/report",e,!0)}}
|
||||
function Vd(a,b,c){var d,e="none";if(a.B)return null;a.B--;var f=new M(a,"1.24.2"),k=new M(a,"1.24.2","validate"),h=ra();N(k,"timestamp",h);N(f,"timestamp",h);N(f,"version","1.24.2");N(f,"url",window?window.location.href:null);N(f,"browser",window?window.navigator.userAgent:"");a.g&&a.g.pa&&(c&&a.g.Y(),d=a.g.pa(b,c),"object"===typeof d&&N(f,a.g.id,d),c&&(a.g.j.U=!1,!1===d&&(e=null)));for(var h=D(a.id),l=0;l<h.length;l++){var m=h[l];m.j.U&&(m.pa&&(d=m.pa(b,c),"object"===typeof d&&N(f,m.id,d)),c&&(m.j.U=
|
||||
!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.w&&je(a,a.w,f.toString()),he(k)&&he(f)||(e=null,d=h=!0)):a.i&&(d=!0,h=3==a.i),d&&f.clear(h)):e=f.toString());c&&(a.j.U=!1,b=a.G.power)&&(b.textContent="Power");a.B=0;return e}g.reset=function(){this.A&&this.A.reset&&(this.C&&hb(this,0)&&this.C.message("Resetting "+this.A.type,void 0),this.A.reset());for(var a=D(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.A&&c.reset&&(this.C&&hb(this,0)&&this.C.message("Resetting "+c.type,void 0),c.reset())}};
|
||||
g.start=function(a,b){for(var c=D(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};g.stop=function(a,b){for(var c=D(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
|
||||
g.ba=function(a,b,c){var d=this;switch(b){case "power":return this.G[b]=c,c.onclick=function(){d.B||(d.j.U?Vd(d,!1,!0):be(d,d.Pa))},!0;case "reset":return this.G[b]=c,c.onclick=function(){if(d.j.U&&!d.B)if(d.i&&!d.J){var a=za("Click OK to save changes to this PDP11 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Vd(d,a,!0);!a&&d.N?window&&window.location.reload():d.Pa(Yd)}else d.reset(),d.g&&cc(d.g)},!0;case "save":if(ja()){c.parentNode.removeChild(c);break}this.G[b]=c;c.onclick=
|
||||
function(){var a=Zd(d,!0);if(a){var b=!!(d.i&&!d.J||d.N),c=Vd(d,b);b?je(d,a,c):d.aa("Resume disabled, machine state not saved")}};return!0}return!1};function Zd(a,b){var c=a.w;c||(c=Ca("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=ke(a,c))||a.aa("The user ID is invalid."))):b&&a.aa("Browser local storage is not available"));return c}
|
||||
function ke(a,b){a.w=null;var c=ya(ka()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(Da("user",c.data),a.w=c.data)}catch(e){r(e.message+" ("+d+")")}return a.w}function ae(a){var b=null;a.w&&(b=ka()+"/api/v1/user?req=load&user="+a.w+"&state="+le(a,"1.24.2"));return b}
|
||||
function je(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=le(a,"1.24.2");d.data=c;b=ya(ka()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.aa("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.aa(c),Da("user",""),a.w=null)}}g.Wa=function(){};
|
||||
g.ea=function(a){this.g&&this.g.ea(a);this.D&&this.D.ea(a)};La(function(){for(var a=F(document,"pdp11-machine"),b=0;b<a.length;b++)for(var c=a[b],d=E(c),c=F(c,"pdp11","computer"),e=0;e<c.length;e++){var f=c[e],k=E(f),k=new Wd(k,d,!0);gb(k,f);k.M&&be(k,k.Pa)}});t.show.push(function(){for(var a=F(document,"pdp11","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=fb("Computer",c.id))&&c.$&&!c.j.U&&c.Pa(-1)}});
|
||||
t.exit.push(function(){for(var a=F(document,"pdp11","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=fb("Computer",c.id))&&c.j.U&&Vd(c,!(!c.i||c.J),!0)}});function M(a,b,c){this.id=a.id;this.key=le(a,b,c);this.C=a.C;ge(this,a.Fb)}function le(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
|
||||
M.prototype={constructor:M,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){ge(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};
|
||||
function ge(a,b){a[a.id]={};b&&N(a,"parms",b);a.g=!1}function he(a){var b=!0;if(Ba()){var c=JSON.stringify(a[a.id]);Da(a.key,c)||(r("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function de(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){r(c.message||c),b=!1}return b}function $d(a,b){return b?(a[a.id]=b,a.g=!0):a.g?!0:Ba()&&(b=Ca(a.key))?(a[a.id]=b,a.g=!0):!1}function ee(a,b){return a[a.id][b]||null}function N(a,b,c){try{a[a.id][b]=c}catch(d){}}var me=0;
|
||||
function ze(a,b,c,d,e,f){e("Loading "+a+"...");ya(a,null,!0,function(k,h,l){l?(h||(h="unable to load "+a+" ("+l+")"),f(h,null)):Ae(h,a,b,c,d,e,f)})}
|
||||
function Ae(a,b,c,d,e,f,k){function h(a,f){if(f)k(f,null);else{if(c){eb(c,b,a);var h=b;h&&0>h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+h+'"}';"object"==typeof resources&&(h=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pdp11$2"));
|
||||
h=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(h=new window.ActiveXObject("Microsoft.XMLDOM"),h.async=!1,h.loadXML(a)):h=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){h=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,h)}}a?e?Be(a,f,h):h(a,null):k("no data"+(b?" for file: "+b:""),null)}
|
||||
function Be(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");ya(e,null,!0,function(f,k,h){if(h||!k)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=k.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=h[0],m,p=/( [a-z]+=)(['"])(.*?)\2/g;m=p.exec(f);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=l&&(k=k.replace(h[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}k=k.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],k);Be(a,b,c)}})}else c(a,null)}
|
||||
function Ce(a,b,c,d){function e(a){if(void 0===h){var b=k&&F(k,"machine-warning");h=b&&b[0]||k}h&&(h.innerHTML=ma(a))}function f(a){e("Error: "+a);l&&(--me||Na(!0));l=!1}var k,h,l=!0;me++;db[a]={};try{if(k=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=m:q.appendChild(document.createTextNode(m));p.appendChild(q)}c||
|
||||
(c="/versions/pdp11/1.24.2/components.xsl");m=function(d,h){h?ze(c,null,null,!1,e,function(d,l){if(l)if(eb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=h.transformNode(l);m?(k.outerHTML=m,--me||Na(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(l),(m=m.transformToFragment(h,document))?k.parentNode?(k.parentNode.replaceChild(m,k),--me||Na(!0)):f("invalid machine element: "+
|
||||
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?ze(b,a,d,!0,e,m):Ae(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(w){f(w.message)}return l}window.embedPDP11=function(a,b,c,d){Na(!1);return Ce(a,b,c,d)};window.enableEvents=Na;window.sendEvent=Oa;})();
|
||||
81
versions/pdp11/1.24.2/pdp11.js
Normal file
81
versions/pdp11/1.24.2/pdp11.js
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
(function(){var e;function aa(a){var b=16,c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var f,d=a,g=b;(g&&10!=g?16==g?null!==d.match(/^[0-9a-f]+$/i):2==g&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f|0)}return c}
|
||||
function n(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function ba(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function da(){var a=p();return-1!==a.indexOf("pcjs.org",a.length-8)}
|
||||
var ea={"&":"&","<":"<",">":">",'"':""","'":"'"};function fa(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}var q=Date.now||function(){return+new Date};function ga(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
|
||||
function t(a,b,c,d){var f=0,g=null,k=null;if("object"==typeof resources&&(g=resources[a]))return d&&d(a,g,f),[g,f];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),k;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(g=h.responseText,200==h.status||!h.status&&g.length&&"file:"==(window?window.location.protocol:"file:")||(f=h.status||-1),d&&d(a,g,f))});if(b&&"object"==
|
||||
typeof b){var l="",m;for(m in b)b.hasOwnProperty(m)&&(l&&(l+="&"),l+=m+"="+encodeURIComponent(b[m]));l=l.replace(/%20/g,"+");h.open("POST",a,!!c);h.setRequestHeader("Content-type","application/x-www-form-urlencoded");h.send(l)}else h.open("GET",a,!!c),"bytes"==b&&h.overrideMimeType("text/plain; charset=x-user-defined"),h.send();c||(g=h.responseText,200!=h.status&&(f=h.status||-1),d&&d(a,g,f),k=[g,f]);return k}function p(){return"http://"+(window?window.location.host:"www.pcjs.org")}
|
||||
function u(a){window&&window.alert(a)}function ha(a){var b=!1;window&&(b=window.confirm(a));return b}var ia=null;function ja(){if(null==ia){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}ia=a}return ia}function ka(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
|
||||
function v(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function la(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}var w={init:[],show:[],exit:[]},ma=!1,na=!1,oa=!0;function pa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function x(a){w.init.push(a)}
|
||||
function qa(a){if(oa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){u(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function y(a){!oa&&a?(oa=!0,ma&&ra("init"),na&&ra("show")):oa=a}function ra(a){w[a]&&qa(w[a])}pa("onload",function(){ma=!0;qa(w.init)});pa("onpageshow",function(){na=!0;qa(w.show)});pa(la("Opera")||la("iOS")?"onunload":"onbeforeunload",function(){qa(w.exit)});
|
||||
function z(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.Ca=b.comment;this.Ra=b;b=this.id.indexOf(".");0>b?this.ca=this.id:(this.Ea=this.id.substr(0,b),this.ca=this.id.substr(b+1));this[a]=c;this.b={aa:!1,ha:!1,wa:!1,u:!1,U:!1};this.la=null;this.b.U=!1;this.c={};this.v=null;A.push(this)}var sa=void 0,ta={};
|
||||
if(window){sa||(sa=window.location.search.substr(1));for(var ua,va=/\+/g,wa=/([^&=]+)=?([^&]*)/g;ua=wa.exec(sa);)ta[decodeURIComponent(ua[1].replace(va," "))]=decodeURIComponent(ua[2].replace(va," "))}function xa(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
|
||||
function B(a,b){b||(b=z);a.prototype=xa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var ya=window.PCjs.Machines||(window.PCjs.Machines={}),A=window.PCjs.Components||(window.PCjs.Components=[])}else ya={},A=[];function za(a,b,c){ya[a]&&b&&(ya[a][b]=c)}function C(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<A.length;b++){var d=A[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
||||
function D(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<A.length;d++)if(c)c==A[d]&&(c=null);else if(!(a!=A[d].type||b&&A[d].id.indexOf(b)))return A[d]}return null}function E(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){u(c.message+" ("+a+")")}return b}
|
||||
function G(a,b){for(var c=H(b.parentNode,"pdp11-control"),d=0;d<c.length;d++)for(var f=c[d].childNodes,g=0;g<f.length;g++){var k=f[g];if(1===k.nodeType){var h=k.getAttribute("class");if(h)for(var l=h.split(" "),m=0;m<l.length;m++)switch(h=l[m],h){case "pdp11-binding":(h=E(k))&&h.binding&&a.H(h.type,h.binding,k,h.value),m=l.length}}}}
|
||||
function H(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var f=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)f.test(a[b].className)&&c.push(a[b]);return c}
|
||||
z.prototype={constructor:z,parent:null,toString:function(){return this.name?this.name:this.id||this.type},H:function(a,b,c){switch(b){case "clear":return this.c[b]||(this.c[b]=c,c.onclick=function(a){return function(){a.c.print&&(a.c.print.value="")}}(this)),!0;case "print":return this.c[b]||(this.va=this.c[b]=c,c.value="",this.G=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
|
||||
this.w=function(a){this.G(a,this.ca)}),!0;default:return!1}},log:function(){},G:function(){},status:function(a){this.G(this.ca+": "+a)},w:function(a,b,c){c=c||this.type;b||u((c?c+": ":"")+a)},P:function(){return this.b.u=!0},O:function(a,b){b&&(this.b.u=!1);return!0}};function Aa(a,b){if(a.b.wa)return a.b.ha&&(a.b.ha=!1),a.b.wa=!1;if(a.b.U)return a.G(a.toString()+" error"),!1;a.b.ha=b;return a.b.ha}function I(a){if(!a.b.U&&(a.b.aa=!0,a.b.aa)){var b=a.la;a.la=null;b&&b()}}
|
||||
function Ba(a,b){b&&(a.b.aa?b():a.la=b);return a.b.aa}var J="undefined"!==typeof ArrayBuffer;function Ca(a){z.call(this,"Panel",a,Ca)}B(Ca);e=Ca.prototype;e.H=function(a,b,c,d){return this.a&&this.a.H(a,b,c,d)||this.f&&this.f.H(a,b,c,d)?!0:this.parent.H.call(this,a,b,c,d)};e.ba=function(a,b,c,d){this.a=a;this.i=b;this.f=c;this.v=d};e.P=function(a,b){b||Da();return!0};e.O=function(){return!0};e.V=function(){};
|
||||
function Da(){for(var a=!1,b=H(document,"pdp11","panel"),c=0;c<b.length;c++){var d=b[c],f=E(d),g;a:{g=f.id;if(void 0!==g)for(var k=void 0,k=0;k<A.length;k++)if(A[k].id===g){g=A[k];break a}g=null}g||(a=!0,g=new Ca(f));G(g,d);a&&I(g)}}x(Da);
|
||||
function K(a,b,c){z.call(this,"Bus",a,K);this.f=b;this.v=c;this.h=a.busWidth||16;this.l=Math.pow(2,this.h);this.s=this.l-1|0;this.g=16>=this.h?10:20>=this.h?12:24>=this.h?14:15;this.i=1<<this.g;this.m=this.i>>2;this.o=this.i-1;this.j=this.l/this.i|0;a=new L;Ea(a,this.v);this.a=Array(this.j);for(b=0;b<this.j;b++)this.a[b]=a;I(this)}B(K);K.prototype.reset=function(){};K.prototype.P=function(a,b){b||this.reset();return!0};
|
||||
function Fa(a,b,c,d){for(var f=b,g=c,k=f>>>a.g;0<g&&k<a.a.length;){var h=a.a[k],l=k*a.i,m=a.i-(f-l);m>g&&(m=g);if(h&&h.size){if(h.type==d){if(f+g<=h.ga)return h.ma+=h.ga-f,h.ga=f,!0;if(f>=h.ga+h.ma){m=h.size-(f-l);m>g&&(m=g);h.ma=f-h.ga+m;f=l+a.i;g-=m;k++;continue}}return Ga(1,f,g)}f=new L(f,m,a.i,d);Ea(f,a.v,h);a.a[k++]=f;f=l+a.i;g-=m}return 0>=g?(a.status(Math.floor(c/1024)+"Kb "+Ha[d]+" at "+("0x"+n(b,4))),!0):Ga(2,b,c)}
|
||||
K.prototype.xa=function(a){return this.a[(a&this.s)>>>this.g].ya(a&this.o,a)};function Ga(a,b,c){u("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Ia;if(J){var Ja=new ArrayBuffer(2);(new DataView(Ja)).setUint16(0,256,!0);Ia=256===(new Uint16Array(Ja))[0]}else Ia=!1;var Ka=Ia;
|
||||
function L(a,b,c,d){this.id=La+=2;this.c=null;this.ga=a;this.ma=b;this.size=c||0;this.type=d||Ma;this.j=d==Na;Ea(this);this.N=this.Oa=!1;if(c)if(J)this.a=new ArrayBuffer(c),this.i=new DataView(this.a,0,c),this.f=new Uint8Array(this.a,0,c),this.l=new Uint16Array(this.a,0,c>>1),this.c=new Int32Array(this.a,0,c>>2),Oa(this,Ka?Pa:Qa);else{this.c=Array(c>>2);for(a=0;a<this.c.length;a++)this.c[a]=0;Oa(this,Ra)}else Oa(this)}var Ma=0,Na=2,Ha=["NONE","RAM","ROM","VID","H/W"],La=0;
|
||||
L.prototype={constructor:L,parent:null,save:function(){var a,b;if(J)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.i.getInt32(b<<2,!0);else a=this.c;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(J)for(b=0;b<a.length;b++)this.i.setInt32(b<<2,a[b],!0);else this.c=a;return this.N=!0}return!1},m:function(){return 255},s:function(){},L:function(a,b){return this.ya(a++,b++)|this.ya(a,b)<<8},ca:function(a,b,c){this.o(a++,b&255,c++);this.o(a,b>>8,c)},F:function(a){return this.c[a>>
|
||||
2]>>>((a&3)<<3)&255},S:function(a){var b=a>>2;a=(a&3)<<3;var c=this.c[b]>>a;return 24>a?c&65535:c&255|(this.c[b+1]&255)<<8},Y:function(a,b){var c=a>>2,d=(a&3)<<3;this.c[c]=this.c[c]&~(255<<d)|b<<d;this.N=!0},fa:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.c[c]=this.c[c]&~(65535<<d)|b<<d:(this.c[c]=this.c[c]&16777215|b<<24,c++,this.c[c]=this.c[c]&-256|b>>8);this.N=!0},B:function(a,b){return this.C(a,b)},K:function(a,b){return this.M(a,b)},W:function(a,b,c){this.j||this.Ma(a,b,c)},$:function(a,b,c){this.j||
|
||||
this.da(a,b,c)},A:function(a){return this.f[a]},D:function(a){return this.f[a]},I:function(a){return this.i.getUint16(a,!0)},R:function(a){return a&1?this.f[a]|this.f[a+1]<<8:this.l[a>>1]},T:function(a,b){this.f[a]=b;this.N=!0},X:function(a,b){this.f[a]=b;this.N=!0},Z:function(a,b){this.i.setUint16(a,b,!0);this.N=!0},ea:function(a,b){a&1?(this.f[a]=b,this.f[a+1]=b>>8):this.l[a>>1]=b;this.N=!0}};function Ea(a,b,c){a.v=b;a.g=a.h=0;c&&((a.g=c.g)&&Sa(a,Ta,!1),(a.h=c.h)&&Ua(a,Ta,!1))}
|
||||
function Ua(a,b,c){c&&a.h||(a.o=!a.j&&b[2]||a.s);if(c||void 0===c)a.Ma=b[2]||a.s,a.da=b[3]||a.ca}function Sa(a,b,c){c&&a.g||(a.ya=b[0]||a.m);if(c||void 0===c)a.C=b[0]||a.m,a.M=b[1]||a.L}function Oa(a,b){b||(b=Va);Sa(a,b,void 0);Ua(a,b,void 0)}var Va=[],Ra=[L.prototype.F,L.prototype.S,L.prototype.Y,L.prototype.fa],Ta=[L.prototype.B,L.prototype.K,L.prototype.W,L.prototype.$];if(J)var Qa=[L.prototype.A,L.prototype.I,L.prototype.T,L.prototype.Z],Pa=[L.prototype.D,L.prototype.R,L.prototype.X,L.prototype.ea];
|
||||
function M(a,b){z.call(this,"CPU",a,M);var c=a.multiplier||1;this.ea=a.cycles||b;this.D=c;this.da=Math.round(this.ea/1E4)/100;this.B=this.da*this.D;this.b.J=!1;this.b.Ha=!1;this.b.Fa=a.autoStart;this.b.Ga=!1;this.b.ja=!1;this.Y=this.C=0;this.Z=a.csStart;this.K=a.csInterval;this.L=a.csStop;this.W=[];this.Qa=this.za.bind(this);I(this)}B(M);var Wa=["power","reset"];e=M.prototype;
|
||||
e.ba=function(a,b,c,d){this.a=a;this.i=b;this.v=d;for(b=0;b<Wa.length;b++)(c=this.c[Wa[b]])&&this.a.H(null,Wa[b],c);this.I=null;a=Xa(a,"autoStart");null!=a&&(this.b.Fa="true"==a?!0:"false"==a?!1:!!a);I(this)};e.reset=function(){};e.save=function(){return null};e.restore=function(){return!1};e.P=function(a,b){if(!b){if(a&&this.restore){Ya(this);if(!this.restore(a))return!1;Za(this)}else this.reset();this.G("No debugger detected")}$a(this);return!0};e.O=function(a){return a?this.save():!0};
|
||||
function ab(a){(a.b.Fa||void 0===a.c.run)&&a.za()}e.Ka=function(){return 0};function Za(a){void 0===a.Z&&(a.Z=0);void 0===a.K&&(a.K=-1);void 0===a.L&&(a.L=-1);a.b.ja=0<=a.Z&&0<a.K;a.b.ja&&(a.Y=0,a.C=a.Z-a.s)}function N(a,b,c,d){a.c[b]&&(void 0===c&&(a.b.U=!0,a.w("Value for "+b+" is invalid"),O(a)),c=!a.b.J||a.b.Ga?n(c,d):"--------".substr(0,d),a.c[b].textContent!=c&&(a.c[b].textContent=c))}
|
||||
e.H=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.c[b]=c;a=!0;break;case "run":this.c[b]=c;c.onclick=function(){var a;if(a=d.a)if(a=d.a,a.b.u)a=!0;else{var b=null,c,h=C(a.id);for(c=0;c<h.length&&(b=h[c],b===a||b.b.aa);c++);if(c==h.length)for(c=0;c<h.length&&(b=h[c],b===a||b.b.u);c++);c==h.length&&(b=a);u("The "+b.type+" component ("+b.id+") is not "+(b.b.aa?"powered yet":"ready yet"+(b.la?" (waiting for notification)":""))+".");a=!1}a&&(d.b.J?O(d):d.za())};a=!0;break;case "speed":this.c[b]=
|
||||
c;a=!0;break;case "setSpeed":this.c[b]=c,c.onclick=function(){P(d,d.D<<1)},c.textContent=this.B.toFixed(2)+"Mhz",a=!0}return a};function bb(a,b,c){a.s+=b;c&&(a.h=a.f=0)}function cb(a,b){var c=1;b&&1<a.D&&a.m&&(c=a.m/a.da);a.Ia=Math.round(1E3/30);a.$=Math.floor(a.ea/30*c);b||(a.M=a.$);a.fa=0}function Q(a){return a.s+a.l+a.h-a.f}function Ya(a){a.m=0;a.Ja=0;a.s=a.l=a.h=a.f=0;Za(a);P(a,1)}
|
||||
function P(a,b){if(void 0!==b){.8>a.m/a.B&&(b=1);a.D=b;var c=a.da*a.D;if(a.B!=c){a.B=c;var c=a.B.toFixed(2)+"Mhz",d=a.c.setSpeed;d&&(d.textContent=c);a.G("target speed: "+c)}}bb(a,a.l);a.l=0;a.j=q();a.o=0;cb(a)}
|
||||
e.za=function(){if(Aa(this,!0)){if(!this.b.J){P(this);this.a&&this.a.start(this.j,Q(this));this.b.J=!0;this.b.Ha=!0;this.I&&this.I.start();var a=this.c.run;a&&(a.textContent="Halt");this.a&&this.a.V(!0)}this.fa>=this.ea&&cb(this,!0);this.R=0;this.X=q();this.o&&(a=this.X-this.o,a>this.Ia&&(this.j+=a,this.j>this.X&&(this.j=this.X)));try{do{for(var b=this.b.ja?1:this.$,c=this.W.length-1;0<=c;c--){var d=this.W[c];0>d[0]||b>d[0]&&(b=d[0])}this.La(b);for(var f=this.h-this.f,a=f,g=this.W.length-1;0<=g;g--){var k=
|
||||
this.W[g];0>k[0]||(k[0]-=a,0>=k[0]&&(k[0]=-1,k[1]()))}this.R+=f;this.l+=f;bb(this,0,!0);a=f;if(this.b.ja){var h=!1;this.Y=this.Y+this.Ka()|0;this.C-=a;0>=this.C&&(this.C+=this.K,h=!0);0<=this.L&&this.L<=Q(this)&&(this.K=this.L=-1,Za(this),O(this),h=!0);h&&this.G(Q(this)+" cycles: checksum="+n(this.Y))}this.M-=f;if(0>=this.M){this.M+=this.$;15<=++this.Ja&&(this.a&&this.a.V(),this.Ja=0);break}}while(this.b.J)}catch(l){O(this);$a(this);this.a&&this.a.stop(q(),Q(this));Aa(this,!1);b=l.stack||l.message;
|
||||
this.b.U=!0;this.w(b);return}b=setTimeout;c=this.Qa;this.o=q();d=this.Ia;this.R&&(d=Math.round(d*this.R/this.$));d=d-(this.o-this.X);if(f=this.o-this.j)this.m=Math.round(this.l/(10*f))/100,864E5<=f&&(this.s=0,P(this));if(0>d||this.m<this.B)-1E3>d&&(this.j-=d),d=0;this.fa+=this.R;this.o+=d;b(c,d)}else $a(this),this.a&&this.a.stop(q(),Q(this))};e.La=function(){return 0};
|
||||
function O(a){a.b.ha&&(a.b.wa=!0);a.h-=a.f;a.f=0;bb(a,a.l);a.l=0;if(a.b.J){a.b.J=!1;a.I&&a.I.stop();var b=a.c.run;b&&(b.textContent="Run")}a.b.ka=void 0}function $a(a){a.a&&a.a.V(void 0)}function db(a){this.Pa=+a.model||1170;M.call(this,a,1E6);this.Aa=eb;Ya(this);this.b.ka=this.b.Na=!1;this.Ba=0;fb(this)}B(db,M);e=db.prototype;e.reset=function(){this.b.J&&O(this);fb(this);Ya(this);this.b.U=!1;this.parent.reset.call(this)};
|
||||
function fb(a){a.oa=0;a.pa=0;a.qa=0;a.ra=0;a.sa=0;a.ta=0;a.na=0;a.ua=0;a.A=0;gb(a,0);a.g=0}e.Ka=function(){var a=this.oa+this.pa+this.qa+this.ra+this.sa+this.ta+this.na|0;return a=a+this.ua+this.A+hb(this)|0};
|
||||
e.save=function(){var a=new R(this);S(a,0,[this.oa,this.pa,this.qa,this.ra,this.sa,this.ta,this.na,this.ua,this.A,hb(this)]);S(a,1,[this.g,this.s,this.D]);for(var b=this.i,c=0,d=[],f=0;f<b.j;f++){var g=b.a[f];if(g.N||g.Oa){d[c++]=f;var k=c++;a:if(g=g.save()){for(var h=0,l=0,m=[];h<g.length;){for(var F=g[h],r=h+1;r<g.length&&g[r]===F;)r++;m[l++]=r-h;m[l++]=F;h=r}if(m.length<g.length){g=m;break a}}d[k]=g}}S(a,2,d);return a.data()};
|
||||
e.restore=function(a){var b=a[0];this.oa=b[0];this.pa=b[1];this.qa=b[2];this.ra=b[3];this.sa=b[4];this.ta=b[5];this.na=b[6];this.ua=b[7]&65535;this.A=b[8]&65535;gb(this,b[9]);b=a[1];this.g=b[0];this.s=b[1];P(this,b[3]);a:{b=this.i;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],f=a[c+1];if(f&&f.length<b.m){for(var g=0,k=Array(b.m),h=0;h<f.length-1;)for(var l=f[h++],m=f[h++];l--;)k[g++]=m;f=k}g=b.a[d];if(!g||!g.restore(f)){u("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
e.H=function(a,b,c){var d=!1;switch(b){case "PC":case "PSW":case "IF":case "SF":case "ZF":case "CF":this.c[b]=c;this.Ba++;d=!0;break;default:d=this.parent.H.call(this,a,b,c)}return d};function hb(a){return a.S&-214|(a.T&128?128:0)|(a.F&255?0:64)|(a.F&256?1:0)}function gb(a,b){a.F=a.T=0;b&1&&(a.F|=256);b&4||(a.T|=1);b&64||(a.F|=255);b&128&&(a.T^=192);a.S=a.S&-726|b&512|2}e.xa=function(a){return this.i.xa(a)};function ib(a){var b=a.xa(a.A);a.A=a.A+1&65535;return b}
|
||||
e.V=function(a){this.Ba&&(a||!this.b.J||this.b.Ga)&&(N(this,"PC",this.A,4),a=hb(this),N(this,"PSW",a,4),N(this,"IF",a&512?1:0,1),N(this,"SF",a&128?1:0,1),N(this,"ZF",a&64?1:0,1),N(this,"CF",a&1?1:0,1));if(a=this.c.speed)a.textContent=this.b.J&&this.m?this.m.toFixed(2)+"Mhz":"Stopped"};
|
||||
e.La=function(a){this.b.ka=!0;this.b.Na=!1;this.b.Ha=!1;this.h=this.f=a;if(this.f&&this.g&255&&this.S&512){for(a=0;8>a&&!(this.g&1<<a);a++);this.g&=~(0>a?255:1<<a);this.S&=-513;this.g&=-257;this.Aa[199|a<<3].call(this)}this.g&256?(this.h-=this.f,this.f=0,a=!1):a=!0;if(a){do this.Aa[ib(this)].call(this);while(0<this.f)}return this.b.ka?this.h-this.f:void 0===this.b.ka?0:-1};x(function(){for(var a=H(document,"pdp11","cpu"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new db(d);G(d,c)}});
|
||||
function T(){this.f-=4}
|
||||
var eb=[T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,
|
||||
T,T,T,T,T,T,T,T,T];function U(a){z.call(this,"ROM",a,U);this.a=null;this.m=a.addr;this.g=a.size;this.o=a.writable;this.h=a.alias;this.j=a.file;this.s=ba(this.j);if(this.j){a=this.j;var b=ca(this.s);"json"!=b&&"hex"!=b&&(a=p()+"/api/v1/dump?file="+this.j+"&format=bytes&decimal=true");var c=this;t(a,null,!0,function(a,b,g){jb(c,a,b,g)})}}B(U);U.prototype.ba=function(a,b,c,d){this.i=b;this.f=c;this.v=d;kb(this)};
|
||||
U.prototype.P=function(){this.l&&(this.v&&this.v.f(this.id,this.m,this.g,this.l),delete this.l);return!0};U.prototype.O=function(){return!0};
|
||||
function jb(a,b,c,d){if(d)a.w("Unable to load system ROM (error "+d+": "+b+")");else{za(a.Ea,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var f=eval("("+c+")"),g=f.bytes,k=f.data;if(g)a.a=g;else if(k)for(a.a=Array(4*k.length),d=c=0;c<k.length;c++)a.a[d++]=k[c]&255,a.a[d++]=k[c]>>8&255,a.a[d++]=k[c]>>16&255,a.a[d++]=k[c]>>24&255;else a.a=f;a.l=f.symbols;if(!a.a.length){u("Empty ROM: "+b);return}if(1==a.a.length){u(a.a[0]);return}}catch(h){a.w("ROM data error: "+h.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.a=Array(b.length),f=0;f<b.length;f++)a.a[f]=aa(b[f]);kb(a)}}
|
||||
function kb(a){if(!Ba(a))if(!a.j)I(a);else if(a.a&&a.i){a.g||(a.g=a.a.length);if(a.a.length!=a.g){var b="ROM size (0x"+n(a.a.length)+") does not match specified size ("+("0x"+n(a.g))+")";a.b.U=!0;a.w(b)}else{b=a.m;if(Fa(a.i,b,a.g,a.o?1:Na)){var c;for(c=0;c<a.a.length;c++){var d=a.i,f=b+c;d.a[(f&d.s)>>>d.g].Ma(f&d.o,a.a[c]&255,f)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.h?b.push(a.h):null!=a.h&&a.h.length&&(b=a.h);for(c=0;c<b.length;c++){for(var g=a,d=b[c],f=g.i,k=g.g,h=[],l=g.m>>>f.g;0<k&&l<f.a.length;)h.push(f.a[l++]),
|
||||
k-=f.i;f=g.i;g=g.g;k=0;for(d>>>=f.g;0<g&&d<f.a.length;){l=h[k++];if(!l)break;f.a[d++]=l;g-=f.i}}delete a.a}}I(a)}}x(function(){for(var a=H(document,"pdp11","rom"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new U(d);G(d,c)}});function lb(a){z.call(this,"RAM",a,lb);this.h=a.addr;this.g=a.size;this.a=!1}B(lb);e=lb.prototype;e.ba=function(a,b,c,d){this.i=b;this.f=c;this.v=d;I(this)};e.P=function(a,b){b||this.reset();return!0};e.O=function(a){return a?this.save():!0};
|
||||
e.reset=function(){!this.a&&this.g&&Fa(this.i,this.h,this.g,1)&&(this.a=!0);this.a||u("No RAM allocated")};e.save=function(){return null};e.restore=function(){return!0};x(function(){for(var a=H(document,"pdp11","ram"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new lb(d);G(d,c)}});function V(a){z.call(this,"Keyboard",a,V);I(this)}B(V);V.prototype.H=function(){return!1};V.prototype.ba=function(a,b,c,d){this.a=a;this.f=c;this.v=d;this.I=null};
|
||||
x(function(){for(var a=H(document,"pdp11","keyboard"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new V(d);G(d,c)}});
|
||||
function mb(a,b,c){z.call(this,"Computer",a,mb);this.b.u=!1;nb(this,b);this.B=Xa(this,"autoPower",a);this.h=0;this.K=a.busWidth||a.buswidth;this.a=W;this.s=null;this.m=this.F=!1;this.L=Xa(this,"url")||"";(Math.random()+.1).toString(36);this.g=ob(this);if(this.f=D("CPU",this.id)){this.v=D("Debugger",this.id);this.i=new K({id:this.Ea+".bus",busWidth:this.K},this.f,this.v);var d,f=C(this.id);if((this.j=D("Panel",this.id))&&this.j.va)for(b=0;b<f.length;b++)d=f[b],d.w=this.j.w,d.G=this.j.G,d.va=this.j.va;
|
||||
this.G("PDP11 v1.24.2\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");for(b=0;b<f.length;b++)d=f[b],d.ba&&d.ba(this,this.i,this.f,this.v);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.o=d:this.a=parseInt(d,10));var g;if(a=Xa(this,"state")||(g=!0,a.state))b=this.C=a,g||(this.m=!0,this.a=W),this.a&&(this.A=new R(this,"1.24.2"),X(this.A)?b=null:delete this.A);!b&&this.a&&(b=pb(this))&&(this.m=!0);if(b){var k=this;t(b,null,
|
||||
!0,function(a,b,c){c?(k.o=null,k.m=!1,k.w("Unable to load machine state from server (error "+c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(k.s=b,k.F=!0);I(k)})}else I(this);this.c.power||(this.B=!0);!c&&this.B&&Y(this,this.ia)}else u("Unable to find CPU component")}B(mb);var W=0;function nb(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){u(d.message+" ("+c+")")}}a.I=b}
|
||||
function Xa(a,b,c){var d=b.toLowerCase(),d=ta[b]||ta[d];void 0===d&&a.I&&(d=a.I[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Y(a,b,c){for(var d=C(a.id),f=0;f<=d.length;f++){var g=f<d.length?d[f]:a;if(!Ba(g)){Ba(g,function(){Y(a,b,c)});return}}b.call(a,c)}
|
||||
function qb(a,b){var c=new R(a,"1.24.2","validate");if(X(c)&&rb(c)){var d=Z(c,"timestamp"),f=b?Z(b,"timestamp"):"unknown";d!=f&&(a.w("Machine state may be out-of-date\n("+d+" vs. "+f+")\nCheck your browser's local storage limits"),b||c.clear())}}e=mb.prototype;
|
||||
e.ia=function(a){void 0===a&&(a=this.a||(this.s?1:W));if(!this.h){this.h++;var b=!1,c=!1;this.D=!1;var d=this.A||new R(this,"1.24.2");if(-1==a)b=!0;else if(a>W){if(X(d,this.s)){this.l=new R(this,"1.24.2","failsafe");X(this.l)&&(sb(this,d),a=2,tb(this.l));S(this.l,"timestamp",ga());ub(this.l);var f=this.a&&!this.m;if(1==a||ha("Click OK to restore the previous PDP11 machine state, or CANCEL to reset the machine.")){if(c=rb(d)){var g=Z(d,"code"),k=Z(d,"data");g&&("ok"==g?X(d,k):("error"==g&&"no machine state"!=
|
||||
k?(this.w("Error: "+k),"unable to verify user"==k&&(v("user",""),this.g=null)):this.G(g+": "+k),tb(d),X(d)?(c=rb(d),f=!0):c=!1))}f&&qb(this,c?d:null)}else 2==a&&d.clear()}else qb(this);delete this.s;delete this.A}f=C(this.id);for(g=0;g<f.length;g++)k=f[g],k!==this&&k!=this.f&&(c=vb(this,k,d,b,c));b=[d,a,c];-1!=a?Y(this,this.Da,b):this.Da(b)}};
|
||||
function vb(a,b,c,d,f){if(!b.b.u){b.b.u=!0;if(b.P){var g=null;f&&((g=Z(c,b.id))||(g=Z(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof g&&(g=null);!b.P(g,d)&&g&&(u("Unable to restore state for "+b.type),a.C&&!a.F?(c.clear(),a.a=W,window&&window.location.reload()):a.D=!0,b.P(null),f=!1)}if(!d&&b.Ca)for(a=b.Ca.split("|"),c=0;c<a.length;c++)b.status(a[c])}return f}
|
||||
e.Da=function(a){var b=a[0],c=0>a[1];a=a[2];this.M=!0;this.b.u=!0;var d=this.c.power;d&&(d.textContent="Shutdown");this.f&&(vb(this,this.f,b,c,a),ab(this.f));this.D&&(sb(this,b),b.clear());!c&&this.l&&(this.l.clear(),delete this.l);this.h=0};
|
||||
function sb(a,b){if(ha("There may be a problem with your PDP11 machine.\n\nTo help us diagnose it, click OK to send this PDP11 machine state to http://www.pcjs.org.")){var c=a.g||"",d=b.toString(),f={app:"PDP11",ver:"1.24.2"};f.url=a.L;f.user=c;f.type="bug";f.data=d;t("http://www.pcjs.org/api/v1/report",f,!0)}}
|
||||
function wb(a,b,c){var d,f="none";if(a.h)return null;a.h--;var g=new R(a,"1.24.2"),k=new R(a,"1.24.2","validate"),h=ga();S(k,"timestamp",h);S(g,"timestamp",h);S(g,"version","1.24.2");S(g,"url",window?window.location.href:null);S(g,"browser",window?window.navigator.userAgent:"");a.f&&a.f.O&&(c&&O(a.f),d=a.f.O(b,c),"object"===typeof d&&S(g,a.f.id,d),c&&(a.f.b.u=!1,!1===d&&(f=null)));for(var h=C(a.id),l=0;l<h.length;l++){var m=h[l];m.b.u&&(m.O&&(d=m.O(b,c),"object"===typeof d&&S(g,m.id,d)),c&&(m.b.u=
|
||||
!1,!1===d&&(f=null)))}f&&(c?(h=d=!1,b?(a.g&&xb(a,a.g,g.toString()),ub(k)&&ub(g)||(f=null,d=h=!0)):a.a&&(d=!0,h=3==a.a),d&&g.clear(h)):f=g.toString());c&&(a.b.u=!1,b=a.c.power)&&(b.textContent="Power");a.h=0;return f}e.reset=function(){this.i&&this.i.reset&&this.i.reset();for(var a=C(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.i&&c.reset&&c.reset()}};e.start=function(a,b){for(var c=C(this.id),d=0;d<c.length;d++){var f=c[d];"CPU"!=f.type&&f!==this&&f.start&&f.start(a,b)}};
|
||||
e.stop=function(a,b){for(var c=C(this.id),d=0;d<c.length;d++){var f=c[d];"CPU"!=f.type&&f!==this&&f.stop&&f.stop(a,b)}};
|
||||
e.H=function(a,b,c){var d=this;switch(b){case "power":return this.c[b]=c,c.onclick=function(){d.h||(d.b.u?wb(d,!1,!0):Y(d,d.ia))},!0;case "reset":return this.c[b]=c,c.onclick=function(){if(d.b.u&&!d.h)if(d.a&&!d.o){var a=ha("Click OK to save changes to this PDP11 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");wb(d,a,!0);!a&&d.C?window&&window.location.reload():d.ia(W)}else d.reset(),d.f&&ab(d.f)},!0;case "save":if(da()){c.parentNode.removeChild(c);break}this.c[b]=c;c.onclick=
|
||||
function(){var a=ob(d,!0);if(a){var b=!!(d.a&&!d.o||d.C),c=wb(d,b);b?xb(d,a,c):d.w("Resume disabled, machine state not saved")}};return!0}return!1};function ob(a,b){var c=a.g;c||(c=ka("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=yb(a,c))||a.w("The user ID is invalid."))):b&&a.w("Browser local storage is not available"));return c}
|
||||
function yb(a,b){a.g=null;var c=t(p()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(v("user",c.data),a.g=c.data)}catch(f){u(f.message+" ("+d+")")}return a.g}function pb(a){var b=null;a.g&&(b=p()+"/api/v1/user?req=load&user="+a.g+"&state="+zb(a,"1.24.2"));return b}
|
||||
function xb(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=zb(a,"1.24.2");d.data=c;b=t(p()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var f=d.indexOf("\n");0<f&&(d=d.substr(0,f));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.w("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.w(c),v("user",""),a.g=null)}}e.V=function(a){this.f&&this.f.V(a);this.j&&this.j.V(a)};
|
||||
x(function(){for(var a=H(document,"pdp11-machine"),b=0;b<a.length;b++)for(var c=a[b],d=E(c),c=H(c,"pdp11","computer"),f=0;f<c.length;f++){var g=c[f],k=E(g),k=new mb(k,d,!0);G(k,g);k.B&&Y(k,k.ia)}});w.show.push(function(){for(var a=H(document,"pdp11","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=D("Computer",c.id))&&c.M&&!c.b.u&&c.ia(-1)}});w.exit.push(function(){for(var a=H(document,"pdp11","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=D("Computer",c.id))&&c.b.u&&wb(c,!(!c.a||c.o),!0)}});
|
||||
function R(a,b,c){this.id=a.id;this.key=zb(a,b,c);this.v=a.v;tb(this,a.Ra)}function zb(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
|
||||
R.prototype={constructor:R,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){tb(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(f){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(f){}b.splice(c,1);c=0}}};
|
||||
function tb(a,b){a[a.id]={};b&&S(a,"parms",b);a.c=!1}function ub(a){var b=!0;if(ja()){var c=JSON.stringify(a[a.id]);v(a.key,c)||(u("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function rb(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){u(c.message||c),b=!1}return b}function X(a,b){return b?(a[a.id]=b,a.c=!0):a.c?!0:ja()&&(b=ka(a.key))?(a[a.id]=b,a.c=!0):!1}function Z(a,b){return a[a.id][b]||null}function S(a,b,c){try{a[a.id][b]=c}catch(d){}}var Ab=0;
|
||||
function Bb(a,b,c,d,f,g){f("Loading "+a+"...");t(a,null,!0,function(k,h,l){l?(h||(h="unable to load "+a+" ("+l+")"),g(h,null)):Cb(h,a,b,c,d,f,g)})}
|
||||
function Cb(a,b,c,d,f,g,k){function h(a,g){if(g)k(g,null);else{if(c){za(c,b,a);var h=b;h&&0>h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+h+'"}';"object"==typeof resources&&(h=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}f||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pdp11$2"));
|
||||
h=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(h=new window.ActiveXObject("Microsoft.XMLDOM"),h.async=!1,h.loadXML(a)):h=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){h=null,a=r.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,h)}}a?f?Db(a,g,h):h(a,null):k("no data"+(b?" for file: "+b:""),null)}
|
||||
function Db(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var f=d[2];b("Loading "+f+"...");t(f,null,!0,function(g,k,h){if(h||!k)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(g=d[3])if(h=k.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=h[0],m,F=/( [a-z]+=)(['"])(.*?)\2/g;m=F.exec(g);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=l&&(k=k.replace(h[0],l))}else{c(a,"missing <"+d[1]+"> in "+f);return}k=k.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],k);Db(a,b,c)}})}else c(a,null)}
|
||||
function Eb(a,b,c,d){function f(a){if(void 0===h){var b=k&&H(k,"machine-warning");h=b&&b[0]||k}h&&(h.innerHTML=fa(a))}function g(a){f("Error: "+a);l&&(--Ab||y(!0));l=!1}var k,h,l=!0;Ab++;ya[a]={};try{if(k=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var F=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=m:r.appendChild(document.createTextNode(m));F.appendChild(r)}c||
|
||||
(c="/versions/pdp11/1.24.2/components.xsl");m=function(d,h){h?Bb(c,null,null,!1,f,function(d,l){if(l)if(za(a,c,d),f("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=h.transformNode(l);m?(k.outerHTML=m,--Ab||y(!0)):g("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(l),(m=m.transformToFragment(h,document))?k.parentNode?(k.parentNode.replaceChild(m,k),--Ab||y(!0)):g("invalid machine element: "+
|
||||
a):g("transformToFragment failed")):g("unable to transform XML: unsupported browser");else g(d)}):g(d)};"<"!=b.charAt(0)?Bb(b,a,d,!0,f,m):Cb(b,null,a,d,!1,f,m)}else g("missing machine element: "+a)}catch(Fb){g(Fb.message)}return l}window.embedPDP11=function(a,b,c,d){y(!1);return Eb(a,b,c,d)};window.enableEvents=y;window.sendEvent=ra;})();
|
||||
Loading…
Reference in a new issue