Eserin
adı CD ve DVD Programlamak
Yazarlar Onur AYDIN Web Eposta Oğuz AYDIN Web Eposta
Grafik ve çizim Onur AYDIN
Kapak Onur AYDIN
Programlar Oğuz AYDIN
Editör Murat AYDIN
Yayın evi çağlar Ofset Adana
Sipariş Murat Aydın 322-4536262 , kargo dahil 25 liradır
Eser 571 sayfa, 30 bölüm, 353 tablo, 119 şekil, 241
örnek programdan meydana gelmiştir. örnek programlar eserin
ekinde 1 tane CD içerisinde bulunmaktadır.
Kapak hariç diğer sayfalar siyah beyazdır. En, boy, kalınlık = 21 x 30 x3 cm. 1560 gr ağırlığındadır.
Program listesi (numara sırasına göre)
Program listesi (amacına göre)
CD ve DVD
programlama isimli eserde yer alan
bazı önemli başlıklar
Lazer ışık CD ye nasıl yazar?
Bir CD trağının uzunluğu kaç kilo metredir?
CD diskler üzerine hangi formatlarda yazılabilir
Hangi formattaki sektör kaç bayttır?
Diskin hangi formatta yazıldığını nasıl anlarız?
Boş CD veya DVD disk gerçekten boş mudur?
Kopya koruma yazılımları nasıl çalışır? Bir CD üzerinde bulunan program kopyalanmaktan korunabilir mi?
Bir diskin örü nedir, nasıl saklanır, istenirse nasıl bozulur, bozuk disk ile neler yapılabilir?
Buffer underrun nedir? Zaman aşımı nedir?
Dos ve Windows altında MSCDEX ve ASPi kullanmak.
Lazer kafanın anlık koordinatları, odyo kanal bilgisi, sub kod bilgisi, cihazın tamponu, sektör uzunluğu, istek ve komut blokları.
Cihazın kapısı nasıl açılır / nasıl kapanır / nasıl kilitlenir / CD DVD dis sürücü cihaz nasıl resetlenir ? Program yazarak Nasıl anlarız?
Cihaz CD mi DVD mi? Nasıl anlaşılır? Bir CD dvd cihaz Video oynatır mı? odyo çalar mı? Yazar mı? Program yazarak Nasıl anlarız?
Şu anda cihazın kapısı açık mı / kapalı mı/ kilitli mi / cihazda disk varmı nasıl öğrenilir? Program yazarak Nasıl anlarız?
Disk boş mu? ne kadarı boş? içindeki dosyalar nedir ve hangi formatta yazılmıştır? Nasıl bir disktir?
Bir sektör nasıl okunur? Sektör okuma programları yazmak.
iDE arabirim, port programlamak, IOCTL istekleri, paket komutlar, diske yazmak....
CD ve DVD disklerin fiziksel ve kimyasal özellikleri, optik yapıları, anatomisi, mimarisi, bilginin yerleştirilmesi, formatı,
CD-ROM cihazların çalışma prensipleri ve programlanması akademik bir üslup ile anlatılmıştır.
Dikkat: Kitaptaki bütün programlar DOS altında assembler ve
QuickBasic ile yazılmıştır.
Windows altında çalıştırmak için kendi kullandığınız programlama diline çevirmeniz gerekir.
Bu eserin
öyküsü:
Bundan yaklaşık olarak 3 veya 4 sene önce CD ler için kopya
koruması yapan bir yöntem geliştirmek istedim. Müzik ve video
Cdleri izinsiz olarak çoğaltılamasın eser sahibinin alın teri
korunsun istedim.
Bu amaç ile birisi bilgisayar mühendisi (Onur Aydın) ve diğer bilgisayar programcısı (Oğuz Aydın) olan oğullarım ile birlikte CD-ROM cihazlarının ve CD/DVD disklerin yazılım ve fiziğine yönelik kapsamlı bir teknik inceleme başlattık.
Sonra gördük ki, eğer bir ses bilgisayarın hoparlörüne veya bir video görüntüsü bilgisayarın monitöre ulaşabiliyorsa oradan (capture programları ile) kolayca alınabilir. Bu basit mantık, izinsiz olarak odyo ve video kopyalamak isteyen şahısı, CD/ DVD diskteki kopya koruma engelinden korur. Eğer bu basit gerçeği önceden fark etseydik ne bu incelemeyi başlatır ne bu eseri yazardık.iyi ki bunu önceden fark etmemişiz.
CD ve DVD lerde kopya korumayı başaramayınca 3-4 sene boyunca topladığımız bilgileri bir kağıda yazarak 355 tablo 115 şekil 266 programdan oluşan bu eseri meydana getirdik.
Bu eserin bütün hikayesi bundan ibarettir.
Topladığımız bilgiler kaybolmasın, belki bizden sonra bu bilgiden istifade edip bir adım daha ileri götürmek isteyen birileri çıkabilir diyerek bildiklerimizi elinizdeki kağıda yazdık.
Hepsi bu. Siz sormadan ben anlattım...
Eserdeki sistematik:
Bilgiyi yerinden almak, öğrenmek, sindirmek, bir eşyayı yerinden yerinden alıp kaldırmak gibidir.
Yük, daima alttan tutulur. Ağır bir bilgiyi öğrenmek, ağır bir masayı kaldırmak gibidir. Yukarıdan tutamazsınız. Tutabilseniz bile kaldıramazsınız. Daima alttan tutulmalıdır. Bu sebeple bölüm içerisinde yer alan bilginin dibi, bölüm başında okuyucuya bildirilmiş, tutulacak yer(ler) işaret edilmiştir. Bölüm başlarını öncelikli okuyunuz. Neyi öğreneceğinizi öğrenirseniz, öğrenmek kolaylaşabilir. Tabi, hepsinden önce öğrenmeyi istemek lazımdır.
Bütün konular akademik derinlikte anlatılmıştır.
Siz arzu ettiğiniz kadarını alınız veya kullanınız
Eserin dili:
Bu eser okuyucu ile konuşur üslup kullanılarak yazılmıştır.
Eserin içerisinde okuyucu sanki karşımızdaki masada bir koltukta oturuyormuş gibi düşünerek yazdık. Eserin içerisinde "Bunun nasıl yapılacağını biliyor musunuz?" diye sormuş olabiliriz. Bu soruyu cevaplamanız için değil, biraz sonra neyi cevaplayacağımızı haber vermek için kullandık. Buna benzer şekilde eserin içerisinde "Bu nasıl olur?" veya "falanca bölümde ne yazdığımızı anımsıyor musunuz?" gibi sorular sorduk ve cevapladık.
Bu eser boyunca mümkün olduğu kadar Türkçe kelime kullanmaya gayret edilmiştir. Kelimelerin Türkçe karşılıklarını bulmak ve hatta Türkçe karşılıklarını bulmak için kaynak bulmakta bile zorlandığımızı itiraf ediyorum. Bu eser ne tam olarak Türkçe ne de tam olarak ingilizce terimlerden oluşmaktadır. Maalesef her iki lisanın hibritlenmiş melez bir üslubu ile yazmaya mecbur olduk. Bu konuda mutlu değilim(/z).
Bilgisayar terimleri Türkçe kökenli değildir. çünkü bilgisayar Türkiye'de doğmadı. Her kelime kendi doğduğu toplumsal yapının izlerini taşır. Bir kelimenin yapısal izlerini filitre edip başka bir lisana dönüştürmek anlam kayıplarına sebep olacaktır. Zaten hiç bir kelimenin, başka lisandaki tam karşılığı da tek bir kelime değildir.
örneğin "server" kelimesi hizmetçi, hizmet eden, belirli bir hizmeti yerine getiren anlamına karşılık gelir. Biz bu eserde server yerine hizmetçi yazsaydık ya hiç anlayamayacak veya öğrendiklerinizi başka yerde kullanamayacaktınız. Benzer şekilde configuration, network, carry biti, header gibi kelimeleri çevirmeden olduğu gibi yazdık.
interface kelimesini ara birim olarak, driver kelimesini sürücü olarak çevirebildik, benzer şekilde başka bazı terimleri Türkçe kullanabilme şansımız oldu. Keşke daha fazla Türkçe kelime kullanabilseydik.
Yazılar arasına okuyucunun dikkatini uyanık tutabilecek bazı resimler serpiştirdik. Bu resimler çiçek böcek resimleri olarak seçilmiştir.
Sıra dışı ve konudan alakasız görünen bu resimler; okuyucunun okurken yarım kaldığı yeri bulmasına kolaylık sağlamak ve gördüğü resim ile okuduğu bilgi arasında ilişki kurarak hatırlamasını kolaylaştırmak bakımından faydalı olur diye umuyoruz.
Şekil, tablo, ve programlar uluslar arası kurallara uyularak numaralandırılmıştır. ilk sayı bölüm numarasını, ikinci sayı bölüm içinde kaçıncı olduğunu gösterir. örneğin Tablo 27:04 yirmiyedinci bölümün baştan itibaren dördüncü tablosudur. Program 08:05, sekizinci bölümün baştan beşinci programıdır.
Bu eser, bilgisayar programlaması ile ilgilenen profesyoneller ve profesyonelleşen amatörler içindir.
Bu eser yeni başlayanlar için ağır görünse bile bilgisayar programcısı için eksik bile gelebilir. Bu eserden istifade edebilmek için önceden assembler biliyor olmak iyi olur.
Bizim yazarken esas aldığımız bu prensip diğer okuyucu kitlesinin bu kitaptan faydalanmasını ipotek etmez.
Bu eser neden
gereklidir:
CD
ve DVD diskler, genel basit anlamı ile plak, kaset veya disket benzeri
hayalet organlar olarak bilinir. Onları okuyup yazan C/DVD-ROM cihazlar
ise kapalı bir kutu olarak bilinir / satılır / kullanıma sunulur. Bir
çoğumuz bir diskin yüzeyinde üzerine yazı yazılan
tabakanın ne olduğunu, bir C/DVD-ROM cihazının nasıl
çalıştığını, nasıl okuma / yazma yaptığını, hangi komutlar
ile görev yaptığını bilmeyiz. Hazır programlara mahkum edilmiş,
mutlu tutsaklar gibiyizdir. Eğer C/DVD-ROM cihazı kullanan bir program
yazılması gerekiyorsa ücretini ödeyip dışarıdan ithal ederiz.
işte bu eser, programcıyı hazır paketlere tutsaklıktan kurtarmak için gereklidir. Bu eserdeki kavram, mekanizma ve programları esas alarak hiç bir paket programa, ithal ürüne ve hatta Windows'a bile ihtiyaç duymadan kendi programlarınızı yazabilirsiniz.
üretmek özgürlüktür. Bu eser, yazılım üretmek için gereklidir.
Bu eserin bir başka gereklililği de, eğer fakültelerimizde ders kitabı veya kaynak kitap olarak kabul edildiyse, veya baş vuru kitabı olarak benimsendiyse, eğitim ve öğretimde eş güdümü sağlamasıdır.
Bu eserde yeni olan
nedir:
ülkemizde CD ve DVD diskleri ve cihazları ve bunların
programlanmasını anlatan bir başka eser yoktur. Bu eser bu konuda bir
“ilk” tir.
ülkemizde bilgisayar ile ilgili her hangi bir konuyu bu eser kadar
kapsamlı ve akademik seviyede ele alıp inceleyen bir başka eser daha
yoktur. Bu eser bu konuda da bir “ilk” tir.
C/DVD programlamak gibi ağır ve profesyonel bir işlevi Assembler ve
Quick Basic gibi basit programlama dilleri ile gerçekleştiren
başka bir eser daha yoktur. Bu eser bu konuda da bir “ilk” tir.
(Yukarıdaki tespitlerimiz 03.08.2007 tarihi itibari iledir).
Eserde kullanılan
programlama dilleri:
Her programcının kendisini
yakın hissettiği bir programlama dili vardır. Bu dili kullanmaya
alışkındır ve o dilin ustasıdır. Biz sizin hangi dili tercih ettiğinizi
bilemeyiz.
Her okuyucunun kendi kullanmaya alışkın olduğu programlama diline en kolay şekilde çevirebilmesi için biz bu eserdeki örnek programlarımızı en eski ve en basit programlama dilleri ile yazdık.
Makine dili ve onun devamı olan Assembler, mikroişlemcinin kendi dilidir. Mikroişlemciye Assemblerdan daha yakın hiç bir programlama dili yoktur! Bütün programlama dilleri çalışırken assembler komutlarına dönüşür. Mikroişlemci ile onun kendi konuştuğu dil ile konuşmak bir üstünlük ve kudret arz eder. Bu sebeple örnek programların assembler ile yazılması adeta kaçınılmazdı. üstelik assembler derleyicileri piyasamızda bol ve dökümanları zengindir. Assembler bu gün favori olan C++ programlama dilinin de bir parçası gibidir. Assembler yazılmış olan bir Com program dosyası, her programlama diline bir alt rutin olarak kolayca monte edilebilir veya eşlenik komutlar kullanılarak başka dile dönüştürülebilir. Ayrıca TASM (Turbo Assembler) ve MASM (Macro Assembler) Linux, windows, Dos, BSD, QNX, ve MacOS işletim sistemleri altında rahat çalışır. çok sayıda dökümanı vardır. Bu sebeple bu eserde TASM derleyicisi tercih edildi. Nasıl kuıllanılacağı EK-C içerisinde anlatılmıştır. örnek programları yazmak için seçtiğimiz alternatif programlama dili Quick Basic'tir. Bu lisan içinde kullanılan neredeyse bütün komutların Visual Basic veya diğer dillerde bir karşılığı bulunduğu için ve ücretsiz elde edilebildiği için seçtik. Ayrıca Bölüm 7 içerisinde C programlama dili kullandık.
Daha temel, daha basit, daha bol dökümanı olan, daha kolay dönüştürülebilen başka bir dil bulsak onu seçecektik.
Her iki dil de kolay kullanılabilen, kolay bulunabilen, yeni başlayanlar dahil her kes tarafından kolayca anlaşılabilen, ücretsiz ve bol dökümanı bulunan, en eski ve en temel programlama dilleridir. isteseydik örnek programların hepsini Delphi, Visual basic veya C++ ile yazabilir, böylece sizi belirli bir programlama dilini kullanmaya sürüklerdik. Bunu yapmadık. örnek programların şimdi yaygın olarak kullanılan ve gelecekte favori olabilecek her programlama diline kolayca uyarlanması hedeflenmiştir.
Sizi belirli bir işletim sistemine muhtaç veya mahkum etmemek için biz dos ortamında çalıştık. Siz istiyorsanız Linux veya Win 32 işletim sisteminde çalışabilirsiniz.
Eserde yer alan
programlar:
Programların hepsi mutlaka denenmiştir, ve mutlaka çalışmaktadır.
Hepsi mutlaka çalıştırılmış, amacına uygun çalıştıktan sonra kopyala-yapıştır yöntemi ile esere dahil edilmiştir. Eğer burada verilen bir programı yazıp çalıştıramadıysanız, yanlış yazmış, ilave edilmesi istenen rutini eserin sonundaki sayfalardan alıp programın içerisine ilave etmemiş olabilirsiniz. Arzu edilen ve çalışmadığı düşünülen her program yazarlardan çalışır şekilde sipariş edilebilir.
Programları eserin içinden alıp bilgisayarınıza yazarken şunlara dikkat ediniz:
- DEĞiŞTiRiN yazan satırlardaki bilgiyi kendi bilgisayarınızın gerektirdiği bilgi ile değiştirin (veya değiştirebilirsiniz).
- Eser matbada basılırken sıkışan satırlar katlanıp alt satıra taşmış veya sarkmış olabilir. Taktir edersiniz ki bunu engelleme veya önceden kestirip size uyarı işareti koymaya imkanımız olamazdı. Bu sebeple kitaptaki programı kendi bilgisayarınıza aktarırken alt satıra sarkan komutlar konusunda uyanık olmanızda fayda vardır.
- Bir biti reset yapmak o biti 0 yapmaktır. Bir biti set yapmak o biti 1 yapmaktır
- Flag yerine bayrak kelimesi (bazen) kullanılmıştır Flag iteral anlamı ile ve eserdeki anlamı ile bayrak kelimesine zaten eşittir.
- Verilen bir sayı b harfi ile bitiyorsa binary, h harfi ile bitiyorsa heksa desimal, hiç bir harf ile bitmiyorsa yani sadece rakamlardan oluşuyorsa desimaldir.
- Programları teker teker açıklayıcı satırlara bölerek yazmamız acemilikten değildir. Anlaşılmayı kolaylaştırmak içindir.
- Bu sebeple, bu eserde sayfalar dolusu devam eden her program derlendiiği zaman en çok 10 Kb kadar küçük bir COM dosyaya dönüşür.
- Eğer bir tabloda çift soru işareti (??) görüyorsanız, oraya bir baytlık bir sayı girmeniz istenecek demektir.
- RAM içerisinde belirli bir noktanın (baytın) adresi verilirken önce 2 baytlık segment adresi, daha sonra 2 baytlık ofset adresi yazılır. Toplam olarak 4 baytlık adres belirten sayılara vektör ismi verilir. (örneğin 0123:4567 vektörü = 123.üncü segmentin 4567.inci baytını gösterir).
- DVD'ler sistematik olarak CD den daha kolaydır ve DVDleri anlamak için önce CDleri anlamak şarttır. Bu sebeple bütün programlar (ve eser) CD merkezli yazılmıştır.
- Bu eser windows ile çalışın diye yazılmadı. Bu eser sizi tüketime sevk edecek her şeyden kurtulmanız için yazıldı. Bazı programların windows altında çalışmayacakları programın veya bölümün başında uyarılmıştır. Uyarısı yapılmış programların windows altında çalışmasında ısrar ediyorsanız autoexec.bat dosyanıza LOCK komutu ilave ediniz. Ayrıca programlar esnek hazırlanmıştır. Böyle durumlarda programdaki komutları eşlenik komutlar ile değiştirip, başka bir dile taşımak da bir başka çözümdür.
- Eserde anlattığımız bir konu hakkında bir örnek program yazdıysak neredeyse her örnek programı 2 farklı dilde yazıp sizlere sunduk. Ayni örnek programı çift bulacaksınız. Böylece verdiğimiz kaynak kodları her okuyucu kendisine yakın olduğu lisana kayıpsız çevirebilsin istedik.
- Program çalıştırıldığında bir ekran çıktısı veriyorsa, örnek programın hemen altına ekran çıktısını verdik. Böylece programın muhtemel ekran çıktısı konusunda okuyucuyu temin etmiş olduk.
Uluslararası standart uyuşmazlığı
Bu eser için inceleme yapmadan önce ben bu işlerin daha ciddi yapıldığını zannederdim.
Gözlerinizi kapatıp düşünün.... insanlar bir otelin gazinosunda toplanıyorlar, uluslar arası teknolojik bir standart belirliyorlar, sonra da, bu standarta o sırada bulundukları otelin adını veriyorlar. Bizler dahil bütün dünya High Sierra standardı olarak bu terimi kullanıyoruz ve bu standardı kıble kabul eden programlar yazmak zorunda kalıyoruz. Bir uluslar arası CD ve DVD yazım formatına Kayseri oteli formatı dendiğini bir düşünsenize?
CD ve DVD standartları arenasında, sayısız tutarsızlık vardır. Eserin içerisinde yeri geldikçe altları çizilecektir. Bakın sizlere tespit ettiklerimizin içerisinde anımsayabildiğimiz bazı çelişjileri ifade edelim:
zzCD ve DVDler ile çalışırken öğreneceğiniz gibi, zaman esaslı adresler cihaza gönderilirken (veya cihazdan dönen bilgi okunurken), önce blok, sonra saniye sonra dakika yer alır. Halbuki, Int 2Fh AX=1510h Komut kodu=03 input kodu=0Ch cihaza gönderilirken önce dakika, sonra saniye, sonra blok gönderilir. input kodu=0Dh için bu sıralama tam tersidir. Bu kural, bütün komutların bir çıkıntı gibidir.
Durun hızımı almışken anımsayabildiğim başka stadart uyumsuzluklarından da bahsedeyim:
zzPath table içinde Dosya ismi tek sayıda harften oluşuyorsa dosya isminden sonuna fazladan bir tane sıfır konur. Dosya ismi çift sayıda harf veya karakterden oluşuyorsa son bayt atlanarak yok farz edilir. Sonraki baytlar 1 bayt öne çekilir. Dosyanın ismi bu yeni hali ile CD nin volumune yazılır. Bu berbat bir standardizasyondur. Bu standardı çıkaran ekibin gazinoda alkol aldıktan sonra standartları kaleme aldıklarından şüpheleniyorum.
zzStandartlarda bir CD veya DVD nin henüz yazılmamış olan boş bölgesine invizible trak (görünmez trak) ismi verilmiştir. Bu isimlendirme yanlıştır. Henüz yazılmamış bir diskin içinde trak yoktur ve olsaydı bile görünmez olmayacaktı.
zzOperasyon kodu BEh paketinin 01h numaralı baytının 2-3-4 üncü bitlerine orijinal dökümanlarda "expected sector type" (umulan-beklenen sektör tipi) ismi verilmiştir. Bu bitlere uluslar arası standartlar tarafından verilen bu terim doğru değildir. çünkü bu bitler beklenen değil "seçilen" sektör tipini belirtir.
zzOperasyon kodu=43h paketinin sipariş=4 kullanımı ile elde edilen ilk lead in sektör adresi negatif sayı olması beklenirken 97 inci dakikayı gösteren bir adres elde edilmektedir ve bütün uluslar arası programlar bu sayıyı lead in başlangıcı olarak kullanmaktadır. Yani bilerek veya bilmeyerek bir hata yapılmış, bu hata benimsenerek ve yaygınlaştırılarak hata olmaktan uzaklaştırılmıştır. Veya belkide hatadan geri dönememişlerdir.
zzUluslar arası SFF 8090 standartlarını düzenleyen komitenin 4 temsilcisine bu garip kuralın sebebi sorulmuştur. Kendisine sorulan 4 komite üyesinden sadece bir tanesi bunun sebebini bilmediğini belirtmiştir. Eser yayına hazırlandığı tarihe kadar uluslar arası standartları belirleyen diğer komite başkanlarının hiç birisinden elimize cevap geçmemiştir.
zzECMA 119 standardında CD lerin volum tanıtıcılarındaki baytları saymaya 1 den başlanırken ECMA 168 standardında baytları saymaya 0 dan başlanır. Bu bir felakettir. Programcıyı gangren eder! Durun... Bitmedi..
zzVolum içerisinde zaman etiketi ECMA 119 standardi itarafından, dizin içindeki zaman etiketi ECMA 168 tarafından belirlenir. Bu ikisinin tanımladığı zaman etiketlemesi tam bir karmaşa yaratacak şekildedir. ECMA 119, hem desimal hem heksadesimal sayı kullanır, ECMA 168 sadece heksadesimal sayı kullanır.. Bir tanesi 17 bayttır, diğer 12 bayttır. Bir tanesi 10, diğeri 100 mikrosaniye duyarlılıktadır. Bir tanesinde Greenwich zaman ofseti ilk bayttır, diğerinde sonuncu bayttır. Bu durum programcının kan akımını bozacak bir tuzak gibidir.
***
Yukarıda birazını tespit edebildiğim ve pek azını sayabildiğim uyumsuzluklar, daha fazla mesai daha fazla enerji, daha fazla başarısızlık riski, daha fazla para harcamak demektir. Bu şekilde bir karmaşaya standart demek iyimser bir yaklaşımdır. (Benzer bir karmaşa, daha az olmakla birlikte mikroişlemci portlarında da vardır).
öyle anlaşılıyorki; firmalar tarafından kendiliğinden (rastlantısal) gelişen mevcut yapılandırmalar standart kabul edilmiş olabilir.. Böylece fonksiyonel olmayan ve bir önceki standartlar ile mantıksal ilişkisi bulunmayan bir mimari doğmuş olabilir. Daha sonra bu mimari yapı yaygınlaştırılarak hata olmaktan çıkarılmaya çalışılmış olmalıdır. Veya hatadan geri dönmek için çok geç olduğu düşünülmüş de olabilir?
Bu yazdıklarım tamamen bireysel tespitim ve düşüncemdir.
Bu karmaşa sebebiyle, odyo CD lerde volum, dizin, dosya yapısı nasıl olmaktadır? CD-RW de volum dizin dosya yapısı nasıl olmaktadır? Yazma komutları nasıl gönderilmelidir? çok oturumlu CDlerde her oturuma nasıl erişilmektedir. Partisyon volum mimarisi nasıldır? nasıl yapılanır? Sonuncu oturum ve ilk oturum arasındaki dosya kayıtları nerede tutulmaktadır? Bunlara eser içinde yanıt veremediğimiz için özür dileriz.
Biz bu eserde standart dökümanlarda ne bulduysak onu yazdık. Eğer bir konuda fena adresleme, çarpraz bilgi akışı, tutarsız ve sıra dışı kurallar görüyorsanız ve bu nasıl olur diyorsanız bu sorununuzun muhatapı biz olamayız.
Göya esere ön söz yazmak için oturmuştum.
Editör
Murat Aydın,
Yazarlar adına
Teşekkür
önce bana bu eseri yazma fırsatı veren Allah’a, ve sonra benimle
iş birliği yapan oğullarıma teşekkür ederiz.
Onur Aydın, Oğuz Aydın, Murat Aydın
BöLüM 1
TEMEL KAVRAMLAR ve Terminoloji
Lazer ışığı ve CD-ROM Okuyucu
Fotosensetif yüzey ve PiT oluşması
BiR CD NiN ANATOMiSi
CD lerde Trak kavramı
Trak anatomisi
Sektör anatomisi
CD NiN MiMARi YAPISI
1. SiSTEM KULLANIM ALANI (SUA- System Usage Area)
a) PCA - Program Calibration Area
b) PMA - Program Memory Area
2. BiLGi ALANI (IF – information Area)
a) Lead in
b) Program Area
c) Lead out
CD LERE BiLGiNiN YAZILIP OKUNMASI
Bilginin okunması
Bilginin yazılması
ATiP sinyal
CD-RW disklere yazma
CD-RW diskleri silme
CD-RW disklerde üstüne yazma
BöLüM 2
CD çeşitleri
1. CD-R ve CD-RW diskler
2. Foto CD
3. DDCD (Double Density Compact Disk)
4. CD-EXTRA
5. CD-DA
6. DVD
7. Miks CD diskler
8. CD-XA Diskler
9. CD-I Diskler
10. Karaoke CD
11. Bridge Disk
12. Odyo CD
ODYO CD LER
imaj dosya (Cue Sheet) örnekleri
imaj dosyanın CD ye yazılması
BöLüM 3
CD de ADRESLEME SABiTLERi
Sektör zamanlaması ve blok tanımı
Sektör Header
BiLGiNiN SEKTöRE YERLEŞTiRiLMESi
MOD 0 format
MOD 1 format (cooked format)
MOD 2 format (Raw format)
A) Mod 2 formsuz
B) Mod 2 Form1
Subheader
C) Mod 2 Form2
ODYO format
Ses Sinyali hakkında Temel Bilgiler
PCM (Pulse Code Modulation)
ADPCM (Adaptive Pulse Code Modulation)
Bilginin okunması ve F1 Blok oluşturulması
F2 Blok oluşturulması
F3 Blok oluşturulması
SUBKOD KANALLAR
EFM MODüLASYON
BöLüM 4
FORMAT çEŞiTLERi
Red book formatı
Yellow book formatı
Orange book formatı
Kesintisiz yazma (uninterrupted)
Artarak yazma (incremental)
ISO 9660 formatı
UDF format
Diğer formatlar
HATA DüZELTME
CiRC (Cross Interleave Reed-Solomon)
EDC kodlaması
ECC (Error Correction enCoding)
BöLüM 5
KOPYA KORUMA
Kopya koruma yazılımları
CD LERDE ViRUS
CD LERi SAKLAMAK
BiR CD NiN öRü
Bozuk bir CD ile ne yapılabilir
Bir CD yi bozmak
BAZI PROBLEMLER VE iP UçLARI
CD ve CD-ROM cihazın bakımı
C/DVD-ROM CiHAZI HAKKINDA
C/DVD-ROM cihazının güç konumları
C/DVD-ROM CiHAZININ HIZI
ZAMAN AŞIMI
BUFFER UNDERRUN
BöLüM 6
KARAKTER CiHAZ KAVRAMI
MSCDEX
MSCDEXin kurulması
MSCDEX'in Programlanması
CD-ROM subünit sayısı ve sürücü-header adresi
Dosya Açmak
File Handle
MSCDEX sürücünün mimarisi
CD-ROM kimlik bilgisini tespit etmek
CD-ROM kimlik bilgisini yeniden düzenlemek
CD-ROM Karakter cihazın dosya ismini tespit etmek
CD-ROM sayısı ve cihazın temsil edildiği harfi tespiti
MSCDEXin imzasını tespit etmek
MSCDEX kurulmuş mu? Mevcut CD-ROM'u destek..
MSCDEX versiyonunu tespit etmek
Sisteme bağlı CD-ROM sürücü var mı? Varsa kaç tane?
CD-DVD nin etiket-seri no-format cinsini tespit etmek
Blok cihazın seri numarasını değiştirmek
CD-DVD nin ne kadarı dolu? Sektör sayısı ve formatı...
Medya kimlik baytı
BöLüM 7
ASPI
ASPI'nin Kurulması
ASPI'nin özellikleri
ASPI' NiN DOS ALTINDA PROGRAMLANMASI
ASPI için dosya açmak
ASPI Giriş noktasının tespiti
SRB (SCSI Request Block)
Komut kodu: 00h (Host adaptör isteği)
Komut kodu: 01h (Cihaz tipi nedir)
Komut kodu: 02h (SCSI I/O komutu işlet)
Komut kodu: 03h (SCSI I/O komutu iptal et)
Komut kodu: 04h (SCSI cihaz reset)
Komut kodu: 05h (Host Adaptör Parametreleri)
Komut kodu: 06h (Cihaz bilgisi)
ASPI' NiN WiNDOWS ALTINDA PROGRAMLANMASI (WinASPi)
ASPI'ye erişim:
1. GetASPI32SupportInfo komutu
2. SendASPI32Command komutu:
SC_HA_INQUIRY, SC_GET_DEV_TYPE,
SC_EXEC_SCSI_CMD, SC_ABORT_SRB,
SC_RESET_DEV, SC_GET_DISK_INFO,
SC_RESCAN_SCSI_BUS , SC_GETSET_TIMEOUTS
3. GetASPI32Buffer komutu
4. FreeASPI32Buffer komutu
5. TranslateASPI32Address komutu
Görevin tamamlanmasını bekleme (Bilgi istemek,Geri çağırmak, Sondaj)
ASPI arıza kodları
BöLüM 8
GENEL KULLANIM BiLGiLERi
Alternatif Fonksiyonlar
IOCTL iNPUT
Input kodu 00: MSCDEX Header adresini tespit etmek
Input kodu 01: Lazer kafanın koordinatlarını tespit etmek
Input kodu 04: Odyo kanal bilgisi
Input kodu 05: Cihazın tamponunu okumak
Input kodu 06: Cihazın durum bilgisini tespit etmek
Input kodu 07: Okuma modununa göre sektör boyunu tespit
Input kodu 08: CD/DVD sonuncu sektör (volum büyüklüğü)
Input kodu 09: Cihazdaki CD değişti mi?
Input kodu 0Ah :
Odyo CD ilk ve son odyo trak, ilk lead out sektör numarası
Input kodu 0Bh: Odyo trak bilgisi
Input kodu 0Ch: Odyo Q kanal bilgisi
Input kodu 0Dh: Odyo Sub Kanal bilgisi
Input kodu 0Eh: UPC kodu bilgisi
Input kodu 0Fh: ?Odyo durumu bilgisi?
IOCTL OUTPUT
Output kodu 00: Cihazın kapısını aç
Output kodu 01: Kapıyı kilitle / aç
Output kodu 02: Cihazı resetle
Output kodu 03: Odyo kanal kontrolu
Output kodu 04: Cihazın tamponuna bilgi göndermek
Output kodu 05: Cihazın kapısını kapat
BöLüM 9
iSTEK BLOĞU
istek bloğunun mimarisi
istek bloğu göndermek
istek bloğu hata raporu
iSTEK BLOĞU (03h ve 0Ch dışında kalan) DiĞER KOMUT KODLARI
BöLüM 10
IOCTL iSTEKLERi
IOCTL iNPUT iSTEKLERi
Komut kodu 03h
input kodu, 00: Sürücü header tespit etmek
input kodu, 01: Lazer kafanın koordinatlarını tespit etmek
input kodu, 04: Odyo kanal bilgisi
input kodu, 05: Cihazın tamponunu okumak
input kodu, 06: Cihazın durum bilgisini tespit etmek
input kodu, 07: Okuma moduna göre sektör boyu
input kodu, 08: CD/DVD sonuncu sektör numarasını (volum büyüklüğünü) tespit etmek
input kodu, 09: Cihazdaki CD değişti mi?
input kodu, 0Ah: Odyo CD içindeki ilk ve sonuncu odyo trak numarası, ilk lead out sektör numarası
input kodu, 0Bh: Odyo trak bilgisi
input kodu, 0Ch: Odyo Q kanal bilgisi
input kodu, 0Dh: Odyo Sub Kanal bilgisi
input kodu, 0Eh: UPC kodu bilgisi
input kodu, 0Fh: ?Odyo durumu bilgisi?
IOCTL OUTPUT iSTEKLERi
Komut kodu 0Ch
Output kodu, 00: Cihazın kapısını aç
Output kodu, 01: Cihazın kapısını kilitle / aç
Output kodu, 02: Cihazı resetle
Output kodu, 03: Odyo kanal kontrolu
Output kodu, 04: Cihazın tamponuna bilgi göndermek
Output kodu, 05: Cihazın kapısını kapat
BöLüM 11
ODYO HAZIRLIK
ODYO KOMUTLARI
Komut kodu, 84h : Şarkı çalmak
Komut kodu, 85h : Dur (pause)
Komut kodu, 88h : Devam et (resume)
Komut kodu, 83h : Yeniden konumlandır (seek)
BöLüM 12
SEKTöR OKUMA TERCiHLERi
Header dahil sektör okumak
Komut kodu, 80h : Sektör oku (Header dahil)
Komut kodu, 82h : Sektör oku (prefetch)
Header hariç sektör okumak
Sıralı Sektör okumak ve imaj dosya hazırlamak
BöLüM 13
OKUNAN SEKTöRüN DiLiMLENMESi
Olmayana ergi metodunun uygulanması
SEKTöRüN TiPLENDiRiLMESi
BöLüM 14
KiLiTLEME
Kilitlenen bir cihazın özellikleri
Kilit seviyeleri
Kilit seviyelerinin hiyerarşik sırası
Volümün kilitlenmesi
Volümün kilidini açmak
Kilit seviyesinin tespit edilmesi
Hedef cihazın resetlenmesi
Açık dosyaları listelemek
Kilit bayrağı
BöLüM 15
iLK 150 SEKTöRüN TERMiNOLOJiSi
Kanonikalize dosya ismi
BöLüM 16
VOLUM TANITICILAR
Boot volum tanımlayıcısı
Asıl (primer) volum tanımlayıcısı
ilave (supplementary) volum tanımlayıcısı
Bölüm (partition) volum tanımlayıcısı
Sonlandırıcı (terminator) volum tanımlayıcısı
VOLUMU OKUMAK
Volum tanıtıcı (descriptor) önceliğinin belirlenmesi
COPYRIGHT-ABSTRACT-BIBLIOGRAPHIC DOSYALAR
PATH TABLE
BOOTABLE (YüKLENEBiLiR) DiSKLER
-------iLERi BiLGiLER----------
BöLüM 17
iDE ARA BiRiM
Ara birimin yapısı
Ara birimin tamponu
Ara birimin portları
Ara birimin çalışma modları
Ara birimin adreslenmesi
BöLüM 18
PORT PROGRAMLAMAK
CD/DVD-ROM PORTLARI
Ayni iDE kanalda (Master/Slave) cihaz seçimi
Dört altın kural
REGiSTERLER
Komut blok register ve portları
Cihaz kontrol registerleri ve portları
CD/DVD-ROM PORTLARIN iŞLEM SIRASI
BöLüM 19
PAKET OLMAYAN ATA KOMUTLARI
Reset (Komut kodu=08h)
Güç komutları
Güç konumunu tespit et (Komut kodu:E5h)
Uykuya gir (Sleep) (Komut Kodu=E6h)
Stend bay komutları
idle komutları
Transpozisyon zamanlaması
Stend bay geçiş süresi ayarlaması (Komut kodu = E2h)
idle geçiş süresi ayarlaması (Komut kodu = E3h)
ATAPi kimlik tespiti (Identify drive) (Komut kodu=A1h)
Servis (Komut kodu= A2h)
Durumu belirle (Komut Kodu=EFh) (Set Features)
NOP (No operation) (Operasyon kodu = 00h)
Cihaz teşhis (Device Diagnostic) (Komut kodu=90h)
PAKET KOMUT (komut Kodu=A0)
BöLüM 20
ATAPi TANIMI
Sistemdeki ATAPi cihazı bulmak
PAKET KOMUT KAVRAMI
Paket lomutun yapısı
Paket komutun gönderilmesi
BöLüM 21
CD-ROM CiHAZI iLE iLGiLi PAKETLER
ATAPi SORGULA Operasyon kodu: 12h
C/DVD-ROM CiHAZI HAZIR MI? Operasyon kodu: 00h
C/DVD-ROM CiHAZI MEK Kmd Operasyon kodu: 1Bh
KAPI KiLiT Operasyon kodu: 1Eh
HATA ANALiZi Operasyon kodu: 03h
CiHAZI SIFIRLA Operasyon kodu: 01h
CiHAZIN iŞLT SiSTEMiNi OKU Operasyon kodu: 3Ch
CiHAZIN iŞLETiM SiSTEMiNi YAZ Operasyon kodu: 3Bh
ARTIK KULLANILMAYAN PAKETLER
BöLüM 22
ODYO iLE iLGiLi PAKETLER
ODYO çAL (MSB) Operasyon kodu: 47h
ODYO çAL (LBA) Operasyon kodu: 45h
ODYO çAL (LBA) Operasyon kodu: A5h
PAUS-RESUME Operasyon kodu: 4Bh
iLERi-GERi SAR Operasyon kodu: Bah
çALMAYI ve iLERi-GERi SARMAYI DURDUR-DEVAM
YENiDEN KONUMLANDIR (Seek) Operasyon kodu: 2Bh
BöLüM 23
CD / DVD DiSK iLE iLGiLi PAKETLER
SEKTöR KAPASiTESi Operasyon kodu: 25h
SEKTöR OKU (LBA-kısa) Operasyon kodu: 28h
SEKTöR OKU (LBA-uzun) Operasyon kodu: A8h
SEKTöR OKU (LBA-seçmeli) Operasyon kodu: BEh
SEKTöR OKU (MSF-seçmeli) Operasyon kodu: B9h
SEKTöR BiLGiSi OKU Operasyon kodu: 44h
CD-DVD - BiR TRAĞIN BiLGiSi Operasyon kodu: 52h
CD-DVD TRAK-OTURUM BiLGiSi Operasyon kodu: 51h
SUB KOD KANALI OKU Operasyon kodu: 42h
OPC KODU Operasyon kodu: 54h
CD-DVD DiSK KAPASiTE BiLGiSi Operasyon kodu: 23h
CD-DVD PERFORMANS BiLGiSi Operasyon kodu: ACh
BöLüM 24
43h PAKETi
Sipariş = 0 (TOC bilgisi)
Sipariş = 1 (Oturum bilgisi)
Sipariş = 2 (TOC, Q kanal bilgisi)
Sipariş = 3 (PMA, Q kanal bilgisi)
Sipariş = 4 (ATiP bilgisi)
Boş diskte adresleme
Diskin üretici fabrikasının tespiti (kopya koruma) kup
Sipariş = 5 (CD-Text bilgisi)
BöLüM 25
MOD SAYFASI
MOD SAYFASI ALMAK
Durum baytı
MOD SAYFASINI CiHAZA GöNDERMEK
SAYFALAR
Sayfa kodu=0Eh (Odyo sayfası)
Sayfa kodu=1Ah (Güç kontrol sayfası)
Sayfa kodu=1Dh (Zaman aşımı ve yazma korumasayf)
Sayfa kodu=0Dh (parametreler sayfası)
Sayfa kodu=2Ah (Cihazın kapasitesi sayfası)
Sayfa kodu=01h (Cihazın arıza politikası sayfası)
Sayfa kodu=05h (Yazma parametreleri sayfası)
Sayfa kodu=3Fh (Sayfaların sayfası)
Sayfa kodu=18h (Versiyon destek sayfası)
Sayfa kodu=08h (Cache bellek kullanım sayfası)
Sayfa kodu= 1Bh (Blok Cihaz sayfası)
BöLüM 26
CiHAZDAN RAPOR iSTEMEK
Cihazdan gönderilen raporun anatomisi
RAPOR TiPLERi
Rapor Tipi= 00h Raporlar desteği raporu
Rapor Tipi=01h işlem kabiliyeti ve parametreleri raporu
Rapor Tipi=02h Güç yönetim raporu
Rapor Tipi=03h Dış istekler raporu
Rapor Tipi=04h Disk raporu
Rapor Tipi=05h çok Kullanıcı raporu
Rapor Tipi=06h Meşgul raporu
DIŞ iSTEKLERiN iADESi
BöLüM 27
PROFiL RAPORU
Cihazdan profil raporu istemek
Profil raporunun anatomisi
PROFiL TiPLERi
çekirdekkonfigürasyonu (Profil No=01h)
Durum raporu geçerlilik konf (Profil No=02h)
Disk yükleme konfigürasyonu (Profil No=03h)
Yazma koruma konfigürasyonu (Profil No=04h)
Sektör okuma konfigürasyonu (Profil No=10h)
çoklu okuma konfigürasyonu (Profil No=1Dh)
CD okuma konfigürasyonu (Profil No=1Eh)
DVD okuma konfigürasyonu (Profil No=1Fh)
CD yazma konfigürasyonu (Profil No=20h)
Artarak yazma konfigürasyonu (Profil No=21h)
Defekt konfigürasyonu (Profil No=24h)
Write Once konfigürasyonu (Profil No=25h)
Sınırlı yazma konfigürasyonu (Profil No=26h)
CD-RW CAV yazma konfigürasyonu (Profil No=27h)
TAO yazma konfigürasyonu (Profil No=2Dh)
CD master konfigürasyon (Profil No=2Eh)
DVD-R / RW yazma konfigürasyonu (Profil No=2Fh)
DVD tabaka aklayarak yazma konf (Profil No=33h)
DVD okuma konfigürasyonu (Profil No=50h)
DVD yazma konfigürasyonu (Profil No=51h)
Hibrit konfigürasyonu (Profil No=80h)
Güç yönetimi konfigürasyonu (Profil No=100h)
Odyo konfigürasyonu (Profil No=103h)
Mikrokod konfigürasyonu (Profil No=104h)
Zaman aşımı konfigürasyonu (Profil No=105h)
Kopya koruma konf (Profil No=106h , 10Bh, 10Dh)
Hız konfigürasyonu (Profil No=107h)
Cihaz seri numarası konfigürasyonu (Profil No=108h)
Cihaz üretim tarihi konfigürasyonu (Profil No=10Ch)
Raporlar konfigürasyonu (Profil No=00h)
BöLüM 28
KOPYA KORUYAN PAKETLER
Mekanizmanın esasları ve terimleri
Parola tespiti Op. Kodu= A3h
Yetkilendirme Op. Kodu=A4h
BöLüM 29
FORMAT KAVRAMI
Format paketi
Format tipleri
Format Tipi = 00h (Ful format):
Format Tipi = 01h (Yedek bölgeyi genişlet):
Format Tipi = 04h (Zone yeniden format):
Format Tipi = 05h (Zone format)
Format Tipi = 10h (CD-RW DVD-RW Oturum / border)
Format Tipi = 11h (CD-RW DVD-RW Son otrm/border
Format Tipi = 12h (CD-RW DVD-RW otrm/bord ekle)
Format Tipi = 13h (DVD-RW Hızlı border ekle)
Format Tipi = 14h (DVD-RW SL Hızlı border ekle)
Format Tipi = 15h (DVD-RW Hızlı border format):
Format Tipi = 16h (HD DVD-R Test zon genişletme):
Format Tipi = 17h (HD DVD-R DL Tabakalar arası)
Format Tipi = 20h (Ful format+yedek bölge ayırmak):
Paketin kullanılması
BöLüM 30
YAZMA öNCESi KOMUTLAR
OKUMA/YAZMA HIZINI AYARLA Operasyon kodu: BBh
OKUMA/YAZMA HIZINI AYARLA (/DBi gönder) Op kodu: B6h
DiSKi SiL Operasyon kodu: A1h
CUE SHEET GöNDER Operasyon kodu: 5Dh
YAZMA ve YAZMA SONRASI KOMUTLAR
TRAK REZERVE ET Operasyon kodu: 53h
TAMPONU öLç Operasyon kodu: 5Ch
TAMPONDAKi KALINTIYI YAZ Operasyon kodu: 35h
FiNALiZE ET Operasyon kodu: 5Bh
DVD RZON TAMiR ET Operasyon kodu: 58h
YAZ Operasyon kodu: AAh
YAZ ve karşılaştır Operasyon kodu: 2Eh
YAZ Operasyon kodu: 2Ah
UNDERRUN durumu
Yazılabilir ilk sektör adresinin tespiti
TAO yazmak
PAKET/ARTARAK yazmak
DAO/SAO yazmak
CD-RW/DVD-RW (üzerine) yazmak
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|