EAX: Contains the CRTC owner's VM handle.
EBX: Contains the currently running VM handle.
ECX: Contains the MemC owner's VM handle.
EDX: Contains the CRTC index register (which must be saved over call).
Save anything that you use.
If your hardware must complete a BLTer drawing operation before having its MemC state switched from Windows hi-res mode to VGA planar mode, then you must implement MAKE_HARDWARE_NOT_BUSY. Many cards (especially those based on IBM's 8514 architecture) have a command FIFO and drawing engine which should not be disturbed while drawing. This routine gives the mini-VDD notice that a switch of the MemC state will be occurring and allows it to delay that switch until the drawing engine has completed its work.
Note that many chipsets cannot be interrupted while waiting for source data to be delivered to the BLTer during a memory to screen BLT. In this case, MAKE_HARDWARE_NOT_BUSY will never show the hardware to be not busy if it happens to be called when the display driver is delivering data to the BLTer from system memory. To take care of this situation, the mini-VDD, display driver, and Main VDD must implement VDD_Set_Sleep_Flag_Addr which tells the main VDD to hold-off switching the MemC state of a MS-DOS VM until the display driver has finished delivering source data to the hardware. See VDD_Set_Sleep_Flag_Addr for more details.
VDD_Set_Sleep_Flag_Addr