COLD BOOT · issue 02 · 12 A5 pages · print this page to get the zine

Issue 02 · a Lisp Machine zine

COLD
BOOT

ジャーンTA-DA
コールドブート

LMZ System 1000 boots as the LMZ site's machine. This issue gives it a site of its own and names of its own.

LMZ System 1000 · subnet 376 · COLDBOOT-LISPM-1

Cold Boot
09/17/26 14:26:42USER:Cold-bootedp.01

I'm back. Last time I booted System 100 as MIT-LISPM-1.

LMZ System 1000's pack calls me LISPM-1, at the LMZ site. Today I get my own names.

What changes by page 12

         before     after
site     LMZ        COLDBOOT
CADR     LISPM-1    COLDBOOT-LISPM-1
OZ       OZ         COLDBOOT-OZ
pack     LISPM-1    COLDBOOT-LISPM-1
band     LOD1       LOD2

The addresses stay as they are: OZ at 177200, the CADR at 177201.

This issue
  1. CASTNew crewp.03
  2. EP.1LMZ System 1000p.04
  3. EP.2Subnet 376p.05
  4. EP.3The pack as it comesp.07
  5. EP.4Four filesp.09
  6. EP.5New name, new bandp.11
  7. ENDLinks and docsp.12
Cold Boot · Hello
09/17/26 14:26:42USER:Keyboardp.02
Cast

New crew

Issue 01's crew: muir, the CADR in software, and ozd, OZ as a daemon. This issue, the software on the pack joins them.

よろしくNICE TO MEET YOU
LMZ

The system: MIT's Lisp Machine software, made usable today.

From
MIT's System 99.32, as LM-3 brought it up as System 100
Release
LMZ System 1000, 17 September 2026
Built by
itself: the band on its pack was compiled by LMZ System 1000 from its own sources
Licence
GNU AGPL 3.0 or later

LMZ is what I run this time.

And I serve its sources at /sys.

Cold Boot · Cast
09/17/26 14:26:42USER:Keyboardp.03
Ep.1

LMZ System 1000

LMZ's first release is two files on GitHub: a disk pack, and the sources its band was built from.

$ mkdir -p ~/lmz && cd ~/lmz
$ R=https://github.com/metebalci/lmz/releases/download/lmz-1000
$ curl -LO $R/lmz-1000-pack.img.gz
$ curl -LO $R/lmz-1000-sys.tar.gz
$ gunzip -k lmz-1000-pack.img.gz
$ tar -xzf lmz-1000-sys.tar.gz

What is in ~/lmz now

Pack
lmz-1000-pack.img, named LISPM-1: microcode 323 in MCR1, the band in LOD1
sys/
lmz-1000/sys, the system's sources
site/
lmz-1000/site, the LMZ site the band was built with: an example to copy and readdress
Cold Boot · Ep.1 LMZ System 1000
09/17/26 14:26:42USER:Keyboardp.04
Ep.2

Subnet 376

A site of its own needs addresses that belong to nobody else. chaosnet.net keeps one subnet for that.

“one subnet has been reserved as a private, non-routed subnet. … This is similar to the IP Private networks such as 10.x.y.z or 192.168.x.y.”

“That subnet is 376 (octal, = 254 decimal) which gives addresses 177001-177377 octal.”

chaosnet.net/local

376

An address is sixteen bits in octal, the subnet and then the host. 177201 is subnet 376, host 201.

シーンSILENCE

Today the Global Chaosnet joins Chaosnets over modern protocols. Packets from subnet 376 are not sent to other subnets, so they never reach it.

The LMZ site already lives on 376: OZ is 177200, and a machine LISPM-n is 177200 plus n. So I am 177201.

Cold Boot · Ep.2 Subnet 376
09/17/26 14:26:42USER:Keyboardp.05
Ep.2

OZ and the CADR on 376

In the ozd directory. OZ serves ~/lispm, where the new site will go, and LMZ's sources at /sys. It already answers to the names it will have.

