home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / patchldr.zip / GetMem.asm next >
Assembly Source File  |  1999-11-12  |  971b  |  71 lines

  1.         .386
  2.         IDEAL
  3.         SMART
  4.         LOCALS
  5.  
  6. STRUC        Desc
  7.   Base        DD    ?
  8.   BaseH     DD    ?
  9.   LenL        DW    ?
  10.   Len        DW    ?
  11.   LenH        DD    ?
  12.   Type        DW    ?
  13. ENDS        Desc
  14.  
  15. I1588Mem    = 2
  16. I15E8Mem    = 8
  17.  
  18. SEGMENT     PatchData PUBLIC 'DATA'
  19.         ASSUME    CS:PatchData
  20.  
  21. PUBLIC        PatchCode
  22.  
  23. PatchCode:
  24.         PUSH    ES
  25.         XOR    EBX, EBX
  26.         MOV    ECX, EBX
  27.         MOV    CL, 20
  28.         SUB    SP, CX
  29.         MOV    DI, SP
  30.         PUSH    SS
  31.         POP    ES
  32. get:
  33.         MOV    EAX, 0E820h
  34.         MOV    EDX, 534D4150h
  35.         INT    15h
  36.         JC    done
  37.         CMP    [(Desc SS:DI).Type], 1
  38.         JNE    continue
  39.         CMP    [(Desc SS:DI).Base], 1024*1024
  40.         JE    found
  41. continue:
  42.         OR    EBX, EBX
  43.         JNZ    get
  44.         JMP    done
  45. found:
  46.         MOV    AX, [(Desc SS:DI).Len]
  47.         MOV    BX, AX
  48.         MOV    CX, 240
  49.         SUB    BX, CX
  50.         JAE    morethan16M
  51.         XOR    BX, BX
  52.         MOV    CX, AX
  53. morethan16M:
  54.         SHL    CX, 6
  55.         MOV    [I1588Mem], CX
  56. Patch1        =    $ - 2
  57.         MOV    [I15E8Mem], BX
  58. Patch2        =    $ - 2
  59. done:
  60.         ADD    SP, 20
  61.         POP    ES
  62.  
  63. PatchSize    DW    $ - PatchCode
  64. Patches     DW    Patch1, Patch2
  65.  
  66. PUBLIC        PatchSize, Patches
  67.  
  68. ENDS        PatchData
  69.  
  70.         END
  71.