home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / warphead.zip / H / MI.H < prev    next >
C/C++ Source or Header  |  1997-04-10  |  19KB  |  533 lines

  1. /*static char *SCCSID = "@(#)mi.h       6.2 92/01/28";*/
  2. /*
  3.  *      Machine instruction, flag definitions and character types
  4.  *
  5.  *      Copyright 1992 IBM Corporation
  6.  */
  7.  
  8. #pragma checkout( suspend )
  9.    #ifndef __CHKHDR__
  10.       #pragma checkout( suspend )
  11.    #endif
  12. #pragma checkout( resume )
  13.  
  14. #ifndef __MI__
  15. #define __MI__
  16.  
  17. #pragma pack(4)
  18.  
  19. /*      386 eflags definitions
  20. */
  21. #define F_ID            0x00200000      // CPU ID instruction supported
  22. #define F_VIP           0x00100000      // (V)irtual (I)nterrupt (P)ending
  23. #define F_VIF           0x00080000      // (V)irtual (I)nterrupt (F)lag
  24. #define F_AC            0x00040000      /* (A)lignment (C)heck   */
  25. #define F_VM            0x00020000      /* (V)irtual 8086 (M)ode */
  26. #define F_RF            0x00010000      /* (R)esume (F)lag       */
  27. #define F_NT            0x00004000      /* (N)ested (T)ask       */
  28. #define F_NTCLEAR       (~F_NT)
  29. #define F_IOPL0         0
  30. #define F_IOPL1         0x00001000
  31. #define F_IOPL2         0x00002000
  32. #define F_IOPL3         0x00003000
  33. #define F_IOPLMASK      0x00003000      /* (I)/(O) (P)rivilege (L)evel */
  34. #define F_IOPLSYS       F_IOPL3         /* wide open                   */
  35. #define F_IOPLclear     (~F_IOPLMASK)
  36. #define F_OVERFLOW      0x00000800
  37. #define F_DIRECTION     0x00000400
  38. #define F_INTERRUPT     0x00000200
  39. #define F_TRACE         0x00000100
  40. #define F_SIGN          0x00000080
  41. #define F_ZERO          0x00000040
  42. #define F_AUX           0x00000010
  43. #define F_PARITY        0x00000004
  44. #define F_CARRY         0x00000001
  45. #define F_UNDEFINED     0x0000802A
  46.  
  47. /*      CR0 (Machine Status Register) bits
  48. */
  49. #define CR0_PE          0x00000001      /* (P)rotect (E)nable                   */
  50. #define CR0_MP          0x00000002      /* (M)onitor (P)rocessor extension      */
  51. #define CR0_EM          0x00000004      /* (EM)ulate processor extension        */
  52. #define CR0_TS          0x00000008      /* (T)ask (thread) (S)witched           */
  53. #define CR0_ET          0x00000010      /* (E)xtension (T)ype, 0/1=287/387      */
  54. #define CR0_NE          0x00000020      /* (N)umeric (E)xception 0/1=use 2/10h  */
  55. #define CR0_WP          0x00010000      /* (W)rite (P)rotect in rings 0-2       */
  56. #define CR0_AM          0x00040000      /* (A)lignment (M)ask, enable EFlags.AC */
  57. #define CR0_NW          0x20000000      /* (N)o (W)rite-through cache           */
  58. #define CR0_CD          0x40000000      /* (C)ache (D)isable                    */
  59. #define CR0_PG          0x80000000      /* (P)a(G)ing enable                    */
  60. #define CR0_RESERVED    0x1ffaffc0      /* reserved bits                        */
  61.  
  62. /*
  63.  *      Cache Operating Modes:
  64.  *
  65.  *      CR0_CD CR0_NW   Cache Fills     Write-Throughs and Invalidates
  66.  *      ------ ------   -----------     ------------------------------
  67.  *         1      1      disabled               disabled
  68.  *         1      0      disabled               enabled
  69.  *         0      1      INVALID combination - CR0 load causes GP fault
  70.  *         0      0      enabled                enabled (Normal mode)
  71.  */
  72.  
  73. /*      Machine Status Word bits (obsolete)
  74. */
  75. #define MSW_PE          CR0_PE
  76. #define MSW_MP          CR0_MP
  77. #define MSW_EM          CR0_EM
  78. #define MSW_TS          CR0_TS
  79. #define MSW_ET          CR0_ET
  80.  
  81. /* Pentium Feature Flags */
  82. #define VME_SUPPORTED   0x02
  83. #define  DE_SUPPORTED   0x04
  84.  
  85. /*      CR3 (Page Directory Base Register) bits
  86. */
  87. #define CR3_WRITETHROUGH 0x00000008     /* write-through cache (486 ignores)    */
  88. #define CR3_CACHEDISABLE 0x00000010     /* cache disable                        */
  89. #define CR3_FRAME        0xfffff000     /* page directory physical frame number */
  90. #define CR3_RESERVED     0x00000fe7     /* reserved bits                        */
  91.  
  92. /*      CR4 bits
  93. */
  94. #define CR4_VME          0x00000001
  95. #define CR4_PVI          0x00000002
  96. #define CR4_DE           0x00000008
  97.  
  98. /*      Debug Registers
  99. */
  100. #define DR_COUNT        0x4             /* number of debug registers
  101.  
  102. /*      DR6 (Debug Registers Status Register) bits
  103. */
  104. #define DR6_B0          0x00000001      /* breakpoint register 0 triggered */
  105. #define DR6_B1          0x00000002      /* breakpoint register 1 triggered */
  106. #define DR6_B2          0x00000004      /* breakpoint register 2 triggered */
  107. #define DR6_B3          0x00000008      /* breakpoint register 3 triggered */
  108. #define DR6_BD          0x00002000      /* ICE hardware active             */
  109. #define DR6_BS_BIT_INDEX       0xe      /* Single step trap                */
  110. #define DR6_BS          (1 << DR6_BS_BIT_INDEX)
  111. #define DR6_BT          0x00008000      /* TSS trap                        */
  112.  
  113. #define DR6_VALID       (DR6_B0|DR6_B1|DR6_B2|DR6_B3|DR6_BD|DR6_BS|DR6_BT)
  114. #define DR6_RESERVED    ~(DR6_VALID)
  115.  
  116. /*      DR7 (Debug Register Control Register) bits
  117. */
  118. #define DR7_L0          0x00000001      /* DR0 Local Enable  */
  119. #define DR7_G0          0x00000002      /* DR0 Global Enable */
  120. #define DR7_L1          0x00000004      /* DR1 Local Enable  */
  121. #define DR7_G1          0x00000008      /* DR1 Global Enable */
  122. #define DR7_L2          0x00000010      /* DR2 Local Enable  */
  123. #define DR7_G2          0x00000020      /* DR2 Global Enable */
  124. #define DR7_L3          0x00000040      /* DR3 Local Enable  */
  125. #define DR7_G3          0x00000080      /* DR3 Global Enable */
  126.  
  127. #define DR7_LE          0x00000100      /* Local  - Exact Match */
  128. #define DR7_GE          0x00000200      /* Global - Exact Match */
  129.  
  130. #define DR7_RW0         0x00030000      /* DR0 RW bits  */
  131. #define DR7_LEN0        0x000c0000      /* DR0 Len bits */
  132. #define DR7_RW1         0x00300000      /* DR1 RW bits  */
  133. #define DR7_LEN1        0x00c00000      /* DR1 Len bits */
  134. #define DR7_RW2         0x03000000      /* DR2 RW bits  */
  135. #define DR7_LEN2        0x0c000000      /* DR2 Len bits */
  136. #define DR7_RW3         0x30000000      /* DR3 RW bits  */
  137. #define DR7_LEN3        0xc0000000      /* DR3 Len bits */
  138.  
  139. #define DR7_RESERVED    0x0000fc00      /* DR7 Intel Reserved */
  140.  
  141. #define DR7_EXECUTE     0x0             /* Execute              */
  142. #define DR7_WRITE       0x1             /* Data Write           */
  143. #define DR7_IO          0x2             /* I/O Read or Write    */
  144. #define DR7_READWRITE   0x3             /* Data Read or Write   */
  145.  
  146. #define DR7_LEN_1       0x0             /* Length 1 bits        */
  147. #define DR7_LEN_2       0x1             /* Length 2             */
  148. #define DR7_LEN_4       0x3             /* Length 4             */
  149.  
  150. /*      Machine instruction, flag definitions and character types
  151. */
  152. #define MI_ARPL         0x63            /* ARPL instruction             */
  153. #define MI_HLT          0xf4            /* HLT instruction              */
  154. #define MI_OPERANDSIZE  0x66            /* Operand size override prefix */
  155. #define MI_ADDRESSSIZE  0x67            /* Address size override prefix */
  156. #define MI_TWOBYTEOP    0x0f            /* Two byte opcode prefix       */
  157.  
  158. #define MI_POP_DS       0x1f
  159. #define MI_POP_ES       0x07
  160. #define MI_POP_FS       0xA1            /* second byte to 0Fh opcode    */
  161. #define MI_POP_GS       0xA9            /* second byte to 0Fh opcode    */
  162.  
  163. #define MI_INT3         0xCC
  164. #define MI_INT          0xCD
  165. #define MI_IRET         0xCF
  166. #define MI_LONG_JMP     0xEA
  167. #define MI_LONG_CALL    0x9A
  168. #define MI_LONG_RET     0xCB
  169. #define MI_LONG_RETn    0xCA
  170. #define MI_NEAR_RET     0xC3
  171.  
  172. #define MI_IN_PORT_AL   0xE4            /* Opcode of IN port,AL  */
  173. #define MI_IN_PORT_AX   0xE5            /* Opcode of IN port,AX  */
  174. #define MI_OUT_PORT_AL  0xE6            /* Opcode of OUT port,AL */
  175. #define MI_OUT_PORT_AX  0xE7            /* Opcode of OUT port,AX */
  176. #define MI_IN_DX_AL     0xEC            /* Opcode of IN DX,AL    */
  177. #define MI_IN_DX_AX     0xED            /* Opcode of IN DX,AX    */
  178. #define MI_OUT_DX_AL    0xEE            /* Opcode of OUT DX,AL   */
  179. #define MI_OUT_DX_AX    0xEF            /* Opcode of OUT DX,AX   */
  180.  
  181. #define MI_GROUP5       0xFF            /* 5th group of 11-bit opcode inst.s */
  182. #define MI_SEGES        0x26            /* ES override prefix */
  183. #define MI_SEGCS        0x2E            /* CS override prefix */
  184. #define MI_SEGSS        0x36            /* SS override prefix */
  185. #define MI_SEGDS        0x3E            /* DS override prefix */
  186. #define MI_SEGFS        0x64            /* FS override prefix */
  187. #define MI_SEGGS        0x65            /* GS override prefix */
  188.  
  189. /*      ESC opcode prefix and mask
  190. */
  191. #define MI_ESCMASK      0xF8
  192. #define MI_ESC          0xD8
  193.  
  194. /*      MOD field equates
  195. */
  196. #define MI_MODMASK      0xC0            /* MOD field mask                       */
  197. #define MI_MODSHIFT     6               /* MOD field shift                      */
  198. #define MI_MODNONE      0x00            /* MOD = 0 (no displacement)            */
  199. #define MI_MODBYTE      0x40            /* MOD = 1 (byte displacement)          */
  200. #define MI_MODWORD      0x80            /* MOD = 2 (word displacement)          */
  201. #define MI_MODREG       0xC0            /* MOD = 3 (R/M field selects register) */
  202.  
  203. /*      REG field equates
  204. */
  205. #define MI_REGMASK      0x38            /* REG field mask    */
  206. #define MI_REGSHIFT     3               /* REG field shift   */
  207. #define MI_REGAX        0x00            /* REG = 0 (AX/AL)   */
  208. #define MI_REGCX        0x08            /* REG = 1 (CX/CL)   */
  209. #define MI_REGDX        0x10            /* REG = 2 (DX/DL)   */
  210. #define MI_REGBX        0x18            /* REG = 3 (BX/BL)   */
  211. #define MI_REG3         0x18            /* REG = 3 (part of 11-bit opcode) */
  212. #define MI_REGSP        0x20            /* REG = 4 (SP/AH)   */
  213. #define MI_REGBP        0x28            /* REG = 5 (BP/CH)   */
  214. #define MI_REGSI        0x30            /* REG = 6 (SI/DH)   */
  215. #define MI_REGDI        0x38            /* REG = 7 (DI/BH)   */
  216.  
  217. #define MI_REGES        0x00            /* REG = 0  MOV seg,r/m or MOV r/m,seg */
  218. #define MI_REGCS        0x08            /* REG = 1           */
  219. #define MI_REGSS        0x10            /* REG = 2           */
  220. #define MI_REGDS        0x18            /* REG = 3           */
  221. #define MI_REGFS        0x20            /* REG = 4           */
  222. #define MI_REGGS        0x28            /* REG = 5           */
  223.  
  224. /*      R/M field equates for memory operands (for 16-bit instructions)
  225. */
  226. #define MI_RMMASK       0x07            /* R/M field mask    */
  227. #define MI_RMSHIFT      0               /* R/M field shift   */
  228. #define MI_RMBXSI       0x00            /* R/M = 0 ([BX+SI]) */
  229. #define MI_RMBXDI       0x01            /* R/M = 1 ([BX+DI]) */
  230. #define MI_RMBPSI       0x02            /* R/M = 2 ([BP+SI]) */
  231. #define MI_RMBPDI       0x03            /* R/M = 3 ([BP+DI]) */
  232. #define MI_RMSI         0x04            /* R/M = 4 ([SI])    */
  233. #define MI_RMDI         0x05            /* R/M = 5 ([DI])    */
  234. #define MI_RMBP         0x06            /* R/M = 6 ([BP])    */
  235. #define MI_RMBX         0x07            /* R/M = 7 ([BX])    */
  236.  
  237. /*      32 bit instruction equates
  238. */
  239. #define MI_SIB_SSMASK           0xc0
  240. #define MI_SIB_SSSHIFT          0x06
  241.  
  242. #define MI_SIB_INDEXMASK        0x38
  243. #define MI_SIB_INDEXSHIFT       0x03
  244. #define MI_SIB_INDEXNONE        0x20
  245.  
  246. #define MI_SIB_BASEMASK         0x07
  247. #define MI_SIB_BASESHIFT        0x00
  248. #define MI_SIB_BASEESP          0x04
  249. #define MI_SIB_BASENONE         0x05
  250.  
  251. #define MI_RMEDX                0x02
  252. #define MI_RMSIB                0x04
  253. #define MI_RMDISP               0x05
  254. #define MI_RMEBP                0x05
  255.  
  256. #define MI_REG6                 0x30
  257. #define MI_REGCR0               0x00
  258.  
  259. /*      following machine instructions are used in Enable_386_Specific_code
  260. **      in virtmgr.asm
  261. */
  262. #define MI_PUSH_AX              0x50    /* "push ax" instruction                */
  263. #define MI_PUSH_IMM             0x68    /* "push immediate 16/32" instruction   */
  264. #define MI_MOV_REG_IMM          0xB8    /* opcode for "mov reg,immediate" instr */
  265. #define MI_MOV_REG_IMMEDIATE    0xB8    /* opcode for "mov reg,immediate" instr */
  266. #define MI_MOV_REG_REGMEM       0x8B    /* opcode for "mov reg,r/m 16/32" instr */
  267.  
  268. /*      Miscellaneous Opcodes
  269. */
  270. #define MI_ADD_AX_IMM           0x05    /* Opcode for Add (E)AX,imm(32)16       */
  271. #define MI_CALL_NEAR_REL        0xE8    /* Opcode for Call NEAR (relative)      */
  272. #define SIZE_CALL_NEAR_REL      5       /* Length of Call NEAR (relative) instr */
  273.  
  274. #define MI_LMSW_OPCODE          0x01    /* LMSW */
  275.  
  276. #define MI_GET_CRx_OPCODE       0x20    /* MOV r32,CRx   */
  277. #define MI_GET_DRx_OPCODE       0x21    /* MOV r32,DRx   */
  278. #define MI_SET_CRx_OPCODE       0x22    /* MOV CRx,r32   */
  279. #define MI_SET_DRx_OPCODE       0x23    /* MOV DRx,r32   */
  280. #define MI_GET_TRx_OPCODE       0x24    /* MOV r32,TRx   */
  281. #define MI_SET_TRx_OPCODE       0x26    /* MOV TRx,r32   */
  282.  
  283. #define MI_MOV_REG8_MEM8        0x8A    /* MOV reg8,mem8 */
  284. #define MI_MOV_SEG_MEM_OPCODE   0x8e    /* MOV seg,r/m16 */
  285.  
  286. /* WORD structure
  287. */
  288. struct w_s {
  289.         uchar_t lobyte;
  290.         uchar_t hibyte;
  291. };
  292. #define LowByte         lobyte
  293. #define HighByte        hibyte
  294.  
  295. /* DWORD structure
  296. */
  297. struct dw_s {
  298.         ushort_t loword;
  299.         ushort_t hiword;
  300. };
  301. #define LowWord         loword
  302. #define HighWord        hiword
  303.  
  304. /* Far pointer structure
  305. */
  306. struct  FarPtr {
  307.         ushort_t Offst;
  308.         ushort_t Segmt;
  309. };
  310.  
  311. /* Far 32 bit pointer structure
  312. */
  313. struct FarPtr32 {
  314.         ulong_t Offst32;        /* 32 bit offset */
  315.         ushort_t Segmt32;       /* segment       */
  316.         ushort_t Pad32;         /* segment pad   */
  317. };
  318.  
  319. /***    RETF16 - 16 bit RETF frame definition
  320.  *
  321.  *      16 bit RETF frame structure
  322.  */
  323.  
  324. typedef struct retf16_s {
  325.         ushort_t retf16_ip;
  326.         ushort_t retf16_cs;
  327. } RETF16;
  328.  
  329. typedef RETF16 *PRETF16;
  330.  
  331. /***    RETF32 - 32 bit RETF frame definition
  332.  *
  333.  *      32 bit RETF frame structure
  334.  */
  335.  
  336. typedef struct retf32_s {
  337.         ulong_t retf32_eip;
  338.         ushort_t retf32_cs;
  339.         ushort_t retf32_padcs;
  340. } RETF32;
  341.  
  342. typedef RETF32 *PRETF32;
  343.  
  344. /***    IRET16 - 16 bit IRET frame definition
  345.  *
  346.  *      16 bit IRET frame structure
  347.  */
  348.  
  349. typedef struct iret16_s {
  350.         ushort_t iret16_ip;
  351.         ushort_t iret16_cs;
  352.         ushort_t iret16_flag;
  353. } IRET16;
  354.  
  355. typedef IRET16 *PIRET16;
  356.  
  357. /* 16 bit Iret stack frame without privilege level transition
  358. */
  359. struct Iret_s {
  360.         struct  FarPtr  I_CSIP;
  361.         ushort_t I_FLAGS;
  362. };
  363.  
  364. struct IretFrame {
  365.         ushort_t IretIP ;
  366.         ushort_t IretCS ;
  367.         ushort_t IretFLAGS;
  368. };
  369.  
  370. /* ASM IretCSIP EQU     <DWORD PTR IretIP> */
  371.  
  372. /***    IRET32 - 32 bit IRET frame definition
  373.  *
  374.  *      32 bit IRET frame structure
  375.  */
  376.  
  377. typedef struct iret32_s {
  378.         ulong_t iret32_eip;
  379.         ushort_t iret32_cs;
  380.         ushort_t iret32_padcs;
  381.         ulong_t iret32_eflag;
  382. } IRET32;
  383.  
  384. typedef IRET32 *PIRET32;
  385.  
  386. /* 32 bit Iret stack frame without privilege level transition
  387. */
  388. struct Iret32_s {
  389.         struct  FarPtr32 I32_CSEIP;
  390.         ulong_t I32_EFLAGS;
  391. };
  392. /* ASM
  393. I32_CS          EQU     <I32_CSEIP.Segmt32>
  394. I32_EIP         EQU     <I32_CSEIP.Offst32>
  395. I32_IP          EQU     <I32_CSEIP.Offst32.loword>
  396. I32_FLAGS       EQU     <I32_EFLAGS.loword>
  397. */
  398.  
  399. /***    PLTIRET16 - 16 bit IRET frame definition
  400.  *
  401.  *      16 bit IRET frame structure with privilege level transtion
  402.  */
  403.  
  404. typedef struct pltiret16_s {
  405.         ushort_t pltiret16_ip;
  406.         ushort_t pltiret16_cs;
  407.         ushort_t pltiret16_flag;
  408.         ushort_t pltiret16_sp;
  409.         ushort_t pltiret16_ss;
  410. } PLTIRET16;
  411.  
  412. typedef PLTIRET16 *PPLTIRET16;
  413.  
  414. /* 16 bit Protected mode iret stack frame with privilege level transition
  415. */
  416. struct PLTIret_s {
  417.         struct  FarPtr  PI_CSIP;
  418.         ushort_t PI_FLAGS;
  419.         struct  FarPtr  PI_SSSP;
  420. };
  421.  
  422. struct PLTIretFrame {
  423.         ushort_t PLTIretIP;
  424.         ushort_t PLTIretCS;
  425.         ushort_t PLTIretFLAGS;
  426.         ushort_t PLTIretSP;
  427.         ushort_t PLTIretSS;
  428. };
  429.  
  430. /* ASM
  431. PLTIretCSIP     EQU     DWORD PTR PLTIretIP
  432. PLTIretSSSP     EQU     DWORD PTR PLTIretSP
  433. */
  434.  
  435. /***    PLTIRET32 - 32 bit IRET frame definition
  436.  *
  437.  *      32 bit IRET frame structure with privilege level transtion
  438.  */
  439.  
  440. typedef struct pltiret32_s {
  441.         ulong_t pltiret32_eip;
  442.         ushort_t pltiret32_cs;
  443.         ushort_t pltiret32_padcs;
  444.         ulong_t pltiret32_eflag;
  445.         ulong_t pltiret32_esp;
  446.         ushort_t pltiret32_ss;
  447.         ushort_t pltiret32_padss;
  448. } PLTIRET32;
  449.  
  450. typedef PLTIRET32 *PPLTIRET32;
  451.  
  452. /* 32 bit Protected mode iret stack frame with privilege level transition
  453. */
  454. struct PLTIret32_s {
  455.         struct  FarPtr32 PI32_CSEIP;
  456.         ulong_t PI32_EFLAGS;
  457.         struct  FarPtr32 PI32_SSESP;
  458. };
  459. /* ASM
  460. PI32_CS         EQU     <PI32_CSEIP.Segmt32>
  461. PI32_EIP        EQU     <PI32_CSEIP.Offst32>
  462. PI32_SS         EQU     <PI32_SSESP.Segmt32>
  463. PI32_ESP        EQU     <PI32_SSESP.Offst32>
  464. PI32_FLAGS      EQU     <WORD PTR PI32_EFLAGS>
  465. */
  466.  
  467. /* Generic 32-bit pointer structure
  468. */
  469. /* XLATOFF */
  470. union ptr_u {
  471.         struct FarPtr   ptr_far16;      /* 16-bit far pointer */
  472.         ulong_t         ptr_flat;       /* 32-bit flat pointer */
  473. };
  474. typedef union ptr_u     ptr_t;          /* Generic pointer type */
  475.  
  476. #define ptr_sel         ptr_far16.Segmt
  477. #define ptr_off         ptr_far16.Offst
  478. /* XLATON */
  479.  
  480. /* ASM
  481. ptr_t   STRUC
  482.         ptr_flat        DD      ?
  483. ptr_t   ENDS
  484. ptr_off         equ     <ptr_flat.Offst>
  485. ptr_sel         equ     <ptr_flat.Segmt>
  486. */
  487.  
  488.  
  489. /* PUSHA stack frame
  490. */
  491. struct pusha_s {
  492.         ushort_t pas_di;
  493.         ushort_t pas_si;
  494.         ushort_t pas_bp;
  495.         ushort_t pas_sp;
  496.         ushort_t pas_bx;
  497.         ushort_t pas_dx;
  498.         ushort_t pas_cx;
  499.         ushort_t pas_ax;
  500. };
  501.  
  502. /* PUSHAD stack frame
  503. */
  504. struct  pushad_s {
  505.         ulong_t pads_edi;
  506.         ulong_t pads_esi;
  507.         ulong_t pads_ebp;
  508.         ulong_t pads_esp;
  509.         ulong_t pads_ebx;
  510.         ulong_t pads_edx;
  511.         ulong_t pads_ecx;
  512.         ulong_t pads_eax;
  513. };
  514.  
  515. /* ASM
  516. pads_di EQU     <WORD PTR pads_edi>
  517. pads_si EQU     <WORD PTR pads_esi>
  518. pads_bp EQU     <WORD PTR pads_ebp>
  519. pads_sp EQU     <WORD PTR pads_esp>
  520. pads_bx EQU     <WORD PTR pads_ebx>
  521. pads_dx EQU     <WORD PTR pads_edx>
  522. pads_cx EQU     <WORD PTR pads_ecx>
  523. pads_ax EQU     <WORD PTR pads_eax>
  524. */
  525.  
  526. #endif /* __MI__ */
  527.  
  528. #pragma checkout( suspend )
  529.    #ifndef __CHKHDR__
  530.       #pragma checkout( resume )
  531.    #endif
  532. #pragma checkout( resume )
  533.