-
Notifications
You must be signed in to change notification settings - Fork 0
Hard disk emulation over serial port for PC XT clone using XTIDE
- Introduction
- Hardware used
- Requirements
- Getting started with PCem
- Configure XTIDE BIOS ROM
- Burn XTIDE ROM
- Configure network card for BOOT ROM
- Setup Serial Server
- Final notes
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.
- 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)
- MacOS/Linux
-
PCem emulator
- Juko XT ROM
- XTIDE ROM
- EtherExpress SofSet2 DOS configuration and diagnostic utility
- XTIDE Universal BIOS
- Serial Server Linux Port
- MS-DOS 3.30 (or above) image disks
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/
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).
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.
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.
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:
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.
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.
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:
Special thanks to FozzTexx for providing Serial Server Linux Port.