Table of Contents

MILO

MILO, the Alpha Linux Miniloader, is a boot loader and minimal firmware for Alpha systems. It initializes the machine, loads Linux, and provides the PALcode that Linux runs on. 1) It is used on systems with the ARC or AlphaBIOS firmware, whose PALcode is designed for Windows NT and cannot run Linux. 2) Systems with the SRM console boot Linux with aboot instead, which is simpler. 3)

MILO is therefore needed only on systems without an SRM console. The Alpha XL, the Alpha XLT, and the AlphaPC 164UX (Ruffian) can boot Linux only with MILO, 4) as can the AlphaPC 164RX, for which no SRM console was released. 5) Current kernels require an EV56 (21164A) or later processor, which rules out the Alpha XL 233, 266, and 300; the XL 366 and 433 have 21164A processors. 6) MILO does not support multiprocessor systems or 21264 systems. 7) 8)

MILO's last release, 2.2-18, dates from July 2001 and is based on Linux 2.2. 9) It cannot boot kernels from Linux 2.6.23 on, which have a PT_NOTE program header. The source repository, https://github.com/alphalinux/milo, fixed this in 2026, so a current kernel needs a MILO built from it. 10) No current kernel has been reported booting through MILO, with a repository build or otherwise.

MILO reads the kernel from ext2 (or ext3, read as ext2), and from FAT, ISO 9660, or ReiserFS if built with them, but not from ext4 or XFS; see Known issues. An initrd must fit below MILO in the first 13 MiB of memory, and cannot be used at all with a kernel built without CONFIG_ALPHA_LEGACY_START_ADDRESS; see initrd. The simplest kernel for MILO therefore has the drivers for its root file system built in and no initrd.

System support

The MILO image for each system is: 11)

System Code name MILO image
AlphaStation 600, AlphaStation 500, Alpha XL 300/366/433 Alcor, XLT xlt-alcor
AlphaStation 200, 205, 250, 255, 300, 400 Avanti avanti
Alpha XL 233/266 XL xl
Digital Personal Workstation Miata miata
AXPpci33, Multia Noname, UDB udb-noname
AlphaPC 64 Cabriolet cabrio
AlphaPC 164 PC164 pc164
AlphaPC 164LX LX164 lx164
AlphaPC 164SX SX164 sx164
EB164 EB164 eb164
EB64+ EB64+ eb64p
EB66+ EB66+ eb66p
EB66 EB66 eb66
AlphaPC 164UX, 164BX Ruffian ruffian 12) 13)

The Noname, EB64+, EB66 and EB66+, Cabriolet, Alcor, AlphaStation 500, PC164, LX164, SX164, and Miata can boot Linux either with MILO or from SRM. 14) Digital listed no MILO image for the Jensen, the AlphaServer 1000, 1000A, 1200, 2000, 2100, 4000, and 4100, or the AlphaBook 1, all of which have SRM. 15)

Obtaining and installing MILO

MILO must be built from the repository for the system's platform (see Building), since no released binary can boot a current kernel. The loader that ARC or AlphaBIOS runs to start MILO, linload.exe, was only ever distributed as a binary, 24) and the Ruffian's ldmilo.exe came from Deskstation. 25)

A disk that boots Linux through MILO is set up as follows:

  1. Give the disk a PC (MBR) partition table, not a BSD disklabel, since ARC and AlphaBIOS cannot read BSD disklabels. 26)
  2. Create a small FAT partition at the start of the disk, and copy linload.exe (or ldmilo.exe) and the MILO image to it. 27) A floppy works as well; the files are copied to it, not written with rawrite. 28)
  3. Put the kernel on an ext2 /boot file system; see Known issues for the file system limits.
  4. Add a boot selection in ARC or AlphaBIOS that loads linload.exe, with OSLOADFILENAME naming the MILO image and OSLOADOPTIONS holding the MILO command to run, such as boot sda2:. See ARC and AlphaBIOS for the settings.
  5. Describe the kernels in /etc/milo.conf on the /boot file system; see Configuration.

Building

The alphalinux/milo repository contains releases 2.2-9 to 2.2-18 as imported commits, followed by work from 2026. That work vendors the Linux 2.2.26 sources, so that no external kernel tree is needed, and fixes building with a current cross-compiler. 29) make config selects the platform, and make then builds MILO with the cross-compiler named by CROSS_COMPILE, by default alpha-unknown-linux-gnu-. 30)

