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 · tagrelease-2001 · get itThe 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-ONasked “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 noubin/ucadr.tblboots, on the band’s own error table. - The compiled fonts and
SYS: DEMO; TVBGARare 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)returningtand(or (values x 2) nil)passing one value;GCDof 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; interpretedLETand 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,\,REMAINDERandCLI:REMwith a float signal the wrong-type error instead of halting the machine. - Around the system:
tools/release-scanfinds a private address that ends a sentence, andtools/release-sumstakes 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
| File | Bytes | SHA-256 |
|---|---|---|
release-2001-disk.vhd.gz | 6,557,643 | 6607f93a20854e52ab823eb145cd68de99d9566f2fab77dda45da9b130b2e71e |
release-2001-sys.tar.gz | 4,761,529 | 71006884aec9c5a82ec107cd3ade85ef0d5ea187f863eeea9d058cd23997e00c |
release-2001-promh.mcr | 155,648 | 5917bae4a5e21806acd40fa9af7bc89a307e45f49cc974ee880c9e4ba002b9ca |
SHA256SUMS | 358 | b3b2d9c9a2d1151f8f643fc5a6b098c99076cf29babead0c75f3fc2966dab9b5 |
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 · tagrelease-2000 · get itThe 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 onHOST, 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
| File | Bytes | SHA-256 |
|---|---|---|
release-2000-disk.vhd.gz | 6,013,023 | 8dd7a9b353339f7be482a0090449e019170c827f330ac44fd889f9e7285caa6f |
release-2000-sys.tar.gz | 4,494,691 | e953c7d844c787ec43a9d5939badbd31d0f745a792a0b64f78f8932015df9954 |
release-2000-promh.mcr | 143,360 | 1fcb62bc6d8cf8e1170a422e1401a2261043d1d1c1f9fb5f3f9450fdc0a54058 |
SHA256SUMS | 358 | 99e8f34aeeba038f9072fdd9db517ae231aecca25e84027d35b46dd25e1514fa |
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 · tagdev-system-for-quux · get itThe 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 · tagrelease-1003 · get itThe 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:
GCDof two bignums is never negative, nor areLCMand compiledGCD;- a stack group whose saved registers hold a forwarding word resumes, where the machine halted at
SWAPIN+12orSGENT1+2; - an interpreted special binding survives a process switch, so an interpreted
CONDITION-CASEno 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
ROOMand 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)returnstand(or (values x 2) nil)passes one value, as the interpreter does. These are MIT’s. - The interpreter: an interpreted
LETkeeps its variables while a closure is made under it, and interpreted closures see the variables in scope. - A machine whose
sys/holds noubin/ucadr.tblboots, on the band’s own error table.
NEW
- Around the system:
tools/release-buildbuilds a release of this line from one commit;tools/release-scanfinds a private address that ends a sentence;tools/release-sumstakes the rolling releases’ fixed names;tools/lispm-checkfails 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
| File | Bytes | SHA-256 |
|---|---|---|
release-1003-pack.img.gz | 6,158,867 | cf3632a7a2ab0522043994ee004e02b1766ee93b4ba287170566d149de1aed78 |
release-1003-sys.tar.gz | 4,507,547 | 83fc38c0236fdb372099641ea2d93e2dd3a9ef905420d8ff1307b3369266b85e |
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 · tagrelease-1002 · get itThe 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
:TIMEZONEtakes 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-RECTANGLEreads no row below the rectangle;- a small-flonum overflow and
%ASSURE-PDL-ROOMtrap 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-checkchecks a Lisp change on a saved band in seconds;tools/release-scanandtools/release-sumscheck 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
| File | Bytes | SHA-256 |
|---|---|---|
release-1002-pack.img.gz | 6,155,658 | 9b98b0cb6e5cf329d556652bbd1db4129b53a0fcf2f3c5c51b0680482b92ece4 |
release-1002-sys.tar.gz | 4,426,163 | 38fad7231a3876cddda654070273f5b4eabb67a7733860182a09d375898edd4d |
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 · tagrelease-1001 · get itA 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,
STATUSandSSTATUS, 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 LISPand 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
| File | Bytes | SHA-256 |
|---|---|---|
release-1001-pack.img.gz | 6,908,903 | 7ddf071b28a6e8b14fe0501683458ee8ae640291751e2c306e35316ee15ba713 |
release-1001-sys.tar.gz | 4,344,017 | 74c6ed96d5dcebf6f01a8b5ba1ebebb160ffe345bbcebbd059253b9ca4695be9 |
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 · tagrelease-1000 · get itSystem 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.mdrecords 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
| File | Bytes | SHA-256 |
|---|---|---|
release-1000-pack.img.gz | 7,092,250 | 3a7a9ed31a342ccd1d8b21390b39243e977068c036f023a84e5f3177b74a6c4f |
release-1000-sys.tar.gz | 4,515,803 | 529328c85be589ff80f9cebb7dc4b594479d375fbed7b5016ce9070a69e6be1e |
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.