[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
        AX = 1400h ???
                ES:DI -> ??? data structure (at least 24 bytes)
                BL = ???
                Return: AX = ???
                Data structure
                Offset  Size    Description
                 00h    WORD    ???
                 02h    DWORD   far pointer to ???
                 06h    DWORD   far pointer to ??? pointer array (see below)
                 0Ah    DWORD   far pointer to ???
                 0Eh    DWORD   ???
                 12h    WORD    segment of ???
                 14h    DWORD   far pointer to ???
                Pointer array
                Offset  Size    Description
                 00h    WORD    number of pointers to follow
                 02h  N DWORDs  far pointers to ???
                Note: QEMM converts the pointers into linear addresses in place
        AX = 1401h ???
                Return: CF clear
                        ???
        AX = 1402h ???
                BL = function
                    00h NOP
                    01h ???
                    02h ???
                    other ???
                ES:DI -> ???
                Return: CF clear
                        ???
                Data structure
                Offset  Size    Description
                 00h    WORD    segment of ??? (X, word at X:0136h set to X)
                 02h    WORD    segment of ??? (word at X:0124h set to this)
                 04h    WORD    number of paragraphs of ???
                 06h  3 WORDs   ??? (copied to X:0000h)
                 0Ch    WORD    ???
        AX = 1403h add ??? to list and ??? (execute func 1406h)
                ES:DI -> ??? structure added to end of ??? list
                        (at least 31 bytes, DWORD at offset 06h used for
                         storing pointer to next struc, WORD at offset 00h
                         seems to be a key or index)
                Return: CF clear
        AX = 1404h NOP
        AX = 1405h remove ??? from ??? list
                BX = key???
                Return: CF clear
        AX = 1406h ???
                ???
                Return: CF clear
                        ???
        AX = 1407h ???
                ???
                Return: CF clear
                        ???
        AX = 1408h ???
                ???
                Return: CF clear
                        ???
        AX = 1409h ???
                ???
                Return: CF clear
                        ???
        AX = 140Ah ???
                BX = ???
                Return: CF clear
                        ???
        AX = 140Bh ???
                BX = ???
                Return: CF clear
                        SI = segment of 256-byte buffer???
        AH = 15h ???
                ES:BX -> ??? or 0000h:0000h
                Return: CF clear
     ---QEMM v5.00+ ---
        AX = 1600h get memory access status
                ES:DI -> 256-byte buffer
                Return: ES:DI buffer filled
                Note:   each byte of the buffer indicates the status of a 4K
                          page (bit 0 set if read, bit 1 set if written)
        AX = 1601h set memory access status
                ES:DI -> 256-byte buffer containing access statuses (see above)
        AH = 17h get memory usage statistics
                ES:DI -> 81-byte buffer for memory statistics (see below)
                Return: CF clear
     ---QEMM v5.11+ ---
        AH = 18h check whether conventional memory mapped into address range
                ES:BX = starting address
                CX = number of 4K pages
                Return: CF clear
                        AL = 00h one or more pages is remapped
                             01h all pages in range are conventional memory
                                (physical address == virtual address)
        AH = 19h NOP
                Return: CF set
        AH = 1Ah I/O port access
                AL = subfunction
                    00h get byte from I/O port
                        Return: BL = port value
                    01h send byte to I/O port
                        BL = value to send
                    02h send byte to I/O port, get byte from following port
                        BH = value to send
                        Return: BL = value read
                    03h send bytes to two consecutive I/O ports
                        BH = value for first I/O port (DX)
                        BL = value for second I/O port (DX+1)
                DX = port number
                Return: CF clear
        AH = 1Bh MS Windows 3 support
                AL = subfunction
                    00h get ???
                        ES:DI -> buffer for ??? data structure
                        Return: CF set on error
                                CF clear if successful
                        Data structure:
                        Offset  Size    Description
                         00h    DWORD   pointer to ???
                         04h    BYTE    ??? (v6.00 sets to 01h)
                         05h    BYTE    ??? (v6.00 sets to 00h or 0Bh)
                        SeeAlso: INT 21/AX=4402h"QEMM"
                    01h ???
                        Return: CF set on error
                                CF clear if successful
                    02h ???
                        Return: CF set on error
                                CF clear if successful
                    03h MS Windows initializing
                        CX = segment from which Windows init broadcast made???
                        DL = Windows startup flags???
                        DI = Windows version number (major in upper byte)
                        Return: ???
                        SeeAlso: INT 2F/AX=1605h
                    04h MS Windows terminating
                        Return: CF clear
                    05h determine whether program is driver???
                        DS:DX -> ASCIZ filename
                        Return: CF clear
                                AL = 01h if string ends in ".DRV"
                                   = FFh if string ends in "GDI.EXE"
                                   = 00h otherwise
                    06h ???
                        CX = length of data pointed at by DS:DX
                        DS:DX -> ???
                        Return: CF clear
                    07h BUG: QEMM 6.00-6.03 accept this and branch randomly
                    else Return: CF set
        AH = 1Ch protected-mode hardware interrupt handlers ???
                AL = subfunction
                    00h restore??? IRQ0-7 handlers
                    01h set??? IRQ0-7 handlers
                        ES:DI -> 8 DWORDs containing ???
                    02h restore??? IRQ8-15 handlers
                    03h set??? IRQ8-15 handlers
                        ES:DI -> 8 DWORDs containing ???
                BUG: although the jump table only contains four entries,
                        QEMM 6.00 will attempt to use it for any value of
                        AL between 00h and 2Ah, thus branching unpredictably
                        for AL=04h-2Ah
     ---QEMM v6.00+ ---
        AH = 1Dh Stealth interrupts
                AL = subfunction
                    00h switch to pre-Stealth interrupt vector table
                        Note:   also switches VGA Save table pointer
                                  (0040h:00A8h) and overwrites the vectors
                                  currently assigned for use by the two
                                  interrupt controllers (see INT 67/AX=DE0Ah)
                                  with the vectors for INT 08-0F and 70-77 (to
                                  avoid crashing the system).
                    01h restore user interrupt vector table
                        Notes:  interrupts should be disabled around the
                                  AX=1D00h and AX=1D01h calls because QEMM does
                                  not modify the memory maps to map in ROM, so
                                  an interrupt could be disastrous
                                clears any pending IRQ7 at end of function
                    else
                        Return: CF set
        AH = 1Eh Stealth information
                AL = subfunction
                    00h get Stealth configuration
                        Return: BL = flags
                                    bit 0: conventional memory sorted
                                    bit 1: conventional memory filled
                                    bit 2: ???
                                    bit 3: ???
                                    bit 4: expanded memory is in use
                                    bit 5: ???
                                BH = ??? (always 00h for v6.00)
                                CL = stealth type (00h none,46h Frame,4Dh Map)
                                CH = ??? (zero/nonzero important)
                                DX = ??? (always 0000h for v6.00)
                                SI = ??? (always 0000h for v6.00)
                                DI = ??? (always 0000h for v6.00)
                    01h get number of Stealth'ed ROMs
                        Return: CF clear
                                BX = number of Stealth'ed ROMs
                    02h get Stealth'ed ROM info
                        ES:DI -> buffer for Stealth ROM info (see below)
                        Return: CF clear
                                BX = number of Stealth'ed ROMs
                                ES:DI buffer filled
                    else
                        Return: CF set
        AH = 1Fh page table manipulation
                AL = subfunction
                    00h get page table entry
                        CX = page number
                        Return: EDX = page table entry
                                CF clear
                    01h set page table entry
                        CX = page number
                        EDX = page table entry
                        Return: CF clear
                        SeeAlso: function 1008h
                    else
                        Return: CF set
        AH = 20h asynchronous disk access support???
                AL = subfunction
                    00h get ???
                        Return: CF clear
                                BL = flags
                                    bit 7: ??? (set if Stealth:F or :M active)
                                    bit 0: ???
                    01h set ???
                        BL = ??? (bit 0 only)
                        Return: CF clear
                    else
                        Return: CF set
        AH = 21h Stealth support
                AL = subfunction
                    00h copy data from Stealthed address space
                        DS:SI -> start address of hidden memory to copy
                        ES:DI -> buffer for copied data
                        ECX = number of bytes to copy
                        Return: CF clear if successful
                                CF set on error (DS:SI < C000h:0000h or
                                                 DS:SI + ECX > 1M)
                    else
                        Return: CF set
        ---QEMM v6.03 only---
        AH = 22h DESQview/X support
                AL = subfunction
                    00h get ???
                        Return: CF clear
                                ES:DI -> ???
                    01h set ???
                        ES:DI -> ??? or 0000h:0000h
                        Return: CF clear if successful
                                CF set on error
        other
                Return: CF set

This page created by ng2html v1.05, the Norton guide to HTML conversion utility. Written by Dave Pearson