Wie können MS-DOS und andere Textmodusprogramme doppelt breite CJK-Zeichen anzeigen?

3397
phuclv

Ich habe viele Textmodus-BIOS-Setup-Bildschirme in Japanisch und Chinesisch gesehen. Ich habe vor kurzem sogar Windows XP-Setup auf Japanisch gesehen. MS-DOS hatte auch japanische Versionen. Echter DOS-Modus, keine Windows-Eingabeaufforderung!

Japanisches BIOS-Setup

Japanisches MS-DOS 6.2

Ein typischer Bildschirm für den Textmodus hat eine Größe von 80 x 25 . Bei japanischen Zeichen, die doppelt so groß sind wie normale lateinische Zeichen, beträgt die maximale Anzahl japanischer Zeichen, die gleichzeitig auf dem Bildschirm angezeigt werden können, etwa 1000. Wir benötigen also 2000 Codepunkte, um den linken und rechten Teil der Zeichen anzuzeigen.

Als Standardtextmodus können nur 256 Zeichen angezeigt werden, die ersten 128 werden jedoch für ASCII verwendet, sodass die verwendbaren auf die hohen 128 Codepunkte beschränkt sind. Bei Bedarf können wir es auf 512 erweitern, dies unterstützt jedoch immer noch nicht genügend Codepunkte für die Anzeige. Ich frage mich immer, wie es ihnen gelungen ist, den großen Zeichensatz mit einer so begrenzten Anzahl von Zeichen darzustellen.

[Japanisches XP-Installationsprogramm ] 8]

Der Textmodus in Linux scheint einen Grafiktreiber zu verwenden, da er Unicode anzeigen kann und mehr Farben enthält. Aber ich kann nicht erklären, wie sie es in MS-DOS- und BIOS-Setup-Bildschirmen machen.


EDIT: Ich habe sogar eine japanische Texteingabe für DOS gefunden

Japanisches IME

Es gibt auch Koreanisch im Textmodus!

Koreanisch

VMWare Korean DOS

7
Sie betrachten wahrscheinlich nicht japanische "Zeichen", dh * Kanji *, sondern * Hiragana * oder * Katakana *, die Unicode-Zuordnungen haben. sawdust vor 11 Jahren 0
@sawdust: schau dir das Bild oben an und du wirst sehen, dass es nicht nur Kana, sondern auch Kanji anzeigen kann phuclv vor 11 Jahren 0
Beachten Sie, dass [die Seite, von der Sie wahrscheinlich den OS / 2-Installer-Screenshot erstellt haben] (http://www.os2museum.com/wp/?p=1700) direkt neben dem Screenshot aussagt, dass "die Unterstützung für den grafischen Textmodus fast initialisiert wurde sofort beim Booten von OS / 2 ". Schlüsselwort * grafisch *. a CVn vor 10 Jahren 1
@ MichaelKjörling Es ist nicht nur OS / 2, sondern auch MS-DOS und BIOS-Setup-Programme haben diese Fähigkeit auch im Textmodus phuclv vor 10 Jahren 0

4 Antworten auf die Frage

4
a CVn

Der normale Modus "80 x 25 Zeichen" ist tatsächlich 720 x 350 Pixel (was bedeutet, dass jede Zeichenzelle 9 Pixel breit und 14 Pixel hoch ist). Zeichenmodi mit doppelter Breite ("40 x 25") können entweder einfach auf die größere Breite interpoliert werden, indem jede Spalte verdoppelt wird, um Speicher für Videoinhalt zu sparen (halbiert die erforderliche Menge an Videoinhaltsspeicher), oder zusätzlichen Glyphenspeicher und einen identischen Speicher zu verwenden Speicherplatz für Videoinhalte, um die Zeichenzellen auf 18 * 14 Pixel zu erhöhen.

Ziemlich früh (ich glaube, es wurde getan, als EGA eingeführt wurde), wurde die Unterstützung für benutzerdefinierte Zeichen-Glyphen zum Textanzeigemodus des IBM PC hinzugefügt.

Der normale Textmodus des IBM PC ist einfach ein sequentielles 4000 Byte RAM des Videoinhalts an einer bestimmten Adresse. Diese werden als ein Byte mit Zeichenattributen gelesen (ursprünglich blinken, fett, unterstrichen usw.), später für Vorder- und Hintergrundfarben und Blinken / Hervorheben (daher die Beschränkung auf 16 Farben im Textmodus) und ein Byte, das das Zeichen beschreibt angezeigt werden. Das tatsächliche Zeichen, das für jeden Zeichenbytewert angezeigt werden soll, wird an anderer Stelle gespeichert.

Dies bedeutet, dass, solange Sie sich mit 256 verschiedenen Glyphen auf dem Bildschirm aufhalten können und jede Glyphe als 9 x 14-Bit-Bitmap dargestellt werden kann, die Glyphen im Speicher einfach ersetzt werden können, damit die Zeichen anders aussehen . Teilweise war dies ein Teil von mode con codepage selectDOS. Das ist relativ trivial.

Wenn Sie mehr als 256 verschiedene Glyphen benötigen, aber mit der reduzierten Anzahl von Glyphen auf dem Bildschirm leben können, können Sie ein 40 x 25-Schema mit doppelt breiten (18 Pixel breiten) Glyphen wählen. Wenn Sie davon ausgehen, dass die Gesamtmenge des Video-Content-RAMs festgelegt ist und Sie den Bitmap-Speicher für Glyphen erhöhen können, können Sie zwei Bytes aus jeweils vier Bytes verwenden, um eine Glyphe auf dem Bildschirm darzustellen, sodass Sie Zugriff auf 2 ^ 16 = haben 65.536 verschiedene Glyphen (einschließlich der leeren Glyphe). Wenn Sie sich gewagt fühlen, können Sie sogar das zweite Attribut-Byte überspringen, wodurch Sie auf 2 ^ 24 ~ 16.7M verschiedene Glyphen zugreifen können. Beide Ansätze basieren auf spezieller Software-Unterstützung, der Hardware- und Firmwareteil sollte jedoch relativ einfach sein. 65.536 Glyphen bei 18 x 14 Ein-Bit-Pixeln ergeben eine Speicherkapazität von etwa 2 MiB, eine beträchtliche Menge an Speicher, die jedoch nicht unüberwindbar ist.

Grundlegendes US-Englisch erfordert mindestens 62 dedizierte Glyphen (Zahlen 0-9, Buchstaben AZ in Groß- und Kleinschreibung), so dass Sie etwas wie 180-190 Glyphen zum Spielen haben, wenn Sie gleichzeitig auch US-amerikanischen Text anzeigen möchten Zeit und gehen mit 8 Bits pro Glyphe. Wenn Sie ohne gleichzeitige Unterstützung von US-Englisch leben können, was Sie möglicherweise in einer Umgebung mit begrenzten Ressourcen wie der frühen IBM PC-Architektur tun möchten, haben Sie Zugriff auf die gesamte Anzahl von Glyphen.

Mit etwas Tricks könnten Sie wahrscheinlich auch die beiden Schemata miteinander kombinieren.

Ich weiß nicht, wie es tatsächlich gemacht wurde, aber beide sind praktikable Schemata, wie man "ausgefallene" Alphabete mit besonders begrenzter Zeichenanzahl auf einen einfachen IBM PC-Bildschirm im Textmodus bringen kann, den ich nur vor mir sitzen kann von Stack Exchange für einen Moment. Es ist durchaus möglich, dass es zusätzliche Grafikmodi gibt, die dies in der Praxis erleichtern.

Beachten Sie auch die Unterscheidung zwischen Textmodus und Grafikmodus, die Text anzeigen . Wenn Sie sich im grafischen Modus befinden, vielleicht durch VESA, das ziemlich universell unterstützt wird, sind Sie beim Zeichnen von Zeichen-Glyphen auf sich allein gestellt, aber Sie haben auch mehr Freiheit beim Zeichnen. Ich bin zum Beispiel ziemlich sicher, dass die textbasierten Teile von Windows NT (zu der die Produktfamilie gehört, zu der Windows XP gehört) einen grafischen Modus für die Anzeige von Text verwenden, einschließlich des Windows NT 4.0-Startbildschirms und der BSODs.

Möglicherweise sehen Sie neben lateinischen Zeichen mit doppelter Breite auch japanische / koreanische Zeichen mit normaler Breite, so dass es sich nicht um einen Modus mit 40 x 25 Doppelbreiten handeln kann. Daher können Sie nicht 2 Bytes von je 4 Bytes kombinieren, um die Glyphe darzustellen. Mit Bit 3 der Vordergrundfarbe können Sie 512 Glyphen gleichzeitig darstellen, aber nicht genug, wenn die Zeichen den Großteil des Bildschirms ausfüllen https://en.wikipedia.org/wiki/VGA-compatible_text_mode#Fonts phuclv vor 11 Jahren 0
@ LưuVĩnhPhúc Sie können das High-Bit wieder verwenden oder eine beliebige Anzahl möglicher anderer Tricks verwenden, um Multibyte-Zeichen mit Einzelbyte-Zeichen zu mischen. Ich denke immer noch, dass die Antwort darin besteht, die im einleitenden Absatz gemachte Aussage zu erkennen: Selbst wenn Sie Zeichen anzeigen, beschäftigen Sie sich auf einer bestimmten Ebene immer noch mit Pixeln, und diese Pixel können bearbeitet werden, auch wenn sie vielleicht nicht direkt arbeiten. a CVn vor 11 Jahren 0
Ich kenne alle textbasierten und grafischen Darstellungen im Grafikmodus. Verwechseln Sie einfach, wie genug Codepunkte für Multibyte vorhanden sind, da der linke und rechte Teil 2 Codepunkte erfordern. Aber von dem, was Sie gesagt haben, habe ich mir eine andere Möglichkeit ausgedacht. Ich denke, deine Antwort ist akzeptabel phuclv vor 11 Jahren 0
1
LawrenceC

Dies vereinfacht das, was @Michael Kjörling sagt.

Im Textmodus haben Sie einen "Bildschirmspeicher" mit 1 Byte pro Bildschirmzeichen, der dem Adapter mitteilt, welches Zeichen an jeder Bildschirmposition angezeigt wird. (Es gibt auch "Attribut" -Bytes, die dem Adapter mitteilen, welche Farbe und welche Dinge unterstrichen werden, blinzeln usw.).

Der Adapter verwendet dieses Byte, um in eine andere "Zeichentabelle" mit dem kleinen 8x12-Bit oder einer beliebigen Bitmap des Zeichens zu indexieren. DOS nennt diese Zeichentabelle eine Codepage.

Beginnend mit CGA können Sie den Adapter anweisen, die Zeichentabelle an einer bestimmten Stelle im RAM des Adapters abzurufen. Jeder Adapter verfügt über ein Zeichen-ROM mit der Standard-Schriftart für diese Karte (die IBM-Standardschriftart). Sie können jedoch den Adapter anweisen, an einen Speicherort im RAM zu wechseln und eigene Bilder dort abzulegen.

Solange die Software weiß, was los ist, sind die Codes im Bildschirmspeicher, die auf die Bilder in der Zeichentabelle zeigen, nicht mit ASCII-Codes ausgerichtet, obwohl dies einfacher ist. Sie werden feststellen, es gibt Bildschirmspeicher - Codes (und Zeichentabelle Formen) für 1-31, die nicht druckbaren ASCII - Zeichen sind - aber durch den Speicher zu schreiben direkt auf dem Bildschirm (gute Erinnerungen an DEFSEG = &HB800 : POKE 0,1in GW-BASIC die obersten Zeichen auf einen Smiley zu ändern kommen Sie können sie trotzdem anzeigen.

Das Anzeigen anderer Sprachen ist also in Ordnung, wenn Sie die richtigen Bilder in den RAM des Adapters einlegen und die erforderliche Softwareunterstützung haben.

War es so früh wie CGA? Ich muss alt werden. (Zu meiner Verteidigung habe ich diese Antwort größtenteils aus dem Gedächtnis geschrieben und habe diese Techniken auch nicht zum Spaß verwendet, wie für immer.) a CVn vor 11 Jahren 0
Ich glaube, du hast Recht, nachdem du es genau angesehen hast, es war EGA. LawrenceC vor 11 Jahren 0
Ich weiß, dass wir die Textschriftart ändern können, indem Sie den Zeiger ändern. Ich habe gelernt, wie dies vor Jahren getan wurde. Ich weiß nur nicht, wie sie den Doppelbyte-Zeichensatz darstellen können, da 256 oder 512 Codepunkte nicht einmal halten können genügt die maximale Anzahl verschiedener Zeichen auf dem Bildschirm, nicht jedoch der gesamte komplexe Zeichensatz phuclv vor 11 Jahren 0
0
phuclv

Ich habe einige Nachforschungen angestellt, und wie erwartet, müssen Sie den Grafikmodus verwenden oder spezielle Hardware-Unterstützung benötigen, da im VGA-Textmodus nicht mehr als 512 Zeichen verwendet werden können

DOS kann nicht in Zeichensätzen über 1 Byte pro Zeichen hinaus drucken, da es die BIOS-Funktionen verwendet, die wiederum die VGA-Hardware verwenden, die nicht mehr als 2 x 256 Zeichen große Schriftarten haben kann. Das klingt also nach einem Job für einen DRIVER, der im Grafikmodus umfangreiche Schriftarten rendert. Wir haben bereits Unterstützung für Unicode-Schriftarten in ein paar grafischen DOS-Texteditoren und ähnlichem (danke :-)). Ob DBCS oder UTF-8 verwendet wird, beide teilen sich die "Größe eines Zeichens können ein oder mehrere Bytes haben", die "Anomalie" behandeln. .

Wird es jemals offizielle Unterstützung für die japanische Sprache in FreeDOS geben?

Die japanische Version von DOS (DOS / V) verwendet den ersten Ansatz und simuliert den Textmodus, indem die Zeichen im Grafikmodus mit einem speziellen Treiber gerendert werden . Der Treiber folgt dem IBM V-Text-Standard, einem Mechanismus zur Erweiterung der Textanzeigefunktionen von DOS. Sie können zwischen verschiedenen wählen 16/24/32/48-Punkt - Schriften wie diese

DOS / V-Schriftart

Einige andere Textmodus-Systeme verwenden dieselbe Technik. In FreeDOS können Sie spezielle Treiber für die japanische Unterstützung laden

FreeDOS japanischer Treiber

Der Renderer fängt die Aufrufe von int 10h und int 21h ab und zeichnet den Text manuell, sodass er auch für normale englische Programme funktioniert. Dies funktioniert jedoch nicht für Programme, die direkt in den VGA-Speicher schreiben. Zum Drucken werden japanische Zeichen int 5h und int 17h angehängt.

Gemäß dem DOS / V-Handbuch fügte IBM BIOS später auch Unterstützung für V-Text bis Int 15h mit den unten aufgeführten 4 neuen Funktionen hinzu

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

Ich denke, das ist auch der Grund, warum ich japanische Unterstützung in den BIOSen meiner alten PCs gesehen habe

Trotzdem kann der langsame Grafikmodus beim Scrollen zu Störungen führen, die eine spezielle Behandlung erfordern

DOS / V ist eigentlich die erste Softwarelösung für den japanischen Textmodus

Unterdessen wurde bei IBM Japan seit den frühen achtziger Jahren intensiv geforscht, um eine Softwarelösung für das Problem der Anzeige japanischer Zeichen zu entwickeln. Mit dem Aufkommen hochauflösender VGA-Monitore, schnellerer Prozessoren und größerer Speicher und Festplatten erkannten die Entwickler der IBM-Forschungslabors Fujisawa und Yamato, dass Informationen über Form und Größe von Kanji-Zeichen auf der Festplatte gespeichert und in den erweiterten Speicher geladen werden können. und wird durch VRAM im Grafikmodus angezeigt. (Das "V" in DOS / V stammt übrigens vom VGA-Monitor, der erforderlich ist, um die japanischen Zeichen per Software anzuzeigen.)

DOS / V: Die Softwarelösung für Hardwareprobleme

Dem gleichen Artikel zufolge benötigen alle anderen Systeme vor der Erfindung von DOS / V ein Kanji-ROM in Hardware

Alle Computermarken verwendeten Hardwarelösungen für die Anzeige japanischer Schriftzeichen und speichern die Daten aller Zeichen auf speziellen Chips, den sogenannten Kanji-ROMs. Dieses Verfahren erforderte, dass der Doppelbyte-Code für jedes Zeichen der Tastatureingabe an die CPU gesendet wurde, die wiederum das entsprechende Zeichen aus dem Kanji-ROM holte und es über einen Textmodus-VRAM an den Bildschirm schickte. Die Verwendung von Kanji-ROM bedeutete, dass die Form jedes Zeichens festgelegt wurde, während die Verwendung von Textmodus-VRAM eine Standardgröße von 16 × 16 Punkten für jedes Zeichen festlegte.

Zum Beispiel das IBM Personal System / 55, das einen speziellen Grafikadapter mit japanischer Schrift verwendet, so dass sie echten Textmodus erhalten

In den frühen achtziger Jahren veröffentlichte IBM Japan zwei x86-basierte Personal Computer-Leitungen für die asiatisch-pazifische Region, IBM 5550 und IBM JX. Der 5550 liest Kanji-Schriftarten von der Festplatte und zeichnete Text als Grafikzeichen auf einem 1024 x 768-Monitor mit hoher Auflösung.

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

Ähnlich wie bei IBM 5550 war der Textmodus 1040 x 725 Pixel (12 x 24 und 24 x 24 Pixel, 80 x 25 Zeichen) in 8 Farben. Er kann aus dem ROM gelesene japanische Schriftzeichen anzeigen

Die AX-Architektur verwendet einen speziellen JEGA-Adapter anstelle des Standard-EGA

AX (Architecture eXtended) war eine japanische Computerinitiative, die etwa 1986 begann, um PCs die Verarbeitung von japanischem Doppelbyte-Text (DBCS) über spezielle Hardware-Chips zu ermöglichen und die Kompatibilität mit Software zu gewährleisten, die für ausländische IBM-PCs geschrieben wurde.

...

Um Kanji-Zeichen mit ausreichender Klarheit darzustellen, hatten AX-Maschinen JEGA-Bildschirme (ja) mit einer Auflösung von 640 x 480 anstelle der sonst üblichen 640 x 350-Standard-EGA-Auflösung. Benutzer können normalerweise zwischen japanischem und englischem Modus wechseln, indem Sie 'JP' und 'US' eingeben. Dies würde auch das AX-BIOS und einen IME aufrufen, der die Eingabe japanischer Zeichen ermöglicht.

Spätere Versionen enthalten außerdem eine spezielle AX-VGA / H-Hardware und AX-VGA / S für die Softwareemulation auf VGA

Kurz nach der Veröffentlichung des AX veröffentlichte IBM jedoch den VGA-Standard, mit dem AX offensichtlich nicht kompatibel war (es waren nicht die einzigen, die nicht standardmäßige "Super-EGA" -Erweiterungen fördern). Daher musste das AX-Konsortium einen kompatiblen AX-VGA (ja) entwerfen. AX-VGA / H war eine Hardwareimplementierung mit AX-BIOS, während AX-VGA / S eine Softwareemulation war.

Aufgrund von weniger verfügbarer Software und anderen Problemen konnte AX die PC-9801-Dominanz in Japan nicht brechen. 1990 stellte IBM Japan DOS / V vor, mit dem IBM PC / AT und seine Klone japanischen Text ohne zusätzliche Hardware mithilfe einer Standard-VGA-Karte anzeigen konnten. Bald darauf verschwand AX und der Niedergang von NEC PC-9801 begann.

Die PC-98-Serie von NEC verfügt außerdem über ein Zeichen-ROM im Display-Controller

Ein Standard-PC-98 verfügt über zwei µPD7220-Display-Controller (einen Master und einen Slave) mit 12 KB Hauptspeicher bzw. 256 KB Video-RAM. Der Master-Anzeigecontroller verarbeitet das Font-ROM und zeigt die Zeichen JIS X 0201 (7x13 Pixel) und JIS X 0208 (15x16 Pixel) an

Ich kenne die Situation für Chinesisch und Koreanisch nicht, aber ich denke, dass die gleichen Techniken verwendet werden. Ich bin nicht sicher, ob es andere Wege gibt, das zu erreichen oder nicht

-1
headkase

Sie benötigen einen Grafikmodus anstelle eines hartcodierten Textmodus, damit Unicode-Textzeichen angezeigt werden können. Dann legen Sie MS-DOS fest, um eine Unicode-Schriftart zu verwenden, und ändern Sie die Sprachzuordnung, um diese zu verwenden.

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

Nein, schauen Sie sich die Bilder an, die ich gepostet habe, es handelt sich um einen echten DOS-Modus, nicht um ein Befehlsaufkommen in Windows phuclv vor 11 Jahren 0