muir↗CADR PRESERVED.
QUUX EVOLVED.

MUIR-SYS · RELEASE NOTES

Releases

Every release is a whole band, built from the sources by a clean compile, a new cold load, QLD and a save. There are no patches: a release is replaced by the next one.

QUUX’s releases are numbered from 2000 and the CADR’s are the 1000s. A band runs only on the machine it is for. What each line changed from MIT’s System 100, feature by feature, is on CADR’s system and QUUX’s system.

01 / RELEASE · QUUX

System 2001

2026-10-05 · tag release-2001 · get it

The release for the first 40-bit QUUX, hardware revision 13. It runs only on revision 13, on microcode 2001 and boot PROM 2001: the microcode asks for revision 13 and halts below it.

WHAT CHANGED

  • The 40-bit word. The microcode, the boot PROM and the cold load are made for it: fixnums of 32 bits with an overflow condition, a rotator that is a ring of 40, a map for 28-bit addresses with a seven-bit level-1 entry, and pages of 1024 words, so the disk is read a page at a time, four blocks of 1 KiB. The micro-assembler assembles for 40 bits when asked, and at its default assembles what it did before.
  • A cross build. System 2000’s band compiles the system for the 40-bit machine and writes its cold load, and the cold load made on the first 40-bit band is byte for byte the cross build’s.
  • QUUX’s disk has a PAGE partition of 128M words: 655,360 blocks, 131,072 pages. The disk is 853,359 blocks, 873,839,616 bytes, against System 2000’s 263,245, and the herald says “131072K virtual memory”. System 2000’s PAGE gave fewer words of virtual memory than revision 13’s 32M words of main memory, and at 32M words GC-ON asked “Try garbage collecting after all?” on a stream a TELNET session never answers.
  • The herald names the board QUUX runs on: “Machine Type QUUX on Kria KR260”, or “QUUX” alone when the machine names none. A band booted at a screen size other than the one it was saved at keeps its Chaosnet.
  • A machine whose sys/ holds no ubin/ucadr.tbl boots, on the band’s own error table.
  • The compiled fonts and SYS: DEMO; TVBGAR are 40-bit files, where the tree held System 100’s 32-bit ones, which a 40-bit world refuses to load. The band loads none of them at boot.
  • The cold boot unmaps the physical-page-data table’s unused tail and stops its memory probe below the frame buffer’s window at 1760000000. The page hash table stays spread under the incremental GC at 32M words, where it had slowed it from about 1.5 s to 10 to 19 s for each 100K words consed.
  • Faults fixed, all MIT’s: a compiled (gcd n) with one argument; (and x t) returning t and (or (values x 2) nil) passing one value; GCD of two bignums never negative; a stack group whose saved registers hold a forwarding word resuming; an interpreted special binding surviving a process switch; a full GC leaving every region in the address space map; interpreted LET and closures seeing the variables in scope; and the Chaosnet sending its oldest queued packet first, and none twice.
  • Fixed for 32-bit fixnums: a bignum minus or times −231, the most negative fixnum, is right again, and GCD, \\, LCM, \, REMAINDER and CLI:REM with a float signal the wrong-type error instead of halting the machine.
  • Around the system: tools/release-scan finds a private address that ends a sentence, and tools/release-sums takes the rolling releases’ fixed names.

UPGRADING FROM SYSTEM 2000

Nothing carries over between bands: take the new disk. System 2000’s disk on revision 13 stops in the boot PROM at ERROR-A-MEM-SECTION-32-BITS, and System 2001’s on revision 12 stops in PROM 2000 at ERROR-BAD-ADDRESS.

KNOWN FAULTS

Not fixed: a warm boot that catches the Chaos Background process running asks “Reset it?” at the console, and TELNET is refused until it is answered (answered Yes, the boot completes and keeps the world); LISTF over TELNET traps after the listing; video controller sizes above 1920 by 1080 are not supported; writing a file into a HOST: directory that does not exist offers “Creates the directory and tries again”, which makes the directory and then stops with an invalid proceed type (abort and evaluate the form again, or make the directory first). As in System 2000, and all MIT’s: a date printed MM/DD parses as DD/MM outside the United States; (%div 0 0) returns 0; the inspector traps on a symbol that has a function but no value.

ASSETS

