MS-DOS ve diğer metin modu programları çift genişlikli CJK karakterlerini nasıl görüntüleyebilir?


9

Japonca ve Çince birçok metin modu BIOS kurulum ekranı gördüm. Son zamanlarda Japonca Windows XP kurulumunu bile gördüm. MS-DOS'un da Japonca sürümleri vardı. Gerçek DOS modu , Windows komut istemi değil!

Japonca BIOS kurulumu

Japonca MS-DOS 6.2

Tipik bir metin modu ekranı 80x25 boyutundadır . Japonca karakter çift normal Latin karakter genişliği kadar büyük olduğunda, ekranda aynı anda görüntülenebilen maksimum Japonca karakter sayısı yaklaşık 1000'dir. Bu nedenle , karakterlerin sol ve sağ kısmını görüntülemek için 2000 kod noktasına ihtiyacımız var .

Varsayılan metin modu yalnızca 256 karakter görüntüleyebildiğinden, ilk 128 ASCII için kullanılır, bu nedenle kullanılabilir olanlar yüksek 128 kod noktasıyla sınırlıdır. Gerekirse 512'ye genişletebiliriz, ancak bu hala ekran için yeterli kod noktasını destekleyemez. Her zaman bu kadar sınırlı sayıda karakterle büyük karakter setini nasıl göstermeyi başardıklarını merak ediyorum.

[ Japonca XP yükleyici] 8]

Linux'ta metin modu, Unicode görüntüleyebildiğinden ve çok daha fazla renge sahip olabileceğinden grafik modu sürücüsünü kullanıyor gibi görünüyor. Ancak MS-DOS ve BIOS kurulum ekranlarında nasıl yaptıklarını açıklayamıyorum.


EDIT: Hatta DOS için Japonca bir metin girdisi buldum

Japonca IME

Metin modunda Korece de var!

Koreli

VMWare Korece DOS


Muhtemelen Japonca "karakterlere", yani kanji'ye değil , Unicode eşlemeleri olan hiragana veya katakana'ya bakıyorsunuz .
talaş

@ sawdust: yukarıdaki resme bakın ve sadece tüm
kana'yı

1
Not o büyük olasılıkla gelen OS / 2 yükleyici ekran görüntüsü aldı sayfa hemen yanındaki "OS / 2 açılışı sırasında grafiksel metin modu desteği neredeyse hemen başlatıldı" diye ekran söylüyor. Anahtar kelime grafik .
CVn

@ MichaelKjörling sadece OS / 2 değil, MS-DOS ve BIOS kurulum programları da metin modunda bu yeteneğe sahip
phuclv

Yanıtlar:


6

Normal "80x25 karakter" modu aslında 720x350 pikseldir (yani her karakter hücresinin 9 piksel genişliğinde ve 14 piksel yüksekliğindedir). Çift genişlikli karakter modları ("40x25"), video içerik belleğinden tasarruf etmek için (gerekli miktarda video içeriği belleğini yarıya indirerek) veya her bir sütunu iki katına çıkararak bunu daha geniş genişliğe basitçe enterpole edebilir veya ek glif belleği ve aynı hücrelerini 18 * 14 piksele artırmak için video içerik belleği miktarı.

Oldukça erken bir tarihte (sanırım EGA piyasaya sürüldüğünde yapıldı), IBM PC'nin metin görüntüleme moduna kullanıcı tanımlı karakter glifleri desteği eklendi.

IBM PC'nin normal metin modu, belirli bir adresteki sıralı 4000 bayt video içeriği RAM'dir. Bunlar bir karakter karakter özniteliği (başlangıçta yanıp sönen, kalın, altı çizili vb.); Daha sonra ön plan ve arka plan renkleri ve yanıp sönme / vurgulama için yeniden kullanılır, böylece metin modunda 16 renkle sınırlıdır) ve görüntülenmek. Her karakter bayt değeri için görüntülenecek gerçek glif başka bir yerde saklanır.

Bu, herhangi bir zamanda ekranda 256 farklı glifle yapabileceğiniz sürece ve her glifin 9x14 bir bit bitmap olarak temsil edilebildiği sürece, karakterlerin farklı görünmesini sağlamak için bellekteki glifleri değiştirebilirsiniz. . Kısmen, bu mode con codepage selectDOS'ta yapılanların bir kısmıydı . Bu nispeten önemsizdir.

