startup.inc
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:6k
源码类别:

DVD

开发平台:

Others

  1. .xlist
  2. ;
  3. ; Paradigm C++ common assembly language definitions/macros
  4. ; Copyright (C) 1996, 1999 Paradigm Systems.  All rights reserved.
  5. ;
  6. ; $Revision: 16 $
  7. ; $NoKeywords: $
  8. ;
  9. ; *********************************************************************
  10. ; Permission to modify and distribute object files based on this
  11. ; source code is granted to licensed users of Paradigm C++.
  12. ;
  13. ; Under no circumstances is this source code to be re-distributed
  14. ; without the express permission of Paradigm Systems.
  15. ; *********************************************************************
  16. ;
  17. ; Many of the macros define C-style functions and data declarations
  18. ; by appending a leading underscore to public symbols.  To fixup these
  19. ; symbols, a new symbol is defined which replaces all occurrences of
  20. ; the original.  This permits the C declaration to be used except when
  21. ; a name clash occurs.
  22. ;
  23. ; Should a name clash occur, such as in exit() and _exit() (since _exit
  24. ; is the alias created for the symbol exit), the use of manual delcarations
  25. ; must be used.
  26. ;
  27. ;
  28. ; Pointer shorthand for assembly language
  29. ;
  30. bptr equ byte ptr ; Data references
  31. wptr equ word ptr
  32. dptr equ dword ptr
  33. qptr equ qword ptr
  34. nptr equ near ptr ; Function references
  35. fptr equ far ptr
  36. ;
  37. ; Define a macro for defining segments.  The paramters in order are
  38. ;    - Segment name
  39. ;    - Alignment
  40. ;    - Combine type
  41. ;    - Class name
  42. ;    - Group name
  43. ;
  44. ; All macro arguments are mandatory except for a group name.
  45. ;
  46. DefSeg macro sname, salign, scomb, sclass, sgroup
  47. .errb <sname>
  48. .errb <salign>
  49. .errb <scomb>
  50. .errb <sclass>
  51. sname segment salign scomb use16 '&sclass'
  52. sname ends
  53. ifnb <sgroup>
  54. sgroup group sname
  55. endif
  56. endm
  57. ;
  58. ; Some simple macros for defining global (public) data where
  59. ;    B - byte W - word
  60. ;    D - dword Q - qword
  61. ; and 'ginit' is an optional initializer.
  62. ;
  63. GlobalB macro gname, ginit
  64. .errb <gname>
  65. ifnb <ginit>
  66. _&gname db ginit
  67. else
  68. _&gname db ?
  69. endif
  70. public _&gname
  71. gname equ _&gname
  72. endm ; GlobalB
  73. GlobalW macro gname, ginit
  74. .errb <gname>
  75. ifnb <ginit>
  76. _&gname dw ginit
  77. else
  78. _&gname dw ?
  79. endif
  80. public _&gname
  81. gname equ _&gname
  82. endm ; GlobalW
  83. GlobalD macro gname, ginit
  84. .errb <gname>
  85. ifnb <ginit>
  86. _&gname dd ginit
  87. else
  88. _&gname dd ?
  89. endif
  90. public _&gname
  91. gname equ _&gname
  92. endm ; GlobalD
  93. GlobalQ macro gname, ginit
  94. .errb <gname>
  95. ifnb <ginit>
  96. _&gname dq ginit
  97. else
  98. _&gname dq ?
  99. endif
  100. public _&gname
  101. gname equ _&gname
  102. endm ; GlobalQ
  103. ;
  104. ; Some simple macros for defining local (non-public) data where
  105. ;    B - byte W - word
  106. ;    D - dword Q - qword
  107. ; and 'linit' is an optional initializer.
  108. ;
  109. LocalB macro lname, linit
  110. .errb <lname>
  111. ifnb <linit>
  112. lname db linit
  113. else
  114. lname db ?
  115. endif
  116. endm ; LocalB
  117. LocalW macro lname, linit
  118. .errb <lname>
  119. ifnb <linit>
  120. lname dw linit
  121. else
  122. lname dw ?
  123. endif
  124. endm ; LocalW
  125. LocalD macro lname, linit
  126. .errb <lname>
  127. ifnb <linit>
  128. lname dd linit
  129. else
  130. lname dd ?
  131. endif
  132. endm ; LocalD
  133. LocalQ macro lname, linit
  134. .errb <lname>
  135. ifnb <linit>
  136. lname dq linit
  137. else
  138. lname dq ?
  139. endif
  140. endm ; LocalQ
  141. ;
  142. ; A pair of macros for defining public functions and marking the end.
  143. ; use BegProc to define a function with an optional forced memory model
  144. ; or use the default current memory model.  The macro EndProc is then
  145. ; used to close the function.
  146. ;
  147. BegProc macro pname, pmodel
  148. .errb <pname>
  149. ifb <pmodel>
  150. if @CodeSize EQ 0
  151. _&pname proc near
  152. else
  153. _&pname proc far
  154. endif
  155. else
  156. _&pname proc pmodel
  157. endif
  158. public _&pname
  159. pname equ _&pname
  160. endm ; BegProc
  161. EndProc macro pname
  162. .errb <pname>
  163. _&pname endp
  164. endm ; EndProc
  165. ;
  166. ; Some simple macros for defining labels where
  167. ;    B - byte W - word
  168. ;    D - dword Q - qword
  169. ; The optional parameter 'lpub' can be used to make the label public.
  170. ;
  171. LabelB macro lname, lpub
  172. .errb <lname>
  173. ifnb <lpub>
  174. public _&lname
  175. _&lname label byte
  176. lname equ _&lname
  177. else
  178. lname label byte
  179. endif
  180. endm ; LabelB
  181. LabelW macro lname, lpub
  182. .errb <lname>
  183. ifnb <lpub>
  184. _&lname label word
  185. public _&lname
  186. lname equ _&lname
  187. else
  188. lname label word
  189. endif
  190. endm ; LabelW
  191. LabelD macro lname, lpub
  192. .errb <lname>
  193. ifnb <lpub>
  194. public _&lname
  195. _&lname label dword
  196. lname equ _&lname
  197. else
  198. lname label dword
  199. endif ; ifnb
  200. endm ; LabelD
  201. LabelQ macro lname, lpub
  202. .errb <lname>
  203. ifnb <lpub>
  204. public _&lname
  205. _&lname label qword
  206. lname equ _&lname
  207. else
  208. lname label qword
  209. endif
  210. endm ; LabelQ
  211. ;
  212. ; A macro to determine the near/far-ness of an external function
  213. ; based on the defined memory model.  Also a pair of macros for
  214. ; accessing external labels.
  215. ;
  216. ExtProc macro ename, emodel
  217. .errb <ename>
  218. ifb <emodel>
  219. if @CodeSize EQ 0
  220. extrn _&ename : near
  221. else
  222. extrn _&ename : far
  223. endif
  224. else
  225. extrn _&ename : emodel
  226. endif
  227. ename equ _&ename
  228. endm ; ExtProc
  229. ExtLbl macro ename, etype
  230. .errb <ename>
  231. ifb <etype>
  232. extrn &ename : byte
  233. else
  234. extrn &ename : etype
  235. endif
  236. endm ; ExtLbl
  237. ExtCLbl macro ename, etype
  238. .errb <ename>
  239. ifb <etype>
  240. extrn _&ename : byte
  241. else
  242. extrn _&ename : etype
  243. endif
  244. ename equ _&ename
  245. endm ; ExtCLbl
  246. ;
  247. ; Some useful constants for checking code/data memory models and
  248. ; the floating point options.
  249. ;
  250. MM_NEAR equ 0 ; Small code/data model definition
  251. MM_FAR equ 1 ; Large code/data model definition
  252. MM_HUGE equ 2 ; Huge code/data model definition
  253. ;
  254. ; Paradigm C++ initializer priorities
  255. ;
  256. PRI_FARDATA equ 0 ; FAR_DATA/FAR_BSS initialization
  257. PRI_DMM equ 1 ; Dynamic memory management initialization
  258. PRI_FPU equ 2 ; Floating point initialization
  259. PRI_STDIO equ 3 ; Stream I/O initialization
  260. ;
  261. ; Paradigm C++ - PDREMOTE/ROM exit codes
  262. ;
  263. PDE_ZERODIV equ 18 ; Zero divide exception
  264. PDE_ESCOP equ 128 ; Escape opcode exception
  265. PDE_IOTRAP equ 129 ; I/O trap exception
  266. PDE_ILLOP equ 130 ; Illegal opcode exception
  267. PDE_CHKIND equ 131 ; CHKIND exception
  268. PDE_INTO equ 132 ; INTO exception
  269. PDE_BADINT equ 133 ; Unexpected interrupt
  270. PDE_PUREERR equ 134 ; Pure virtual function error
  271. PDE_ABORT equ 135 ; abort() called
  272. PDE_EXIT equ 136 ; exit() called
  273. PDE_STKOVL equ 137 ; Stack overflow
  274. PDE_DOSEMU equ 141 ; Unsupported DOS call
  275. PDE_HEAPERR equ 142 ; Heap initialization error
  276. PDE_FPFMT equ 143 ; Floating point format error
  277. PDE_NULLPTR equ 144 ; Null pointer check failed
  278. .list