home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wunderki.zip / SE.ASM < prev    next >
Assembly Source File  |  1993-08-16  |  6KB  |  328 lines

  1. ; *******************************************************
  2. ; *                            *
  3. ; *    VERSION CONTROL EQUATES                *
  4. ; *                            *
  5. ; *******************************************************
  6.  
  7. ; Boolean values
  8.  
  9. FALSE        EQU    0
  10. TRUE        EQU    NOT FALSE
  11.  
  12. ; Version equates
  13.  
  14.     IFDEF _Windows_
  15. WindowsVersion    EQU    TRUE
  16. DPMIVersion    EQU    FALSE
  17.     ELSE
  18.     IFDEF _DPMI_
  19. WindowsVersion    EQU    FALSE
  20. DPMIVersion    EQU    TRUE
  21.     ELSE
  22. WindowsVersion    EQU    FALSE
  23. DPMIVersion    EQU    FALSE
  24.     ENDIF
  25.     ENDIF
  26.  
  27. ; *******************************************************
  28. ; *                            *
  29. ; *    MACROS                        *
  30. ; *                            *
  31. ; *******************************************************
  32.  
  33.     LOCALS    @@
  34.  
  35. IFNDEF _NOMACROS_
  36.  
  37. ; Public variable definition macro
  38.  
  39. VAR MACRO Symbol,SType,Count
  40.   PUBLIC Symbol
  41.   Symbol LABEL SType
  42.   IF Count
  43.     DB SType * Count DUP(?)
  44.   ENDIF
  45. ENDM
  46.  
  47. ; Parameter definition macro
  48.  
  49. ARG MACRO Symbol,SType,Count
  50.   LOCAL Offset
  51.   @AP = @AP + SType * Count
  52.   Offset = @AP
  53.   Symbol EQU (SType PTR [BP+@AF-Offset])
  54. ENDM
  55.  
  56. @AP = 0
  57. @AF = 0
  58.  
  59. ; Local variables definition macro
  60.  
  61. LOC MACRO Symbol,SType,Count
  62.   LOCAL Offset
  63.   @LP = @LP + SType * Count
  64.   Offset = @LP
  65.   Symbol EQU (SType PTR [BP+@LF-Offset])
  66. ENDM
  67.  
  68. @LP = 0
  69. @LF = 0
  70.  
  71. ; Stack frame modifiers
  72.  
  73. sfFar        EQU    01H        ;FAR frame
  74. sfMarkBP    EQU    02H        ;Make saved BP odd
  75. sfSaveDS    EQU    04H        ;Save DS at [BP-2]
  76. sfInitDS    EQU    08H        ;Init DS using SS
  77.  
  78. ; Default stack frame type
  79.  
  80. sfDefault = 0
  81.  
  82. ; Stack frame types
  83.  
  84.     IF WindowsVersion
  85. WINFAR        EQU    sfFar+sfMarkBP+sfSaveDS
  86.     ELSE
  87. WINFAR        EQU    sfFar
  88.     ENDIF
  89.  
  90. ; Entry code generation macro
  91.  
  92. ENTRY MACRO FrameType
  93.   IFB <FrameType>
  94.     @SF = sfDefault
  95.   ELSE
  96.     IFIDNI <FrameType>,<NEAR>
  97.       @SF = 0
  98.     ELSE
  99.       IFIDNI <FrameType>,<FAR>
  100.         @SF = sfFar
  101.       ELSE
  102.         @SF = FrameType
  103.       ENDIF
  104.     ENDIF
  105.   ENDIF
  106.   IF @SF AND sfMarkBP
  107.     INC BP
  108.   ENDIF
  109.   PUSH BP
  110.   MOV BP,SP
  111.   IF @SF AND sfFar
  112.     @AF = @AP + 6
  113.   ELSE
  114.     @AF = @AP + 4
  115.   ENDIF
  116.   IF @SF AND sfSaveDS
  117.     PUSH DS
  118.     @LF = -2
  119.   ELSE
  120.     @LF = 0
  121.   ENDIF
  122.   IF @LP
  123.     SUB SP,@LP
  124.   ENDIF
  125.   IF @SF AND sfInitDS
  126.     PUSH DS
  127.     PUSH SS
  128.     POP DS
  129.   ENDIF
  130. ENDM
  131.  
  132. ; Exit code generation macro
  133.  
  134. EXIT MACRO ArgSize
  135.   IF @SF AND sfInitDS
  136.     POP DS
  137.   ENDIF
  138.   IF @LF - @LP
  139.     MOV SP,BP
  140.   ENDIF
  141.   POP BP
  142.   IF @SF AND sfMarkBP
  143.     DEC BP
  144.   ENDIF
  145.   IFNB <ArgSize>
  146.     @AP = ArgSize
  147.   ENDIF
  148.   IF @SF AND sfFar
  149.     RETF @AP
  150.   ELSE
  151.     RETN @AP
  152.   ENDIF
  153.   @AP = 0
  154.   @LP = 0
  155. ENDM
  156.  
  157. ENDIF
  158.  
  159. ; *******************************************************
  160. ; *                            *
  161. ; *    EQUATES                        *
  162. ; *                            *
  163. ; *******************************************************
  164.  
  165. ; 10-Byte record
  166.  
  167. b0        EQU    (BYTE PTR 0)
  168. b1        EQU    (BYTE PTR 1)
  169. b2        EQU    (BYTE PTR 2)
  170. b3        EQU    (BYTE PTR 3)
  171. b4        EQU    (BYTE PTR 4)
  172. b5        EQU    (BYTE PTR 5)
  173. b6        EQU    (BYTE PTR 6)
  174. b7        EQU    (BYTE PTR 7)
  175. b8        EQU    (BYTE PTR 8)
  176. b9        EQU    (BYTE PTR 9)
  177.  
  178. ; 5-Word record
  179.  
  180. w0        EQU    (WORD PTR 0)
  181. w2        EQU    (WORD PTR 2)
  182. w4        EQU    (WORD PTR 4)
  183. w6        EQU    (WORD PTR 6)
  184. w8        EQU    (WORD PTR 8)
  185.  
  186. ; Pointer record
  187.  
  188. IFNDEF _NOMACROS_
  189. ofs            EQU    (WORD PTR 0)
  190. seg              EQU    (WORD PTR 2)
  191. ELSE
  192. offs           EQU    (WORD PTR 0)
  193. segm             EQU    (WORD PTR 2)
  194. ENDIF
  195.  
  196. ; 8087 status word masks
  197.  
  198. mIE        EQU    0001H
  199. mDE        EQU    0002H
  200. mZE        EQU    0004H
  201. mOE        EQU    0008H
  202. mUE        EQU    0010H
  203. mPE        EQU    0020H
  204. mC0        EQU    0100H
  205. mC1        EQU    0200H
  206. mC2        EQU    0400H
  207. mC3        EQU    4000H
  208.  
  209. ; ASCII equates
  210.  
  211. bell        EQU    07H
  212. bs        EQU    08H
  213. tab        EQU    09H
  214. lf        EQU    0AH
  215. cr        EQU    0DH
  216. eof        EQU    1AH
  217. ;esc        EQU    1BH
  218. del        EQU    7FH
  219.  
  220. ; Program segment prefix variables
  221.  
  222. pspMemTop    EQU    (WORD PTR 02H)
  223. pspFileTab    EQU    (BYTE PTR 18H)
  224. pspEnvSeg    EQU    (WORD PTR 2CH)
  225. pspFCB1        EQU    (BYTE PTR 5CH)
  226. pspFCB2        EQU    (BYTE PTR 6CH)
  227. pspCmdLine    EQU    (BYTE PTR 80H)
  228.  
  229. ; Free-list memory record layout
  230.  
  231. mNext        EQU    (DWORD PTR 0)
  232. mSize        EQU    (DWORD PTR 4)
  233. mRecSize    EQU    8
  234.  
  235. ; File record layout
  236.  
  237. fHandle        EQU    (WORD PTR 0)
  238. fMode        EQU    (WORD PTR 2)
  239. fBufSize    EQU    (WORD PTR 4)
  240. fPrivate    EQU    (WORD PTR 6)
  241. fBufPos        EQU    (WORD PTR 8)
  242. fBufEnd        EQU    (WORD PTR 10)
  243. fBufPtr        EQU    (DWORD PTR 12)
  244. fOpenProc    EQU    (DWORD PTR 16)
  245. fInOutProc    EQU    (DWORD PTR 20)
  246. fFlushProc    EQU    (DWORD PTR 24)
  247. fCloseProc    EQU    (DWORD PTR 28)
  248. fUserData    EQU    (BYTE PTR 32)
  249. fName        EQU    (BYTE PTR 48)
  250. fBuffer        EQU    (BYTE PTR 128)
  251. fRecSize    EQU    256
  252.  
  253. ; fMode values
  254.  
  255. fmClosed    EQU    0D7B0H
  256. fmInput        EQU    0D7B1H
  257. fmOutput    EQU    0D7B2H
  258. fmInOut        EQU    0D7B3H
  259.  
  260. ; Overlay header record
  261.  
  262. ovSignature    EQU    (WORD PTR 0)
  263. ovSaveReturn    EQU    (WORD PTR 2)
  264. ovFilePos    EQU    (WORD PTR 4)
  265. ovCodeSize    EQU    (WORD PTR 8)
  266. ovFixupSize    EQU    (WORD PTR 10)
  267. ovJumpCount    EQU    (WORD PTR 12)
  268. ovLink        EQU    (WORD PTR 14)
  269. ovSegment    EQU    (WORD PTR 16)
  270. ovRetryCount    EQU    (WORD PTR 18)
  271. ovNext        EQU    (WORD PTR 20)
  272. ovEmsPage    EQU    (WORD PTR 22)
  273. ovEmsOffset    EQU    (WORD PTR 24)
  274. ovUserData    EQU    (BYTE PTR 26)
  275. ovVectors    EQU    (BYTE PTR 32)
  276. ovRecSize    EQU    32
  277.  
  278. ; Windows data segment variables
  279.  
  280. pPtrCount    EQU    (WORD PTR DS:04H)
  281. pLocalHeap    EQU    (WORD PTR DS:06H)
  282. pAtomTable    EQU    (WORD PTR DS:08H)
  283. pStackTop    EQU    (WORD PTR DS:0AH)
  284. pStackBot    EQU    (WORD PTR DS:0CH)
  285. pStackMin    EQU    (WORD PTR DS:0EH)
  286.  
  287. ; DPMI interrupt vector
  288.  
  289. DPMI        EQU    31H
  290.  
  291. ; DPMI function codes
  292.  
  293. dpmiGetDesc    EQU    0000H        ;Allocate descriptors
  294. dpmiFreeDesc    EQU    0001H        ;Free descriptor
  295. dpmiSegToDesc    EQU    0002H        ;Map segment to descriptor
  296. dpmiGetSelInc    EQU    0003H        ;Get selector increment value
  297. dpmiGetSegBase    EQU    0006H        ;Get segment base address
  298. dpmiSetSegBase    EQU    0007H        ;Set segment base address
  299. dpmiSetSegSize    EQU    0008H        ;Set segment size
  300. dpmiGetRealInt    EQU    0200H        ;Get real mode int handler
  301. dpmiSetRealInt    EQU    0201H        ;Set real mode int handler
  302. dpmiGetExcept    EQU    0202H        ;Get exception handler
  303. dpmiSetExcept    EQU    0203H        ;Set exception handler
  304. dpmiGetInt    EQU    0204H        ;Get interrupt handler
  305. dpmiSetInt    EQU    0205H        ;Set interrupt handler
  306. dpmiGetRMCB    EQU    0303H        ;Get real mode call-back
  307. dpmiGetVersion    EQU    0400H        ;Get version information
  308.  
  309. ; Real mode call-back registers structure
  310.  
  311. realDI        EQU    (DWORD PTR 00H)
  312. realSI        EQU    (DWORD PTR 04H)
  313. realBP        EQU    (DWORD PTR 08H)
  314. realBX        EQU    (DWORD PTR 10H)
  315. realDX        EQU    (DWORD PTR 14H)
  316. realCX        EQU    (DWORD PTR 18H)
  317. realAX        EQU    (DWORD PTR 1CH)
  318. realFlags    EQU    (WORD PTR 20H)
  319. realES        EQU    (WORD PTR 22H)
  320. realDS        EQU    (WORD PTR 24H)
  321. realFS        EQU    (WORD PTR 26H)
  322. realGS        EQU    (WORD PTR 28H)
  323. realIP        EQU    (WORD PTR 2AH)
  324. realCS        EQU    (WORD PTR 2CH)
  325. realSP        EQU    (WORD PTR 2EH)
  326. realSS        EQU    (WORD PTR 30H)
  327. realRegsSize    EQU    32H
  328.