Zork I, Infocom's underground adventure, running on a computer
first delivered in 1962

Zork, on a 1960s computer

Infocom's Zork I now runs on an ICT 1301, a British business computer announced in 1960 and first delivered in 1962. That makes it, as far as I can find, the oldest computer design ever to run any version of Zork: four years older than the PDP-10 hardware the game was written on, and nine years older than the Intel 4004, the previous record for a retro Zork port.

Zork is one of the first adventure games. You explore the ruins of the Great Underground Empire by typing commands in plain English, such as open mailbox or take lamp, and the game describes what happens. It was written at MIT in 1977 on a PDP-10, and Infocom later split it into three games for home computers. Zork I, the first of them, was published in 1980 and ran on almost every micro of the day.

Zork I now runs on the ICT 1301 too, on Virtual Flossie, the simulation of the very first 1301 delivered to a customer. The game is Infocom's own, unchanged: release 119 of Zork I, which Microsoft released under the MIT licence in November 2025. It is run by a new interpreter written in 1301 machine code. You play it on Flossie's Flexowriter typewriter, the game loads from magnetic tape, and you can save your progress to another tape.

ComputerIntroducedZork
ICT 1301 (Flossie)Announced 1960, delivered 1962Zork I, this port, on the Virtual Flossie simulation
DEC PDP-101966The original 1977 Zork, its home machine
Intel 40041971Zork I, a 2025-26 hobby port on real hardware

It runs on the simulation, not on the real Flossie, which is in storage at The National Museum of Computing. And a search can't prove there isn't something older: if you know of Zork running on an earlier machine, I'd like to hear about it.

Can you help? See the story of the real Flossie's amazing survival and more info at Welcome to Virtual Flossie. The mostly working machine (mainly due to the enormous efforts of the ICT 1301 Resurrection Project team) had to be relocated and was dismantled and donated to TNMOC to save it yet again! It's sitting in storage as it takes a huge amount of floor space which TNMOC just doesn't have enough of! The team and I would LOVE for this historic machine to be on display and being worked on again .. maybe we could see ZORK running on the real hardware some day! It would take an enormous amount of money and effort, but if you are or know someone with deep pockets, you never know!

The opening, as Flossie's Flexowriter types it. Your commands are in red. Zork's > prompt becomes * on the Flexowriter.

Playing Zork on Virtual Flossie

Zork loads from a magnetic tape, started by three punched cards, just as a program would have been run on the real machine. You need Virtual Flossie running in a modern browser on a PC or Mac.