256'dan fazla farklı glife ihtiyacınız varsa, ancak ekrandaki glif sayısının azalmasıyla yaşayabiliyorsanız, çift genişlikli (18 piksel genişlik) gliflere sahip 40x25 şemasına gidebilirsiniz. Toplam video içeriği RAM miktarının sabit olduğu ve glif bitmap belleğini artırabileceğinizi varsayarsak, bir ekran glifini temsil etmek için her dört bayttan iki bayt kullanmaya geçerek 2 ^ 16 = 65.536 farklı glif (boş glif dahil). Cesur hissediyorsanız, 2 ^ 24 ~ 16.7M farklı gliflere erişmenizi sağlayan ikinci özellik baytını bile atlayabilirsiniz. Bu yaklaşımların her ikisi de özel yazılım desteğine dayanmaktadır, ancak donanım ve bellenim bölümünün yapılması oldukça kolay olmalıdır. 18x14 tek bit pikselde 65.536 glif, yaklaşık 2 MiB'ye kadar çalışır, o sırada büyük ancak aşılmaz bir bellek miktarı.

Temel ABD İngilizcesi en az 62 özel glife (0-9 sayıları, büyük ve küçük harf AZ) ihtiyaç duyar, bu yüzden aynı zamanda ABD İngilizcesi metnini aynı anda görüntülemek istiyorsanız 180-190 glif gibi bir şeye sahip olursunuz. zaman ve glif başına 8 bit ile gidin. Erken IBM PC mimarisi gibi kaynak kısıtlamalı bir ortamda yapmayı seçebileceğiniz eşzamanlı ABD İngilizcesi desteği olmadan yaşayabiliyorsanız, tam sayı gliflerine erişebilirsiniz.

Biraz hile ile muhtemelen iki şemayı da karıştırabilir ve eşleştirebilirsiniz.

Aslında nasıl yapıldığını bilmiyorum ama her ikisi de, sadece sınırlı karakter sayısı "süslü" alfabe metin modunda düz bir IBM PC ekranına nasıl sadece önünde oturmak ile gelip almak için geçerli şemaları bir an için yığın değişimi. Pratikte bunu kolaylaştıran ek grafik modlarının olması kesinlikle mümkündür.

Ayrıca, metin modu ile metin gösteren grafik modu arasındaki farkı da unutmayın . Grafik modundaysanız, belki de evrensel olarak oldukça desteklenen VESA aracılığıyla, çizim karakteri glifleri kadar kendi başınızasınız, ancak bunları nasıl çizeceğiniz konusunda çok daha fazla özgürlüğünüz var. Örneğin, Windows NT'nin metin tabanlı bölümlerinin (Windows XP'nin ait olduğu ürün ailesi), Windows NT 4.0 önyükleme ekranı ve BSOD'ler de dahil olmak üzere metin görüntülemek için grafik modu kullandığından eminim.


Çift genişlikli Japonca / Korece karakterlerin yanında normal genişlikli Latin karakterleri olduğunu görebilirsiniz, bu nedenle 40x25 çift genişlik modu olamaz. Bu nedenle, glifi temsil etmek için her 4 bayttan 2 baytını birleştiremezsiniz. Aynı anda 512 gliflere temsil edebilir ama yine de karakterler ekran çoğunu dolduracak yeterli eğer ön plan renginin biraz 3 Kullanılması en.wikipedia.org/wiki/VGA-compatible_text_mode#Fonts
phuclv

@ LưuVĩnhPhúc Yüksek biti yeniden canlandırabilir veya çok bayt gerektiren karakterleri tek baytlı karakterlerle karıştırmak için istediğiniz sayıda başka hile kullanabilirsiniz. Cevabın hala açılış paragrafında yapılan ifadeyi tanımak olduğunu düşünüyorum: karakterleri gösterirken bile, bir düzeyde hala piksellerle uğraşıyorsunuz ve bu pikseller belki de doğrudan olmasa bile çalışılabilir.
CVn

