Egy cikk az XCD-ről, mellyel egy 74'-es CD-re 738MB-ot lehet írni:
Már egy ideje foglalkoztat, hogy, hogyan lehetne VideCD-hez hasonlóan , bármilyen adatból CD-t írni, pl: avi -ból. Hiszen így 738 MB -ot is fel lehetne nyomatni egy CD-re. Hosszas keresgélés után végre megtaláltam amit kerestem, amit úgy hívnak hogy

CD (Mode2 Form2). Ezt a szabványt kifejezetten a DivX -es filmekre "fejlesztették" ki, de használhatjuk bármilyen más típusú adatra is, aminek kicsi a hiba érzékenysége ( ez alatt azt értem ,hogy egy két kisebb hiba nem okoz különösebb gondot vagy minőség romlást ) pl: mp3, mpeg, ogg, rawaudio ... De amit így nem ajánlott tárolni azok a programok, mert egyetlen bit megváltozása is végzetes lehet.
De mégis, hogy fér rá egy 74 perces CD-re 738 MB- ?
Most egy kis elmélet következik a CD-ROM-ok adatszerkezeti felépítéséről:
Minden CD-ROM alapja a CD-DA (AudioCD). Egy 74 perces perces CD-n 333000 szektor van. Minden egyes szektorban 3234 bájt található, melyből 2352 a tényleges audio adat (333000*2352 = 747M

, mellette helyet kapnak a hibajavító és egyéb bájtok ( ez így nem egészeh korrekt, de most nem is ez a lényeg).
Adat CD esetében azonban nem volt elegendő ez a fajta hibajavítás ,ezért kiegészítették un. másodszintű hibajérzékelő és - detektáló bájtokkal, ezért egy 74 perces CD-re csak 650 MB adat fér el.
Az adat CD struktúrája:
Mindegyik szektor 2352 bájtot foglal magába. Az első 12 bájt(hexában: 00 FF FF FF FF FF FF FF FF FF FF 00 ) a szinkron terület ami arra szolgál, hogy a CD-ROM meghajtó megtalálja a szektorok elejét ,a következő 4 bájt a header terület, melyből a az első 3 a szektor sorszámát (címét) adja meg és a negyedik pedig a módot határozza meg: Mode1 vagy Mode2.
Mode1 esetén a sor így folytatódik 2048 adat bájt (ez a tényleges adat mező, ahova adataink kerülnek), majd 4 EDC (error detection code = hiba érzékelő kód) , 8 db üres mező (hexában :00 00 00 00 00 00 00 00) és végül 172 ECC P + 104 ECC Q (ECC: error correction code = hiba javító kód). Így 333000 szektor*2048 bájt = 681984000 bájt = 650 MB.
Mode2 esetén két verzió van:
Mode2 Form1 (M2F1): a header bájtok után találunk 2*4(a biztonság kedvéért 2*4, hexában pl : A3 00 01 F1 A3 00 01 F1) subheader bájtot, ami különféle információkat tartalmaz a szektorról, pl: Form1 vagy Form2 ,Video, Audio( ez nem az AudióCD-re vonatkozik), Adat ..., majd 2048 adat bájt , 4 EDC végül 172 ECC P + 104 ECC Q. Így ebben a módban is 650MB -ot tudunk felírni.
Mode2 Form2 (M2F2) esetén a 4 EDC a szektor végére kerül és a 276 ECC helyére is adatok kerülnek, ezért egy szektorban 2324 adat bájt található. Így 333000 szektor*2324 bájt = 773892000 bájt = 738 MB.
Azonban az ISO9660 szabványnak megfelelő CD-t nem lehet megírni teljes mértékben Mode2 Form2 (M2F2) formátumban, ugyanis ezt a szabvány nem támogatja (ha mégis így írsz meg egy CD-t akkor a Windows AudioCD-nek fogja felismerni, de nem tudod lejátszani ,mert ez nem AudioCD.) A megoldás az, hogy a Cd-eleje M2F1 ( itt található maga a fájl rendszer: ami a fájlok tulajdonságait tárolja pl.: méretük, a kezdő szektor címe , az attribútumok, a cd készítője ,a rendszer azonosító . . . stb.) ,a fájlok pedig M2F2 formátumúak ( ez az un.CD-I Bridge, a VideoCD és a SuperVideCD is ilyen), általában ezeket másik track-kekbe írják. Így van ez az XCD esetében is. Csakhogy hiányzik a másodszintű hibajavítás, és ha nagyobb hibák vannak a CD-n akkor bizony ez az adatok sérülését fogja okozni. Ebben az esetben csak az elsőszintű hibajavításra számíthatunk, amit az AudioCD-k használnak. (Igaz azt mondják: ha egy Audio CD-re 2mm-es jukat fúrunk az adatok akkor is hibátlanul visszanyerhetőek. MPEG estén egy két kisebb hiba nem okoz zavart ugyanis az mpeg adatfolyam alapból tartalmaz hibajavítást (ha jól tudom), nagyobb hibák esetén is csak annyi lesz a következmény , hogy néhol hibás lesz a kép, de ez nem jellemző.
Az XCD struktúrája lényegében megegyezik a (S)VCD-vel, de itt nem kötelezőek a könyvtárak és az Avseq*.dat fájlnév sem.
XCD-t a Mode2CDmaker nevű programmal tudunk csinálni ,amely valójában csak az image fájt készíti el, amit pl.: CDRWIN-nel, NERO -val vagy CloneCD-vel (az image fájl emulálása esetén) tudunk ki írni.
A parancssorba így kell beírni pl. (ha a film a Matrix.avi és a felirat a Matrix.sub):
-----
mode2cdmaker.exe -m Matrix.avi -o image -v MATRIX -e DAT -l -a -d dir -f Matrix.sub
-----
-v a (volume)-CD kötetcímke
-o az image fájl neve (*.bin, *.toc, *.cue)
-f fájlok hozzáadása Form1 -es formátumban pl: a felirat fájl
-m a film hozzáadása (Form2)
-d alkönyvtár hozzáadás
-e az M2F2 fájl kiterjesztését adja meg (alapértelmezésben a kiterjesztés dat lesz, és ezen NEM AJÁNLOTT változtatni, mert nem tudod lejátszani a filmet)
-l hosszú fájl nevek használata (ISO-9660 Level 2)
-a ASCII karakterek használata (ajánlott)
-x az eredeti fájlkiterjesztés megőrzése pl. :Matrix.avi >>>Matrix.avi.dat
( ha a fájl név tartalmaz szóközt, akkor használj helyette _ karaktert )
Az m2cdmgui.exe ennek a grafikus verziója, nekem csak XP allat működött, a Win98-hoz fel kell telepíteni bizonyos Visual Basic Runtime elemeket, amihez nem volt különösebb erőm hogy megkeressem és letöltsem a netről.
A dat2file.exe (parancssoros) a *.dat fájlokból az eredeti fájlt hivatott visszaállítani. Ami valójában annyit tesz hogy a *.dat elejéből lecsípi azt a 68 bájtot amit a szabvány miatt kell odailleszteni ( hülye egy szabvány

) . Azonban , ha valaki mégis azon tűnődne , hogy miért hosszabb az így visszakapott fájl mint az eredeti, annak azt tudom mondani, hogy a program kitölti a fájl végét annyi nulla bájttal, hogy az osztható legyen 2324-el (az a m2f2 szektorokban az adatbájtok méretével egyenlő). EZEK A NULLA BÁJTOK SEMMIRE NINCSENEK HATÁSSAL CSAK A SZABVÁNY MIATT KELLENEK
De ha le akarjuk játszni a filmet akkor ez a plusz 68 bájt (amely valójában nincs is ott a CD-n, csak a cdfs.vxd illeszt oda, szimulál) olymértékben zavarólag hathat, hogy nem tudjuk lejátszani a filmet, ezért kell feltelepíteni a riff-cdxa-filter-test6b-et, így a lejátszók nem foglalkoznak ezzel a 68 bájttal, de nem biztos, hogy minden lejátszó így jár el. Az alábbi programokkal, amelyekkel kipróbáltam (win98 /XP alatt) tökéletesen működött:
BSplayer --www.bsplayer.org-- ez a legprofibb
Zoomplayer --http://www.inmatrix.com/zplayer/
Windows Media Player 7
Csináltam egy tesztet, hogy a film tárolása így mennyire megbízható (másodszintű hibajavítás nélkül). Az Antitrust c. filmet (698235 132 bájt) írtam fel úgy, hogy CD Image Converter-rel a filmet átkódoltam >2324: Mode 2 Form 2 Data<-ról >2352: Raw Mode 2 Form2 < -re, majd az így kapott image fájlt felírtam cd-re ( így a windows csak DataCD-nek fogja felismerni, és egyetlen egy fájl sem látható rajta, mivel hiányzik az ISO9660 fájlrendszer). Az írás után a CD-t CloneCD-vel Raw Mode-ban felmásoltam a vinyóra (Raw olvasás esetén a meghajtó NEM HASZNÁL MÁSODSZINTŰ HIBAJAVÍTÁST ! ), majd a CD Image Converter-rel ezt az image fájt visszakódoltam >2324: Mode 2 Form 2 Data< -ra (a program nem használ hibajavítást) és összehasonlítottam az eredetivel. Az eredmény : 2 különböző bit. ( Ekkor még nem hallottam a Mode2CDmaker-ről. ) Azonban a Mode2CDmaker-rel készített CD-kről a filmet már fájlként olvastam vissza, így az eredmény : 0 hiba, ugyanis a M2F2 módban még ott van minden szektor végén 4 bájt EDC, és ha először hibásan olvasta be a meghajtó a szektort, akkor beolvassa újra ( a Subheader bájtok tartalmazhatnak egy bizonyos Real-time megjegyzést (be/ki), ami arra vonatkozik, hogy a meghajtó addig próbálkozhat az adatok újra beolvasásával ,amíg nincs szükség a következő adatra, így ha hibás a CD, akkor sem fog megakadni a lejátszás. Ilyenek a VideoCD-k is. ).
Néhány hasznos tanács:
Mielőtt kiírnád CD-re az image fájlt , előtte próbáld ki a Virtual Daemon-nal ( ez egy cd-rom emulátor ) és, ha minden hibátlan ,akkor mehet az írás( a legegyszerűbb módja ilyenkor CloneCD-vel ). Ja és első CD-nél még írd ki előtte újraírhatóra is - a biztonság kedvéért - mivel a Virtual Daemon nem tudja emulálnia CD megható fizikális működését és esetleg egyes (ősrégi) meghajtók nem tudják olvasni, vagy az is lehetséges, hogy a meghajtód sokat hibázik, és ezért a film tele lesz hibával vagy le is fagy.
Használj lassabb írási sebességet (4x -t), így könnyebben tudja olvasni a meghajtó a CD-t, ezáltal kisebb a hibalehetőség.
Tartsd tisztán a CD-ket.
Soha, de soha ne másolj Mode2 Form2 CD-t Raw módban !! És, hogy miért ne ? -nézd meg ezt ! CloneCD -vel Mode1 vagy Mode2 Form1 CD-knél, azonban van megoldás : jelöld be az "Adatszektorok helyreállítása" opciót. Azonban, ha másolásvédett CD-t másolsz, akkor NE, ugyanis sok másolásvédelem azon alapul, hogy előre meghatározott hibákat helyeznek le a CD -n, és az elindított program, lehet akár játék is, ezeket a hibákat fogja keresni.
Ennyi adatot tudsz felírni:
hossz (perc) | 74 | 80| 90 | 99 |
Mode1 v. 2f1 | 650 MB | 703 MB | 791 MB | 870 MB |
Mode2f2 | 738 MB | 798 MB | 897 MB | 987 MB |
Túlírással valamennyivel többet is lehet.
Az összes szükséges program egy fájlban : XCD.zip (167 K
A módszer hibalehetőségei és hátrányai: mivel, hogy az avi nem tartalmaz hibajavítást, ezért egyetlen egy hiba is nagy gondot okozhat, de ami alapvetően meghatározó az a hiba helye. Ha a hiba a fájl első 1-2KB-ban vagy az utolsó néhány MB-ban, ahol az indexelés található az bizony gond, de ennek az esélye viszonylag kicsi( nem vagyok nagy egy avi szakértő, éppen ezért, ha valaki most nagy hülyeséget fedezett volna fel, akkor azt feltétlenül jelezze). Használjátok az Anti-freeze (107 K

nevű programot, amely arra jó, hogy, ha hibás a film akkor nem fog lefagyni( ez Internetről hibásan letöltött filmek esetén is hatásos). Ha van egy hibás filmed, amelyik megakad, akkor azt lejátszhatóvá teheted a DivFix (115 K

-szel : először Strip Index (eltávolítja a fájl végéről az indexelést, ez annyit tesz, hogy nem tudsz belepörgetni a filmbe), majd Rebuild Index (létre hozza az indexelést és kijavítja a hibákat), de figyelem: ha a fájl tulajdonságait megnézed ,akkor a Windows érvénytelen formátumnak tekinti, és VirtualDub-bal nem tudod megnyitni, de legalább nem fog megakadni.
Ha van egy 700 MB -os filmet, akkor tiszta hülyeség M2F2 formátumban megírni.
Ha tudod magadról, hogy rendkívül igénytelenül bánsz a CD-iddel, akkor inkább felejtsd el az XCD-t, mert sok bosszúság érhet.
A módszer előnyei : mivel több adatot tudsz felírni egy cd-re, ezért minőségjavulást vagy hossznövekedést érhetsz el. A másik, tudom sokak számára ez röhejes és nem is igazi előny , de így a cd-rom meghajtó nem pörgeti úgy a lemezt, mint az állat (ez azoknak lehet hasznos akiknek LG 52x meghajtójuk van, mint pl.: nekem is, amelynek sajnos nem lehet beállítani a sebességet semmilyen programmal sem ).
Az igazi megoldás az lenne, ha a film eleje és a vége, ahol a fontos információk találhatók, M2F1-es szektorokban lennének. Így nem kéne attól tartani, hogy "invalid file format" üzenetet kapunk.
Hogyan ellenőrizhetjük, hogy a felírt adat hibátlan -e ?
A legegyszerűbb megoldás a következő: betöltöd az image fájlt a Virtual Deamon-ba, majd a Crccalc (136 K

nevű programmal generálsz egy crc kódot a virtuális cdmeghajtón található *.dat fájlból, utána generálsz egy crc kódot a CD-n található *.dat fájlból is, és összehasonlítod a két kapott kódot, ha egyeznek akkor az írás hibátlan volt.
"A bölcselet csupán költészete azoknak, mikről még nincsen fogalmunk" M.I.