FileBytesSHA-256
release-2001-disk.vhd.gz6,557,6436607f93a20854e52ab823eb145cd68de99d9566f2fab77dda45da9b130b2e71e
release-2001-sys.tar.gz4,761,52971006884aec9c5a82ec107cd3ade85ef0d5ea187f863eeea9d058cd23997e00c
release-2001-promh.mcr155,6485917bae4a5e21806acd40fa9af7bc89a307e45f49cc974ee880c9e4ba002b9ca
SHA256SUMS358b3b2d9c9a2d1151f8f643fc5a6b098c99076cf29babead0c75f3fc2966dab9b5

The disk is a GPT disk as a dynamic VHD, holding microcode 2001 and the band; SHA256SUMS covers the files and the disk uncompressed. The boot PROM is the one part not on the disk, for quux --prom. The tarball unpacks to release-2001/: the repository at the tag, with microcode 2001 and boot PROM 2001 assembled in sys/ubin/. Every change is recorded in docs/release-2001.md.

02 / RELEASE · QUUX

System 2000

2026-09-29 · tag release-2000 · get it

The first release for QUUX, the CADR evolved. It runs only on QUUX, on microcode 2000 and boot PROM 2000, and was built on QUUX, every file compiled.

WHAT CHANGED

  • QUUX only. The band and the microcode check the machine at boot and stop on anything but QUUX hardware revision 11 or later. The system takes its sizes from QUUX’s feature page: the PDL buffer, the level-1 map, the video controller’s screen.
  • QUUX’s own devices, on its register page at 17777400: block-disk, whose disk is a GPT disk (a VHD on the host); a real-time clock, which a boot takes the time from; a file device, through which SYS: is on HOST, the machine’s host folder, so no file server is needed; three interval timers, the tick among them; the video controller, a one-bit frame buffer up to 1920 by 1080.
  • The boot PROM saves nothing and writes nothing to the disk, and resets the devices; the PROM and the microcode find the microcode and the band by the disk’s GPT.
  • Faster simple instructions: the microcode fills QUUX’s MACRO DISPATCH MEMORY at every start, with handlers for moves, pops, branches and three arithmetic instructions on locals and arguments.
  • Time zones by name, a tzdata zone in the site’s :TIMEZONE, and FILE dates in UTC on the wire.
  • Faults fixed in dates (1900, 2000 and after 2100; summer time; four-digit years), division by the most negative fixnum, the error table, QLD, the directory date parser and pathname matching, among others.
  • The herald names the site and the machine type; the site defines LISPM-1 to LISPM-7.

ASSETS

FileBytesSHA-256
release-2000-disk.vhd.gz6,013,0238dd7a9b353339f7be482a0090449e019170c827f330ac44fd889f9e7285caa6f
release-2000-sys.tar.gz4,494,691e953c7d844c787ec43a9d5939badbd31d0f745a792a0b64f78f8932015df9954
release-2000-promh.mcr143,3601fcb62bc6d8cf8e1170a422e1401a2261043d1d1c1f9fb5f3f9450fdc0a54058
SHA256SUMS35899e8f34aeeba038f9072fdd9db517ae231aecca25e84027d35b46dd25e1514fa

The disk is a GPT disk as a dynamic VHD, holding microcode 2000 and the band; SHA256SUMS covers the files and the disk uncompressed. The boot PROM is the one part not on the disk, for quux --prom; it is muir-sim’s built-in QUUX PROM byte for byte. The tarball unpacks to release-2000/: the repository at the tag, with microcode 2000 and boot PROM 2000 assembled in sys/ubin/. Every change is recorded in docs/release-2000.md, its known faults at the end.

03 / IN DEVELOPMENT · QUUX

QUUX’s system in development

rolling · tag dev-system-for-quux · get it

The latest build of the repository’s main branch, published as a pre-release. It is never a fixed release: each new build replaces its files, its README asset names the build and its commit, and its SHA256SUMS covers every file, the README included. For a fixed release, take QUUX’s newest.

04 / RELEASE · CADR

System 1003

2026-10-05 · tag release-1003 · get it

The CADR’s system after System 1002: microcode 1001, more of MIT’s faults fixed, and main memory up to 60 boards. It runs on the CADR, not on QUUX.

MICROCODE 1001

