• Please review our updated Terms and Rules here

Help! I've Fallen Down a Rabbit Hole and Can't Get up!

MrImprovement

Experienced Member
Joined
Jan 7, 2023
Messages
135
So the PDP10 series - I have been reading a great deal about these, seems they run TOPS-10 and TOPS-20 and ITS OSes ... mentioned a great deal in the book Hackers by Steven Levy ... is there someone familiar with this that can speak to what it was like to use? There is a SIMH emulator for it ... would it be possible that programming in PDP10 assembler would be less taxing than in modern x64 assembler? I haven't programmed in assembler before, was thinking if it was less complex then it would be a way to ease into it...
 
Using the PDP-10 didn't seem much different from using the PDP-11 from a terminal user perspective.

Is it even possible to imagine a harder assembler than X64 with its 50 years of bad ideas overlaid by replacement bad ideas stretched ever wider? I hadn't done much with the 10 but the assembler seemed straight forward. Others with more experience with it may have had a much more negative response.
 
Last edited:
You might be interested in ordering the reproduction kit: piDP-10

I have the other kits - piDP-8/11, and they are well made. Having the front panel might make learning about the system that much more interesting! My 2 cents is that DEC assembly is more complex/varied compared to some other assembly languages of the time, like the Data General Nova for example, which is fairly straight forward. If you just wanted to get started with any assembly, then ARM or even MIPS may be a good place to start. MIPS is pretty simple as far as assembly languages go, and there is the SPIM/QTSPIM simulator available for testing. For Intel style assembly, the z80/8085/8088 might be a good place to start. IMO modern processors, like the x64 are more commonly expected to be programmed using a compiler, so would not be the place I would start.
 
x64 assembly is one of the hardest to learn: there really are a lot of special cases, a lot of variety, a lot of complexity chasing small performance gains.

I'd suggest that amongst the easiest is the VAX:
  • power-of-2 word size
  • integers usually the same size as addresses
  • conventionally hexadecimal
  • extremely regular
  • designed to be programmed in assembler
It was arguably the peak of CISC design: as far as I know it's the only CPU with operators and operands coded independently in the bytestream. After learning machine code on a VAX, everything else feels like a compromise to get the instruction stream to be simpler; everything earlier looks like they didn't have an overall plan.

It's much easier to understand than a PDP-10, described in Wikipedia like this: "The right half of these registers (other than register 0) may be used for indexing. A few instructions operate on pairs of registers. The "PC Word" register is split in half; the right 18 bits contains the program counter and the left 13 bits contains ...". And much easier than an x86: "mandatory SSE2-like instructions, and x87/MMX style registers are generally not used, but still available even in 64-bit mode".

Other things to note include the top-quality simulator (simh, same as for other Digital computers). And you can buy a real desktop one for a few hundred or go full-rabbit-warren a rackmount 730 or 750 or indeed 780. And you actually use it for real things like word processing or home automation.

From a historical perspective it's easily one of the most important computers, being instrumental in the development of Unix after the PDP-11, and the platform for the development of sockets at Berkeley. And the perfect stepping stone between current processors and early ones.

You might be interested to read C Gordon Bell's 1977 paper: What have we learned from the PDP-11, (available online) which gives a good historical perspective.

Many people learned assembler on microprocessors: the main difference between these and "proper computers" was that the "proper computers" had supervisor and user modes, vital for interprocess protection in an operating system. These didn't come to the microprocessors until 68000 and 386, I believe. Contrary to what you might think, from the point of view of operating systems, this is much more important than the small word size of say the Z80.

Just a few opinions which might be helpful. Start wherever you find it most interesting.

Jonathan.

Following are a few snippets of VAX-11/780 Architecture Handbook Vol. 1

1710236251290.png

1710236083376.png

1710235991713.png
 
Last edited:
The first assembly language I learned was for the PDP-8. Simple. Not always straightforward, but the instructions themselves were all simple.

