home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ASMPRG.ZIP / STDMAC20.INC < prev    next >
Text File  |  1993-01-10  |  4KB  |  109 lines

  1. ;==============================================================================;
  2. ; OS/2 2.0 Assembler Routines                                                  ;
  3. ;                                                                              ;
  4. ; stdmac20.inc     Standard macros for OS/2 2.0 modules                        ;
  5. ;                                                                              ;
  6. ; INCLUDE this file after std20.inc or equivalent                              ;
  7. ;                                                                              ;
  8. ; Author: Larry Morley                                  (c) Larry Morley, 1993 ;
  9. ;==============================================================================;
  10. ; stack variables for calling 16 bit code from 32 bit code                     ;
  11. ;------------------------------------------------------------------------------
  12.  
  13. IFNDEF  __THUNK16__
  14.    EXTRN _Call16:NEAR32
  15. ENDIF
  16.  
  17. dwStackVarBytes   EQU     040H                    ; bytes for local vars
  18.  
  19. dwSavedStackPtr   EQU     DWORD PTR SS:[EBP+014H]
  20.  
  21. fwRetToCall16     EQU     FWORD PTR SS:[BP +00EH]
  22.  wRetToCall16Seg  EQU     WORD  PTR SS:[EBP+012H]
  23. dwRetToCall16Off  EQU     DWORD PTR SS:[EBP+00EH]
  24.  
  25. fwThunk16Addr     EQU     FWORD PTR SS:[EBP+008H]
  26. fwThunk16AddrDS   EQU     FWORD PTR DS:[EBP+008H]
  27.  wThunk16AddrSeg  EQU     WORD  PTR SS:[EBP+00CH]
  28. dwThunk16AddrOff  EQU     DWORD PTR SS:[EBP+008H]
  29.  
  30. dwFnToCallFrom16  EQU     DWORD PTR SS:[BP +004H]
  31. dwFnToCallFrom32  EQU     DWORD PTR SS:[EBP+004H]
  32.  wFnToCallSeg     EQU     WORD  PTR SS:[EBP+006H]
  33.  
  34. dwRetToCaller     EQU     DWORD PTR SS:[EBP+000H]
  35.  
  36. ;------------------------------------------------------------------------------
  37.  
  38. PREP16            MACRO   fn16Bit:REQ             ; prepare for call to 16-bit
  39.                                                   ; code from 32-bit code
  40.                           PUSH    EBP
  41.  
  42.                           SUB     ESP,dwStackVarBytes     ; make room on stack
  43.                           MOV     EBP,ESP                 ; for 32->16 vars
  44.  
  45.                           ; convert target fn address to 16:16
  46.  
  47.                           MOV     dwFnToCallFrom32,OFFSET FLAT:fn16Bit
  48.                           SHL     wFnToCallSeg,3
  49.                           ADD     wFnToCallSeg,7
  50.  
  51.                   ENDM
  52.  
  53. ;------------------------------------------------------------------------------
  54.  
  55. CVTLP16           MACRO   p32:REQ
  56.  
  57.                           PUSHD   OFFSET FLAT:p32
  58.                           MOV     EBX,ESP
  59.                           SHL     WORD PTR [EBX+2],3
  60.                           ADD     WORD PTR [EBX+2],7
  61.  
  62.                   ENDM
  63.  
  64. ;------------------------------------------------------------------------------
  65.  
  66. CALL16            MACRO
  67.  
  68.                   CALL    _Call16
  69.                                                   ; stack ptr += size of local
  70.                   ADD     ESP,dwStackVarBytes
  71.  
  72.                   POP     EBP
  73.  
  74.                   ENDM
  75.  
  76. ;------------------------------------------------------------------------------
  77.  
  78. EXIT_THREAD       EQU     0
  79. EXIT_PROCESS      EQU     1
  80.  
  81. $$DosExit         MACRO   dwAction:REQ, dwResult:REQ
  82.                      PUSH    dwResult
  83.                      PUSH    dwAction
  84.                      CALL    DosExit
  85.                      ADD     ESP,8
  86.                   ENDM
  87.  
  88. ;------------------------------------------------------------------------------;
  89. ; Declare stack - 16K is default stack size                                    ;
  90. ;------------------------------------------------------------------------------;
  91.  
  92. DCLSTACK          MACRO nBytes:=<04000H>
  93.                         STACK32 SEGMENT
  94.                                 DB nBytes DUP(?)
  95.                         STACK32 ENDS
  96.                   ENDM
  97.  
  98. ;------------------------------------------------------------------------------
  99.  
  100. BEGINDATA         MACRO
  101. DATA32 SEGMENT
  102.                   ENDM
  103.  
  104. ENDDATA           MACRO
  105. DATA32 ENDS
  106.                   ENDM
  107.  
  108. ;------------------------------------------------------------------------------
  109.