Merge branch 'next-release'

This commit is contained in:
Jeff Parsons 2017-02-28 19:16:28 -08:00
commit e498664d32
4 changed files with 64 additions and 7 deletions

View file

@ -5,7 +5,7 @@ Welcome to PCjs, home of [PCx86](/docs/pcx86/), the original IBM PC simulation t
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 [IBM PC and PC-compatible](/devices/pcx86/machine/) machines
* [PCx86](/docs/pcx86/), an x86-based emulator of [IBM PC and PC-compatible Machines](/devices/pcx86/machine/)
* [PC8080](/modules/pc8080/), an 8080 machine emulator (e.g., [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 emulation modules supporting [PDP-10](/devices/pdp10/machine/) and [PDP-11](/devices/pdp11/machine/) machines
@ -26,7 +26,7 @@ PCx86 has steadily evolved to support more classic x86-based machines, including
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/) project are to create fast, full-featured simulations of classic
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.

View file

@ -0,0 +1,58 @@
---
layout: post
title: Learning the PDP-10
date: 2017-02-28 22:00:00
permalink: /blog/2017/02/28/
---
Since I've more or less achieved all my goals for the PCjs [PDP-11 Emulator](/devices/pdp11/machine/), I've decided
to turn my attention to an even older historically important DEC computer: the [PDP-10](https://en.wikipedia.org/wiki/PDP-10#Cancellation_and_influence).
Having never used a real DEC PDP-10, I've had a steep learning curve creating a [PDP-10 Emulator](/modules/pdp10/).
So far, the only [PDP-10 Hardware Documentation](/pubs/dec/pdp10/) I've read (or rather, skimmed) is the
[PDP-10 System Reference Manual (1968)](http://archive.pcjs.org/pubs/dec/pdp10/ka10/DEC-10-HGAA-D_PDP-10_System_Reference_Manual_May1968.pdf).
To make the process a little less painful, most of my initial development efforts have centered on the built-in PDP-10
Debugger. In addition to the usual disassembler capabilities, I've also included an assembler, so that I can easily enter
instruction sequences like this:
a 100;
hrli 1,111111;
hrri 1,444444;
hlr 2,1;
hrl 2,1;
end
and immediately see the corresponding opcodes:
>> u 100 l4
000100: 505040 111111 HRLI 1,111111
000101: 541040 444444 HRRI 1,444444
000102: 544100 000001 HLR 2,1
000103: 504100 000001 HRL 2,1
It's not a full-featured assembler; it's little more than a brute-force reverse look-up through the disassembler's
opcode-to-mnemonic tables. But it gets the job done.
Next, I've written an initial set of [PDP-10 Opcode Tests](/apps/pdp10/tests/) and compared the results to those produced
by [SIMH](https://github.com/simh/simh), and so far, so good. More than anything else, that's just a testament to DEC's
excellent documentation.
One of the challenges in creating a JavaScript-based [PDP-10 Emulator](/modules/pdp10/) involves 36-bit arithmetic, because
JavaScript bit-wise operators maintain only 32 bits. Extreme care must be taken to use only *arithmetic* operators whenever
accessing and/or preserving the 4 most-significant bits in any 36-bit value.
So, before I started this project, I wrote a proof-of-concept [Int36 Class](/modules/shared/lib/int36.js) that supports 36-bit
addition, subtraction, multiplication, and division, as well as a number of helper functions (e.g., *toString()*). Further
adaptation will be required, however, because **Int36** multiplication produces 72-bit results and **Int36** division uses 72-bit
dividends, whereas the PDP-10 uses "double length fixed point" values that contain only 70 bits of magnitude with two matching
sign bits.
I just finished writing opcode handlers for all the PDP-10 "Half Word" instructions (i.e., *HLL*, *HRL*, *HRR*, *HLR*, with all
mode variations and bit extension options), but that's just the tip of the iceberg. Hopefully within another month or
so I'll be able to find the time to finish the rest of the PDP-10 opcode handlers.
And then maybe we'll be able to run some *real* PDP-10 software in our browsers.
*[@jeffpar](http://twitter.com/jeffpar)*
*Feb 28, 2017*

View file

@ -149,10 +149,10 @@
"./modules/shared/lib/reportapi.js",
"./modules/shared/lib/userapi.js",
"./modules/shared/lib/keys.js",
"./modules/shared/lib/component.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",
@ -176,16 +176,15 @@
],
"pdp10Files": [
"./modules/shared/lib/defines.js",
"./modules/shared/lib/diskapi.js",
"./modules/shared/lib/dumpapi.js",
"./modules/shared/lib/reportapi.js",
"./modules/shared/lib/userapi.js",
"./modules/shared/lib/int36.js",
"./modules/shared/lib/keys.js",
"./modules/shared/lib/component.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",
@ -211,10 +210,10 @@
"./modules/shared/lib/reportapi.js",
"./modules/shared/lib/userapi.js",
"./modules/shared/lib/keys.js",
"./modules/shared/lib/component.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",

View file

@ -5,7 +5,7 @@ permalink: /pubs/dec/pdp10/
---
PDP-10 Hardware Publications
---
----------------------------
This page summarizes PDP-10 documentation that was useful in creating [PDPjs](/docs/pdpjs/). In most cases,
these documents came from the PDF Document Archive at [bitsavers.org](http://bitsavers.org), in the [/pdf/dec/pdp10/](http://bitsavers.org/pdf/dec/pdp10/)