The second assembly language I learned was for the '10. The programmers manual seemed mind bogglingly complex to me at the time (which variation of JRST was I supposed to use? AOJNE?). It took me a lot of hours to write a working TOPS-10 program to download a BIN file to my PDP-8 terminal emulator/DLL program. It was fun, though. Got me an 'A' in ECE281.

X86-64 assembly does not seem more complex than the '10, to me. And it is more likely that you could get some real-world benefit out of learning it.

IMO learning to write PDP-11 assembly code would probably help you more than learning the '10.
 
You might be interested in ordering the reproduction kit: piDP-10

I have the other kits - piDP-8/11, and they are well made. Having the front panel might make learning about the system that much more interesting! My 2 cents is that DEC assembly is more complex/varied compared to some other assembly languages of the time, like the Data General Nova for example, which is fairly straight forward. If you just wanted to get started with any assembly, then ARM or even MIPS may be a good place to start. MIPS is pretty simple as far as assembly languages go, and there is the SPIM/QTSPIM simulator available for testing. For Intel style assembly, the z80/8085/8088 might be a good place to start. IMO modern processors, like the x64 are more commonly expected to be programmed using a compiler, so would not be the place I would start.

I'm sorry but I beg to differ with you one complex instruction sets vs simple ones.

The PDP-8 is probably the simplest instruction set of all. With only 6 memory reference instructions, a set of micro instructions and a set of I/O instructions it is the penultimate of simple. If you look at the binary bit outs, it makes total sense and is very easy to understand.

The PDP-11 instruction set is almost completely orthogonal. Nearly every instruction can work on memory or any register. And if you look at the binary bit outs it is logical and easy to understand.

As far as microprocessors go, the 68000 (not 68020 or beyond) is closest to the PDP-11 in terms of having an orthogonal easy to learn instruction set.

If you want to go simpler than the 68000 I would recommend the 6809. The 6809 may be the best 8 bit processor ever.

And if you want to go really really ridiculously simple the PIC-08 doesn't get much simpler. I don't recommend the PIC-08 to anyone as I find it's instruction set and Harvard architecture to be nearly unusable do to the hoops you have to jump through to accomplish anything complicated.

If you want to go extra complicated look at the Power PC CPU.

As for the ARM, thought it is technically a RISC machine, it is far more complicated than the PDP-8 or PDP-11.

Now if you want to program in a higher level language I would recommend something with at least the processing horsepower of the PDP-11 or ARM.

The trick to learning any assembly language is to understand the architecture of the system. How do its registers work (data, address, stack, index, program counter, etc.) and its addressing modes. Once you have a grasp on that, understanding how each instruction works will be fairly simple.
 
The PDP-11 instruction set is almost completely orthogonal. Nearly every instruction can work on memory or any register. And if you look at the binary bit outs it is logical and easy to understand.

As far as microprocessors go, the 68000 (not 68020 or beyond) is closest to the PDP-11 in terms of having an orthogonal easy to learn instruction set.

If you want to go simpler than the 68000 I would recommend the 6809. The 6809 may be the best 8 bit processor ever.

I'd say the PDP-11 is less regular than it appears, but I completely agree about how nice the binary looks. However another one of its difficulties is that there are three main varieties: 16-bit, 18-bit and 22-bit which matters if you're looking at bare metal, and subtle variances in behaviour between different models. Which is what led me to suggest the VAX, which I'd say has even more elegant binary.

This is an area where the microprocessors are very consistent: all the chips of a given CPU behave the same except for very niche undocumented instructions.
The trick to learning any assembly language is to understand the architecture of the system. How do its registers work (data, address, stack, index, program counter, etc.) and its addressing modes. Once you have a grasp on that, understanding how each instruction works will be fairly simple.

For certain.

And oh yes, the 6809 is absolutely a work of art.

Jonathan.
 
Back
Top