23 Aralık 2020 Çarşamba

DOS'ta Klavye Düzenini Değiştirmek ve CD Sürücüyü Tanıtmak


Merhaba. Önceki dört yazı DOS üzerineydi ve DOS'la ilgili iki yazı daha planlıyorum. Bu yazıyı, yazı dizilerine kısa bir ara vermek için yazıyorum. MBR yazısında Norton disk editörün kullanımını anlatırken, Norton Utilities CD'si veya imaj dosyası olanların, bunu DOS'ta kullanabilmek için CD sürücüyü tanıtmaları gerektiğini yazmıştım.

DOS kurduktan sonra yapılacak işlerden biri de, klavye düzenini değiştirmek. Elbette olmazsa olmaz değil ama nasıl yapılıyor unutmamak için kendime de bir not düşeceğim. Sonuçta her gün yaptığım birşey değil.


DOS'ta Türkçe Klavye Düzeni
Klavyeyi değiştirmek, MSDOS ve FreeDOS'ta aynı mantıkla ama farklı yollarla yapılır. Standard ASCII karakter setinde ş ve ğ gibi karakterler bulunmaz. Bu nedenle önce "codepage"ler (CP) kullanılarak karakter setini değiştirmek gerekir.

ASCII karakter setinin ilk 128 karakteri sabittir. Standart hiçbir CP'de bunun değiştirildiğini görmedim. Teoride, bunların değiştirilmemesi için bir engel yok ama İngilizce alfabedeki 26 karakter ve rakamlar zaten dillerin çoğunda bulunur ve değiştirilmelerine gerek yoktur. CP'ler yardımıyla 128 ile 255 arası karakterler değiştirilir. Eski bazı CP'lerde ilk yarıdaki karakterlerden bazılarının değiştirildiğini okudum. Sanıyorum, örn. 7-bit ASCII destekleyen bir yazıcıda Almanca çıktı almak için az kullanılan karakterler, ü ve ö gibi karakterlerle değiştirilmiş.

Bir veya birden fazla CP, bir dosyada birleştirilip kullanıma sunulmuştur. Bu dosyalar DOS'ta .cpi uzantısına sahiptirler. FreeDOS'ta .cpi dosyalar upx'le sıkıştırılır ve .cpx uzantısını alırlar. Tüm CP'ler bir numarayla kodlanır. IBM PC BIOS'ta bulunan standart CP 437'dir. Bu arada farklı işletim sistemleri farklı numaralandırma kullandığından, çakışan numaralar olabilir. Ben burada DOS CP numaralarına örnek veriyorum. FreeDOS, CP 850'yi kullanıyor. Örn. 737 ve 851 Yunanca, 855 Kiril alfabesi, 857 Türkçe, 865 Danca ve Norveççe CP numaraları. Ayrıntılı liste Wikipedia'daki Code Page maddesinde bulunuyor.

Hangi CP'in hangi dosyada olduğunu bulmanın kolay yolu yok ne yazık ki. CPI dosyaları okumak için geliştirilmiş bir araç var ve içinde dökümantasyonu da içeriyor. Ayrıca başka bir dökümantasyon kullanarak kendi geliştirdiğim bir kod var ama yalnızca FreeDOS'un açılmış cpx dosyalarında denedim. Her CP içerisinde 3 tane 256 karakterlik bitmap var. İlki 8x16 pixel karakterler, ikincisi 8x14 karakterler ve üçüncüsü 8x8 karakterler.

Lafı uzatmadan, Türkçe karakterler için Türkçe CP'nin yüklenmesi gerek. Bunun için önce DISPLAY.SYS kullanılarak bellekte yer ayrılmalı. DOS'ta bu CONFIG.SYS içerisinden DEVICE veya DEVICEHIGH ifadeleriyle yapılıyor. Aşağıda, CON aygıtı olan ekrana CP yüklenebilmesi için 3 sayfa ayrılıyor.

DEVICE=C:\DOS\DISPLAY.SYS CON=(EGA,,3)

Yazıcılar için aynı iş PRINTER.SYS ile yapılıyor olmalı. DISPLAY.SYS tam anlamıyla bir DOS aygıt sürücüsü değil. Sanırım bu nedenle FreeDOS'ta DISPLAY.SYS yerine DISPLAY.EXE aynı işi yapıyor. Elbette bu, çalıştırılabilir dosya olduğundan AUTOEXEC.BAT'da çağırılmalı.

DISPLAY CON=(EGA,,3)

COUNTRY.SYS, klavye için mutlaka gerekli değil. Bu dosyada ülkelerin tarih, saat formatları ve para birimleri gibi bilgiler var. DATE ve TIME komutlarının çıktısını değiştirebiliyor. Bu dosyada da her ülke için üç haneli bir kod var. Örn. ABD 001, İngiltere 044, Almanya 049, Türkiye 090. Görünüşe göre birçoğu milletlerarası telefon kodlarıyla aynı. Daha geniş bir liste i8086.de adresinde var. Bu dosya yüklenirken ülke koduyla birlikte uygun bir CP seçimlik olarak verilebiliyor. Sanırım CP verilmediği durumda, o ülke için tanımlı ilk CP'yi kendisi buluyor. Fakat bildiğim kadarıyla COUNTRY.SYS, bir CP yüklemiyor. Açıkçası bu dosyaya parametre olarak neden CP girildiğini bilmiyorum. Bu dosya hem MSDOS hem FreeDOS'ta CONFIG.SYS'de çağırılmalı (bu arada FreeDOS'ta FDCONFIG.SYS var, CONFIG.SYS bunun içinden çağırılıyor):

COUNTRY=090,857,C:\DOS\COUNTRY.SYS
COUNTRY=090,,C:\DOS\COUNTRY.SYS

Ve elbette FreeDOS'ta bu dosya C:\FDOS\BIN altında.

Sonra yukarıda ayrılan belleğe, MODE komutuyla .cpi/.cpx dosyasından en az bir CP yüklenmelidir (PREP parametresi). Bu bir komut olduğundan AUTOEXEC.BAT'ta olmalıdır ama INSTALL ifadesiyle CONFIG.SYS'den de çağırılabilir. Sonra aynı komutla, bellekteki CP'lerden biri SEL parametresiyle seçilmelidir:

MODE CON CP PREP=((857) C:\DOS\EGA2.CPI)
MODE CON CP SEL=857

Birden fazla CP yüklemek için CP numaları ilk komutta virgülle ayrılarak yazılır. FreeDOS'ta CP 857, C:\FDOS\CPI\EGA.CPX dosyasında bulunur. FreeDOS, MSDOS .cpi dosyalarını kullanabilir. Tersi, FreeDOS'taki dosyalar sıkıştırılmış olduğundan mümkün değil, ancak açılırlarsa mümkün olabilir.

Bir CP seçildikten sonra ekran fontunun çok az değiştiği görülebilir. Artık Türkçe karakterler yüklemiş ve ekrana basılabilirdir. Şimdi tuşlara basıldığında üretilecek ASCII kodları değişmelidir. 'Ğ'ye basınca artık '[' karakteri çıkmamalıdır. Başka bir deyişle 1Ah scan kodlu tuşa basınca, ASCII 5Bh karakteri yerine 0A7h çıkmalıdır ama aynı zamanda ASCII 5Bh da 09 scan kodlu '8' tuşuna AltGr'yle basınca çıkmalıdır. Bunu yapan, KEYB komutuyla birlikte KEYBRD2.SYS'deki yeni eşleştirme tablosudur. Bir dosya verilmediğinde KEYB komutu KEYBOARD.SYS dosyasındaki klavye düzenlerini yükler. Dolayısıyla keyb de, keyb gr gibi komutlar sorunsuz çalışır. Türkçe klavye KEYBRD2.SYS dosyasında tanımlıdır. Bir dilde birden fazla klavye düzeni de olabilir. Türkçe F ve Q klavyeler gibi. Anladığım kadarıyla KEYB komutuna id parametresi verilmediğinde bulduğu ilk (veya varsayılan) düzeni yüklemektedir. FreeDOS'ta Türkçe için varsayılan düzen Q (id: 179) MSDOS'ta F'tir (id: 440). Dolayısıyla Türkçe Q klavye için, id MSDOS'ta zorunlu FreeDOS'ta seçimliktir.

