Welcome to the machine. This guide walks you through every page of the emulator — from the very first boot to the deepest configuration options — so you can spend your time in the machine room, not in the documentation.
Everything below applies to both the browser version and the Tauri desktop app.
On your very first launch the emulator greets you with a short onboarding hint that explains what to do right away — which page to open, the mounted guest OSes and their boot commands. A Quick boot button next to Got it opens the wizard directly, so a first-time user can see a guest OS running in one click:
In a hurry? Use the magic wand button in the top-right corner of the window. It stays on every page except Info. One click does everything:
media/manifest.json), plus any images you have imported by drag & drop. Paper tapes always stay listed.boot rk0 → unix → login root).
The wizard is prompt-aware: it watches the console output and types the login only when the guest actually prints login:, so slow boots with lots of output (e.g. 2.11 BSD) still reach the prompt reliably. Each guest also declares the machine profile it wants — e.g. RT-11/RSX/RSTS enable the LP11 line printer, and Unix V5/BSD force a teletype console — so the wizard reconfigures the machine if needed and resumes the boot automatically. Every wizard boot starts on a fresh page (clean paper and clear screens).
While the sequence is being typed, a toast says "Autoloading in progress…" and locks the emulator's input: the terminals, the front panel and the page itself ignore the keyboard and the mouse, so nothing you type can race the wizard's own characters into the console. The only way out before it finishes is the toast's Take control! button — it aborts the autoload at once and hands the machine back to you.
Disk and tape images run to several megabytes, so on a slow link the machine can sit silent for a while. A thin Loading N% bar along the bottom of the window shows how much of the image has arrived — during an autoload, a manual boot or a mount alike.
@ prompt, type boot rp1 and press ENTER.root (no password).ls, ps -aux, df — or compile a C program with cc.The boot command is upper case in the manual (BOOT RK1) because that is what works on every console: a Model 33 ASR teletype has no lower-case type at all, so a lower-case command can never reach the machine from it. On a video terminal (VT52 or VT100) lower case works just as well — the guest folds it.
Every switch, LED, and rotary knob of a real PDP-11/70 is faithfully recreated. The Panel page is where you toggle in a bootstrap loader the way DEC engineers did in the 1970s.
A simple light chaser — toggle this in to see the address and data LEDs dance:
Switch sequence: HALT, 001000, LOAD ADDRESS
012700, DEPOSIT
000001, DEPOSIT
006100, DEPOSIT
000005, DEPOSIT
000775, DEPOSIT
001000, LOAD ADDRESS, ENABLE, START
Restart the bootloader:
HALT, 120000, LOAD ADDRESS, ENABLE, START
The Bootstrap now! button refuses to start the machine while it is powered off:
The dialog also offers a shortcut to the CONFIG Auto-boot option: tick the checkbox to start the default bootstrap automatically on every future power-on, without visiting the Config page. The choice persists and stays in sync with the CONFIG page checkbox.
The operator console is what the PDP-11 uses as its TT0: — the machine's own typewriter. Depending on the CONFIG page, it is a Model 33 ASR teletype or one of the two video terminals: a DECscope VT52 (see below) or a DEC VT100.
The console is rendered as an authentic light-cream/beige Model 33 ASR: a paper roll behind the rising sheet, a glass carriage window, and a stamped Teletype Corporation logo on the lower face plate.
z to A – Z only when the Upper Case Only CONFIG option is enabled (off by default, so 2.11 BSD receives lower case).A real Model 33 ASR print mechanism has no lower-case type, so machine output is printed in upper case (on by default) and a loader that writes lower case cannot put those letters on the paper. The punched tape still records the raw byte — reading such a tape in LOCAL prints upper case, while in LINE the original lower case reaches the machine.^H) rendering: re-printing the same glyph gives bold, underscores give underline, and striking a different glyph leaves the real dark overstrike blot a hard-copy terminal makes..ptap (as saved by the punch or the Storage page), a compressed .ptap.zst, or a plain .txt whose characters become 7-bit tape codes. The full tape hangs from the reader slot down to the bottom of the window, its ragged free end torn like the punched tape's — once it reaches the bottom it is scrolled with the mouse wheel (like the punched tape, it draws no scrollbar). As the tape is read it visibly moves up through the slot and shortens, swinging on every byte; when the last byte is read the tape has gone into the machine and a new one can be loaded.DC3 / X-OFF, resumed by DC1 / X-ON);Clicking a position label jumps straight to it; clicking the round switch disc itself turns it one detent clockwise (START → STOP → FREE → AUTO), like rotating the real switch.
When the console terminal is set to a VT52, the operator console becomes a DECscope with its authentic white/grey (P4) phosphor on a black tube — see User Terminals below for the full behaviour, which is shared.
Set the console terminal to VT100 and the console becomes a DEC VT100 — the ANSI terminal that succeeded the DECscope. It is drawn in its own cabinet, at its own proportions (the artwork is the terminal's, not a restyled DECscope), and it shares everything that is not the tube itself: the page layout, the zoom button and double-click zoom, the STATE/REBOOT placement and the keyboard handling.
A VT100 is a superset of the VT52, exactly as the hardware was: the DECscope sequences still work and the terminal adds the ANSI grammar (CSI sequences, DEC private modes, scrolling regions, G0/G1 character sets), which it speaks from power-on — a VT100 is a CRT-only machine and has no hardcopy mode to enter first. What never existed on the hardware is refused rather than faked: ESC Y direct addressing, ESC F/ESC G graphics on/off, the VT52 keypad modes and the VT52 identification reply. Asked who it is (CSI c) the VT100 answers VT100 with AVO, and CSI ? 2 h (DECANM) drops it into VT52 compatibility mode, as the real machine did.
Two CONFIG options belong to this terminal alone: the tube phosphor — P4 white, the phosphor the VT100 was introduced on, or P1 green — and the key click (the DECscope's keyboard was mechanical and has no click to make). The VT52 reverse video switch is the DECscope's own and never touches a VT100: there, inverse text comes from the SGR 7 attribute the software sends.
Up to two user video terminals (shown only when configured on the CONFIG page) let guest OSes that prefer video terminals run side by side. Each is a DECscope VT52 or a DEC VT100, chosen independently (None | VT52 | VT100), and each is drawn in the cabinet of the terminal you picked — the DECscope's slanted monoblock (an off-white moulded-plastic cabinet with a vent grille, a recessed screen in a deep bezel and a plain side panel with a raised ridge) or the VT100's own enclosure. Input comes from the physical keyboard, as on the original machines.
fritzm/vt52 bitmap display font (monospace is the fallback until the webfont loads).^L) both wipe the display and home the cursor, so clear and multi-page nroff/man output start each page from the top row.Ctrl+C / Ctrl+V / right-click paste) for fast source-code entry — at the cost of the SGR emphasis rendering.The LP11 is an animated line printer on wide 132-column paper (72/80/100/132 selectable). It has no keyboard — it only prints. Use the Print button to send the accumulated jobs to the real OS printer via the system dialog, or Save.txt to export the output (page breaks are kept as \f markers).
?LP0: I/O error) instead of silently discarding the job.lpr / lpd) sends FF between jobs so each starts on a fresh page: it fills the rest of the sheet (66 lines at 6 LPI) and closes it with a dashed fold/perforation marker.An optional DEC VT11 vector-graphics display processor on its own green-phosphor CRT page (1024×768 logical resolution, auto-scaled to fit the window), enabled from the CONFIG page. Lunar Lander uses it — the quick-boot wizard enables the display and switches to the Display page automatically.
The Storage page manages every kind of storage media. It has two tabs — Images and Paper Tapes — because the two workflows are completely different. An image is a whole device mounted into the machine and remembered between sessions; a paper tape is a stream of bytes that the reader walks through from the first frame to the end.
Images tab:
.dsk, .tap, .ptap and their .zst-compressed forms are supported. While the Storage page is active you can also drop a file anywhere over the window: a full-window drop target appears. A.zst file is a zstd frame and the browser unwraps it on the fly, so a downloaded image needs no unpacking first.RP1.DSK.ZST becomes rp1.dsk, which is why the guest boots it with boot rp1. Rename the file to the unit you want to use — or leave the name alone and bind the image to a drive afterwards (see below). The table below maps every device to its drive, its controller and its boot command.Which file is which device:
| Image | Drive | Controller | Boot it with |
|---|---|---|---|
| rk0 … rk5 | RK05 disk cartridge | RK11 | boot rkN |
| rl0 … rl3 | RL01 / RL02 cartridge | RL11 | boot rlN |
| rp0 … rp4 | RP04 / RP06 disk pack | RP11 | boot rpN |
| ra0 … ra2 | RA80 / RA81 (MSCP) | UDA50 | boot raN |
| tm0 … tm2 | 9-track magnetic tape | TM11 | boot tmN (RSTS restores with ROLLIN) |
| *.ptap | Paper tape reader / punch | PTR11 | boot pr |
.ptap drop zone and the punch-tape export.Paper Tapes tab:
#ptr) holding the tapes this build ships — BASIC-11 V007A, ODT-11X-V004A, ED-11-V004B, Lunar Lander and the bootstrap loader — plus any.ptap you dropped. Load one and boot it with BOOT PR..ptap and .ptap.zst — dropped tapes are added to the reader file selector.Note: the paper-tape reader is driven by the console bytes — every byte echoed to the console
punches a matching row of holes on the ASR paper tape.
The round STATE button (top-left corner, right of REBOOT) opens the machine-state dialog — a full save/restore of the emulated PDP-11, not just the CPU: registers, memory, every I/O device (console, terminals, printer, disks, tape and the paper-tape reader/punch), the paper in the teletype and LP11, the video-terminal screen contents (VT52 and VT100 alike) and even the VT11 vector-display picture are all captured. Think of it as a save file of the whole machine.
The STATE button mirrors REBOOT and is available on the Panel, Console (teletype, VT52 or VT100) and TTY pages. States are stored in the browser's IndexedDB and survive reloads and sessions.
The Config page controls the emulated peripherals and is persisted between sessions. The form is split into four tabs, with the Apply and Restore defaults actions in a bar below the tabs:
None | VT52 | VT100 and each with its own sidebar page; the number of terminals is read off the two selects, and TT2 can only be filled once TT1 is.
Leaving the Config page with uncommitted changes asks for confirmation, so nothing is lost silently:
Structural changes (console type, terminals, printer, VT11 display) are committed with Apply, which restarts the machine so the emulated hardware matches the configuration. Print widths, teletype speed, the Upper Case Only and Force PDP Output Uppercase flags, key click, reverse video, CRT effects, VT52 text mode, machine hum and the photo backdrop apply immediately. Restore defaults fills the form with factory values (committed by Apply); the four live BEHAVIOUR options — Reboot confirmation, Help Me! sticker, Machine power and Auto-boot — are reset to their factory values immediately, without waiting for Apply (the machine powers down, since the factory state is off).
The hum is synthesized with Web Audio on its own audio channel, so it never cuts off the teletype/printer or the VT100 key-click sounds.
The emulator ships with ready-to-boot disk and tape images. Just type boot <device> at the @ prompt at the @ prompt — or pick one with the magic wand. In a build with a reduced image set (e.g. the Minimal desktop variant), rows whose image is not shipped are dimmed and marked image not in this build — the table shows exactly what can boot here.
| Disk | Operating System | Boot Command | What Happens | Credentials |
|---|---|---|---|---|
| RK0 | Unix V5 | boot rk0 |
unix → login as root |
root |
| RK1 | RT-11 v4.0 | BOOT RK1 |
boots immediately to monitor prompt | |
| RK2 | RSTS V06C-03 | BOOT RK2 |
wizard answers START at the Option: prompt | |
| RK3 | XXDP (diagnostics) | BOOT RK3 |
DEC field diagnostic operating system | |
| RK4 | RT-11 3B Distribution | BOOT RK4 |
RT-11 distribution baseline | |
| TM0 | RSTS 4B-17 (tape) | BOOT TM0 |
follow ROLLIN restore procedure | |
| RL0 | BSD 2.9 | boot rl0 |
rl(0,0)rlunix → CTRL/D → login root |
root |
| RL1 | RSX-11M v3.2 | BOOT RL1 |
login 1,2 password SYSTEM |
|
| RL2 | RSTS/E v7.0 | BOOT RL2 |
wizard answers START at the Option: prompt | |
| RL3 | XXDP (extended) | BOOT RL3 |
extended diagnostics library | |
| RP0 | ULTRIX-11 V3.1 | boot rp0 |
boots to a single-user shell (multi-user is a known emulator bug) | |
| RP1 | BSD 2.11 | boot rp1 |
autoboots to multiuser, login root (no password) | root (no password) |
| RP2 | RSTS/E v9.6 | BOOT RP2 |
boots to the date prompt; then 11,70 / PDP |
11,70 (PDP) |
| RP3 | RSX-11M v4.6 | BOOT RP3 |
auto-logs 1,2 SYSTEM |
|
| RP4 | RSTS/E v10.1 | BOOT RP4 |
boots to the date prompt; then 11,70 / PDP |
11,70 (PDP) |
Use the sidebar to switch between:
| Control | Where | What it does |
|---|---|---|
Magic wand |
Top-right corner (every page except Info) | Quick-boot picker — chooses a guest OS, reconfigures, reboots and types the boot/login. See Quick Start. |
Reboot |
Top-left corner, just right of the sidebar (Panel, Console and TTY pages) | Round button with a restart icon. Restarts the machine; when Auto-boot is enabled it also boots the built-in default loader. By default a confirmation dialog asks first, with a "Don't show this warning anymore" option. The dialog also carries an Auto-boot shortcut: tick Start the default bootstrap automatically after reboot to run the default loader after this reboot — it is the CONFIG Auto-boot option itself, persists, and stays in sync with the CONFIG page checkbox. Without Auto-boot the machine halts after the reboot. The confirmation dialog is shown below. |
Mute |
Bottom-left corner, just right of the sidebar | Round button that toggles all sounds at once — hum, teletype/LP11, paper feed/tear, key clicks and the bell. State is persisted with the rest of the configuration. |
Fullscreen |
Bottom-right corner of the window | Floating button that hides the browser/system chrome (address bar, OS window frame, taskbar) while leaving the emulator UI untouched. Press again or Esc to return. |
Terminal zoom |
Bottom-right corner, left of the fullscreen button | Floating button that hides the terminal cabinet and grows the tube to the largest 4:3 box the window allows. The state is remembered per terminal. |
Each output sidebar button has a small blinking green LED in its top-right corner: it pulses while the PDP-11 writes output to that console/terminal (and blinks for the whole print job on the Printer button), then switches off about half a second after the output stops.
If a guest OS image cannot be fetched completely — a big BSD image dropped by the hosting server mid-download, or an image that is not bundled in the Minimal desktop build — the emulator doesn't stall silently. A dialog in the same shared modal style as the first-run hint explains that the image is incomplete and offers Open Storage, which jumps straight to the drop zone for a manual drag & drop of the downloaded file.
The wording adapts to the environment: a page opened as a local file:// explains that the browser blocks fetching the media directory (and suggests a local web server), while the Tauri Minimal build explains that the image is not shipped and points to the drop zone.
A snapshot stores the machine's memory and registers, not the disk image itself: on restore it is layered back onto whatever disk the emulator currently ships. If that disk has been updated since the snapshot was taken, the two no longer match — the guest's file system in memory would not describe the disk underneath it, which shows up as a corrupted file system rather than as anything obvious.
The emulator detects this and refuses the restore instead of corrupting the disk. It names the image and both builds, and offers to delete the snapshot:
Take a fresh snapshot on the current build, or delete the stale one — a snapshot cannot be migrated onto a disk it was not taken from.
Prefer a native app? The same emulator is packaged as an offline desktop application for Windows x64 and Linux with Tauri. Two installer variants are available:
| Variant | Ships | Notes |
|---|---|---|
| Minimal | rk0 (Unix V5), rk1 (RT-11), bootcode + the demo paper tapes (BASIC-11, ODT-11, ED-11, Lunar Lander) | ≈19 MB on Windows. The download is the application itself — artwork and audio — while the bundled images add about 1 MB. All other images are dragged & dropped at runtime. |
| Full | every image — RK/RL/RP/RA disks, TM tapes, all paper tapes | ≈103 MB on Windows, but all fifteen bootable images boot offline with zero extra steps. |
On Linux the installation size for every configuration may be substantially larger (it depends on the package format).