[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
Int 67 Fn 3F  U - QEMM-386 V4.23+ - Installation Check  (Cont.)

           calls AX=1307h
   AX = 130Eh ??? (modifies CRT controller setup)
       ???

       Return: CF clear
   AX = 130Fh reset ???

       Return: CF clear
   AX = 1310h ???
       ???

       Return: CF clear

       Note:   disables certain interrupts at the two 8259 PICs during
             execution (see AX=130Ch) and runs inside a QEMM
             critical section
           also calls AX=130Dh
   AX = 1311h set ???
       BL = ???

       Return: CF clear
   AX = 1312h (v6.02) NOP???

       Note:   called by DV 2.42, but appears to be a NOP in QEMM 6.02
   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.x support
       AL = subfunction
           00h get EMM Import Structure address
           ES:DI -> buffer for EMM import data structure

           Return: CF set on error
               CF clear if successful
           EMM Import data structure:
           Offset  Size    Description
            00h    DWORD   physical address of EMM import struct
            04h    BYTE    major version (v6.00 sets to 01h)
            05h    BYTE    minor version (v6.00 sets to 00h/0Bh)

           See Also: INT 21/AX=4402h/SF=01h
           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: ???

           See Also: 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-7.01 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 v7.01 behaves similarly for
           AL=04h-1Bh
     ---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

       Note:   functions 1Dxxh are not supported by QEMM v7.01, and
             always return CF set
   AH = 1Eh Stealth information (documented)
       AL = subfunction
           00h "QEMM_GET_INFO" get Stealth configuration

           Return: BL = flags (documented as "reserved")
                   bit 0: conventional memory sorted
                   bit 1: conventional memory filled
                   bit 2: ???
                   bit 3: ???
                   bit 4: expanded memory is in use
                   bit 5: ???
               BH = reserved (always 00h for v6.00)
               CL = stealth type (00h none,46h Frame,4Dh Map)
               CH = suspend/resume interrupt (00h none)
               DX = reserved (always 0000h for v6.00)
               SI = reserved (always 0000h for v6.00)
               DI = reserved (always 0000h for v6.00)
           01h "QEMM_GET_STEALTH_COUNT" get number of Stealth'ed ROMs

           Return: CF clear
               BX = number of Stealth'ed ROMs
           02h "QEMM_GET_STEALTH_LIST" 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 (documented)
       AL = subfunction
           00h "QEMM_GET_PTE" get page table entry
           CX = page number

           Return: EDX = page table entry
               CF clear
           01h "QEMM_SET_PTE" set page table entry
           CX = page number
           EDX = new page table entry

           Return: CF clear

           See Also: function 1008h
           else

           Return: CF set
   AH = 20h asynchronous disk access support (documented)
       AL = subfunction
           00h "QEMM_GET_VHI_INFO" get VirtualHDIRQ information

           Return: CF clear
               BL = flags
                   bit 7: VirtualHDIRQ setting respected
                    (set if Stealth active)
                   bits 6-1 reserved
                   bit 0: VirtualHDIRQ currently enabled
                   (INT 15/AH=90h suppressed when enabled)
           01h "QEMM_SET_VHI_FINO" set VirtualHDIRQ state
           BL bit 0 = new VirtualHDIRQ state

           Return: CF clear
               BL = old VHI setting (bits 0 and 7, see above)
           else

           Return: CF set
   AH = 21h Stealth support (documented)
       AL = subfunction
           00h "QEMM_COPY_STEALTH_ROMS" copy data from Stealthed addr
           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+ ---
   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
   ---QEMM v6.04+ ---
   AH = 23h ???
       AL = subfunction
           00h get ???
           BX = which ??? to get (must be 0000h for v6.04)

           Return: CF clear if successful
                   ES:DI -> ???
               CF set on error
           01h set ???
           BX = which ??? to set (must be 0000h for v6.04)
           ES:DI -> ???

           Return: CF clear if successful
               CF set on error
           02h clear specified ???
           BX = which ??? to clear (must be 0000h for v6.04)

           Return: CF clear if successful
               CF set on error
           FFh clear all ???
           else

           Return: CF set
   ---QEMM v7.01 only---
   AH = 24h ST-DBL support
       AL = subfunction
           00h set ???
           EDX -> information table
               (EDX = segment SHL 16 + offset)
           01h ???
   other

       Return: CF set

Format of QEMM 6.0 memory statistics:
Offset Size    Description
 00h   BYTE    01h if Shadow RAM found, 00h otherwise
 01h   DWORD   initial conventional memory in bytes
 05h   DWORD   initial extended memory in bytes
 09h   DWORD   initial expanded memory in bytes
 0Dh   DWORD   initial "top" or "shadow" memory in bytes
 11h   DWORD   Unavailable conventional memory in bytes

.NG limit reached, continued in next section...

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