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

操作系统开发

开发平台:

Visual C++

  1. TITLE FHCHN - Far Heap CHAIN & SHELL Support
  2. PAGE 56,132
  3. ;***
  4. ;FHCHN.ASM - Far Heap CHAIN & SHELL for the BASIC 3 Common Runtime
  5. ;
  6. ; Copyright (C) Microsoft Corp. 1988.
  7. ;
  8. ;*****************************************************************************
  9. SUBTTL INCLUDES AND DEFINITIONS FOLLOWS
  10. INCLUDE switch.inc
  11. INCLUDE rmacros.inc
  12. USESEG <INIT_CODE> ;Initialization
  13. USESEG <BR_DATA>
  14. USESEG <_DATA>
  15. USESEG <_BSS>
  16. USESEG <NH_TEXT>
  17. USESEG <RT_TEXT>
  18. USESEG <FH_TEXT>
  19. USESEG <DV_TEXT>
  20. USESEG <XIB>
  21. USESEG <XI>
  22. USESEG <XIE>
  23. USESEG <BC_SAB>
  24. USESEG <BC_SA>
  25. INCLUDE seg.inc
  26. INCLUDE idmac.inc
  27. INCLUDE compvect.inc
  28. INCLUDE messages.inc
  29. INCLUDE array.inc
  30. INCLUDE smchain.inc
  31. INCLUDE oscalls.inc
  32. INCLUDE addr.inc
  33. INCLUDE baslibma.inc
  34. INCLUDE string.inc
  35. INCLUDE stack2.inc
  36. externNP B$ERR_FHC ;bad memory block address
  37. INITIALIZER B$xFHCHNINI ;put B$xFHCHNINI in initializer list
  38. SUBTTL DATA DEFINITIONS
  39. sBegin BR_DATA
  40. externW __acmdseg ;C startup __psp
  41. sEnd BR_DATA
  42. sBegin _DATA
  43. externW b$shli_disp ;Shell initialization dispatch table
  44. externW b$shlt_disp ;Shell termination dispatch table
  45. sEnd _DATA
  46. sBegin _BSS
  47. externW b$FHDStart ;starting FHD for list
  48. externB b$FHDULNearData
  49. externB b$FHDULFarData
  50. externW b$FHDEnd   ;ending FHD for list
  51. staticW ShellRestore,,1 ;FH growth on shell restoration
  52. externW b$NH_first ;NHINIT - starting offset of near heap
  53. externW b$NH_last ;NHINIT - ending offset of near heap
  54. sEnd _BSS
  55. sBegin DV_TEXT 
  56. externNP B$NearRet ;for disp vectors in compvect.inc
  57. sEnd DV_TEXT 
  58. sBegin NH_TEXT
  59. externNP B$NHMOV ;move near heap
  60. sEnd NH_TEXT
  61. sBegin FH_TEXT
  62. externNP B$FHSelect
  63. externNP B$FHMemDosCall
  64. externNP B$FHCompact
  65. externNP B$FHLowerTop
  66. externNP B$FHRaiseTop
  67. externNP B$FHLowerBottom
  68. externNP B$FHRaiseBottom
  69. sEnd FH_TEXT
  70. PAGE
  71. SUBTTL Far Heap Initialization
  72. assumes CS,INIT_CODE
  73. sBegin INIT_CODE
  74. ;***
  75. ;B$xFHCHNINI - Far Heap initializer for chain/shell module
  76. ;PLM B$xFHCHNINI()
  77. ;
  78. ;Purpose:
  79. ; Added with revision [1].
  80. ; Initializer for chain/shell module of the Far Heap component.
  81. ; This routine is called by the Crt0 startup before _main is
  82. ; called.  It will update the indirect dispatch tables for the
  83. ; far heap routines needed by chain/shell.  This insures that
  84. ; the only time these routines are accessed is when this module
  85. ; is linked into the user program.
  86. ;
  87. ;Entry:
  88. ; None.
  89. ;
  90. ;Exit:
  91. ; Appropriate dispatch vectors filled.
  92. ;
  93. ;Uses:
  94. ; None.
  95. ;
  96. ;Exceptions:
  97. ; None.
  98. ;****************************************************************************
  99. cProc B$xFHCHNINI,<FAR>
  100. cBegin
  101. ; update SHELL time initialization dispatch address to FHShlIni
  102. MOV WORD PTR [b$shli_disp].FH_SIVEC,FH_TEXTOFFSET FHShlIni
  103. ; update SHELL time termination dispatch address to B$FHShlTerm
  104. MOV WORD PTR [b$shlt_disp].FH_STVEC,FH_TEXTOFFSET B$FHShlTerm
  105. cEnd
  106. sEnd INIT_CODE
  107. sBegin FH_TEXT
  108. ASSUMES CS, FH_TEXT
  109. PAGE
  110. SUBTTL Far Heap CHAIN Support
  111. ;***
  112. ; B$FHShlTerm - Pre SHELL "termination" (DOS 3)
  113. ;
  114. ;Purpose:
  115. ; In preparation for the SHELL statement, compress both the
  116. ; far and near heaps to the lowest memory possible.  Note the
  117. ; shrinkage amount for restoration after the SHELL executes.
  118. ;Entry:
  119. ; None
  120. ;Exit:
  121. ; ShellRestore - contains amount released.
  122. ;Uses:
  123. ; None.
  124. ;Exceptions:
  125. ; Fatal error due to far heap inconsistency.
  126. ;******************************************************************************
  127. cProc B$FHShlTerm,<PUBLIC,NEAR> ; PUBLIC used to drag in file /O
  128. cBegin
  129. MOV AX,0FFFFH ;attempt maximum compression of FH
  130. CALL B$FHLowerTop ;compress - AX returns amount done
  131. MOV ShellRestore,AX ;save amount for shell restoration
  132. cEnd
  133. ;***
  134. ; FHShlIni - Post SHELL memory recovery (DOS 3)
  135. ;
  136. ;Purpose:
  137. ; After the SHELL statement has executed, grow the far heap to
  138. ; its previous size.  Grow the near heap to its maximum amount.
  139. ;Entry:
  140. ; ShellRestore - contains amout of memory to try to recover
  141. ;Exit:
  142. ; None.
  143. ;Uses:
  144. ; None.
  145. ;Exceptions:
  146. ; Fatal error due to far heap inconsistency.
  147. ;******************************************************************************
  148. cProc FHShlIni,<NEAR>
  149. cBegin
  150. MOV AX,ShellRestore ;recall amount of compression before SHELL
  151. CALL B$FHRaiseTop ;raise the size of FH to preSHELL level
  152. CALL B$FHRaiseBottom ;raise the near heap to its maximum level
  153. cEnd
  154. ;***
  155. ; B$FHClean  - Far heap clean for CHAIN statement (DOS 3 & 5 RTM)
  156. ;
  157. ;Purpose:
  158. ; Far heap setup for CHAIN statement.  Cleans FH of entries
  159. ; whose descriptors are not in COMMON.
  160. ;Entry:
  161. ; None.
  162. ;Exit:
  163. ; None.
  164. ;Uses:
  165. ; None.
  166. ;Exceptions:
  167. ; None.
  168. ;******************************************************************************
  169. ;***
  170. ; FHClean - Clean FH of Non-COMMON entries (DOS 3 & 5 RTM)
  171. ;
  172. ;Purpose:
  173. ; Clean far heap of entries whose descriptors are not
  174. ; within COMMON.
  175. ; If QBI, don't deallocate b$FHDULNearData and b$FHDULFarData.  These
  176. ; two contain clean images of the user-lib preinited data (if UL loaded)
  177. ; that are used to reinitialize the UL Data after CHAIN or RUN.
  178. ;
  179. ;Entry:
  180. ; SI - ptr to FH descriptor to check
  181. ;Exit:
  182. ; AX - 0 means don't deallocate entry
  183. ;Uses:
  184. ; None.
  185. ;Exceptions:
  186. ; None.
  187. ;******************************************************************************
  188. ;***
  189. ; B$FHPostChain - Far heap recovery for CHAIN statement (DOS 3 RTM)
  190. ;
  191. ;Purpose:
  192. ; Finish DGROUP reconstruction after new program has been
  193. ; chained.  The far and near heap have been recleaned if
  194. ; COMMON truncation occurred.
  195. ;Entry:
  196. ; BX = new starting offset of near heap.
  197. ; CX = DGROUP saved area segment.
  198. ; DS = ES = new program DGROUP segment.
  199. ;Exit:
  200. ; None.
  201. ;Uses:
  202. ; None.
  203. ;Exceptions:
  204. ; Error if near heap or far heap inconsistency.
  205. ;******************************************************************************
  206. ;***
  207. ;B$FHAdjPreChain - Adjust FH selectors and Give to Child process (DOS 5 RTM)
  208. ;
  209. ;Purpose:
  210. ; This routine is used for DOS 5 CHAIN.  It will give all far
  211. ; heap segments to the child process and adjust the descriptor chain.
  212. ;Entry:
  213. ; CX = Child process ID
  214. ;Exit:
  215. ; AX = DGROUP pointer to first FH descriptor in descriptor chain.
  216. ;Uses:
  217. ; None.
  218. ;Exceptions:
  219. ; None.
  220. ;*****************************************************************************
  221. ;***
  222. ;FHGiveSeg - give FH segment to child process (DOS 5 RTM)
  223. ;
  224. ;Purpose:
  225. ; This routine is called once for each descriptor in the far heap
  226. ; descriptor chain.  It will give the selector contained in the
  227. ; descriptor to the chained process and update the selector in
  228. ; the FH descriptor.
  229. ;Entry:
  230. ; CX = Child process ID
  231. ; SI = DGROUP offset of FH descriptor
  232. ;Exit:
  233. ; AX = flag specifing whether or not to deallocate this entry
  234. ; 0 - means don't deallocate
  235. ;Uses:
  236. ; Per Convention.
  237. ;Preserves:
  238. ; CX,
  239. ;Exceptions:
  240. ; None.
  241. ;******************************************************************************
  242. ;***
  243. ;B$FHAdjPostChain - Adjust FH selectors after CHAIN (DOS 5 RTM)
  244. ;
  245. ;Purpose:
  246. ; This routine is used for DOS 5 CHAIN.  It will adjust all far
  247. ; heap descriptors in the descriptor chain, deallocing any entries
  248. ; truncated by the new COMMON bounds.
  249. ;Entry:
  250. ; AX = Shared memory handle
  251. ;Exit:
  252. ; None.
  253. ;Uses:
  254. ; Per Convention.
  255. ;Exceptions:
  256. ; None.
  257. ;*****************************************************************************
  258. assumes ES,DGROUP
  259. ;***
  260. ;FHClean5 - Clean truncated COMMON FH entries (DOS 5 RTM)
  261. ;
  262. ;Purpose:
  263. ; This routine is used for DOS 5 CHAIN.  It deallocates any far
  264. ; entries with descriptors that are truncated by the new COMMON
  265. ; boundaries.  The descriptors for these entries are removed
  266. ; from the descriptor chain.
  267. ;Entry:
  268. ; BX - size of new COMMON
  269. ; DS - shared memory segment
  270. ; ES - DGROUP
  271. ; SI - Descriptor to check for cleaning
  272. ;Exit:
  273. ; AX - 0 means don't deallocate entry
  274. ;Uses:
  275. ; Per Convention.
  276. ;Preserves:
  277. ; BX,CX
  278. ;Exceptions:
  279. ; None.
  280. ;******************************************************************************
  281. ;***
  282. ; B$FHPreChain - Prepare far heap (and DGROUP) for CHAIN (DOS 3 RTM)
  283. ;
  284. ;Purpose:
  285. ; Prepare the DGROUP for chaining.  This routine is entered
  286. ; with both near and far heaps cleaned (nonCOMMON entries
  287. ; removed) and the new stack defined.  The data segment is
  288. ; truncated to RTM data, COMMON statics, a 200H-byte stack,
  289. ; and compressed near and far heaps.  This data is placed in
  290. ; high memory and the DS is adjusted.
  291. ;Entry:
  292. ; AX - new DGROUP offset of near heap.
  293. ;Exit:
  294. ; DS - new high data segment location.
  295. ;Uses:
  296. ; AX, BX, CX, DX, SI, DI.
  297. ;Exceptions:
  298. ; Errors due to near or far heap inconsistency.
  299. ;******************************************************************************
  300. sEnd FH_TEXT
  301. END