The Commodore 64 is an ancient 8-bit system, enjoying a niche fanbase of aging gen-Xers and the youngest Boomers. Emulators are sophisticated and sufficient. You can run games off of a Commodore disk drive attached to your Mac or PC or Linux box. You can run games off of a Commodore computer attached to your home computer acting like a disk drive. You can buy SD-card-reading hardware that replaces a Commodore disk drive. You can buy a joystick that has an embedded C64 burned into its chips. Commodore diskette and hard drive images are insignificantly tiny, compared to today's storage capacities.
What is there to improve on, and why bother?
The second question is the easiest to answer: because the problem space is interesting and well-scoped.
The first question requires creativity. However, I do have some ideas.
Networked "UDP1541"Current systems bundle all software into one application. Your C64 emulator includes disk and tape support at some level. Some are very sophisticated.
IEC emulation requires effort. It's painful. So I say, if someone has gone to the effort, make it shareable: split the disk drive into a separate application, and communicate via a primitive IEC-friendly protocol over UDP. Not only would this be a fun project, it would also allow emulators to use these "devices" even if they were programmed on a completely different platform. The FC64 AIR app could use the VICE UDP1541.
If you really must, then write it as TCP1541, i.e. using TCP/IP instead of UDP. In this way the C64 emulators may access Commodore drives located on any server anywhere on the internet.
3rd Generation Image SupportThe venerable D64 works for 99% of all emulator needs. The G64 works for the remaining 1%. So why is another format needed?
Think of it the other 'way 'round. Emulated drives are common. The D64 format is somewhat irrelevant; it's the emulation support that's more important. An opportunity arises to support the 1541's quirks while not being constrained by it.
So rather than a new format, I suggest that
disk drive emulators should be highly parameterized, and tweaked to read those parameters from disk images when present.
I see three areas of compatability: (1) small programs, (2) large programs, and (3) experimentation.
First, MY SolutionMy solution is an image header block: the first block, if identified by an identification label and image configuration parameters, would not only tell any reader exactly where all data is located, but also the structure of the data itself -- for example, the number of tracks in each of the four zones, how the BAM is stored in special cases, if error bytes are prepended or appended, if the image is allocated fully or is permitted to grow, and so on. This information and more sits easily within one block of data, and essentially paramaterizes a disk image reader.
I think the best-case scenario would be for disk drive emulators to look for this block on any mounted image that's not the correct size for a typical image file.
1. Small ProgramsWhere you have small programs, and yet want to remain compatible with a disk-image milieu, it would be nice to have smaller disk images. This argues for a flexible file format at least. One way to do this is to reorganize the disk tracks, so that the header+directory track comes first, and the remaining tracks are added
only as needed, in write-order, based on an explicit mapping.
Of course, if you have the flexible image format, all you have to do is define the format, and you're done.
2. Large ProgramsThe other potential gain is in large, multi-disk programs. In this case, it would be nice to be able to store more than 174k in one image. You could define a larger disk image in some cases.
However, I think a better solution in many (but not all) cases is for emulators to understand the TAR format, and use archiving to group related disks together.
3. ExperimentationThis to me is the funnest part. If a disk reader is highly parameterized, there are lots of custom images you can make, and you'd be free to explore the space without worrying about support.
I have custom image formats that I've played with, and found that a little bit of parametric data goes a long way. While not immediately practical, there is potential for interesting formats. Perhaps this is the best way to archive programs, too: let the file size dictate how many zones, how many tracks, how many sectors to have.