This emulator came about because years ago I was a programmer for RSTS/E on a PDP 11/45 and had admired the console idle loop light pattern - but I couldn't quite remember how it looked. Given the lack of availability of real systems it became time to write an emulator!
This is that PDP 11/45 emulator which is put together from my earlier PDP 11/70 emulator. Because a PDP 11/45 has less memory it cannot run some of the software a PDP 11/70 can.
The PDP 11/45 was released in 1972 and is an older less powerful version of the PDP 11/70 released in 1975. It is the second implementation of the PDP 11 following on after the PDP 11/20, which had an odd coupling of a 16 address bit processor to an 18 address bit bus. Naturally then, the PDP 11/45 had to include some form of memory management.
The PDP 11/45 has the same processor as the PDP 11/70 but lacks 22 bit addressing, restricting it to 124KW of memory instead of 4MB. It also lacks unibus mapping and a number of the PDP 11/70's special control registers. But still it has three addressing modes (Kernel, Supervisor, and User) and implements split Instruction and Data addressing. Split I&D cause Instruction memory references based on the the use of the program counter, to operate seperately from general Data addressing. As a result a program can have 32768 words of instruction memory AND 32768 words of data. Some of the newer operating systems such as BSD require this to fit programs into memory. Sadly a PDP 11/45 can't run BSD because the system maximum memory limit of 124KW is not sufficient to load the entire operating system.
One wonders if these types of memory restrictions, which ultimately killed the PDP 11, influenced the design of Unix to be more modular. Perhaps leading to things like shell piping of data between small programs.
If you plan to run the emulator repeatedly or for a project, consider downloading the emulator to your own machine or server. This will significantly speed any of the emulator disk accesses and response times. All files and emulator OS disks can be found in the top level folder of http://skn.noip.me/pdp11/
There are many PDP emulators out there and I have never seen what I consider to be a complete list. Some of the really interesting ones can be found by googling terms such as "vhdl pdp 11". However the gold standard seems to be SIMH at Trailing Edge. A different approach to Javascript PDP 11 emulation can be found at www.pcjs.org.
I believe that the first PDP 11 emulator would be SIM-11 written in FORTRAN before the first PDP 11/20 hardware was even built - see How the PDP-11 Was Born. There is more PDP 11 history at www.hampage.hu.
Of course if you want your own PDP 11/70 front panel you might consider one of these.
Happy emulating!
Paul Nankervis
Disk | OS | Comment |
RK0 | Unix V5 | Boot using: unix then login as root |
RK1 | RT11 v4.0 | The lightest/fastest OS here |
RK2 | RSTS V06C-03 | Boot and login as 1,2 with password SYSTEM or as 11,70 using PDP |
RK3 | XXDP | Diagnostic OS and utilities |
RK4 | RT-11 3B | Distribution for RT-11 Version 3B |
RK5 | RT-11 V5.4F | Distribution for RT-11 Version 5.4F |
RL0 | BSD 2.9 | Boot using: rl(0,0)rlunix CTRL/D to get to multiuser |
RL1 | RSX 11M v3.2 | Fails on a PDP 11/45 |
RL2 | RSTS/E v7.0 | Option: <LF> Suboption: <LF> ... Login as 1,2 using SYSTEM or 11,70 using PDP |
RL3 | XXDP | Larger version of diagnostics - including PDP 11/70 utilities |
RP0 | ULTRIX-11 V3.1 | CTRL/D to enter multiuser mode. Login as root with no password |
RP1 | BSD 2.11 | Fails on a PDP 11/45 |
RP2 | RSTS/E v9.6 | Answer boot questions and login as 1,2 (password SYSTEM) or 11,70 (no password) |
RP3 | RSX 11M v4.6 | Starts logged in as 1,2 (password SYSTEM) - user accounts 200,1 (no password) or 11,70 (password PDP) |
Note: Disks are shown in approximately order size. The RK05 disks at the top are small and not too bad to use across a network. The RP06 disks at the bottom can be rather slow.
BOOT> boot rk0 @unix login: root # date Fri Mar 21 12:09:02 EST 1975 # chdir /etc # pwd ../etc # ls -al total 40 drwxr-xr-x 2 bin 240 Mar 21 12:07 . drwxr-xr-x 9 bin 160 Jan 29 16:14 .. -rwxr--r-- 1 bin 474 Nov 26 18:13 getty -rwxr-xr-x 1 bin 1446 Nov 26 18:13 glob -rwxr--r-- 1 bin 1972 Nov 26 18:13 init -rwxr-xr-x 1 bin 814 Nov 26 18:13 lpd -rwxr--r-- 1 bin 4136 Nov 26 18:13 mkfs -rwxr--r-- 1 bin 1800 Nov 26 18:13 mknod -rwsr-xr-x 1 root 2078 Nov 26 18:13 mount -rw-r--r-- 1 bin 49 Nov 26 18:13 passwd -rw-r--r-- 1 bin 70 Nov 26 18:13 rc -rw-r--r-- 1 bin 56 Nov 26 18:13 ttys -rwsr-xr-x 1 root 1990 Nov 26 18:13 umount -rwxr-xr-x 1 bin 32 Nov 26 18:13 update -rw-r--r-- 1 root 144 Mar 21 12:09 utmp # cat /etc/passwd root::0:1::/: daemon::1:1::/bin: bin::3:1::/bin: # cal 10 1981 Oct 1981 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # ls -al /bin total 339 drwxr-xr-x 2 bin 944 Nov 26 18:13 . drwxr-xr-x 9 bin 160 Jan 29 16:14 .. -rwxr-xr-x 1 bin 1514 Nov 26 18:13 ar -rwxr-xr-x 1 bin 7308 Nov 26 18:13 as -rwxr-xr-x 1 bin 6042 Nov 26 18:13 bas -rwxr-xr-x 1 bin 152 Nov 26 18:13 cat -rwxr-xr-x 1 bin 5668 Nov 26 18:13 cc ...
BOOT> boot rk1 RT-11SJ V04.00C .D 56=5015 .TYPE V4USER.TXT Welcome to RT-11 Version 4. RT-11 V04 provides new hardware support and some major enhancements over Version 3B ... .D 56=0 .MAC BOOT ERRORS DETECTED: 0 .LINK BOOT .DIR BOOT BOOT .MAC 16 BOOT .OBJ 4 BOOT .SAV 4 3 Files, 24 Blocks 2851 Free blocks .DIR SWAP .SYS 25 01-Feb-82 RT11BL.SYS 65 01-Feb-82 RT11SJ.SYS 67 01-Feb-82 RT11FB.SYS 80 01-Feb-82 TT .SYS 2 01-Feb-82 DT .SYS 3 01-Feb-82 DP .SYS 3 01-Feb-82 DX .SYS 3 01-Feb-82 ...
BOOT> boot rk2 RSTS V06C-03 Vixen (DK2) Option: ST You currently have: JOB MAX = 31, SWAP MAX = 28K. JOB MAX or SWAP MAX changes? N Default memory allocation table specifies nonexistent memory. Table will be reset by RSTS. Memory allocation table: 0K: 00000000 - 00147777 ( 26K) : EXEC 26K: 00150000 - 00247777 ( 16K) : RTS (BASIC) 42K: 00250000 - 00757777 ( 82K) : USER 124K: 00760000 - End : NXM Table suboption? You currently have crash dump disabled. DD-MMM-YY? 31-OCT-76 12:00 PM? 11:45 INIT V06C-03 RSTS V06C-03 Vixen Command File Name? DETACHING... HELLO RSTS V06C-03 Vixen Job 2 KB0 31-Oct-76 11:45 AM #11/70 Password: PDP Ready DIR/S Name .Ext Size Prot Access Date Time Clu RTS Open SY:[11,70] ACEY .BAS 5 < 60> 31-Oct-76 31-Oct-76 07:19 AM 1 RT11 0 TREK .BAS 16 < 60> 31-Oct-76 31-Oct-76 06:58 AM 1 BASIC 0 TREK .DOC 9 < 60> 31-Oct-76 31-Oct-76 06:58 AM 1 RT11 0 ANIMAL.BAS 5 < 60> 31-Oct-76 31-Oct-76 06:59 AM 1 BASIC 0 STRTRK.BAS 27 < 60> 31-Mar-81 31-Mar-81 12:00 M 2 RT11 0 STRTR1.BAS 9 < 60> 31-Mar-81 31-Mar-81 12:06 PM 2 BASIC 0 ADVENT.DOC 4 < 60> 13-Mar-77 20-Jul-85 06:50 AM 1 RT11 0 ADVENT.SAV 93 <124> 13-Mar-77 20-Jul-85 06:50 AM 1 RT11 0 ADVENT.VAR 22 < 60> 13-Mar-77 20-Jul-85 06:50 AM 1 RT11 0 ADVTXT.TXT 125 < 60> 13-Mar-77 20-Jul-85 06:50 AM 1 RT11 0 SYSMAC.SML 42 < 60> 13-Mar-77 13-Mar-77 06:42 AM 1 BASIC 0 HELLO .MAC 1 < 60> 13-Mar-77 13-Mar-77 06:43 AM 1 RT11 0 BOOT .MAC 24 < 60> 13-Mar-77 13-Mar-77 06:43 AM 1 RT11 0 Total of 382 blocks in 13 files in SY:[11,70] Ready RUN ADVENT WELCOME TO ADVENTURE!! WOULD YOU LIKE INSTRUCTIONS? NO YOU ARE STANDING AT THE END OF A ROAD BEFORE A SMALL BRICK BUILDING. AROUND YOU IS A FOREST. A SMALL STREAM FLOWS OUT OF THE BUILDING AND DOWN A GULLY. EAST YOU ARE INSIDE A BUILDING, A WELL HOUSE FOR A LARGE SPRING. THERE ARE SOME KEYS ON THE GROUND HERE. THERE IS A SHINY BRASS LAMP NEARBY. THERE IS FOOD HERE. THERE IS A BOTTLE OF WATER HERE. TAKE FOOD OK TAKE KEYS OK LIGHT LAMP YOUR LAMP IS NOW ON. QUIT DO YOU REALLY WANT TO QUIT NOW? YES OK YOU SCORED 32 OUT OF A POSSIBLE 350, USING 6 TURNS. YOU ARE OBVIOUSLY A RANK AMATEUR. BETTER LUCK NEXT TIME. TO ACHIEVE THE NEXT HIGHER RATING, YOU NEED 4 MORE POINTS. Ready RUN TREK ORDERS: STARDATE = 2000 AS COMMANDER OF THE UNITED STARSHIP ENTERPRISE, YOUR MISSION IS TO RID THE GALAXY OF THE DEADLY KLINGON MENACE. TO DO THIS, YOU MUST DESTROY THE KLINGON INVASION FORCE OF 22 BATTLE CRUISERS. YOU HAVE 40 SOLAR YEARS TO COMPLETE YOUR MISSION. ( I.E. UNTIL STARDATE 2040 ) GIVE COMMAND 'END' TO STOP THE GAME EARLY. DO YOU REQUIRE FURTHER INSTRUCTIONS? N DO YOU WANT A CHART? Y 1 2 3 4 5 6 7 8 --------------------------------- 1 : : : : : : : : : --------------------------------- 2 : : : : : : : : : --------------------------------- 3 : : : : : : : : : --------------------------------- 4 : : : : : : : : : --------------------------------- 5 : : : : : : : : : --------------------------------- 6 : : : : : : : : : --------------------------------- 7 : : : : : : : : : --------------------------------- 8 : : : : : : : : : --------------------------------- YOU ARE CURRENTLY IN QUADRANT 5 - 2 --------------- B . . . . . . . . * . . . . . . . . . . . . E . . . . . . . . . . . * . . . . . * . . . . . . . . . . . . . . . . . . . . * . . --------------- STARDATE: 2000 CONDITION: YELLOW QUADRANT: 5 - 2 SECTOR: 7 - 3 ENERGY: 3000 PHOTON TORPEDOS: 10 KLINGONS: 22 COMMAND? ^C Ready SYSTAT RSTS V06C-03 Vixen status at 31-Oct-76, 11:47 AM Up: 2:08 Job Who Where What Size State Run-Time RTS 1 [OPR] Det ERRCPY 5K SR 3.7 BASIC 2 [SELF] KB0 SYSTAT 8K RN Lck 4.6 BASIC Busy Devices: None Disk Structure: Disk Open Free Cluster Errors Name Comments DK2 3 315 1 0 VIXEN Pub, DLW Small Large Jobs Hung TTY's Errors 385 1 2/2 0 0 Run-Time Systems: Name Ext Size Users Comments BASIC BAC 16(16)K 2 Perm, Addr:26, KBM, CSZ RSX TSK 2(28)K 0 Non-Res, KBM RT11 SAV 4(28)K 0 Temp, Addr:49, KBM, CSZ, EMT:255 RMS11 TSK 4(28)K 0 Non-Res Message Receivers: Name Job Msgs Max Senders ERRLOG 1 0 40 Priv Ready RUN $SWITCH Run-Time System to switch to? RT11 .MACRO HELLO=HELLO ERRORS DETECTED: 0 .LINK HELLO=HELLO .RUN HELLO HELLO, WORLD! .BYE Confirm: Y Saved all disk files; 384 blocks in use, 116 free Job 2 User 11,70 logged off KB0 at 31-Oct-76 11:47 AM System RSTS V06C-03 Vixen Run time was 5.3 seconds Elapsed time was 2 minutes Good morning
BOOT> boot rk3 CHMDKB1 XXDP+ DK MONITOR BOOTED VIA UNIT 2 28K UNIBUS SYSTEM ENTER DATE (DD-MMM-YY): <CR> RESTART ADDR: 152010 THIS IS XXDP+. TYPE "H" OR "H/L" FOR HELP. .D ENTRY# FILNAM.EXT DATE LENGTH START 1 HDDKB0.SYS 2-JAN-70 2 000112 2 HMDKB1.SYS 2-JAN-70 17 000113 3 HDDKB1.SYS 2-JAN-70 2 000114 4 HSAAC4.SYS 8-DEC-82 24 000115 ....
BOOT> boot rl0 :boot 45Boot : rl(0,0)rlunix CONFIGURE SYSTEM: xp 0 csr 176700 vector 254 attached rk 0 csr 177400 vector 220 attached hk ? csr 177440 vector 210 skipped: No CSR rl 0 csr 174400 vector 160 attached rp ? csr 176700 vector 254 interrupt vector already in use ht 0 csr 172440 vector 224 skipped: No CSR tm 0 csr 172520 vector 224 skipped: No CSR ... Erase=^?, kill=^U, intr=^C # ls -al total 546 drwxr-xr-x11 root daemon 512 Mar 7 09:00 . drwxr-xr-x11 root daemon 512 Mar 7 09:00 .. -rw-rw-r-- 1 root daemon 164 Sep 29 09:20 .cshrc -rw-rw-r-- 1 root daemon 266 Mar 7 08:43 .login -rw-rw-r-- 1 root superuse 2 Jul 26 16:00 .msgsrc -rw-rw-r-- 1 root daemon 116 Mar 30 00:59 .profile -rw-r--r-- 1 root superuse 56 Nov 20 16:03 2.9stamp -rw-rw-r-- 1 root superuse 450 Mar 30 00:50 READ_ME drwxrwxr-x 2 bin bin 1632 Nov 20 16:04 bin -rwxrwxr-x 1 root superuse 23572 Mar 7 09:05 boot ... # cat /etc/passwd root::0:2:The Man:/:/bin/csh toor::0:2:The Man:/: daemon:***:1:1:The devil himself:/: sys:***:2:1::/: bin:***:3:1::/: uucp::4:1:UNIX-to-UNIX Copy:/usr/spool/uucppublic:/usr/lib/uucp/uucico notes:***:5:1:Notesfiles maintainer:/usr/spool/notes: anon:***:6:1:Notesfiles anonymous user:/usr/spool/notes: news:***:7:1:News maintainer:/usr/spool/news: wnj:ZDjXDBwXle2gc:8:2:Bill Joy,457E,7780:/a/guest/wnj:/bin/csh dmr:AiInt5qKdjmHs:9:2:Dennis Ritchie:/a/guest/dmr: ken:sq5UDrPlKj1nA:10:2:& Thompson:/a/guest/ken: mike:KnKNwMkyCt8ZI:11:2:mike karels:/a/guest/mike:/bin/csh carl:S2KiTfS3pH3kg:12:2:& Smith,508-21E,6258:/a/guest/carl:/bin/csh joshua::999:2:&:/usr/games:/usr/games/wargames # CTRL/D Wed Dec 31 16:04:16 PST 1969 /etc/fstab: No such file or directory /usr/sys: No such file or directory init: /dev/tty07: cannot open ... Berkeley Unix 2.9BSD :login: root Welcome to the 2.9BSD (Berkeley) UNIX system. tty: Command not found. # ls -al /bin total 1182 -rwxrwxr-x 1 bin bin 8692 Dec 31 16:59 # drwxrwxr-x 2 bin bin 1632 Nov 20 16:04 . drwxr-xr-x11 root daemon 512 Mar 7 09:00 .. -rwxrwxr-x 2 bin bin 2917 Dec 31 16:59 [ -rwxrwxr-x 1 bin bin 30340 Mar 24 08:27 adb -rwxrwxr-x 1 bin bin 9844 Dec 31 16:58 ar -rwxrwxr-t 1 bin bin 5626 Sep 30 17:39 as -rwxrwxr-x 1 bin bin 4508 Jan 18 08:22 cat -rwxrwxr-t 1 bin bin 7314 Oct 9 04:04 cc -rwxrwxr-x 1 bin bin 5096 Dec 31 16:59 chgrp -rwxrwxr-x 1 bin bin 3364 Dec 31 16:59 chmod ...
BOOT> boot rl2 RSTS V7.0-07 Vixen (DL2) Option: <LF> You currently have: JOB MAX = 63, SWAP MAX = 31K. Default memory allocation table specifies nonexistent memory. Table will be reset by RSTS. Memory allocation table: 0K: 00000000 - 00203777 ( 33K) : EXEC 33K: 00204000 - 00303777 ( 16K) : RTS (BASIC) 49K: 00304000 - 00757777 ( 75K) : USER 124K: 00760000 - End : NXM Table suboption? <LF> You currently have crash dump enabled. CRASH.SYS file of 50 blocks is not available Crash dump automatically disabled DD-MMM-YY? 31-OCT-81 12:00 PM? 12:00 INIT V7.0-07A RSTS V7.0-07 Vixen Command File Name? <CR> DETACHING... ... HELLO 1,2 Password: system Job 1 is detached under this account Job number to attach to? <CR> 1 other user is logged in under this account WELCOME TO RSTS/E V7.0 TIME SHARING Ready PRINT "Hello world",PI*4 Hello world 12.5664 Ready DIR Name .Ext Size Prot Date SY:[1,2] CREATE.LOG 3 < 60> 31-Oct-81 LOGIN .SAV 13 <232> 23-Sep-79 LOGOUT.SAV 11 <232> 23-Sep-79 PIP .SAV 50 <232> 23-Sep-79 ... Ready SYSTAT RSTS V7.0-07 Vixen status at 31-Oct-81, 12:01 PM Up: 1:53 Job Who Where What Size State Run-Time Pri/RB RTS 1 [SELF] Det ERRCPY 5/31K SR 7.5 0/6 BASIC 2 [SELF] KB0 SYSTAT 11/31K RN Lck 9.0 -8/6 BASIC Busy Devices: None Disk Structure: Disk Open Free Cluster Errors Name Comments DL2 2 5568 2 0 VIXEN Pub, DLW Small Large Jobs Hung TTY's Errors 478 0 2/8 0 0 Run-Time Systems: Name Ext Size Users Comments BASIC BAC 16(16)K 2 Perm, Addr:33, KBM, CSZ RT11 SAV 4(28)K 0 Temp, Addr:65, KBM, CSZ, EMT:255 TECO TEC 8(24)K 0 Non-Res Resident Libraries: None Message Receivers: Name Job Msgs Max Senders ERRLOG 1 0 40 Priv Ready
BOOT> boot rl3 CHMDLD0 XXDP+ DL MONITOR BOOTED VIA UNIT 3 28K UNIBUS SYSTEM ENTER DATE (DD-MMM-YY): <CR> RESTART ADDR: 152010 THIS IS XXDP+. TYPE "H" OR "H/L" FOR HELP. .D ENTRY# FILNAM.EXT DATE LENGTH START 1 MMDP .SAV 3-MAR-83C 17 000310 2 MTDP .SAV 3-MAR-83C 17 000331 3 HSAAD0.SYS 3-MAR-83 24 000352 4 HSABC0.SYS 3-MAR-83 28 000402 5 HSACC0.SYS 3-MAR-83 27 000436 6 HSADB0.SYS 3-MAR-83 25 000471 7 HUDIB0.SYS 3-MAR-83 5 000522 8 HELP .TXT 3-MAR-83 14 000527 ...
BOOT> boot rp0 Sizing Memory... Boot: hp(0,0)unix (CTRL/C will abort auto-boot) Load device (? for help, <RETURN> if none) < ht tm ts tk rx rl rc > ? <CR> hp(0,0)unix: 14784+17024+8192+8000+8064+8000+8064+8128+8000+7808+7936+7936+7680+7360+1344 ULTRIX-11 Kernel V3.1 realmem = 253952 buffers = 25600 clists = 1600 usermem = 94784 maxumem = 94784 erase = delete, kill = ^U, intr = ^C #
BOOT> boot rp2 RSX-11M V4.6 BL56 124.K MAPPED >RED DB1:=SY: >RED DB1:=LB: >MOU DB1:RSXM56 >@DB1:[1,2]STARTUP >* PLEASE ENTER TIME AND DATE (HR:MN DD-MMM-YY) [S]: <CR> >TIM 00:00:11 29-APR-74 >* ENTER LINE WIDTH OF THIS TERMINAL [D D:132.]: <CR> >SET /BUF=TI:132. >ACS SY:/BLKS=1024. >; >; This system startup command file (LB:[1,2]STARTUP.CMD) contains a >; template of commands to initialize the queue print spooler and queue .... >INS LB:[1,54]INI.TSK >INS LB:[1,54]MAC.TSK >@ <EOF> >BYE Have a nice day 29-APR-74 00:00 TT0: logged off VIXEN
BOOT> boot rp3 RSTS V9.6-11 VIXEN (DB3) INIT V9.6-11 Today's date? 31-OCT-86 Current time? 10:02 Start timesharing? <Yes> <CR> Cannot use extra 12K of buffers. Reduced to 11K. Size of monitor has changed from 73K to 72K. Default memory allocation table shows MORE memory than INIT detects on this machine. Adjusting memory table. Not enough room for current allocation of XBUF. Resetting memory table. Memory allocation table: 0K: 00000000 - 00363777 ( 61K) : EXEC 61K: 00364000 - 00727777 ( 57K) : USER 118K: 00730000 - 00757777 ( 6K) : XBUF Memory available to RSTS/E is 124K words. 31-Oct-86 10:02 AM 11 devices disabled Proceed with system startup? <YES> <CR> Beginning RSTS/E system startup... 31-Oct-86 10:02 AM Installing monitor overlays 31-Oct-86 10:02 AM Mounting disks 31-Oct-86 10:02 AM Assigning logical names 31-Oct-86 10:02 AM Starting error logging 31-Oct-86 10:02 AM Setting system characteristics 31-Oct-86 10:02 AM Installing run-time systems and libraries install/library/noaddress=unrestricted EDT$:EDT ^ ?Memory would be fragmented 31-Oct-86 10:02 AM Setting terminal characteristics 31-Oct-86 10:02 AM Defining system commands 31-Oct-86 10:02 AM Setting printer characteristics 31-Oct-86 10:02 AM Starting spoolers *** From [1,2] on KB0: at 10:02 AM 31-Oct-86 ** RSTS/E is on the air...
Plenty! Especially in the places where I haven't managed to figure out what a real PDP 11/45 should do. :-( Core PDP 11/45 stuff is well documented but some lesser used system functions require reverse engineering to understand.
If you have something you want me to look at let me know and I'll prioritise. However always happy to accept fixes!