home *** CD-ROM | disk | FTP | other *** search
- RENDSZERPROGRAMOZÅS
- A DOS ÉS SZOLGÅLTATÅSAI - X.
-
- A CD-meghajtó programozása
-
- A Microsoft CD-ROM Extension (MSCDEX) a DOS egy olyan bôvítése ami
- lehetôvé teszi mind High Sierra, mind ISO-9660 formátumú CD-ROM lemezek
- olvasását. Az alkalmazásokkal való kompatibilitást biztosítandó azok a CD-ROM
- lemezt úgy älátjákö, mintha az egy szokványos mágneses tároló (pl. floppy,
- winchester) lenne.
- A teljes CD-rendszer két komponensbôl áll: a CD-meghajtóval szállított
- hardware-függô eszközmeghajtóból (pl. SJCDAPI.SYS) és az MSCDEX.EXE nevû
- eszközfüggetlen programból. Az elôbbi program olyan elemei mûveletek
- elvégzésére képes, mint a fej mozgatása, egy szektor olvasása/írása, vagy a
- meghajtó állapotának lekérdezése (pl. van -e lemez az egységben), míg utóbbi egy
- IFS (Installable File System - telepíthetô file-rendszer), ami äemészthetôvéö teszi a
- CD-lemezeket a DOS számára.
-
-
- AZ ESZKÖZMEGHAJTO
-
- Az MSCDEX program nem közvetlenül, hanem az eszközmeghajtón keresztül
- kommunikál a CD-ROM meghajtóval. Ez lehetôvé teszi különbözô
- eszközmeghajtók alkalmazásával különbözô fizikai karakterisztikájú és illesztési
- módú CD-meghajtók egységes kezelését az MSCDEX szintjén. Az eszközmeghajtó
- feladata a standard MSCDEX parancsok älefordításaö a hardver (a CD-ROM
- meghajtó) számára, ilyen szinten elrejti az MSCDEX elôl, hogy valójában milyen
- meghajtó is van a gépben.
- Az eszközmeghajtó a CONFIG.SYS-ben kerül betöltésre mint akármelyik
- másik eszközmeghajtó. A szintaxis a következô:
-
- DEVICE = <filenév> /D: <eszköznév> /N: <meghajtók száma>
-
- A megadott eszköznevet át kell adni majd az MSCDEX számára is annak
- indításakor, hogy az megtalálhassa a CD eszközmeghajtóját és kommunikálni
- tudjon vele. Az eszközmeghajtó egy ill. több CD-ROM meghajtó használatát is
- támogathatja. Elôbbi esetben a /N kapcsoló elhagyható, de több meghajtó
- használata esetén minden egyes meghajtónak külön <eszköznev>-et kell adni.
-
- A DOS az eszközmeghajtóval (mint minden más device driverrel is) ún.
- IOCTL parancsok segítségével kommunikál.
- Az érvényes parancskódok a következôk:
-
-
-
- Kód Jelentés
- 0 INIT
- 1 MEDIA CHECK
- 2 BUILD BPB
- 3 IOCTL INPUT
- 4 INPUT
- 5 NON-DESTRUCTIVE INPUT NO-WAIT
- 6 INPUT STATUS
- 7 INPUT FLUSH
- 8 OUTPUT
- 9 OUTPUT WITH VERIFY
- 10 OUTPUT STATUS
- 11 OUTPUT FLUSH
- 12 IOCTL INPUT
- 13 DEVICE OPEN
- 14 DEVICE CLOSE
- 15 REMOVABLE MEDIA
- 16 OUTPUT UNTIL BUSY
- 128 READ LONG
- 130 READ LONG PREFETCH
- 131 SEEK
- 132 PLAY AUDIO
- 133 STOP AUDIO
- 134 WRITE LONG
- 135 WRITE LONG VERIFY
- 135 RESUME AUDIO
-
- A Microsoft az MSCDEX kidolgozásakor specifikált egy minimális, minden - az
- MSCDEX-szel kompatiblis - CD-ROM eszközmeghajtók által ismert és értelmezett
- utasításcsoportot (magyarul, amelyik eszközmeghajtó ezeket nem tudja avval nem -
- vagy legalábbis nem helyesen - mûködik az MSCDEX). A minimális CD-ROM
- eszközmeghajtó Cooked Mode 1-ben (lásd késôbb) adatszektorok olvasására képes
- HSG címzéssel (lásd késôbb) és megfelelôen kezeli az IOCTL hívásokat. Az
- eszközmeghajtók által minimálisan ismertnek feltételezett parancsok és
- paraméterezésük a következô.
-
- INIT
-
- Parancskód = 0
- ES:BX = «INIT
-
- INIT Offset Típus Érték Mezô jelentése
- 00 DB 13 dup (?) request header
- 0D DB 0 az alegységek száma (0)
- * 0E DD ? végcím
- */- 12 DD ? mutató a BPB-re/parancssori paraméterek
- 16 DB 0 blokk-egységszám
- * az eszközmeghajtó állítja be a funkcióhívás alatt
-
- Ezt a funkciót a DOS (nem az MSCDEX) csak egyszer, az eszköz installálásakor
- (az eszközmeghajtó betöltésekor) hívja meg. Ez az egyetlen CD-ROM
- eszközmeghajtó-parancs amit maga a DOS ad ki (normális esetben); a többit
- mindig az MSCDEX vagy a felhasználói programok használják.
- Az végcímet a hívás során az eszközmeghajtónak kell beállítani a rezidenssé tenni
- kívánt rész méretének megfelelôen. A funkció hívásakor eszközmeghajtó
- paramétereire (a DEVICE= ill. DEVICEHIGH= utáni karakterekre) a BPB (BIOS
- Parameter Block) pointer mutat. Ez lehetôséget nyújt az eszközmeghajtó számára
- esetleges parancssori paraméterek átvételére. Az inicializálás alatt az
- eszközmeghajtónak - az esetleges paramétereknek megfelelôen - be kell állítania
- device header-jében az eszközmeghajtó nevet.
-
- READ (IOCTL INPUT)
-
- Parancskód = 3
- ES:BX = «IOCTLI
-
- IOCTLI Offset Típus Érték Mezô jelentése
- 00 DB 13 dup (?) request header
- 0D DB 0 média-leíró bájt a BPB-bôl
- * 0E DD ? átviteli cím
- 12 DW ? átvivebdô bájtok száma
- 14 DW 0 kezdô szektor
- 16 DD 0 mutató a volume ID-re 0f hiba esetén
-
- A média-leíró, kezdô szektor és volume ID mezôk tartalma mind 0. Az átviteli cím
- egy vezérlô-blokkra (control block) mutat, amin keresztül az eszközmeghajtóval
- kommunikálhatunk. A felépítése a következô:
-
- CDIREQBUF Offset Típus Érték Mezô jelentése
- 00 DB ? végrehajtandó parancs kódja
- 01 DB n dup(?) a parancs paraméterei
-
- A parancskódok, a szükséges Request Buffer mérete (IOCTLI rekord äátvivendô
- bájtok számaö mezôje) és jelentéseik a következôk:
-
-
-
- Kód Méret Jelentés
- 0 5 Device Header címének lekérdezése
- 1 6 Fej pozíciójának lekérdezése
- 2 ? Fenntartott
- 3 ? Hiba-statisztika
- 4 9 Információ audio-csatornáról
- 5 130 Közvetlen meghajtó-vezérlés
- 6 5 Eszköz állapotának lekérdezése
- 7 4 Szektor-méret lekérdezése
- 8 5 Lemez-méret lekérdezése
- 9 2 Lemez-csere lekérdezése
- 10 7 Audio-lemez információ
- 11 7 Audio-sáv információ
- 12 11 Audio Q-Channel info
- 13 13 Audio Sub-Channel info
- 14 11 UPC Code beolvasása
- 15 11 Audio-állapot lekérdezése
- 16-255 ? Fenntartott
-
-
-
- DEVICE HEADER CIMÉNEK LEKÉRDEZÉSE
-
- DEVHEADERADDR Offset Típus Érték Mezô jelentése
- 00 DB 0 Parancs-kód
- * 01 DD ? A meghajtó device header-ének címe
- A funkció meghívásásakor az eszközmeghajtó a device-header címét helyezi a
- request-bufferbe.
-
- FEJ POZICIOJÅNAK LEKÉRDEZÉSE
-
- LOCATIONOFHEAD Offset Típus Érték Mezô jelentése
- 00 DB 1 Parancs-kód
- 01 DB ? Címzési mód
- * 02 DD ? Az olvasófej pozíciója
- Az eszközmeghajtó fej pozícióját adja vissza a címzési módnak megfelelô formában.
-
- HIBA-STATISZTIKA LEKÉRDEZÉSE
-
- ERRORSTATISTICS Offset Típus Érték Mezô jelentése
- 00 DB 3 Parancs-kód
- * 01 DB N dup (?) Hiba-statisztika
- A hiba-statisztikák még nem lettek definiálva.
-
-
- AUDIO-CSATORNA INFORMÅCIO
-
- AUDIO-CHNL INFO Offset Típus Érték Mezô jelentése
- 00 DB 4 Parancs-kód
- * 01 DB ? A 0. kimeneti csatornához kapcsolódó bementi csatorna (0,1,2,3)
- * 02 DB ? A 0. kimeneti csatorna hangerôssége (0-255)
- * 03 DB ? A 1. kimeneti csatornához kapcsolódó bementi csatorna
- * 04 DB ? A 1. kimeneti csatorna hangerôssége
- * 05 DB ? A 2. kimeneti csatornához kapcsolódó bementi csatorna
- * 06 DB ? A 2. kimeneti csatorna hangerôssége
- * 07 DB ? A 3. kimeneti csatornához kapcsolódó bementi csatorna
- * 08 DB ? A 3. kimeneti csatorna hangerôssége
- Az audio-csatornák aktuális állapotát kérdezi le. Alapbeállításban minden kimeneti
- csatornához a vele egyezô sorszámú bementi csatorna van hozzárendelve és minden
- csatorna hangereje maximális (255).
-
- KÖZVETLEN MEGHAJTO-VEZÉRLÉS (OLVASÅS)
-
- DRVDIRECTCTRLI Offset Típus Érték Mezô jelentése
- 00 DB 5 Parancs-kód
- * 01 DB ? Åtvitt bájtok száma
- * 02 DB 128 DUP(?) Adat-buffer
- E funkció és párja ( Write(IOCTL Ouput) - Közvetlen Meghajtó-vezérlés (írás) )
- használatával nyílik lehetôség közvetlenül a meghajtóval való kommunikációra. A
- funkció hívása után az átvitt bájtok számát a megfelelô mezô adja meg, ez azonban
- nem lépheti túl a 128 bájtot. Ennél több információ átvitele több egymás után
- funkcióhívás alkalmazásával lehetséges.
- A funkció alkalmazása és paraméterei teljesen eszközfüggôek, mindössze csak azért
- került definiálásra, hogy szabványos lehetôséget biztosítson a specifikációban nem
- definiált, de különbözô meghajtók által támogatott funkciók használatára.
-
- MEGHAJTO ÅLLAPOTÅNAK LEKÉRDEZÉSE
-
- DEVICESTATUS Offset Típus Érték Mezô jelentése
- 00 DB 6 Parancs-kód
- * 01 DD ? Státusz
- Az eszközmeghajtó által visszaadott állapot-leíró bitjeinek jelentése a következô:
- Bit Ha kikapcsolt (0) Ha bekapcsolt (1)
- 0 A meghajtó ajta be van csukva A meghajtó ajta nyitva van
- 1 A meghajtó tálcája nyitható A meghajtó tálcája zárva van (locked)
- 2 Csak cooked olvasást támogat A raw olvasási módot is támogatja
- 3 Csak olvasható Irható-olvasható
- 4 Csak adat-sávok elérését támogatja Audio/video sávokat is kezel
- 5 Nem támogatja az äszektor-fésüléstö (interleaving) Támogatja az interleaving-et
- 6 Fenntartott -
- 7 Nem támogatja az elôre-olvasást (prefetching) Támogatja az elôre-olvasást
- 8 Nem támogatja az audio-csatornák vezérlését Támogatja az audi-csatorna manipulációkat
- 9 Csak a HSG címzési módot támogatja A HSG és a Red Book címzést is támogatja
- 10-31 Fenntartott -
-
- SZEKTOR-MÉRET LEKÉRDEZÉSE
-
- SECTORSIZE Offset Típus Érték Mezô jelentése
- 00 DB 7 Parancs-kód
- 01 DB ? Olvasási mód (cooked/raw)
- * 02 DW ? Szektor-méret
- A szektorméret CD-ROM esetében cooked módban 2048, míg raw módban 2352 bájt.
-
- LEMEZ-MÉRET LEKÉRDEZÉSE
-
- VOLUMESIZE Offset Típus Érték Mezô jelentése
- 00 DB 8 Parancs-kód
- * 01 DD ? Lemez-méret (szektorokban)
- Az eszközmeghajtó a lemez TOC-jából (Table Of Contents - tartalomjegyzék)
- beolvassa a lead-out track (lásd késôbb) pozícióját és ezt adja vissza a lemezen
- található szektorok számaként.
-
-
-
- LEMEZ-CSERE LEKÉRDEZÉSE
-
- MEDIACHANGE Offset Típus Érték Mezô jelentése
- 00 DB 9 Parancs-kód
- * 01 DB ? Lemez-csere állapotkód
- Az eszközmeghajtó által visszadott állapotkód értelmezése:
- Érték Jelentés
- 0 Nem történt lemez-csere
- 1 Nem állapítható meg lemezcsere
- 255 (-1) Lemez-csere történt
-
- AUDIO LEMEZ-INFORMÅCIOK LEKÉRDEZÉSE
-
- AUDIODISKINFO Offset Típus Érték Mezô jelentése
- 00 DB 10 Parancs-kód
- * 01 DB ? Legalacsonyabb sáv-sorszám
- * 02 DB ? Legmagasabb sáv-sorszám
- * 03 DD ? A lead-out track kezdôpozíciója (Red Book formátumban!)
- Az eszközmeghajtó a lemez lead-in (legelsô) sávjából beolvasott információkat adja
- vissza. A sávsorszámok mind bináris értékek (nem BCD), a lead-out track pozíciója
- pedig Red Book formátumú cím.
-
- AUDIO-SÅV INFORMÅCIOK LEKÉRDEZÉSE
-
- AUDIOTRACKINFO Offset Típus Érték Mezô jelentése
- 00 DB 11 Parancs-kód
- 01 DB ? Sáv száma
- * 02 DD ? A sáv kezdôpozíciója (Red Book formátumban!)
- * 06 DB ? Sáv-típus
- Az eszközmeghajtó a megadott sáv kezdôpozícióját adja vissza
- Red Book formátumban. A sáv-típus értelmezése a következô:
-
-
- Bitmaszk Jelentés
- 00x00000 2-csatornás, hangkiemelés nélkül
- 00x10000 2-csatornás, hangkiemeléssel (pre-emphasis)
- 10x00000 4-csatornás, hangkiemelés nélkül
- 10x10000 4-csatornás, hangkiemeléssel
- 01x00000 adat-sáv
-
- Bitmaszk Jelentés
- 01x10000 fenntartott
- 11xx0000 fenntartott
- xx0x0000 digitális másolás tilos
- xx1x0000 digitális másolás engedélyezv
-
-
- AUDIO Q-CSATORNA INFORMÅCIOK LEKÉRDEZÉSE
-
- AUDIOQCHNLINFO Offset Típus Érték Mezô jelentése
- 00 DB 12 Parancs-kód
- * 01 DB ? Control és Adr bájt (halvány lila gôzöm sincs, hogy ez mi)
- * 02 DB ? Sávszám
- * 03 DB ? Index (essemtommi)
- * 04 DB ? MIN (Lejátszási pozíció a sávon belül)
- * 05 DB ? SEC
- * 06 DB ? FRAME
- * 07 DB 0 Fenntartott
- * 08 DB ? PMIN (Lejátszási pozíció a lemezen)
- * 09 DB ? SEC
- * 0A DB ? FRAME
-
-
- E funkció segítségével állapítható meg, hogy hol tart az audio-sáv lejátszása.
- A visszaadott a sávon elejéhez képesti relatív ill abszolút pozíció mezôi a
- Red Book címzésnek megfelelôen értelmezendôk.
-
- AUDIO SUB-CHANNEL INFORMÅCIOK LEKÉRDEZÉSE
-
- SUBCHNLINFO Offset Típus Érték Mezô jelentése
- 00 DB 13 Parancs-kód
- 01 DD ? Kezdô frame címe (Red Book!)
- 05 DD ? Åtviteli cím
- 09 DD ? Beolvasandó szektorok száma
- Az eszközmeghajtó a megadott kezdôpozíciótól kezdve szektoronként 96 bájt
- nyers sub-channel információt olvas be a memóriába a megadott átviteli címre.
-
-
- UPC KOD BEOLVASÅSA
-
- SUBCHNLINFO Offset Típus Érték Mezô jelentése
- 00 DB 14 Parancs-kód
- * 01 DB ? Control és Adr bájt (lásd fent)
- * 02 DB 7 DUP(?) UPC/EAN kód
- 03 DB 0 Fenntartott
- * 04 DB ? AFrame
-
- A funkció a CD-meghajtóban található lemez UPC-ját (Universal Product Code -
- Egyedi Termék Azonosító, magyarul katalogizálási szám) adja vissza. Az UPC 13
- darab számjegybôl áll, melyek mindegyike 4 biten van kódólva, így az UPC utolsó
- 4 bitje mindig 0. Amennyiben a lemezen nem található UPC bejegyzés Sector Not
- Found hibakódot kapunk vissza.
-
- AUDIO STÅTUSZ LEKÉRDEZÉSE
-
- AUDIOSTATUS Offset Típus Érték Mezô jelentése
- 00 DB 15 Parancs-kód
- * 01 DW ? Audio-státusz (0. bit lejátszás felfüggesztve, 1.-15. fenntartva)
- * 03 DD ? Az utolsó Play v. a következô Resume (lásd késôbb) kezôpozíciója
- * 07 DD ? Az utolsó Play v. a következô Resume végpozíciója
-
- Phuuuuu... Akinek kicsit sok az tanulmányozgassa a PWRCD090.ZIP fájl tartalmát
- illetve az eszközmeghajtókról szóló elôzô részeket. Legközelebb folytatjuk...
-
-
- - STING -
- eMail: PC-XUSER@IDG.HU, Subject: "Rendszerprogramozás rovat"