EAX: Contains the value to output to port (on an OUT call).
EBX: Contains the VM handle for which the I/O is being done.
ECX: Contains the I/O flags (documented in VMM.INC).
EDX: Contains the port that the I/O is to be done to or from.
EBP: Points to VM's client registers.
CY set indicates that the mini-VDD has done the I/O and that the Main VDD should take no further action. In this case, AL should contain the return value from the IN call and all registers except EBX and EBP may be destroyed.
NC set indicates that the mini-VDD may have taken some action but wants the Main VDD to do the default action. In this case the mini-VDD must not have destroyed ANY registers.
Many chipsets tack their extended registers onto the standard VGA ports. These routines allow the mini-VDD to perform special actions on these ports. The VIDEO7 mini-VDD is a good example of virtualizing extensions to the Sequencer ports while the S3 and Cirrus mini-VDD's show how virtualization and notification via the VGA ports are implemented in a mini-VDD. Note that the action taken by the Main VDD is undefined for port indices which are greater than the standard VGA ports (0-18h for CRTC, 0-4 for Sequencer, 0-9 for GCR, and 0-255 for DAC ports).