From 639eb6e94539f3d6558829f6afcdb986f2e9f57e Mon Sep 17 00:00:00 2001 From: Jeff Parsons Date: Tue, 28 Feb 2017 17:06:29 -0800 Subject: [PATCH 1/2] Picked up published 1.34.1 changes --- README.md | 4 ++-- package.json | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 219c2274b..981bc1cc9 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/package.json b/package.json index 888c34fbf..211eabea6 100644 --- a/package.json +++ b/package.json @@ -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", From 13d7acc9cb757a0c48747ee50d2a30a0d975b415 Mon Sep 17 00:00:00 2001 From: Jeff Parsons Date: Tue, 28 Feb 2017 19:16:21 -0800 Subject: [PATCH 2/2] New blog post about the PDP-10 --- _posts/2017-02-28-learning-the-pdp-10.md | 58 ++++++++++++++++++++++++ pubs/dec/pdp10/README.md | 2 +- 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 _posts/2017-02-28-learning-the-pdp-10.md diff --git a/_posts/2017-02-28-learning-the-pdp-10.md b/_posts/2017-02-28-learning-the-pdp-10.md new file mode 100644 index 000000000..929c8ec9f --- /dev/null +++ b/_posts/2017-02-28-learning-the-pdp-10.md @@ -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* diff --git a/pubs/dec/pdp10/README.md b/pubs/dec/pdp10/README.md index 9b7bbcedc..ca2bc9c64 100644 --- a/pubs/dec/pdp10/README.md +++ b/pubs/dec/pdp10/README.md @@ -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/)