[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]

    UNIT DPMI;              { DPMI routines, Last Updated Aug 7/93          }
                            { Copyright (C) 1993, Greg Estabrooks           }
    INTERFACE
    {***********************************************************************}
    VAR
       DPMIControl :POINTER;
       ParNeeded   :WORD;

    FUNCTION DPMI_Installed :BOOLEAN;
                            { Routine to Determine whether a DPMI API is    }
                            { installed. If it is installed it loads the    }
                            { address of the API into DPMIControl for later }
                            { program use. Loads ParaNeeded with paragraphs }
                            { needed for Host data area.                    }

    FUNCTION DPMIControlAdr :POINTER;
                            { This routine returns a pointer to the DPMI    }
                            { control.                                      }

    FUNCTION DPMIVer :WORD;
                            { This routine returns the Version of the DPMI  }

    FUNCTION Processor :BYTE;
                            { Routine to return processor type as returned  }
                            { by the DPMI API.                              }

    {***********************************************************************}
    IMPLEMENTATION

    FUNCTION DPMI_Installed :BOOLEAN; ASSEMBLER;
                            { Routine to Determine whether a DPMI API is    }
                            { installed. If it is installed it loads the    }
                            { address of the API into DPMIControl for later }
                            { program use. Loads ParaNeeded with paragraphs }
                            { needed for Host data area.                    }
    ASM
      Mov AX,$1687                  { Function to check for DPMI.           }
      Int $2F                       { Call Int 2Fh.                         }
      Cmp AX,0                      { Compare Result to 0.                  }
      Je @Installed                 { If its equal jump to Installed.       }
      Mov AL,0                      { Else return FALSE.                    }
      Jmp @Exit                     { Jump to end of routine.               }

    @Installed:
      Mov DPMIControl.WORD,DI       { Load pointer ES:DI into DPMIControl.  }
      Mov DPMIControl+2.WORD,ES
      Mov ParNeeded,SI              { Load Paragraphs needed into ParNeeded.}
      Mov AL,1                      { Set true flag.                        }

    @Exit:
    END;{DPMI_Installed}

    FUNCTION DPMIControlAdr :POINTER; ASSEMBLER;
                            { This routine returns a pointer to the DPMI    }
                            { control.                                      }
    ASM
      Mov AX,$1687                  { Function to return point to API.      }
      Int $2F                       { Call Int 2Fh.                         }
      Mov DX,ES                     { Pointer info is returned in ES:DI.    }
      Mov AX,DI
    END;{DPMIControlAdr}

    FUNCTION DPMIVer :WORD; ASSEMBLER;
                            { This routine returns the Version of the DPMI  }
    ASM
      Mov AX,$1687                  { Function to get version of DPMI API.  }
      Int $2F                       { Call int 2Fh.                         }
      Mov AX,DX                     { Version is returned in DX.            }
    END;{DPMIVer}

    FUNCTION Processor :BYTE; ASSEMBLER;
                            { Routine to return processor type as returned  }
                            { by the DPMI API.                              }
    ASM
      Mov AX,$1687                  { Function to get info from DPMI.       }
      Int $2F                       { Call Int 2Fh.                         }
      Mov AL,CL                     { Processor type returned in CL.        }
    END;{Processor}

    BEGIN
    END.

[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]