home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / Runimage / Delphi50 / Source / Rtl / Sys / SE.ASM < prev    next >
Encoding:
Assembly Source File  |  1999-08-11  |  2.4 KB  |  141 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Delphi Runtime Library                          *
  5. ; *    Macros                        *
  6. ; *                            *
  7. ; *    Copyright (c) 1996,98 Inprise Corporation    *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     LOCALS    @@
  12.  
  13. ; Public variable definition macro
  14.  
  15. VAR MACRO Symbol,SType,Count
  16.   PUBLIC Symbol
  17.   Symbol LABEL SType
  18.   IF Count
  19.     DB SType * Count DUP(?)
  20.   ENDIF
  21. ENDM
  22.  
  23. ; Parameter definition macro
  24.  
  25. ARG MACRO Symbol,SType,Count,Align
  26.   LOCAL Offset
  27.   LOCAL Size
  28.   IF (@AC GE 3) OR (SType GT 4)
  29.     Size = (SType * Count)
  30.     IFNB <Align>
  31.       Size = Size + (Size MOD 4)
  32.     ENDIF
  33.     @AP = @AP + Size
  34.     Offset = @AP
  35.     Symbol EQU (SType PTR [EBP+@AF-Offset])
  36.   ELSEIF @AC EQ 0
  37.     Symbol EQU (EAX)
  38.   ELSEIF @AC EQ 1
  39.     Symbol EQU (EDX)
  40.   ELSEIF @AC EQ 2
  41.     Symbol EQU (ECX)
  42.   ENDIF
  43.   IF SType LE 4
  44.     @AC = @AC + 1
  45.   ENDIF
  46. ENDM
  47.  
  48. @AP = 0
  49. @AC = 0
  50. @AF = 8
  51.  
  52. ; Local variables definition macro
  53.  
  54. LOC MACRO Symbol,SType,Count
  55.   LOCAL Offset
  56.   @LP = @LP + SType * Count
  57.   Offset = @LP
  58.   Symbol EQU (SType PTR [EBP+@LF-Offset])
  59. ENDM
  60.  
  61. @LP = 0
  62. @LF = 0
  63.  
  64. ; Entry code generation macro
  65.  
  66. ENTRY MACRO
  67.   IF (@AC GE 3) OR @LP
  68.     PUSH EBP
  69.     MOV EBP,ESP
  70.     @AF = @AP + 8
  71.     @LF = 0
  72.     IF @LP
  73.       SUB ESP,@LP
  74.     ENDIF
  75.   ENDIF
  76. ENDM
  77.  
  78. ; Exit code generation macro
  79.  
  80. EXIT MACRO ArgSize
  81.   IF @LF - @LP
  82.     MOV ESP,EBP
  83.   ENDIF
  84.   IF (@AP GE 3) OR (@LF - @LP)
  85.     POP EBP
  86.   ENDIF
  87.   IFNB <ArgSize>
  88.     @AP = ArgSize
  89.   ENDIF
  90.     RET @AP
  91.   @AP = 0
  92.   @LP = 0
  93.   @AC = 0
  94. ENDM
  95.  
  96. ; *******************************************************
  97. ; *                            *
  98. ; *    EQUATES                        *
  99. ; *                            *
  100. ; *******************************************************
  101.  
  102. ; 10-Byte record
  103.  
  104. b0        EQU    (BYTE PTR 0)
  105. b1        EQU    (BYTE PTR 1)
  106. b2        EQU    (BYTE PTR 2)
  107. b3        EQU    (BYTE PTR 3)
  108. b4        EQU    (BYTE PTR 4)
  109. b5        EQU    (BYTE PTR 5)
  110. b6        EQU    (BYTE PTR 6)
  111. b7        EQU    (BYTE PTR 7)
  112. b8        EQU    (BYTE PTR 8)
  113. b9        EQU    (BYTE PTR 9)
  114.  
  115. ; 5-Word record
  116.  
  117. w0        EQU    (WORD PTR 0)
  118. w2        EQU    (WORD PTR 2)
  119. w4        EQU    (WORD PTR 4)
  120. w6        EQU    (WORD PTR 6)
  121. w8        EQU    (WORD PTR 8)
  122.  
  123. ; 3-DWord record
  124.  
  125. d0        EQU    (DWORD PTR 0)
  126. d4        EQU    (DWORD PTR 4)
  127. d8        EQU    (DWORD PTR 8)
  128.  
  129. ; 8087 status word masks
  130.  
  131. mIE        EQU    0001H
  132. mDE        EQU    0002H
  133. mZE        EQU    0004H
  134. mOE        EQU    0008H
  135. mUE        EQU    0010H
  136. mPE        EQU    0020H
  137. mC0        EQU    0100H
  138. mC1        EQU    0200H
  139. mC2        EQU    0400H
  140. mC3        EQU    4000H
  141.