home *** CD-ROM | disk | FTP | other *** search
/ Inside Multimedia 1995 August / IMM0895.ISO01.iso / driver / mitsumi / mscdex.txt < prev    next >
Text File  |  1992-06-02  |  105KB  |  2,265 lines

  1.  
  2.  
  3. Installation Guide
  4. for MS-DOS CD-ROM Extensions
  5.  
  6. Information in this document is subject to change without notice and does 
  7. not represent a commitment on the part of Microsoft Corporation.  The 
  8. software described in this document is furnished under a license agreement 
  9. or nondisclosure agreement.  The software may be used or copied only in 
  10. accordance with the terms of the agreement.  It is against the law to copy the 
  11. Installation Guide for MS-DOS CD-ROM Extensions on magnetic tape, disk 
  12. or any other medium for any purpose other than the purchaser's personal 
  13. use.
  14.  
  15. Copyright Microsoft Corporation, 1986-1990
  16.  
  17. Microsoft, the Microsoft logo and MS-DOS  are registered trademarks of 
  18. Microsoft Corporation.
  19.  
  20. IBM  is a registered trademark of International Business Machines 
  21. Corporation.
  22.  
  23.  
  24. Contents
  25.  
  26.  
  27. Introduction        4
  28.  
  29. Setting Up Your CD-ROM Drive    5
  30.  
  31.   What You Need        5
  32.   Using the CD-ROM SETUP Program    5
  33.   Restarting Your Computer After Running SETUP    6
  34.  
  35. Using Your CD-ROM Drive    7
  36.  
  37. What SETUP Does        7
  38.  
  39.   The CONFIG.SYS File    7
  40.   The AUTOEXEC.BAT File    8
  41.   Device Driver Names        8
  42.   Command Line Switches    8
  43.  
  44. Questions and Answers    10
  45.  
  46.  
  47. Installation Guide
  48. for MS-DOS CD-ROM Extensions
  49.  
  50. ________________________________________________
  51. INTRODUCTION
  52.  
  53. This guide provides instructions for installing the operating software for your 
  54. CD-ROM drive on a computer that uses the MS-DOS operating system.
  55.  
  56. Compact Disc Read-only Memory (CD-ROM) represents a technology in the 
  57. storage and retrieval of information for personal computers.  A CD-ROM 
  58. drive provides a storage capacity of more than 1,500 floppy disks, more than 
  59. the contents of 100 textbooks - on a single CD-ROM disc.
  60.  
  61. Installing your CD-ROM drive is a simple procedure.  The SETUP disk 
  62. provided with your CD-ROM drive includes a program that leads you 
  63. through all the steps required to install your drive and configure it for use 
  64. with your system.
  65.  
  66. Once installed, your CD-ROM drive can be read like any other magnetic disk 
  67. drive.  You can use it immediately, without learning anything new; your 
  68. existing MS-DOS applications can access CD-ROM files directly.
  69.  
  70. _______________________________________________
  71. SETTING UP YOUR CD-ROM DRIVE
  72.  
  73. What You Need
  74.  
  75. To install your CD-ROM drive for use with MS-DOS, you need:
  76.  
  77. -  An IBM personal computer or compatible with a minimum of 256K 
  78. memory.
  79. -  A CD-ROM drive and controller card.
  80. -  The MS-DOS CD-ROM Extensions disk provided with your CD-ROM drive.
  81. -  MS-DOS, version 3.1 or higher.
  82.  
  83.  
  84. If you are using a floppy disk system, you will also need:
  85.  
  86. - A blank, formatted floppy disk.
  87. - A disk that includes MS-DOS, version 3.1 or higher.
  88.  
  89. Note:  The MS-DOS CD-ROM Extensions enable your drive to read compact 
  90. discs that use the High Sierra or  IS0 9660 format.  
  91.  
  92. Using the CD-ROM SETUP Program
  93.  
  94. The SETUP program gives you step-by-step guidance for preparing your 
  95. computer system for use with a CD-ROM drive.  To begin using the SETUP 
  96. program, refer to the procedure below that applies to the type of system you 
  97. are using (hard-disk or two- or one-drive system).
  98.  
  99. If You have a Hard-Disk System
  100.  
  101. If you are using your CD-ROM drive with a hard-disk system, follow these 
  102. steps:
  103.  
  104. [1]  Insert the MS-DOS CD-ROM Extensions disk into drive A.
  105. [2]  Type a: , Press ENTER
  106.        Type Setup
  107. [3]  Press ENTER
  108. [4]  Follow the instructions that appear on your screen.
  109.  
  110.  
  111. If you have a Two- or One-drive System
  112.  
  113. To install and use the SETUP program, you will need your MS-DOS system 
  114. disk (the disk you use to start your computer).  Before running the SETUP 
  115. program, you must make a new copy of your MS-DOS system disk and copy 
  116. necessary SETUP program files onto that disk.  This new disk should then be 
  117. used each time you start your computer for use with your CD-ROM drive.
  118.  
  119. To copy your MS-DOS system disk and install the SETUP files:
  120.  
  121. [1]  Insert your MS-DOS disk into drive A and start your computer.
  122. [2]  When A> appears on your screen, type diskcopy.
  123. [3]  Press ENTER.
  124. [4]  Follow the instructions displayed on your screen.
  125.        Insert your MS-DOS system disk when prompted for the source disk;
  126.        insert the blank, formatted disk when prompted for the target disk.
  127. [5]  When copying is complete, you will see the message "Copy Complete, 
  128. Copy
  129.        Another? (Y/N)."  Press N and then press ENTER.
  130. [6]  Remove the MS-DOS system disk from drive A and insert the MS-DOS 
  131. CD-ROM
  132.       Extensions disk.
  133. [7]  At A>, type setup
  134. [8]  Press ENTER.
  135.        Follow the instructions displayed on your screen.  If you have a one-drive 
  136. system,
  137.        insert the newly copied disk in drive A when prompted to insert the disk 
  138. for drive B.
  139.  
  140.  
  141. Note:  Label the newly copied CD-ROM start disk "MS-DOS with CD-ROM."  
  142. This is the disk you should now use to start your computer for use with your 
  143. CD-ROM drive.
  144.  
  145.  
  146. Restarting Your Computer After Running SETUP
  147.  
  148. When you have completed the SETUP procedure listed above that applies to 
  149. the type of system you are  using, you need to restart your computer to 
  150. reconfigure your system based on the information you just added to your 
  151. AUTOEXEC.BAT and CONFIG.SYS files.
  152.  
  153. To restart your computer:
  154.  
  155. -  Press Ctrl-Alt-Del.
  156.  
  157. ________________________________________________
  158. USING YOUR CD-ROM DRIVE
  159.  
  160. After you have run the SETUP program, which modifies your 
  161. AUTOEXEC.BAT and CONFIG.SYS files to recognize the presence of your 
  162. CD-ROM drive, you are ready to use your computer with your CD-ROM 
  163. drive.
  164.  
  165. To use your CD-ROM drive with a hard-disk system:
  166.  
  167. -  Turn on your computer.
  168.     Your hard-disk system will recognize the presence of your CD-ROM drive.
  169.  
  170. To use your CD-ROM drive with a floppy-disk system:
  171.  
  172. -  Insert the CD-ROM start disk (labeled "MS-DOS with CD-ROM") and start 
  173. your
  174.    computer.
  175.  
  176. For technical information on how the SETUP program modified your system 
  177. to recognize the CD-ROM drive, see the following section, "What SETUP 
  178. Does."
  179.  
  180. ________________________________________________
  181. WHAT SETUP DOES
  182.  
  183. This section of Installation Guide for MS-DOS CD-ROM Extensions provides 
  184. technical information about the SETUP program.  You do not need to read 
  185. this section before installing and using your CD-ROM drive.
  186.  
  187. The SETUP program helps you adjust your system for use with a CD-ROM 
  188. drive and MS-DOS.  By responding to questions and messages displayed by 
  189. the SETUP program, you automatically modify your system's CONFIG.SYS 
  190. and AUTOEXEC.BAT files to recognize the presence of your CD-ROM drive.  
  191. The SETUP program also copies certain required files to the disk or directory 
  192. you use to start your computer.
  193.  
  194. The CONFIG.SYS file
  195.  
  196. First the SETUP program searches the root directory of the drive selected for 
  197. installation of MS-DOS CD-ROM Extensions for the presence of a 
  198. CONFIG.SYS file.  If the CONFIG.SYS file is not found, the SETUP program 
  199. automatically creates the file.
  200.  
  201. The SETUP program makes the following changes to your CONFIG.SYS file:
  202.  
  203. - Changes or adds the line for "last drive=" to read "last drive=z".
  204. - Adds a line to the CONFIG.SYS file to load the device driver for the CD-
  205. ROM
  206.    drive.
  207.  
  208. The SETUP program modifies your CONFIG.SYS file to ensure your system 
  209. can add additional drives.  By adding the line "lastdrive=z", the SETUP 
  210. program tells your operating system that you may have up to 26 different 
  211. drives, each designated by an individual letter from a to z.  If your 
  212. CONFIG.SYS file has already identified the last drive, the SETUP program 
  213. increases this to allow for the presence of additional drives.
  214.  
  215. The AUTOEXEC.BAT File
  216.  
  217. The SETUP program searches the root directory of the drive selected for 
  218. installation of the MS-DOS CD-ROM Extensions for the AUTOEXEC.BAT 
  219. file.  If the SETUP program cannot find this file, it automatically creates the 
  220. file.
  221.  
  222. Next, the SETUP program adds a line to the AUTOEXEC.BAT file that tells 
  223. MS-DOS to invoke the MSCDEX.EXE program, with its correct parameters, 
  224. when you start your system.  The SETUP program also copies the 
  225. MSCDEX.EXE program and the CDROM.SYS device driver to the disk or 
  226. directory you use to start your computer.
  227.  
  228. Device Driver Names
  229.  
  230. Every device driver used by your system must have a unique name.  Due to 
  231. the way MS-DOS opens files, if there is a device driver with the same name 
  232. as a file in your current directory, MS-DOS will attempt to open the current 
  233. device driver, not the file.  For this reason, device driver names should not be 
  234. used as file names.
  235.  
  236. The SETUP program assigns unique names to the device drivers it uses.  For 
  237. example, it uses a name such as MSCD005 as a device driver name.
  238.  
  239.  
  240. Command Line Switches
  241.  
  242. The SETUP program uses the following command line switches for line:
  243.  
  244. Switch                         Use_________________________________         
  245. Example____
  246.                                                              
  247. /D:(device name)    Precedes the device driver name.  When com-       
  248. /D:MSCD001
  249.             bined with the device driver name, this switch
  250.     tells MSCDEX.EXE where to find the device
  251.     driver.
  252.  
  253. /E    Tells MSCDEX.EXE to use expanded memory
  254.      if your system is using expanded memory.
  255. Switch                          Use                                                                   
  256.     Example
  257.  
  258. /L:(drive letter)    Determines what drive letter MSCDEX.EXE         /L:M
  259.     uses as the first letter when assigning CD-
  260.     ROM drive letters.  Instead of starting at the
  261.     first free drive letter, MSCDEX.EXE starts at
  262.      the drive letter specified by this switch.
  263.  
  264. /K    Tells MSCDEX.EXE to use any Kanji
  265.     (Japanese) file structures, if present, rather than
  266.     the default of standard alphanumeric file
  267.     structures.
  268.  
  269. /S    Instructs MSCDEX.EXE to patch DOS to allow 
  270.     sharing of CD-ROM drives on MS-NET based 
  271.     network servers.
  272.  
  273. /M:(value)    Tells MSCDEX.EXE how much memory to           /M:10
  274.     allocate for caching information on the CD-
  275.     ROM.  The higher this value is, the better your
  276.     performance will be, though you will have less
  277.     room on the CD-ROM for other applications. 
  278.     The SETUP program uses a default value of 4
  279.     to reserve 8 kilobytes for sector caching for a 
  280.     single drive.
  281.  
  282. /V    Provides memory usage statistics, such as how 
  283.     much memory is used by buffers, resident data,
  284.     resident code.
  285.  
  286.  
  287.  
  288. The syntax for the "DEVICE=" line is follows:
  289.  
  290.      DEVICE=(drive.sys)/D:(device_name)(driver-specific switches)
  291.  
  292. A sample entry in AUTOEXEC.BAT to install MSCDEX.EXE would be:
  293.  
  294.      C:MSCDEX.EXE/D:MSCD000/D:MSCD001/M:60
  295. ________________________________________________
  296. QUESTIONS AND ANSWERS
  297.  
  298. Here are answers to some questions that may arise as you use the SETUP 
  299. program to install your CD-ROM drive, or as you use your CD-ROM drive 
  300. with MS-DOS:
  301.  
  302. [1] Is there anything special I need to do to install my CD-ROM drive 
  303. for use with a network?
  304.  
  305. You should check your AUTOEXEC.BAT file to be sure that, upon 
  306. system startup, the network is installed before your CD-ROM drive 
  307. is installed.  Within your AUTOEXEC.BAT file, the line that 
  308. applies to the network must precede the line that applies to the CD-
  309. ROM drive.
  310.  
  311. [2] Can I use my CD-ROM drive with any application or file that I 
  312. normally use with MS-DOS?
  313.  
  314. Applications that depend on MS-DOS standard interfaces are 
  315. compatible.  These applications can read files on your CD-ROM disc 
  316. just as they would on any floppy disk.  However, they cannot write 
  317. information to the CD-ROM drive.
  318.  
  319. [3] Does my computer always know that I am using a CD-ROM drive, 
  320. or do I need to run a special program each time I start my computer?
  321.  
  322. You do not need to run a special program each time you start your 
  323. computer.  When you install your CD-ROM drive and run the 
  324. SETUP program, your AUTOEXEC.BAT file is updated to reflect 
  325. the presence of the CD-ROM drive.  Your computer uses the 
  326. information in the AUTOEXEC.BAT file every time you turn on 
  327. your system or restart it.
  328.  
  329. [4] Are there any differences between the way I use my CD-ROM drive 
  330. and  the way I use any other disk drive with my computer?
  331.  
  332. The only difference to you as a user is that your CD-ROM drive is 
  333. read-only, which means you cannot write information to the CD-
  334. ROM disc.  The CD-ROM disc acts like a write-protected floppy 
  335. disk.
  336.  
  337. [5] If I start a "shell" program like Windows or DOS SHELL, where 
  338. should the MSCDEX entry go in AUTOEXEC.BAT?
  339.  
  340. The entry should be before the entries that run other BAT files or start shell 
  341. programs, so that MSCDEX has a chance to create the CD-ROM drives before 
  342. the BAT files or "shell" programs are run.
  343.  
  344.  
  345. Microsoft MS-DOS CD-ROM Extensions
  346. CD-ROMifying Your Software
  347. 29 March 1989
  348.  
  349.  
  350. CD-ROM is the first of what will probably be several alien file structures that 
  351. will start appearing in the MS-DOS world primarily with the introduction of 
  352. installable file systems under newer versions of DOS. The following will 
  353. attempt to outline some guidelines for writing software that will help in 
  354. porting your software to these new file systems and for CD-ROM specifically.
  355.  
  356. - Choice of filename characters
  357.  
  358. On the first Microsoft Test CD-ROM disc, the Codeview demo failed 
  359. because certain filename characters that were legal on MS-DOS were not 
  360. allowed according to the High Sierra file format. When the software 
  361. looked for file 'S1.@@@', it wasn't found because the character '@' is illegal 
  362. for High Sierra filenames and during High Sierra premastering, the file 
  363. was renamed 'S1'.
  364.  
  365. Valid High Sierra filename characters are the letters 'A' through 'Z', 
  366. the digits '0' through '9', and the underscore character '_'. All other 
  367. characters are invalid. Note that the letters 'a' through 'z' are not 
  368. included so that High Sierra file names are not case sensitive. Under 
  369. DOS, filenames are mapped to upper case before they are looked up so 
  370. this is typically not a problem. When choosing file name characters, keep 
  371. in mind the restrictions of the file structure format and the operating 
  372. systems your media may be targeted towards.
  373.  
  374. - Depth of path
  375.  
  376. The High Sierra format allows for pathnames to be up to 8 levels 
  377. deep. It's possible to create a path on MS-DOS that is deeper than that 
  378. but you won't be able to transfer it to a CD-ROM.
  379.  
  380. \one\two\three\four\five\six\seven\eight\file.txt    /* Ok    
  381.     */
  382. \one\two\three\four\five\six\seven\eight\nine\file.txt    /* 
  383. Illegal    */
  384.  
  385. - Length of path
  386.  
  387. The High Sierra format allows for the entire pathname to be a 
  388. maximum of 255 characters. Since MS-DOS imposes a limit far lower 
  389. than this, this should not present a problem. The MS-DOS call to connect 
  390. to a sub-directory is limited to a directory string of 64 characters. The 
  391. length of path restriction is more a concern for Xenix/Unix than MS-DOS.
  392.  
  393. Amusingly enough, for MS-DOS versions 2.X and 3.X, the MS-DOS 
  394. call to create a sub-directory allows a directory string greater than 64 
  395. characters which allows you to create sub-directories that you cannot 
  396. connect to.
  397.  
  398. Unfortunately, a CD-ROM may potentially contain a pathname 
  399. that is much larger than 64 characters long. This is not a concern here 
  400. but is discussed in a related memo - "MS-DOSifying your CD-ROM". As a 
  401. rule, try to keep the length of your longest path less than 64 characters 
  402. and you should be pretty safe.
  403.  
  404. - Read-only
  405.  
  406. Even though most people understand that CD-ROM discs are read-
  407. only, there's still a lot of software written by these same people that 
  408. assumes the current disk is always writable. For example, the Microsoft 
  409. Multiplan Demo assumes that it can create and write temporary files to 
  410. the presently connected drive.
  411.  
  412. In order to avoid this problem, try to provide another means of 
  413. letting the user specify where temporary files can be created. Many 
  414. applications check the environment for the variables TMP or TEMP 
  415. which contain the pathname to use when creating temp files. Most people 
  416. understand this convention now (or should anyway) and an added benefit 
  417. will be the speed improvement that will be recognized if the temp 
  418. directory is located on a ram-drive. If the environment variable is not set, 
  419. then the application can fall back on the assumption that the media is 
  420. writable or ask where temporary files should be kept.
  421.  
  422. As a rule, for both temporary and permanent files, if a file creation 
  423. error occurs, allow the user to re-specify the pathname used so that he 
  424. can work around the error. The last thing that should happen is for work 
  425. to be lost because the user was not allowed to store his output in a valid 
  426. place.
  427.  
  428. - Non-DOS formatted disks
  429.  
  430. Don't depend on the format of data on the disk. CD-ROM's do not 
  431. have a FAT so don't even bother looking for one. Do not talk to any media 
  432. at a physical level (reading/writing sectors) unless you expect to be media 
  433. dependent (such as CHKDSK or FORMAT). MS-DOS INT 21h calls 
  434. should provide everything you need to get at the file contents and 
  435. attributes.
  436.  
  437. - Small directories
  438.  
  439. For performance reasons, try to keep directory sizes smaller than 
  440. about 40 or so. Much beyond this and directory files grow beyond one 
  441. 2048 byte sector. Typically this is not a problem, but if the number of 
  442. sector buffers chosen when MSCDEX is started is small and the directory 
  443. files are large, whatever software scanning the directory could potentially 
  444. thrash badly if every time the directory is searched for the next entry it 
  445. has to bring earlier directory sectors back into memory from the CD-ROM 
  446. drive.
  447.  
  448. For certain pathological programs, such as certain implementations 
  449. of the Xenix utility find, the penalty is about 1 second per directory sector 
  450. that you have to scan to get to the next entry. If the directory is large, say 
  451. 8 sectors, the time for FIND to scan that one directory could potentially 
  452. take a half hour for something that would take less than a second if all 
  453. the entries fit in the cache.
  454.  
  455. The solution for this problem is to make sure that MSCDEX never 
  456. throws out of the cache what it will need next. This is accomplished by 
  457. growing the cache (very easy - simply change the parameter to MSCDEX) 
  458. and to make sure that the largest object that goes through the cache will 
  459. not clear it out. There is a balance between having too many directories 
  460. and too many files in a few directories, but the balance is heavily 
  461. weighted towards many small to medium sized directories. Keep this in 
  462. mind when laying out your files.
  463.  
  464. Since the penalty for using a file in the lowest sub-directory instead 
  465. of the root-directory is virtually nil and as more directories don't cost 
  466. much, it's a good idea to break up large directories into several smaller 
  467. ones. This will help avoid problems of flushing the disc sector cache. Try 
  468. to keep related files close together both in location on the CD-ROM and 
  469. in the same directories. Close proximity will reduce seek time when 
  470. accessing related files at the same time and having them in the same 
  471. directory will help prevent swapping out directory sectors.
  472.  
  473. - Updating CD-ROM databases and software
  474.  
  475. Many people are interested in providing updates to files that are 
  476. contained on a CD-ROM disc. They would like to create a directory on 
  477. their hard disk will all updated files in them and have the CD-ROM 
  478. Extensions look there first before searching the CD-ROM. Unfortunately, 
  479. by the time the Extensions get the request, it is very difficult for it to look 
  480. for updates on the hard disk so whatever alternative searching that is 
  481. necessary will have to be done in the application software.
  482.  
  483. For this reason, it's a good idea to have your path set so that it looks 
  484. through directories on the hard disk first. Another good strategy is to 
  485. copy executables to a directory on your hard disk so that they can be 
  486. updated and will also start up faster. Also, have the application software 
  487. itself search alternative hard disk directories for updates before it 
  488. searches the CD-ROM. This way both software updates and updated or 
  489. commonly used database files can be stored on a hard disk which will 
  490. both speed performance and allow incremental updating.
  491.  
  492. - Search Strategies
  493.  
  494. Try to avoid relying on the operating system to be part of your 
  495. search strategy. If your database is broken up into a hierarchy and your 
  496. order is imposed through the file structure by breaking up the database 
  497. into many files in a tree, then accessing data in the database is typically 
  498. going to require a lot of directory reading and searching.
  499.  
  500. Usually the time involved in doing this on a hard disk is not large, 
  501. but on a CD-ROM the search times can add up. Opening a file can be an 
  502. expensive operation simply because the directory must be read before the 
  503. file can be opened. At best, seeking to a location on the CD-ROM can take 
  504. 10 msec or so; at worst, a seek can run to over a second on some older CD-
  505. ROM drives. Some newer drives have worst case seek of about half a 
  506. second. Whenever this can be avoided you will save time. MSCDEX 
  507. caches as many directory sectors as it can so that searching the most 
  508. active directories is very quick, but any operations that search multiple 
  509. directories once through continually clears out the cache and renders it 
  510. ineffective.
  511.  
  512. The strategy used by Microsoft Bookshelf was to lump the entire 
  513. database into a single file and structure the indexing so that searching 
  514. used a minimum of seeks. Bookshelf uses packed b-trees with each node 
  515. holding as many entries as will fit into a single sector and also cache in 
  516. memory as much of the root of the tree as it can.
  517.  
  518. Combining databases avoids the extra overhead of repeatedly 
  519. opening and closing database files. Caching as much of the indexes in 
  520. memory as possible  allows searching of keywords to be completed 
  521. typically with a single seek.
  522.  
  523. In general, identify your software bottlenecks and through judicious 
  524. use of faster storage media (either memory or hard disk) you can both 
  525. have large storage and respectable performance.
  526.  
  527.  
  528. - Portability
  529.  
  530. One of the advantages of the High Sierra format is data interchangeability 
  531. with other operating systems. One must take care to chose a subset of the 
  532. range of High Sierra features that are presently supported across different 
  533. operating systems to be sure you can read the disc in each of them. The 
  534. lowest common denominator then (this list is not complete - see also what 
  535. must be done to target MS-DOS) would need a logical block size of 512 bytes, 
  536. both type L and M path tables and for all fields, single volume sets, at least 
  537. one Primary Volume Descriptor and terminator. Be aware that if one of your 
  538. goals is data portability, you will have to do some additional research to see 
  539. what restrictions on the High Sierra format other operating systems may 
  540. impose.
  541.  
  542.  
  543. Microsoft MS-DOS CD-ROM Extensions
  544. MS-DOSifying your CD-ROM
  545. 23 March, 1990
  546.  
  547. Most of the following caveats apply to the present version of the 
  548. Microsoft CD-ROM Extensions. Future versions of the extensions are 
  549. expected to support many of the features listed below that are at present 
  550. best avoided. The behavior of the extensions with fields and records that 
  551. are presently ignored may change at any time.
  552.  
  553. - Correctness
  554.  
  555. Make sure that your disc is in valid High Sierra format. Nothing is 
  556. guaranteed if your disc is not in valid format. Surprisingly enough, we 
  557. have received several discs that have one or more illegally formatted data 
  558. areas ranging from directories being sorted incorrectly, incorrect path 
  559. table sizes, incorrect directory file sizes,  directories missing from the 
  560. path table, invalid directory names, etc. In almost every case, the 
  561. Extensions will behave incorrectly and at worst, the system will crash.
  562. In addition to running validation software to verify the High Sierra 
  563. image, one should also verify that the Extensions work with your cdrom 
  564. disc and application software before distributing it. Unfortunately, it may 
  565. not matter if your disc is correct and the Extensions are wrong if they 
  566. don't work together. Please report any and all problems you think are in 
  567. the Extensions to Microsoft so that they can be fixed. 
  568.  
  569. - Pathtable and Directory sizes
  570.  
  571. This bears repeating because many people have gotten it wrong. 
  572. Directory file sizes are always a multiple of the logical sector size - 2 
  573. kilobytes. Path table sizes are always the exact number of bytes that are 
  574. contained in the path table which is typically not a multiple of 2k. You 
  575. must not have blank directory sectors and the directory length must 
  576. reflect the correct length of the directory file. The directory sectors always 
  577. begin on a logical sector boundary.
  578.  
  579. - 8.3 File names
  580.  
  581. MS-DOS cannot handle longer than 8.3 filenames. If the CD-ROM 
  582. filename is longer than 8.3, then the filename will be truncated. If this 
  583. happens, two files that are not unique within 8.3 characters will map to 
  584. the same filename. For example:
  585.  
  586. filename1.txt    will appear as filename.txt
  587. filename2.txt    will also appear as filename.txt
  588.  
  589. Kanji filenames are also limited to 8.3 or 4.1 kanji characters. Only 
  590. shift-kanji filenames are recognized at present. To get kanji, you must 
  591. specify a supplementary volume descriptor indicating you have kanji 
  592. filenames. Contact Microsoft to find out how this is done.
  593.  
  594. - Record Formats
  595.  
  596. The extensions do not support any record formats so if the RECORD 
  597. bit is set in the file flags byte in the directory entry for a file, it will be 
  598. ignored.
  599.  
  600. - Interleaving
  601.  
  602. In the present version, the Extensions do not support interleaving 
  603. so if the Interleave size and Interleave factor are non-zero, the file will 
  604. ignore these fields and return erroneous data.
  605.  
  606. - Multi-Extent Files
  607.  
  608. Multi-extent files are not supported in the present version. Each 
  609. extent of a multi-extent file will appear as a separate file with the same 
  610. name.
  611.  
  612. - Multi-volume
  613.  
  614. Multi-volume disc sets are not supported in the present version. 
  615. Directories that are located on another volume could potentially cause 
  616. the Extensions to crash if searched and erroneous data will be returned 
  617. for files that are located on another volume.
  618.  
  619. - Coded Character Sets
  620.  
  621. Only one coded character set or supplementary volume descriptor is 
  622. recognized in the latest version. This is for shift-Kanji.
  623.  
  624. - Version numbers
  625.  
  626. Version numbers are not supported by the Extensions. The 
  627. Extensions will strip the version string off the end of the filename so that 
  628. two identical filenames with different versions will appear to have the 
  629. same name. There is no way to specifically ask for any but the first 
  630. instance of that filename. Two files with the same name and different 
  631. version numbers have the same accessing problem as two files with 
  632. longer than 8.3 filenames that have been truncated to the same filename.
  633.  
  634. - Protection
  635.  
  636. Protection bits are not used on MS-DOS. If the protection bit is set 
  637. in the file flags byte in the directory entry for a file , it is ignored and 
  638. normal access is allowed.
  639.  
  640. - No XAR support
  641.  
  642. At present, the Extensions ignore the contents of any XAR record.
  643.  
  644. - Motorola format tables
  645.  
  646. The additional copies of the path table and any values in "Motorola" 
  647. format (most significant bytes using the lowest address values) are 
  648. ignored at present. MSCDEX only pays attention to "Intel" formatted 
  649. values. They should be included though for portability sake.
  650.  
  651. - Multiple copies of the path table
  652.  
  653. The Extensions presently only read and use the first copy of the 
  654. path table. Later versions may check to see that copies of the path table 
  655. agree.
  656.  
  657. - Additional Volume Descriptor Records
  658.  
  659. Boot records and Unspecified volume descriptors are ignored. The 
  660. first standard volume descriptor found is the one that is used. Additional 
  661. copies are ignored at present.
  662.  
  663. - File flags
  664.  
  665. The existence bit is treated the same as the hidden bit on MS-DOS. 
  666. Some other operating systems may not handle the existence bit so you 
  667. may not want to use it if you are targeting these systems. The directory 
  668. bit for High Sierra is treated the same as the directory bit in MS-DOS. 
  669. Files with the protection bit set are not found when searched for or 
  670. opened.
  671. None of the remaining bits, (Associated/Record/Multi-
  672. extent/Reserved), are handled at present. Using files with these bits set 
  673. will have undefined behavior.
  674.  
  675. - Unique Volume Identifiers
  676.  
  677. It is highly recommended that the volume identifier be unique. The 
  678. Extensions use the volume identifier to do volume tracking and to 
  679. double-check to see if the disc has changed. The more chance that users 
  680. will have two discs with the same volume identifier, the more chance that 
  681. this will confuse the Extensions and lead it to believe that the disc has 
  682. not changed when in fact it has.
  683. It is also highly recommended that application programs use the 
  684. volume label to tell if the cdrom disc has changed. The volume label for a 
  685. CDROM on MS-DOS is obtained from the volume identifier field in the 
  686. primary volume descriptor. The call to get the volume label is very 
  687. inexpensive to make once the CDROM has been initialized and will cause 
  688. no disc I/O to be done unless the media has changed. This is the best way 
  689. for an application to tell if the disc it wants to work with is in the drive. 
  690. The application software should not communicate with the driver or drive 
  691. to determine if the media has changed or the Extensions may not learn 
  692. that the disc has changed and will not reinitialize what it knows about 
  693. the new disc.
  694.  
  695. - Many Small Directories or A Few Large Directories
  696.  
  697.    As a rule, it is better to have many small directories that contain 
  698. fewer files than one very large directory. The answer depends on your 
  699. application's behavior because if you try very hard, you can thrash 
  700. almost as badly with many small subdirectories as you can with one large 
  701. subdirectory. Reading further will help explain.
  702.  
  703.    What makes the difference? For each file open, suppose you have 
  704. 1000 subdirectories with 40 files, on average you'll read about one sector 
  705. per file open and scan 1/2 of it. On the other hand, you could have 1 
  706. directory with 4000 files. On average, each file open in this large 
  707. directory (about 100 sectors) will involve scanning about 50 sectors to 
  708. open that one file. As long as it is very inexpensive to get to each 
  709. directory through the pathtable, clearly it is much better to have many 
  710. small directories.
  711.  
  712.    Further improvements can be made by grouping files that are 
  713. related and will be opened together in each of these subdirectories so that 
  714. as you open each successive file, the directory sector is very likely in the 
  715. disc cache and this will help minimize hitting the CD-ROM disc.   Putting 
  716. each file in a separate subdirectory is extreme and will cost you because 
  717. you will never gain the benefits of locating the next file in a directory 
  718. sector that has already been cached and you will needlessly enlarge the 
  719. pathtable.
  720.  
  721.    There is a limit though to how many subdirectories you may want 
  722. because if there are too many you may end up thrashing on the pathtable 
  723. sectors. Each pathtable sector holds pointers to approximately 100 to 200 
  724. directory files depending on the directory name lengths. If you have a 
  725. pathtable that is 10 sectors long, you will want at least 10 sectors of 
  726. memory buffers to hold the pathtable or you may risk re-reading sections 
  727. of the pathtable on every file open which will be very costly.
  728.  
  729.    The most important point you can learn is that you can vastly 
  730. improve your file open speed by making sure you have enough memory 
  731. buffers. If you are repeatedly trying to scan a 10 sector directory file 
  732. (approximately 400 entries) and you only have 4 sectors in the sector 
  733. cache, the cache is going to work against you because you will end up 
  734. churning it to death. If you allocate 14 sectors for example (/M:14), then 
  735. the whole directory file will find its way into the cache and you will stop 
  736. hitting the disc. The difference in speed may be several orders of 
  737. magnitude. A safe bet is to recommend reserving as many sectors are in 
  738. the pathtable plus the number of sectors for the largest directory plus 2. 
  739. The last two are reserved for data sectors and internal dynamic data. 
  740. This formula is complicated with multiple drives because the buffers are 
  741. not tied to specific drives and are shared and because not all drives are 
  742. active at the same time.
  743.  
  744.    Another rule, do not rely on the file system to do your searching for 
  745. you. If you are performance conscious, finding a chunk of data by looking 
  746. for it with a file name through the file system is expensive. 99% of the 
  747. time, locating data through the file system is fine because the cost is a 
  748. single one-time operation, but if this is repeated often enough, it may pay 
  749. to do some of the work yourself. What can be better is lump everything 
  750. into one big file and cache your own hierarchy, indexing, binary trees, or 
  751. whatever searching scheme you choose to use to get you to the data you 
  752. need rather than asking for the file system to tell you where it is.
  753.  
  754.  
  755. Microsoft MS-DOS CD-ROM Extensions
  756. Kanji Support
  757. 17 March 1989
  758.  
  759. The Kanji support in MSCDEX presently recognizes High Sierra CD-
  760. ROM discs with a coded character set that has bit 0 set to 1 in the volume 
  761. flags indicating at least one escape sequence is not registered according to 
  762. ISO 2375, and has an escape sequence of three bytes in the coded character 
  763. set for descriptor identifiers field of "$+:". This indicates that the character 
  764. set is a private multi-byte G3 coded character set and identifies the disc as 
  765. having shift-Kanji.
  766.  
  767. In order to make MSCDEX scan for the SVD (Supplementary Volume 
  768. Descriptor) instead of the PVD (Primary Volume Descriptor), there is a new 
  769. command line argument /K. If this is present, MSCDEX will use the shift-
  770. Kanji SVD if it is present, otherwise it will use the PVD. All discs are 
  771. required by ISO-9660 to have a PVD even if there is an SVD. 
  772.  
  773.  
  774. In addition, there is an accompanying program SVD that can be used to 
  775. change the default preference each CD-ROM drive has for scanning for a 
  776. SVD or PVD. The syntax is:
  777.  
  778. SVD [<drive letter>: <std | svd>]
  779.  
  780. Running SVD with no arguments will report the current settings. Including a 
  781. drive letter and either STD or SVD will change the preference for that drive 
  782. from one to the other.
  783.  
  784.  
  785. Microsoft MS-DOS CD-ROM Extensions
  786. Networking CD-ROMS
  787. 29 March 1989
  788.  
  789.  
  790. Although it is possible to share CD-ROM drives on a local area network 
  791. or LAN, it is not as easy as it should be. While MS-DOS provides a single, 
  792. stable platform to develop a file system driver like the Microsoft CD-ROM 
  793. Extensions, there are a wide variety of LANs and LAN server 
  794. implementations that do not provide a stable platform for which a file system 
  795. driver like MSCDEX could be provided. Because each LAN implementation 
  796. takes a different approach for server support, the approach for CD-ROM 
  797. support on a server depends on what LAN implementation is being used.
  798.  
  799. This document should help clarify the present situation and help get you 
  800. started.
  801.  
  802. At present, there are several CD-ROM products that allow sharing of CD-
  803. ROM drives on a LAN. These are:
  804.  
  805.     Microsoft    MSCDEX - The Microsoft CD-ROM Extensions
  806.     Meridian Data    CD-NET
  807.     Online        Opti-Net
  808.  
  809. Choosing which product depends on your LAN and your needs. 
  810.  
  811. There are some LANs, such as Lantastic by Artisoft, that can share CD-
  812. ROM drives using any version of MSCDEX on a Lantastic server. This is 
  813. possible because their servers run as an MS-DOS application and do I/O with 
  814. standard MS-DOS INT 21 services. LAN servers like this, that do not make 
  815. assumptions about the underlying media or try to bypass MS-DOS and do 
  816. use standard MS-DOS INT 21 services to access the drive letter, will likely 
  817. work with all versions of MSCDEX.
  818.  
  819. There are several LAN products based on MS-NET or a similar LAN 
  820. server model such as Ungermann-Bass or 3COM. Unfortunately, these 
  821. products do not access files on the server using standard INT 21 calls and for 
  822. several reasons due to assumptions inside MS-DOS about non-standard calls 
  823. from the server, you cannot share CD-ROM drives on MS-NET based servers. 
  824. Although the server seems to allow sharing of the CD-ROM drive letter, 
  825. requests to the server from workstations do not work correctly.
  826.  
  827. Fortunately, MSCDEX Version 2.10 has a command line switch (/S) that 
  828. instructs MSCDEX to patch the in-memory image of MS-DOS during its 
  829. initialization to fix these problems. By including this parameter on the 
  830. MSCDEX command line, MSCDEX can be loaded before the network server 
  831. software is started, and the CD-ROM drive letters can then be shared by MS-
  832. NET based server software, and workstations will see the correct behavior. 
  833. This solution requires only that the server use MSCDEX Version 2.10 and no 
  834. software or hardware changes to the workstation. Only the server runs 
  835. MSCDEX or loads any CD-ROM related device drivers. To the workstation, 
  836. the CD-ROM server drives are indistinguishable from other server drives.
  837.  
  838. For LAN products that are not MS-NET based yet have NETBIOS 
  839. support such as Novell or IBM PC-NET, both Online and Meridian Data 
  840. have adapted the MSCDEX and CD-ROM Device Driver model to provide 
  841. LAN CD-ROM support. Each workstation runs MSCDEX and a special CD-
  842. ROM device driver that accepts normal CD-ROM driver requests from 
  843. MSCDEX and uses the NETBIOS to transmit the command to a network 
  844. driver on a server. The network driver submits the request to a true CD-
  845. ROM device driver on the server and transmits the results back to the 
  846. workstation pseudo CD-ROM driver. The psuedo driver in turn responds to 
  847. MSCDEX. So long as the workstation CD-ROM device driver responds 
  848. appropriately, MSCDEX is unaware that the command has passed through 
  849. the network to a server. Contact Meridian Data and Online for information 
  850. for these networks as they can both describe their products and features best.
  851.  
  852. Online offers one potential configuration for computer systems that do 
  853. not wish to dedicate a machine to be a server. The workstation operates as 
  854. above, but instead of communicating the workstations driver request to a 
  855. dedicated server process, another user's workstation running a special TSR 
  856. version of their system can field the driver request, submit it to the CD-ROM 
  857. driver, and respond to the requesting workstation. This allows a network of 
  858. workstations to share the CD-ROM drives that each computer has connected 
  859. to it at the same time all workstations are available to the users. This option 
  860. may work for many users although it does slow performance of the 
  861. workstation when outside requests come in and uses up memory for the TSR 
  862. system code.
  863.  
  864. At present, there is no available version of the CD-ROM Extensions for 
  865. OS/2 although there is a way to access CD-ROM data in OS/2 on a network. 
  866. Since from the outside, workstations cannot tell MS-DOS server drives that 
  867. are shared CD-ROM drives using version 2.10 of MSCDEX from traditional 
  868. block drives, even OS/2 machines can access the CD-ROM drive on the 
  869. server. Although this does mean including an MS-DOS server on an OS/2 
  870. LAN, it does provide at least an interim way to access CD-ROM data under 
  871. OS/2 at this time.
  872.  
  873. For more information on CD-ROM LAN products for LANs other than 
  874. MS-NET, contact:
  875.  
  876. Online Computer Systems
  877. Mr. Mike Romanies
  878. 20251 Century Blvd
  879. Germantown, MD 20874
  880. 301.428.3700
  881.  
  882. Meridian Data Inc.
  883. Mr. Greg Smith
  884. 4450 Capitola Road Suite 101
  885. Capitola CA 95010
  886. 408.476.5858
  887. 408.476.8908 (Fax)
  888.  
  889.  
  890. Microsoft MS-DOS CD-ROM Extensions
  891. Function Requests Specification
  892. 29 March 1989
  893.  
  894. There is a need for access to features from the MSCDEX redirector that 
  895. transend DOS capabilities. This proposal documents a means the application 
  896. can use to talk directly to MSCDEX to request information or set parameters 
  897. that only MSCDEX can provide. This document outlines the services 
  898. MSCDEX provides at present. Comments and suggestions are welcome.
  899.  
  900. Access to these functions is provided through an INT 2Fh interface. AH 
  901. contains 15h which is what MSCDEX will use to tell its requests from those 
  902. of other INT 2Fh handlers. AL will contain the code of the function to be 
  903. performed.
  904.  
  905. Function Request Command Codes:
  906.  
  907.     Contents of AL        Function
  908.  
  909.     00h            Get Number of CD-ROM drive letters
  910.     01h            Get CD-ROM drive device list
  911.     02h            Get copyright file name
  912.     03h            Get abstract file name
  913.     04h            Get bibliographic doc file name
  914.     05h            Read VTOC
  915.     06h            Turn debugging on
  916.     07h            Turn debugging off
  917.     08h            Absolute Disk Read
  918.     09h            Absolute Disk Write
  919.     0Ah            Reserved
  920.     0Bh*            CD-ROM Drive Check
  921.     0Ch*            MSCDEX Version
  922.     0Dh*            Get CD-ROM drive letters
  923.     0Eh*            Get/Set Volume Descriptor Preference
  924.     0Fh*            Get Directory Entry
  925.     10h**            Send Device Request
  926.     11h-0FFh        Reserved
  927.  
  928. * - New functions added in version 2.00
  929. ** - New functions added in version 2.10
  930.  
  931. - Get Number of CD-ROM drive letters
  932. ________________
  933.  
  934.     AX    1500h
  935.     BX    Number of CD-ROM drive letters used
  936.     CX    Starting drive letter of CD-ROM drive letters (A=0, B=1, ... 
  937. Z=25)
  938. ________________
  939.  
  940. MSCDEX will return the number of CD-ROM drive letters in BX and 
  941. the starting drive letter in CX. The first CD-ROM device will be 
  942. installed at the starting drive letter and subsequent drives will be 
  943. assigned the next greater drive letter. A single device driver may be 
  944. assigned to more than one drive letter, such as the case of a device 
  945. driver that supports multiple units. MSCDEX keeps track of which 
  946. sub-unit a particular drive letter is assigned to.
  947.  
  948. NOTE: This function can be used to determine if MSCDEX is installed 
  949. by setting BX to zero before executing INT 2Fh. MSCDEX is not 
  950. installed if BX is still zero on return.
  951. Also, in a networking environment, one cannot assume that drive 
  952. letters will always be assigned contiguously beginning with the 
  953. starting drive letter. Use function Get CD-ROM drive letters instead.
  954.  
  955. - Get CD-ROM drive device list
  956. ________________
  957.  
  958.     AX    1501h
  959.     ES:BX    Transfer address; pointer to buffer to copy drive letter 
  960. device list
  961. ________________
  962.  
  963. The buffer must be large enough to hold the device list. By calling 
  964. function Get Number of CD-ROM Drive Letters, one can find out the 
  965. number of CD-ROM drive letters and the buffer size will be a multiple 
  966. of that. This will be an absolute maximum of 26. Each drive letter 
  967. device entry will consist of one byte for the sub-unit followed by 4 bytes 
  968. for the address of the device header assigned to that drive letter. This 
  969. byte for the sub-unit takes care of the problem of distinguishing which 
  970. unit is assigned to which drive letter for device drivers that handle 
  971. sub-units.
  972.  
  973. For example: Suppose there are two installed CD-ROM device drivers, 
  974. FOO, which supports 1 sub-unit, and BAR, which supports two sub-
  975. units, on a system with 2 floppy drives (A=0 and B=1) and a hard disk 
  976. (C=2). Then asking for the number of CD-ROM drive letters will report 
  977. that there are 3 drive letters used starting at drive letter D=3. ES:BX 
  978. must point to a buffer that is at least 3*5 = 15 bytes long. The buffer 
  979. will be filled as follows:
  980.  
  981. ES:BX    = Buffer
  982.  
  983. Buffer    DB    0                ; sub-unit of FOO on drive letter 
  984. D:
  985.     DD    <far addr of FOO device header>
  986.     DB    0                ; sub-unit of BAR on drive letter 
  987. E:        DD    <far addr of BAR device header>
  988.     DB    1                ; sub-unit of BAR on drive letter 
  989. F:
  990.     DD    <far addr of BAR device header>
  991.  
  992.  
  993. - Get copyright file name
  994. ________________
  995.  
  996.     AX    1502h
  997.     ES:BX    Transfer address; pointer to a 38 byte buffer
  998.     CX    CD-ROM drive letter (A=0, B=1, ... Z=25)
  999. ________________
  1000.  
  1001. MSCDEX will copy the name of the copyright file in the VTOC for that 
  1002. drive letter into the buffer space provided. The copyright filename is 
  1003. presently restricted in the High Sierra proposal to 8.3 but we require 
  1004. 38 bytes here for the possibility at a later date of handling 31 
  1005. character file names plus 6 bytes for a ';' and 5 digit version number 
  1006. and 1 byte for a NULL at the end. Carry will be set if the drive letter is 
  1007. not a CD-ROM drive and error_invalid_drive (15) will be returned in 
  1008. AX.
  1009.  
  1010. - Get abstract file name
  1011. ________________
  1012.  
  1013.     AX    1503h
  1014.     ES:BX    Transfer address; pointer to a 38 byte buffer
  1015.     CX    CD-ROM drive letter (A=0, B=1, ... Z=25)
  1016. ________________
  1017.  
  1018. MSCDEX will copy the name of the abstract file in the VTOC for that 
  1019. drive letter into the buffer space provided. The abstract filename is 
  1020. presently restricted in the High Sierra proposal to 8.3 but we require 
  1021. 38 bytes here for the possibility at a later date of handling 31 
  1022. character file names plus 6 bytes for a ';' and 5 digit version number 
  1023. and 1 byte for a NULL at the end. Carry will be set if the drive letter is 
  1024. not a CD-ROM drive and error_invalid_drive (15) will be returned in 
  1025. AX.
  1026.  
  1027.  
  1028. - Get bibliographic documentation file name
  1029. ________________
  1030.  
  1031.     AX    1504h
  1032.     ES:BX    Transfer address; pointer to a 38 byte buffer
  1033.     CX    CD-ROM drive letter (A=0, B=1, ... Z=25)
  1034. ________________
  1035.  
  1036. NOTE: This function is provided in advance of the ISO standard. For 
  1037. discs complying with the May 28th draft from the High Sierra Group, 
  1038. this function will return a null string as though the field is blank on 
  1039. the disc.
  1040.  
  1041. MSCDEX will copy the name of the bibliographic documentation file in 
  1042. the VTOC for that drive letter into the buffer space provided. The 
  1043. bibliographic documentation filename is presently restricted in the 
  1044. High Sierra proposal to 8.3 but we require 38 bytes here for the 
  1045. possibility at a later date of handling 31 character file names plus 6 
  1046. bytes for a ';' and 5 digit version number and 1 byte for a NULL at the 
  1047. end. Carry will be set if the drive letter is not a CD-ROM drive and 
  1048. error_invalid_drive (15) will be returned in AX.
  1049.  
  1050.  
  1051. - Read VTOC
  1052. ________________
  1053.  
  1054.     AX    1505h
  1055.     ES:BX    Transfer address; pointer to a 2048 byte buffer
  1056.     CX    CD-ROM Drive letter
  1057.     DX    Sector index
  1058. ________________
  1059.  
  1060. This function is provided to scan the Volume Descriptors on a disc. A 
  1061. sector index of 0 will read the first volume descriptor, 1 reads the 
  1062. second, etc. If there is no error, then AX will return 1 if the volume 
  1063. descriptor read was the standard volume descriptor, 0FFh if it was the 
  1064. volume descriptor terminator and there are no more volume 
  1065. descriptors to be read, and 0 for all other types. 
  1066.  
  1067. If there is an error in processing the request, the Carry Flag will be set 
  1068. and AL will contain the MS-DOS error code. These will be either 
  1069. error_invalid_drive (15) or error_not_ready (21).
  1070.  
  1071. - Turn debugging on
  1072. ________________
  1073.  
  1074.     AX    1506h
  1075.     BX    Debugging function to enable
  1076. ________________
  1077.  
  1078. This is used for development and is reserved. It will be non-functional 
  1079. in the production version of MSCDEX.
  1080.  
  1081. - Turn debugging off
  1082. ________________
  1083.  
  1084.     AX    1507h
  1085.     BX    Debugging function to disable
  1086. ________________
  1087.  
  1088. This is used for development and is reserved. It will be non-functional 
  1089. in the production version of MSCDEX.
  1090.  
  1091. - Absolute Disk Read
  1092. ________________
  1093.  
  1094.     AX    1508h
  1095.     ES:BX    Disk Transfer Address; pointer to a buffer to copy data to
  1096.     CX    CD-ROM Drive letter (A=0, B=1, ... Z=25)
  1097.     DX    Number of sectors to read
  1098.     SI:DI    Starting sector
  1099. ________________
  1100.  
  1101. This function corresponds to INT 25h. It will be converted directly into 
  1102. a READ_LONG device driver request and sent to the correct device 
  1103. driver. There are no requirements for this call to pop flags as there are 
  1104. with INT 25h. SI holds the high word and DI the low word for the 
  1105. starting sector to begin reading from.
  1106.  
  1107. If there is an error in processing the request, the Carry Flag will be set 
  1108. and AL will contain the MS-DOS error code. These will be either 
  1109. error_invalid_drive (15) or error_not_ready (21).
  1110.  
  1111. - Absolute Disk Write
  1112. ________________
  1113.  
  1114.     AX    1509h
  1115.     ES:BX    Disk Transfer Address; pointer to buffer to copy data from
  1116.     CX    CD-ROM Drive letter
  1117.     DX    Number of sectors to write
  1118.     SI:DI    Starting sector
  1119. ________________
  1120.  
  1121. This function corresponds to INT 26h. It is not supported at this time 
  1122. and is reserved. It is intended to be used by authoring systems.
  1123.  
  1124. - CD-ROM Drive Check
  1125. ________________
  1126.  
  1127.     AX    150Bh
  1128.     BX    Signature word
  1129.     CX    CD-ROM Drive letter (A=0, B=1,...Z=25)
  1130. ________________
  1131.  
  1132. This function returns whether or not a drive letter is a CD-ROM drive 
  1133. supported by MSCDEX. If the extensions are installed, BX will be set 
  1134. to ADADh. If the drive letter is supported by MSCDEX, then AX is set 
  1135. to a non-zero value. AX is set to zero if the drive is not supported. One 
  1136. must be sure to check the signature word to know that MSCDEX is 
  1137. installed and that AX has not been modified by another INT 2Fh 
  1138. handler.
  1139.  
  1140. - MSCDEX Version
  1141. ________________
  1142.  
  1143.     AX    150Ch
  1144.     BX    MSCDEX Version
  1145. ________________
  1146.  
  1147. This function returns the version number of the CD-ROM Extensions 
  1148. installed on the system. BH contains the major version number and 
  1149. BL contains the minor version. Values returned are binary. For 
  1150. example, BX would contain 0x020a for version 2.10. This function does 
  1151. not work on versions earlier than 2.00 so if BX is zero before and after 
  1152. this function is called, an earlier version of MSCDEX is installed.
  1153.  
  1154. - Get CD-ROM Drive Letters
  1155. ________________
  1156.  
  1157.     AX    150Dh
  1158.     ES:BX    Transfer address; pointer to buffer to copy drive letter 
  1159. device list
  1160. ________________
  1161.  
  1162. The buffer must be large enough to hold a list of drive letters. The 
  1163. buffer size will be a multiple of the number of drives returned by the 
  1164. Get Number of CD-ROM drive letters function. There are a maximum 
  1165. of 26 drive letters. Each drive letter entry is a single byte (0=A:, 1=B: .. 
  1166. 25=Z:) that exactly corresponds each respective entry returned by the 
  1167. command Get CD-ROM drive device list. This command is included to 
  1168. allow applications to locate CD-ROM drives supported by MSCDEX. 
  1169. CD-ROM drive letters may sometimes be noncontiguous so this 
  1170. command is necessary.
  1171.  
  1172. For example: Suppose there is an installed CD-ROM device driver 
  1173. FOO supporting 3 sub-units on a system with 2 floppy drives (A=0 and 
  1174. B=1), a hard disk (C=2) and a network drive (E=4). Note the network 
  1175. drive occupies one of the drive letters normally taken by a CD-ROM 
  1176. drive. MSCDEX assigns that CD-ROM drive to the next available 
  1177. drive letter. Asking for the number of CD-ROM drive letters reports 
  1178. there are 3 drive letters used starting at drive letter D=3. ES:BX must 
  1179. point to a buffer that is at least 3 bytes long and will be filled as 
  1180. follows:
  1181.  
  1182. ES:BX    = Buffer
  1183.  
  1184. Buffer    DB    3                ; drive letter for CD-ROM (D=3)
  1185.     DB    5                ; drive letter for CD-ROM (F=5)
  1186.     DB    6                ; drive letter for CD-ROM (G=6)
  1187.  
  1188. - Get/Set Volume Descriptor Preference
  1189. ________________
  1190.  
  1191.     AX    150Eh
  1192.     BX    0 - Get Preference. 1 - Set Preference
  1193.     CX    CD-ROM Drive letter (A=0, B=1,...Z=25)
  1194.     DX    if BX = Get Preference
  1195.             DX = 0
  1196.             MSCDEX will return preference settings in DX
  1197.         if BX = Set Preference
  1198.             DH = volume descriptor preference
  1199.                 1 - PVD - Primary Volume  Descriptor
  1200.                 2 - SVD - Supplementary Volume Descriptor
  1201.             DL = Supplementary Volume Descriptor Preference
  1202.                 if DH = PVD
  1203.                     DL = 0
  1204.                 if DH = SVD
  1205.                     1 - shift-Kanji (an unregistered ISO coded 
  1206. character set)
  1207. ________________
  1208.  
  1209. Normally, MSCDEX will scan for the PVD (Primary Volume 
  1210. Descriptor) when initializing a CD-ROM. This behavior can be altered 
  1211. for each individual drive to scan for a SVD (Supplementary Volume 
  1212. Descriptor) instead. A CD-ROM drive set to scan for an SVD will use 
  1213. the PVD if there is no SVD present. There can be more than one SVD 
  1214. on a CD-ROM but at present, MSCDEX will only recognize SVDs for 
  1215. shift-Kanji CD-ROMs. Carry will be set, AX will be set to 
  1216. error_invalid_function (1) and DX will be set to 0 if the coded character 
  1217. set is not recognized.
  1218.  
  1219. If BX contains Get_Preference, MSCDEX will report the present 
  1220. setting for that drive. If DX is still zero on return, that version of 
  1221. MSCDEX does not support this function or reading SVDs. Otherwise 
  1222. DX will contain the setting.
  1223.  
  1224. If the drive letter is not a CD-ROM drive, carry will be set and 
  1225. error_invalid_drive (15) will be returned in AX. If BX is anything other 
  1226. than Get/Set_Preference, AX will be set to error_invalid_function (1) 
  1227. and carry will be set.
  1228.  
  1229. - Get Directory Entry
  1230. ________________
  1231.  
  1232.     AX    150Fh
  1233.     CL    CD-ROM Drive letter (A=0, B=1,...Z=25)
  1234.     CH    Copy flags (bit 0: 0 - direct copy, 1 - copied to structure)
  1235.     ES:BX    Pointer to buffer with null-terminated path name
  1236.     SI:DI    Pointer to buffer to copy directory record information
  1237.  
  1238.     AX    0 is returned if the disc is High Sierra, 1 is returned if the disc 
  1239. is ISO-9660
  1240. ________________
  1241.  
  1242. The pathname expected is a null-terminated string e.g. char far *path 
  1243. = "\\a\\b\\c.txt"; (note: the "\\" characters map to a single '\' 
  1244. character in C so this would be '\a\b\c.txt' if printed). The path must 
  1245. consist only of valid High Sierra or ISO-9660 filename characters and 
  1246. must not contain any wildcards nor may it include entries for '.' or '..'.
  1247.  
  1248. The copy flags indicate how the data should be copied. If bit 0 (0x01) is 
  1249. 0, then the directory entry is copied as it appears on the disc. The 
  1250. directory record is a direct copy from the directory file and it is up to 
  1251. the application to choose what fields to use. If bit 0 is 1, then the 
  1252. directory entry is copied into a structure that removes any differences 
  1253. between High Sierra and ISO-9660 directory entries and makes some 
  1254. fields more accessible or easily interpreted.
  1255.  
  1256. If copying the directory entry as it appears on the disc, the buffer to 
  1257. copy the directory record should be at least 255 bytes long to include 
  1258. all system use information and if copying into the common structure at 
  1259. least 280 bytes long otherwise MSCDEX may overrun the end of the 
  1260. buffer.
  1261.  
  1262. Carry will be set and an error code returned if there were problems 
  1263. with the request. The error codes will be error_invalid_drive (15) if the 
  1264. drive letter is incorrect, error_not_ready (21) if the disc didn't initialize 
  1265. correctly, error_file_not_found (2) if the file was not found and 
  1266. error_no_more_files (18) if the pattern fails to find a match or if 
  1267. mscdex failed to allocate buffers.
  1268.  
  1269. The format of the directory record for High Sierra discs is:
  1270.  
  1271.     /* High Sierra directory entry structure */
  1272. typedef struct hsg_dir_entry 
  1273. {
  1274.     uchar        len_dr;        /* length of this directory entry        
  1275.     */
  1276.     uchar        XAR_len;    /* XAR length in LBN's (logical blocks 
  1277. numbers)    */
  1278.     ulong        loc_extentI;    /* LBN of data Intel format            */
  1279.     ulong        loc_extentM;    /* LBN of data Molorola format        
  1280.     */
  1281.     ulong        data_lenI;    /* length of file Intel format            */
  1282.     ulong        data_lenM;    /* length of file Motorola format        
  1283.     */
  1284.     uchar        record_time[6];    /* date and time                
  1285.     */
  1286.     uchar        file_flags_hsg;    /* 8 flags                
  1287.     */
  1288.     uchar        reserved;    /* reserved field                
  1289.     */
  1290.     uchar        il_size;        /* interleave size            
  1291.     */
  1292.     uchar        il_skip;        /* interleave skip factor            
  1293.     */
  1294.     ushort        VSSNI;        /* volume set sequence number Intel    
  1295.     */
  1296.     ushort        VSSNM;    /* volume set sequence number Motorola
  1297.     */
  1298.     uchar        len_fi;        /* length of name                */
  1299.     uchar        file_id[...];    /* variable length name upto 32 chars    
  1300.     */
  1301.     uchar        padding;    /* optional padding if file_id is odd length    
  1302.     */
  1303.     uchar        sys_data[...]    /* variable length system data        
  1304.     */
  1305.     } hsg_dir_entry;
  1306.  
  1307. The format of the directory record for ISO-9660 discs is:
  1308.  
  1309.     /* ISO-9660 directory entry structure */
  1310. typedef struct iso_dir_entry
  1311.  {
  1312.     uchar        len_dr;        /* length of this directory entry        
  1313.     */
  1314.     uchar        XAR_len;    /* length of XAR in LBN's            */
  1315.     ulong        loc_extentI;    /* LBN of data Intel format            */
  1316.     ulong        loc_extentM;    /* LBN of data Molorola format        
  1317.     */
  1318.     ulong        data_lenI;    /* length of file Intel format            */
  1319.     ulong        data_lenM;    /* length of file Motorola format        
  1320.     */
  1321.     uchar        record_time[7];    /* date and time                
  1322.     */
  1323.     uchar        file_flags_iso;    /* 8 flags                
  1324.     */
  1325.     uchar        il_size;        /* interleave size            
  1326.     */
  1327.     uchar        il_skip;        /* interleave skip factor            
  1328.     */
  1329.     ushort        VSSNI;        /* volume set sequence num Intel    
  1330.     */
  1331.     ushort        VSSNM;    /* volume set sequence num Motorola    
  1332.     */
  1333.     uchar        len_fi;        /* length of name                */
  1334.     uchar        file_id[...];    /* variable length name upto 32 chars    
  1335.     */
  1336.     uchar        padding;    /* optional padding if file_id is odd length 
  1337.     */
  1338.     uchar        sys_data[...]    /* variable length system data        
  1339.     */
  1340.     } iso_dir_entry;
  1341.  
  1342. Note that the difference between the two forms is the file flag byte 
  1343. moved to account for an additional byte of date and time used for a 
  1344. Greenwich mean time offset. Also, the C structs above are not 
  1345. syntactically correct as C does not allow variable length arrays as 
  1346. struct elements. They are meant to illustrate the differences between 
  1347. the directory entries. See the May 28th draft of the High Sierra 
  1348. proposal or ISO-9660 for a more complete explanation of the fields.
  1349.  
  1350. If bit 0 is set to one in the Copy Flags, then the format of the directory 
  1351. entry structure that is returned is the following:
  1352.  
  1353. typedef struct dir_entry
  1354.  {
  1355.     uchar        XAR_len;    /* length of XAR in LBN's        */
  1356.     ulong        loc_extent;    /* logical block number of file start    */
  1357.     ushort        lb_size;        /* logical block size of  disc        */
  1358.     ulong        data_len;    /* length of file                */
  1359.     uchar        record_time[7];    /* date and time            
  1360.     */
  1361.     uchar        file_flags;    /* 8 flags                */
  1362.     uchar        il_size;        /* interleave size            */
  1363.     uchar        il_skip;        /* interleave skip factor        
  1364.     */
  1365.     ushort        VSSN;        /* volume set sequence number    
  1366.     */
  1367.     uchar        len_fi;        /* length of the filename            */
  1368.     uchar        file_id[38];    /* filename, null terminated        */
  1369.     ushort        file_version;    /* version number of file            */
  1370.     uchar        len_su;        /* length of valid system use bytes
  1371.     */
  1372.     uchar        su_data[220]    /* up to 220 bytes of system use data    */
  1373.     } dir_entry;
  1374.  
  1375. The location of the extent is reported in logical block numbers and the 
  1376. caller can use the logical block size on the disc (logical block sizes of 
  1377. 512, 1024, and 2048 bytes per sector are valid for CD-ROM) to 
  1378. determine the exact sector and offset in that sector that the file extent 
  1379. begins in. If the logical block size is 2048 then logical block numbers 
  1380. are equivilent to logical sector numbers.
  1381.  
  1382. The Greenwich mean time offset byte in this structure for May 28 
  1383. High Sierra discs is always 0. The file_id field contains the file 
  1384. identifier less the semicolon and version number if present and is null 
  1385. terminated. The version number is already parsed and is present in 
  1386. binary form in file_version. All bytes beyond what are indicated by 
  1387. len_fi and len_su in the file_id and su_data fields are undefined except 
  1388. the null byte immediately following the file identifier which is not 
  1389. counted as part of the filename length.
  1390.  
  1391. - Send Device Driver Request
  1392. ________________
  1393.  
  1394.     AX    1510h
  1395.     CX    CD-ROM drive letter (A=0, B=1, ... Z=25)
  1396.     ES:BX    Address of CD-ROM device driver request header
  1397. ________________
  1398.  
  1399. This function has been added to simplify communication with CD-ROM 
  1400. drivers and help prevent contention between applications that wish to 
  1401. communicate with the device driver. It is highly recommended that all 
  1402. applications communicate with device drivers through this function request. 
  1403. Applications using this function will not have to locate the device driver. The 
  1404. format of the request header is specified by the Microsoft MS-DOS CD-ROM 
  1405. Extensions Hardware-dependent Device Driver Specification. MSCDEX will 
  1406. supply the sub-unit field.
  1407.  
  1408.  
  1409. Microsoft MS-DOS CD-ROM Extensions
  1410. Questions and Answers
  1411. 23 March, 1990
  1412.  
  1413. Q: Does the /V option to MSCDEX actually cause a message to be displayed? I 
  1414. can't make it do anything. I use:
  1415.     MSCDEX /D:CDDRV /V /M:8
  1416.  
  1417. A: Yes, a series of statistics are displayed. MSCDEX uses INT 10 function 
  1418. 0eH to write to the console, so if for some reason you are trapping this or 
  1419. have software that captures this and doesn't display bios output to the screen 
  1420. the information will not appear. All screen output uses this function so if any 
  1421. output appears on the screen after loading MSCDEX, it is not clear why this 
  1422. additional information does not appear.
  1423.  
  1424. Newer versions (2.0 and above) use the DOS write handle call for output 
  1425. which will fix problems of I/O redirection of this output.
  1426.  
  1427. As it turned out, the machine that had this problem was not a strict IBM-
  1428. compatible machine and did not emulate a PC at the BIOS level. 
  1429. Consequently, the messages written with INT 10h were not displayed.
  1430.  
  1431. Q: Is it normal for MSCDEX to hang the system if an error is returned by a 
  1432. driver's IOCTL function? Wouldn't an error message be better?
  1433.  
  1434. The only ioctl calls sent to the driver in version 1.01 are to request the device 
  1435. header address and media check. Media check calls will never hang no 
  1436. matter what is returned so long as the driver returns. Illegal values may not 
  1437. do what you want but it won't hang. Request device header address may 
  1438. hang if the driver fails to set error conditions correctly as DOS expects them 
  1439. as DOS will return from the ioctl call without error. MSCDEX will then 
  1440. assume the bogus return values are correct and jump to a random location.
  1441.  
  1442. Q: Does MSCDEX do anything that should preclude its working in a non-
  1443. IBM-clone machine?
  1444.  
  1445. A: Except for the INT 10 problem mentioned earlier, no. If you can identify 
  1446. any problems whatsoever,  we would be happy to learn about it, but as yet we 
  1447. have heard of no other problems.  If your machine runs MS-DOS version 3.X 
  1448. or 4.X, it should be capable of running the Extensions correctly.  As for 
  1449. driver/drive-controller compatability problems, that may be another matter. 
  1450. We do not guarantee anything about these because we do not write the device 
  1451. drivers or design the hardware interface boards and cannot make any claims 
  1452. concerning them. It is up to the drive manufacturer or device driver writer to 
  1453. do this kind of compatability testing.
  1454.  
  1455. Q: Based on what I read in the spec, I decided to support only HSG type 
  1456. addressing which seems to be allowed by the IOCTLI function #6 (Device 
  1457. Status). I return 4 bytes of 00h if that function is called. I would have 
  1458. thought that would be one of the first calls MSCDEX would make (after 
  1459. "Find Header") but so far it hasn't called the status function. How will 
  1460. MSCDEX know enough not to use Red Book addressing if it doesn't check 
  1461. status first?
  1462.  
  1463. A: In version 1.01, ioctl function #6 is not called although it is called by 
  1464. MSCDEX starting with version 2.00. Since all device drivers must support 
  1465. some default functionality and as MSCDEX only uses the basic default now 
  1466. (only High Sierra addressing for example), it wasn't a problem that it didn't 
  1467. call this function to find out about non-default features that were supported.
  1468.  
  1469. Some software is being written that controls audio on a CD-ROM that 
  1470. expects Red Book Addressing and checks the device status to see that it is 
  1471. supported. The conversion algorithms are fairly simple and code fragments 
  1472. are provided.
  1473.  
  1474. Q: Can you provide more info on how the READ/WRITE device control string 
  1475. should work. Does the read device bytes command get information that was 
  1476. written by the write device control string?
  1477.  
  1478. A: At present, there are very few people that use this command. There are a 
  1479. couple other features that are either used only in special instances or not at 
  1480. all at present. This is not to say that they won't be used at some later time.
  1481.  
  1482.    The purpose of these commands was to allow a standard way of delivering 
  1483. commands that were not specified in the CD-ROM device driver spec to the 
  1484. drive. For example, sending SCSI command strings and reading the 
  1485. responses from the drive. This function is deliberately open-ended and vague 
  1486. because it was intended to provide a catch-all mechanism for application 
  1487. programs to communicate requests or request data in ways that were not 
  1488. specified by the device driver spec. For application programs to use these 
  1489. functions they have to know the driver supports these functions and also how 
  1490. to communicate with that specific drive. The mechanism would let the driver 
  1491. do what it does best and worry about which ports and interrupts to use. This 
  1492. relieves the application program from these details and allow it to deal with 
  1493. controlling the device at a higher level.
  1494.  
  1495.    Right now, if the driver does not support these functions, it should return 
  1496. an error for Unknown Command. One could test whether these two function 
  1497. were supported this way. Note: if there are commands which you feel should 
  1498. be supported by the device driver specification, please communicate them to 
  1499. us and we will consider adding them if they are of sufficient general interest.
  1500.  
  1501. Q: Would it be possible for me to get a sample source file for a driver?
  1502.  
  1503. A: Yes. Licensees are given source code to device drivers for:
  1504.  
  1505.     SONY - complete
  1506.  
  1507.     HITACHI - missing two modules. These are owned by Hitachi so we
  1508.       cannot supply them, though Hitachi will.
  1509.  
  1510.     PHILIPS - this driver communicates with the LMS CD-ROM driver 
  1511.       supplied by LMS.
  1512.  
  1513. Q: How can an application access CD-ROM drives that are subunits of one 
  1514. driver? The IOCTL calls do not take an argument for subunit. MSCDEX 
  1515. seems to handle this OK since when I do a directory of each CD-ROM in turn 
  1516. it accesses the correct drive. I do not see any clean way for an application to, 
  1517. for example lock the door on CD-ROM drive G: which is the third drive 
  1518. handled by the driver.
  1519.  
  1520. A: Requests all have a sub-unit field in the request header. Commands that 
  1521. one would expect to be directed to a specific drive, such as open door, are 
  1522. targeted at a particular drive through the use of the sub-unit field.
  1523.  
  1524. Q:  What is the current release version number of MSCDEX? The version I 
  1525. have is version 1.01 that is marked EVALUATION COPY. When can I get a 
  1526. final release version of it? Also will that final version include the changes to 
  1527. do all I/O through MSDOS (i.e. no INT 10h).
  1528.  
  1529. A: The most recent released version is version 2.20. You can purchase this 
  1530. from a number of licensees including all drive manufacturers. A Microsoft 
  1531. MS-DOS CD-ROM Extensions availability list is available. Versions 2.00 and 
  1532. up use MS-DOS for I/O and do not use the Bios for writing.
  1533.  
  1534. Q: Why doesn't MSCDEX allow IOCTL access via the drive letter (i.e. DOS 
  1535. func. 44h subfunc. #4,5), as if the CD-ROM were a normal drive. I 
  1536. understand that the driver is not a block device, but this is being handled 
  1537. already in some way since you allow a user to perform file I/O to a CD-ROM 
  1538. making it appear to be a block device. It would seem that all that would be 
  1539. necessary to accomplish this is to intercept IOCTL calls in the same way that 
  1540. file access calls are being intercepted.
  1541.  
  1542. A: MSCDEX doesn't presently hook int 21h, which is what this would 
  1543. involve. It's doubtful that this will change. It's not that much more difficult to 
  1544. open the file and send an IOCTL to the handle. File access calls are not 
  1545. caught at an INT 21h level but are caught from within DOS at another 
  1546. interface. CD-ROM drives are far more like network drives than traditional 
  1547. MS-DOS FAT file structure block drives and their drivers. For example, try 
  1548. to FORMAT a CD-ROM drive and you'll see. Part of all this prevents IOCTL's 
  1549. to the drive letter from being directed to the appropriate driver.
  1550.  
  1551. Q: Why not allow access to the PLAY, STOP and SEEK functions via the INT 
  1552. 2Fh entry point as is allowed for READ LONG. This would be much simpler 
  1553. than requiring the application to locate the driver header and then find the 
  1554. STRATEGY entry point and create request control blocks etc. This is a lot of 
  1555. code to start the music playing!
  1556.  
  1557. A: It's preferable to see future MS-DOS versions that provide standard 
  1558. extensions to the application program interface for audio/video control (new 
  1559. int 21h calls). The reason we haven't included play, etc. in the int 2Fh 
  1560. interface is to avoid loading down MSCDEX with additional functionality 
  1561. that most people don't use. Your suggestion would only move that code from 
  1562. the CD-playing program into MSCDEX. It makes your program smaller at 
  1563. the expense of making MSCDEX larger. As time goes on, this may change 
  1564. and some of the functionality may move into the int 2Fh interface. In the 
  1565. meantime, you can contruct device driver requests and use MSCDEX to send 
  1566. them to the driver through the Send Device Driver Request function request.
  1567.  
  1568. Q: Shouldn't the specification eliminate the need for the application to OPEN 
  1569. the driver by name? This is especially important in systems where the driver 
  1570. creates a new driver header for each CD-ROM drive. As it is, MS-DOS allows 
  1571. so few file handles to be open simultaneously that requiring applications to 
  1572. open even more is very bad.
  1573.  
  1574. A: Simply close the driver handle after you have located the device header. 
  1575. You no longer need to communicate through DOS to control it, so free the 
  1576. handle and make it available for other programs to use. With version 2.10, it 
  1577. is no longer necessary to OPEN the device driver in order to communicate 
  1578. with it. Applications can communicate with the device driver using Send 
  1579. Device Driver Request.
  1580.  
  1581. Q: Have you considered adding an addressing mode for the PLAY AUDIO 
  1582. function that would allow the application to specify the PLAY address by 
  1583. TNO instead of block number or min/sec/frame?
  1584.  
  1585. A: This has been considered but has not been added to avoid complicating the 
  1586. device drivers unnecessarily. At the moment, most CD-ROM drives are used 
  1587. without audio so our intent was to put what was needed for audio support in 
  1588. the audio playing software. In addition, we chose to keep the interface simple 
  1589. to leave more latitude for changes to the OS/2 API that may include newer 
  1590. data types like audio and video. Nonetheless, more extensive audio support 
  1591. may be added in the future. In the meantime, audio playing software has the 
  1592. extra overhead of reading the audio table of contents and interpreting the 
  1593. tracks itself.
  1594.  
  1595. Q: Why is there no CLOSE TRAY function in the driver spec? The CD-ROM 
  1596. drive we are using (Toshiba SCSI) has this capability but I see no way to use 
  1597. it via the Extensions. Why allow the user to OPEN it without allowing him to 
  1598. close it?
  1599.  
  1600. A: A close tray command has been added.
  1601.  
  1602. Q: It seems that there should be bits in the Device Status word to indicate 
  1603. whether a driver supports Reading/Writing device control strings.
  1604.  
  1605. A: Reading and writing device control strings was put in as a catch-all for 
  1606. anything that was missed so that application programs could send specific 
  1607. commands through the device driver to the device if they understood the 
  1608. device and knew how to communicate to it. A manufacturers CD-ROM 
  1609. diagnostic program would be an example of a program that might choose to 
  1610. communicate with the drive in this way. If the driver does not support these 
  1611. functions, it should return an error. One can test whether these two function 
  1612. are supported by testing if the error returned is for Unknown Command. 
  1613.  
  1614. Q: In the spec, treatment of the BUSY bit in the status word with regard to 
  1615. the PLAY AUDIO function seems to assume only one CD-ROM drive. What 
  1616. happens when the user has two or more drives each of which want to be 
  1617. playing music? How does the application tell whether the desired drive is 
  1618. busy? It would seem better to use some of the bits in the upper word of 
  1619. Device Status to indicate BUSY for each drive, perhaps allowing 8 or 16 
  1620. drives.
  1621.  
  1622. A: Requests all have sub-unit numbers associated with them. A request for 
  1623. service from one sub-unit may report that the drive is busy at the same time 
  1624. another sub-unit was not busy. The sub-unit field is used to distinguish 
  1625. requests between the drives supported by the driver. The busy bit serves as 
  1626. an indication of drive status for the sub-unit the request is for.
  1627.  
  1628. Q: If a CD-ROM file is opened in write-only mode, no error occurs.
  1629.  
  1630. A: True. The same happens on a floppy drive with a write-protect tab on it.  If 
  1631. you do have a handle to a CD-ROM file in open_for_write mode, as soon as 
  1632. you attempt to write, you will get an error. The correct model is to duplicate 
  1633. the behavior of a file that has been set READ-ONLY. Read-only files return 
  1634. error_access_denied if you try to open them in open_for_write or 
  1635. open_for_both modes. MSCDEX has been changed to duplicate this behavior.
  1636.        
  1637. Q: What other non-MSDOS calls are issued by MSCDEX besides INT 10h?
  1638. A:
  1639.     INT 2Fh - dos callbacks
  1640.     INT 67h    - expanded memory
  1641.     INT 10h - all INT 10h calls went away with version 2.00 which uses 
  1642. DOS write handle  instead.
  1643.  
  1644. Q: Why does MSCDEX do the READ LONG PREFETCH call after it has 
  1645. done a DEVICE CLOSE call? Is this intentional?
  1646.  
  1647. A: MSCDEX version 1.X never issued device open or close. These were issued 
  1648. by DOS as part of driver initialization. MSCDEX version 2.00 now issues 
  1649. device open calls and will precede the prefetch call.
  1650.  
  1651. Q: In the device driver spec, it says that if more than one unit is supported by 
  1652. the driver that this field should be set to the number of units. I suspect that 
  1653. this is wrong since this is not a block device. As far as I can see, this field 
  1654. should only ever be set to one since each unit will actually have its own 
  1655. header with its own unique name.
  1656.  
  1657. A: CD-ROM device drivers are a hybrid of block and char device drivers and 
  1658. are not technically legal as one or the other. Block drivers make some 
  1659. assumptions about the media format that aren't meaningful for CD-ROM and 
  1660. don't have a read call that can deal with CD-ROM's large data space. They 
  1661. were made as char devices with some additional calls and rules. One of the 
  1662. changes that was made for CD-ROM device drivers was to allow multiple 
  1663. sub-units for the device so the treatment of this field is correct as specified 
  1664. even though CD-ROM device drivers are character device drivers.
  1665.  
  1666.    If one has more than one CD-ROM drive, one can approach supporting 
  1667. them from several ways. One could have separate device drivers for each 
  1668. drive and load one per drive, have a single driver with multiple device 
  1669. headers, or have a single driver with one device header that supports sub-
  1670. units. This last method is borrowed from block drivers. For the case that the 
  1671. drives and drive commands are all the same, using sub-units will allow you 
  1672. to distinguish between which drive receives which command. The 
  1673. alternatives clutter DOS up with drivers or device headers. Sub-units may 
  1674. not be legal character device driver fields but conceptually, they're the right 
  1675. thing. Since CD-ROM device drivers could not be block drivers and had to be 
  1676. char device drivers, some liberties were taken with the specification to merge 
  1677. the best of both specifications.
  1678.    
  1679. Q: Is there any support through MSCDEX for WRITE LONG? I have a need 
  1680. for this to support a CD mastering system. I would like to be able to treat a 
  1681. WORM drive as a CD-ROM and allow writing to the drive once to create a 
  1682. master and then be able to test it out by using it as CD-ROM to verify that 
  1683. our data has been correctly stored in "High Sierra" format.
  1684.  
  1685. A: Such a call exists. It only serves to define a standard interface for CD-
  1686. ROM device drivers that are running over re-writable media - such as a CD 
  1687. mastering system. It is in the driver specificiation starting with version 2.00 
  1688. of the CD-ROM Extensions.
  1689.  
  1690. Q: How important is it that I should support RAW mode access in my driver? 
  1691. What would this typically be used for?
  1692.  
  1693. A: This is something that is gaining in importance. Several drives support 
  1694. reading in raw mode. Since drives and their command capabilities are 
  1695. hardware dependent, you would know based on the capabilities of your 
  1696. hardware if you were capable of supporting it. This function was added for 
  1697. completeness. A standard way was needed to define how to get at the 288 
  1698. bytes of EDC/ECC if drives allowed access and to have an avenue prepared if 
  1699. people found useful applications that would not use EDC/ECC where they 
  1700. wanted the additional space (such as gracefully degrading low-fidelity audio 
  1701. or graphics). It will be useful for copying audio information or for audio 
  1702. systems that will want to be able to manipulate audio tracks. Many people 
  1703. have expressed interest in having this capability.
  1704.  
  1705. Q: In the structure for the UPC Code function, "The UPC/EAN code (last 4 
  1706. bits are zero)". Does this mean the low order or high order 4 bits?
  1707.  
  1708. A: This is less ambiguous if you read Red Book under mode-2 of the Q-
  1709. channel info. This is now clarified in the UPC Code call. It should be the low 
  1710. nibble of byte 7. Red Book specifies that MSB comes out first so the high 
  1711. nibble will contain the 13th nibble of the UPC code and the 14th nibble will 
  1712. be zero.
  1713.    Unfortunately, scanning for the UPC code is time consuming especially if it 
  1714. is done by the software. This is due to the design of the q-channel in Red 
  1715. Book. It's a pity because this could be a useful number to verify the correct 
  1716. disc has been inserted. Most CD-ROMs do not have a UPC code or have it 
  1717. zeroed out. The same seems to be true for CD-audio as well. We believe that 
  1718. CD-ROM drives should scan for the UPC code as they read the Table of 
  1719. Contents when initializing from power up or a new disc. If the hardware does 
  1720. not do this, the UPC code has to be scanned by polling the q-channel which 
  1721. may occasionally miss the UPC code.
  1722.  
  1723. Q: It would be nice if the device driver spec included a list of what types of 
  1724. disk access functions would and would not work so that users could get an 
  1725. idea of what utilities and applications will and will not work with the 
  1726. extensions.
  1727.  
  1728. A: The device driver specification describes just what is necessary for writing 
  1729. a CD-ROM device driver. The information you would like concerning things 
  1730. such as INT 25h/26h not supported as well as the behavior 
  1731. CHKDSK/FORMAT/etc belongs and is mentioned in the MSCDEX overview.
  1732.  
  1733. Q: If I have a low priority request and if the system has time, can the 
  1734. prefetch request read into and transfer the data into a transfer address?
  1735.  
  1736. A: We have looked at this for some time but the bottom line is that 
  1737. asynchronous I/O under DOS is very difficult to support in all cases. It is 
  1738. difficult for MSCDEX or the CD-ROM device driver to know that the transfer 
  1739. address is still valid because DOS never notifies MSCDEX or the device 
  1740. driver if the requesting process was been terminated. The request runs the 
  1741. risk of writing over another program. The best approach now is if the driver 
  1742. wants to, it can reserve internal buffer space for data from the disc and put 
  1743. prefetched data there. Then it can copy the data to the read transfer address 
  1744. once the read request finally arrives. Alternately, some of the caching or 
  1745. prefetching can reside in the CD-ROM controller or in the drive itself. The 
  1746. CD-ROM XA device driver appendix though allows a mechanism for reading 
  1747. files asynchronously although this requires a CD-ROM XA drive and imposes 
  1748. burdens for the application to notify the driver when the process halts and to 
  1749. move data .
  1750.  
  1751. Q: Is there any status indication that a prefetch transfer has occurred or 
  1752. some interaction with the read long command?
  1753.  
  1754. A: There is no way to tell if a prefetch request was successful or the state of 
  1755. it. The prefetch simply provides a hint to the driver and the read request 
  1756. later is the request that finally takes delivery of the data.
  1757.  
  1758. Q: Read (ioctl input) When audio is playing, can location of head move?
  1759.  
  1760. A: I'm not entirely sure what you mean by this question but I will attempt to 
  1761. answer a couple different ways and hope I provide the information you need.
  1762.    While audio is playing, the head is moving on the CD. If the driver receives 
  1763. a command asking where the head is, the driver should ask the drive where 
  1764. the head is presently positioned and report that. So as audio is playing, an 
  1765. application program that is controlling the audio can monitor the progress of 
  1766. audio playback and can either synchronize actions with the audio or report 
  1767. the present location to the user. For example, a program to play audio discs 
  1768. would be able to report the present track number and time elapsed on the 
  1769. computer monitor much like a CD-audio player reports things on its LED 
  1770. display. If the driver is sent a command that requires the movement of the 
  1771. head or a change in the state of the machine (SEEK, READ, INITIALIZE, 
  1772. PLAY AUDIO etc.) then the audio will be interrupted so that the drive can 
  1773. perform the new request.  If the drive receives a command for status or some 
  1774. other function that does not require the head to be moved or the state of the 
  1775. machine to change, then audio play should continue.
  1776.  
  1777. Q: Are the parameters of Audio Disk Info and Audio Track Info BCD or 
  1778. binary?
  1779.  
  1780. A: The parameters were vaguely specified in the device driver spec. The spec 
  1781. has been clarified. They are as follows:
  1782.  
  1783. - Audio Disk Info
  1784.         binary    Lowest Track Number (1-99)
  1785.         binary    Highest Track Number (1-99)
  1786.         red book    Starting point of lead-out track
  1787.  
  1788. - Audio Track Info
  1789.         binary    Track Number (1-99)
  1790.         red book    Starting point of track
  1791.         as is    Track control information
  1792.  
  1793. The track control information is not a BCD or Binary number like the track 
  1794. number. The byte contents as it appears on the disc should be carried 
  1795. through unmodified by the driver and is interpreted according to the 
  1796. Philips/Sony Red Book standard.
  1797.  
  1798. Q: Are the parameters for the Audio Q-channel info BCD or binary?
  1799.  
  1800. A: The parameters are as follows:
  1801.  
  1802. - Audio Q-Channel Info
  1803.         as is    Control and ADDR byte
  1804.         as is    Track Number
  1805.         as is    Point or Index (X)
  1806.  
  1807.         red book    MIN/SEC/FRAME
  1808.         zero    ZERO
  1809.         red book    AMIN/ASEC/AFRAME or PMIN/PSEC/PFRAME
  1810.  
  1811. The notes on when to convert from BCD to red book addresses for 
  1812. MIN/SEC/FRAME, AMIN/ASEC/AFRAME and PMIN/PSEC/PFRAME is 
  1813. already fairly clear in the spec. The other fields are passed through as is from 
  1814. the disc. For additional information, see the two code samples AUDIO.C and 
  1815. AUDIO.ASM.
  1816.  
  1817. Q: Must we support read sub-channel info and the read upc code?
  1818.  
  1819. A: No. It is not necessary that these be supported. At the present time and in 
  1820. the forseeable future, MSCDEX will not be issuing these commands though 
  1821. some applications may wish to.
  1822.  
  1823. - Read Sub-Channel Information
  1824.  
  1825. At the present time, nobody is using channels P or R through W. The read 
  1826. sub-channel command was added to provide a standard way to specify access 
  1827. to these channels in the event that they are used and to specify in one way or 
  1828. another access to all information on a CD-ROM. The error detection or 
  1829. correction for information in these channels is not as good as it is for data 
  1830. returned from READ commands. There are existing standards for P, R-W 
  1831. channel use and this command could be used to access this information once 
  1832. discs abiding by these standards become more common.
  1833.  
  1834. - Read UPC Code
  1835.  
  1836. This command is conceivably much more useful. It is advised that it be 
  1837. supported so that application software can exactly identify the CD-ROM in 
  1838. the drive. This may be a consideration for audio software that wishes to try to 
  1839. identify inserted audio discs (if the UPC code is present) or for software that 
  1840. is specifically tied to a version of a CD-ROM. Unfortunately, the standard 
  1841. does not specify a specific location for this information so that unless the 
  1842. hardware reads it on disc initialization as we recommend, the device driver 
  1843. must poll the q-channel and hope that it locates it. See also the sample code 
  1844. in AUDIO.ASM.
  1845.  
  1846. Q: My driver seems to work ok except that whenever I connect to a sub-
  1847. directory and do a directory, I am suddenly back in the root directory again. 
  1848. What's going wrong?
  1849.  
  1850. A: What is most likely happening is the driver is returning an incorrect value 
  1851. for MEDIA CHECK and MSCDEX thinks that the disc is changing all the 
  1852. time. When this happens, MSCDEX rereads the volume descriptors and 
  1853. pathtable and reinitializes what it knows about the disc and changes the 
  1854. current working directory back to root as if the drawer had been opened, the 
  1855. disc removed, and then reinserted. This will be accompanied with a larger 
  1856. amount of disc activity than one would expect for a simple directory scan. 
  1857. Fixing the driver to return the correct value when asked for a media check 
  1858. will correct this behavior.
  1859.  
  1860. Q: What is the best way for my application to know if the disc has changed 
  1861. since it was last accessed?
  1862.  
  1863. A: Use the DOS function find first and look for the volume id. When the disc 
  1864. has been read and MSCDEX has already initialized the internal information 
  1865. it keeps for each disc, this is a relatively inexpensive operation. The 
  1866. information is in memory and the disc does not have to be touched, so 
  1867. checking the volume id is very quick. Only if the disc has been changed does 
  1868. the disc have to be touched. This operation takes considerably longer than if 
  1869. the disc was not changed but even so, this has to be done anyway because 
  1870. MSCDEX has to read and initialize what it knows about the new disc so it 
  1871. can report the volume id correctly so the application can know if the disc in 
  1872. the drive is the one that it is looking for.
  1873.  
  1874. Q: When I do a directory, the first couple filenames are either duplicated or 
  1875. they are random characters. What might cause this?
  1876.  
  1877. A: The problem comes from having the incorrect bytes in the file identifier 
  1878. field for the first two directory entries. The first directory entry in each 
  1879. directory file is supposed begin with a copy of the directory record for that 
  1880. directory file followed by a copy of the directory record for the parent 
  1881. directory (also known as '.' and '..' on Unix or MS-DOS). The filename or 
  1882. directory identifier is supposed to be 1 byte long and the contents are 
  1883. supposed to be 0 for the first directory entry and 1 for the second directory 
  1884. entry. This is discussed in clause 6.8.2.2 of the ECMA standard or the ISO-
  1885. 9660 proposal. Several places on the disc in question, you have a 1 where 
  1886. there should be a 0 and in one directory, the file identifier consists of 0x8A 
  1887. which is why DIR in that directory begins with an "e". Incorrectly formatted 
  1888. discs will not be handled by the extensions correctly. This is why it is a good 
  1889. idea to test your disc image using MSCDEX before you press a disc to make 
  1890. sure your data is formatted correctly and as MSCDEX expects it.
  1891.  
  1892. Q: I have a directory file that is 4Kb long but when I do a DIR in that 
  1893. directory, it is slower than usual and random filenames are printed out. I can 
  1894. tell by watching the device driver commands that MSCDEX is asking for 
  1895. sectors far beyond the end of the directory. I can see how this might account 
  1896. for the random filenames but why is it scanning so far?
  1897.  
  1898. A: Problems such as this result from having with multi-sector directory files 
  1899. that include empty sectors in the directory file. The High Sierra specification 
  1900. does not allow you to have empty directory sectors at the end or to have gaps 
  1901. in the middle. The problem stems from the fact that your directory length is 
  1902. too long. For example, for the disc in question, the root directory begins at 
  1903. sector 28 and its length is 4096 bytes but the second sector is completely 
  1904. blank (all 0's). This confuses MSCDEX because it does not expect to see 
  1905. empty sectors.
  1906.  
  1907.    Because LEN_DR of what would be the first directory entry in sector 29 is 
  1908. 0, MSCDEX thinks that there are no more entries in that sector. When it 
  1909. reaches the end of the entries in each sector, MSCDEX rounds its offset up to 
  1910. the start of the next sector:
  1911.     offset += (SECTOR_SIZE - 1);
  1912.     offset &= ~(SECTOR_SIZE - 1);
  1913. Since the offset did not changed when scanning sector 29 (there were no 
  1914. entries in this sector to increment the offset) the above rounding algorithm 
  1915. does not change the offset (2048 in, 2048 out). This is why MSCDEX 
  1916. continues reading beyond the end of the directory file at sector 29 because 
  1917. the offset did not grow past the directory length. MSCDEX continues reading 
  1918. blank sectors (sectors 29 through 49 are all blank) until it reaches the first 
  1919. non-blank sector.
  1920.  
  1921. It looks like what you are attempting to do is implement updatable High 
  1922. Sierra and you want to allocate the directory space ahead of time and fill it in 
  1923. later as needed. The format you are using though is not valid High Sierra 
  1924. and also incurs the cost of reading the blank directory sectors at the end of 
  1925. every directory. Instead, you should record the correct High Sierra directory 
  1926. length in the directory length field for that directory (in this case 2Kb). What 
  1927. remains is finding a place to store the value which tells how many blocks 
  1928. have been reserved for each directory file. There are a number of places this 
  1929. can be done, either in system/application use fields in the directory record, in 
  1930. an XAR, or in a separate file either inside or outside the High Sierra  
  1931. directory structure. The first is the easiest approach to take.
  1932.  
  1933. Be aware thought that CD-I may have plans to use the system use field in 
  1934. the directory record so you may want to investigate Philips' plans to make 
  1935. sure whatever scheme you use meshes well with what CD-I has in mind. The 
  1936. CD-ROM XA specification includes methods for mediating use of the System 
  1937. Use fields in the directory entry that you should look into. MSCDEX will 
  1938. ignore the system use or application use information recorded so you can 
  1939. store what you'd like in the form you like (ascii or binary). You may also 
  1940. want a final pass over the directory hierarchy before mastering to remove 
  1941. extraneous information from the directory record.
  1942.  
  1943. Q: I noticed that Function Request 0 Get Number of CD-ROM drive letters 
  1944. may not always return unambiguous results. Suppose I start the network 
  1945. first and use one of the drive letters for a network drive (F:). When I start the 
  1946. Extensions, it will begin assigning drive letters after the last used drive 
  1947. letter (C: on my machine).  If I have 4 CD-ROM drives on my system, they 
  1948. will be assigned drive letters D:, E:, G:, and H:. Function 0 returns 4 in BX 
  1949. for the number of CD-ROM drives and 3 in CX for drive letter D: correctly. 
  1950. But as you can see, the CD-ROM drives do not use contiguous drive letters so 
  1951. I cannot deduce from what this function returns that drive F: is not a CD-
  1952. ROM drive.
  1953.  
  1954. A: That is correct. This is why function 0Dh Get CD-ROM drive letters was 
  1955. added. To get an unambiguous list of CD-ROM drives, use this function or 
  1956. use function 0Bh CD-ROM Drive Check to tell if a drive letter is for a CD-
  1957. ROM drive.
  1958.  
  1959. Q: Is it possible to do an absolute read using the Extensions.  I am trying to 
  1960. read mode 2 (uncooked) data using Function Request 8 Absolute Read. I use 
  1961. a normal device I/O to turn off error correction and perform a read but all I 
  1962. get back is 2048 bytes of data instead of the full 2356 bytes. Is there another 
  1963. way in Int 2F to get the data uncooked?
  1964.  
  1965. A: Not at present. If you want to get at the data including error correction 
  1966. code, you will have to communicate directly with the device driver. The 
  1967. Extensions provides the Send Device Driver Request mechanism for 
  1968. communicating with the device driver.
  1969.  
  1970. Q: Is it possible to access a non-High Sierra disc with the Extensions using 
  1971. an absolute disc read?
  1972.  
  1973. A: One can use either the extensions to read a non-High Sierra disc using 
  1974. INT 2Fh or one can communicate directly with the device driver to do this. 
  1975. The device driver itself makes no distinction between High Sierra and non-
  1976. High Sierra discs so it can be used to read them although the burden of file 
  1977. system translation and reading then falls on the application talking to the 
  1978. driver. The INT 2Fh Absolute Read function simply packages the request to 
  1979. read and sends it directly to the driver and returns the result.
  1980.  
  1981. Q: What we have done is, in AUTOEXEC.BAT, first loaded the MS-DOS CD-
  1982. ROM Extensions and then the MS-NET software. The error message is 
  1983. "Redirector already installed". The network software is then not loaded.  We 
  1984. are using MS-NET 1.1 in an HP product called ThinLAN. Any hints as to 
  1985. what they should try next?
  1986.  
  1987. A: MSCDEX is a CD-ROM "redirector". It hooks into DOS the same way the 
  1988. network redirector does to get requests for file access to files that are not on 
  1989. local hard/floppy disks. As far as DOS is concerned, CD-ROM drives look just 
  1990. like network drives. DOS passes all file accesses through the redirector 
  1991. interface to the network redirector which in turn sends file access requests 
  1992. out over the net. MSCDEX splices itself in front of the network redirector and 
  1993. takes requests belonging to CD-ROM drives and passes the rest to the 
  1994. network redirector.
  1995.  
  1996. The problem is that the network redirector code assumes that there will only 
  1997. be one redirector installed (itself) whereas MSCDEX does not make this 
  1998. assumption. If the network redirector is installed after MSCDEX (before it in 
  1999. the interrupt chain), it will process all requests from DOS and never pass 
  2000. any CD-ROM requests through to MSCDEX. For this reason, MSCDEX has 
  2001. to be installed after the network redirector (before it in the interrupt chain) 
  2002. and so MSCDEX prevents the network redirector from installing afterwards 
  2003. to ensure this. Since you installed MSCDEX first, the network believes a 
  2004. redirector is already installed so it does not install itself which is what you 
  2005. are seeing. In order to install both, simply install your network software first 
  2006. and MSCDEX second and you're set.
  2007.  
  2008. Q: CHKDSK, ASSIGN, and SUBST report that the CD-ROM is a network 
  2009. disc. Why is this?
  2010.  
  2011. A: From the above explanation, you understand that to DOS, the CD-ROM 
  2012. drives look like network drives. The programs CHKDSK, ASSIGN, and 
  2013. SUBST check the same fields DOS does and think the same thing. There is 
  2014. no way to get around this.
  2015.  
  2016. Q: RENAME gives error message "Duplicate file name or File not found" 
  2017. instead of something that makes sense such as "Access denied" or "Can't 
  2018. rename CD-ROM files".
  2019.  
  2020. A: The error message is coming from the code for RENAME and not 
  2021. MSCDEX.  The error condition is being returned correctly but the error code 
  2022. returned by version 1.01 is correct according to DOS documentation. The 
  2023. problem seems to be that there are two error codes for access denied - 5 and a 
  2024. special one 65 which is error_net_access_denied which is returned by the 
  2025. network redirector when it has a problem. MSCDEX version 2.00 and up 
  2026. returns error code error_net_access_denied and so RENAME now reports 
  2027. "Access denied".
  2028.  
  2029.  
  2030. This document describes the file transfer tests DOSSPEED and WINSPEED 
  2031. provided on DISK1.  These programs measure the rate that data can be read 
  2032. from the CD-ROM, with DOSSPEED measuring this transfer rate in the 
  2033. DOS environment and WINSPEED in the Windows environment. 
  2034.  
  2035. The Need for Speed Tests
  2036.  
  2037. One thing that distinguishes CD-ROM media from other media is the nature 
  2038. in which the data is provided, that is, it can be viewed as a "data stream."  
  2039. The fact that an application can depend upon the data coming off the disc at 
  2040. a guaranteed rate of 150Kb/second provides unique advantages.  
  2041. Unfortunately there are various problems, which in practice can limit 
  2042. throughput, creating the situation that while the transfer rate on any one 
  2043. drive is fairly constant, it is often less 150Kb/second, sometimes much less.  If 
  2044. an application prepares a data stream to be played off the disc it must be 
  2045. able to make certain assumptions about the rate at which the data stream 
  2046. will be provided.  If the designers of the application decide to support a drive 
  2047. which cannot maintain 150Kb/second, then they have to make a decision 
  2048. about what minimum transfer rate to support, and to do this they need 
  2049. information about  sustainable transfer rates.  Therefore the sustainable 
  2050. transfer rate available on your drive is important information which should 
  2051. be determined and provided to your customers.
  2052.  
  2053. Description of DOS Speed Test
  2054.  
  2055. Usage information (This is also available by typing "DOSSPEED -?"):
  2056.  
  2057. DOSSPEED [pathname] [-r:X] [-b:X] [-p:X] [-f] [-t]
  2058.  
  2059. where:
  2060.  
  2061. [pathname]        Path and name of file to test.
  2062.  
  2063. -r        Sets the transfer rate in bytes/sec (150Kb/sec default).
  2064.  
  2065. -b:[blocksize]    Sets the blocksize (bytes per read request), which must be 
  2066. from 1 to 65534 (16Kb default).
  2067.  
  2068. -p        Specifies the number of bytes used to prime the buffer. The 
  2069. number of bytes range  from 1 to 65534 with a default of 0.  This 
  2070. parameter allows a read-ahead buffer to fill up before the transfer 
  2071. rate timing actually begins. This is useful when testing transfer 
  2072. rates approaching the maximum rate available for CD-ROM 
  2073. drives.
  2074.  
  2075. -f        Performs a straight speed test with no delays, that is, it doesn't 
  2076. calculate how much time was spent blocked in the synchronous 
  2077. read requests.
  2078.  
  2079. -t        Causes terse output in the following format (useful for input to a 
  2080. spreadsheet):
  2081.  
  2082. <file><xfer rate><blocksize><primer><bytes read><real 
  2083. xferrate><% time blocked>
  2084.  
  2085. DOSSPEED.EXE determines several characteristics of a CD-ROM drive.  
  2086. The command line options give three degrees of freedom.  Some suggested 
  2087. performance curves are:
  2088.  
  2089.     Transfer rate as a function of blocksize
  2090.  
  2091.     Transfer rate as a function of primer bytes
  2092.  
  2093.     CPU usage (% time blocked) as a function of blocksize
  2094.  
  2095.     CPU usage (% time blocked) as a function of expected transfer rate
  2096.  
  2097.     CPU usage (% time blocked) as a function of both blocksize and 
  2098. expected transfer rate
  2099.  
  2100. It is important to consider the best use of a CD-ROM drive.  Applications 
  2101. require sustainable transfer rates with suitable CPU bandwith available to 
  2102. complete various tasks between contiguous read requests.  By considering 
  2103. the CPU usage as a function of both blocksize and expected transfer rates, a 
  2104. buffering solution may be determined.  Always select a relatively large file 
  2105. for conducting DOSSPEED tests in order to reduce the small degree of error 
  2106. in the timing loop.
  2107.  
  2108. Description of Windows Speed Test
  2109.  
  2110. This speed test operates as a Windows application.  The Windows speed test 
  2111. pops up a window with a standard Files/Directories I/O dialog.  The tester 
  2112. selects a file on the CD-ROM disc and, like the DOS test, it keeps track of 
  2113. how much time elapses in reading the entire file, reports the average transfer 
  2114. rate, how many total bytes were read, and how many bytes were read by each 
  2115. request.  Unlike the DOS based test, this test doesn't analyze CPU 
  2116. bandwidth available between read requests.
  2117.  
  2118. To run this test select Run from the File menu, and execute the command: 
  2119. <drivename:\pathname\>WINSPEED.EXE.
  2120.  
  2121.  
  2122.  
  2123. TESTDRV is a rigorous test utility for CD-ROM device drivers to verify that 
  2124. the drivers adhere to specifications.  This driver test attempts to fully 
  2125. exercise all possible calls to the device driver and record the driver's progress.
  2126.  
  2127. Setup for TESTDRV
  2128.  
  2129. TESTDRV assumes that MSCDEX and the appropriate device driver are 
  2130. installed. During initialization, TESTDRV reads the driver profile from the 
  2131. file TESTDRV.PRO which assigns  the device status defaults for the test.  
  2132. The following example shows a typical TESTDRV.PRO file:
  2133.     
  2134.     ; This is a sample TESTDRV.PRO
  2135.     ; Comments start with ';' and continue to the newline
  2136.     DriverName    = MSCD000    ; The driver to test 
  2137. (specified as
  2138.             ; argument to the 
  2139. <drivername>.SYS
  2140.             ; command line
  2141.     WriteDevice    = f    ; This device is not writable
  2142.     Redbook    = t    ; This device supports Redbook 
  2143.             ; Addressing
  2144.     RawMode    = t    ; This device supports raw 
  2145. mode data
  2146.     Prefetch    = t    ; This device supports 
  2147. prefetching
  2148.     AudioControl    = t    ; This device supports audio 
  2149. channel
  2150.             ; manipulation
  2151.     Audio    = t    ; This device supports 
  2152. audio/video
  2153.             ; information
  2154.     AudioChannels    = 2    ; Number of supported 
  2155. audio channels
  2156.     Interleave    = f    ; This device does not support 
  2157.             ; Interleave mode
  2158.     InterleaveSize    = 0    ; Interleave size (may 
  2159. range between 
  2160.             ; 0-255)
  2161.     InterleaveSkip    = 0    ; Interleave skip (may 
  2162. range between 
  2163.             ; 0-255)
  2164.     Eject    = t    ; This device supports 
  2165. software 
  2166.             ; eject requests
  2167.     UPC    = t    ; This device implements UPC 
  2168. code 
  2169.             ; reading
  2170.     Output    = HEXDUMP.TXT    ; Output hex dumps to 
  2171. this file. 
  2172.             ; Blank assignment sends 
  2173. output to
  2174.             ; stdout
  2175.     RedReadSectors    = 3:8:3,8:2:4    ; List of 
  2176. sectors to read in ReadL 
  2177.             ; tests (red book form)
  2178.     HSGReadSectors    = 0024180c,00ff3421 ; List of 
  2179. sectors to read 
  2180.             ; in ReadL tests (HSG form) 
  2181. hex only
  2182.  
  2183.     ; <EOF>
  2184.  
  2185. If the profile variables are not set in the TESTDRV.PRO file, they will 
  2186. default to the values shown above (except for the sector selections).  
  2187.  
  2188. Running TESTDRV
  2189.  
  2190. To run the test simply install your device driver, initiate MSCDEX, and 
  2191. execute TESTDRV.EXE. The default operation of TESTDRV can be modified 
  2192. through command line flags and arguments. Either a hyphen (-) or a forward 
  2193. slash (/) denotes the flags. The following command line flags and arguments 
  2194. are available:
  2195.  
  2196.     filename    - Alternate driver profile. (default: TESTDRV.PRO)
  2197.     /A    - Attended operation, qualifying interactive tests. (default: 
  2198.           unattended operation)
  2199.     /I    - Override disk recognition on control disk, (that is, behave as if 
  2200.           the disk is unknown even if it is a member of the Test Set). 
  2201.           (default: if recognized, several data matching tests are 
  2202. qualified).
  2203.     /T    - Terse output, no hex dumps and fewer diagnostic messages.
  2204.     /[#]    - Where # is a digit between 0 and 7, the drive number.
  2205.  
  2206. In unattended (default) mode, all tests will be verified by both successful 
  2207. completion, given an acceptable request, and successful error recovery, given 
  2208. an unacceptable request.  The output has the following format:
  2209.  
  2210.  [Command Code.Subcommand Code]   [Status]   
  2211. [Command[:Subcommand]]:[Test Comment]
  2212.  
  2213. For example, the test for the location of the driver head may return:
  2214.  
  2215.     3.1 TESTING  IOCTLI:LocHead: Value Corresponds to Q-
  2216. channel         Information. 
  2217.  
  2218.     3.1 ERROR    IOCTLI:LocHead: Value Does not Correspond 
  2219. to 
  2220.         Q-channel  Information.
  2221.           LocHead returns     1:23:60 [Redbook]
  2222.           Q-channel returns     2:30:45 [Redbook]
  2223.  
  2224. Commands that return sector data or device dependent data will dump 
  2225. output in hexadecimal.  If the disk is a recognized test disk and recognition is 
  2226. turned on (default), sector data will be compared to correct values and only 
  2227. the status returned.  
  2228.  
  2229. Attended and Unattended Operation
  2230.  
  2231. Several calls to the driver cause or report physical changes in the drive unit 
  2232. or require that audio disk information be played through audio channels like 
  2233. conventional audio CD players.  These states should be confirmed by an 
  2234. operator.  A series of YES/NO queries and simple directions allow the 
  2235. operator to quickly step through these tests.  In order to allow for operator-
  2236. free testing, a set of alternate best-guess tests can be executed instead of the 
  2237. ones that require confirmation.  Attended testing is a super-set of unattended 
  2238. testing and should be considered the most complete run of the test program. 
  2239. For example, the following sequence occurs in the attended mode:
  2240.  
  2241.     132 TESTING PlayReq: Can you hear music playing? [Yn]_ 
  2242.         { ..music plays and tester responds 'Y'.. }
  2243.     132 TESTING PlayReq: Request Completed Successfully. 
  2244.  
  2245. Control Disk Verification
  2246.  
  2247. The test for verifying read data requires the Microsoft Bookshelf and 
  2248. Microsoft Programmer's Library to be used as control disks. The test 
  2249. procedure reads data from the control disks then compares both  raw and 
  2250. cooked data for correspondence with archived data. If the test is run without 
  2251. the control disks, the data read is dumped in hexadecimal and ASCII format 
  2252. to the specified output.
  2253.  
  2254. Nonstandard CD-ROM Features
  2255.  
  2256. Several driver commands derive their results or actions from hardware 
  2257. dependent features of the driver.  Since not all drivers can be supported in a 
  2258. general release, special features of a device driver may not be adequately 
  2259. tested.  (For example, write commands apply to few CD-ROM drives and are 
  2260. only minimally supported  by error recovery tests.) If the hardware 
  2261. dependent CD-ROM device driver document describes the results of a driver 
  2262. request as undefined, the request will be tested for simple completion and 
  2263. error recovery.   Requests that return data will dump the data to the selected 
  2264. output in hexadecimal and readable ASCII format.  
  2265.