I'm more of an idea man, so I can only contribute some "things to think about"
during the process, and potential enhancements (whether they are easy, or complex.)
Here they are -
Most DEC controllers only support up to 4 physical drives.
(RQDXn, UDA/KDA50's, etc.)
Some DEC operating systems are capped at (just under) 2GB per physical drive.
This is true of RSTS/E, though I'm not sure if this is true for VMS,
or any of the non-DEC operating systems.
In any event, control over emulated drive size will be needed, as well as
a setting for the number of drives per controller, as well as the starting LUN.
To simplify things, one could use a short table to specify unit numbers
and block sizes, and let the controller figure out the rest.
DU0, 400175 (RA60)
DU1, 237208 (RA80)
<blank>
DU3, 800 (RX50)
Lowest drive number would be your starting LUN.
In actual operation, the list would need to be validity-checked
before being committed to wherever configuration data is stored.
If you're going to do TMSCP by adding a second media port,
then make it so that the 2nd port can be MSCP or TMSCP.
You'll also need to be able to enable or disable the 2nd port,
in case you don't want the extra controller showing up.
What about Ready / Write Protect?
"Coolness factor" items, which should be considered -
-----------------------------------------------
As much as I hate using the "L" word, or even worse the "W" word,
I think you should start with Windows/Linux/DOS accessibility.
Not direct access, obviously, but with a small program
designed to load devices images onto the media, from
Simh, E11, or some other emulator.
The media would need a special area reserved for device information,
so that it knows what kind of volumes are stored on it.
This would eliminate any headaches involved with getting
operating systems onto the actual hardware.
Additionally, it could negate the need for a (controller based) user interface entirely.
-----------------------------------------------
Include a bootstrap at 17773000, which could
auto-boot DU0, or perhaps the VTServer stub.
-----------------------------------------------
Reserve some space on the CF/SD/USB media,
and ADD TU58 EMULATION to the device, so that
folks can have XXDP, or an RT11 distro onboard.
They could then use that for diagnostics,
or as an intermediate boot device, for systems
that don't have an MSCP bootstrap at their disposal.
-----------------------------------------------
And of course, the "beyond way cool factor" -
Approach the device from a very generic standpoint,
which could offer several of the more common emulations,
particularly for those with older operating systems to support.
DU/RL/RK/RM/RP for disks, MU/MS/TM/TS for tapes.
Providing multiple emulations on the same media
would be problematic at best, so each slot would be
limited to a single emulation.
A board with two media slots could be set for
MSCP emulation on slot 1, and RL11 emulation on slot 2.
I think this could be accomplished by making a set of routines
to handle the functions that are common to all disk/tape controllers,
and then have a "middle man" to perform the actual emulation,
by interacting with the other (common) routines.
Basically, you'd create a routine to handle all of the Q-Bus I/O,
including CSR, Vector, BIRQ, and data transfers, etc.
Then create a routine to handle all interaction
with the CF / SD / USB media, including drive sizing, etc.
Finally, create the various portions of emulation-specific code
that interacts with them, and provides the actual translations.
Store all controller / volume-specific information
in a reserved section of the CF/SD/USB media.
Upon controller initialization, this section is accessed,
providing the configuration information needed to proceed.
The controller will then load the appropriate emulation-specific code
to act as an intermediary between the QBus, and the media.
In actual use, the controller would query the media, which would respond with -
"Hey, I'm supposed to be an RL11, at 17774400, Vector 160, BIRQ 4, with
Unit 0 (RL01) Unit 1 (RL01) Unit 2 (RL02) Unit 3 (RL02) attached".
The controller would do the rest.
Not enough EEPROM space for the code for the various emulations?
No problem -- store the emulation-specific code in the reserved space
of the media, and load it at initialization instead, thereby cutting down
tremendously on the amount of EEPROM space needed.
Alternately, you could create just enough initialization code
to access the media in the first slot, and load the entire
operational code from the reserved space on the media.
Keep in mind that I know nothing about Q-Bus mechanics,
operating system drivers, device programming, etc.
Therefore, I do not know what kind of effort would be needed
to accomplish all of this. I do know, however, that it can be done