• Please review our updated Terms and Rules here

PDP 11/03 running LSX with ak6dn's RX02 emulator board

medusa

Member
Joined
Oct 24, 2023
Messages
20
Location
Cologne, Germany
Hi folks,
maybe a few of you know my homepage about my PDP-11 stuff (yes I know it's terribly outdated). http://diane-neisius.de/pdp11/index_E.html
Since I still ramble around looking for DEC stuff I found this forum and information about Don's RX02 emulator. Which directly led me to his Github.
Long story short, I downloaded the Gerber files for the v4 shield and ordered some PCBs online from a German company.
Soldering parts in was not that difficult (that's why I chose the v4 - when I was young, 2.54mm was THE measure). Flashed the Arduino, did some Tests with the SDcard. And then it happened.

rx02_shield_running.png
Plugged it into the RXV11. Hacked the bootloader in. And then - got a bootsector at location 0! It worked! Out of the box!
Some tweaking later I had a full boot of LSX. This was something I waited about 15 years for.
11_03_running_LSX.JPG
Here is my setup for the first debugging sessions. On the laptop, left is Arduino IDE, right is the PDP-11/03 terminal window. Meanwhile I trust the RX02 and just plug it into some Raspi PSU.
pdp11_cage.JPG
A closeup of my small H9281 backplane and the four cards residing in it. Besides the CPU there is 64k RAM (jumpered to use 60k instead of 56k, never had any I/O stuff in the range 0160000 to 0170000), the RXV11 of course and a DLV11-E console serial.
11_03_running_LSX_terminal.JPG
A snapshot of the terminal window. Welcome to the world of UNIX v6. "LSX" is an abbreviation of "LSI UNIX".
The first thing I did was to restore the missing 'cat' in the root disk. It is no fun to use the crappy old 'ed' editor to look into source files. This was quite easy and went exactly the way H. Lycklama (author of LSX) described in his paper about it. You can take the source from Unix v6, copy it over to the LSX disk and compile, reloc and strip it there. Presto, there is /bin/cat. :)
Currently I fiddle with the kernel sources. I can compile a LSX kernel from the sources but it still crashes. The vanilla kernel uses only 12kw of user space which with 8kw system is a total of only 20kw. 10kw left unused. Don't like that.

What I really find fascinating on this combination is, it was ready in about 1976. Years before Apple was founded and IBM thought about a PC. Things could have been quite different... if not Ken Olsen, Boss of DEC, had the opinion "nobody wants a computer at home". Oh well.
 
What I really find fascinating on this combination is, it was ready in about 1976. Years before Apple was founded and IBM thought about a PC.
And cost $10,000 1976 dollars. DEC had absolutely no interest in selling software for hobbyist prices either.
Unix in any form wouldn't be sold commercially until the early 80s
 
Cool! Not many users have tried RXV11/RX11, most are either RXV21/RX211 or RX28/8E or VT78/278 for the RX01/RX02 emulator.

For those less adventurous I still have quite a few RX02 emulator SMT v5 assemblies and a whole lot of thruhole v4 PCBs and microSD adapters (small SMT assembly). DM me if interested.
 
Last edited:
Hm. I wonder if it's possible to build a version of this for the PDT11/150?
 
Hm. I wonder if it's possible to build a version of this for the PDT11/150?
As best I can tell the floppy disk controller subsystem in the PDP-11/150 looks nothing like the interface to an RX01/RX02 drive used by the RX11/V11/211/V21/8E/28.
So it would be a completely new hardware and software design.
The media format seems to be standard RX01 or RX02 but how the CPU interfaces to the disk controller is completely different it appears to me.
More like a classic 8in floppy on a PC than a DEC RX01/02.
 
It should be perfectly possible to run this on the PDT 11/150, assuming you're ready to get knee-deep in 70s-era UNIX code.

I did a bit of hacking with LSX a few years back. It's 95% stock V6 source code, so modifying it is surprisingly easy. I was able to get LSX to support:
  • Full use of system memory
  • Multiple block device drivers
  • Booting from the RX02 and RK05
  • The mount and umount commands
  • TTY raw mode for screen editor use
  • Various utilities like cat, dd, etc..
It actually can be made to be a fairly feature-complete UNIX system, at least in relation to the hardware it's running on. The only issue is performance on real floppy drives is *abysmal*.
 

Olsen: "There is no reason for any individual to have a computer in his home."

Later: In at talk given to a 1977 World Future Society meeting in Boston. Olsen later explained that he was referring to smart homes rather than personal computers.

So in actuality he was even more wrong. There are more home computers that are in smart home devices than personal computers in any home.

Pretty much any home appliance you buy today has a computer (microprocessor, but still a computer) in it. Try and buy a TV these days that is not smart.

I wonder what Olsen would think about virtually everyone carrying around a personal computer that has more CPU power and memory and capability than any VAX ever produced.

We call it a smart phone now but it really is a personal computer.
 
We call it a smart phone now but it really is a personal computer.

Very true. A few years ago I found out the machine I used for writing my Ph.D. thesis in the early '90ies was a SGI IRIX Indy. Has about the power of an Iphone 3.

I did a bit of hacking with LSX a few years back. It's 95% stock V6 source code...

Any trick I need to know? Currently my rebuilds of the vanilla kernel crash. I conf'd in param.h only EIS = 1 and mount = 1 (as it should be). Not yet user memory increased.
It's also funny to see the optimization of cc seems not to work. All .o files are somewhat larger than on the fresh /usr disk. Have same size as omitting -O entirely.
 
Olsen: "There is no reason for any individual to have a computer in his home."

Later: In at talk given to a 1977 World Future Society meeting in Boston. Olsen later explained that he was referring to smart homes rather than personal computers.

So in actuality he was even more wrong. There are more home computers that are in smart home devices than personal computers in any home.

Pretty much any home appliance you buy today has a computer (microprocessor, but still a computer) in it. Try and buy a TV these days that is not smart.

I wonder what Olsen would think about virtually everyone carrying around a personal computer that has more CPU power and memory and capability than any VAX ever produced.

We call it a smart phone now but it really is a personal computer.
i think you're stretching the definition of "personal computer" a bit, i don't personally feel embedded/"smart" devices are personal computers. but that's neither here nor there, feel free to pm me if you'd like to argue/debate/chat/throw stones so i don't derail the thread further. wasn't planning on getting into a whole discussion, just clearing up a common misquote.
 
Yeah, some days I think I should just pull the ROMs on the PDT11/150 and reprogram the RX01 to act.... like a RX01. They made it brain dead for no real reason given that all the IO ports and activity is done in 8085 code.
 
Yeah, some days I think I should just pull the ROMs on the PDT11/150 and reprogram the RX01 to act.... like a RX01. They made it brain dead for no real reason given that all the IO ports and activity is done in 8085 code.
I was just looking at the hardware interface from the CPU board to the floppy drives, and it is not anything like the DEC RX01/RX02 drive interface, so using the RX02_emulator is kind of moot. It seems on the PDT11/150 DEC implemented a more classic style of floppy interface like one would see on PC 8inch etc drives.
 
Found at least out why the optimization of cc did not work... it is (again) by the UPERCASE text output.
Do a STTY -LCASE first, and then cc -O -c myfile.c works perfectly.
Guess in uppercase it cannot distinct -o from -O and ignores it.

So, I can now build a kernel of the same size as the stock one. But it still crashes on boot. :confused:
 
Found at least out why the optimization of cc did not work... it is (again) by the UPERCASE text output.
Do a STTY -LCASE first, and then cc -O -c myfile.c works perfectly.
Guess in uppercase it cannot distinct -o from -O and ignores it.

So, I can now build a kernel of the same size as the stock one. But it still crashes on boot. :confused:
Make sure that the configuration in header.s matches what is found is param.h. If I recall correctly the default configuration in header.s is a non-LSI (i.e. 11/05) with no EIS support.

Additionally, for some reason the default source has line 576 of mch.s as "_u = 47000". This is only correct if you are building a 10KW kernel. I think the correct value for an 8KW kernel is 37000.
 
What I really find fascinating on this combination is, it was ready in about 1976. Years before Apple was founded and IBM thought about a PC. Things could have been quite different... if not Ken Olsen, Boss of DEC, had the opinion "nobody wants a computer at home". Oh well.

Nice work! I too am fascinated by early Unixes running on low-end PDPs, and the thought of what might have been had someone continued their development. In my case, I’m working with Mini-UNIX (a descendant of LSX) running on the PDP-11/05. Its definitely fun to see 50 year old computer with only 56KiB (of core!) issue a shell prompt and respond to ls!

I think the whole LSX/Mini-UNIX effort was an interesting departure from the historical arc of Unix. While the mainstream Unix versions were repeatedly leaping to ever more capable hardware (and correspondingly larger feature sets), LSX/Mini-UNIX was essentially striving to go the other direction—i.e. to fit Unix into a more constrained environment while retaining most of its functionality and user experience. Coming from an embedded background, I find that sort of do-more-with-less effort fascinating.
 
Make sure that the configuration in header.s matches what is found is param.h. If I recall correctly the default configuration in header.s is a non-LSI (i.e. 11/05) with no EIS support.

Additionally, for some reason the default source has line 576 of mch.s as "_u = 47000". This is only correct if you are building a 10KW kernel. I think the correct value for an 8KW kernel is 37000.
Guessed it is necessary to have the config consistent... I noticed the stock files have EIS set in header.s but not in param.h. Looked somehow wrong. :)
And, many thanks for the hint about mch.s. Will give it a try immediately!
 
Nice work! I too am fascinated by early Unixes running on low-end PDPs, and the thought of what might have been had someone continued their development. In my case, I’m working with Mini-UNIX (a descendant of LSX) running on the PDP-11/05. Its definitely fun to see 50 year old computer with only 56KiB (of core!) issue a shell prompt and respond to ls!

I think the whole LSX/Mini-UNIX effort was an interesting departure from the historical arc of Unix. While the mainstream Unix versions were repeatedly leaping to ever more capable hardware (and correspondingly larger feature sets), LSX/Mini-UNIX was essentially striving to go the other direction—i.e. to fit Unix into a more constrained environment while retaining most of its functionality and user experience. Coming from an embedded background, I find that sort of do-more-with-less effort fascinating.
Yes, that's "Occams razor" coined on computers. I know what you talk about. That's why I love the 11/03 LSX combo so much.
I mean, it's really not much you have. But you can do code development on that little thing. :)
 
@Dare: really, really nice! Currently I have only my laptop as terminal, - but when I expand the terminal window to fullscreen and config the font to 20p in bright green it gets some VT100 smell. ;)

As of kernel build, I got it working. In the end the crashes were caused by ld.
On a LSX system, ld is so friendly to relocate your object code automatically to the start of the userspace which is at 040000. Of course in a kernel build this would mess up all address pointers.
There is a way to suppress the relocation. But don't expect to find it in a UNIX v6 manual, this is LSX specific.
'ld -a' links without relocation. Used that for the kernel link and all was fine.

Nevertheless the hint of ThisPostContainsComputers about line 576 in mch.s was needed too. Thanks for it!
 
Back
Top