System 1002’s microcode 1000 with fixes, each of a fault of MIT’s:

  • GCD of two bignums is never negative, nor are LCM and compiled GCD;
  • a stack group whose saved registers hold a forwarding word resumes, where the machine halted at SWAPIN+12 or SGENT1+2;
  • an interpreted special binding survives a process switch, so an interpreted CONDITION-CASE no longer now and then signals “The argument CONS was 0, which is not a cons.”;
  • a full GC leaves every region in the address space map, so ROOM and the GC no longer signal “The argument AREA was NIL”;
  • free pages’ entries in the page hash table are spread by frame, which keeps the table from degenerating under the incremental GC;
  • the Chaosnet sends the oldest queued packet first and none twice; four packets queued back to back had gone out 0, 2, 1, 0.

MEMORY

Main memory of up to 60 boards, 3,932,160 words (3840K), all the memory below the I/O space: cadr --main-memory-boards 60 in muir-sim, --main-memory-boards in muir-fpga’s fpgarc. Bands before System 1003, MIT’s System 100 among them, halt in the cold boot on more than 32 boards. The page tables, the wired areas and the cold boot are made for 60 boards; the system now needs at least 2 boards, where System 1002 boots on 1. When a machine has less memory than the tables serve, the herald says how to give the system more.

FIXED

  • The compiler: a compiled (gcd n) or (\\ n) with one argument works; (and x t) returns t and (or (values x 2) nil) passes one value, as the interpreter does. These are MIT’s.
  • The interpreter: an interpreted LET keeps its variables while a closure is made under it, and interpreted closures see the variables in scope.
  • A machine whose sys/ holds no ubin/ucadr.tbl boots, on the band’s own error table.

NEW

  • Around the system: tools/release-build builds a release of this line from one commit; tools/release-scan finds a private address that ends a sentence; tools/release-sums takes the rolling releases’ fixed names; tools/lispm-check fails at once a case that asks a question.

KNOWN FAULTS

Not fixed: a warm boot that catches the Chaos Background process running hangs the network’s start, and a cold boot recovers; at 60 boards the page hash table has transient long runs, which heal on their own. System 1002’s known faults stand, but for the negative GCD: a date printed MM/DD parses as DD/MM outside the United States; (%div 0 0) returns 0; the boot PROM’s PAGE-0-PARITY-FIX touches one word past page 0. The three of System 1002 are MIT’s; the cause of the page hash table’s long runs is not established.

ASSETS

FileBytesSHA-256
release-1003-pack.img.gz6,158,867cf3632a7a2ab0522043994ee004e02b1766ee93b4ba287170566d149de1aed78
release-1003-sys.tar.gz4,507,54783fc38c0236fdb372099641ea2d93e2dd3a9ef905420d8ff1307b3369266b85e

SHA256SUMS, beside them, covers both and the pack uncompressed. The tarball unpacks to release-1003/: the repository at the tag, with microcode 1001 assembled in sys/ubin/. Every change is recorded in docs/release-1003.md.

05 / RELEASE · CADR

System 1002

2026-09-29 · tag release-1002 · get it

The CADR’s system after System 1001: MIT’s time code made right, FILE dates in UTC on the wire, the CADR’s first changed microcode, 1000, and the faults found on the way. It runs on the CADR, not on QUUX.

TIME AND DATES

  • The site’s :TIMEZONE takes a tzdata zone name, such as "Europe/Berlin", and summer time follows that zone’s rule; the example site names Europe/Berlin. A number is a fixed offset with no summer time.
  • FILE dates on the wire are UTC, with the year in four digits; the machine still shows dates in its own local time. The band’s own FILE server sends UTC too.
  • The calendar follows the Gregorian rule: 1900, 2000 and the years from 2100 on were a day off. Encoding and parsing a date agree with decoding on summer time, and the directory date parser checks its fields.
  • The cold load records each file’s date as the server sends it, so QLD loads none of the cold load’s files a second time, nor MINI’s.

MICROCODE 1000

MIT’s 323 with three fixes, each of a fault of MIT’s:

  • dividing by the most negative fixnum no longer corrupts a result or halts the machine;
  • %DRAW-RECTANGLE reads no row below the rectangle;
  • a small-flonum overflow and %ASSURE-PDL-ROOM trap before their return, so proceeding from the trap works.

FIXED

The herald names the site, whatever it is; the error table is loaded at every boot; QLD no longer stops at its second load of the network code; SI:LOAD-MCR-FILE writes a partial last block; the undefined-host fallback of the cold-load pathnames works.

NEW

  • The site defines seven Lisp Machines, LISPM-1 to LISPM-7, at Chaos 177201 to 177207, so up to seven machines run with no site files to edit.
  • Around the system: tools/lispm-check checks a Lisp change on a saved band in seconds; tools/release-scan and tools/release-sums check what a release publishes.

