Compare commits

..
38 changed files with 5 additions and 1813 deletions

7
404.md
View file

@ -1,7 +0,0 @@
---
layout: page
title: Page Not Found
permalink: /404.html
---
{% include random-publication.html text="This is not the page you are looking for. You found a piece of paper instead." %}

View file

@ -1,4 +0,0 @@
source 'https://rubygems.org'
gem 'github-pages'
gem 'jekyll-sitemap'
gem 'jekyll-redirect-from'

View file

@ -1,203 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (4.2.7)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.5.0)
public_suffix (~> 2.0, >= 2.0.2)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.12.2)
colorator (1.1.0)
ethon (0.10.1)
ffi (>= 1.3.0)
execjs (2.7.0)
faraday (0.11.0)
multipart-post (>= 1.2, < 3)
ffi (1.9.17)
forwardable-extended (2.6.0)
gemoji (3.0.0)
github-pages (119)
activesupport (= 4.2.7)
github-pages-health-check (= 1.3.0)
jekyll (= 3.3.1)
jekyll-avatar (= 0.4.2)
jekyll-coffeescript (= 1.0.1)
jekyll-default-layout (= 0.1.4)
jekyll-feed (= 0.8.0)
jekyll-gist (= 1.4.0)
jekyll-github-metadata (= 2.3.1)
jekyll-mentions (= 1.2.0)
jekyll-optional-front-matter (= 0.1.2)
jekyll-paginate (= 1.1.0)
jekyll-readme-index (= 0.0.4)
jekyll-redirect-from (= 0.12.1)
jekyll-relative-links (= 0.2.1)
jekyll-sass-converter (= 1.5.0)
jekyll-seo-tag (= 2.1.0)
jekyll-sitemap (= 0.12.0)
jekyll-swiss (= 0.4.0)
jekyll-theme-architect (= 0.0.3)
jekyll-theme-cayman (= 0.0.3)
jekyll-theme-dinky (= 0.0.3)
jekyll-theme-hacker (= 0.0.3)
jekyll-theme-leap-day (= 0.0.3)
jekyll-theme-merlot (= 0.0.3)
jekyll-theme-midnight (= 0.0.3)
jekyll-theme-minimal (= 0.0.3)
jekyll-theme-modernist (= 0.0.3)
jekyll-theme-primer (= 0.1.7)
jekyll-theme-slate (= 0.0.3)
jekyll-theme-tactile (= 0.0.3)
jekyll-theme-time-machine (= 0.0.3)
jekyll-titles-from-headings (= 0.1.4)
jemoji (= 0.8.0)
kramdown (= 1.11.1)
liquid (= 3.0.6)
listen (= 3.0.6)
mercenary (~> 0.3)
minima (= 2.0.0)
nokogiri (= 1.6.8.1)
rouge (= 1.11.1)
terminal-table (~> 1.4)
github-pages-health-check (1.3.0)
addressable (~> 2.3)
net-dns (~> 0.8)
octokit (~> 4.0)
public_suffix (~> 2.0)
typhoeus (~> 0.7)
html-pipeline (2.5.0)
activesupport (>= 2)
nokogiri (>= 1.4)
i18n (0.8.0)
jekyll (3.3.1)
addressable (~> 2.4)
colorator (~> 1.0)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 1.1)
kramdown (~> 1.3)
liquid (~> 3.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (~> 1.7)
safe_yaml (~> 1.0)
jekyll-avatar (0.4.2)
jekyll (~> 3.0)
jekyll-coffeescript (1.0.1)
coffee-script (~> 2.2)
jekyll-default-layout (0.1.4)
jekyll (~> 3.0)
jekyll-feed (0.8.0)
jekyll (~> 3.3)
jekyll-gist (1.4.0)
octokit (~> 4.2)
jekyll-github-metadata (2.3.1)
jekyll (~> 3.1)
octokit (~> 4.0, != 4.4.0)
jekyll-mentions (1.2.0)
activesupport (~> 4.0)
html-pipeline (~> 2.3)
jekyll (~> 3.0)
jekyll-optional-front-matter (0.1.2)
jekyll (~> 3.0)
jekyll-paginate (1.1.0)
jekyll-readme-index (0.0.4)
jekyll (~> 3.0)
jekyll-redirect-from (0.12.1)
jekyll (~> 3.3)
jekyll-relative-links (0.2.1)
jekyll (~> 3.3)
jekyll-sass-converter (1.5.0)
sass (~> 3.4)
jekyll-seo-tag (2.1.0)
jekyll (~> 3.3)
jekyll-sitemap (0.12.0)
jekyll (~> 3.3)
jekyll-swiss (0.4.0)
jekyll-theme-architect (0.0.3)
jekyll (~> 3.3)
jekyll-theme-cayman (0.0.3)
jekyll (~> 3.3)
jekyll-theme-dinky (0.0.3)
jekyll (~> 3.3)
jekyll-theme-hacker (0.0.3)
jekyll (~> 3.3)
jekyll-theme-leap-day (0.0.3)
jekyll (~> 3.3)
jekyll-theme-merlot (0.0.3)
jekyll (~> 3.3)
jekyll-theme-midnight (0.0.3)
jekyll (~> 3.3)
jekyll-theme-minimal (0.0.3)
jekyll (~> 3.3)
jekyll-theme-modernist (0.0.3)
jekyll (~> 3.3)
jekyll-theme-primer (0.1.7)
jekyll (~> 3.3)
jekyll-theme-slate (0.0.3)
jekyll (~> 3.3)
jekyll-theme-tactile (0.0.3)
jekyll (~> 3.3)
jekyll-theme-time-machine (0.0.3)
jekyll (~> 3.3)
jekyll-titles-from-headings (0.1.4)
jekyll (~> 3.3)
jekyll-watch (1.5.0)
listen (~> 3.0, < 3.1)
jemoji (0.8.0)
activesupport (~> 4.0)
gemoji (~> 3.0)
html-pipeline (~> 2.2)
jekyll (>= 3.0)
json (1.8.6)
kramdown (1.11.1)
liquid (3.0.6)
listen (3.0.6)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9.7)
mercenary (0.3.6)
mini_portile2 (2.1.0)
minima (2.0.0)
minitest (5.10.1)
multipart-post (2.0.0)
net-dns (0.8.0)
nokogiri (1.6.8.1)
mini_portile2 (~> 2.1.0)
octokit (4.6.2)
sawyer (~> 0.8.0, >= 0.5.3)
pathutil (0.14.0)
forwardable-extended (~> 2.6)
public_suffix (2.0.5)
rb-fsevent (0.9.8)
rb-inotify (0.9.8)
ffi (>= 0.5.0)
rouge (1.11.1)
safe_yaml (1.0.4)
sass (3.4.23)
sawyer (0.8.1)
addressable (>= 2.3.5, < 2.6)
faraday (~> 0.8, < 1.0)
terminal-table (1.7.3)
unicode-display_width (~> 1.1.1)
thread_safe (0.3.5)
typhoeus (0.8.0)
ethon (>= 0.8.0)
tzinfo (1.2.2)
thread_safe (~> 0.1)
unicode-display_width (1.1.3)
PLATFORMS
ruby
DEPENDENCIES
github-pages
jekyll-redirect-from
jekyll-sitemap
BUNDLED WITH
1.11.2

View file