Get ready

  1. Set the Mill Switch to Hex, (it's in the top right menu under Options). The game needs it and as a physical switch on Flossie and a program can't set it.
  2. Click tape drive 1 (The first of the circular magnetic drive icons top left) and choose Zork I from the tape library.
  3. Click tape drive 2 and choose Load Blank Tape. This is where your saved games go.
  4. Open the punched card drawers by clicking the "Programs" Icon top left.
  5. Choose Programs (DirectToIAS) then ZORKBOOT to put its three cards in the card reader. (You can close the info panel by clicking the x on the right edge).

Start it

  1. Press C key for the simulator to position you at the console (or use the WASD keys to move closer yourself! Shift will make you sit on the chair if close enough)
  2. Open the Flexowriter window. (Options > Flexowriter. You can drag the Flexowriter window and resize if needed)
  3. On the console, look for the set of switches in the middle marked "Manual Indicators" with the numbers 20 to 29 beneath.
  4. Set Manual Indicator 29 down, and no others. (This tells Flossie's Initial Orders to read in and run the ZORK punched card boot program).
  5. Press Initial Orders, then Start.

You should see the Magnetic Tape Deck 1 start reading and all of the wonderful blinkenlights on Flossie flashing! The tape runs for about 30 seconds while the game is copied to the drums (the ICT 1301's version of hard disks), then the Flexowriter types the opening.

Play

  • Type a command at the * prompt and press Enter. Escape starts the line again.
  • Flossie takes about 20 seconds to work out each move, then types the reply at ten characters a second.
  • save writes your game to the tape on drive 2. To keep it, click tape drive 2 and choose Save Tape (MTF).
  • restore reads a saved game back: load the saved tape on drive 2 first.
  • restart starts again from the beginning.

More detail

If you want a bit more technical detail on what this is doing, click these titles below.

What the boot cards do

Initial Orders reads the cards in its "input of programs to I.A.S. only" mode, chosen by Manual Indicator 29. The leader card gives the first address, the entry point, the number of words and cards, and a check total. The program card holds three instructions for IAS 0000-0002. The trailer card makes Initial Orders check the count and the total, then jump to 0000.

000000000000004000000000119843005821000000000005000000000003420371 390021001820724002004001005820000000000000000000000000000000420004 004395

The three instructions read the first block of the tape on drive 1 into IAS 1820, wait for it, and jump to it. That block is a 24-word loader which reads the rest of the tape: 179 blocks for the drums, then the interpreter itself, and finally a jump that starts the game.

Starting without the card reader

The same three instructions can be entered from the console instead, in IAS 0000-0002:

IASWordWhat it does
0000390021 001820Read the first block from drive 1 into IAS 1820
0001724002 004001Wait until it has been read
0002005820 000000Jump to the loader at 1820

For each word: Auto Manual to Manual and Hold CR; set the word on the Arithmetic Register switches and press its Set button; set Control Register 1 to 410000 (then 410001, 410002) and press Set; press Start. Then switch back to Circ + 1 and Auto, set Control Register 1 to 004000, press Set, and press Start.

How it was done

Infocom wrote Zork for an imaginary computer, the Z-machine, so that the same game file could run on any real computer with a small interpreter. This port is such an interpreter, for the 1301. But the 1301 is nothing like the 8-bit micros Infocom wrote for:

ICT 1301 (Flossie)What Zork expects
Word48 bits, held as 12 decimal digits8-bit bytes and 16-bit words
ArithmeticDecimal, sterling, and hex through the Mill SwitchBinary
Main store2,000 words of core memoryAbout 70 KB of game memory
Backing storeThree drums of 12,000 words, read ten words at a time in about 18 msA floppy disk
InstructionsTwo to a word; no index registers; shifts by whole digits only16-bit addresses, bitwise operations
TerminalThe Flexowriter, ten characters a secondA screen

Two halves

A preprocessor, run once on a modern computer, turns the Zork game file into the contents of Flossie's drums. It packs Zork's memory four bytes to a 1301 word, in 256-byte pages that each start on a drum decade, so that any page can be read or written with a single drum transfer. It converts all of the game's text into Flexowriter codes, so the 1301 never has to decode Infocom's compressed text. And it builds the tables the interpreter needs to find text and look up words in the dictionary.

The interpreter, in 1301 machine code, fetches each Z-machine instruction from the game, decodes it and carries it out: arithmetic, branches, calls and returns, the stack, the game's objects and their properties, printing, reading what you type, and saving and restoring. The drums end up holding the game's memory, about 9,700 words of text, the tables and the less-used parts of the interpreter: some 35,700 of their 36,000 words.

Fitting into 2,000 words

The hardest part was the store. Its 2,000 words have to hold the interpreter, Zork's stack, a cache of the game's memory and room to print. The first version needed about 2,300 words. The final one has nine to spare.

IASHolds
0010-1110The interpreter and its working values
1120-1229Zork's stack (the deepest seen in play is 90 words)
1230-1405Tables: one jump for each Z-machine instruction, and those for finding memory
1410-1599Space for one overlay at a time
1600-1879Four 256-byte pages of the game's memory
1880-199980 text abbreviations, and buffers for the drum and for printing

Six ideas made it fit, and the last also made it quick enough to play:

  • Game memory is paged in from the drum. Only four pages of Zork's memory are in the store at once. A new page replaces the one used longest ago, which is written back to the drum first if the game changed it. Replaying Zork's real memory accesses showed why this matters: a simpler design, where each page could only go in one place, needed three times as many drum transfers.
  • Rare code waits on the drum. Division, random numbers, moving objects about, reading the keyboard, splitting what you type into words, and saving and restoring are in five overlays, each read into the store with one drum transfer when it is needed.
  • A call wastes no space. When the 1301 jumps, the rest of the word it jumped from is left in Register A, and that becomes the return address. So the instruction after a call sits in the same word as the call and is carried out on the way back.
  • Hex digits index tables directly. Function 28 adds a number to the address in the next instruction, which is how the 1301 looks things up in a table. The adder is decimal, but its excess-six correction also copes with a hex digit of 10 to 15, as long as the address's last digit plus the hex digit is no more than 19. Each table is placed so that this holds, and no conversion is needed.
  • Text is found by decimal numbers. Messages kept in Zork's memory have their first two bytes replaced by an index written in decimal digits, which the interpreter adds straight to a table address to find the text on the drum.
  • Instruction fetch keeps the word in hand. The interpreter holds the memory word it is reading instructions from, shifted so the next byte is on top. Taking a byte costs four instructions, and the page is only looked up again at the next word.

Text on a typewriter

The Flexowriter types upper and lower case, and each change of case costs a shift code and a character time. The shift codes are already in place in the converted text, and the interpreter skips any shift the Flexowriter is already in: about 7% extra typing. Eighty abbreviations, each one word of the store, compress the text by a third. Lines are word-wrapped at 72 characters, so a sentence the game prints in pieces wraps as one.

Some of Zork's punctuation isn't available on the Flexowriter, so the text is adjusted: can't becomes cannot, the troll's axe becomes the trolls axe, quotation marks become asterisks, question and exclamation marks become full stops, and the > prompt becomes *.

Tapes

The whole game, with its loader, fits on one magnetic tape of 193 blocks. The loader reads each block and looks at its first word: drum blocks begin with the very instruction that writes them to the drum, which the loader simply obeys; the interpreter's blocks begin with the address to copy them to; the last block is a jump that starts the game. Between blocks it waits for the tape to stop before using the drum, as the 1301's manual requires.

save writes 46 blocks to the tape on drive 2: Zork's stack and position, then the 45 pages of memory the game can change. Virtual Flossie couldn't write magnetic tape before this project. It now models the half-inch tape system from the 1301's Programmers Reference Manual, with its write, backspace and cancel orders, timings, indicators and writing rings.

How fast is it?

The opening takes about 50 seconds, and each move about 20 seconds of computing before Flossie starts typing the reply. Each Z-machine instruction takes about 570 instructions of the 1301, and about 40% of the time goes on drum transfers when a page of the game isn't in the store. Slow by today's standards, but no slower than a 1960s user at a teleprinter would have expected.

Why make this?

I have been fascinated by the ICT 1301, the amazing piece of computing history, for many years since I first came across it at TNMOC. As one of the UK's earliest successful business computers, it's an important stepping stone from Bletchley Park and Alan Turing's original steps towards computing and the modern PCs, computers and mobile devices we use today!

I started working on a virtual working simulation around 2002 when I realised that the real machine wasn't likely to be setup any time soon and I wanted to understand how this early transistorised computer functioned. Fortunately the ICT 1301 Resurrection Project who worked on the real Flossie when it was active stored and scanned a lot of the original manuals and most importantly, the code of the Inital Orders disk structure (kind of the ICT 1301's operating system) which allows it read punched cards and start working! It took well over a year to complete the main simulation to get it running some of the original code.

More recently this year, 2026, I've been working with Roger Holmes and some of the other original Galdor programmers to make the simulation more closely match the alterations that Galdor made to Flossie over the years and to add many more of the hardware components of the machine. I've added devices for the magnetic tape drives, the Freden Flexowriter typewriter interface plus many other features not on the original machine.

Once that was completed, I needed some way to really test out the simulation and the new tapes and typewriter and what better way than one of the original text adventures .. I had no idea of the rabbit hole (or rather dungeon corridor) I was about to embark into .. but it's been well worth the effort!

Martin Gillow Virtual Colossus

Thanks

Infocom, for Zork I and the Z-machine, and Microsoft, for releasing Zork I under the MIT licence.
Roger Holmes (previous owner and programmer of Flossie), for checking the 1301 hardware behaviour and many many hours of email correspondance to get Virtual Flossie working as close to the original hardware as possible!
Stuart Fyfe and Galdor Computing, for information on the Flexowriter interface and its tapes.
The National Museum of Computing and the ICT 1301 Resurrection Project at http://www.ict1301.co.uk/ for all of the help, documentation and recovery of some of Flossie's magnetic tapes.
The interpreter, preprocessor and tests were written with Claude (Anthropic).