seg.inc
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:9k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. ;***
  2. ; SEG.INC (& cMacros.inc) - 18-Jun-1986 - Common Runtime Segment Definitions
  3. ;***
  4. .XLIST
  5. ;***
  6. ;
  7. ; Copyright <C> 1986, Microsoft Corporation
  8. ;
  9. ;Purpose:
  10. ; Contains the cMacros segment definitions used throughout the common runtime.
  11. ; Also includes cMacros.inc
  12. ;
  13. ;******************************************************************************
  14. ?WIN = 0 ;[18]No, not windows
  15. ?PLM = 1 ;[18]Default to PLM conventions
  16. ?DF = 1 ;[18]We'll define our own seg's
  17. ?TF = 1 ;[18]Don't need MOV SP,BP at cEnd
  18. ?NODATA = 1 ;[31]no DS-setup prologue for Windows
  19. ;[31] harmless when ?WIN == 0, but required
  20. ;[31] so cMacros won't object to ATOMIC attr
  21. include cMacros.inc
  22. ;******************************************************************************
  23. ;
  24. ; Component segment usages.
  25. ; If a component segment name has been turned on, we now turn on the
  26. ; individual segments required/used by that component.
  27. ;
  28. ;******************************************************************************
  29. IFDEF _?rt_seg_RT ;Runtime Core Component
  30. useSeg <RT_TEXT,_DATA>
  31. ENDIF
  32. IFDEF _?rt_seg_NH ;Near Heap manager
  33. useSeg SS_TEXT
  34. ENDIF
  35. IFDEF _?rt_seg_FH ;Far heap manager
  36. useSeg FH_TEXT
  37. ENDIF
  38. IFDEF _?rt_seg_ST ;String functions
  39. useSeg ST_TEXT
  40. ENDIF
  41. IFDEF _?rt_seg_GR ;Graphics
  42. useSeg GR_TEXT
  43. ENDIF
  44. IFDEF _?rt_seg_MT ;Floating Point math
  45. useSeg MT_TEXT
  46. ENDIF
  47. IFDEF _?rt_seg_ER ;Error handling / processing
  48. useSeg ER_TEXT
  49. ENDIF
  50. IFDEF _?rt_seg_EV ;Event Handling
  51. useSeg EV_TEXT
  52. ENDIF
  53. IFDEF _?rt_seg_SN ;Sound and Music
  54. useSeg SN_TEXT
  55. ENDIF
  56. IFDEF _?rt_seg_DV ;Device I/O support
  57. useSeg DV_TEXT
  58. ENDIF
  59. IFDEF _?rt_seg_CN ;Console I/O support
  60. useSeg CN_TEXT
  61. ENDIF
  62. IFDEF _?rt_seg_DK ;Disk I/O support
  63. useSeg DK_TEXT
  64. ENDIF
  65. IFDEF _?rt_seg_OI ;COM/Printer I/O support
  66. useSeg OI_TEXT
  67. ENDIF
  68. IFDEF _?rt_seg_OS ;Operating system functions/features
  69. useSeg OS_TEXT
  70. ENDIF
  71. IFDEF _?rt_seg_DB ;Debug code (user level)
  72. useSeg DB_TEXT
  73. ENDIF
  74. IFDEF _?rt_seg_ID ;Internal debugging support
  75. useSeg ID_TEXT
  76. ENDIF
  77. ;******************************************************************************
  78. ;
  79. ; _?rt_cSeg n,ln,a,co,cl,grp
  80. ;
  81. ; where:
  82. ; n = physical (external) name of segment
  83. ; ln = logical (internal) name of segment
  84. ; a = alignment (optional)
  85. ; co = combine type (optional)
  86. ; cl = class (optional)
  87. ; grp = group (optional)
  88. ;
  89. ; Mimics cMacros createSeg macro, except that it conditionally defines the
  90. ; desired segment only if "_?rt_seg_" symbol is defined to turn on that
  91. ; segment.
  92. ;
  93. ;******************************************************************************
  94. _?rt_cSeg macro n,ln,a,co,cl,grp
  95. IFDEF _?rt_seg_&ln
  96. createSeg n,ln,a,co,cl,grp
  97. ENDIF
  98. endm
  99. .XCREF _?rt_cSeg ;Don't list or cross reference it
  100. ;******************************************************************************
  101. ;
  102. ; _?rt_cdSeg
  103. ; Same as _?rt_cSeg, except that it also takes care of conditionally setting
  104. ; a flag that is later used to conditionally define DGROUP
  105. ;
  106. ;******************************************************************************
  107. _?rt_cdSeg macro n,ln,a,co,cl,grp
  108. IFDEF _?rt_seg_&ln
  109. createSeg n,ln,a,co,cl,grp
  110. _?rt_dataseg EQU TRUE
  111. ENDIF
  112. endm
  113. .XCREF _?rt_cdSeg ;Don't list or cross reference it
  114. ;******************************************************************************
  115. ;
  116. ; Code segments
  117. ;
  118. ;******************************************************************************
  119. CODESEGS MACRO ;[7]
  120. _?rt_cSeg LOADRTM,LOADRTM,WORD,PUBLIC,CODE
  121. _?rt_cSeg CODE,RT_TEXT,WORD,PUBLIC,CODE
  122. _?rt_cSeg CODE,NH_TEXT,WORD,PUBLIC,CODE
  123. _?rt_cSeg CODE,FH_TEXT,WORD,PUBLIC,CODE
  124. _?rt_cSeg CODE,ST_TEXT,WORD,PUBLIC,CODE
  125. _?rt_cSeg CODE,GR_TEXT,WORD,PUBLIC,CODE
  126. _?rt_cSeg CODE,MT_TEXT,WORD,PUBLIC,CODE
  127. _?rt_cSeg CODE,ER_TEXT,WORD,PUBLIC,CODE
  128. _?rt_cSeg CODE,EV_TEXT,WORD,PUBLIC,CODE
  129. _?rt_cSeg CODE,SN_TEXT,WORD,PUBLIC,CODE
  130. _?rt_cSeg CODE,DV_TEXT,WORD,PUBLIC,CODE
  131. _?rt_cSeg CODE,CN_TEXT,WORD,PUBLIC,CODE
  132. _?rt_cSeg CODE,DK_TEXT,WORD,PUBLIC,CODE
  133. _?rt_cSeg CODE,OI_TEXT,WORD,PUBLIC,CODE
  134. _?rt_cSeg CODE,OS_TEXT,WORD,PUBLIC,CODE
  135. _?rt_cSeg CODE,DB_TEXT,WORD,PUBLIC,CODE
  136. _?rt_cSeg CODE,ID_TEXT,WORD,PUBLIC,CODE
  137. _?rt_cSeg _TEXT,_TEXT,PARA,PUBLIC,CODE ;[10]
  138. _?rt_cSeg CODE,INIT_CODE,WORD,PUBLIC,CODE
  139. _?rt_cSeg FAR_DATA,FAR_DATA,PARA,PUBLIC,FAR_DATA ;[14]
  140. _?rt_cSeg FAR_BSS,FAR_BSS,PARA,PUBLIC,FAR_BSS ;[14]
  141. ENDM ;[7]
  142. ;******************************************************************************
  143. ;
  144. ; Data segments
  145. ;
  146. ;******************************************************************************
  147. DATASEGS MACRO ;[7]
  148. _?rt_cdSeg NULL, NULL, PARA, PUBLIC, BEGDATA,DGROUP ;[13]
  149. _?rt_cdSeg BR_DATA,BR_DATA,WORD, PUBLIC, DATA, DGROUP ;[6]
  150. _?rt_cdSeg CONST, CONST, WORD, PUBLIC, DATA, DGROUP ;[6]
  151. _?rt_cdSeg _BSS, _BSS, WORD, PUBLIC, DATA, DGROUP ;[6]
  152. _?rt_cdSeg _DATA, _DATA, WORD, PUBLIC, DATA, DGROUP ;[6]
  153. _?rt_cdSeg CDATA, CDATA, WORD, PUBLIC, DATA, DGROUP
  154. _?rt_cdSeg XIFB, XIFB, WORD, PUBLIC, DATA, DGROUP ;[22]
  155. _?rt_cdSeg XIF, XIF, WORD, PUBLIC, DATA, DGROUP ;[22]
  156. _?rt_cdSeg XIFE, XIFE, WORD, PUBLIC, DATA, DGROUP ;[22]
  157. _?rt_cdSeg XIB, XIB, WORD, PUBLIC, DATA, DGROUP
  158. _?rt_cdSeg XI, XI, WORD, PUBLIC, DATA, DGROUP
  159. _?rt_cdSeg XIE, XIE, WORD, PUBLIC, DATA, DGROUP
  160. _?rt_cdSeg XPB, XPB, WORD, PUBLIC, DATA, DGROUP ;[22]
  161. _?rt_cdSeg XP, XP, WORD, PUBLIC, DATA, DGROUP ;[22]
  162. _?rt_cdSeg XPE, XPE, WORD, PUBLIC, DATA, DGROUP ;[22]
  163. _?rt_cdSeg XCB, XCB, WORD, PUBLIC, DATA, DGROUP ;[9]
  164. _?rt_cdSeg XC, XC, WORD, PUBLIC, DATA, DGROUP ;[9]
  165. _?rt_cdSeg XCE, XCE, WORD, PUBLIC, DATA, DGROUP ;[9]
  166. _?rt_cdSeg XCFB, XCFB, WORD, PUBLIC, DATA, DGROUP ;[22]
  167. _?rt_cdSeg XCF, XCF, WORD, PUBLIC, DATA, DGROUP ;[22]
  168. _?rt_cdSeg XCFE, XCFE, WORD, PUBLIC, DATA, DGROUP ;[22]
  169. _?rt_cdSeg DBDATA, DBDATA, WORD, COMMON, DATA, DGROUP ;[39]
  170. _?rt_cdSeg _CALLTAB,_CALLTAB,WORD, PUBLIC, CALLTAB,DGROUP ;[30]
  171. _?rt_cdSeg HDR, HDR, BYTE, PUBLIC, MSG, DGROUP ;[30]
  172. _?rt_cdSeg MSG, MSG, BYTE, PUBLIC, MSG, DGROUP ;[30]
  173. _?rt_cdSeg PAD, PAD, BYTE, COMMON, MSG, DGROUP ;[30]
  174. _?rt_cdSeg EPAD, EPAD, BYTE, COMMON, MSG, DGROUP ;[30]
  175. _?rt_cdSeg BC_DATA,BC_DATA,WORD, PUBLIC, BC_DATA,DGROUP ;[25]
  176. _?rt_cdSeg BC_FT, BC_FT, WORD, PUBLIC, BC_SEGS,DGROUP
  177. _?rt_cdSeg BC_CN, BC_CN, WORD, PUBLIC, BC_SEGS,DGROUP
  178. _?rt_cdSeg BC_DS, BC_DS, WORD, PUBLIC, BC_SEGS,DGROUP
  179. _?rt_cdSeg BC_SAB, BC_SAB, WORD, PUBLIC, BC_SEGS,DGROUP
  180. _?rt_cdSeg BC_SA, BC_SA, WORD, PUBLIC, BC_SEGS,DGROUP
  181. _?rt_cdSeg BC_SAE, BC_SAE, WORD, PUBLIC, BC_SEGS,DGROUP ;[26]
  182. _?rt_cdSeg XOB, XOB, WORD, PUBLIC, BSS, DGROUP ;[8]
  183. _?rt_cdSeg XO, XO, WORD, PUBLIC, BSS, DGROUP ;[8]
  184. _?rt_cdSeg XOE, XOE, WORD, PUBLIC, BSS, DGROUP ;[8]
  185. _?rt_cdSeg BR_SKYS,BR_SKYS,PARA, PUBLIC, BLANK, DGROUP ;[20]
  186. _?rt_cdSeg COMMON, COMMON, WORD, COMMON, BLANK, DGROUP
  187. _?rt_cdSeg NMALLOC,NMALLOC,WORD, COMMON, BC_VARS,DGROUP ;[15]
  188. _?rt_cdSeg ENMALLOC,ENMALLOC,WORD, COMMON, BC_VARS,DGROUP ;[15]
  189. _?rt_cdSeg STACK, STACK, PARA, STACK, STACK, DGROUP ;[8]
  190. IFDEF _?rt_dataseg
  191. defGrp DGROUP
  192. ENDIF
  193. ENDM ;[7]
  194. ;******************************************************************************
  195. ;
  196. ; Order code vs. data based on whether or not we are dos 3 rtm
  197. ;
  198. ;******************************************************************************
  199. IFNDEF SEGS_DEFINED ;[7]
  200. CODESEGS ;[7] code comes first everywhere else
  201. DATASEGS ;[7]
  202. ENDIF ;[7] IFNDEF SEGS_DEFINED
  203. ;******************************************************************************
  204. ;
  205. ; Segment assumptions. We always assume DS=SS, and they both point at
  206. ; DGROUP. CS must be assumed by individual modules.
  207. ;
  208. ;******************************************************************************
  209. IFDEF _?rt_dataseg
  210. assumes DS,DGROUP
  211. assumes ES,NOTHING ;[37]
  212. assumes SS,DGROUP
  213. ENDIF
  214. PURGE _?rt_cSeg ;Macros no longer needed
  215. PURGE _?rt_cdSeg ;[7]
  216. PURGE useSeg ;[7]
  217. PURGE defGrp ;[7]
  218. PURGE DATASEGS ;[7]
  219. PURGE CODESEGS ;[7]
  220. ;******************************************************************************
  221. ;
  222. ; The INITIALIZER macro puts the address of the passed routine
  223. ; into the XI segment.  Each module that gets linked that has
  224. ; an INITIALIZER macro invokation will also put its address
  225. ; in the XI segment.  This has the effect of building up a
  226. ; table of initialization routines that need called.  Crt0
  227. ; will call all of these routines before it calls _main.
  228. ;
  229. ;******************************************************************************
  230. INITIALIZER MACRO pINI
  231. sBegin XIB ;;[23] XIB and XIE must bracket XI, or
  232. sEnd XIB ;;[23] initializers will NOT get called!
  233. ;;[23] this code makes sure that USESEG's
  234. ;;[23] are present for XIB and XIE.
  235. sBegin XI
  236. DD &pINI
  237. sEnd XI
  238. sBegin XIE ;;[23]
  239. sEnd XIE ;;[23]
  240. ENDM
  241. .LIST