@ -1,200 +0,0 @@
# Site settings
source: .
destination: ./docs
title: "PCjs Machines"
email: Jeff@pcjs.org
description: >
Welcome to PCjs, home of the original IBM PC in a web browser.
PCjs provides a variety of computer emulators written in JavaScript, including PCx86 for x86-based machines
(up through the 80386), C1Pjs for the 6502-based Ohio Scientific Challenger 1P, PC8080 for 8080-based machines
such as Space Invaders and the DEC VT100 Terminal, and PDPjs with support for PDP-10 and PDP-11 machines.
PCjs also provides an archive of selected historical PC software, publications, and reference materials.
baseurl: ""
url: "http://www.pcjs.org"
twitter_username: jeffpar
github_username: jeffpar
left_brace: "{"
right_brace: "}"
encoding: UTF-8
# Build settings
exclude: ["index.html", "**/index.html", "bin", "logs", "node_modules", "projects", "src", "tmp", "videos", "web", "**/archive", "**/ecp", "**/c64", "**/private", "**/restricted", "**/src", "**/tmp", "**/unlisted", ".git", ".idea", "/Gemfile", "/Gemfile.lock", "/Gruntfile.js", "/gulpfile.js", "/notes.md", "/server.js", "/*.sh"]
markdown: kramdown
kramdown:
input: GFM
hard_wrap: false
gems:
- jekyll-sitemap
- jekyll-redirect-from
# Custom site settings
pcjs:
domain: pcjs.org # whereas site.url is used for linking purposes, site.pcjs.domain is used for display purposes
version: 1.37.1 # IMPORTANT: keep pcjs.version in sync with package.json:version
compiled: true # by default, the compiled pcjs.version scripts will be used (eg, pcx86.js or pcx86-dbg.js)
c1p_scripts: # if pcjs.compiled is false, the following scripts will be included instead, in the order listed
- /modules/shared/lib/defines.js
- /modules/shared/lib/nodebug.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/reportapi.js
- /modules/shared/lib/strlib.js
- /modules/shared/lib/usrlib.js
- /modules/shared/lib/weblib.js
- /modules/shared/lib/component.js
- /modules/c1pjs/lib/defines.js
- /modules/c1pjs/lib/panel.js
- /modules/c1pjs/lib/cpu.js
- /modules/c1pjs/lib/rom.js
- /modules/c1pjs/lib/ram.js
- /modules/c1pjs/lib/keyboard.js
- /modules/c1pjs/lib/video.js
- /modules/c1pjs/lib/serial.js
- /modules/c1pjs/lib/disk.js
- /modules/c1pjs/lib/debugger.js
- /modules/c1pjs/lib/computer.js
- /modules/shared/lib/embed.js
pcx86_scripts:
- /modules/shared/lib/defines.js
- /modules/shared/lib/nodebug.js
- /modules/shared/lib/diskapi.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/reportapi.js
- /modules/shared/lib/userapi.js
- /modules/shared/lib/keys.js
- /modules/shared/lib/strlib.js
- /modules/shared/lib/usrlib.js
- /modules/shared/lib/weblib.js
- /modules/shared/lib/component.js
- /modules/pcx86/lib/defines.js
- /modules/pcx86/lib/x86.js
- /modules/pcx86/lib/interrupts.js
- /modules/pcx86/lib/messages.js
- /modules/pcx86/lib/panel.js
- /modules/pcx86/lib/bus.js
- /modules/pcx86/lib/memory.js
- /modules/pcx86/lib/cpu.js
- /modules/pcx86/lib/x86seg.js
- /modules/pcx86/lib/x86cpu.js
- /modules/pcx86/lib/x86fpu.js
- /modules/pcx86/lib/x86func.js
- /modules/pcx86/lib/x86help.js
- /modules/pcx86/lib/x86mods.js
- /modules/pcx86/lib/x86ops.js
- /modules/pcx86/lib/x86op0f.js
- /modules/pcx86/lib/chipset.js
- /modules/pcx86/lib/rom.js
- /modules/pcx86/lib/ram.js
- /modules/pcx86/lib/keyboard.js
- /modules/pcx86/lib/video.js
- /modules/pcx86/lib/parallel.js
- /modules/pcx86/lib/serial.js
- /modules/pcx86/lib/mouse.js
- /modules/pcx86/lib/disk.js
- /modules/pcx86/lib/fdc.js
- /modules/pcx86/lib/hdc.js
- /modules/shared/lib/debugger.js
- /modules/pcx86/lib/debugger.js
- /modules/pcx86/lib/computer.js
- /modules/shared/lib/state.js
- /modules/shared/lib/embed.js
- /modules/shared/lib/save.js
pc8080_scripts:
- /modules/shared/lib/defines.js
- /modules/shared/lib/nodebug.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/reportapi.js
- /modules/shared/lib/userapi.js
- /modules/shared/lib/keys.js
- /modules/shared/lib/strlib.js
- /modules/shared/lib/usrlib.js
- /modules/shared/lib/weblib.js
- /modules/shared/lib/component.js
- /modules/pc8080/lib/defines.js
- /modules/pc8080/lib/cpudef.js
- /modules/pc8080/lib/messages.js
- /modules/pc8080/lib/panel.js
- /modules/pc8080/lib/bus.js
- /modules/pc8080/lib/memory.js
- /modules/pc8080/lib/cpu.js
- /modules/pc8080/lib/cpustate.js
- /modules/pc8080/lib/cpuops.js
- /modules/pc8080/lib/chipset.js
- /modules/pc8080/lib/rom.js
- /modules/pc8080/lib/ram.js
- /modules/pc8080/lib/keyboard.js
- /modules/pc8080/lib/video.js
- /modules/pc8080/lib/serial.js
- /modules/shared/lib/debugger.js
- /modules/pc8080/lib/debugger.js
- /modules/pc8080/lib/computer.js
- /modules/shared/lib/state.js
- /modules/shared/lib/embed.js
pdp10_scripts:
- /modules/shared/lib/defines.js
- /modules/shared/lib/nodebug.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/reportapi.js
- /modules/shared/lib/userapi.js
- /modules/shared/lib/keys.js
- /modules/shared/lib/strlib.js
- /modules/shared/lib/usrlib.js
- /modules/shared/lib/weblib.js
- /modules/shared/lib/component.js
- /modules/pdp10/lib/defines.js
- /modules/pdp10/lib/messages.js
- /modules/pdp10/lib/panel.js
- /modules/pdp10/lib/bus.js
- /modules/pdp10/lib/device.js
- /modules/pdp10/lib/memory.js
- /modules/pdp10/lib/cpu.js
- /modules/pdp10/lib/cpustate.js
- /modules/pdp10/lib/cpuops.js
- /modules/pdp10/lib/rom.js
- /modules/pdp10/lib/ram.js
- /modules/pdp10/lib/serial.js
- /modules/shared/lib/debugger.js
- /modules/pdp10/lib/debugger.js
- /modules/pdp10/lib/macro10.js
- /modules/pdp10/lib/computer.js
- /modules/shared/lib/state.js
- /modules/shared/lib/embed.js
pdp11_scripts:
- /modules/shared/lib/defines.js
- /modules/shared/lib/nodebug.js
- /modules/shared/lib/dumpapi.js
- /modules/shared/lib/reportapi.js
- /modules/shared/lib/userapi.js
- /modules/shared/lib/keys.js
- /modules/shared/lib/strlib.js
- /modules/shared/lib/usrlib.js
- /modules/shared/lib/weblib.js
- /modules/shared/lib/component.js
- /modules/pdp11/lib/defines.js
- /modules/pdp11/lib/messages.js
- /modules/pdp11/lib/panel.js
- /modules/pdp11/lib/bus.js
- /modules/pdp11/lib/device.js
- /modules/pdp11/lib/memory.js
- /modules/pdp11/lib/cpu.js
- /modules/pdp11/lib/cpustate.js
- /modules/pdp11/lib/cpuops.js
- /modules/pdp11/lib/rom.js
- /modules/pdp11/lib/ram.js
- /modules/pdp11/lib/keyboard.js
- /modules/pdp11/lib/serial.js
- /modules/pdp11/lib/pc11.js
- /modules/pdp11/lib/disk.js
- /modules/pdp11/lib/drive.js
- /modules/pdp11/lib/rk11.js
- /modules/pdp11/lib/rl11.js
- /modules/pdp11/lib/rx11.js
- /modules/shared/lib/debugger.js
- /modules/pdp11/lib/debugger.js
- /modules/pdp11/lib/computer.js
- /modules/shared/lib/state.js
- /modules/shared/lib/embed.js

View file

@ -1,12 +0,0 @@
developer: true
baseurl: ""
url: "http://localhost:4000"
#
# In the following pcjs section, setting "compiled: false" works only for pages with a single machine,
# because the uncompiled scripts use shared classes that can only be instantiated once on a page (unless
# they're compiled and/or wrapped inside a function).
#
pcjs:
compiled: true
debug: false
private: true

View file

@ -1,11 +0,0 @@
{% capture page_url_without_index_html %}{{ page.url | remove: "/index.html" | remove: "/404.html" }}{% endcapture %}
{% assign splitted_url_parts = page_url_without_index_html | split: '/' %}
{% capture forLoopMaxInt %}{{ splitted_url_parts.size | minus:1 }}{% endcapture %}
{% for i in (1..forLoopMaxInt) %}
{% capture url %}{{ url }}{{ splitted_url_parts[i] }}/{% endcapture %}
{% capture path %}{{ path }}\<a href="/{{ url }}">{{ splitted_url_parts[i] | upcase }}</a>{% endcapture %}
{% if splitted_url_parts[i] == "blog" %}
{% break %}
{% endif %}
{% endfor %}
<h4>Directory of C:\<a href="{{ site.baseurl }}/">PCJS.ORG</a>{{ path }}</h4>

View file

@ -1,61 +0,0 @@
<footer class="site-footer">
<div class="wrapper">
<div class="footer-col-wrapper">
{% comment %}
<div class="footer-col footer-col-1">
<ul class="contact-list">
<li>{{ site.title }}</li>
<li><a href="mailto:{{ site.email }}">{{ site.email }}</a></li>
</ul>
</div>
<div class="footer-col footer-col-2">
<ul class="social-media-list">
{% if site.github_username %}
<li>
<a href="https://github.com/{{ site.github_username }}">
<span class="icon icon--github">
<svg viewBox="0 0 16 16">
<path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/>
</svg>
</span>
<span class="username">{{ site.github_username }}</span>
</a>
</li>
{% endif %}
{% if site.twitter_username %}
<li>
<a href="https://twitter.com/{{ site.twitter_username }}">
<span class="icon icon--twitter">
<svg viewBox="0 0 16 16">
<path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809
c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/>
</svg>
</span>
<span class="username">{{ site.twitter_username }}</span>
</a>
</li>
{% endif %}
</ul>
</div>
{% endcomment %}
<div class="footer-col footer-col-3">
<p class="text">
<span style="float:right"><a href="{{ site.url }}">{{ site.pcjs.domain }}</a> © 2012-2017 by <a href="https://twitter.com/{{ site.twitter_username }}">@{{ site.twitter_username }}</a></span><br/>
<span style="float:right"><a href="http://github.com/jeffpar/pcjs">PCjs Project</a> released under <a href="http://gnu.org/licenses/gpl.html">GPLv3</a></span>
</p>
</div>
</div>
</div>
</footer>

