Releases: awemorris/linux-pc98
Release list
Linux/PC-98 v0.8.0
Linux/PC-98 v0.8.0
This release adds the traditional ifconfig command to both distributed userlands. The i386 BusyBox images provide the built-in BusyBox applet, and the Debian 13/i486 images install the net-tools implementation. It retains the IDE and SCSI Linux 7.1 images, replaceable BOOT98 boot chain, standalone kernels, and Windows x64 qemu-pc98 distribution introduced in v0.7.0.
Public disk images use the GDC display and PC-98 keyboard as the console. The PC-9801-55/92 Linux driver is built into the i386 and i486 kernels.
Choosing a disk image
| Image | CPU and userland | Interface and geometry | Minimum RAM | Raw size limit |
|---|---|---|---|---|
linux-pc98-i386sx-busybox-ide.img.xz |
i386SX, static BusyBox | IDE, H=8/S=17 | 5 MiB | below 40 MB |
linux-pc98-i386sx-busybox-scsi55.img.xz |
i386SX, static BusyBox | PC-9801-55 compatible SCSI, H=8/S=17 | 5 MiB | below 40 MB |
linux-pc98-i386sx-busybox-scsi92.img.xz |
i386SX, static BusyBox | PC-9801-92 SCSI, H=8/S=32 | 5 MiB | below 40 MB |
linux-pc98-i486dx-debian13-ide.img.xz |
i486DX or newer, Debian 13/i486 | IDE, H=8/S=17 | 64 MiB | below 2 GB |
linux-pc98-i486dx-debian13-scsi55.img.xz |
i486DX or newer, Debian 13/i486 | PC-9801-55 compatible SCSI, H=8/S=17 | 64 MiB | below 2 GB |
linux-pc98-i486dx-debian13-scsi92.img.xz |
i486DX or newer, Debian 13/i486 | PC-9801-92 SCSI, H=8/S=32 | 64 MiB | below 2 GB |
Write the appropriate decompressed image to a CF card, SD adapter, SCSI2SD, BlueSCSI, or another block device. Writing an image destroys the existing contents of the destination device.
Networking tools
Both userlands now include ifconfig. Debian also continues to include ip, ping, wget, and the OpenSSH server. Network interfaces are not configured automatically when no interface configuration is present, which prevents unnecessary boot delays on machines without a LAN adapter.
Windows qemu-pc98
qemu-pc98-win64.zipcontains x86_64 and i386 QEMU system binaries, required runtime DLLs, libusb support, and the free compatibility BIOS.virtpc98.exeis included as the graphical frontend.
Kernels and boot loaders
vmlinux-i386is the low-memory Linux 7.1 kernel for i386SX systems.vmlinux-i486-debianis the Linux 7.1/i486DX kernel used by the Debian images.bootloader.zipcontainsLINUX98.EXE,INST.EXE, the three.IMGinstaller inputs,IO.SYS,BOOT.SYS,BOOT.CFG, and documentation.
Boot from DOS
Run this from plain real-mode DOS. Memory managers or other software that has already entered protected mode can prevent the loader from taking control.
Copy LINUX98.EXE and an uncompressed VMLINUX to a DOS-accessible FAT volume and run, for example:
LINUX98 VMLINUX ide0 root=PARTLABEL=LINUXROOT rw
LINUX98 VMLINUX scsi0 root=/dev/sda2 rw
Bootloader
Read README.md and DOS-README.md in bootloader.zip.
Our boot sequence:
ITF ... Reads LBA0-1 and jumps. (LBA0 is the boot sector, LBA1 is the partition table)
LBA0 ... Reads LBA2 and jumps
LBA2-15 ... Reads LBA3-15 and execute. Just jumps to the PBR of the "BOOT" partition.
PBR ... Loads our IO.SYS and jumps.
IO.SYS ... Loads BOOT.SYS, enters the protected-mode, and jumps.
BOOT.SYS ... 32-bit boot loader program. Loads VMLINUX from the "BOOT" partition and jumps
INST.EXE installs our boot codes to a specified disk or a partition.
# LBA0
INST /LBA0
# LBA2-15
INST /LBA2
# Partition PBR and IO.SYS
INST /PART C:
COPY BOOT.SYS C:
Reproducible build
The complete release artifact set is generated with:
./build.sh release --version v0.8.0Linux/PC-98 v0.7.0
Linux/PC-98 v0.7.0
This release restores IDE and SCSI Linux 7.1 disk images for NEC PC-9800 machines, updates the replaceable BOOT98 boot chain, and provides a Windows x64 build of qemu-pc98. Public disk images use the GDC display and PC-98 keyboard as the console.
The PC-9801-55/92 Linux driver is included in the i386 and i486 kernels. PC-9801-55-compatible images use H=8/S=17 geometry, while PC-9801-92 images use H=8/S=32 geometry.
Choosing a disk image
| Image | CPU and userland | Interface and geometry | Minimum RAM | Raw size limit |
|---|---|---|---|---|
linux-pc98-i386sx-busybox-ide.img.xz |
i386SX, static BusyBox | IDE, H=8/S=17 | 5 MiB | below 40 MB |
linux-pc98-i386sx-busybox-scsi55.img.xz |
i386SX, static BusyBox | PC-9801-55 compatible SCSI, H=8/S=17 | 5 MiB | below 40 MB |
linux-pc98-i386sx-busybox-scsi92.img.xz |
i386SX, static BusyBox | PC-9801-92 SCSI, H=8/S=32 | 5 MiB | below 40 MB |
linux-pc98-i486dx-debian13-ide.img.xz |
i486DX or newer, Debian 13/i486 | IDE, H=8/S=17 | 64 MiB | below 2 GB |
linux-pc98-i486dx-debian13-scsi55.img.xz |
i486DX or newer, Debian 13/i486 | PC-9801-55 compatible SCSI, H=8/S=17 | 64 MiB | below 2 GB |
linux-pc98-i486dx-debian13-scsi92.img.xz |
i486DX or newer, Debian 13/i486 | PC-9801-92 SCSI, H=8/S=32 | 64 MiB | below 2 GB |
Write the appropriate decompressed image to a CF card, SD adapter, SCSI2SD,
BlueSCSI, or another block device. Writing an image destroys the existing
contents of the destination device.
Windows qemu-pc98
qemu-pc98-win64.zipcontains x86_64 and i386 QEMU system binaries,
required runtime DLLs, libusb support, and the free compatibility BIOS.virtpc98.exeis included as the graphical frontend.
Kernels and boot loaders
vmlinux-i386is the low-memory Linux 7.1 kernel for i386SX systems.vmlinux-i486-debianis the Linux 7.1/i486DX kernel used by the Debian images.bootloader.zipcontainsLINUX98.EXE,INST.EXE, the three.IMGinstaller inputs,IO.SYS,BOOT.SYS,BOOT.CFG, and documentation.
BOOT98 can chain-load an active partition on another fixed disk without losing its BIOS unit number. This permits the NEC fixed-disk boot menu and DOS partition boot records to continue loading from the selected disk.
Boot from DOS
Copy LINUX98.EXE and an uncompressed VMLINUX to a DOS-accessible FAT volume and run, for example:
LINUX98 VMLINUX ide0 root=PARTLABEL=LINUXROOT rw
LINUX98 VMLINUX scsi0 root=/dev/sda2 rw
Run it from plain real-mode DOS. Memory managers or other software that has already entered protected mode can prevent the loader from taking control.
Bootloader
Read README.md and DOS-README.md in bootloader.zip.
Our boot sequence:
ITF ... Reads LBA0-1 and jumps. (LBA0 is the boot sector, LBA1 is the partition table)
LBA0 ... Reads LBA2 and jumps
LBA2-15 ... Reads LBA3-15 and execute. Just jumps to the PBR of the "BOOT" partition.
BOOT partition PBR ... Loads our IO.SYS and jumps.
IO.SYS ... Loads BOOT.SYS, enters the protected-mode, and jumps.
BOOT.SYS ... 32-bit boot loader program. Loads VMLINUX from the "BOOT" partition and jumps
INST.EXE installs our boot codes to a specified disk or a partition.
# LBA0
INST /LBA0
# LBA2-15
INST /LBA2
# Partition PBR and IO.SYS
INST /PART C:
COPY BOOT.SYS C:
Reproducible build
The complete release artifact set is generated with:
./build.sh release --version v0.7.0Linux-PC-98-v0.6.0
Linux/PC-98 v0.6.0
This release provides IDE Linux 7.1 disk images for NEC PC-9800 machines, a Windows x64 build of qemu-pc98, and standalone kernels and boot-loader files.
Public disk images use the GDC display and PC-98 keyboard as the console.
SCSI disk images are intentionally not included in v0.6.0. The current PC-9801-55/92 Linux driver regressed during target probing and can prevent the Debian system from booting even under QEMU. SCSI images will return after the driver passes both QEMU and real-hardware regression tests.
Choosing a disk image
| Image | CPU and userland | Interface and geometry | Minimum RAM | Raw size limit |
|---|---|---|---|---|
linux-pc98-i386sx-busybox-ide.img.xz |
i386SX, static BusyBox | IDE, H=8/S=17 | 5 MiB | below 40 MB |
linux-pc98-i486dx-debian13-ide.img.xz |
i486DX or newer, Debian 13/i486 | IDE, H=8/S=17 | 64 MiB | below 2 GB |
Windows qemu-pc98
qemu-pc98-win64.zipcontains QEMU binaries.virtpc98.exeis a GUI frontend.
Standalone files
vmlinux-i386— Linux 7.1 kernel for i386SX + 5MB RAMvmlinux-i486-debian— Linux 7.1 kernel for i486DX, used by the Debian imagesipl-lba0.img— LBA 0 PC-98 disk IPL.ipl-lba2.img— LBA 2-15 BOOT98 first stage.boot98.bin— BOOT98 first stage, put in the FAT16 partition named BOOTboot98.cfg— default script for the boot loaderlinux98.exe— DOS command-line Linux loader
Boot from IDE
Write one of the IDE image to a CF card, then boot from it.
Boot from DOS
Copy linux98.exe and vmlinux to a DOS-accessible FAT volume and run:
linux98 vmlinux root=/dev/sda2 rootfstype=ext4 rw
Run it from plain real-mode DOS. Memory managers or other software that has already entered protected mode can prevent the loader from taking control. The default root device matches the published IDE images.
Reproducible build
The release binaries can be generated through one command:
./build.sh releaseLinux/PC-98 v0.5.0
Linux/PC-98 v0.5.0
This release adds the DOS-command Linux loader to every distributed CF/HDD image. The FAT16 boot partition contains both the uncompressed Linux kernel, VMLINUX, and LINUX98.EXE.
Using LINUX98.EXE
Boot plain real-mode MS-DOS, change to the FAT16 boot partition, and run:
LINUX98.EXE VMLINUX 0 root=/dev/hd98a2 rw
General syntax:
LINUX98.EXE VMLINUX [drive 0-3] [kernel arguments]
VMLINUXis the uncompressed ELF32 Linux kernel included besideLINUX98.EXE.driveis the PC-98 BIOS fixed-disk unit number from0through3.- If
driveis omitted, the loader uses the current boot-drive value in the PC-98 BIOS work area at0000:0584. - Remaining arguments are passed to the Linux kernel. For the supplied first-HDD images, the recommended root argument is
root=/dev/hd98a2 rw. - The loader obtains the BIOS logical CHS geometry with INT 1Bh SENSE and passes the drive and geometry to Linux. This also provides a path for machines using DOS-installed BIOS geometry extensions.
Current limitations:
- Use plain real-mode DOS. EMM386, QEMM, Windows DOS boxes, and other protected-mode virtualizers are not supported.
- HIMEM.SYS may be present only when it does not virtualize protected mode; test first without memory managers.
- The loader accepts an uncompressed ELF32
VMLINUX. It does not load bzImage, compressed kernels, or initrd images.
Images
linux-7.1-pc98-i386-busybox-h4.img.xz- Linux 7.1/i386 and i386-compatible BusyBox
- H=4/S=17 PC-98 partition table
- Intended for machines originally supplied with no HDD or a 20 MB-class HDD, including the PC-9801NS/20
- Minimum RAM: 5 MiB
linux-7.1-pc98-i386-busybox-h8.img.xz- Linux 7.1/i386 and i386-compatible BusyBox
- H=8/S=17 for ordinary 386-class systems with 80 MB or larger HDD configurations
- Minimum RAM: 5 MiB
linux-7.1-pc98-i486-busybox-h8.img.xz- Linux 7.1/i486 and i486 BusyBox
- Intended for ordinary i486 systems with less than 64 MiB RAM
- Minimum RAM: 5 MiB
debian13-pc98-i486-live-cfcard-h8.img.xz- Linux 7.1/i486 and the Debian 13/i486 port
- Requires an i486DX or newer CPU and 64 MiB RAM
debian13-pc98-i686-live-cfcard-h8.img.xz- Linux 7.1/i686 and Debian 13 using the official i686 userland
- Requires a Pentium II-class or newer CPU and 64 MiB RAM
Validation
All five FAT16 boot partitions were verified to contain readable VMLINUX and LINUX98.EXE files. The H=8 images were boot-tested with qemu-pc98: the BusyBox images reached the interactive console, and the Debian images mounted the ext4 root filesystem and entered userspace initialization. The H=4 image was structurally verified as H=4/S=17 and remains a real-hardware test target because the current qemu-pc98 compatibility BIOS reports H=8.
Decompress an archive before writing it to a CF card or HDD. Writing an image overwrites the destination media, so verify the target device carefully.
Linux/PC-98 v0.4.0
Linux/PC-98 v0.4.0
This release provides five ready-to-write CF/HDD images for different PC-98 CPU and BIOS geometry combinations. All images use Linux 7.1 and the PC-98 IPL/FAT16 loader.
Every image also contains LINUX98.EXE in its FAT16 boot partition. From plain real-mode DOS it can load the adjacent uncompressed VMLINUX without using the disk IPL. See loader/dos/README.md for usage and current memory-manager limitations.
Images
linux-7.1-pc98-i386-busybox-h4.img.xz- Linux 7.1/i386 and i386-compatible BusyBox
- PC-98 partition table encoded for 4 heads and 17 sectors
- Intended for machines originally supplied with no HDD or a 20 MB-class HDD, including the PC-9801NS/20
- Minimum RAM: 5 MiB
linux-7.1-pc98-i386-busybox-h8.img.xz- Linux 7.1/i386 and i386-compatible BusyBox
- 8-head, 17-sector PC-98 partition table for ordinary 386-class systems with 80 MB or larger HDD configurations
- Minimum RAM: 5 MiB
linux-7.1-pc98-i486-busybox-h8.img.xz- Linux 7.1/i486 and i486 BusyBox
- Intended for ordinary i486 systems with less than 64 MiB RAM
- Minimum RAM: 5 MiB
debian13-pc98-i486-live-cfcard-h8.img.xz- Linux 7.1/i486 and the Debian 13/i486 port
- Requires an i486DX or newer CPU and 64 MiB RAM
debian13-pc98-i686-live-cfcard-h8.img.xz- Linux 7.1/i686 and Debian 13 using the official i686 userland
- Requires a Pentium II-class or newer CPU and 64 MiB RAM
Validation
The H=8 images were boot-tested with qemu-pc98. Both BusyBox images reached the interactive console, and both Debian images mounted the ext4 root filesystem and entered userspace initialization. The H=4 image was structurally verified to encode all PC-98 partition entries as H=4/S=17; it requires validation on the intended early real hardware because the current qemu-pc98 compatibility BIOS reports H=8.
Decompress an archive before writing it to a CF card or HDD. The write operation overwrites the destination media, so verify the target device carefully.
Linux/PC-98 v0.3.0
Linux/PC-98 disk images
This release provides four bootable CF-card/disk images for NEC PC-9800 series systems and qemu-pc98. The boot partition contains an uncompressed ELF kernel, so booting does not require a large temporary buffer for bzImage decompression.
Images
| Image | CPU/userland | Minimum RAM | Notes |
|---|---|---|---|
linux-7.1-pc98-i386-busybox.img.xz |
i386 Linux 7.1 + i386 BusyBox | 5 MiB | Small experimental system with 32 MiB swap |
linux-7.1-pc98-i486-busybox.img.xz |
i486 Linux 7.1 + shared i386 BusyBox | 5 MiB | Small experimental system with 32 MiB swap |
debian13-pc98-i486-live-cfcard.img.xz |
i486 Linux 7.1 + Debian 13 i486 port | 64 MiB | Full kernel and 128 MiB swap; requires an i486DX-class CPU with an FPU |
debian13-pc98-i686-live-cfcard.img.xz |
i686 Linux 7.1 + Debian 13 | 64 MiB | Full kernel; uses official Debian i686 packages |
The public images use the PC-98 text display and keyboard as the system console. The Debian root password is pc98.
Boot loader changes
- Added a PC-9800-style kernel loading screen with transfer progress.
- Added an 80 x 120 monochrome calibration logo at the lower-right corner.
- Added GDC and palette initialization for both the compatible BIOS and NEC BIOS.
- Load kernels as uncompressed ELF files directly from the FAT16 boot partition.
qemu-pc98 examples
i386 BusyBox:
qemu-system-i386 -M pc9801 -cpu 386 -m 5M \
-drive if=ide,bus=0,unit=0,format=raw,file=linux-7.1-pc98-i386-busybox.imgi486 Debian 13:
qemu-system-i386 -M pc9801 -cpu 486 -m 64M \
-drive if=ide,bus=0,unit=0,format=raw,file=debian13-pc98-i486-live-cfcard.imgi686 Debian 13:
qemu-system-i386 -M pc9821 -cpu pentium2,-apic -m 64M \
-drive if=ide,bus=0,unit=0,format=raw,file=debian13-pc98-i686-live-cfcard.imgDecompress an image with xz -d IMAGE.img.xz, then write the resulting raw image to a CF card or another disk device.
Linux/PC-98 v0.2.0
Linux/PC-98 v0.2.0
This release provides three bootable PC-98 disk images:
linux-7.1-pc98-i486-busybox.img.xz— Linux 7.1 with a static
i486 musl/BusyBox userland.linux-7.1-pc98-i686-busybox.img.xz— Linux 7.1 with a static
i686 musl/BusyBox userland.debian13-pc98-i686-live-cfcard.img.xz— Linux 6.12 with a
Debian 13 i686 userland, suitable for QEMU or writing to a CF card.
This release now also includes an experimental true-i386 image for the
screen-and-keyboard console.
Highlights
- Adds reproducible Linux 7.1 BusyBox image targets for both i486 and i686.
- Fixes repeated keyboard input on physical PC-98 hardware.
- Retains the PC-98 IPL and FAT16 Linux loader used by the previous release.
- Includes the
e100driver for the Intel PRO/100 adapter found in the
PC-9821 Ra43. - Preserves the requested CF-card filename after extraction:
debian13-pc98-i686-live-cfcard.img.
Requirements
These images require the PC-98-enabled
qemu-pc98 build. Upstream QEMU
does not provide the required PC-98 machine and devices.
Use an i486 guest CPU for the i486 BusyBox image:
qemu-system-i386 \
-M pc9821 \
-cpu 486 \
-m 64 \
-accel tcg \
-drive if=ide,bus=0,unit=0,format=raw,file=linux-7.1-pc98-i486-busybox.imgUse at least a Pentium II CPU for either i686 image:
qemu-system-i386 \
-M pc9821 \
-cpu pentium2,-apic \
-m 128 \
-accel tcg \
-drive if=ide,bus=0,unit=0,format=raw,file=debian13-pc98-i686-live-cfcard.imgThe initial root password for the Debian 13 image is pc98. The BusyBox
images start an interactive root shell without a password.
Verification
Each image was tested under qemu-pc98 with TCG. The expected kernel booted,
mounted the NEC98-partitioned ext4 root filesystem, and invoked
/sbin/init. The Linux 7.1/i486 image has also booted on a physical
PC-9821 Ra43.
Verify an archive before extraction:
sha256sum -c linux-7.1-pc98-i486-busybox.img.xz.sha256
xz -dk linux-7.1-pc98-i486-busybox.img.xzThe corresponding .sha256 file is provided for every archive.
Writing the Debian image to a CF card
After carefully identifying the target device, write the decompressed image
to the whole CF card rather than to an existing partition:
xz -dc debian13-pc98-i686-live-cfcard.img.xz |
sudo dd of=/dev/sdX bs=4M status=progress conv=fsyncReplace /dev/sdX with the correct CF-card device. This operation overwrites
the selected device.
Experimental i386 video-console image
linux-7.1-pc98-i386-video-console.img.xz— Linux 7.1 with a static
i386 musl/BusyBox userland for 80386-class PC-98 systems.- Uses the GDC text screen and PC-98 keyboard only; the serial driver and
serial console are disabled to reduce the kernel and runtime footprint. - Displays
Please press Enter to activate this console.before opening
the root shell. - Tested with qemu-pc98 at both 8 MiB and 4,736 KiB of guest RAM.
Use the latest qemu-pc98 executable and matching compatibility BIOS files:
qemu-system-i386 \
-M pc9801 \
-cpu 386 \
-m 8M \
-accel tcg \
-L /path/to/qemu-pc98/pc-bios \
-drive if=ide,bus=0,unit=0,format=raw,file=linux-7.1-pc98-i386-video-console.img \
-serial noneLinux-PC-98-Debian-13-i386-v0.1.0
Linux/PC-98 Debian 13 i386 Disk Image
This release provides a qemu-pc98 raw disk image containing the Linux 6.12
PC-98 port and a Debian 13 i386 userland.
Requirements
This image does not run on upstream QEMU. It requires the PC-98-enabled
qemu-pc98 build.
Debian 13 i386 uses P6 instructions, so select at least a Pentium II CPU.
The PC-98 machine does not currently connect the APIC; disable the CPU's
advertised APIC feature with:
-cpu pentium2,-apic
A representative command line is:
qemu-system-i386 \
-M pc9821 \
-cpu pentium2,-apic \
-m 128 \
-drive if=ide,bus=0,unit=0,format=raw,file=qemu-pc98-debian13-i386-v0.1.0.rawDisk layout
- Partition 1: DOS-compatible FAT16 containing the Linux
BZIMAGE - Partition 2: ext4 Debian 13 i386 root filesystem
- Initial root password:
pc98
The PC-98 IPL at LBA 0 loads the FAT16-aware Linux loader from LBA 2.
Partition 1 does not require a custom PBR, so a DOS boot sector may be
installed without affecting the Linux IPL path.
Download and extraction
Verify the archive with the accompanying .sha256 file, then extract it:
sha256sum -c qemu-pc98-debian13-i386-v0.1.0.raw.xz.sha256
xz -dk qemu-pc98-debian13-i386-v0.1.0.raw.xz