Tüm metin tabanlı ve grafik modu görüntüleme metin şey biliyorum, sadece sol ve sağ kısmı 2 kod noktası gerektirir gibi çok bayt için yeterli kod noktaları nasıl karıştırmayın. Ama söylediğin gibi, bunu yapmanın başka bir yolunu düşündüm. Sanırım cevabınız kabul edilebilir
phuclv

1

@Michael Kjörling'in söylediklerini basitleştiriyor.

Metin modunda, bağdaştırıcıya her ekran konumunda hangi karakterin göründüğünü söyleyen, ekran başına karakter başına 1 baytlık bir "ekran belleği" vardır. (Bağdaştırıcıya hangi renk ve alt çizgi, yanıp sönme gibi şeyler söyleyen "öznitelik" baytları da vardır).

Bağdaştırıcı, bu baytı, küçük 8x12 boyutuna veya karakterin bitmapine sahip başka bir "karakter tablosuna" dizinlemek için kullanır. DOS bu karakter tablosuna bir kod sayfası diyor.

CGA ile başlayarak, adaptöre karakter tablosunu adaptörün RAM'inde belirli bir yerde almasını söyleyebilirsiniz. Her bağdaştırıcının o kart için varsayılan "yazı tipi" olan bir karakter ROM'u vardır (bu, standart IBM yazı tipidir), ancak bağdaştırıcının RAM'daki bir konuma geçmesini ve kendi resimlerinizi buraya koymasını söyleyebilirsiniz.

