home *** CD-ROM | disk | FTP | other *** search
/ PC-X 1998 March / pcx19_9803.iso / PC-XUSER / PC-XUSER.10 / RPROG / RPROG10.TXT < prev   
Encoding:
Text File  |  1997-10-12  |  12.6 KB  |  353 lines

  1. RENDSZERPROGRAMOZÅS
  2. A DOS ÉS SZOLGÅLTATÅSAI - X.
  3.  
  4. A CD-meghajtó programozása
  5.  
  6. A Microsoft CD-ROM Extension (MSCDEX) a DOS egy olyan bôvítése ami 
  7. lehetôvé teszi mind High Sierra, mind ISO-9660 formátumú CD-ROM lemezek 
  8. olvasását. Az alkalmazásokkal való kompatibilitást biztosítandó azok a CD-ROM 
  9. lemezt úgy älátjákö, mintha az egy szokványos mágneses tároló (pl. floppy, 
  10. winchester) lenne. 
  11.  A teljes CD-rendszer két komponensbôl áll: a CD-meghajtóval szállított
  12. hardware-függô eszközmeghajtóból (pl. SJCDAPI.SYS) és az MSCDEX.EXE nevû
  13. eszközfüggetlen programból. Az elôbbi program olyan elemei mûveletek
  14. elvégzésére képes, mint a fej mozgatása, egy szektor olvasása/írása, vagy a
  15. meghajtó állapotának lekérdezése (pl. van -e lemez az egységben), míg utóbbi egy
  16. IFS (Installable File System - telepíthetô file-rendszer), ami äemészthetôvéö teszi a
  17. CD-lemezeket a DOS számára.
  18.  
  19.  
  20. AZ ESZKÖZMEGHAJTO
  21.  
  22. Az MSCDEX program nem közvetlenül, hanem az eszközmeghajtón keresztül
  23. kommunikál a CD-ROM meghajtóval. Ez lehetôvé teszi különbözô
  24. eszközmeghajtók alkalmazásával különbözô fizikai karakterisztikájú és illesztési
  25. módú CD-meghajtók egységes kezelését az MSCDEX szintjén. Az eszközmeghajtó
  26. feladata a standard MSCDEX parancsok älefordításaö a hardver (a CD-ROM
  27. meghajtó) számára, ilyen szinten elrejti az MSCDEX elôl, hogy valójában milyen
  28. meghajtó is van a gépben.
  29.  Az eszközmeghajtó a CONFIG.SYS-ben kerül betöltésre mint akármelyik
  30. másik eszközmeghajtó. A szintaxis a következô:
  31.  
  32.     DEVICE = <filenév> /D: <eszköznév> /N: <meghajtók száma>
  33.  
  34.  A megadott eszköznevet át kell adni majd az MSCDEX számára is annak
  35. indításakor, hogy az megtalálhassa a CD eszközmeghajtóját és kommunikálni
  36. tudjon vele. Az eszközmeghajtó egy ill. több CD-ROM meghajtó használatát is
  37. támogathatja. Elôbbi esetben a /N kapcsoló elhagyható, de több meghajtó
  38. használata esetén minden egyes meghajtónak külön <eszköznev>-et kell adni.
  39.  
  40.  A DOS az eszközmeghajtóval (mint minden más device driverrel is) ún.
  41. IOCTL parancsok segítségével kommunikál.
  42. Az érvényes parancskódok a következôk:
  43.  
  44.  
  45.  
  46. Kód    Jelentés
  47. 0    INIT
  48. 1    MEDIA CHECK
  49. 2    BUILD BPB
  50. 3    IOCTL INPUT
  51. 4    INPUT
  52. 5    NON-DESTRUCTIVE INPUT NO-WAIT
  53. 6    INPUT STATUS
  54. 7    INPUT FLUSH
  55. 8    OUTPUT
  56. 9    OUTPUT WITH VERIFY
  57. 10    OUTPUT STATUS
  58. 11    OUTPUT FLUSH
  59. 12    IOCTL INPUT
  60. 13    DEVICE OPEN
  61. 14    DEVICE CLOSE
  62. 15    REMOVABLE MEDIA
  63. 16    OUTPUT UNTIL BUSY
  64. 128    READ LONG
  65. 130    READ LONG PREFETCH
  66. 131    SEEK
  67. 132    PLAY AUDIO
  68. 133    STOP AUDIO
  69. 134    WRITE LONG
  70. 135    WRITE LONG VERIFY
  71. 135    RESUME AUDIO
  72.  
  73.  A Microsoft az MSCDEX kidolgozásakor specifikált egy minimális, minden - az
  74. MSCDEX-szel kompatiblis - CD-ROM eszközmeghajtók által ismert és értelmezett
  75. utasításcsoportot (magyarul, amelyik eszközmeghajtó ezeket nem tudja avval nem -
  76. vagy legalábbis nem helyesen - mûködik az MSCDEX). A minimális CD-ROM
  77. eszközmeghajtó Cooked Mode 1-ben (lásd késôbb) adatszektorok olvasására képes
  78. HSG címzéssel (lásd késôbb) és megfelelôen kezeli az IOCTL hívásokat. Az
  79. eszközmeghajtók által minimálisan ismertnek feltételezett parancsok és
  80. paraméterezésük a következô.
  81.  
  82. INIT
  83.  
  84. Parancskód    = 0
  85. ES:BX        = «INIT
  86.  
  87. INIT    Offset    Típus    Érték    Mezô jelentése
  88.     00    DB    13 dup (?)    request header
  89.     0D    DB    0    az alegységek száma (0)
  90. *    0E    DD    ?    végcím
  91. */-    12    DD    ?    mutató a BPB-re/parancssori paraméterek
  92.     16    DB    0    blokk-egységszám
  93. * az eszközmeghajtó állítja be a funkcióhívás alatt
  94.  
  95. Ezt a funkciót a DOS (nem az MSCDEX) csak egyszer, az eszköz installálásakor
  96. (az eszközmeghajtó betöltésekor) hívja meg. Ez az egyetlen CD-ROM
  97. eszközmeghajtó-parancs amit maga a DOS ad ki (normális esetben); a többit
  98. mindig az MSCDEX vagy a felhasználói programok használják.
  99. Az végcímet a hívás során az eszközmeghajtónak kell beállítani a rezidenssé tenni
  100. kívánt rész méretének megfelelôen. A funkció hívásakor eszközmeghajtó
  101. paramétereire (a DEVICE= ill. DEVICEHIGH= utáni karakterekre) a BPB (BIOS
  102. Parameter Block) pointer mutat. Ez lehetôséget nyújt az eszközmeghajtó számára
  103. esetleges parancssori paraméterek átvételére. Az inicializálás alatt az
  104. eszközmeghajtónak - az esetleges paramétereknek megfelelôen - be kell állítania
  105. device header-jében az eszközmeghajtó nevet.
  106.  
  107. READ (IOCTL INPUT)
  108.  
  109. Parancskód    = 3
  110. ES:BX        = «IOCTLI
  111.  
  112. IOCTLI    Offset    Típus    Érték    Mezô jelentése
  113.     00    DB    13 dup (?)    request header
  114.     0D    DB    0    média-leíró bájt a BPB-bôl
  115. *    0E    DD    ?    átviteli cím
  116.     12    DW    ?    átvivebdô bájtok száma
  117.     14    DW    0    kezdô szektor
  118.     16    DD    0    mutató a volume ID-re 0f hiba esetén
  119.  
  120. A média-leíró, kezdô szektor és volume ID mezôk tartalma mind 0. Az átviteli cím
  121. egy vezérlô-blokkra (control block) mutat, amin keresztül az eszközmeghajtóval
  122. kommunikálhatunk. A felépítése a következô:
  123.  
  124. CDIREQBUF    Offset    Típus    Érték    Mezô jelentése
  125.     00    DB    ?    végrehajtandó parancs kódja
  126.     01    DB    n dup(?)    a parancs paraméterei
  127.  
  128. A parancskódok, a szükséges Request Buffer mérete (IOCTLI rekord äátvivendô
  129. bájtok számaö mezôje) és jelentéseik a következôk:
  130.  
  131.  
  132.  
  133. Kód    Méret    Jelentés
  134. 0    5    Device Header címének lekérdezése
  135. 1    6    Fej pozíciójának lekérdezése
  136. 2    ?    Fenntartott
  137. 3    ?    Hiba-statisztika
  138. 4    9    Információ audio-csatornáról
  139. 5    130    Közvetlen meghajtó-vezérlés
  140. 6    5    Eszköz állapotának lekérdezése
  141. 7    4    Szektor-méret lekérdezése
  142. 8    5    Lemez-méret lekérdezése
  143. 9    2    Lemez-csere lekérdezése
  144. 10    7    Audio-lemez információ
  145. 11    7    Audio-sáv információ
  146. 12    11    Audio Q-Channel info
  147. 13    13    Audio Sub-Channel info
  148. 14    11    UPC Code beolvasása
  149. 15    11    Audio-állapot lekérdezése
  150. 16-255    ?    Fenntartott
  151.  
  152.  
  153.  
  154.   DEVICE HEADER CIMÉNEK LEKÉRDEZÉSE
  155.  
  156. DEVHEADERADDR    Offset    Típus    Érték    Mezô jelentése
  157.     00    DB    0    Parancs-kód
  158. *    01    DD    ?    A meghajtó device header-ének címe
  159. A funkció meghívásásakor az eszközmeghajtó a device-header címét helyezi a
  160. request-bufferbe.
  161.  
  162.   FEJ POZICIOJÅNAK LEKÉRDEZÉSE
  163.  
  164. LOCATIONOFHEAD    Offset    Típus    Érték    Mezô jelentése
  165.     00    DB    1    Parancs-kód
  166.     01    DB    ?    Címzési mód
  167. *    02    DD    ?    Az olvasófej pozíciója
  168. Az eszközmeghajtó fej pozícióját adja vissza a címzési módnak megfelelô formában.
  169.  
  170.   HIBA-STATISZTIKA LEKÉRDEZÉSE
  171.  
  172. ERRORSTATISTICS    Offset    Típus    Érték    Mezô jelentése
  173.     00    DB    3    Parancs-kód
  174. *    01    DB    N dup (?)    Hiba-statisztika
  175. A hiba-statisztikák még nem lettek definiálva.
  176.  
  177.  
  178.   AUDIO-CSATORNA INFORMÅCIO
  179.  
  180. AUDIO-CHNL INFO    Offset    Típus    Érték    Mezô jelentése
  181.     00    DB    4    Parancs-kód
  182. *    01    DB    ?    A 0. kimeneti csatornához kapcsolódó bementi  csatorna (0,1,2,3)
  183. *    02    DB    ?    A 0. kimeneti csatorna hangerôssége (0-255)
  184. *    03    DB    ?    A 1. kimeneti csatornához kapcsolódó bementi  csatorna
  185. *    04    DB    ?    A 1. kimeneti csatorna hangerôssége
  186. *    05    DB    ?    A 2. kimeneti csatornához kapcsolódó bementi  csatorna
  187. *    06    DB    ?    A 2. kimeneti csatorna hangerôssége
  188. *    07    DB    ?    A 3. kimeneti csatornához kapcsolódó bementi  csatorna
  189. *    08    DB    ?    A 3. kimeneti csatorna hangerôssége
  190. Az audio-csatornák aktuális állapotát kérdezi le. Alapbeállításban minden kimeneti
  191. csatornához a vele egyezô sorszámú bementi csatorna van hozzárendelve és minden
  192. csatorna hangereje maximális (255).
  193.  
  194.   KÖZVETLEN MEGHAJTO-VEZÉRLÉS (OLVASÅS)
  195.  
  196. DRVDIRECTCTRLI    Offset    Típus    Érték    Mezô jelentése
  197.     00    DB    5    Parancs-kód
  198. *    01    DB    ?    Åtvitt bájtok száma
  199. *    02    DB    128 DUP(?)    Adat-buffer
  200. E funkció és párja ( Write(IOCTL Ouput) - Közvetlen Meghajtó-vezérlés (írás) )
  201. használatával nyílik lehetôség közvetlenül a meghajtóval való kommunikációra. A
  202. funkció hívása után az átvitt bájtok számát a megfelelô mezô adja meg, ez azonban
  203. nem lépheti túl a 128 bájtot. Ennél több információ átvitele több egymás után
  204. funkcióhívás alkalmazásával lehetséges.
  205. A funkció alkalmazása és paraméterei teljesen eszközfüggôek, mindössze csak azért
  206. került definiálásra, hogy szabványos lehetôséget biztosítson a specifikációban nem
  207. definiált, de különbözô meghajtók által támogatott funkciók használatára.
  208.  
  209.   MEGHAJTO ÅLLAPOTÅNAK LEKÉRDEZÉSE
  210.  
  211. DEVICESTATUS    Offset    Típus    Érték    Mezô jelentése
  212.     00    DB    6    Parancs-kód
  213. *    01    DD    ?    Státusz
  214. Az eszközmeghajtó által visszaadott állapot-leíró bitjeinek jelentése a következô:
  215. Bit    Ha kikapcsolt  (0)    Ha  bekapcsolt  (1)
  216. 0    A meghajtó ajta be van csukva    A meghajtó ajta nyitva van
  217. 1    A meghajtó tálcája nyitható    A meghajtó tálcája zárva van (locked)
  218. 2    Csak cooked olvasást támogat    A raw olvasási módot is támogatja
  219. 3    Csak olvasható    Irható-olvasható
  220. 4    Csak adat-sávok elérését támogatja    Audio/video sávokat is kezel
  221. 5    Nem támogatja az äszektor-fésüléstö (interleaving)    Támogatja az interleaving-et
  222. 6    Fenntartott    -
  223. 7    Nem támogatja az elôre-olvasást (prefetching)    Támogatja az elôre-olvasást
  224. 8    Nem támogatja az audio-csatornák vezérlését    Támogatja az audi-csatorna manipulációkat
  225. 9    Csak a HSG címzési  módot támogatja    A HSG és a Red Book címzést is támogatja
  226. 10-31    Fenntartott    -
  227.  
  228.   SZEKTOR-MÉRET LEKÉRDEZÉSE
  229.  
  230. SECTORSIZE    Offset    Típus    Érték    Mezô jelentése
  231.     00    DB    7    Parancs-kód
  232.     01    DB    ?    Olvasási mód (cooked/raw)
  233. *    02    DW    ?    Szektor-méret
  234. A szektorméret CD-ROM esetében cooked módban 2048, míg raw módban 2352 bájt.
  235.  
  236.   LEMEZ-MÉRET LEKÉRDEZÉSE
  237.  
  238. VOLUMESIZE    Offset    Típus    Érték    Mezô jelentése
  239.     00    DB    8    Parancs-kód
  240. *    01    DD    ?    Lemez-méret (szektorokban)
  241. Az eszközmeghajtó a lemez TOC-jából (Table Of Contents - tartalomjegyzék)
  242. beolvassa a lead-out track (lásd késôbb) pozícióját és ezt adja vissza a lemezen
  243. található szektorok számaként.
  244.  
  245.  
  246.  
  247.   LEMEZ-CSERE  LEKÉRDEZÉSE
  248.  
  249. MEDIACHANGE    Offset    Típus    Érték    Mezô jelentése
  250.     00    DB    9    Parancs-kód
  251. *    01    DB    ?    Lemez-csere állapotkód
  252. Az eszközmeghajtó által visszadott állapotkód értelmezése:
  253. Érték    Jelentés
  254. 0    Nem történt lemez-csere
  255. 1    Nem állapítható meg lemezcsere
  256. 255 (-1)    Lemez-csere történt
  257.  
  258.   AUDIO LEMEZ-INFORMÅCIOK  LEKÉRDEZÉSE
  259.  
  260. AUDIODISKINFO    Offset    Típus    Érték    Mezô jelentése
  261.     00    DB    10    Parancs-kód    
  262. *    01    DB    ?    Legalacsonyabb sáv-sorszám    
  263. *    02    DB    ?    Legmagasabb sáv-sorszám    
  264. *    03    DD    ?    A lead-out track kezdôpozíciója (Red Book formátumban!)    
  265. Az eszközmeghajtó a lemez lead-in (legelsô) sávjából beolvasott információkat adja 
  266. vissza. A sávsorszámok mind bináris értékek (nem BCD), a lead-out track pozíciója 
  267. pedig Red Book formátumú cím.
  268.  
  269.   AUDIO-SÅV  INFORMÅCIOK  LEKÉRDEZÉSE
  270.  
  271. AUDIOTRACKINFO    Offset    Típus    Érték    Mezô jelentése    
  272.     00    DB    11    Parancs-kód    
  273.     01    DB    ?    Sáv száma    
  274. *    02    DD    ?    A sáv kezdôpozíciója (Red Book formátumban!)    
  275. *    06    DB    ?    Sáv-típus    
  276. Az eszközmeghajtó a megadott sáv kezdôpozícióját adja vissza 
  277. Red Book formátumban. A sáv-típus értelmezése a  következô:
  278.  
  279.  
  280. Bitmaszk    Jelentés
  281. 00x00000    2-csatornás,  hangkiemelés nélkül
  282. 00x10000    2-csatornás,  hangkiemeléssel (pre-emphasis)
  283. 10x00000    4-csatornás,  hangkiemelés nélkül
  284. 10x10000    4-csatornás,  hangkiemeléssel
  285. 01x00000    adat-sáv
  286.  
  287. Bitmaszk    Jelentés
  288. 01x10000    fenntartott
  289. 11xx0000    fenntartott
  290. xx0x0000    digitális másolás tilos
  291. xx1x0000    digitális másolás engedélyezv
  292.  
  293.  
  294.   AUDIO Q-CSATORNA INFORMÅCIOK  LEKÉRDEZÉSE
  295.  
  296. AUDIOQCHNLINFO    Offset    Típus    Érték    Mezô jelentése
  297.     00    DB    12    Parancs-kód    
  298. *    01    DB    ?    Control és Adr bájt (halvány lila gôzöm sincs, hogy ez mi)    
  299. *    02    DB    ?    Sávszám    
  300. *    03    DB    ?    Index (essemtommi)    
  301. *    04    DB    ?    MIN (Lejátszási pozíció a sávon belül)    
  302. *    05    DB    ?    SEC    
  303. *    06    DB    ?    FRAME    
  304. *    07    DB    0    Fenntartott    
  305. *    08    DB    ?    PMIN (Lejátszási pozíció a lemezen)    
  306. *    09    DB    ?    SEC    
  307. *    0A    DB    ?    FRAME    
  308.  
  309.  
  310. E funkció segítségével állapítható meg, hogy hol tart az audio-sáv lejátszása. 
  311. A visszaadott a sávon elejéhez képesti relatív ill abszolút pozíció mezôi a 
  312. Red Book címzésnek megfelelôen értelmezendôk.
  313.  
  314.   AUDIO SUB-CHANNEL  INFORMÅCIOK  LEKÉRDEZÉSE
  315.  
  316. SUBCHNLINFO    Offset    Típus    Érték    Mezô jelentése    
  317.     00    DB    13    Parancs-kód    
  318.     01    DD    ?    Kezdô frame címe (Red Book!)    
  319.     05    DD    ?    Åtviteli cím    
  320.     09    DD    ?    Beolvasandó szektorok száma    
  321. Az eszközmeghajtó a megadott kezdôpozíciótól kezdve szektoronként 96 bájt 
  322. nyers sub-channel információt olvas be a memóriába a megadott átviteli címre.
  323.  
  324.  
  325.   UPC KOD BEOLVASÅSA
  326.  
  327. SUBCHNLINFO    Offset    Típus    Érték    Mezô jelentése    
  328.     00    DB    14    Parancs-kód    
  329. *    01    DB    ?    Control és Adr bájt (lásd fent)    
  330. *    02    DB    7 DUP(?)    UPC/EAN kód    
  331.     03    DB    0    Fenntartott    
  332. *    04    DB    ?    AFrame    
  333.  
  334. A funkció a CD-meghajtóban található lemez UPC-ját (Universal Product Code -
  335. Egyedi Termék Azonosító, magyarul katalogizálási szám) adja vissza. Az UPC 13
  336. darab számjegybôl áll, melyek mindegyike 4 biten van kódólva, így az UPC utolsó 
  337. 4 bitje mindig 0. Amennyiben a lemezen nem található UPC bejegyzés Sector Not 
  338. Found hibakódot kapunk vissza.
  339.  
  340.   AUDIO STÅTUSZ LEKÉRDEZÉSE
  341.  
  342. AUDIOSTATUS    Offset    Típus    Érték    Mezô jelentése    
  343.     00    DB    15    Parancs-kód    
  344. *    01    DW    ?    Audio-státusz (0. bit lejátszás felfüggesztve, 1.-15. fenntartva)    
  345. *    03    DD    ?    Az utolsó Play v. a következô Resume (lásd késôbb) kezôpozíciója    
  346. *    07    DD    ?    Az utolsó Play v. a következô Resume végpozíciója    
  347.  
  348. Phuuuuu... Akinek kicsit sok az tanulmányozgassa a PWRCD090.ZIP fájl tartalmát 
  349. illetve az eszközmeghajtókról szóló elôzô részeket. Legközelebb folytatjuk...
  350.  
  351.  
  352.                           - STING -
  353.                    eMail: PC-XUSER@IDG.HU, Subject: "Rendszerprogramozás rovat"