If you can’t image the disk using another system (and you probably can’t), I would take a two-pronged approach:
copy the files to a partition on a disk on your XT-IDE card; first the system files, using SYS, then everything else using XCOPY;
image the disk to a file in another partition on a disk on your XT-IDE card, using a disk imaging or editing tool.
Depending on your skill level and the hardware you have access to, there are a few possible approaches I can think of:
you could read the code for the various BIOSs involved and try to figure out the incompatibility that way
you could use an in-circuit emulator to debug the problem
you could use a bus sniffer such as reenigne’s to trace the system booting
I'm considering writing my own using INT13h BIOS calls. Shouldn't be reasonably simple to do.
I was writing the comment because I had already the same idea.
This is how my code looks like:
# .COM file loaded into address CS:0x100, assuming DS=ES=CS
# Create and open the output file
mov ah, 0x3C
xor cx, cx
I'm just wondering aloud because I have never tried it, nor do I know if it even supports it, but assuming that the drive controller card is ISA, what about putting that card and the hard drive into a more modern system, like say a 386 or 486 - new enough that it would support Linux but old enough that you probably would not run into compatibility issues ...
I suppose what I would try is moving all the involved ROMs to RAM (a simple byte-copy routine can handle this), but then you would need to search for absolute jumps and retarget them to whatever RAM region you copied to.
Then, write a program that soft-boots the machine (either invoke the appropriate interrupt, or simulate what the CPU does at startup), ...