make config first asks for the path to the kernel sources, which is no longer used, then for the system type, and then for options such as serial console echo, its port and speed, and the file systems to include (ext2 by default; FAT, ReiserFS, and ISO 9660 are off). 31) 32) make oldconfig reuses an existing .config. A build for the Ruffian, for example: 33)

git clone https://github.com/alphalinux/milo.git
cd milo
make config                            # choose "Ruffian" as the Alpha system type
make CROSS_COMPILE=alpha-linux-gnu-    # or CROSS_COMPILE= on an Alpha

Every platform produces milo, the image loaded by linload.exe or ldmilo.exe. Most also produce milo.dd for an SRM boot floppy, and some also produce milo.rom or the flash utility fmu.gz, or both; the Ruffian build produces only milo and mboot. 34)

The released MILO 2.2 was instead built against a separately configured generic Linux 2.2 kernel, at least 2.2.18, without modules or sysctl support. 35) By 2007, that source could not be built with a current toolchain. 36)

Loading MILO

MILO can be loaded from ARC, AlphaBIOS, the SRM console, an evaluation board Debug Monitor, a fail-safe boot block floppy, or flash. 37) The build produces milo for booting from ARC or AlphaBIOS, milo.dd for writing to a floppy and booting from SRM, and milo.rom for flashing. 38)

From ARC or AlphaBIOS

ARC and AlphaBIOS run linload.exe, which passes the memory size and boot selection from the firmware to MILO and switches to MILO's PALcode. 39) linload.exe was built with the Windows NT ARC firmware tree and Microsoft tools, and its source was never released. 40) 41)

From SRM

On systems that also have SRM, milo.dd can be written to a floppy with dd and booted with boot dva0. 52) Booting Linux directly with aboot is simpler. 53)

From flash

On the AlphaPC 64, Noname, EB66+, EB164, and AlphaPC 164, MILO could also be written to flash with its Flash Management Utility and started directly. 54) MILO relies on the previous console for some hardware initialization, and Digital stopped supporting flashing it in 1998. 55)

Booting Linux

A kernel is booted with boot device:file followed by the kernel arguments, e.g.: 56) 57)

MILO> boot sda2:vmlinux.gz root=/dev/sda3
MILO> boot sda2:vmlinux.gz root=/dev/sda3 console=ttyS0

initrd

MILO 2.2-17 and later load an initial ramdisk given with initrd=path on the command line. 68) The path has no device, since MILO only has one device open at a time. 69)

MILO runs at 13 MiB (0xd00000) and places the initrd directly below itself; if the initrd would reach down into the kernel, MILO refuses to load it. 70) 71) A kernel built with CONFIG_ALPHA_LEGACY_START_ADDRESS starts at 3 MiB, leaving less than 10 MiB for the kernel and initrd together. A kernel without it starts at 16 MiB, above MILO, so MILO cannot load any initrd for it. 72) A kernel for a MILO system therefore needs either a small initrd and the legacy start address, or no initrd, with the drivers for the root file system built in.

Configuration

milo.conf

MILO 2.2 reads a configuration file similar to lilo.conf when given boot with only a device, e.g. boot sda2:. 73) 74) It looks for /etc/milo.conf, then /milo.cfg. 75)

With /boot on sda2 and the root file system on sda3, paths are relative to sda2:

timeout = 50

image = /vmlinux.gz
  label = linux
  root = /dev/sda3
  append = "console=ttyS0"

miloctl

miloctl edits the parameter block inside a MILO image file (not the copy in memory): 80)

For example, miloctl -v /dev/fd0 +S +V enables output to the serial port during startup on a MILO floppy. 81) A startup command and milo.conf can be combined by using the startup command only to point to milo.conf. 82) Linux itself needs console=ttyS0 to use the serial port; see Using the SRM Console: Serial console for the cabling and terminal settings.

Commands

The MILO 2.2 commands are: 83)

Command Description
ls [path] List files in a directory
cd path Change the current directory
boot [path [arguments]] Boot a kernel
read [dev:] block Read a block from a device
run path Run a standalone program
show Display all known devices and file systems
sleep seconds Wait
pci Display the PCI configuration
set [variable value], unset variable Set, display, or delete variables
setenv, unsetenv, resetenv Set or delete variables stored in NVRAM, instead of set and unset on systems with NVRAM support
bootopt num Select the firmware to start at power-on (Cabriolet, EB66+, EB164, and PC164 only)
help Print the command summary

