Skip to content

Releases: awemorris/linux-pc98

Linux/PC-98 v0.8.0

Choose a tag to compare

@awemorris awemorris released this 06 Aug 20:57

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.zip contains x86_64 and i386 QEMU system binaries, required runtime DLLs, libusb support, and the free compatibility BIOS.
  • virtpc98.exe is included as the graphical frontend.

Kernels and boot loaders

  • vmlinux-i386 is the low-memory Linux 7.1 kernel for i386SX systems.
  • vmlinux-i486-debian is the Linux 7.1/i486DX kernel used by the Debian images.
  • bootloader.zip contains LINUX98.EXE, INST.EXE, the three .IMG installer 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.0

Linux/PC-98 v0.7.0

Choose a tag to compare

@awemorris awemorris released this 06 Aug 20:02

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.zip contains x86_64 and i386 QEMU system binaries,
    required runtime DLLs, libusb support, and the free compatibility BIOS.
  • virtpc98.exe is included as the graphical frontend.

Kernels and boot loaders

  • vmlinux-i386 is the low-memory Linux 7.1 kernel for i386SX systems.
  • vmlinux-i486-debian is the Linux 7.1/i486DX kernel used by the Debian images.
  • bootloader.zip contains LINUX98.EXE, INST.EXE, the three .IMG installer 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.0

Linux-PC-98-v0.6.0

Choose a tag to compare

@awemorris awemorris released this 05 Aug 17:14

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.zip contains QEMU binaries.
  • virtpc98.exe is a GUI frontend.

Standalone files

  • vmlinux-i386 — Linux 7.1 kernel for i386SX + 5MB RAM
  • vmlinux-i486-debian — Linux 7.1 kernel for i486DX, used by the Debian images
  • ipl-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 BOOT
  • boot98.cfg — default script for the boot loader
  • linux98.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 release

Linux/PC-98 v0.5.0

Choose a tag to compare

@awemorris awemorris released this 03 Aug 03:10

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]
  • VMLINUX is the uncompressed ELF32 Linux kernel included beside LINUX98.EXE.
  • drive is the PC-98 BIOS fixed-disk unit number from 0 through 3.
  • If drive is omitted, the loader uses the current boot-drive value in the PC-98 BIOS work area at 0000: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

Choose a tag to compare

@awemorris awemorris released this 03 Aug 01:18

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

Choose a tag to compare

@awemorris awemorris released this 31 Jul 13:24

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.img

i486 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.img

i686 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.img

Decompress 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

Choose a tag to compare

@awemorris awemorris released this 30 Jul 13:13

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 e100 driver 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.img

Use 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.img

The 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.xz

The 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=fsync

Replace /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 none

Linux-PC-98-Debian-13-i386-v0.1.0

Choose a tag to compare

@awemorris awemorris released this 30 Jul 04:38

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.

image

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.raw

Disk 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