Merge branch 'master' into gh-pages
This commit is contained in:
commit
31122ce6d5
2 changed files with 59 additions and 1 deletions
58
_posts/2017-02-28-learning-the-pdp-10.md
Normal file
58
_posts/2017-02-28-learning-the-pdp-10.md
Normal 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*
|
||||||
|
|
@ -5,7 +5,7 @@ permalink: /pubs/dec/pdp10/
|
||||||
---
|
---
|
||||||
|
|
||||||
PDP-10 Hardware Publications
|
PDP-10 Hardware Publications
|
||||||
---
|
----------------------------
|
||||||
|
|
||||||
This page summarizes PDP-10 documentation that was useful in creating [PDPjs](/docs/pdpjs/). In most cases,
|
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/)
|
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/)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue