Bagaimana MS-DOS dan program mode teks lainnya menampilkan karakter CJK dengan lebar ganda?

9

Saya telah melihat banyak layar pengaturan BIOS mode teks dalam bahasa Jepang dan Cina. Baru-baru ini saya bahkan melihat pengaturan Windows XP dalam bahasa Jepang. MS-DOS juga memiliki versi Jepang. Mode DOS nyata , bukan command prompt Windows!

Pengaturan BIOS Jepang

MS-DOS Jepang 6.2

Satu layar mode teks biasa memiliki ukuran 80x25 . Dengan karakter Jepang yang diambil sebesar lebar karakter Latin normal, jumlah maksimum karakter Jepang yang dapat ditampilkan pada saat yang sama di layar adalah sekitar 1000. Jadi kita perlu 2000 titik kode untuk menampilkan bagian kiri dan kanan karakter.

Karena mode teks standar hanya dapat menampilkan 256 karakter, tetapi 128 karakter pertama digunakan untuk ASCII, sehingga yang dapat digunakan terbatas pada poin kode 128 tinggi. Jika perlu kami dapat memperluasnya ke 512 tetapi ini masih tidak dapat mendukung poin kode yang cukup untuk tampilan. Saya selalu bertanya-tanya bagaimana mereka berhasil menampilkan set karakter besar dengan jumlah karakter yang terbatas.

[ Pemasang Jepang XP] 8]

Mode teks di Linux tampaknya menggunakan driver mode grafis karena dapat menampilkan Unicode dan memiliki lebih banyak warna. Tapi saya tidak bisa menjelaskan bagaimana mereka melakukannya di layar pengaturan MS-DOS dan BIOS.


EDIT: Saya bahkan menemukan input teks Jepang untuk DOS

IME Jepang

Ada bahasa Korea dalam mode teks juga!

Korea

VMWare Korean DOS

phuclv
sumber
Anda mungkin tidak melihat "karakter" Jepang, yaitu kanji , melainkan hiragana atau katakana , yang memang memiliki pemetaan Unicode.
serbuk kayu
@sawdust: lihat gambar di atas dan Anda akan melihat bahwa ia dapat menampilkan tidak hanya semua kana tetapi juga Kanji
phuclv
1
Perhatikan bahwa halaman yang Anda ambil tangkapan layar penginstal OS / 2 mengatakan tepat di sebelah tangkapan layar bahwa "dukungan mode teks grafis diinisialisasi segera setelah boot OS / 2". Kata kunci grafis .
CVn
@ MichaelKjörling bukan hanya OS / 2 tetapi program pengaturan MS-DOS dan BIOS juga memiliki kemampuan ini dalam mode teks
phuclv

Jawaban:

6

Mode "80x25 karakter" normal sebenarnya 720x350 piksel (artinya setiap sel karakter berukuran 9 piksel dengan tinggi 14 piksel). Mode karakter lebar-ganda ("40x25") dapat dengan mudah menginterpolasi ini ke lebar yang lebih besar dengan menggandakan setiap kolom untuk menghemat memori konten video (memotong jumlah memori konten video yang diperlukan menjadi dua), atau menggunakan memori mesin terbang tambahan dan identik jumlah memori konten video untuk meningkatkan sel karakter hingga 18 * 14 piksel.

Cukup awal (saya pikir itu dilakukan ketika EGA diperkenalkan), dukungan untuk mesin terbang karakter yang ditentukan pengguna ditambahkan ke mode tampilan teks PC IBM.

Mode teks normal dari IBM PC hanyalah sekuens 4000 byte RAM konten video pada alamat tertentu. Ini dibaca sebagai satu byte atribut karakter (awalnya berkedip, tebal, garis bawah dll.; Kemudian digunakan kembali untuk warna latar depan dan latar belakang dan berkedip / sorot, maka batasan untuk 16 warna dalam mode teks) dan satu byte menggambarkan karakter untuk ditampilkan Mesin terbang aktual yang akan ditampilkan untuk setiap nilai byte karakter disimpan di tempat lain.

Ini berarti bahwa selama Anda dapat melakukannya dengan 256 mesin terbang berbeda pada layar pada satu waktu, dan setiap mesin terbang dapat direpresentasikan sebagai bitmap 9-bit 9x14, Anda dapat dengan mudah mengganti mesin terbang dalam memori untuk membuat karakter tampak berbeda . Sebagian, ini adalah salah satu bagian dari apa yang mode con codepage selectdilakukan pada DOS. Ini relatif sepele.

Jika Anda membutuhkan lebih dari 256 mesin terbang berbeda tetapi dapat hidup dengan berkurangnya jumlah mesin terbang di layar, Anda dapat menggunakan skema 40x25 dengan mesin terbang lebar ganda (lebar 18 piksel). Dengan asumsi bahwa jumlah total konten RAM video telah diperbaiki dan dengan asumsi bahwa Anda dapat meningkatkan memori mesin bitmap, Anda dapat beralih menggunakan dua byte dari setiap empat byte untuk mewakili satu mesin terbang di layar, memberi Anda akses ke 2 ^ 16 = 65.536 mesin terbang berbeda (termasuk mesin terbang kosong). Jika Anda merasa berani, Anda bahkan bisa melewatkan byte atribut kedua yang memberi Anda akses ke 2 ^ 24 ~ 16.7M mesin terbang yang berbeda. Kedua pendekatan ini bergantung pada dukungan perangkat lunak khusus, tetapi bagian perangkat keras dan firmware seharusnya cukup mudah dilakukan. 65.536 mesin terbang pada 18x14 piksel satu-bit bekerja hingga sekitar 2 MiB, jumlah memori yang cukup besar tetapi tidak dapat diatasi pada saat itu.

Bahasa Inggris AS Dasar membutuhkan setidaknya 62 mesin terbang khusus (angka 0-9, huruf AZ dalam huruf besar dan kecil) sehingga Anda memiliki sesuatu seperti 180-190 mesin terbang untuk dimainkan jika Anda juga ingin dapat menampilkan teks bahasa Inggris AS secara bersamaan. waktu dan pergi dengan 8 bit per mesin terbang. Jika Anda dapat hidup tanpa dukungan bahasa Inggris AS secara simultan, yang dapat Anda pilih untuk dilakukan di lingkungan yang terbatas sumber daya seperti arsitektur PC IBM awal, Anda memiliki akses ke mesin terbang penuh.

Dengan beberapa tipu daya, Anda mungkin bisa mencampur dan mencocokkan kedua skema itu juga.

Saya tidak tahu bagaimana itu benar-benar dilakukan tetapi keduanya adalah skema yang layak untuk bagaimana mendapatkan huruf "mewah" yang sangat terbatas karakter-hitung ke layar IBM PC sederhana dalam mode teks yang saya dapat datang dengan hanya duduk di depan Stack Exchange sejenak. Sangat mungkin bahwa ada mode grafis tambahan yang membuatnya lebih mudah dalam praktiknya.

Juga, ingatlah perbedaan antara mode teks dan mode grafis menampilkan teks . Jika Anda berada dalam mode grafis, mungkin melalui VESA yang cukup didukung secara universal, Anda sendirian sejauh menggambar karakter mesin terbang pergi tetapi Anda juga memiliki lebih banyak kebebasan dalam cara menggambar mereka. Sebagai contoh, saya cukup yakin bagian berbasis teks dari Windows NT (yang merupakan keluarga produk Windows XP) menggunakan mode grafis untuk menampilkan teks, termasuk layar boot Windows NT 4.0 dan BSODs.

sebuah CVn
sumber
Anda mungkin melihat bahwa ada karakter Latin lebar normal di samping karakter Jepang / Korea lebar ganda sehingga tidak boleh 40x25 mode lebar ganda. Karena itu Anda tidak dapat menggabungkan 2 byte dari setiap 4 byte untuk mewakili mesin terbang. Menggunakan bit 3 dari warna latar depan Anda dapat mewakili 512 mesin terbang pada saat yang sama tetapi masih tidak cukup jika karakter mengisi sebagian besar layar en.wikipedia.org/wiki/VGA-compatible_text_mode#Fonts
phuclv
@ LưuVĩnhPhúc Anda dapat mengambil kembali bit yang tinggi, atau menggunakan sejumlah trik lain yang mungkin untuk mencampur karakter yang membutuhkan banyak-satuan dengan yang tunggal. Saya masih berpikir jawabannya adalah untuk mengenali pernyataan yang dibuat dalam paragraf pembuka: bahkan ketika menunjukkan karakter, pada tingkat tertentu Anda masih berurusan dengan piksel, dan piksel tersebut dapat dikerjakan meskipun mungkin tidak secara langsung.
CVn
Saya tahu semua hal berbasis teks dan grafis-mode-menampilkan-teks, hanya bingung bagaimana mereka memiliki poin kode yang cukup untuk multibyte karena bagian kiri dan kanan memerlukan 2 poin kode. Tetapi dari apa yang Anda katakan, saya memikirkan cara lain untuk melakukannya. Saya pikir jawaban Anda dapat diterima
phuclv
1

Ini menyederhanakan apa yang dikatakan @Michael Kjörling.

Dalam mode teks, Anda memiliki "memori layar" yang memiliki 1 byte per karakter pada layar yang memberi tahu adaptor karakter apa yang muncul di setiap posisi layar. (Ada juga "atribut" byte yang memberi tahu adaptor apa warna dan hal-hal seperti garis bawah, kedip, dll.).

Adaptor menggunakan byte ini untuk mengindeks ke "tabel karakter" lain yang memiliki bitmap 8x12 kecil atau karakter apa pun. DOS menyebut tabel karakter ini halaman kode.

Dimulai dengan CGA, Anda dapat memberi tahu adaptor untuk mendapatkan tabel karakter di tempat tertentu dalam RAM adaptor. Setiap adaptor memiliki ROM karakter yang memiliki "font" default untuk kartu itu (yang merupakan font IBM standar), tetapi Anda dapat memberitahu adaptor untuk beralih ke lokasi dalam RAM dan meletakkan gambar Anda sendiri di sana.

Selama perangkat lunak tahu apa yang terjadi, kode dalam memori layar yang mengarah ke gambar dalam tabel karakter tidak memiliki garis dengan kode ASCII, meskipun lebih mudah jika mereka melakukannya. Anda akan melihat ada kode memori layar (dan bentuk tabel karakter) untuk 1-31 yang merupakan karakter ASCII yang tidak dapat dicetak - tetapi dengan menulis ke memori layar secara langsung (kenangan indah DEFSEG = &HB800 : POKE 0,1di GW-BASIC untuk mengubah karakter paling atas menjadi smiley datang ke pikiran) Anda masih dapat menampilkannya.

Jadi menampilkan bahasa lain baik-baik saja, jika Anda dapat memasukkan gambar yang tepat ke dalam RAM adaptor dan mendapatkan dukungan perangkat lunak yang diperlukan.

LawrenceC
sumber
Apakah sudah sedini CGA? Aku pasti sudah tua. (Untuk pembelaan saya, saya memang menulis jawaban itu sebagian besar dari ingatan, dan belum benar-benar menggunakan teknik-teknik itu bahkan untuk bersenang-senang seperti selamanya.)
CVn
Saya pikir Anda benar setelah melihatnya, itu adalah EGA.
LawrenceC
Saya tahu kita dapat mengubah font teks dengan mengubah pointer, saya telah belajar bagaimana melakukannya bertahun-tahun sebelumnya, hanya tidak tahu bagaimana mereka dapat mewakili set karakter byte ganda, karena 256 atau 512 poin kode bahkan tidak dapat menahan cukup jumlah maksimum karakter yang berbeda di layar, tidak termasuk seluruh rangkaian karakter kompleks
phuclv
1

Saya menemukan sesuatu di halaman "mode teks yang kompatibel dengan VGA" di Wikipedia dan juga di beberapa buku pemrograman VGA:

Baik mode teks EGA dan VGA memungkinkan 512 mesin terbang simultan di layar, atau 2 bank dengan 256 mesin terbang masing-masing. Bit atribut 3 (Foreground Color Intensity) juga dapat memilih antara bank A atau B. Apa yang biasanya terjadi adalah bahwa secara default register Font A dan B menunjuk ke alamat yang sama, sehingga Anda hanya memiliki 256 mesin terbang. Jadi, agar berfungsi, Anda harus mengatur Font Register ke alamat yang benar.

Setiap bank memiliki 8192 byte, dan masing-masing dari 256 mesin terbang di bank memiliki 32 byte (lebar 8 piksel dan tinggi 32 piksel). Anda dapat mengatur register Hitungan Scanline untuk mengetahui ketinggian karakter Anda yang benar. Kartu VGA mencetak 400 garis pemindaian di layar sementara EGA mencetak 350 garis pemindaian, oleh karena itu, untuk memberi Anda 25 baris karakter, mereka mengatur tinggi karakter masing-masing menjadi 16 dan 14 garis pemindaian. Juga, dalam VGA, setiap mesin terbang dapat memiliki lebar 8 atau 9 titik, tetapi kolom ke-9 kosong atau hanya pengulangan kolom ke-8. Semua mesin terbang ini di kedua bank dapat ditentukan oleh pengguna.

Bagaimana Anda bisa mendapatkan lebih dari 256 karakter berbeda di layar dalam beberapa bahasa? Dalam contoh di atas, setiap karakter asing khusus dibuat dari dua mesin terbang (kiri dan kanan), atau lebih. Anda dapat mengatur yang pertama, katakanlah, 128 mesin terbang dari bank A terpisah untuk teks ASCII, dan Anda masih akan memiliki 128 mesin terbang dari bank A + 256 mesin terbang dari bank B = 384 mesin terbang untuk Anda sesuaikan.

Selain itu, Anda dapat menggabungkan sisi kiri dan kanan yang berbeda untuk membuat set karakter besar! Katakanlah, misalnya, bahwa dari 384 glyph yang ditentukan pengguna, Anda ingin memesan 184 untuk sisi kiri dan 200 untuk sisi kanan: Anda dapat memiliki 184 * 200 = 36800 karakter yang berbeda! (tentu saja, sebagian besar dari mereka mungkin akan menjadi karakter yang tidak valid untuk bahasa itu, tetapi Anda masih bisa mendapatkan jumlah kombinasi yang valid).

Dalam contoh bahasa Jepang di atas, Anda memiliki karakter "ha" dan "ba" yang berbagi mesin terbang sisi kiri. Sama untuk charaters "si" dan "zi". Sisi kanan "ko" dan "ni" sangat mirip sehingga mereka dapat berbagi mesin terbang sisi kanan yang sama. Hal yang sama dapat dikatakan tentang karakter "ru" dan "ro". Dengan desain yang bagus, Anda dapat mengembangkan set karakter Anda dengan sangat baik. Mesin terbang sisi kanan karakter "le" muncul di kiri atas layar (abu-abu), dan di bilah gulir vertikal, tombol naik dan turun juga berubah, yang berarti bahwa setidaknya bagian dari bank A juga digunakan untuk mengakomodasi mesin terbang baru.

Kesimpulannya, fungsi string BIOS di era PC awal tidak sadar Unicode, tetapi tidak harus. Yang harus Anda lakukan adalah menyesuaikan 512 glyphs Anda dan mengatur register EGA atau VGA yang benar. Misalnya, Anda dapat mengubahsuaikan "! @" "# $" "% ^" "& *" "Çé" "ñÑ" mesin terbang ke karakter asing Anda (di bank A atau B), dan kemudian buat BIOS cetak "! @ # S% ^ & * çéñÑ "string sekaligus. BIOS tidak akan memeriksa mesin terbang. Anda juga tidak dapat menggunakan fungsi BIOS sama sekali, karena Anda dapat menulis langsung di memori video. Untuk menggunakan mesin terbang dari bank B, cukup setel atribut Foreground Color karakter ke nilai antara 8 dan 15 (warna cerah).

(maaf bahasa Inggris saya yang buruk)

Fabiano Freitas
sumber
Saya tahu bahwa kami dapat memiliki 512 karakter seperti yang disebutkan dalam pertanyaan. Namun masalahnya adalah bahwa program-program di atas menampilkan karakter Kanji asli , bukan Kana, yang meningkatkan jumlah hal yang ditampilkan pada saat yang sama secara signifikan. Dalam sistem dengan penyandian terbatas lebar katakana setengah akan digunakan, yang memiliki maru dan tenten terpisah, sehingga titik kode yang sama dapat digunakan untuk し dan じ, atau は dan ば, tidak perlu berbagi bagian kiri dan kanan
phuclv
0

Saya melakukan riset dan seperti yang saya perkirakan, Anda harus menggunakan mode grafis atau memerlukan dukungan perangkat keras khusus karena tidak ada cara untuk menggunakan lebih dari 512 karakter dalam mode teks VGA

Yah, DOS itu sendiri tidak dapat mencetak dalam rangkaian karakter melebihi 1 byte per karakter, karena ia menggunakan fungsi BIOS yang pada gilirannya menggunakan perangkat keras VGA yang tidak dapat memiliki lebih dari 2 x 256 huruf berukuran huruf. Jadi ini sekali lagi terdengar seperti pekerjaan untuk DRIVER, yang menggunakan mode grafis untuk membuat font yang luas. Kami sudah memiliki dukungan untuk font Unicode dalam beberapa editor teks DOS grafis dan sejenisnya (terima kasih :-)) dan apakah DBCS atau UTF-8 digunakan, keduanya berbagi "ukuran karakter dapat satu atau lebih byte" penanganan "anomali" .

Apakah akan ada dukungan resmi untuk bahasa Jepang di FreeDOS?

Versi Jepang dari DOS (DOS / V) menggunakan pendekatan pertama dan mensimulasikan mode teks dengan merender karakter dalam mode grafis menggunakan driver khusus. Driver mengikuti standar IBM V-Text yang merupakan mekanisme untuk memperluas kemampuan tampilan teks DOS. Anda dapat memilih berbagai font 16/24/32/48-dot seperti ini

Font DOS / V

Beberapa sistem mode teks lain juga menggunakan teknik yang sama. Dalam FreeDOS Anda dapat memuat beberapa driver khusus untuk dukungan Jepang

FreeDOS driver Jepang

Penyaji akan memotong panggilan int 10j dan int 21j dan menggambar teks secara manual, sehingga akan berfungsi bahkan untuk program bahasa Inggris normal. Tetapi itu tidak akan berfungsi untuk program yang menulis ke memori VGA secara langsung. Untuk mencetak karakter Jepang int 5h dan int 17h juga cocok.

Menurut manual DOS / V nanti IBM BIOS juga menambahkan dukungan untuk V-Text melalui int 15h dengan di bawah 4 fungsi baru

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

Saya kira ini juga alasan saya melihat dukungan Jepang di BIOS PC lama saya

Namun lambatnya mode grafis dapat menimbulkan gangguan saat menggulir yang memerlukan penanganan khusus

DOS / V sebenarnya adalah solusi perangkat lunak pertama untuk mode teks Jepang

Sementara itu, penelitian serius telah berlangsung di IBM Jepang sejak awal 1980-an untuk menghasilkan solusi perangkat lunak untuk masalah menampilkan karakter Jepang. Dengan munculnya monitor VGA resolusi tinggi, prosesor yang lebih cepat, dan memori yang lebih besar dan hard drive, desainer di laboratorium riset Fujisawa dan Yamato IBM menyadari bahwa informasi tentang bentuk dan ukuran karakter kanji dapat disimpan dalam disk, dimasukkan ke dalam memori yang diperluas, dan ditampilkan melalui mode grafis VRAM. (Omong-omong, "V" di DOS / V, berasal dari monitor VGA yang diperlukan untuk menampilkan karakter Jepang melalui perangkat lunak.)

DOS / V: Solusi Soft (ware) untuk Masalah Hard (ware)

Menurut artikel yang sama, sebelum penemuan DOS / V sistem lain semua membutuhkan ROM Kanji dalam perangkat keras

Semua merek komputer menggunakan solusi perangkat keras untuk menangani tampilan karakter Jepang, menyimpan data untuk semua karakter pada chip khusus yang dikenal sebagai ROM kanji. Metode ini membutuhkan kode byte ganda untuk setiap karakter input keyboard untuk dikirim ke CPU, yang pada gilirannya mengambil karakter yang sesuai dari ROM kanji dan mengirimkannya ke layar melalui mode teks VRAM. Penggunaan ROM kanji berarti bahwa bentuk setiap karakter telah diperbaiki, sementara penggunaan mode teks VRAM menetapkan ukuran standar 16x16 dot untuk setiap karakter.

Misalnya IBM Personal System / 55 yang menggunakan adapter grafis khusus dengan font Jepang, sehingga mereka mendapatkan mode teks nyata

Pada awal 1980-an, IBM Jepang merilis dua jalur komputer pribadi berbasis x86 untuk wilayah Asia-Pasifik, IBM 5550 dan IBM JX. The 5550 membaca huruf Kanji dari disk, dan menggambar teks sebagai karakter grafik pada monitor resolusi tinggi 1024 x 768.

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

Mirip dengan IBM 5550, mode teks adalah 1040x725 piksel (font 12x24 dan 24x24 piksel, 80x25 karakter) dalam 8 warna, dapat menampilkan karakter Jepang dibaca dari font ROM

The arsitektur AX menggunakan adaptor Jega khusus bukan EGA standar

AXE (Arsitektur eXtended) adalah inisiatif komputasi Jepang mulai sekitar tahun 1986 untuk memungkinkan PC menangani teks Jepang bita-ganda (DBC) melalui chip perangkat keras khusus, sementara memungkinkan kompatibilitas dengan perangkat lunak yang ditulis untuk PC IBM asing.

...

Untuk menampilkan karakter Kanji dengan kejelasan yang cukup, mesin AX memiliki layar JEGA (ja) dengan resolusi 640x480 daripada resolusi EGA standar 640x350 yang lazim di tempat lain pada saat itu. Pengguna biasanya dapat beralih antara mode Jepang dan Inggris dengan mengetikkan 'JP' dan 'AS', yang juga akan menggunakan AX-BIOS dan IME yang memungkinkan input karakter Jepang.

Versi selanjutnya juga menambahkan perangkat keras AX-VGA / H khusus dan AX-VGA / S untuk emulasi perangkat lunak pada VGA

Namun, segera setelah rilis AXE, IBM merilis standar VGA yang AX jelas tidak kompatibel (mereka bukan satu-satunya yang mempromosikan ekstensi "super EGA" non-standar). Akibatnya, konsorsium AX harus merancang AX-VGA (ja) yang kompatibel. AX-VGA / H adalah implementasi perangkat keras dengan AX-BIOS, sedangkan AX-VGA / S adalah emulasi perangkat lunak.

Karena perangkat lunak yang kurang tersedia dan masalah lainnya, AX gagal dan tidak dapat memecah dominasi PC-9801 di Jepang. Pada tahun 1990, IBM Jepang meluncurkan DOS / V yang memungkinkan IBM PC / AT dan klonnya untuk menampilkan teks Jepang tanpa perangkat keras tambahan menggunakan kartu VGA standar. Segera setelah itu, AX menghilang dan penurunan NEC PC-9801 dimulai.

Seri NEC PC-98 juga memiliki ROM karakter pada pengontrol tampilan

PC-98 standar memiliki dua pengontrol tampilan μPD7220 (master dan slave) dengan memori utama 12 KB dan RAM video 256 KB. Pengontrol tampilan master menangani font ROM, menampilkan karakter JIS X 0201 (7x13 piksel) dan JIS X 0208 (15x16 piksel)

Saya tidak tahu situasi untuk Cina dan Korea tetapi saya pikir teknik yang sama digunakan. Saya tidak yakin apakah ada cara lain untuk mencapai itu atau tidak

phuclv
sumber
-1

Anda memerlukan mode grafis alih-alih mode teks kode keras sehingga mesin terbang teks unicode dapat ditampilkan. Kemudian Anda mengatur MS-DOS untuk menggunakan font unicode dan mengubah pemetaan bahasa untuk menggunakannya.

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

headkase
sumber
Tidak, lihat gambar yang saya posting, ini adalah mode DOS asli, bukan perintah promt di windows
phuclv
Judul dalam artikel tersebut sepenuhnya salah dan menyesatkan. cmd.exe bukan DOS meskipun memiliki antarmuka terminal yang menyerupai DOS dan beberapa perintah serupa. Apakah Command Prompt dan MS-DOS adalah hal yang sama?
phuclv