View file

@ -1,10 +0,0 @@
{% unless site.developer %}
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-49658648-1', 'pcjs.org');
ga('send', 'pageview');
</script>
{% endunless %}

View file

@ -1,23 +0,0 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{% if page.title %}PCjs: {{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
<meta name="description" content="{{ site.description }}">
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
<link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
<link rel="apple-touch-icon" sizes="57x57" href="{{ site.baseurl }}/versions/icons/current/pc-icon-57.png">
<link rel="apple-touch-icon" sizes="72x72" href="{{ site.baseurl }}/versions/icons/current/pc-icon-72.png">
<link rel="apple-touch-icon" sizes="76x76" href="{{ site.baseurl }}/versions/icons/current/pc-icon-76.png">
<link rel="apple-touch-icon" sizes="114x114" href="{{ site.baseurl }}/versions/icons/current/pc-icon-114.png">
<link rel="apple-touch-icon" sizes="120x120" href="{{ site.baseurl }}/versions/icons/current/pc-icon-120.png">
<link rel="apple-touch-icon" sizes="144x144" href="{{ site.baseurl }}/versions/icons/current/pc-icon-144.png">
<link rel="apple-touch-icon" sizes="152x152" href="{{ site.baseurl }}/versions/icons/current/pc-icon-152.png">
<link rel="apple-touch-icon" sizes="180x180" href="{{ site.baseurl }}/versions/icons/current/pc-icon-180.png">
<link rel="apple-touch-icon" sizes="192x192" href="{{ site.baseurl }}/versions/icons/current/pc-icon-192.png">
<link rel="apple-touch-icon" href="{{ site.baseurl }}/versions/icons/current/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="{{ site.baseurl }}/versions/icons/current/pc-icon-192.png">
<link rel="shortcut icon" type="image/x-icon" href="{{ site.baseurl }}/versions/icons/current/favicon.ico">
{% include machine-styles.html %}
</head>

View file

@ -1,32 +0,0 @@
<header class="site-header">
<div class="wrapper">
<a class="site-title" href="{{ site.baseurl }}/">{{ site.title }}</a>
<nav class="site-nav">
<a href="#" class="menu-icon">
<svg viewBox="0 0 18 15">
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
</svg>
</a>
<div class="trigger">
{% assign sorted_pages = site.pages | sort:"menu_order" %}
{% for page in sorted_pages %}
{% if page.menu_title %}
<a class="page-link" href="{{ page.url | prepend: site.baseurl }}">{{ page.menu_title }}</a>
{% endif %}
{% endfor %}
</div>
</nav>
</div>
<div class="wrapper">
{% include breadcrumbs.html %}
</div>
</header>

View file

@ -1 +0,0 @@
[<img src="{{ site.baseurl }}{{ include.src }}" width="{{ include.width }}" height="{{ include.height }}"/>]({{ include.link }} "{{ include.alt }}")

View file

@ -1 +0,0 @@
<div class="buildpc" id="{{ include.id }}"></div>

View file

@ -1,22 +0,0 @@
{% comment %}
As discussed in /_posts/2017-01-03-pdp-11-tutorials.md, when a page (usually part of a tutorial)
wants to create a control that tests some feature of a machine, the page will define a machine command
using a Liquid-style include that looks like this:
{% include machine-command.html type='button' label='Try It!' machine='vt100' component='Keyboard' command='sendString' value='Hello World' %}
and which should generate something like this:
<button type="button" onclick="commandMachine(this, false, 'vt100','Keyboard','sendString','Hello World')">Try It!</button>
Alternatively, if the command parameter is the name of a machine script in the page's Front Matter, then this:
{% include machine-command.html type='button' label='Try It!' machine='vt100' component='Keyboard' command='scriptName' %}
should generate something like this:
<button type="button" onclick="commandMachine(this, false, 'vt100','Keyboard','script','...')">Try It!</button>
{% endcomment %}
{% if page.machineScripts[include.command] != nil %}{% assign machine_command = "script" %}{% capture command_value %}{{ page.machineScripts[include.command] | replace:'"','&quot;' | strip }}{% endcapture %}{% else %}{% capture machine_command %}{{ include.command }}{% endcapture %}{% capture command_value %}{{ include.value | replace:'"','&quot;' }}{% endcapture %}{% endif %}{% if include.type == "clickOnce" %}{% assign control_type = "button" %}{% assign control_single = "true" %}{% elsif include.type == "button" %}{% assign control_type = "button" %}{% assign control_single = "false" %}{% else %}{% assign control_type = "unknown" %}{% assign control_single = "false" %}{% endif %}{% if control_type == "button" %}<button type="button" onclick="commandMachine(this,{{ control_single }},'{{ include.machine }}','{{ include.component }}','{{ machine_command }}','{{ command_value }}')">{{ include.label }}</button>{% else %}<!-- Unrecognized machine control type: {{ include.type }} -->{% endif %}

View file

@ -1,178 +0,0 @@
{% comment %}
As discussed in /modules/markout/lib/markout.js, our Node web server recognizes the following machine properties
in the Front Matter of our Markdown documents, for compatibility with the Jekyll web server:
'id' (eg: ibm5150)
'name' (eg: "IBM PC (Model 5150) with Monochrome Display")
'type' (eg: c1p, pcx86, pc8080, pdp10, pdp11)
'debugger' (default: false)
'config' (default: machine.xml)
'template' (default: machine.xsl)
'debug' (default: false; true enables asserts and is much slower)
'uncompiled' (default: false; true is useful for debugging but slower)
'parms' (stringified object that collects additional machine properties listed below)
Note that if you want BACKTRACK support enabled in a machine, both 'debugger' and 'uncompiled' must be true.
Also note that while multiple machines ARE supported on a single page, there are some limitations; for example,
loading two or more machines of the same 'type' but with different 'debug', 'uncompiled', or 'debugger' settings
may not work as desired.
The following optional machine properties will be added to the 'parms' property:
'autoMount' (eg: {"A":{"name":"OS/2 FOOTBALL (v7.68.17)","path":"/disks/pc/os2/misc/football/FOOTBALL-76817.json"}})
'autoPower' (eg: true)
'autoScript' (eg, type Keyboard "$date\r$time\r")
'autoStart' (eg: true)
'autoType' (eg: $date\r$time\r)
'drives' (eg: '[{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pc/fixed/68mb/win95.json"}]')
'resume' (eg: 1)
'state' (eg: state.json)
'commands' (debugger commands, if any)
'messages' (eg: fault)
'connection' (eg: serialPort->vt100a.serialPort)
{% endcomment %}
{% for machine in page.machines %}
{% capture machine_type %}{{ machine.type | remove:"-dbg" }}{% endcapture %}
{% if machine_type == "c1p" %}
{% assign machine_app = "c1pjs" %}
{% elsif machine_type == "pdp10" or machine_type == "pdp11" %}
{% assign machine_app = "pdpjs" %}
{% else %}
{% capture machine_app %}{{ machine_type }}{% endcapture %}
{% endif %}
{% unless machine.config %}
{% assign machine_config = "machine.xml" %}
{% else %}
{% assign machine_config = machine.config %}
{% endunless %}
{% if machine.debugger or machine_config contains "debugger" %}
{% capture machine_file %}{{ machine_type }}-dbg{% endcapture %}
{% assign machine_debugger = true %}
{% else %}
{% capture machine_file %}{{ machine.type }}{% endcapture %}
{% if machine.type != machine_type %}
{% assign machine_debugger = true %}
{% else %}
{% assign machine_debugger = false %}
{% endif %}
{% endif %}
{% capture machine_embed %}embed{{ machine_type | upcase | replace:"X86","x86" }}{% endcapture %}
{% if machine.autoMount == "" %}
{% assign machine_autoMount = "{}" %}
{% else %}
{% capture machine_autoMount %}{{ machine.autoMount|jsonify }}{% endcapture %}
{% endif %}
{% if machine.autoPower != nil %}
{% capture machine_autoPower %},autoPower:{{ machine.autoPower }}{% endcapture %}
{% else %}
{% assign machine_autoPower = "" %}
{% endif %}
{% if machine.autoScript != nil %}
{% capture machine_autoScript %},autoScript:"{{ page.machineScripts[machine.autoScript] | strip_newlines | replace:'"':"\\\\&quot;" | replace:"\r":"\\\\r" | replace:"\n":"\\\\n" | replace:"\t":"\\\\t" | replace:"\x":"\\\\x" }}"{% endcapture %}
{% else %}
{% assign machine_autoScript = "" %}
{% endif %}
{% if machine.autoStart != nil %}
{% capture machine_autoStart %},autoStart:{{ machine.autoStart }}{% endcapture %}
{% else %}
{% assign machine_autoStart = "" %}
{% endif %}
{% if machine.autoType != nil %}
{% capture machine_autoType %},autoType:"{{ machine.autoType | replace:"\r":"\\\\r" | replace:"\n":"\\\\n" | replace:"\t":"\\\\t" | replace:"\x":"\\\\x" }}"{% endcapture %}
{% else %}
{% assign machine_autoType = "" %}
{% endif %}
{% if machine.drives != nil %}
{% if machine.drives == "" %}
{% assign machine_drives = ",drives:[]" %}
{% else %}
{% capture machine_drives %},drives:{{ machine.drives }}{% endcapture %}
{% endif %}
{% else %}
{% assign machine_drives = "" %}
{% endif %}
{% unless machine.template %}
{% assign machine_template = "" %}
{% else %}
{% assign machine_template = machine.template %}
{% endunless %}
{% capture machine_parms %}{{ site.left_brace }}autoMount:{{ machine_autoMount }}{{ machine_autoPower }}{{ machine_autoScript }}{{ machine_autoStart }}{{ machine_autoType }}{{ machine_drives }},resume:"{{ machine.resume }}",state:"{{ machine.state }}",commands:"{{ machine.commands }}",messages:"{{ machine.messages }}",connection:"{{ machine.connection }}"{{ site.right_brace }}{% endcapture %}
{% if site.pcjs.compiled == true and machine.uncompiled != true %}
{% capture page_script %}
<script type="text/javascript" src="{{ site.baseurl }}/versions/{{ machine_app }}/{{ site.pcjs.version }}/{{ machine_file }}.js"></script>{% endcapture %}
{% unless page_scripts contains page_script %}
{{ page_script }}
{% endunless %}
{% capture page_scripts %}{{ page_scripts }}{{ page_script }}{% endcapture %}
{% if machine_template == "" %}
{% capture machine_template %}{{ site.baseurl }}/versions/{{ machine_app }}/{{ site.pcjs.version }}/components.xsl{% endcapture %}
{% endif %}
{% else %}
{% capture machine_file_uncompiled %}{{ machine_file | remove:"-dbg" | append:"-uncompiled" }}{% endcapture %}
{% capture page_script %}
<script type="text/javascript" src="{{ site.baseurl }}/versions/{{ machine_app }}/{{ site.pcjs.version }}/{{ machine_file_uncompiled }}.js"></script>{% endcapture %}
{% unless page_scripts contains page_script %}
{{ page_script }}
{% endunless %}
{% capture page_scripts %}{{ page_scripts }}{{ page_script }}{% endcapture %}
{% if machine_template == "" %}
{% capture machine_template %}{{ site.baseurl }}/versions/{{ machine_app }}/{{ site.pcjs.version }}/components.xsl{% endcapture %}
{% endif %}
{% comment %}
The following approach worked well before we converted most of the code to ES6 classes. Unfortunately, ES6 classes
don't coexist well with the conditional Node require() statements inside the individual scripts. Since we were already
stripping all the Node-related code from the scripts to build monolithic scripts that we could feed into the Closure
Compiler, we have simply moved those monolithic scripts from the /tmp folder to the /versions folder, with "-uncompiled"
suffixes. And since they are now checked in alongside the compiled files, there's the added benefit that we can always
reference them from source maps.
So, the following template code is no longer of any use, but we'll leave it here for historical reference. Note that
our Node web server still serves up individual scripts, because it has the ability to strip all Node references from the
scripts before delivering them to the web browser. But that's not really feasible in the Jekyll environment.
{% if machine_type == "c1p" %}{% assign array_scripts = site.pcjs.c1p_scripts %}{% endif %}
{% if machine_type == "pcx86" %}{% assign array_scripts = site.pcjs.pcx86_scripts %}{% endif %}
{% if machine_type == "pc8080" %}{% assign array_scripts = site.pcjs.pc8080_scripts %}{% endif %}
{% if machine_type == "pdp10" %}{% assign array_scripts = site.pcjs.pdp10_scripts %}{% endif %}
{% if machine_type == "pdp11" %}{% assign array_scripts = site.pcjs.pdp11_scripts %}{% endif %}
{% for script in array_scripts %}
{% if script != "/modules/shared/lib/nodebug.js" or machine.debug != true and site.pcjs.debug != true %}
{% capture page_script %}<script type="text/javascript" src="{{ site.baseurl }}{{ script }}"></script>{% endcapture %}
{% unless page_scripts contains page_script %}
{{ page_script }}
{% if script contains "shared/lib/defines.js" %}
{% if site.pcjs.private %}
{{ page_script | replace:"defines.js","private.js" }}
{% endif %}
{% endif %}
{% if script contains "js/lib/defines.js" %}
{% if machine_debugger != true %}
{{ page_script | replace:"defines.js","nodebugger.js" }}
{% endif %}
{% endif %}
{% endunless %}
{% capture page_scripts %}{{ page_scripts }}{{ page_script }}{% endcapture %}
{% endif %}
{% endfor %}
{% if machine_template == "" %}
{% if machine_app != "c1pjs" %}
{% capture machine_template %}{{ site.baseurl }}/modules/shared/templates/components.xsl{% endcapture %}
{% else %}
{% capture machine_template %}{{ site.baseurl }}/modules/{{ machine_app }}/templates/components.xsl{% endcapture %}
{% endif %}
{% endif %}
{% endcomment %}
{% endif %}
<script type="text/javascript">{{ machine_embed }}('{{ machine.id }}','{{ machine_config }}','{{ machine_template }}','{{ machine_parms }}');</script>
{% if machine.sticky == "top" %}
<script type="text/javascript" src="{{ site.baseurl }}/modules/shared/lib/sticky.js"></script>
<script type="text/javascript">addStickyMachine('{{ machine.id }}');</script>
{% endif %}
{% if page.build %}
<script type="text/javascript" src="{{ site.baseurl }}/modules/build/lib/build.js"></script>
<script type="text/javascript">buildPC("{{ page.build }}");</script>
{% endif %}
{% endfor %}

View file

@ -1,23 +0,0 @@
{% for machine in page.machines %}
{% capture machine_type %}{{ machine.type | remove:"-dbg" }}{% endcapture %}
{% if machine_type == "c1p" %}
{% assign machine_app = "c1pjs" %}
{% elsif machine_type == "pdp10" or machine_type == "pdp11" %}
{% assign machine_app = "pdpjs" %}
{% else %}
{% capture machine_app %}{{ machine_type }}{% endcapture %}
{% endif %}
{% unless site.pcjs.compiled == true and machine.uncompiled != true %}
{% if machine_type == "c1p" %}
{% capture machine_style %}{{ site.baseurl }}/modules/c1pjs/templates/components.css{% endcapture %}
{% else %}
{% capture machine_style %}{{ site.baseurl }}/modules/shared/templates/components.css{% endcapture %}
{% endif %}
{% else %}
{% capture machine_style %}{{ site.baseurl }}/versions/{{ machine_app }}/{{ site.pcjs.version }}/components.css{% endcapture %}
{% endunless %}
{% unless machine_styles contains machine_style %}
<link rel="stylesheet" type="text/css" href="{{ machine_style }}">
{% endunless %}
{% capture machine_styles %}{{ machine_styles }}{{ machine_style }}{% endcapture %}
{% endfor %}

View file

@ -1,17 +0,0 @@
<div class="machine" id="{{ include.id }}">
{% assign machine_name = "PCjs Machine" %}
{% for machine in page.machines %}
{% if include.id == machine.id %}
{% if machine.name %}
{% assign machine_name = machine.name %}
{% break %}
{% endif %}
{% if machine.type %}
{% capture machine_name %}{{ machine.type | upcase | replace:"X86","x86" }} Machine{% endcapture %}
{% break %}
{% endif %}
{% endif %}
{% endfor %}
[{{ machine_name }}]
</div>
<p id="{{ include.id }}.footer"></p>

View file

@ -1,8 +0,0 @@
{% comment %}
Used by pages like the one in /api/v1/dump/ to simulate a client-side API.
{% endcomment %}
{% for script in page.scripts %}
<script type="text/javascript" src="{{ site.baseurl }}{{ script }}"></script>
{% endfor %}

View file

@ -1,42 +0,0 @@
{% assign random_id = "random" %}
<div id="{{ random_id }}"></div>
<script id="randomize" type="text/javascript">
(function() {
var p = document.getElementById('{{ random_id }}');
if (p) {
var mags = ['BYTE-1975-11:98',
'MSJ-1986-10:34', 'MSJ-1987-05:90',
'PCTJ-1983-07:210', 'PCTJ-1983-09:224', 'PCTJ-1983-11:238',
'PCTJ-1984-01:214', 'PCTJ-1984-02:206', 'PCTJ-1984-03:216', 'PCTJ-1984-04:232',
'PCTJ-1984-05:234', 'PCTJ-1984-06:230', 'PCTJ-1984-07:210', 'PCTJ-1984-08:214',
'PCTJ-1984-09:215', 'PCTJ-1984-10:226', 'PCTJ-1984-11:228', 'PCTJ-1984-12:240',
'PCTJ-1985-01:214', 'PCTJ-1985-02:194', 'PCTJ-1985-03:202', 'PCTJ-1985-04:204',
'PCTJ-1985-05:244', 'PCTJ-1985-06:216', 'PCTJ-1985-07:184', 'PCTJ-1985-08:200',
'PCTJ-1985-09:196', 'PCTJ-1985-10:204', 'PCTJ-1985-11:220', 'PCTJ-1985-12:218',
'PCTJ-1986-01:212', 'PCTJ-1986-02:214', 'PCTJ-1986-03:220', 'PCTJ-1986-04:220',
'PCTJ-1986-05:222', 'PCTJ-1986-06:222', 'PCTJ-1986-07:198', 'PCTJ-1986-08:212',
'PCTJ-1986-09:230', 'PCTJ-1986-10:228', 'PCTJ-1986-11:228', 'PCTJ-1986-12:232',
'PCTJ-1987-01:216', 'PCTJ-1987-02:222', 'PCTJ-1987-03:214', 'PCTJ-1987-04:218',
'PCTJ-1987-05:240', 'PCTJ-1987-06:236', 'PCTJ-1987-07:230', 'PCTJ-1987-08:250',
'PCTJ-1987-09:252', 'PCTJ-1987-10:231', 'PCTJ-1987-11:263', 'PCTJ-1987-12:242',
'PCTJ-1988-01:200', 'PCTJ-1988-02:200', 'PCTJ-1988-03:182',
'PCTJ-1988-05:196', 'PCTJ-1988-06:180', 'PCTJ-1988-07:164', 'PCTJ-1988-08:166',
'PCTJ-1988-09:174', 'PCTJ-1988-10:170', 'PCTJ-1988-11:176', 'PCTJ-1988-12:168',
'PCTJ-1989-04:148'
];
var p2 = document.createElement('p');
p2.appendChild(document.createTextNode('{{ include.text }}'));
var div1 = document.createElement('div'); div1.setAttribute('class', 'common-image-gallery');
var div2 = document.createElement('div'); div2.setAttribute('class', 'common-image-frame'); div1.appendChild(div2);
var div3 = document.createElement('div'); div3.setAttribute('class', 'common-image-link'); div2.appendChild(div3);
var mag = mags[Math.floor(Math.random() * mags.length)];
var parts = mag.split(':'), issue = parts[0], page = Math.floor(Math.random() * parseInt(parts[1])) + 1;
parts = mag.split('-');
var name = parts[0].toLowerCase();
var a = document.createElement('a'); a.setAttribute('href', '/pubs/pc/magazines/' + name + '/' + issue + '/#page-' + page); div3.appendChild(a);
var img = document.createElement('img'); img.setAttribute('src', 'http://archive.pcjs.org/pubs/pc/magazines/' + name + '/' + issue + '/thumbs/' + issue + ' ' + page + '.jpeg'); img.setAttribute('width', '200'); a.appendChild(img);
p.parentNode.insertBefore(p2, p.nextSibling);
p2.parentNode.insertBefore(div1, p2.nextSibling)
}
})();
</script>

View file

@ -1,16 +0,0 @@
{% assign include_width = "" %}
{% assign include_height = "" %}
{% if include.width %}
{% capture include_width %} width="{{ include.width }}"{% endcapture %}
{% endif %}
{% if include.height %}
{% capture include_height %} height="{{ include.height }}"{% endcapture %}
{% endif %}
<div class="screenshot-frame">
<div class="screenshot-image">
<a href="{{ site.baseurl }}{{ include.link }}">
<img src="{{ site.baseurl }}{{ include.src }}"{{ include_width }}{{ include_height }} alt="{{ include.title }}"/>
</a>
</div>
<span class="screenshot-label">{{ include.title }}</span>
</div>

View file

@ -1,26 +0,0 @@
---
layout: default
---
<div class="home">
{{ content }}
<h1 class="page-heading">Posts</h1>
<ul class="post-list">
{% for post in site.posts %}
<li>
<span class="post-meta">{{ post.date | date: "%b %-d, %Y" }}</span>
<h2>
<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
</h2>
{{ post.excerpt | replace:'</p>','...</p>'}}
</li>
{% endfor %}
</ul>
<p class="rss-subscribe">subscribe <a href="{{ "/feed.xml" | prepend: site.baseurl }}">via RSS</a></p>
</div>

View file

@ -1,26 +0,0 @@
<!DOCTYPE html>
<html lang="en-US">
{% include head.html %}
<body>
{% include header.html %}
<div class="page-content">
<div class="wrapper">
{{ content }}
</div>
</div>
{% include footer.html %}
{% include machine-engines.html %}
{% include page-scripts.html %}
{% include google-analytics.html %}
</body>
</html>

View file

@ -1,16 +0,0 @@
---
layout: default
---
<div class="post">
{% if page.display_title %}
<header class="post-header">
<h1 class="post-title">{{ page.title }}</h1>
</header>
{% endif %}
<article class="post-content">
{{ content }}
</article>
</div>

View file

@ -1,15 +0,0 @@
---
layout: default
---
<div class="post">
<header class="post-header">
<h1 class="post-title">{{ page.title }}</h1>
<p class="post-meta">{{ page.date | date: "%b %-d, %Y" }}{% if page.author %} • {{ page.author }}{% endif %}{% if page.meta %} • {{ page.meta }}{% endif %}</p>
</header>
<article class="post-content">
{{ content }}
</article>
</div>

View file

@ -1,78 +0,0 @@
<!DOCTYPE html>
<html>
{% include head.html %}
<body>
{% include header.html %}
<div class="page-content">
<div class="wrapper">
{{ content }}
<div style="width:680px;margin-left:auto;margin-right:auto;">
<div style="float:left;margin-top:350px;margin-right:8px;">
<button id="prevPDF" style="font-size:large;">&lt;</button>
</div>
<div style="float:left;">
<iframe id="framePDF" src="" width="550" height="800"></iframe>
</div>
<div style="float:left;margin-top:350px;margin-left:8px;">
<button id="nextPDF" style="font-size:large;">&gt;</button>
</div>
</div>
</div>
</div>
{% include footer.html %}
<script id="initFrame" type="text/javascript">
(function() {
var aParms = {};
var sParms = window.location.search.substr(1);
var match, pl = /\+/g, search = /([^&=]+)=?([^&]*)/g;
var decode = function(s) { return decodeURIComponent(s.replace(pl, " ")); };
while ((match = search.exec(sParms))) aParms[decode(match[1])] = decode(match[2]);
var pdf = aParms['url'];
var curPage = parseInt(aParms['page'], 10) || 1;
var totalPages = parseInt(aParms['total'], 10) || 999;
var frame = document.getElementById('framePDF');
if (pdf && frame) {
pdf = pdf.replace('/archive/', '/');
var i = pdf.indexOf("/pages/");
if (i > 0) {
var sReturnLink = pdf.substr(0, i+1);
var sReturnPath = sReturnLink.slice(0, -1).toUpperCase().replace(/\//g, '\\');
var e = document.getElementById('returnLink');
if (e) e.setAttribute('href', sReturnLink);
e = document.getElementById('returnPath');
if (e) e.textContent = sReturnPath;
}
i = pdf.indexOf('%20');
if (i < 0) i = pdf.indexOf(' ');
if (i > 0) pdf = pdf.substr(0, i);
var setPage = function(page) {
frame.setAttribute('src', 'https://s3-us-west-2.amazonaws.com/archive.pcjs.org' + pdf + ' ' + curPage + '.pdf');
};
setPage(curPage);
var buttonPrev = document.getElementById('prevPDF');
if (buttonPrev) {
buttonPrev.onclick = function() {
if (curPage > 1) setPage(--curPage);
};
}
var buttonNext = document.getElementById('nextPDF');
if (buttonNext) {
buttonNext.onclick = function() {
if (curPage < totalPages) setPage(++curPage);
};
}
}
})();
</script>
{% include google-analytics.html %}
</body>
</html>

View file

@ -47,7 +47,7 @@ want to send some serial data to a machine:
{% include machine-command.html type='button' label='Try It!' machine='test1170' component='SerialPort' command='receiveData' value='HELP\r' %}
{% endraw %}
which should translate into a control that looks like this:
which should translate into a control that looks like:
<button type="button" onclick="commandMachine('test1170','SerialPort','receiveData','HELP\r')">Try It!</button>

View file

@ -1,185 +0,0 @@
/**
* Reset some basic elements
*/
body, h1, h2, h3, h4, h5, h6,
p, blockquote, pre,
dl, dd, ol, ul, figure {
margin: 0;
padding: 0;
}
/**
* Basic styling
*/
body {
font-family: $base-font-family;
font-size: $base-font-size;
line-height: $base-line-height;
font-weight: 300;
color: $text-color;
background-color: $background-color;
-webkit-text-size-adjust: 100%;
}
/**
* Set `margin-bottom` to maintain vertical rhythm
*/
h1, h2, h3, h4, h5, h6,
p, blockquote, pre,
ul, ol, dl, figure,
%vertical-rhythm {
margin-bottom: $spacing-unit / 2;
}
/**
* Images
*/
img {
max-width: 100%;
vertical-align: middle;
}
/**
* Figures
*/
figure > img {
display: block;
}
figcaption {
font-size: $small-font-size;
}
/**
* Lists
*/
ul, ol {
margin-left: $spacing-unit;
}
li {
> ul,
> ol {
margin-bottom: 0;
}
}
/**
* Headings
*/
h1, h2, h3, h4, h5, h6 {
font-weight: 300;
}
/**
* Links
*/
a {
color: $brand-color;
text-decoration: none;
&:visited {
color: darken($brand-color, 15%);
}
&:hover {
color: $text-color;
text-decoration: underline;
}
}
/**
* Blockquotes
*/
blockquote {
color: $grey-color;
border-left: 4px solid $grey-color-light;
padding-left: $spacing-unit / 2;
padding-right: $spacing-unit / 2;
padding-bottom: $spacing-unit / 2;
margin-bottom: 0;
text-align: justify;
/* font-size: 18px; */
/* letter-spacing: -1px; */
/* font-style: italic; */
> :last-child {
margin-bottom: 0;
}
}
/**
* Code formatting
*/
pre,
code {
font-size: 15px;
border: 1px solid $grey-color-light;
border-radius: 3px;
background-color: #eef;
}
code {
padding: 1px 5px;
}
pre {
padding: 8px 12px;
overflow-x: scroll;
white-space: pre-wrap;
> code {
border: 0;
padding-right: 0;
padding-left: 0;
}
}
/**
* Wrapper
*/
.wrapper {
/* max-width: -webkit-calc(800px - (#{$spacing-unit} * 2)); */
/* max-width: calc(800px - (#{$spacing-unit} * 2)); */
margin-right: auto;
margin-left: auto;
padding-right: $spacing-unit;
padding-left: $spacing-unit;
@extend %clearfix;
@include media-query($on-laptop) {
/* max-width: -webkit-calc(800px - (#{$spacing-unit})); */
/* max-width: calc(800px - (#{$spacing-unit})); */
padding-right: $spacing-unit / 2;
padding-left: $spacing-unit / 2;
}
}
/**
* Clearfix
*/
%clearfix {
&:after {
content: "";
display: table;
clear: both;
}
}
/**
* Icons
*/
.icon {
> svg {
display: inline-block;
width: 16px;
height: 16px;
vertical-align: middle;
path {
fill: $grey-color;
}
}
}

View file

@ -1,270 +0,0 @@
/**
* Site header
*/
.site-header {
border-top: 5px solid $grey-color-dark;
border-bottom: 1px solid $grey-color-light;
min-height: 56px;
// Positioning context for the mobile navigation icon
position: relative;
}
.site-title {
font-size: 26px;
line-height: 56px;
letter-spacing: -1px;
margin-bottom: 0;
float: left;
&,
&:visited {
color: $grey-color-dark;
}
}
.site-nav {
float: right;
line-height: 56px;
.menu-icon {
display: none;
}
.page-link {
color: $text-color;
line-height: $base-line-height;
// Gaps between nav items, but not on the first one
&:not(:first-child) {
margin-left: 20px;
}
}
@include media-query($on-palm) {
position: absolute;
top: 9px;
right: 30px;
background-color: $background-color;
border: 1px solid $grey-color-light;
border-radius: 5px;
text-align: right;
.menu-icon {
display: block;
float: right;
width: 36px;
height: 26px;
line-height: 0;
padding-top: 10px;
text-align: center;
> svg {
width: 18px;
height: 15px;
path {
fill: $grey-color-dark;
}
}
}
.trigger {
clear: both;
display: none;
}
&:hover .trigger {
display: block;
padding-bottom: 5px;
}
.page-link {
display: block;
padding: 5px 10px;
}
}
}
/**
* Site footer
*/
.site-footer {
border-top: 1px solid $grey-color-light;
padding: $spacing-unit 0;
}
.footer-heading {
font-size: 18px;
margin-bottom: $spacing-unit / 2;
}
.contact-list,
.social-media-list {
list-style: none;
margin-left: 0;
}
.footer-col-wrapper {
font-size: 15px;
color: $grey-color;
margin-left: -$spacing-unit / 2;
@extend %clearfix;
}
.footer-col {
float: left;
margin-bottom: $spacing-unit / 2;
padding-left: $spacing-unit / 2;
}
.footer-col-1 {
width: -webkit-calc(40% - (#{$spacing-unit} / 2));
width: calc(40% - (#{$spacing-unit} / 2));
}
.footer-col-2 {
width: -webkit-calc(20% - (#{$spacing-unit} / 2));
width: calc(20% - (#{$spacing-unit} / 2));
}
.footer-col-3 {
width: -webkit-calc(100% - (#{$spacing-unit} / 2));
width: calc(100% - (#{$spacing-unit} / 2));
}
@include media-query($on-laptop) {
.footer-col-1,
.footer-col-2 {
width: -webkit-calc(50% - (#{$spacing-unit} / 2));
width: calc(50% - (#{$spacing-unit} / 2));
}
.footer-col-3 {
width: -webkit-calc(100% - (#{$spacing-unit} / 2));
width: calc(100% - (#{$spacing-unit} / 2));
}
}
@include media-query($on-palm) {
.footer-col {
float: none;
width: -webkit-calc(100% - (#{$spacing-unit} / 2));
width: calc(100% - (#{$spacing-unit} / 2));
}
}
/**
* Page content
*/
.page-content {
padding: $spacing-unit 0;
}
.page-heading {
font-size: 20px;
}
.post-list {
margin-left: 0;
list-style: none;
> li {
margin-bottom: $spacing-unit;
}
}
.post-meta {
font-size: $small-font-size;
color: $grey-color;
}
.post-link {
display: block;
font-size: 24px;
}
/**
* Posts
*/
.post-header {
margin-bottom: $spacing-unit;
}
.post-title {
font-size: 42px;
letter-spacing: -1px;
line-height: 1;
@include media-query($on-laptop) {
font-size: 36px;
}
}
.post-content {
margin-bottom: $spacing-unit;
h2 {
font-size: 32px;
@include media-query($on-laptop) {
font-size: 28px;
}
}
h3 {
font-size: 26px;
@include media-query($on-laptop) {
font-size: 22px;
}
}
h4 {
font-size: 20px;
@include media-query($on-laptop) {
font-size: 18px;
}
}
}
/**
* PCjs-specific styles
*/
.machine {
margin-bottom: 16px;
}
.machine-floating {
position: relative;
z-index: auto;
background-color: transparent;
padding-right: 0;
}
.machine-sticky {
position: fixed !important;
z-index: 1 !important;
background-color: #ffffff !important;
padding-right: $spacing-unit !important;
top: 0 !important;
@include media-query($on-laptop) {
padding-right: $spacing-unit / 2 !important;
}
}
.screenshot-frame {
display: inline-block;
margin: 8px;
text-align: center;
}
.screenshot-image {
padding: 5px;
border: 1px solid black;
border-radius: 5px;
background-color: #FAEBD7;
}
.screenshot-label {
font-size: x-small;
}
.pcjs-description, .pcjs-status {
line-height: 2.8em !important;
}

View file

@ -1,68 +0,0 @@
/**
* Syntax highlighting styles
*/
.highlight {
// background: #fff;
@extend %vertical-rhythm;
.c { color: #998; font-style: italic } // Comment
.err { color: #a61717; background-color: #e3d2d2 } // Error
.k { font-weight: bold } // Keyword
.o { font-weight: bold } // Operator
.cm { color: #998; font-style: italic } // Comment.Multiline
.cp { color: #999; font-weight: bold } // Comment.Preproc
.c1 { color: #998; font-style: italic } // Comment.Single
.cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special
.gd { color: #000; background-color: #fdd } // Generic.Deleted
.gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
.ge { font-style: italic } // Generic.Emph
.gr { color: #a00 } // Generic.Error
.gh { color: #999 } // Generic.Heading
.gi { color: #000; background-color: #dfd } // Generic.Inserted
.gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
.go { color: #888 } // Generic.Output
.gp { color: #555 } // Generic.Prompt
.gs { font-weight: bold } // Generic.Strong
.gu { color: #aaa } // Generic.Subheading
.gt { color: #a00 } // Generic.Traceback
.kc { font-weight: bold } // Keyword.Constant
.kd { font-weight: bold } // Keyword.Declaration
.kp { font-weight: bold } // Keyword.Pseudo
.kr { font-weight: bold } // Keyword.Reserved
.kt { color: #458; font-weight: bold } // Keyword.Type
.m { color: #099 } // Literal.Number
.s { color: #d14 } // Literal.String
.na { color: #008080 } // Name.Attribute
.nb { color: #0086B3 } // Name.Builtin
.nc { color: #458; font-weight: bold } // Name.Class
.no { color: #008080 } // Name.Constant
.ni { color: #800080 } // Name.Entity
.ne { color: #900; font-weight: bold } // Name.Exception
.nf { color: #900; font-weight: bold } // Name.Function
.nn { color: #555 } // Name.Namespace
.nt { color: #000080 } // Name.Tag
.nv { color: #008080 } // Name.Variable
.ow { font-weight: bold } // Operator.Word
.w { color: #bbb } // Text.Whitespace
.mf { color: #099 } // Literal.Number.Float
.mh { color: #099 } // Literal.Number.Hex
.mi { color: #099 } // Literal.Number.Integer
.mo { color: #099 } // Literal.Number.Oct
.sb { color: #d14 } // Literal.String.Backtick
.sc { color: #d14 } // Literal.String.Char
.sd { color: #d14 } // Literal.String.Doc
.s2 { color: #d14 } // Literal.String.Double
.se { color: #d14 } // Literal.String.Escape
.sh { color: #d14 } // Literal.String.Heredoc
.si { color: #d14 } // Literal.String.Interpol
.sx { color: #d14 } // Literal.String.Other
.sr { color: #009926 } // Literal.String.Regex
.s1 { color: #d14 } // Literal.String.Single
.ss { color: #990073 } // Literal.String.Symbol
.bp { color: #999 } // Name.Builtin.Pseudo
.vc { color: #008080 } // Name.Variable.Class
.vg { color: #008080 } // Name.Variable.Global
.vi { color: #008080 } // Name.Variable.Instance
.il { color: #099 } // Literal.Number.Integer.Long
.lineno { color: #ccc; display:inline-block; padding: 0 5px; border-right:1px solid #ccc; }
}

1
archive/.gitignore vendored
View file

@ -1 +0,0 @@
!*.html

View file

@ -1,72 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width initial-scale=1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>PCjs Machines</title>
<meta name="description" content="Welcome to PCjs, home of the original IBM PC in a web browser. PCjs provides a variety of computer emulators written in JavaScript, including PCx86 for x86-based machines (up through the 80386), C1Pjs for the 6502-based Ohio Scientific Challenger 1P, PC8080 for 8080-based machines such as Space Invaders and the DEC VT100 Terminal, and PDPjs, a PDP-11 emulator for the PDP-11/20, PDP-11/45, and PDP-11/70. PCjs also provides an archive of selected historical PC software, publications, and reference materials.">
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="http://www.pcjs.org/css/main.css">
<link rel="apple-touch-icon" sizes="57x57" href="http://www.pcjs.org/versions/icons/current/pc-icon-57.png">
<link rel="apple-touch-icon" sizes="72x72" href="http://www.pcjs.org/versions/icons/current/pc-icon-72.png">
<link rel="apple-touch-icon" sizes="76x76" href="http://www.pcjs.org/versions/icons/current/pc-icon-76.png">
<link rel="apple-touch-icon" sizes="114x114" href="http://www.pcjs.org/versions/icons/current/pc-icon-114.png">
<link rel="apple-touch-icon" sizes="120x120" href="http://www.pcjs.org/versions/icons/current/pc-icon-120.png">
<link rel="apple-touch-icon" sizes="144x144" href="http://www.pcjs.org/versions/icons/current/pc-icon-144.png">
<link rel="apple-touch-icon" sizes="152x152" href="http://www.pcjs.org/versions/icons/current/pc-icon-152.png">
<link rel="apple-touch-icon" sizes="180x180" href="http://www.pcjs.org/versions/icons/current/pc-icon-180.png">
<link rel="apple-touch-icon" sizes="192x192" href="http://www.pcjs.org/versions/icons/current/pc-icon-192.png">
<link rel="apple-touch-icon" href="http://www.pcjs.org/versions/icons/current/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="http://www.pcjs.org/versions/icons/current/pc-icon-192.png">
<link rel="shortcut icon" type="image/x-icon" href="http://www.pcjs.org/versions/icons/current/favicon.ico">
</head>
<body>
<header class="site-header">
<div class="wrapper">
<a class="site-title" href="http://www.pcjs.org/">PCjs Machines</a>
<nav class="site-nav">
<a href="#" class="menu-icon">
<svg viewBox="0 0 18 15">
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
</svg>
</a>
<div class="trigger">
<a class="page-link" href="http://www.pcjs.org/blog/">Blog</a>
<a class="page-link" href="http://www.pcjs.org/devices/">Devices</a>
<a class="page-link" href="http://www.pcjs.org/docs/">Docs</a>
<a class="page-link" href="http://www.pcjs.org/apps/">Software</a>
<a class="page-link" href="http://www.pcjs.org/docs/about/">About</a>
</div>
</nav>
</div>
<div class="wrapper">
<h4>Directory of C:\<a href="http://archive.pcjs.org/">ARCHIVE</a>.<a href="http://www.pcjs.org/">PCJS.ORG</a></h4>
</div>
</header>
<div class="page-content">
<div class="wrapper">
<div class="post">
<article class="post-content">
<p>Welcome to the PCjs Archive Server.</p>
<p>There is nothing here to browse. You should return to <a href="http://www.pcjs.org/">pcjs.org</a></p>
</article>
</div>
</div>
</div>
<footer class="site-footer">
<div class="wrapper">
<div class="footer-col-wrapper">
<div class="footer-col footer-col-3">
<p class="text">
<span style="float:right"><a href="http://www.pcjs.org">pcjs.org</a> © 2012-2017 by <a href="https://twitter.com/jeffpar">@jeffpar</a></span><br/>
<span style="float:right"><a href="http://github.com/jeffpar/pcjs">PCjs Project</a> released under <a href="http://gnu.org/licenses/gpl.html">GPLv3</a></span>
</p>
</div>
</div>
</div>
</footer>
</body>
</html>

View file

@ -1,47 +0,0 @@
---
# Only the main Sass file needs front matter (the dashes are enough)
---
@charset "utf-8";
// Our variables
$base-font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
$base-font-size: 16px;
$small-font-size: $base-font-size * 0.875;
$base-line-height: 1.5;
$spacing-unit: 30px;
$text-color: #111;
$background-color: #fdfdfd;
$brand-color: #2a7ae2;
$grey-color: #828282;
$grey-color-light: lighten($grey-color, 40%);
$grey-color-dark: darken($grey-color, 25%);
$on-palm: 600px;
$on-laptop: 800px;
// Using media queries with like this:
// @include media-query($palm) {
// .wrapper {
// padding-right: $spacing-unit / 2;
// padding-left: $spacing-unit / 2;
// }
// }
@mixin media-query($device) {
@media screen and (max-width: $device) {
@content;
}
}
// Import partials from `sass_dir` (defaults to `_sass`)
@import
"base",
"layout",
"syntax-highlighting"
;

View file

@ -59,7 +59,7 @@ Models 319 and 339 were introduced in April 1986:
- Enhanced 101-key keyboard
IBM PC AT 5170 Configuration Options
------------------------------------
---
The IBM PC AT 5170 doesn't have DIP switches like previous models, but it still has a few switches and jumpers.
@ -103,7 +103,7 @@ it cannot be changed by the user.
---
IBM PC AT 5170 (Models 68 and 99) Announcement
----------------------------------------------
---
The following details come from a [copy](http://www.minuszerodegrees.net/misc/IBM%20PC%20AT%205170%20announcement%20letter.txt)
of IBM's PC AT Announcement Letter, dated August 14, 1984.

View file

@ -5,7 +5,7 @@ permalink: /devices/pcx86/rom/
---
IBM PC ROMs
-----------
---
ROMs are added to machines by including one *[ROM](/docs/pcx86/rom/)* component in the machine XML configuration file
for each ROM in the machine; eg:

View file

@ -5,6 +5,6 @@ permalink: /devices/pcx86/video/cdp/
---
Columbia Data Products Video Adapters
-------------------------------------
---
* [Columbia Data Products Color Graphics Adapter (CGA)](cga/)

View file

@ -1,30 +0,0 @@
---
layout: null
---
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{{ site.title | xml_escape }}</title>
<description>{{ site.description | xml_escape }}</description>
<link>{{ site.url }}{{ site.baseurl }}/</link>
<atom:link href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}" rel="self" type="application/rss+xml" />
<pubDate>{{ site.time | date_to_rfc822 }}</pubDate>
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
<generator>Jekyll v{{ jekyll.version }}</generator>
{% for post in site.posts limit:10 %}
<item>
<title>{{ post.title | xml_escape }}</title>
<description>{{ post.content | xml_escape }}</description>
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
<link>{{ post.url | prepend: site.baseurl | prepend: site.url }}</link>
<guid isPermaLink="true">{{ post.url | prepend: site.baseurl | prepend: site.url }}</guid>
{% for tag in post.tags %}
<category>{{ tag | xml_escape }}</category>
{% endfor %}
{% for cat in post.categories %}
<category>{{ cat | xml_escape }}</category>
{% endfor %}
</item>
{% endfor %}
</channel>
</rss>

100
index.md
View file

@ -1,100 +0,0 @@
---
layout: page
permalink: /
machines:
- id: ibm5150
type: pcx86
resume: 1
name: "IBM PC (Model 5150) with Monochrome Display"
config: /devices/pcx86/machine/5150/mda/64kb/machine.xml
- id: demoC1P
type: c1p
config: /devices/c1p/machine/8kb/large/machine.xml
---
Welcome to PCjs, home of [PCx86](/docs/pcx86/), the original IBM PC simulation that runs in your web browser. It is
one of several JavaScript Machines in the [PCjs Project](https://github.com/jeffpar/pcjs), an open-source project that
includes:
* [PCx86](/docs/pcx86/), an x86-based emulator of the [IBM PC and PC-compatibles](/devices/pcx86/machine/)
* [PC8080](/modules/pc8080/), an 8080 machine emulator (see [Space Invaders](/devices/pc8080/machine/invaders/) and the [VT100 Terminal](/devices/pc8080/machine/vt100/))
* [C1Pjs](/docs/c1pjs/), an emulation of the 6502-based [Ohio Scientific Challenger 1P](/devices/c1p/)
* [PDPjs](/docs/pdpjs/), a set of machine emulation modules supporting the DEC [PDP-10](/devices/pdp10/machine/) and [PDP-11](/devices/pdp11/machine/)
All PCjs machine simulations are written entirely in [JavaScript](/modules/). No Flash, Java or other plugins are
required. Supported browsers include modern versions of Chrome, Safari, Firefox, Internet Explorer (v9.0 and up), Edge,
and assorted mobile browsers.
{% include machine.html id="ibm5150" %}
The [JavaScript Machine](/devices/pcx86/machine/5150/mda/64kb/) above uses [PCx86](/docs/pcx86/) configured with an Intel
8088 running at 4.77Mhz, with 64Kb of RAM and an IBM Monochrome Display Adapter. For more control, there are also
[Control Panel](/devices/pcx86/machine/5150/mda/64kb/debugger/) and [Soft Keyboard](/devices/pcx86/machine/5150/mda/64kb/softkbd/)
configurations, featuring the built-in PCx86 Debugger. For even greater control, build your own PC. The
[PCx86 Documentation](/docs/pcx86/) will help you get started.
PCx86 has steadily evolved to support more classic x86-based machines, including the IBM PC XT, the 80286-based IBM PC AT,
and the 80386-based COMPAQ DeskPro 386. PCx86 fully supports the original machine ROMs, video cards, etc, and all
machines run at their original speeds.
The goals of the [PCjs Project](/docs/about/) are to create fast, full-featured simulations of classic
computer hardware, help people understand how these early machines worked, make it easy to experiment with different
machine configurations, and provide a platform for running and analyzing old computer software.
Demos
-----
Some pre-configured machines are shown below, ready to run BASIC, DOS, Windows, OS/2, and other assorted software.
{% include screenshot.html src="/apps/pcx86/1981/visicalc/thumbnail.jpg" width="200" height="120" title="IBM PC running VisiCalc" link="/apps/pcx86/1981/visicalc/" %}
{% include screenshot.html src="/apps/pcx86/1981/donkey/thumbnail.jpg" width="200" height="120" title="IBM PC running DONKEY.BAS" link="/apps/pcx86/1981/donkey/" %}
{% include screenshot.html src="/disks/pcx86/windows/1.00/thumbnail.jpg" width="200" height="120" title="IBM PC XT w/EGA, Windows 1.0" link="/disks/pcx86/windows/1.00/" %}
{% include screenshot.html src="/disks/pcx86/windows/1.01/cga/thumbnail.jpg" width="200" height="120" title="IBM PC XT w/CGA, Windows 1.01" link="/disks/pcx86/windows/1.01/cga/" %}
{% include screenshot.html src="/disks/pcx86/windows/1.01/thumbnail.jpg" width="200" height="120" title="IBM PC XT w/EGA, Windows 1.01" link="/disks/pcx86/windows/1.01/" %}
{% include screenshot.html src="/disks/pcx86/os2/ibm/1.0/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/EGA, OS/2 1.0" link="/disks/pcx86/os2/ibm/1.0/" %}
{% include screenshot.html src="/disks/pcx86/windows/2.0x/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows/386 2.01" link="/disks/pcx86/windows/2.0x/" %}
{% include screenshot.html src="/disks/pcx86/windows/3.00/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/EGA, Windows 3.00" link="/disks/pcx86/windows/3.00/" %}
{% include screenshot.html src="/disks/pcx86/windows/3.10/thumbnail.jpg" width="200" height="120" title="IBM PC AT w/VGA, Windows 3.10" link="/disks/pcx86/windows/3.10/" %}
{% include screenshot.html src="/disks/pcx86/windows/win95/4.00.950/thumbnail.jpg" width="200" height="120" title="COMPAQ DeskPro 386, Windows 95" link="/disks/pcx86/windows/win95/4.00.950/" %}
{% include screenshot.html src="/disks/pcx86/cpm/1.1b/thumbnail.jpg" width="200" height="120" title="IBM PC w/MDA, CP/M-86" link="/disks/pcx86/cpm/1.1b/" %}
{% include screenshot.html src="/disks/pcx86/games/microsoft/adventure/thumbnail.jpg" width="200" height="120" title="Microsoft Adventure (1981)" link="/disks/pcx86/games/microsoft/adventure/" %}
{% include screenshot.html src="/apps/pcx86/1982/esuite/thumbnail.jpg" width="200" height="120" title="Executive Suite (1982)" link="/apps/pcx86/1982/esuite/" %}
{% include screenshot.html src="/disks/pcx86/games/infocom/zork1/thumbnail.jpg" width="200" height="120" title="Zork I (1982)" link="/disks/pcx86/games/infocom/zork1/" %}
{% include screenshot.html src="/apps/pcx86/1983/adventmath/thumbnail.jpg" width="200" height="120" title="Adventures in Math (1983)" link="/apps/pcx86/1983/adventmath/" %}
{% include screenshot.html src="/apps/pcx86/1985/rogue/thumbnail.jpg" width="200" height="120" title="Rogue (1985)" link="/apps/pcx86/1985/rogue/" %}
There are many more [PCx86 Demos](/devices/pcx86/machine/#ready-to-run-app-demos), including an
[IBM PC with Dual Displays](/devices/pcx86/machine/5150/dual/64kb/) demonstrating early multi-monitor support,
and multiple IBM PC XT machines running side-by-side with [CGA Displays](/devices/pcx86/machine/5160/cga/256kb/array/)
and [EGA Displays](/devices/pcx86/machine/5160/ega/640kb/array/).
C1Pjs
-----
Below is the [OSI Challenger C1P](/docs/c1pjs/), another simulation in the PCjs Project.
It simulates Ohio Scientific's 6502-based microcomputer, released in 1978. More details about this simulation
and the original machine are available in the [C1Pjs Documentation](/docs/c1pjs/).
{% include machine.html id="demoC1P" %}
License
-------
The [PCjs Project](https://github.com/jeffpar/pcjs) is now an open-source project on [GitHub](http://github.com/).
All published portions are free for redistribution and/or modification under the terms of the
[GNU General Public License](/LICENSE) as published by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.
You are required to include the following copyright notice, with a link to [{{ site.pcjs.domain }}]({{ site.url }}/):
> [PCjs]({{ site.url }}/) © 2012-2017 by [Jeff Parsons](mailto:Jeff@pcjs.org) ([@jeffpar](http://twitter.com/jeffpar))
in every source code file of every copy or modified version of this work, and to display that notice on every web page
or computer that runs any version of this software.
See [LICENSE](/LICENSE) for details.
More Information
----------------
Learn more about the [PCjs Project](/docs/about/) and [PCx86](/docs/about/pcx86/). To
create your own PCx86 machines, see the [PCx86 Documentation](/docs/pcx86/) for details.
If you have questions or run into any problems, feel free to [tweet](http://twitter.com/jeffpar) or
[email](mailto:Jeff@pcjs.org).

View file

@ -8,5 +8,4 @@ Challenger 1P Publications
--------------------------
* [Data Sheets](datasheets/)
* [Programming Guides/Samples](programming/)
* [Technical Reference Manuals](techref/)

View file

@ -1,2 +0,0 @@
User-agent: *
Disallow: /web/