Installing FreeDOS on the Pocket 386
You can't install FreeDOS directly on the Pocket386. At least, I didn't have the necessary hardware.
The Pocket386 has a CH375B USB controller in it, but it requires a driver to get it working. Some desktop PC systems provide floppy emulation through the BIOS (or the UEFI, when running in "Legacy" mode) which allow you to connect a USB flash drive at boot time, and the system will recognize it as the "A:" drive. But I couldn't find any options in the BIOS that activated the USB port. Then again, the Pocket386 has an AMIBIOS version 1.16 from 1996; that's the same year that USB 1.0 was invented. The BIOS doesn't provide native emulation of USB drives.
The Pocket386 also has pinouts for IDE and parallel, which might support connecting an "external" CD-ROM drive or second hard drive. But I don't have that hardware; I recycled any such "classic" hardware that I still had in storage about ten years ago when I last moved.
However, the 2 GB storage is on a removable CF card. This gave me an idea: connect the CF card to my Linux desktop, and install FreeDOS from there.
I have a CF card reader at home; after plugging in the CF card, Linux
recognized the CF as /dev/sda. Once I had that, I backed up the
storage device (in case I needed to restore to defaults later) using the
dd command:
$ sudo dd if=/dev/sda of=win95.cf
I could have used the FreeDOS 1.4 installer, but the FreeDOS release
coordinator (Jerome) posts a new Test
Release
every month, with the latest updates. Usually, this is for testing, and
will someday become the base for the next official FreeDOS distribution.
Releases are named "T" then the two-digit year and two-digit
month, so the test release for June 2024 is T2406.
I decided to use the test release because it was the most up-to-date, and included several fixes that other folks needed to successfully install FreeDOS on last year's Book8088 device. This was easy to do using QEMU on Linux:
$ sudo qemu-system-i386 -enable-kvm -m 32 -hda /dev/sda -cdrom T2406LIVE.iso
Workaround for the hard drive
I used the standard install process, which seemed to go smoothly. But
when I swapped the CF back to the Pocket386 and booted it, the system
hung after printing Loading FreeDOS.
I tried several other ways to install FreeDOS, each time exiting the
installer to the DOS prompt, and running commands manually. What
followed was a lot of debugging with help from other developers on the
FreeDOS email list, where we concluded the BIOS didn't provide LBA
support, and the FreeDOS SYS command installed an LBA bootloader for
FAT32 partitions.
The secret is in how operating systems address hard drives. In the
classic days of computing, you used three parameters to access data on a
hard drive: cylinders, heads, and sectors. But since the 1990s,
computers supported a different, more flexible way to address the data
on hard drives: logical block addressing (LBA). The FreeDOS SYS
command will detect LBA support where available and use that.
The BIOS on the QEMU virtual machine supported LBA, but the BIOS on the
Pocket386 does not. This makes it impossible to boot with LBA on the
Pocket386. To fix this, I had to use an undocumented parameter in
FreeDOS SYS to make the hard drive bootable using CHS.
Normally, the manual steps to install DOS on a new system are FDISK
to create just a small "C:" drive, FORMAT to create the
filesystem, and SYS to make it bootable. After booting QEMU with the
CF card on my Linux desktop, I used FreeDOS FDISK to create a new
partition that used the whole 2 GB disk, and marked it
"Active." (An "Active" partition means it can be
a bootable disk.) I then ran FORMAT C: to create a DOS filesystem on
the new partition. So far, that's as normal. But to transfer the
boot code to the drive, I added this option to the SYS command:
SYS C: /FORCE:CHS
Loading the CF back to the Pocket386, FreeDOS successfully booted to a
C:\> prompt!
Installing FreeDOS in 'Advanced Mode'
However, the rest of the FreeDOS software wasn't installed yet. I swapped the CF card back to Linux and ran QEMU one more time, so I could use the FreeDOS installer.
But I didn't want the installer to perform its usual steps,
because that includes running SYS on the new filesystem. I could have
installed the packages manually by unzipping them, but the installer has
an "Advanced Mode" that gives the user more control -
including skipping the SYS step. To access "Advanced
Mode," exit the installer and return to the DOS prompt. Then type:
SETUP ADV
If the installer has a "red" theme, you know you're in "Advanced Mode.".
Running in "Advanced Mode" gives you more control over the
install process, including the ability to skip the SYS step. When the
installer prompts if you want to transfer the system files to the hard
drive, that's the SYS step. Select "No" to skip
this.
Retro computing on the Pocket386
After the installation is complete in QEMU, I shut down and swapped the CF card back to the Pocket386. And now I have FreeDOS running on the Pocket386!
The installation requires the extra step to force CHS mode when making the drive bootable, but that's not a bad tradeoff when I had to install from a completely different system. The root of the problem is QEMU supports LBA mode, because it is a more recent implementation - but the 1996 BIOS on the Pocket386 only supports CHS mode. The QEMU virtual machine does a great job of emulating a real computer, but it isn't a perfect match for the hardware on this Pocket386.
To transfer files to and from the Pocket386, I need to connect the CF
card to my Linux machine using the CF reader. To access the drive from
Linux, I can use the mount command:
$ sudo mount /dev/sda1 /mnt
This sets the owner of everything on the CF card to the root user. To
instead set the owner to the user with ID 1000, you would instead
type:
$ sudo mount -o uid=1000 /dev/sda1 /mnt
Or to use the username jhall, you can type:
$ sudo mount -o uid=jhall /dev/sda1 /mnt
However you access the CF card, you can then transfer files between
Linux and the CF drive using your file manager or the command line. When
you're done, don't forget to use unmount so Linux will
stop using the drive:
$ sudo umount /mnt
Transferring files this way is a bit inconvenient, but not too different than copying files between systems using "old school" floppy disks. And it allows me to copy over any other files I want to use on the Pocket386, such as my favorite shareware games. This is a good system to run classic DOS games, including Commander Keen.
Overall, the Pocket386 is a great micro laptop for running FreeDOS. I've been experimenting with it, and it does a great job. I can run my favorite classic DOS applications and games - and I also installed a C compiler so I can write my own programs to add this neat little device. I look forward to playing with it further over the summer. And now, if I need to test FreeDOS on legacy hardware, I can use the Pocket386.
Adapted from Installing FreeDOS on legacy hardware