Yazılım neler olduğunu bildiği sürece, ekran belleğindeki karakter tablosundaki görüntülere işaret eden kodların herhangi bir ASCII koduyla aynı çizgisi yoktur, ancak bunu yapmak daha kolaydır. 1-31 için yazdırılamaz ASCII karakterleri olan ekran bellek kodları (ve karakter tablosu şekilleri) olduğunu fark edeceksiniz - ancak doğrudan ekran belleğine yazarak ( DEFSEG = &HB800 : POKE 0,1GW- BASIC'deki anıların en üstteki karakteri bir gülen yüze değiştirmek için zihin) bunları görüntülemeye devam edebilirsiniz.

Doğru görüntüleri adaptörün RAM'ine koyabilir ve gerekli yazılım desteğine sahipseniz, diğer dilleri görüntülemek iyi olur.


CGA kadar erken miydi? Yaşlanmalıyım. (Savunmaya göre, bu cevabı büyük ölçüde hafızadan yazdım ve aslında bu teknikleri sonsuza dek eğlenmek için bile kullanmadım.)
CVn

Sanırım ona baktıktan hemen sonra, EGA'ydı.
LawrenceC

İşaretçiyi değiştirerek metin yazı tipini değiştirebileceğimizi biliyorum, yıllar önce nasıl yapıldığını öğrendim, sadece 256 baytlık karakter noktalarını bile tutamadıkları için çift baytlık karakter kümesini nasıl temsil edebileceklerini bilmiyorum Ekrandaki tüm karakter
sayısını hesaba katmayan

1

Wikipedia'daki "VGA uyumlu metin modu" sayfasında ve ayrıca bazı VGA programlama kitaplarında bir şey buldum:

Hem EGA hem de VGA metin modları ekranda aynı anda 512 glif veya her biri 256 glif olan 2 kümeye izin verir. Öznitelik bit 3 (Ön Plan Renk Yoğunluğu) ayrıca A veya B sıraları arasında seçim yapabilir. Normalde gerçekleşen şey, varsayılan olarak hem A hem de B Yazı Tipi Kayıtlarının aynı adresi göstererek size yalnızca 256 glif verir. Bu nedenle, çalışması için Yazı Tipi Kayıtlarını doğru adreslere ayarlamanız gerekir.

Her bankanın 8192 baytı vardır ve bankadaki 256 glifin her birinde 32 bayt (8 piksel genişliğinde ve 32 piksel yüksekliğinde) bulunur. Karakterlerinizin doğru yüksekliğini söylemek için Scanline Count kaydını ayarlayabilirsiniz. VGA kartları ekranda 400 tarama çizgisi yazdırırken, EGA 350 ekranda tarama yapar, bu nedenle size 25 karakter satırı vermek için karakter yüksekliklerini sırasıyla 16 ve 14 tarama çizgisine ayarlarlar. Ayrıca, VGA'da her glifin 8 veya 9 nokta genişliğinde olabilir, ancak 9. sütun boş veya yalnızca 8. sütun tekrarıdır. Her iki bankadaki tüm bu glifler kullanıcı tanımlı olabilir.

Bazı dillerde ekranda 256'dan fazla farklı karakteri nasıl elde edebilirsiniz? Yukarıdaki örneklerde, her özel yabancı karakter iki gliften (sol ve sağ) veya daha fazlasından oluşur. İlk, örneğin, A bankasından 128 glifi ASCII metni için ayırabilirsiniz ve yine de A bankasından 128 glif + B bankasından 256 glifiniz özelleştirmeniz için 38 glifiniz olur.

Ayrıca, büyük bir karakter seti yapmak için farklı sol ve sağ tarafları birleştirebilirsiniz! Örneğin, kullanıcı tanımlı 384 gliflerden 184 için sol taraf için 184 ve sağ taraf için 200 ayırmak istediğinizi varsayalım: 184 * 200 = 36800 farklı karaktere sahip olabilirsiniz! (elbette, çoğu muhtemelen bu dil için geçersiz karakterler olacaktır, ancak yine de çok sayıda geçerli kombinasyon alabilirsiniz).

Yukarıdaki Japonca dil örneğinde, sol taraftaki glifi paylaşan "ha" ve "ba" karakterlerine sahipsiniz. Aynı "si" ve "zi" karakterleri için de geçerlidir. "ko" ve "ni" sağ tarafları o kadar benzerdir ki, sağ taraftaki glifi paylaşabilirler. Aynı şey "ru" ve "ro" karakterleri için de söylenebilir. İyi bir tasarım ile karakter setinizi çok iyi genişletebilirsiniz. "Le" karakterinin sağ tarafındaki glif, ekranın sol üst köşesinde (gri renkte) ve dikey kaydırma çubuğunda, yukarı ve aşağı düğmelerinin de değiştirildiği anlamına gelir, yani A bankasının en azından bir kısmı yeni glifleri barındırmak için de kullanılmıştır.

Sonuç olarak, erken PC çağındaki BIOS dizesi işlevleri Unicode uyumlu değildi, ama olması gerekmiyor. Tek yapmanız gereken 512 glifinizi özelleştirmek ve doğru EGA veya VGA kayıtlarını ayarlamaktı. Örneğin, "! @" "# $" "% ^" "& *" "Çé" "ñÑ" glifleri yabancı karakterlerinize (A veya B bankasında) özelleştirebilir ve BIOS yazdırmasını yapabilirsiniz "! @ # S% ^ & * çéñÑ "dizesi aynı anda. BIOS glifleri kontrol etmez. Doğrudan video belleğine yazabileceğiniz için BIOS işlevlerini de kullanamazsınız. B bankasından bir glif kullanmak için Önalan Rengi niteliğini 8 ile 15 (parlak renk) arasında bir değere ayarlayın.

(üzgünüm kötü ingilizcem)


Soruda belirtildiği gibi 512 karaktere sahip olduğumuzu biliyorum. Bununla birlikte, yukarıdaki programlar , aynı anda görüntülenen şeylerin sayısını önemli ölçüde artıran Kana değil , gerçek Kanji karakterlerini gösteriyor . Sınırlı kodlama yarı genişliğine sahip sistemlerde ayrı maru ve çadırı olan Katakana kullanılacaktır, böylece aynı kod noktası hem し hem de じ veya は ve ば için kullanılabilir, sol ve sağ kısmı paylaşmaya gerek yoktur
phuclv

0

Biraz araştırma yaptım ve tahmin ettiğim gibi, grafik modunu kullanmanız veya özel donanım desteğine ihtiyacınız var çünkü VGA metin modunda 512'den fazla karakter kullanmanın bir yolu yok

DOS'un kendisi karakter başına 1 baytın ötesinde karakter kümelerinde yazdıramaz, çünkü 2 x 256 karakter boyutundan fazla yazı tipine sahip olmayan VGA donanımını kullanan BIOS işlevlerini kullanır. Böylece bu, kapsamlı yazı tipleri oluşturmak için grafik modunu kullanan bir DRIVER için bir iş gibi geliyor. Zaten birkaç grafik DOS metin editöründe ve benzeri Unicode yazı tiplerini destekliyoruz (teşekkürler :-)) ve DBCS veya UTF-8'in kullanılıp kullanılmadığı, her ikisi de "karakterin boyutu bir veya daha fazla bayt" işleme "anomalisini" paylaşabilir .

FreeDOS'ta Japonca için herhangi bir resmi destek olacak mı?

DOS (DOS / V) Japonca sürümü ilk yaklaşım kullanır ve metin modu taklit tarafından grafik modunda karakterleri render özel sürücüsü kullanarak. Sürücü, DOS'un metin görüntüleme yeteneklerini genişletmek için bir mekanizma olan IBM V-Text standardını izler. Çeşitli arasında seçim yapabilirsiniz 16/24/32/48-nokta yazı böyle

DOS / V yazı tipi

Diğer bazı metin modu sistemleri de aynı tekniği kullanır. FreeDOS'ta Japonca desteği için bazı özel sürücüler yükleyebilirsiniz

FreeDOS Japon sürücü

Oluşturucu int 10h ve int 21h çağrılarını keser ve metni manuel olarak çizer, böylece normal İngilizce programlarında bile çalışır. Ancak doğrudan VGA belleğe yazılan programlar için çalışmaz. Japonca karakterler yazdırmak için int 5h ve int 17h de kancalanır.

Göre DOS / V manuel altına 4 yeni fonksiyonları ile int 15h yoluyla V-Metin sonradan IBM BIOS da eklendi desteği

5010H Video extension information acquisition
5011H Video extension function registration
5012H Video extension driver release
5013H Video extension driver lock setting

Eski PC'lerin BIOS'larında Japonca destek görmemizin nedeni de bu.

Bununla birlikte, grafik modunun yavaşlığı, kaydırma sırasında özel işlem gerektiren hatalara neden olabilir

DOS / V aslında Japonca metin modu için ilk yazılım çözümüdür

Bu arada, 1980'lerin başından beri Japonca karakterleri gösterme sorununa bir yazılım çözümü üretmek için IBM Japonya'da ciddi araştırmalar devam ediyordu. Yüksek çözünürlüklü VGA monitörlerin, daha hızlı işlemcilerin, daha büyük belleklerin ve sabit sürücülerin ortaya çıkmasıyla, IBM'in Fujisawa ve Yamato araştırma laboratuvarlarındaki tasarımcılar, kanji karakterlerinin şekli ve boyutu hakkındaki bilgilerin diskte saklanabileceğini, genişletilmiş belleğe yüklenebileceğini, ve grafik modu VRAM aracılığıyla görüntülenir. (Bu arada DOS / V'deki "V" Japonca karakterleri yazılım aracılığıyla görüntülemek için gereken VGA monitöründen gelir.)