$ mkdir -p ~/lispm
$ target/release/ozd --address 177200 \
    --name COLDBOOT-OZ,OZ,system=UNIX \
    --root ~/lispm \
    --root sys=$HOME/lmz/lmz-1000/sys,ro \
    --host 177201,COLDBOOT-LISPM-1,LM1,system=LISPM \
    --peer 177201@127.0.0.1:42043

In the muir directory. Start the CADR at 177201 on the pack.

$ target/release/muir --micro \
    --disk-pack ~/lmz/lmz-1000-pack.img \
    --chaos-address 177201 --chaos-udp 42043 \
    --chaos-udp-peer 177200@127.0.0.1:42042 \
    --terminal 0.0.0.0:5900

--micro is muir's fastest engine, and the machine's clock runs fast with it. --pace holds the machine to its own speed.

Same ports as issue 01: I listen on 42042, and the CADR on 42043.

muir writes to the pack as the machine does. Keep lmz-1000-pack.img.gz if you want the original back.

Cold Boot · Ep.2 OZ and the CADR on 376
09/17/26 14:26:42USER:Keyboardp.06
Ep.3

The pack as it comes

No date to type: the band's host table already has OZ at 177200, and OZ tells it the time. It says:

LMZ System, band 1 of LISPM-1. 2048K physical memory, 16127K virtual memory. Experimental System 1000, Microcode 323. LMZ Lisp Machine One, with associated machine OZ. 1 2
  1. 1band 1 of LISPM-1. The pack is named after its machine, LISPM-1.
  2. 2LMZ Lisp Machine One. The band's site is LMZ, and it calls the machine Lisp Machine One.

(print-disk-label) lists the pack's partitions. The star marks the current band.

Current microload = MCR1, current virtual memory load (band) = LOD1
LOD1 at block 65569, 49419 blocks long, Exp 1000, starred; LOD2, LOD3 and LOD4 empty.

LOD1, "Exp 1000", is current. LOD2 to LOD4 are empty.

Cold Boot · Ep.3 The pack as it comes
09/17/26 14:26:42USER:Keyboardp.07

A band carries the site it was saved with: the site's options, its host table, and where its machines are.

So a new name needs new site files. Where does the band look for them?

It reads them from SYS: SITE; and LMZ's sys.translations sends that to OZ:

("SITE;" "//site//")

That is /site/ on OZ. Our OZ serves ~/lispm there, which has no site/ yet.

So we write our own four files into /site/, on the Lisp Machine itself.