Environment variables

Variable Description
MEMORY_SIZE Memory size in MiB
BOOT_DEV, BOOT_FILE, BOOT_STRING Default boot device, kernel file, and kernel arguments
AUTOBOOT, AUTOBOOT_TIMEOUT Boot at power-on, after a timeout in seconds
SCSIn_HOSTID Host ID of the nth SCSI controller (default 7)
PCI_LATENCY PCI bus master latency (default 32, maximum 255)
CPU_CLOCK CPU speed in MHz, for systems that report it wrongly
VERBOSE Print more information

Sources: 89) 90) 91)

Known issues

Design

MILO consists of PALcode, memory and video setup, block device drivers taken unmodified from the Linux kernel it is built against, its own file system code, a user interface, and the code that builds the HWRPB for Linux. 114) MILO does not configure network devices. 115)

PALcode

MILO's PALcode is based on the sample PALcode in Digital Semiconductor's Evaluation Board System Developers Kit (EBSDK). 116) The loader that starts MILO from ARC switches from the Windows NT PALcode to MILO's. 117) Each board has its own PALcode. Systems not built by Digital Semiconductor, such as the Avanti and Mikasa, use modified evaluation board PALcode. 118)

The EBSDK PALcode is less complete than the SRM PALcode: Digital supplied it as-is, for informational purposes, and recommended SRM wherever it was available. 119) It lacks access to the performance counters and support for the prefetch code generated by Compaq's C compiler, 120) ECC error reporting, 121) and the PAL calls needed by NetBSD and OpenBSD. 122) MILO also does not provide the SRM console callbacks. 123)

On many systems, the MILO and SRM PALcode deliver interrupts differently, so kernels built for one would not boot from the other. 124) On the Noname, UDB, Avanti, and Platform 2000, the same kernel boots from both. 125) Generic kernels run from either. 126)

Video

MILO uses a VGA card if one is present, otherwise a TGA card. 127) VGA cards are initialized by running their x86 BIOS in an emulator. 128)

HWRPB and rebooting

MILO builds the HWRPB and memory cluster descriptions that tell Linux the system type and the available memory. 129) Because it must describe the system itself, there is a separate MILO for each platform. 130) MILO sets the system serial number to MILO- followed by the version, e.g. MILO-2.0.35-c7, which lets Linux tools detect that MILO was used, 131) and each CPU's serial number to Linux_is_Great!. 132) 133) The kernel itself checks the MILO prefix of the system serial number to tell whether it was booted from SRM. 134) The UP1000's APB loader also uses MILO-0000. 135)

MILO leaves a compressed copy of itself in memory. When Linux reboots, it returns to that copy, which boots the same kernel with the same command after a 30 second timeout. 136) It is not possible to return to ARC. 137)

Licensing

MILO's LICENSE file contains three licenses: Digital's PALcode license, which allows use only in products with an Alpha processor; a license for the BIOS emulation libraries, which forbids modifying them; and the GNU GPL. 138) Most MILO source files carry a separate Digital notice that permits use, copying, modification, and distribution. 139) The LICENSE file and the source headers are therefore inconsistent about which parts are under the GPL. 140) linload.exe is not free, since it uses parts of the Windows NT SDK. 141)

History

David A. Rusling of Digital's European Semiconductor Applications Engineering group in Reading, England, wrote MILO and its Flash Management Utility. 142) 143) MILO was first released publicly in BLADE 0.2 on 9 August 1995, as a console firmware replacement for systems without SRM support. 144) Jay Estabrook took over MILO in 1997, when Rusling moved to StrongARM work. 145) Nikita Schmidt at University College Dublin maintained a separate branch from 1998 to 2000, which added /etc/milo.conf, a startup command stored in the image, and the miloctl tool, and was used by Debian, Red Hat, and SuSE. 146) 147)

Stefan Reinauer of SuSE ported Schmidt's sources to Linux 2.2 as MILO 2.2 in November 1999. 148) 149) Release 2.2-17 added initrd support and fixes for Linux 2.4, 150) and the last release, 2.2-18 in July 2001, support for the UDB flash ROM and ReiserFS. 151) An attempt to port MILO to Linux 2.4 hung during PCI initialization on all machines. 152)

Once Windows NT for Alpha was discontinued, MILO was only needed on systems without SRM. 153) Reinauer stopped working on MILO in 2004, 154) and development resumed in the alphalinux repository in 2026. 155)

Conflicting information

The following sources conflict with each other or with the account given above. They are listed here for further investigation.

Documentation

Document Part number Date
Alpha Miniloader Howto, v0.85 April 1997
README.milo (MILO 2.2)
milo.conf(5) and miloctl(8)
ChangeLog (MILO 2.2)
milo-list archive (1999 to 2001)

2) "Re: Does DEC have a clue?", Jay Estabrook, axp-list, 21 Jan 1998
3) "Re: Jakma,Paul and warp", Rich Payne, axp-list, 30 Nov 1999
4) "Alpha Core ISO Images", Jay Estabrook, axp-list, 29 Sep 2004
5) "Re: switching from ARC back to SRM", Jay Estabrook, axp-list, 16 Aug 2000
7) "Re: SMP for AlphaServer?", Jay Estabrook, axp-list, 14 Jul 1998
8) "Re: XP1000 & MILO & SCSI", Rich Payne, axp-list, 24 Nov 2000
9) "[Milo-list] Milo 2.2-18 released.", Stefan Reinauer, milo-list, 23 Jul 2001
11) "Re: AlphaServer 800", Jay Estabrook, axp-list, 25 Mar 1998
12) "Re: 2.1.x on UX -- How?", Jay Estabrook, axp-list, 17 Nov 1998
13) config.in, alphalinux/milo
14) "Alpha Core ISO Images", Jay Estabrook, axp-list, 29 Sep 2004
15) "Re: AlphaServer 800", Jay Estabrook, axp-list, 25 Mar 1998
16) "Re: Installation problems on a APC 164UX/BX", Rich Payne, axp-list, 13 May 1999
17) "Re: DeskStation/Ruffian booting methods", Jay Estabrook, axp-list, 18 Jan 1999
18) "Re: 2.1.x on UX -- How?", Jay Estabrook, axp-list, 17 Nov 1998
19) config.in, MILO 2.2
20) "Re: SMP for AlphaServer?", Jay Estabrook, axp-list, 14 Jul 1998
21) "Re: Install problems", Jay Estabrook, axp-list, 29 Oct 1998
22) "Re: XP1000 & MILO & SCSI", Rich Payne, axp-list, 24 Nov 2000
23) "Re: New bootdisks / first install report / help needed", Rich Payne, debian-alpha, 4 Aug 2001
25) "Re: DeskStation/Ruffian booting methods", Jay Estabrook, axp-list, 18 Jan 1999
26) "Re: Questions.", Jay Estabrook, axp-list, 23 Jul 1998
27) "Re: Floppyless boot on SX164", Rich Payne, axp-list, 28 May 1999
28) "Re: AS 200 machines from onsale", Rich Payne, axp-list, 7 Oct 1998
30) Makefile, alphalinux/milo
31) config.in, alphalinux/milo
32) Makefile, alphalinux/milo
33) Makefile, alphalinux/milo
34) Makefile, alphalinux/milo
35) README.milo, MILO 2.2
36) "Re: miata linux kernel", Steve Langasek, debian-alpha, 19 Nov 2007
38) "Re: Building MILO (2.0.30)", Jay Estabrook, axp-list, 15 May 1997
39) "Re: MILO and PCI and BIOS ... gory details >LONG<", Jay Estabrook, axp-list, 30 Apr 1998
41) "Re: DeskStation/Ruffian booting methods", Jay Estabrook, axp-list, 18 Jan 1999
42) "Re: RedHat Install Help Please", Michal Jaegermann, axp-list, 16 Jan 1998
43) "Re: Autoboot Linux/Alpha using milo-2029-pc164 ?", Jay Estabrook, axp-list, 20 Nov 1997
44) "Re: RedHat Install Help Please", Jay Estabrook, axp-list, 16 Jan 1998
45) "Re: mem= option", Jay Estabrook, axp-list, 21 Mar 1997
47) linload 1.3 README, Linux-Alpha archive, ftp.digital.com, 19 Dec 1996
48) "Re: Booting XLT-366 with 256 meg?", Jay Estabrook, axp-list, 6 Feb 1997
49) "RE: cabriolet and RedHAt 2.1 AXP", David A Rusling, axp-list, 15 Apr 1996
50) "Rescue Disks, the result...", Ryan Kirkpatrick, axp-list, 11 Aug 1997
51) "Re: AlphaPC 164SX, AlphaBIOS, and SRM", Oleg Gusev, axp-list, 22 Mar 1999
53) "Re: Jakma,Paul and warp", Rich Payne, axp-list, 30 Nov 1999
54) Alpha Miniloader Howto, sections 5.5 and 7
55) "Re: fmu on PC164", Jay Estabrook, axp-list, 2 Jan 1998
57) "Re: RH 6.1 installer", Jay Estabrook, axp-list, 21 Dec 1999
59) ChangeLog, MILO 2.2, 25 Nov 1999
60) "Re: Milo/Alpha/Kernel", Jay Estabrook, axp-list, 11 Apr 1998
63) ChangeLog, MILO 2.2, 26 Jun 2000
64) "Re: Linux-2.4.0-test2", Richard Henderson, axp-list, 24 Jun 2000
65) "Re: SCSI broken on 2.4.18?", Jay Estabrook, debian-alpha, 2 Nov 2002
66) arch/alpha/Kconfig, Linux 7.3
67) "GENERIC kernels (was: Re: disparities in hardware?)", Jay Estabrook, axp-list, 30 Dec 1998
68) "Re: Upgrading my XL266 from 6.2 to 7.0 MILO", Stefan Reinauer, axp-list, 11 Jan 2001
69) "Re: initrd problems", Jay Estabrook, debian-alpha, 11 Apr 2002
70) Makefile, alphalinux/milo
71) boot.c, alphalinux/milo
73) "MILO status", Nikita Schmidt, debian-alpha, 11 Jul 1998
74) milo.conf(5), MILO 2.2
75) milo.c, MILO 2.2
76) milo.conf(5), MILO 2.2
77) milo.conf(5), MILO 2.2
78) milo.conf(5), MILO 2.2
79) "Re: Finally booted RH6, but [p|th]ings still go wrong", Michal Jaegermann, axp-list, 5 Jul 1999
80) miloctl(8), Nikita Schmidt, MILO 2.2
81) "Re: [Milo-list] RE: Milo problem on Alpha XL 300", Nikita Schmidt, milo-list, 5 Dec 2000
82) "Re: Milo - question", Nikita Schmidt, debian-alpha, 4 Jun 1999
83) milo.c, MILO 2.2
85) "Re: Trouble with installation", Rich Payne, axp-list, 13 Oct 1999
86) "New Milo images and source on gatekeeper.dec.com", David Rusling, axp-list, 15 Feb 1996
87) "enhancements to MILO", Arnaud Installe, debian-alpha, 8 Oct 1998
88) "Re: MILO boot issues", Jay Estabrook, axp-list, 19 Sep 1998
89) Alpha Miniloader Howto, sections 6.1 and 6.2
90) "New MILO and SX164 clock", Nikita Schmidt, debian-alpha, 8 Oct 1999
91) "Re: XLT 300+IDE+milo = 8-(", Nikita Schmidt, milo-list, 10 Apr 2000
93) "Re: AS255 and S3 Trio64", Nikita Schmidt, axp-list, 16 Jul 1997
94) "RE: MILO on Multia: environment corruption?", David Rusling, axp-list, 13 May 1996
95) "FAQ: MILO gets memory size wrong", Jay Estabrook, axp-list, 18 Aug 1998
96) "Re: MILO boot issues", Jay Estabrook, axp-list, 19 Sep 1998
97) config.in, MILO 2.2
98) "Re: 7.2 on XL366 - help!", Stefan Reinauer, axp-list, 31 Oct 2003
99) "SGI XFS Red Hat 7.1 Installer for Alpha", Martin K. Petersen, axp-list, 30 Jul 2001
100) fs/ext2.c, alphalinux/milo
101) "Re: Milo 2.2 (release)", Matt Wilson, milo-list, 15 Nov 1999
102) "Re: (alpha) YES, we have working boot-floppies", Falk Hueffner, debian-alpha, 21 Aug 2001
103) config.in, alphalinux/milo
104) uart.c, alphalinux/milo
105) kbd.c, alphalinux/milo
107) "Re: MILO boot issues", Jay Estabrook, axp-list, 19 Sep 1998
108) "Re: PC164UX doesnt work - anyone got details", Jay Estabrook, axp-list, 11 Aug 1998
110) "Re: milo and 4.3 GB scsi drive", Michal Jaegermann, axp-list, 24 May 2000
111) "Re: ldmilo problem on ruffian", Ron Farrer, axp-list, 28 Apr 2001
112) "Re: Alpha newbie install woes", Jay Estabrook, debian-alpha, 4 Apr 2002
113) "Low power idle mode patch", Nikita Schmidt, axp-list, 15 Oct 1999
115) "Re: Red Hat Linux/Alpha 4.0 Available Now! (fwd)", David Rusling, axp-list, 8 Oct 1996
116) "Re: DEC PWS 433a(Miata) clock problem", Jay Estabrook, axp-list, 14 Sep 1997
118) "Re: Can't get my PC164 to boot", Jay Estabrook, axp-list, 25 Nov 1996
119) "XL-266 install", Jay Estabrook, axp-list, 20 Feb 2004
120) "RE: srm / ide", John Jemiolo, axp-list, 29 Feb 2000
121) "Re: EB164 SRM Problems - Followup", Jay Estabrook, debian-alpha, 29 Jan 2003
122) "Re: XP1000 & MILO & SCSI", Stefan Reinauer, axp-list, 27 Nov 2000
123) "Re: Milo Development", Jay Estabrook, axp-list, 1 Dec 1997
124) "FAQ: MILO gets memory size wrong", Jay Estabrook, axp-list, 18 Aug 1998
125) "Re: 2.1.40 wont boot on Noname", Jay Estabrook, axp-list, 26 May 1997
126) "GENERIC kernels (was: Re: disparities in hardware?)", Jay Estabrook, axp-list, 30 Dec 1998
128) "Re: Milo problems.", Jay Estabrook, axp-list, 23 Oct 1996
130) "Re: /proc/cpuinfo", Jay Estabrook, axp-list, 29 Jun 1998
131) "Re: Alpha issues (SRM installation)", Nikita Schmidt, debian-alpha, 11 Feb 2000
132) hwrpb.c, alphalinux/milo
133) "Re: Linux_is_Great!", Jay Estabrook, axp-list, 15 Dec 1998
135) "Re: MILO size problems", Rich Payne, debian-alpha, 3 Mar 2000
137) "Re: Rebooting UDB w/ RedHat 4.1", David A Rusling, axp-list, 28 Jul 1997
138) LICENSE, MILO 2.2
139) milo.c, MILO 2.2
140) "Re: Milo 2.2 - things are becoming generic.", Stefan Reinauer, milo-list, 8 Sep 1999
141) "Re: DeskStation/Ruffian booting methods", Jay Estabrook, axp-list, 18 Jan 1999
142) READ.ME, Miniloader directory, Linux-Alpha archive, ftp.digital.com, 26 Nov 1996
143) "Re: fmu on PC164", Jay Estabrook, axp-list, 2 Jan 1998
144) "BLADE 0.2 now available! (Linux for Alpha)", Jim Paradis, comp.os.linux.announce, 9 Aug 1995
145) "Re: NEW and IMPROVED Alpha Patches and MILO Sources!", David A Rusling, axp-list, 18 Jul 1997
146) "MILO status", Nikita Schmidt, debian-alpha, 11 Jul 1998
147) "Re: Milo * bootp", Nikita Schmidt, milo-list, 29 Jun 1999
148) "Milo 2.2 (release)", Stefan Reinauer, milo-list, 9 Nov 1999
149) README.milo, MILO 2.2
150) "[Milo-list] Milo 2.2-17", Stefan Reinauer, milo-list, 29 Jun 2000
151) "[Milo-list] Milo 2.2-18 released.", Stefan Reinauer, milo-list, 23 Jul 2001
152) "Kernel 2.4 PCI init on CIA/PYXIS (Milo issue)", Stefan Reinauer, axp-list, 21 Aug 2001
153) "Re: Benefits of Linux/Alpha over Linux/x86?", Rich Payne, axp-list, 23 Jun 2000
154) "Re: Ruffian without floppy drive", Stefan Reinauer, axp-list, 5 Jan 2004