DOS / V: Sabit (ware) Problemlere Yumuşak (ware) Çözüm

Aynı makaleye göre, DOS / V icat edilmeden önce diğer sistemlerin hepsinin donanımda bir Kanji ROM'a ihtiyacı var

Tüm bilgisayar markaları, Japon karakterlerinin görüntülenmesi için donanım çözümleri kullandı ve tüm karakterlerin verilerini kanji ROM olarak bilinen özel yongalarda sakladı. Bu yöntem, CPU girişinin her karakterinin çift bayt kodunun CPU'ya gönderilmesini gerektiriyordu, bu da karşılık gelen karakteri kanji ROM'dan aldı ve metin modu VRAM aracılığıyla ekrana gönderdi. Kanji ROM kullanımı, her karakterin şeklinin sabit olduğu anlamına gelirken, metin modu VRAM kullanımı her karakter için standart bir 16x16 nokta boyutu belirledi.

Örneğin , Japonca yazı tipine sahip özel bir grafik bağdaştırıcısı kullanan IBM Personal System / 55 , böylece gerçek metin modu elde ederler

1980'lerin başında IBM Japonya, Asya-Pasifik bölgesi için IBM x 5550 ve IBM JX olmak üzere iki adet x86 tabanlı kişisel bilgisayar hattı yayınladı. 5550 diskten Kanji yazı tiplerini okur ve 1024 x 768 yüksek çözünürlüklü monitörde grafik karakter olarak metin çizer.

