Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I'd be inerested in a full rundown on exactly what the differences are between floppy image formats commonly used by PC98 emus #6

Open
Videogamer555 opened this issue Jun 17, 2024 · 1 comment

Comments

@Videogamer555
Copy link

Videogamer555 commented Jun 17, 2024

First let me explain my situation:
Unlike DOSBox or other emulation or virtualization software intended for running normal x86 OS's and programs, the PC98 (despite having an Intel 8086 CPU) has enough hardware differences that it requires its own emulation code and thus PC98 emulators are their own separate thing.

One strange thing I noticed though is that instead of adopting using standard raw .img floppy image formats, the makers of PC98 emulators seem to have gone with using their own proprietary floppy image formats. I don't understand why either. I think some of them have a header that includes physical characteristics of the disk, but this is unnecessary. There's 4 basic floppy disk physical types, and those are:
single-sided-single-density
single-sided-double-density
double-sided-single-density
double-sided-double-density

Each of those has a different disk capacity, so you can tell exactly what type of disk a disk image was made from using just the size (byte count) of the disk image file itself. My only thought is that each emulator writer (and there are a few different PC98 emus) wanted you to use THEIR proprietary format, mainly for ego reasons for the emulator writer. That's the only reason I can assume for using a proprietary format for each emulator. This means that unless the guy who wrote the emulator also dumped the game you happened to want to play, you'd need to download a different emulator that supports the floppy image file format that the game you want to play happened to have been dumped in.

Fortunately VFIC exists to convert between these formats so the problem of running a game in one format on a different emulator isn't as big of a deal anymore. One thing it doesn't support though in terms of converting to or converting from, is a plain raw .img floppy image format. This means that if you happen to have a physical PC98 disk and want to dump it from your USB floppy drive on your Windows 10 computer to an ordinary .img format using commonly available software (such as WinImage) you'll get an image file that can run in ANY PC98 emulator, nor can VFIC convert it to any format used by an emulator because VFIC doesn't recognize raw .img type floppy disk images.

Also if you want to copy files off of a proprietary format PC98 disk image (that's usable in emulators) using normal software like WinImage, you can't. One might want to in fact be able to copy game graphics off the disk image, and then edit those graphics and copy them back to the disk image, if you are a game modder. Fortunately VFIC does let you dump the contents of the disk image if it's in one of those proprietary formats for use in PC98 emulators, but it won't let you copy those files back onto the disk image after editing, and also if you are starting with a raw .img type floppy (if you dumped it yourself using commonly available software) even though you can copy files to and from it easily it won't load in any PC98 emulator nor be convertable to such a disk image format with VFIC. So there's really a huge barrier between the ecosystem of PC98 emulation and ordinary disk images.

So here's where my request for help form you comes in:
So I've decided to try to make a universal floppy disk image converter to supersede VFIC, because I intend to add in the ability to convert to and from normal raw floppy formats too, which would be a GAME CHANGER for the PC98 fandom if such a software existed. But for that massive project I'll need to know exactly what info is stored in the headers each of the proprietary PC98 floppy image formats, as well as any encryption, compression, or obfuscation that be applied to these disk image formats' payload sections (just in case some of these formats were made by people who REALLY wanted to keep them proprietary and discourage reverse engineering). And that's where you would be helpful to me, which is why I'm asking you, the maker of this Github page, to help me. You seem to have done a lot of reverse engineering on the proprietary floppy image formats used in the PC98 emulation ecosystem, so if I can have all the information you've managed to gather on each of these formats, it would be great.

In addition to supporting raw floppy image format (which VFIC doesn't), I would like to also support all of the formats that VFIC does support. This would be what makes it a truly universal floppy image converter. From what I've seen, VFIC supports the following formats:
BKDSK
D88
DCU
DCP
DIM
FDD
FDI
Mahalito
NFD
TFD
ERCVFD
XDF

I can't find any documentation for the actual internal structures of these file formats, so I can't get started at all on my project until you, or someone else who's done extensive reverse engineering on them, actually publishes your reverse engineered specs for those formats. I really need help with this. It would be great if you could help.

@barbeque
Copy link
Owner

barbeque commented Aug 1, 2024

Best reference for D88 I've found so far is https://illusioncity.net/PC88/D88STRUC.txt

I think I did a DIM-to-D88 converter for the purposes of using PC88 XDisk to write X68000 disks, but I never tested it because the PC88 needed a motherboard repair: https://github.com/leaded-solder/x68000-floppy-tools?tab=readme-ov-file#d88-conversion

My understanding of BKDSK is that it's basically a raw disk image, and FDI is BKDSK with a header on it. I'm not sure about the rest of these images.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants