Skip to content

Hard disk emulation over serial port for PC XT clone using XTIDE

charlysan edited this page Apr 10, 2023 · 6 revisions

Table of contents

Introduction

This guide will try to show the whole process of emulating a hard disk over serial port using XTIDE Universal BIOS and ISA network card with Boot ROM. The emulated disk will then be used to boot a PC XT clone, but same principle could be used for other PC XT/AT variants.

The idea will be to use an emulator (PCem) to create a virtual disk and install DOS along with other software, and then we should be able to mount that disk image using XTIDE and a serial server on the real hardware.

Hardware used

  • JUKO XT Motherboard
  • NEC V20 CPU (D70108C-8)
  • Winbond W83757F Multi I/O ISA card
  • Intel EtherExpress PB305898-002 8/16-Bit ISA network card
  • 28C64 8KB ROM (AT28C64B)
  • Raspberry Pi
  • USB to Serial TTL
  • TTL to RS232 adapter
  • GQ-4x4 EEPROM programmer
  • 486 PC (used to configure EtherExpress card)

Requirements

Getting started with PCem

Download and install PCem. If you are using MacOS, you will have to build it from source. Search for PCem-ROMs and download all the ROMs. Note that for MacOS, ROMs should be added in the following path: ~/Library/Application Support/PCem/roms/

Dump BIOS ROM

You can skip this step, it is not really needed; but I wanted to replicate my hardware as much as possible, so I decided to dump the BIOS ROM of my board and use it in the emulator.

This should be straightforward, just grab the ROM from you board and read it using your EPROM programmer. You should get an 8 KB raw image file that might look like this:

You can download my BIOS dump here.

Copy your dump to the jukoxt roms path (~/Library/Application Support/PCem/roms/jukopc/000o001.bin for MacOS).

Setup PCem

You should now be ready to startup PCem. Create a new machine, by choosing Juko XT clone:

Add some floppy drives (I will use 5.25" 360K) and a Hard drive using Raw image format, and choose [IDE] XTIDE as HDD:

Write down disk geometry, you will need that later.

Boot the machine, you should see your BIOS startup message and then XTIDE taking over the boot process:

Now, you can mount DOS 3.30 disk1 into drive A:

Restart the machine. DOS should now boot from drive A:

From there you can create a primary partition using fdisk and then format drive C: with /s option to copy OS files:

FDISK C:
FORMAT C: /S

Restart the machine. It should boot from drive C:

From there, you should be able to copy some tools to your virtual 32MB disk.

Mount disk image in host

You can now mount your disk image in your host machine. For MacOS you can just open the juko_30.img file and Disk Utility should mount it.

For Linux, you can try something like this:

mount -t vfat \
-o loop,offset=$((17 * 512 )) \
juko_30.img /mnt/xt30 \
-o rw,uid=$(id -u),gid=$(id -g)

And you can try to run some programs:

Notice BOOT ROM at 0xC800 shown by Checkit.

Configure XTIDE BIOS ROM

Fetch XTIDE binaries and copy the one you want (I'll use ide_xtp.bin as that's optinized for NECv20) along with xtidecfg.com to your virtual drive (or you can use DOSBOX or a real PC with DOS). Run xtidecfg.com and load the rom:

Go to Configure XTIDE Universal BIOS and then Primary IDE Controller. Choose Serial port virtual device for type:

and set Baud Rate to 115.2K or 57.6K (both worked for me):

Finally, save your changes to image file:

Burn XTIDE ROM

Now take the ide_xtp.bin file you modified using xtidecfg.com and burn it to your EEPROM. I'm using a AT28C64B EEPROM, but any 27c64 should work too.

Notice the last three bytes of XTIDE dump:

0xA1 is the checksum, and it's duplicated because some cards (like mine) overrides the last byte of the ROM.

Configure network card for BOOT ROM

Next step is to configure your EtherExpress network card. This could be a bit tricky though.

Memory map for IBM PC looks like this:

ROM range goes through 0xC0000 to 0xFFFFF, and expansion BIOS range fits between 0xC0000 and 0xE0000. However, this range can be used by any device that has a BOOT ROM (e.g. a video card). I will use 0xC8000 as start address for the XTIDE BOOT ROM, as shown in PCem Base Memory Map above, but you might need to move that a bit higher if you already have that space occupied by other ROM.

Some network cards have jumpers to set the BOOT ROM base address, unfortunately mine is Pug&Play, so I will have to configure it by software. To do that, I will insert it into a 486 PC, and then run softset2.com from there. The tool should detect your card.

Go to Manual Setup and set Bot ROM start address to C800

Finally, press F10 to accept the changes. Your card should be properly configured now, and you can remove it from your PC.

You should now be able to put your XTIDE ROM into the card's ROM socket:

And it should be ready to be installed on the XT motherboard. Next step will be to startup the Serial Server on the RPi.

Setup Serial Server

Connect your RPi to the XT serial port using the USB2TTL and TTL2RS232 adapters.

Download XTIDE Serial Server and build it from source.

Then you can startup the server like this:

./serdrive -c /dev/ttyUSB0 -b 115.2K -g 615:6:17 -v 5 ~/juko_30.img

Notice disk geometry, it should match the virtual disk created with PCem.

 $ ./serdrive -c /dev/ttyUSB0 -b 115.2K -g 615:6:17 -v 5 ~/juko_30.img
SerDrive - XTIDE Universal BIOS Serial Drive Server
Copyright (C) 2012-2013 by XTIDE Universal BIOS Team
Released under GNU GPL v2, with ABSOLUTELY NO WARRANTY
v2.0.0 Beta 3 (Mar 31 2023)

/home/pi/juko_30.img: Hard Disk with CHS geometry 615:6:17, size 30.63 MB
Opening /dev/ttyUSB0 (115.2K baud)

Now turn on the computer. You should see some magic going on at the console:

And the PC should now boot into DOS from virtual drive C:

HDD benchmark doesn't look very good, but I'm not sure how accurate those values might be:

Final notes

Special thanks to FozzTexx for providing Serial Server Linux Port.