KNOWN FAULTS

Not fixed, and all MIT’s: a date printed MM/DD parses as DD/MM outside the United States; (%div 0 0) returns 0; the greatest common divisor of 290 and −231 comes out negative, as on System 1001; the boot PROM’s PAGE-0-PARITY-FIX touches one word past page 0.

UPGRADING FROM SYSTEM 1001

Nothing carries over between bands: take the new pack, and serve the new sources with ozd at --file-dates utc, its default, from ozd 52eb6b0 on. A site file that gave :TIMEZONE a number now gets that fixed offset all year; name a tzdata zone for summer time.

ASSETS

FileBytesSHA-256
release-1002-pack.img.gz6,155,6589b98b0cb6e5cf329d556652bbd1db4129b53a0fcf2f3c5c51b0680482b92ece4
release-1002-sys.tar.gz4,426,16338fad7231a3876cddda654070273f5b4eabb67a7733860182a09d375898edd4d

SHA256SUMS, beside them, covers both and the pack uncompressed. The tarball unpacks to release-1002/: the repository at the tag, with microcode 1000 assembled in sys/ubin/. Every change is recorded in docs/release-1002.md.

06 / RELEASE · CADR

System 1001

2026-09-23 · tag release-1001 · get it

A deep cleanup of System 1000, and the faults found while making it. What will never be used is gone, not commented out, and git keeps the history.

REMOVED

38 fewer source files and about 21,000 fewer lines.

  • Machines other than the CADR: all of the Lambda and the Explorer, their processor tests, their NuBus and SDU code, their Ethernet and its microcode, and the 28 instruction declarations the CADR’s microcode never implemented.
  • Hosts it does not talk to: ITS, TOPS-20, Tenex, Twenex, VMS and Multics pathnames and hosts, and LMFILE. What remains is UNIX, the local file system, and logical hosts.
  • Hardware nobody here has: the Xerox Press and Dover printing path with EFTP, the XGP printer, the keyboard and PROM firmware tools, the wire-wrap board tester and the Votrax speech demos.
  • Patches. This system makes releases, never patches, so the machinery that loaded and wrote them is gone, with the editor’s commands for it. The version the herald prints is kept, and so is the patch directory it lives in.
  • Other dialects: MacLisp and NIL conditionals, STATUS and SSTATUS, and the compatibility macros; about 400 reader conditionals resolved to what a CADR reads, with no change to the code the reader produces.
  • Dead weight: files no system loaded, disabled blocks, duplicate copies, obsolete names nothing called, and notes that described a machine that is not here.

FIXED

  • The last of MIT’s own unfinished notes are answered.
  • The error handler saves and restores a stack group’s property list again, and returns to single-instruction stepping from a foothold.
  • A property of a function spec that is not a symbol, such as which file a method came from, can be read back again.
  • Over TELNET: ~% sends CR LF, a session whose first input is Return no longer breaks, a line read no longer traps, and a question answered wrongly asks again instead of failing.
  • The who-line shows what a running process is doing, not NIL.
  • The microcode assembler writes the diagnostic microcode files correctly.

NEW

  • A cold load can be driven without a console. It asks the file server for SYS: SITE; COLDRUN LISP and evaluates what it finds, so a build can hand it (SI:QLD) and the save with no screen. It reports its progress with MINI’s new opcode 204, which ozd 26927a8 or later writes to its log.

UPGRADING FROM SYSTEM 1000

Nothing carries over between bands: take the new pack. The 28 unimplemented instruction declarations are gone, freeing octal 732-737, 761-767 and 1100-1116, and MINI has opcode 204. The microcode is unchanged, 323.

ASSETS

FileBytesSHA-256
release-1001-pack.img.gz6,908,9037ddf071b28a6e8b14fe0501683458ee8ae640291751e2c306e35316ee15ba713
release-1001-sys.tar.gz4,344,01774c6ed96d5dcebf6f01a8b5ba1ebebb160ffe345bbcebbd059253b9ca4695be9

The sources asset was replaced on 27 Sep 2026 with the same files owned by root; the file it replaced had SHA-256 507d1fe89e8a8890a42c4a8630ef5eddb058fbebebc4c66df7e33ea708a42269.

The tarball unpacks to release-1001/: the whole repository at the tag, with the assembled microcode in sys/ubin/. Every change is recorded in docs/release-1001.md.

