DOS 3.30 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

650 lines
17 KiB

4 years ago
  1. TITLE MSBIO2 - DOS 3.3
  2. ;-------------------------------------------------------------------------------
  3. ; :
  4. ; Microsoft Bio :
  5. ; :
  6. ; The file msbio.asm is the main file in the Mircosoft bio. This file :
  7. ; includes the other main files in the bio. Most of the routines are :
  8. ; in these include files. The main files included are: :
  9. ; :
  10. ; File Contains :
  11. ; :
  12. ; msdisk.inc Disk device driver routines :
  13. ; ms96tpi.inc Routines for 96tpi drives :
  14. ; msaux.inc Device driver for the rs-232 serial ports :
  15. ; msclock.inc Device driver for "clock$" device :
  16. ; mscon.inc Device driver for "con" :
  17. ; mslpt.inc Device driver for the printers :
  18. ; :
  19. ; Each of these files contain a header section documenting the code :
  20. ; in that file. :
  21. ; Msbio also includes several files for equ's, structure definition, :
  22. ; macro definitions, etc. These are: :
  23. ; :
  24. ; msbiomes.inc msmacro.inc devsym.inc :
  25. ; dskprm.inc error.inc :
  26. ; :
  27. ; Each of these file contains explanitory notes. :
  28. ; :
  29. ; The actual code in msbio can be broken down into several piece: :
  30. ; :
  31. ; macro definitions Several marco are defined in msbio. They :
  32. ; are a few odds and end that did not fit :
  33. ; anywhere else. :
  34. ; :
  35. ; Command Jump Table List of entry points in the device drivers. :
  36. ; See notation below for full explination. :
  37. ; :
  38. ; Interrupt and Strategy :
  39. ; Entry points Calls on the device driver first come to here. :
  40. ; There is common code with pushes registers and :
  41. ; the like before jumping to routines in the :
  42. ; driver files. The common exit points are also :
  43. ; in this file. :
  44. ; :
  45. ; Miscellaneous Code There are several routines and data structure :
  46. ; declarations. See below for details. :
  47. ; :
  48. ;-------------------------------------------------------------------------------
  49. ;
  50. ; If the variable TEST is non-zero then code for debugging is included.
  51. ; The extra code will make the binary file nuch larger.
  52. ; The symbol is also defined in msequ.inc. Both must be changed to
  53. ; turn debugging on or off.
  54. ;
  55. ; The level of the debugging is controled by the variable fTestBits in
  56. ; this file. See the comment preceeding the variable for more information.
  57. ; The actual routines which print the messages are in msmacro.inc
  58. ; See the header comment in this file for more information.
  59. ;
  60. ;
  61. ; Revision History
  62. ;
  63. ; REV 2.1 5/1/83 ARR added timer int handler and changed order of AUX
  64. ; PRN init for HAL0
  65. ;
  66. ; REV 2.15 7/13/83 ARR Because of IBM design issues, and that BASCOM
  67. ; is ill behaved with respect to the 1CH timer interrupt,
  68. ; the timer handler has to be backed out! The intended
  69. ; code is commented out and has an ARR 2.15 annotation.
  70. ; This means the BIOS will go back to the multiple roll
  71. ; over bug.
  72. ;
  73. ; REV 2.20 8/5/83 ARR IBM makes hardware change. Now wants to use half
  74. ; height drives for HAL0, and back fit for PC/PC XT. Problem
  75. ; with head settle time. Previous drives got by on a 0
  76. ; settle time, 1/2 hight drives need 15 head settle when
  77. ; doing WRITEs (0 ok on READ) if the head is being stepped.
  78. ; This requires a last track value to be kept so that BIOS
  79. ; knows when head is being moved. To help out
  80. ; programs that issue INT 13H directly, the head settle will
  81. ; normally be set to 15. It will be changed to 0 on READs,
  82. ; or on WRITEs which do not require head step.
  83. ;
  84. ; REV 2.21 8/11/83 MZ IBM wants write with verify to use head settle 0.
  85. ; Use same trick as above.
  86. ;
  87. ; REV 2.25 6/20/83 mjb001 added support for 96tpi and salmon
  88. ;
  89. ; REV 2.30 6/27/83 mjb002 added real-time clock
  90. ;
  91. ; REV 2.40 7/8/83 mjb003 added volume-id checking and int 2f macro
  92. ; definitions push* and pop*
  93. ;
  94. ; REV 2.41 7/12/83 ARR more 2.X enhancements. Open/Close media change
  95. ;
  96. ; REV 2.42 11/3/83 ARR more 2.X enhancements. Disk OPEN/CLOSE, FORMAT
  97. ; code and other misc hooked out to shrink BIOS. Code for
  98. ; Disk OPEN/CLOSE, FORMAT included only with 96tpi disks.
  99. ;
  100. ; Rev 2.43 12/6/83 MZ Examine boot sectors on hard disks for 16-bit fat
  101. ; check. Examine large fat bit in BPB for walk of media for
  102. ; DOS
  103. ;
  104. ; Rev 2.44 12/9/83 ARR Change to error reporting on INT 17H
  105. ;
  106. ; Rev 2.45 12/22/83 MZ Make head settle change only when disk parm is 0.
  107. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  108. ;
  109. ; IBM ADDRESSES FOR I/O
  110. ;
  111. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  112. ;Below was moved from sysinit1
  113. ROMSEGMENT EQU 0F000H
  114. MODELBYTE EQU DS:BYTE PTR [0FFFEH]
  115. MODELPCJR EQU 0FDH
  116. test=0
  117. ;;Rev 3.30 modification ----------------------------
  118. INCLUDE MSGROUP.INC ;DEFINE CODE SEGMENT
  119. INCLUDE MSEQU.INC
  120. INCLUDE DEVSYM.INC
  121. INCLUDE PUSHPOP.INC
  122. INCLUDE MSMACRO.INC
  123. ASSUME DS:NOTHING,ES:NOTHING
  124. EXTRN DSK$IN:NEAR
  125. EXTRN SETPTRSAV:NEAR
  126. EXTRN OUTCHR:NEAR
  127. EXTRN SETDRIVE:NEAR
  128. EXTRN FLUSH:NEAR
  129. EXTRN HARDERR:NEAR
  130. EXTRN HARDERR2:NEAR
  131. EXTRN MAPERROR:NEAR
  132. EXTRN GETBP:NEAR
  133. EXTRN CHECKSINGLE:NEAR
  134. EXTRN CHECK_TIME_OF_ACCESS:NEAR
  135. EXTRN EXIT:NEAR
  136. EXTRN HAS1:NEAR
  137. EXTRN HAS1_res:NEAR
  138. EXTRN READ_SECTOR:NEAR
  139. EXTRN INT_2F_13:FAR
  140. EXTRN OLD13:DWORD
  141. ;DATA
  142. EXTRN PTRSAV:DWORD
  143. EXTRN START_BDS:WORD
  144. EXTRN FDRIVE1:WORD
  145. EXTRN FDRIVE2:WORD
  146. EXTRN FDRIVE3:WORD
  147. EXTRN FDRIVE4:WORD
  148. EXTRN FLAGBITS:WORD
  149. EXTRN TIM_DRV:BYTE
  150. EXTRN MEDBYT:BYTE
  151. EXTRN DRVMAX:BYTE
  152. PATHSTART 005,DISK
  153. EVENB
  154. PUBLIC ORIG19
  155. ORIG19 DD ?
  156. PUBLIC INT19SEM
  157. INT19SEM DB 0 ; INDICATE THAT ALL INT 19
  158. ; INITIALIZATION IS COMPLETE
  159. IRP AA,<02,08,09,0A,0B,0C,0D,0E,70,72,73,74,76,77>
  160. public Int19OLD&AA
  161. Int19OLD&AA dd -1 ;Orignal hw int. vec for INT 19h.
  162. ENDM
  163. EVENB
  164. PUBLIC DSKDRVS
  165. DSKDRVS DW FDRIVE1
  166. DW FDRIVE2
  167. DW FDRIVE3
  168. DW FDRIVE4
  169. PUBLIC HDSKTAB
  170. HDSKTAB DW HDRIVE
  171. DW DRIVEX
  172. ;* Next area is reseved for mini disk BPB pointers *** 4/7/86
  173. ;* Don't change this pos. Should be add. from DskDrvs *** 4/7/86
  174. MINI_DISK_BPB_PTRS DB 40 dup (?) ;4/7/86 - mem res for Mini disk.
  175. EVENB
  176. PUBLIC INT_2F_NEXT
  177. INT_2F_NEXT DD ?
  178. RET_ADDR DD ?
  179. PATHEND 005,DISK
  180. ;;End of modification ----------------------------
  181. ; INT19
  182. ;
  183. ; We "hook" the INT_REBOOT vector, because contrary to IBM documentation,
  184. ; it does NOT "bootstrap" the machine. It leaves memory almost untouched.
  185. ; Since the BIOS_INIT code assumes that certain Interrupt Vectors point to
  186. ; the ROM_BIOS we must "unhook" them before issuing the actual INT_REBOOT.
  187. ; Currently the following vectors need to be unhooked:
  188. ; 02,08,09,0A,0B,0C,0D,0E,70,72,73,74,75,76,77
  189. ;
  190. Public Int19
  191. Int19 proc FAR
  192. xor AX,AX ; get data segment to
  193. mov DS,AX ; point to the vector table
  194. assume ds:nothing
  195. assume es:nothing
  196. les DI,Old13 ; get ES to point to this segment
  197. mov DS:[13h*4],DI ; restore old int13 value
  198. mov DS:[13h*4+2],ES
  199. cmp Byte ptr Int19Sem, 0
  200. jnz int19vecs
  201. jmp doint19
  202. ;;Dos 3.30 Will not support the PC-Jr
  203. ;;Rev 3.30 modification ----------------------------
  204. ; ON THE PCJR, DON'T REPLACE ANY VECTORS
  205. ; MODEL BYTE DEFINITIONS FROM MSSTACK.ASM
  206. ; MOV AX,ROMSEGMENT
  207. ; MOV DS,AX
  208. ; MOV AL,MODELPCJR
  209. ;
  210. ; CMP AL,MODELBYTE
  211. ; JNE INT19VECS
  212. ; JMP DOINT19
  213. ;Stacks code has changed these hardware interrupt vectors
  214. ;STKINIT in SYSINIT1 will initialzie Int19hOLDxx values.
  215. int19vecs:
  216. ;
  217. ; we now need to unhook all the vector replace to prevent stack overflow
  218. ;
  219. ;;Rev 3.30 modification ----------------------------
  220. XOR AX,AX
  221. MOV DS,AX
  222. IRP AA,<02,08,09,0A,0B,0C,0D,0E,70,72,73,74,76,77>
  223. LES DI,Int19OLD&AA
  224. mov ax,es ; Put segment where we can compare it
  225. cmp ax,-1 ; OPT 0ffffh is not likely
  226. je skip_int&AA ; OPT could get away without checking
  227. cmp di,-1 ; OPT offset here.
  228. je skip_int&AA
  229. MOV DS:[AA&H*4],DI
  230. MOV DS:[AA&H*4+2],ES
  231. skip_int&AA:
  232. ENDM
  233. ;;End of modification ----------------------------
  234. doint19:
  235. LES DI,Orig19
  236. MOV DS:[19h*4],DI
  237. MOV DS:[19h*4+2],ES
  238. INT 19h
  239. INT19 ENDP
  240. ASSUME DS:CODE
  241. ;*****************************************************************************
  242. PUBLIC DSK$INIT
  243. DSK$INIT PROC NEAR
  244. PUSH CS
  245. POP DS
  246. MOV AH,BYTE PTR DRVMAX
  247. MOV DI,OFFSET DskDrvs
  248. JMP SetPTRSAV
  249. DSK$INIT ENDP
  250. ;
  251. ; Int 2f handler for external block drivers to communicate with the internal
  252. ; block driver in msdisk. The multiplex number chosen is 8. The handler
  253. ; sets up the pointer to the request packet in [PTRSAV] and then jumps to
  254. ; DSK$IN, the entry point for all disk requests.
  255. ; On exit from this driver (at EXIT), we will return to the external driver
  256. ; that issued this Int 2F, and can then remove the flags from the stack.
  257. ; This scheme allows us to have a small external device driver, and makes
  258. ; the maintainance of the various drivers (DRIVER and msBIO) much easier,
  259. ; since we only need to make changes in one place (most of the time).
  260. ;
  261. ; AL contains the Int2F function:
  262. ; 0 - Check for installed handler - RESERVED
  263. ; 1 - Install the BDS into the linked list
  264. ; 2 - DOS request
  265. ;
  266. MYNUM EQU 8
  267. Public Int2F_Disk
  268. Int2F_Disk PROC FAR
  269. cmp ah,MYNUM
  270. je Mine
  271. jmp cs:[Int_2F_Next] ; chain to next Int 2F handler
  272. Mine:
  273. cmp al,0F8H ; IRET on reserved functions
  274. jb Do_Func
  275. IRET
  276. Do_Func:
  277. or al,al ; A GET INSTALLED STATE request?
  278. jne Disp_Func
  279. mov al,0FFH
  280. IRET
  281. Disp_Func:
  282. Message fTestInit,<"Int2F_disk",cr,lf>
  283. cmp al,1 ; Request for installing BDS?
  284. jne Do_DOS_Req
  285. call Install_BDS
  286. IRET
  287. Do_DOS_Req:
  288. ; Set up pointer to request packet
  289. MOV WORD PTR CS:[PTRSAV],BX
  290. MOV WORD PTR CS:[PTRSAV+2],ES
  291. jmp DSK$IN
  292. Int2F_Disk ENDP
  293. ;
  294. ; Install_BDS installs a BDS a location DS:DI into the current linked list of
  295. ; BDS maintained by this device driver. It places the BDS at the END of the
  296. ; list.
  297. Public Install_BDS
  298. INSTALL_BDS PROC NEAR
  299. message ftestinit,<"Install BDS",cr,lf>
  300. ; ds:di point to BDS to be installed
  301. les si,dword ptr cs:[Start_BDS] ; Start at beginning of list
  302. push es ; Save pointer to current BDS
  303. push si
  304. ; es:si now point to BDS in linked list
  305. Loop_Next_BDS:
  306. cmp si,-1 ; got to end of linked list?
  307. jz Install_Ret
  308. ; If we have several logical drives using the same physical drive, we must
  309. ; set the I_Am_Mult flag in each of the appropriate BDSs.
  310. mov al,byte ptr ds:[di].DriveNum
  311. cmp byte ptr es:[si].DriveNum,al
  312. jnz Next_BDS
  313. message ftestinit,<"Logical Drives",cr,lf>
  314. xor bx,bx
  315. mov bl,fI_Am_Mult
  316. or word ptr ds:[di].flags,bx ; set flags in both BDSs concerned
  317. or word ptr es:[si].flags,bx
  318. mov bl,fI_Own_Physical
  319. xor bx,-1
  320. and word ptr ds:[di].flags,bx ; reset that flag for 'new' BDS
  321. ; We must also set the fChangeline bit correctly.
  322. mov bx,word ptr es:[si].flags ; determine if changeline available
  323. and bl,fChangeline
  324. xor bh,bh
  325. or word ptr ds:[di].flags,bx
  326. Next_BDS:
  327. ; Before moving to next BDS, preserve pointer to current one. This is needed at
  328. ; the end when the new BDS is linked into the list.
  329. pop bx ; discard previous pointer to BDS
  330. pop bx
  331. push es
  332. push si
  333. mov bx,word ptr es:[si].link + 2
  334. mov si,word ptr es:[si].link
  335. mov es,bx
  336. jmp short Loop_Next_BDS
  337. Install_Ret:
  338. pop si ; Retrieve pointer to last BDS
  339. pop es ; in linked list.
  340. mov ax,ds
  341. mov word ptr es:[si].link+2,ax ; install BDS
  342. mov word ptr es:[si].link,di
  343. mov word ptr ds:[di].link,-1 ; set NEXT pointer to NULL
  344. RET
  345. INSTALL_BDS ENDP
  346. ;
  347. ; RE_INIT installs the Int 2F vector that will handle communication between
  348. ; external block drivers and the internal driver. It also installs the
  349. ; Reset_Int_13 interface. It is called by SYSYINIT
  350. ;
  351. PUBLIC RE_INIT
  352. RE_INIT PROC FAR
  353. Message ftestinit,<"REINIT",CR,LF>
  354. PUSH AX
  355. PUSH DS
  356. PUSH DI
  357. XOR DI,DI
  358. MOV DS,DI
  359. MOV DI,2FH*4 ; point it to Int 2F Vector
  360. MOV AX,WORD PTR DS:[DI]
  361. MOV WORD PTR CS:[INT_2F_NEXT],AX
  362. MOV AX,WORD PTR DS:[DI+2] ; preserve old Int 2F vector
  363. MOV WORD PTR CS:[INT_2F_NEXT+2],AX
  364. ; INSTALL the Reset_Int_13
  365. ; interface
  366. CLI
  367. MOV Word Ptr DS:[DI],Offset Int_2f_13 ; install new vectors
  368. MOV Word Ptr DS:[DI+2],CS
  369. STI
  370. POP DI
  371. POP DS
  372. POP AX
  373. RET
  374. RE_INIT ENDP
  375. ;-------------------------------------------------
  376. ;
  377. ; Ask to swap the disk in drive A:
  378. ; Using a different drive in a one drive system so
  379. ; request the user to change disks
  380. ;
  381. Public SWPDSK
  382. SWPDSK PROC NEAR
  383. mov al,byte ptr ds:[di].drivelet ; get the drive letter
  384. add al,"A"
  385. mov cs:DRVLET,AL
  386. push ds ; preserve segment register
  387. push cs
  388. pop ds
  389. mov SI,OFFSET SNGMSG ; ds:si -> message
  390. push BX
  391. call WRMSG ;Print disk change message
  392. call FLUSH
  393. ; wait for a keyboard character
  394. xor AH, AH ; set command to read character
  395. int 16h ; call rom-bios
  396. POP BX
  397. pop ds ; restore segment register
  398. WRMRET:
  399. ret
  400. SWPDSK ENDP
  401. ;----------------------------------------------
  402. ;
  403. ; WrMsg writes out message pointed to by [SI]
  404. ;
  405. Public WrMsg
  406. WRMSG PROC NEAR
  407. lodsb ; get the next character of the message
  408. or AL,AL ; see fi end of message
  409. jz WRMRET
  410. pushf
  411. push CS
  412. call OUTCHR
  413. jmp SHORT WRMSG
  414. WRMSG ENDP
  415. INCLUDE BIOMES.INC
  416. ;
  417. ; End of support for multiple floppies with no logical drives
  418. ; This is not 'special' any more because we now have the capability of
  419. ; defining logical drives in CONFIG.SYS. We therefore keep the code for
  420. ; swapping resident ALL the time.
  421. ;
  422. ;;Rev 3.30 modification ----------------------------
  423. ;Variables for Dynamic Relocatable modules
  424. ;These should be stay resident.
  425. public INT6C_RET_ADDR
  426. INT6C_RET_ADDR DD ? ;ret add from INT 6C for P12 mach
  427. PATHSTART 001,CLK
  428. ;
  429. ; DATA STRUCTURES FOR REAL-TIME DATE AND TIME
  430. ;
  431. public BIN_DATE_TIME
  432. public MONTH_TABLE
  433. public DAYCNT2
  434. public FEB29
  435. BIN_DATE_TIME:
  436. DB 0 ; CENTURY (19 OR 20) OR HOURS (0-23)
  437. DB 0 ; YEAR IN CENTURY (0-99) OR MINUTES (0-59)
  438. DB 0 ; MONTH IN YEAR (1-12) OR SECONDS (0-59)
  439. DB 0 ; DAY IN MONTH (1-31)
  440. MONTH_TABLE:
  441. DW 0 ;MJB002 JANUARY
  442. DW 31 ;MJB002 FEBRUARY
  443. DW 59 ;MJB002
  444. DW 90 ;MJB002
  445. DW 120 ;MJB002
  446. DW 151 ;MJB002
  447. DW 181 ;MJB002
  448. DW 212 ;MJB002
  449. DW 243 ;MJB002
  450. DW 273 ;MJB002
  451. DW 304 ;MJB002
  452. DW 334 ;MJB002
  453. DAYCNT2 DW 0000 ;MJB002 TEMP FOR CNT OF DAYS SINCE 1-1-80
  454. FEB29 DB 0 ;MJB002 FEBRUARY 29 IN A LEAP YEAR FLAG
  455. PATHEND 001,CLK
  456. ;;End of modification modification ----------------------------
  457. Public EndFloppy
  458. EndFloppy Label Byte
  459. ;
  460. ; End of code for virtual floppy drives
  461. ;
  462. Public EndSwap
  463. EndSwap Label Byte
  464. PATHSTART 004,BIO
  465. Public HNUM
  466. HNUM DB 0 ; number of hardfile (hard drives)
  467. Public HardDrv
  468. HARDDRV DB 80H ;Physical drive number of first hardfile
  469. ;
  470. ; "HDRIVE" is a hard disk with 512 byte sectors
  471. ;
  472. EVENB
  473. Public BDSH
  474. BDSH DW -1 ; Link to next structure
  475. DW Code
  476. DB 80h ; physical drive number
  477. DB "C" ; Logical Drive Letter
  478. Public HDRIVE
  479. HDRIVE:
  480. DW 512
  481. DB 1 ; Sectors/allocation unit
  482. DW 1 ; Reserved sectors for DOS
  483. DB 2 ; No. of allocation tables
  484. DW 16 ; Number of directory entries
  485. DW 0000 ; Number of sectors (at 512 bytes each)
  486. DB 11111000B ; Media descriptor
  487. DW 1 ; Number of FAT sectors
  488. DW 00 ; Sector limit
  489. DW 00 ; Head limit
  490. DW 00 ; Hidden sector count
  491. DB 0 ; TRUE => bigfat
  492. OPCNTH DW 0 ; Open Ref. Count
  493. VOLIDH DB "NO NAME ",0 ; Volume ID for this disk
  494. DB 3 ; Form Factor
  495. FLAGSH DW 0020H ; Various Flags
  496. dw 40 ; number of cylinders
  497. RecBPBH db 31 dup (?) ; Recommended BPB for drive
  498. TRACKH DB -1 ; Last track accessed on this drive
  499. TIM_LOH DW -1 ; Keep these two contiguous (?)
  500. TIM_HIH DW -1
  501. ;
  502. ; End of single hard disk section
  503. ;
  504. Public EndOneHard
  505. EndOneHard Label Byte
  506. ;
  507. ;"DRIVEX" is an extra type of drive usually reserved for an
  508. ; additional hard file
  509. ;
  510. EVENB
  511. Public BDSX
  512. BDSX DW -1 ; Link to next structure
  513. DW Code
  514. DB 81h ; physical drive number
  515. DB "D" ; Logical Drive Letter
  516. Public DRIVEX
  517. DRIVEX:
  518. DW 512
  519. DB 00 ; Sectors/allocation unit
  520. DW 1 ; Reserved sectors for DOS
  521. DB 2 ; No. of allocation tables
  522. DW 0000 ; Number of directory entries
  523. DW 0000 ; Number of sectors (at 512 bytes each)
  524. DB 11111000B ; Media descriptor
  525. DW 0000 ; Number of FAT sectors
  526. DW 00 ; Sector limit
  527. DW 00 ; Head limit
  528. DW 00 ; Hidden sector count
  529. DB 0 ; TRUE => bigfat
  530. OPCNTD DW 0 ; Open Ref. Count
  531. VOLIDD DB "NO NAME ",0 ; Volume ID for this disk
  532. DB 3 ; Form Factor
  533. FLAGSD DW 0020H ; Various Flags
  534. dw 40 ; number of cylinders
  535. RecBPBD db 31 dup (?) ; Recommended BPB for drive
  536. TRACKD DB -1 ; Last track accessed on this drive
  537. TIM_LOD DW -1 ; Keep these two contiguous
  538. TIM_HID DW -1
  539. ;
  540. ; End of section for two hard disks
  541. Public EndTwoHard
  542. EndTwoHard Label Byte
  543. PATHEND 004,BIO
  544. Public TwoHard
  545. TWOHARD LABEL BYTE
  546. PAGE
  547. include ms96tpi.inc
  548. ;;Rev 3.30 modification ----------------------------
  549. ;Memory allocation for BDSM table.
  550. PUBLIC BDSMs
  551. BDSMs BDSM_type Max_mini_dsk_num dup (<>) ;currently max. 23
  552. ;** End_of_BDSM defined in MSINIT.ASM will be used to set the appropriate
  553. ;** ending address of BDSM table.
  554. ;;End of modification ----------------------------
  555. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;bug005sp
  556. ;
  557. ;;3.3 BUG FIX -SUNILP ------------------------------
  558. ;Paragraph buffer between the BDSMs and MSHARD
  559. ;
  560. ;The relocation code for MSHARD needs this. this cannot be used for
  561. ;anything. nothing can come before this or after this.....IMPORTANT!!!!
  562. ;don't get too smart and using this buffer for anything!!!!!!
  563. ;
  564. ; db 16 dup(0)
  565. ;
  566. ;end of bug fix buffer
  567. ;;
  568. ;;3.3 BUG FIX -SUNILP------------------------------
  569. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;bug005sp
  570. CODE ENDS
  571. END