The history of computing can be said to be divided into three eras: the history of mainframe computers, microcomputers, and microcomputers. Microcomputers provided an important bridge between the first mainframe computers and the ubiquitous microcomputers today. This is the story of the PDP-11, the most influential and successful microcomputer of all time.
At the moment, microcomputers have been used in a variety of applications. They served as communications controllers, instrument controllers, large system processors, desktop calculators, and real-time data acquisition processors. But they also laid the foundation for major advances in hardware engineering and contributed significantly to modern operating systems, programming languages, and interactive computing as we know them today.
In today’s computing world, where every computer runs some variant of Windows, Mac, or Linux, it’s hard to tell which CPUs are under the operating system. But there was a time when differences in CPU architecture were a major problem. The PDP-11 helps explain why this is.
The PDP-11 was introduced in 1970, a time when most computing was done on expensive GE, CDC, and IBM computers that few people had access to. There were no laptops, desktops, or personal computers. The programming was done by a few companies, mostly in assembly, COBOL and Fortran. The entry was done on punch cards, and the programs were run in non-interactive groups.
Although the first PDP-11 was modest, it laid the foundation for the conquest of microcomputers that would make a new generation of computers more readily available, essentially revolutionizing computing. PDP-11 helped give birth UNIX operating system And the C programming language. It will also greatly affect the next generation of computer architectures. During the PDP-11’s 22-year lifespan—a period unheard of by today’s standards—more than 600,000 PDP-11s have been sold.
The early PDP-11 prototypes weren’t overly impressive. The first PDP-11 11/20 costs $20,000, but ships with only about 4KB of RAM. I used paper tape for storage and had a teletype ASR-33 printer controller that prints 10 characters per second. But it also had an impressive 16-bit orthogonal architecture, eight registers, 65KB of address space, a 1.25MHz cycle time, and a flexible UNIBUS hardware bus that supported future peripherals. This was a successful combination for its creator, Digital Equipment Corporation.
The initial implementation of the PDP-11 included real-time instrumentation control, plant automation, and data processing. As the PDP-11 has gained a reputation for flexibility, programmability, and affordability, it has seen its use in traffic light control systems, the Nike missile defense system, air traffic control, nuclear power plants, and naval pilot training and communications systems. It also pioneered the word processing and data processing that we now take for granted.
The effect of the PDP-11 is strikingly manifested in the programming of the assembly of the device.
Assembler Programming Basics
Before the invention of high-level languages such as Python, Java, and Fortran, programming was done in assembly language. Assembly language programming can be done with very little RAM and storage – perfect for an environment in the early days of computing.
Assembly language is a low-level intermediate format that is converted into a machine language that can then be run directly by a computer. It’s low-key because you’re directly manipulating aspects of the computer architecture. Simply put, assembly programming moves your data byte by byte through hardware and memory registers. What made the PDP-11 programming different was that the design of the microcomputer was elegant. Every instruction has its place, and every instruction makes sense.
The 16-bit address space means that each register can handle up to 64K of RAM, with the highest 4K reserved for memory mapped input and output. PDP-11s can handle a total of 128KB of RAM using registry segments (more on this in a bit). So even though PDP-11 systems came with only 4KB of RAM, they were still productive through clever use of early programming techniques.
assembly language program
It is easiest to understand this concept with an example of a simple PDP-11 assembly language program, which we will discuss below. Keywords that start with “.” They are directions to the assembly.
.globl Export a label as an icon to the link for use by the operating system.
.text Specifies the start of the code segment.
.data Specifies the start of a separate data segment. Keywords ending in “:” are taxonomies. Assembly programming uses labels to manipulate memory symbolically. (Note: with the terminology PDP-11 and encoding, no text after/commentary.)
|.globl _main||Export the _main label as an entry point for the operating system to use|
|.text||Beginning of the instruction block where the read-only code is located|
|_main: MOV VAL1, R0||Copy the word value into memory location VAL1 in register 0|
|Add $10, R0||Add 10 to the value in register 0|
|MOV R0, VAL1||Copy the value in register 0 to memory location VAL1|
|_.data||Beginning of the data segment where data is read/written|
|VAL1: .word $100||Keep 2 bytes of storage to hold Val1, configured to 100|
Although numeric values can be used for memory addresses, using labels instead of encoded addresses facilitates programming and makes the code repositionable in memory. This gives the operating system flexibility when running the code, ensuring that each program is fast and efficient.
The data collector directive places data in a segment of memory that can be read and written. The memory portion of the code is read-only to prevent programming errors from damaging the program and causing crashes. This separation of instructions and data on the PDP-11 is called “splitting instructions and data.” In addition to adding stability, this feature also doubles the address space by enabling 64K for code and 64K for data – this was considered a major innovation at the time. Accordingly, the X86 microcomputers from Intel made extensive use of sectors.