07 / RELEASE · CADR

System 1000

2026-09-23 · tag release-1000 · get it

System 100 fixed and cleaned up: the same sources and microcode 323, the faults that stopped it rebuilding itself repaired, the material that is not MIT’s left out. It continues where System 100 left off.

WHAT CHANGED

  • It rebuilds itself. The fault that stopped a cold load in silence and MINI’s two stream faults are fixed. The band is compiled by the system itself, and the microcode is assembled from its sources.
  • The network: the routing table covers every subnet, and MINI finds its file server by itself.
  • Fixes from LM-3’s later work. LM-3 went on from System 100 to releases 300 through 304. Those are not taken whole, because much of them is LMI and System 130 material; instead 36 of LM-3’s bug fixes are taken one at a time, each read against this tree before it was applied: in the cold-load builder, the compiler, pathnames and the file client, Chaosnet, the window system and ZWEI. docs/upstream-changes.md records every ruling.
  • About forty faults are fixed across the tree.
  • Gone: the tape, LMFILE and Xerox printing systems. Only System is patchable, and what is not MIT’s, or not wanted, was never imported.
  • The site is named MIT, as System 100 has it, so the herald says "MIT System". Only the name is taken: the hosts are this site’s own, numbered from the subnet’s first address, OZ at 177200 and LISPM-1 at 177201 on subnet 376.

ASSETS

FileBytesSHA-256
release-1000-pack.img.gz7,092,2503a7a9ed31a342ccd1d8b21390b39243e977068c036f023a84e5f3177b74a6c4f
release-1000-sys.tar.gz4,515,803529328c85be589ff80f9cebb7dc4b594479d375fbed7b5016ce9070a69e6be1e

The sources asset was replaced on 27 Sep 2026 with the same files owned by root; the file it replaced had SHA-256 939193ba71cb2b9e59616ee232f918cf727e5480f414c904ecb777baf498a823.

The tarball unpacks to release-1000/: sys/ and site/ with LICENSE and NOTICE, and the assembled microcode in sys/ubin/. Every change is recorded in docs/release-1000.md.

08 / RUNNING A RELEASE

Running a release.

muir-sim’s fetch scripts do the first steps for you: tools/fetch-system-for-quux.sh, on muir-sim’s tag quux-revisions-13-15, fetches QUUX’s current release, tools/fetch-dev-system-for-quux.sh the system in development, and tools/fetch-system-for-cadr.sh the CADR’s current release, each checked against its SHA-256 sums. By hand, QUUX’s release N with muir-sim’s quux needs no file server: its SYS: is on the machine’s file device, so its host folder holds sys/ and site/ from the sources and a home for the login.

gunzip release-N-disk.vhd.gz
tar -xzf release-N-sys.tar.gz
mkdir -p root/home/lispm
cp -a release-N/sys release-N/site root/

quux --micro --disk-pack release-N-disk.vhd --file-root $PWD/root

The machine boots to "MIT System, band 1 of LISPM-1". quux serves the screen, keyboard and mouse over RFB, for any VNC viewer. Log in with (login "LISPM" "HOST" t).

A CADR band expects its site’s Chaosnet: subnet 376, with its file, time and host table server OZ at 177200, which ozd provides, and the machine LISPM-1 at 177201. For the CADR’s release N, with muir-sim’s cadr:

gunzip release-N-pack.img.gz
tar -xzf release-N-sys.tar.gz
mkdir lispm

ozd --address 177200 --name OZ,system=UNIX \
    --root sys=$PWD/release-N/sys --root site=$PWD/release-N/site \
    --root lispm=$PWD/lispm \
    --host 177201,LISPM-1,system=LISPM --peer 177201@127.0.0.1:42043 \
    --tcp 127.0.0.1:2323,TELNET@177201

cadr --micro --disk-pack release-N-pack.img \
    --chaos-address 177201 --chaos-udp 42043 \
    --chaos-udp-peer 177200@127.0.0.1:42042 --chaos-udp-default-peer 127.0.0.1:42042

The machine boots to "MIT System, band 1 of LISPM-1". muir-sim serves the screen, keyboard and mouse over RFB, for any VNC viewer, and telnet 127.0.0.1 2323 reaches its Lisp Listener through ozd. Log in with (login "LISPM" "OZ" t) before touching files.

For Systems 1000 and 1001, add --file-dates mit --timezone -1, their site’s zone, to ozd’s command; ozd’s flags say why.