https://en.wikipedia.org/wiki/DOS/V#History

IBM 5550'ye benzer şekilde, metin modu 1040x725 piksel (12x24 ve 24x24 piksel yazı tipi, 80x25 karakter) idi ve 8 renkte Japonca karakterler yazı tipi ROM'undan okunabilir

AX mimarisi standart EGA yerine özel bir Jega adaptörü kullanır

AX (Architecture eXtended), 1986'larda başlayan ve yabancı IBM PC'ler için yazılmış yazılımlarla uyumluluk sağlarken, PC'lerin çift baytlı (DBCS) Japonca metinlerini özel donanım yongaları ile işlemesine izin veren bir Japon bilgi işlem girişimiydi.

...

Kanji karakterlerini yeterli netlikte göstermek için AX makineleri, o zamanlar başka yerlerde yaygın olan 640x350 standart EGA çözünürlüğü yerine 640x480 çözünürlüğe sahip JEGA (ja) ekranlara sahipti. Kullanıcılar genellikle AX-BIOS ve Japonca karakterlerin girilmesini sağlayan bir IME'yi çağıran 'JP' ve 'US' yazarak Japonca ve İngilizce modları arasında geçiş yapabilirler.

Daha sonraki sürümler ayrıca VGA'da yazılım emülasyonu için özel bir AX-VGA / H donanımı ve AX-VGA / S ekler

Bununla birlikte, AX'in piyasaya sürülmesinden kısa bir süre sonra IBM, AX'in açıkça uyumlu olmadığı VGA standardını yayınladı (standart olmayan "süper EGA" uzantılarını destekleyen tek kişi değildi). Sonuç olarak, AX konsorsiyumu uyumlu bir AX-VGA (ja) tasarlamak zorundaydı. AX-VGA / H, AX-BIOS ile bir donanım uygulamasıyken AX-VGA / S bir yazılım öykünmesiydi.

Daha az kullanılabilir yazılım ve diğer sorunlar nedeniyle AX başarısız oldu ve Japonya'daki PC-9801 hakimiyetini kıramadı. 1990'da IBM Japonya, IBM PC / AT ve klonlarının standart bir VGA kartı kullanarak ek donanım olmadan Japonca metin görüntülemesini sağlayan DOS / V'yi tanıttı. Kısa süre sonra AX ortadan kayboldu ve NEC PC-9801'in düşüşü başladı.

NEC PC 98 serisi ayrıca ekran denetleyicisi bir karakter ROM var

Standart bir PC-98, sırasıyla 12 KB ana belleğe ve 256 KB video RAM'e sahip iki µPD7220 ekran denetleyicisine (master ve slave) sahiptir. Ana ekran denetleyicisi, JIS X 0201 (7x13 piksel) ve JIS X 0208 (15x16 piksel) karakterleri gösteren yazı tipi ROM'unu işler

Çince ve Korece için durumu bilmiyorum ama bence aynı teknikler kullanılıyor. Bunu başarmanın başka yolları olup olmadığından emin değilim


-1

Unicode metin gliflerinin görüntülenebilmesi için sabit kodlu metin modu yerine grafik moduna ihtiyacınız vardır. Sonra MS-DOS unicode yazı tipi kullanmak ve bunu kullanmak için dil eşleme değiştirmek için ayarlayın.

http://www.mobilefish.com/tutorials/windows/windows_quickguide_dos_unicode.html


Hayır, yayınladığım görüntülere bak, bu gerçek DOS modu, pencerelerde promt değil
phuclv

Makaledeki başlık tamamen yanlış ve yanıltıcı. cmd.exe DOS ve benzer komutlar benzeyen bir terminal arabirimi olmasına rağmen DOS değil . Komut İstemi ve MS-DOS aynı şey midir?
phuclv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.