I am maintaining a large portion of legacy code, written in C. This code was initially written to be comiled against Windows 3 for Workgroups, and later a version for NT was created. This legacy application is still in use today, merrily running along on 3.11 and NT workstations from the early 90's. It works and it does what it is supposed to do, and the reason that they still live on is that the drivers for some of the custom hardware belonging to the solution are not compatible with later Windows.
There is also a different application i have maintained that for the same reasons only work on Win2k.
However, as things move on, it is getting increasingly hard to run these legacy environments. Right now i keep physical machines with the development software installed, so i can work on native hardware. But these may die at any time (they are 25 years old after all).
So my question is, seeing as it is 2016, what are my options for maintaining this archaic environement in a more stable way? Can you move a 3.11 to cloud hosting?
I tried virtualization, but due to the specialized nature of the setups, i could not get it to work with the device drivers, so i am thinking that one may need to make a full image of the OS as is and then run that in a VM to develop the software? Is such a thing possible for guest OS versions as old as Win3 and NT?
Are there any experience in keeping older platforms like these alive for development, but in a more modern, secure fashion, that i can draw from?
My goal is to get rid of the old physical machines, and move to virtualization.