INT 67H 56xxH: Alter Page Map and CALL

                                                     Compatibility: EMS 4.0+ 
 Expects: AH    55H
          AL    subfn: 00H=Use page numbers in EmsMapInfoRec.wFrameLoc
                       01H=Use segment addresses in EmsMapInfoRec.wFrameLoc
          DS:SI address of an EmsMapAndCallRec (see below)
          DX    EMM Handle (as obtained via INT 67H 4300H)
 Returns: AH    EMM status (0=successful)
    Info: This lets you swap some pages of executable code into memory,
          then execute that code, as if you had used a FAR CALL.  Upon
          return, the page mapping is restored to its previous state.

    DS:SI points to a structure that identifies which pages to map and
          where to jump.  If is formatted as:

           Offset Size Contents
           ▀▀▀▀▀▀ ▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
            +0      4  pCodeAddr     FAR address to JMP
            +4      1  bNewPgCnt     number of pages to map
            +5      4  prNewMapInfo  FAR addr of an EmsMapInfoRec
                                      containing desired mappings
            +9      1  bSavePgCnt    number of pages
           +0aH     4  prSaveMapInfo FAR addr of an EmsMapInfoRec with
                                      mappings to restore upon return
                    14                size of this structure

          Depending upon AL, the wFrameLoc fields of the EmsMapInfoRec will
          contain either page numbers (usually 0-3) or segment address (for
          instance, d000H, d400H, etc).

   Notes: See INT 67H 50xxH (map multiple pages) for related info.

          Unlike INT 67H 55xxH (map and JMP), this returns a an EMM status
          code upon return.

          The executed code must use a FAR RET to get back to the caller.

See Also: INT 67H: EMM Services
          Extended Memory Specification (XMS)
          Interrupts and BIOS Services