home *** CD-ROM | disk | FTP | other *** search
/ Collection of Education / collectionofeducationcarat1997.iso / COMPUSCI / DOSREF20.ZIP / CHAPTER.006 < prev    next >
Text File  |  1991-06-17  |  34KB  |  602 lines

  1.  
  2.    **  Programmer's  Technical  Reference  for  MSDOS  and  the  IBM  PC **
  3.                         ┌─────────────────────────────┐
  4.                         │ Shareware Version, 06/17/91 │
  5.                         │  Please Register Your Copy  │
  6.                         └─────────────────────────────┘
  7.                     Copyright (c) 1987, 1991 Dave Williams
  8.                  USA copyright TXG 392-616 ALL RIGHTS RESERVED
  9.                      ISBN 1-878830-02-3 (disk-based text)
  10.  
  11.  
  12.                              C H A P T E R   S I X
  13.  
  14.                        DOS CONTROL BLOCKS AND WORK AREAS
  15.  
  16.  
  17.  Contrary to popular belief, DOS is not limited to 640k of work space. This 
  18. constraint is enforced by the mapping of ROM and video RAM into the default 1 
  19. megabyte CPU address space. Some MSDOS compatible machines, such as the Sanyo 
  20. 55x series, can have as much as 768k of contiguous DOS workspace with the 
  21. appropriate option boards. Since DOS has no real memory management, it cannot 
  22. deal with a fragmented workspace. Fragmented RAM (such as RAM mapped into the 
  23. option ROM address space) can be dealt with as a RAMdisk or other storage area 
  24. by using a device driver or other software.
  25.  
  26.  The 80386 CPU and appropriate control software can create a DOS workspace of 
  27. more than one megabyte. Certain add-on boards can also add more than a 
  28. megabyte of workspace, but only for specially written software. Since these 
  29. are all proprietary schemes, little information is availible at present.
  30.  
  31.  When DOS loads a program, it first sets aside a section of memory for the 
  32. program called the program segment, or code segment. Then it constructs a 
  33. control block called the program segment prefix, or PSP, in the first 256 
  34. (100h) bytes. Usually, the program is loaded directly after the PSP at 100h.
  35.  The PSP contains various information used by DOS to help run the program.  
  36. The PSP is always located at offset 0 within the code segment. When a program 
  37. recieves control certain registers are set to point to the PSP. For a COM 
  38. file, all registers are set to point to the beginning of the PSP and the 
  39. program begins at 100h. For the more complex EXE file structures, only DS and 
  40. ES registers are set to point to the PSP. The linker passes the settings for 
  41. the DS, IP, SS, and SP registers and may set the starting location in CS:IP to 
  42. a location other than 100h.
  43.  
  44.  IBMBIO provides an IRET instruction at absolute address 847h for use as a 
  45. dummy routine for interrupts that are not used by DOS. This lets the interrupts
  46. do nothing until their vectors are rerouted to their appropriate handlers.
  47.  
  48.  A storage block is used by DOS to record the amount and location of allocated 
  49. memory within the machine's address space.
  50.  A storage block, a Program Segment Prefix, and an environment area are built 
  51. by DOS for each program currently resident in the address space. The storage 
  52. block is used by DOS to record the address range of memory allocated to a 
  53. program. It is used by DOS to find the next availible area to load a program 
  54. and to determine if there is enough memory to run that porogram. When a 
  55. memory area is in use, it is said to be allocated. Then the program ends, or 
  56. releases memory, it is said to be deallocated. 
  57.  A storage block contains a pointer to the Program Segment Prefix associated 
  58. with each program. This control block is constructed by IBMDOS for the purpose 
  59. of providing standardized areas for DOS/program communication. Within the 
  60. PSP are areas which  are used to save interrupt vectors, pass parameters to 
  61. the program, record disk directory information, and to buffer disk reads and 
  62. writes. This control block is 100h bytes in length and is followed by the 
  63. program module loaded by DOS. 
  64.  The PSP contains a pointer to the environment area for that program. This 
  65. area contains a copy of the current DOS SET, PROMPT, COMSPEC, and PATH values 
  66. as well as any user-set variables. The program may examine and modify this 
  67. information as desired. 
  68.  Each storage block is 10h bytes long, although only 5 bytes are currently 
  69. used by DOS. The first byte contains 4Dh (a capital M) to indicate that it 
  70. contains a pointer to the next storage block. A 5Ah (a capital Z) in the 
  71. first byte of a storage block indicatres there are no more storage blocks 
  72. following this one (it is the end of the chain). The identifier byte is 
  73. followed by a 2 byte segment number for the associated PSP for that program. 
  74. The next 2 bytes contain the number of segments what are allocated to the 
  75. program. If this is not the last storage block, then another storage block 
  76. follows the allocated memory area.
  77.  When the storage block contains zero for the number of allocated segments, 
  78. then no storage is allocated to this block and the next storage block 
  79. immediately follows this one. This can happen when memory is allocated and 
  80. then deallocated repeatedly.
  81.  IBMDOS constructs a storage block and PSP before loading the command 
  82. interpreter (default is COMMAND.COM).
  83.  
  84.  If the copy of COMMAND.COM is a secondary copy, it will lack an environment 
  85. address at PSP+2Ch.
  86.  
  87.  
  88.  
  89. THE DISK TRANSFER AREA (DTA)├──────────────────────────────────────────────────
  90.  
  91.  DOS uses an area in memory to contain the data for all file reads and writes 
  92. that are performed with FCB function calls. This are is known as the disk 
  93. transfer area. This disk transfer area (DTA) is sometimes called a buffer. 
  94. It can be located anywhere in the data area of your application program and 
  95. should be set by your program.
  96.  
  97.  Only one DTA can be in effect at a time, so your program must tell DOS what 
  98. memory location to use before using any disk read or write functions. Use 
  99. function call 1Ah (Set Disk Transfer Address) to set the disk transfer address.
  100. Use function call 2Fh (Get Disk Transfer Address) to get the disk transfer 
  101. address. Once set, DOS continues to use that area for all disk operations until
  102. another function call 1Ah is issued to define a new DTA. When a program is given
  103. control by COMMAND.COM, a default DTA large enough to hold 128 bytes is 
  104. established at 80h into the program's Program Segment Prefix.
  105.  
  106.  For file reads and writes that are performed with the extended function calls,
  107. there is no need to set a DTA address. Instead, specify a buffer address when 
  108. you issue the read or write call.
  109.  
  110.  
  111. DOS PROGRAM SEGMENT├───────────────────────────────────────────────────────────
  112.  
  113.  When you enter an external command or call a program through the EXEC function 
  114. call, DOS determines the lowest availible address space to use as the start of 
  115. available memory for the program being started. This area is called the Program
  116. Segment.
  117.  At offset 0 within the program segment, DOS builds the Program Segment Prefix 
  118. control block. EXEC loads the program after the Program Segment Prefix (at
  119. offset 100h) and gives it control.
  120.  The program returns from EXEC by a jump to offset 0 in the Program Segment 
  121. Prefix, by issuing an int 20h, or by issuing an int 21h with register AH=00h or 
  122. 4Ch, or by calling location 50h in the PSP with AH=00h or 4Ch.
  123.  It is the responsibility of all programs to ensure that the CS register 
  124. contains the segment address of the Program Segment Prefix when terminating by
  125. any of these methods except call 4Ch.
  126.  
  127.  All of these methods result in returning to the program that issued the EXEC. 
  128. During this returning process, interrupt vectors 22h, 23h, and 24h (Terminate, 
  129. Ctrl-Break, and Critical Error Exit addresses) are restored from the values 
  130. saved in the PSP of the terminating program. Control is then given to the 
  131. terminate address.
  132.  
  133.  
  134. When a program receives control, the following conditions are in effect:
  135.  
  136. For all programs:
  137.  
  138. 1) The segment address of the passed environment is contained at offset 2Ch in 
  139.    the Program Segment Prefix.
  140.  
  141. 2) The environment is a series of ASCII strings totalling less than 32k bytes
  142.    in the form:       NAME=value      The default environment is 160 bytes.
  143.     Each string is a maximum of 127 bytes terminated by a byte of zeroes for a 
  144.    total of 128 bytes, and the entire set