KEYB TR,,C:\DOS\KEYBRD2.SYS /id:179

KEYBRD2.SYS, FreeDOS'ta C:\FDOS\BIN altındadır.

Bu komutların sonucunda Türkçe klavye kullanılabilir. Daha önce belirttiğim gibi COUNTRY.SYS yüklenmeden de klavye sorunsuz çalışır. Eğer DISPLAY eksik olursa MODE komutları çalışamaz. KEYB, hem DISPLAY hem de MODE'dan bağımsızdır ama gerekli CP'ler yüklenmeden çalıştırılırsa, 'Ğ'ye basıldığında ° (derece) karakteri çıkar. ü, ö ve ç karakterleri standart CP'de de bulunduğundan sorunsuz görünür ama 'İ' olmadığından Shift+i, 'ÿ' karakterini verir. Ancak sanıyorum ki, önce KEYB yüklenip ardından CP'ler yüklenebilir.


DOS'ta CD Sürücüyü Tanıtmak
DOS, normalde CD sürücüleri tanımaz. Bu yüzden Win95 CD'si olan bazı kullanıcıların formatlama macerasının sonu, sistem disketi CD'yi tanımadığından bilgisayarcıda bitmiştir. Dahası MSDOS bir CD sürücü dosyası da içermez. Win95 kapatıldıktan sonra da DOS, yanlış hatırlamıyorsam, CD sürücüyü göremez.

Öncelikle bir sürücü dosyası gerekli. Ne yazık ki o zamanki CD-ROM'ların çoğu bir sürücü disketiyle gelmezdi. IDE/ATAPI CD sürücülerin çoğu OAKCDROM.SYS ile basitçe tanıtılabilir. SCSI sürücüler için başka dosyalar olsa da komutlar aynı.

MSDOS'ta önce CONFIG.SYS'de DEVICE veya DEVICEHIGH ifadesiyle sürücü yüklenir. Parametre olarak /D: ile bir aygıt sürücüsü adı verilmelidir (sürücü harfiyle karıştırılmamalı, o sonra).

DEVICEHIGH=C:\CDROM\OAKCDROM.SYS /D:MSCD0001

Bu satırla, CD sürücü bir aygıt olarak bellekte yerini alır ancak henüz bir sürücü harfi atanmamıştır. Yukarıda verilen sürücü adı, AUTOEXEC.BAT'da MSCDEX'e /D: parametresiyle girilir. Bu şekilde CD sürücüye boştaki ilk sürücü harfi atanacağı gibi istenirse /L: parametresiyle başka bir sürücü harfi de verilebilir:

MSCDEX /D:MSCD0001 /L:E

MSCDEX'in açılımı Microsoft CD Extensions'tır. FreeDOS'ta, aygıt sürücüsü DEVLOAD komutuyla AUTOEXEC.BAT'ta yüklenir. /H parametresi HIGH, yani yukarı bellek alanı (DEVICEHIGH ile aynı), /Q parametresi 'Quiet' anlamındadır. Bu arada FreeDOS 1.2'de UDVD2.SYS adında bir sürücü dosyası gelmektedir.

DEVLOAD /H /Q C:\FDOS\BIN\UDVD2.SYS /D:FDCD0001

Ve son olarak FreeDOS'ta MSCDEX'e muadil SHSUCDX bulunur.

SHSUCDX /D:FDCD0001 /L:E

UDVD2.SYS, MSDOS'ta ve OAKCDROM.SYS FreeDOS'ta sorunsuz yüklenebilir. Ancak UDVD2.SYS'nin OAKCDROM.SYS'den küçük olması muhtemelen daha az bellek harcadığı anlamına gelmektedir. Bunun yanında UDVD2.SYS'nin yüklenme süresi de önemli ölçüde kısadır.

Hiç yorum yok:

Yorum Gönder