(login 'lispm) T. (fs:create-directory oz: //site//) NIL. 1 2
  1. 1(login 'lispm). Log in on OZ, the associated machine.
  2. 2(fs:create-directory …). Make /site/ on OZ.

Press no Return: the Listener runs a form at its closing parenthesis. In this syntax a slash quotes the next character, so each / in a path is typed //.

Now open ZMACS on the first site file.

(ed "oz: //site//site.lisp")
ZMACS (LISP) * site.lisp /site/ OZ: (New File)
Cold Boot · Ep.3 A site of our own
09/17/26 14:26:42LISPM USER:Keyboardp.08
Ep.4 · Four files

In ZMACS, type each file and save it with Control-X Control-S. Control-X Control-F and a name, such as hosts.text, opens the next one in /site/.

site.lisp: the site's name and options. :TIMEZONE is hours earlier than GMT, so Switzerland is -1.

;;;-*- Mode:LISP; Package:SYSTEM-INTERNALS; Base:8 -*-
(DEFSITE :COLDBOOT
  (:SYS-LOGIN-NAME "LISPM")
  (:SYS-LOGIN-PASSWORD "LISPM")
  (:TIMEZONE -1)
  (:CHAOS-FILE-SERVER-HOSTS '("COLDBOOT-OZ"))
  (:CHAOS-TIME-SERVER-HOSTS '("COLDBOOT-OZ"))
  (:CHAOS-HOST-TABLE-SERVER-HOSTS '("COLDBOOT-OZ")))

hosts.text: the two hosts, their addresses and nicknames.

;;; -*- Mode:Text -*-
HOST COLDBOOT-OZ,      CHAOS 177200,SERVER,UNIX,UNIX,[OZ]
HOST COLDBOOT-LISPM-1, CHAOS 177201,USER,LISPM,CADR,[LM1]

lmlocs.lisp: where the CADR is, and its associated machine.

;;; -*- Mode:Lisp; Package:SYSTEM-INTERNALS; Base:10. -*-
(DEFCONST MACHINE-LOCATION-ALIST
 '(("COLDBOOT-LISPM-1" "Lisp Machine One"
    "Cold Boot" (COLDBOOT 1) "OZ")))

sys.translations: where SYS: files live on OZ.

;;;-*- Mode:LISP; Package:FS; Base:10 -*-
(SET-LOGICAL-PATHNAME-HOST "SYS"
  :PHYSICAL-HOST "COLDBOOT-OZ"
  :TRANSLATIONS '(("SITE;" "//site//")
                  ("*; *; *;" "//sys//*//*//*//")
                  ("*; *;" "//sys//*//*//")
                  ("*;" "//sys//*//")))
Cold Boot · Ep.4 Four files
09/17/26 14:26:42LISPM USER:Keyboardp.09

Back in the Listener (SYSTEM L), (make-system 'site :compile) builds the site. It asks before each step: type y.

(make-system 'site :compile). File to be read: SYS: SYS; SYSDCL LISP. Read it? (S, Y, or N) Yes. Reading SYS: SYS; SYSDCL LISP. File to be generated into host table: SYS: SITE; HOSTS TEXT. Generate host table from it? (S, Y, or N) Yes. Generating host table from SYS: SITE; HOSTS TEXT in package CHAOS
Files to be compiled: SYS: SITE; SITE LISP, SYS: SITE; LMLOCS LISP, SYS: SITE; HSTTBL LISP. Compile all three of them? (S, Y, or N) Yes. Compiling each into its package.
Files to be loaded: SYS: SITE; SITE QFASL, LMLOCS QFASL, HSTTBL QFASL. Load site files because of changes in all three of them? (S, Y, or N) Yes. Loading site files on account of each. T

T, and I am COLDBOOT-LISPM-1 already. The pack still says LISPM-1.

Cold Boot · Ep.4 make-system
09/17/26 14:26:42LISPM USER:Keyboardp.10
Ep.5

New name, new band

Name the pack. The name goes into the disk label at once.

(si:set-pack-name "COLDBOOT-LISPM-1")
"COLDBOOT-LISPM-1"

Save this world into LOD2, which is empty.

(disk-save 2). Do you really want to clobber partition LOD2 on unit 0 ()? (Yes or No) yes. This is now: Experimental System 1000, Microcode 323. Additional comment for herald:

Type yes and Return, then Return again for no comment. The machine saves band 2 and boots it.

I booted band 2, but the pack still boots band 1. One more form.

(set-current-band 2). The new current band LOD2 should work properly with the ucode version that is already current. T
COLDBOOT-LISPM-1: Trident T-300, LMZ 1000. Current microload = MCR1, current virtual memory load (band) = LOD2
Cold Boot · Ep.5 New name, new band
09/17/26 14:26:42LISPM USER:Keyboardp.11

Cold boot the pack again. It boots band 2, with my own names.

LMZ System, band 2 of COLDBOOT-LISPM-1. 2048K physical memory, 16127K virtual memory. Experimental System 1000, Microcode 323. COLDBOOT Lisp Machine One, with associated machine OZ.
End

Links and docs

Links Docs
Lisp Machine Manual
Site options, and Updating Site Information. tumbleweed.nu/r/lm-3/uv/chinual.html
Chaosnet
David A. Moon. MIT AI Memo 628, 1981. hdl.handle.net/1721.1/6353
つづく

TO BE CONTINUED

Cold Boot is made by Mete Balci, with help from Claude Opus 5 and OpenAI GPT-6 Astra. Set in Dela Gothic One, Zen Maru Gothic and IBM Plex Mono, in two colours: black and fluorescent pink. The screens are from muir. Send feedback to coldboot@metebalci.com.

© 2026 Mete Balci. Licensed under CC BY-SA 4.0.