home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / ZPM3.LBR / BIOS.TZT / BIOS.TXT
Text File  |  1992-04-03  |  10KB  |  196 lines

  1.           NOTES on your CP/M 3.0 BIOS and ZPM3
  2.           ====================================
  3.  
  4. ZPM3 will work fine with your current CP/M 3.0 BIOS. This 
  5. document is not meant to tell you how to change your BIOS for 
  6. ZPM3, but rather to point out some interesting and useful facts 
  7. about the way ZPM3 uses the BIOS, and how you should configure 
  8. your BIOS.
  9.  
  10.  
  11.  
  12. XMOVE routine.
  13. ~~~~~~~~~~~~~~
  14. If you have 128 byte physical sectors, or your BIOS does all the 
  15. deblocking so that it appears to the BDOS that you have 128 byte 
  16. physical sectors, XMOVE does not get used at all by ZPM3. Such 
  17. was not the case with CP/M 3.0 which would make redundant calls 
  18. to XMOVE. Make sure XMOVE is implemented and working anyhow as 
  19. applications may attempt to use it.
  20.  
  21. When the BDOS is operating in the system bank (bank 0) and it 
  22. needs to move data in the TPA bank, it switches to the TPA bank 
  23. and does an ordinary LDIR. As such, XMOVE will never get called 
  24. by the BDOS with B=C (source bank and destination bank the same).
  25.  
  26. In the CP/M 3.0 manuals, there are two differing opinions about 
  27. XMOVE as far as whether B is the source or the destination. The 
  28. truth is that C is the source and B is the destination. Anything 
  29. you see to the contrary is a misprint.
  30.  
  31. MOVE routine.
  32. ~~~~~~~~~~~~~
  33. When CP/M 3.0 was released, it was made 8080 compatible simply 
  34. because CP/M 2.2 was 8080 compatible. I have never heard of an 
  35. 8080 machine running CP/M 3.0, and it is likely that there has 
  36. never been one. Digital Research new that the Z80 was the CPU of 
  37. choice for modern PC's, and while they wrote their code for the 
  38. 8080, they recognised the Z80 with the MOVE routine (which a Z80 
  39. BIOS could implement in just three instructions).
  40.  
  41. ZPM3 uses the MOVE routine much less than CP/M 3.0 does. In fact, 
  42. the only time ZPM3 uses MOVE is with an XMOVE call directly 
  43. preceding it. If you have 128 byte physical sectors (or the BIOS 
  44. does the sector deblocking), MOVE will never get called.
  45.  
  46. Always remember that MOVE must return with HL and DE pointing to 
  47. the end of the moved data. If they don't, you will have trouble.
  48.  
  49.  
  50. TIME routine.
  51. ~~~~~~~~~~~~~
  52. Be aware that the DATE program supplied with CP/M 3.0 will not 
  53. work properly if your BIOS does not update the SCB with 
  54. interrupts. There have been replacements since then and are 
  55. available in the public domain.
  56.  
  57. One common trap for BIOS writers is forgetting that HL and DE 
  58. must be saved by the TIME routine. There is no obvious reason for 
  59. it, and really they should be saved in the BDOS, however ZPM3 
  60. takes advantage of the fact that TIME should save these registers 
  61. and expects them to be returned untouched
  62.  
  63. Buffers.
  64. ~~~~~~~~
  65. CP/M 3.0 (and therefore ZPM3) keeps special disk buffers. The 
  66. system is rather complex. The directory is buffered separately 
  67. from the rest of the disk (and in the case of 128 byte sectors 
  68. the rest of the disk isn't buffered anyhow).
  69.  
  70. You decide how many buffers to give to each disk's directory and 
  71. data, and you may choose to have buffers shared by different 
  72. drives. All these choices can make for lots of fun for the 
  73. hacker, but without knowing much about the internal workings of 
  74. the BDOS how do you best set the buffer up?
  75.  
  76. There are many cases to consider depending on how much RAM you 
  77. have available to allocate to buffers. If you have virtually 
  78. unlimited RAM, you might as well allocate as many buffers as 
  79. GENCPM will allow. The only catch to this is that more buffers 
  80. implies the BDOS will take more time to look through them all 
  81. before coming to the decision that a disk read is required. The 
  82. good news is that the ZPM3 searching algorithm is particularly 
  83. fast.  Empty buffers are discovered even faster than buffers 
  84. which are valid but don't match, so large numbers of empty 
  85. buffers pose very little problem. In general, even with the 
  86. maximum number of buffers, the advantages they give outweigh the 
  87. disadvantages.
  88.  
  89. Of course, few people have unlimited RAM. If you have very little 
  90. room available, spend most of it on the directory buffers. These 
  91. buffers act like a cache of the directory, and can save the disk 
  92. heads from moving back to the directory tracks to find out where 
  93. the next block is stored. Even on very fast hard disks, the 
  94. advantages that decent directory buffers give are great.
  95.  
  96. When dividing up directory buffers between a number of drives, 
  97. consider which drive holds the most files and which drive does 
  98. the most work. A drive which holds a lot of files but is rarely 
  99. accessed is not worth wasting buffers on. If you have a system 
  100. with one hard drive and one floppy drive, and you don't intend to 
  101. use the floppy drive very much, give only one buffer to the 
  102. floppy and all the rest to your hard drive. This will penalise 
  103. the floppy's performance somewhat, but the improvement it gives 
  104. to the hard drive will make it worthwhile.
  105.  
  106. Data buffers, like directory buffers, perform two tasks: 
  107. deblocking of physical sectors, and cacheing. For data buffers 
  108. however the cacheing is the less important job, unless you have a 
  109. lot of data buffers available. The reason for this is that the 
  110. buffer algorithms work by taking the least recently used buffer 
  111. and using it for deblocking. If you are working on a file which 
  112. is 8k long, but you only have 4k of buffers, the BDOS will run 
  113. out of buffers before it has read the whole file and will grab 
  114. the least recently used one even though it contains valid data 
  115. from the file which could be required later on. The result is 
  116. that the BDOS does much searching through its 4k of buffers, but 
  117. rarely finds anything which matches and must read from the disk 
  118. anyhow.
  119.  
  120. In practice the system works a little better than that because of 
  121. the way files are used by most programs, so data buffers are 
  122. still worthwhile, but to take real advantage of their cacheing 
  123. ability you must have more room in the data buffers than the size 
  124. of the file you are working with. With word processors such as 
  125. Wordstar and NewWord creating extra files as they work, you 
  126. really need more than twice as much room in the buffers than the 
  127. size of the file.
  128.  
  129. So you can see why data buffers are less important than directory 
  130. buffers. Something else you should be aware of concerns multi- 
  131. sector i/o and the data buffers. When the BDOS is told to read a 
  132. file it searches its buffers and if it can't find the data there 
  133. it reads it from the disk. Normally it deblocks the data one 
  134. record at a time through its data buffers, leaving the data in 
  135. the buffers in case it is required again. However multi-sector 
  136. i/o does not usually need to deblock its data, so the data is 
  137. sent straight to the TPA without going through the data buffers. 
  138. If any of that data is required again, it will not be in the data 
  139. buffers and must be read from the disk. So two reads of the same 
  140. data using multi-sector i/o might actually be slower than reads 
  141. that are done a sector at a time!
  142.  
  143. And the really important thing about all this is that the CCP 
  144. uses multi-sector i/o to load programs. So if you thought that 
  145. implementing large numbers of data buffers would give you faster 
  146. loading of programs, you were wrong. The data buffers won't help 
  147. program loading unless the data can be put into the buffers 
  148. first.
  149.  
  150. If you use ZCCP, you will find there is a facility to prevent the 
  151. data buffers from being bypassed on program loads. It involves 
  152. simply setting the f1' bit of the file. The idea is that you set 
  153. f1' on all the files which are small enough not to clog up your 
  154. buffers, and then they run as if they are on a ram disk, but one 
  155. in which you can never lose data. The system is quite wonderful 
  156. in that the RAM used to hold the files is available to buffer 
  157. other data if required. Unlike a ram disk, the RAM is dynamically 
  158. allocated and the data is completely safe. But you must be using 
  159. ZCCP, and you must have at least 6k of data buffers before it 
  160. does anything useful. If you currently have a ram disk but few 
  161. data buffers, consider taking a chunk of your ram disk for data 
  162. buffers and switching to ZCCP.
  163.  
  164.  
  165.  
  166. GENCPM bugs.
  167. ~~~~~~~~~~~~
  168. GENCPM has bugs in it. If you can, try and set up all your 
  169. buffers manually. That way you'll know where they are and you are 
  170. in complete control.
  171.  
  172. The biggest fault I have found with GENCPM is that it will 
  173. allocate allocation vectors incorrectly. CP/M 3.0 can use double 
  174. bit allocation vectors, but doesn't necessarily. Sometimes (and I 
  175. think it is mainly with big disks), GENCPM will only allocate 
  176. enough room for single bit allocation vectors when double bit 
  177. vectors had been specified. The symptoms of this are varied, but 
  178. often, you can use your A: drive for a while, but as soon as you 
  179. use your B: drive funny things happen. If you only use A: and C: 
  180. drives, things appear to work OK.
  181.  
  182. Another thing which is more obvious when it happens is the system 
  183. simply won't boot at all. This usually happens when you use large 
  184. numbers of data or directory buffers. I can't say what GENCPM is 
  185. doing in such a case, but I have noticed that its maths are a 
  186. little dodgy sometimes. Usually GENCPM won't allow you to 
  187. allocate more buffers than you have room for, but sometimes it 
  188. will.
  189.  
  190. The first thing to try if you suspect a GENCPM induced problem is 
  191. setting up with only one drive and a single buffer. If that fixes 
  192. it, the problem could well be with GENCPM.
  193.  
  194. Naturally, your BIOS code could still be the problem, so look out 
  195. for that too!
  196.