Ich habe viele BIOS-Setup-Bildschirme im Textmodus auf Japanisch und Chinesisch gesehen. Kürzlich habe ich sogar Windows XP-Setup auf Japanisch gesehen. MS-DOS hatte auch japanische Versionen. Echter DOS-Modus , keine Windows-Eingabeaufforderung!
Ein typischer Bildschirm im Textmodus hat die Größe von 80 x 25 . Bei japanischen Zeichen, die so groß wie die doppelte normale lateinische Zeichenbreite sind, 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.
Der Standardtextmodus kann nur 256 Zeichen anzeigen, 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 kann jedoch immer noch nicht genügend Codepunkte für die Anzeige unterstützen. Ich frage mich immer, wie sie es geschafft haben, den großen Zeichensatz mit einer so begrenzten Anzahl von Zeichen anzuzeigen.
[ ] 8]
Der Textmodus unter Linux scheint den Grafikmodustreiber zu verwenden, da er Unicode anzeigen kann und viel mehr Farben hat. 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
Es gibt auch Koreanisch im Textmodus!
Antworten:
Der normale "80x25 Zeichen" -Modus beträgt tatsächlich 720x350 Pixel (was bedeutet, dass jede Zeichenzelle 9 Pixel breit und 14 Pixel hoch ist). Zeichenmodi mit doppelter Breite ("40 x 25") können diese entweder einfach auf die größere Breite interpolieren, indem jede Spalte verdoppelt wird, um Videoinhaltsspeicher zu sparen (die erforderliche Menge an Videoinhaltsspeicher halbiert), oder zusätzlichen Glyphenspeicher und einen identischen verwenden Größe des Videoinhaltsspeichers, um die Zeichenzellen auf 18 * 14 Pixel zu erhöhen.
Ziemlich früh (ich denke, es wurde getan, als EGA eingeführt wurde) wurde die Unterstützung für benutzerdefinierte Zeichen-Glyphen zum Textanzeigemodus des IBM PCs hinzugefügt.
Der normale Textmodus des IBM PCs besteht einfach aus einem sequentiellen 4000-Byte-RAM für Videoinhalte an einer bestimmten Adresse. Diese werden als ein Byte von Zeichenattributen (ursprünglich blinkend, fett, unterstrichen usw .; später für Vordergrund- und Hintergrundfarben und Blinken / Hervorheben wiederverwendet, daher die Beschränkung auf 16 Farben im Textmodus) und ein Byte gelesen, das das Zeichen beschreibt angezeigt werden. Die tatsächliche Glyphe, die für jeden Zeichenbytewert angezeigt werden soll, wird an anderer Stelle gespeichert.
Dies bedeutet, dass Sie die Glyphen im Speicher einfach ersetzen können, damit die Zeichen anders angezeigt werden, solange Sie mit 256 verschiedenen Glyphen auf dem Bildschirm gleichzeitig auskommen können und jede Glyphe als 9x14-Ein-Bit-Bitmap dargestellt werden kann . Zum Teil war dies ein Teil dessen, was
mode con codepage select
unter DOS geschah. 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 40x25-Schema mit Glyphen mit doppelter Breite (18 Pixel breit) verwenden. Angenommen, die Gesamtmenge des Videoinhalts-RAM ist fest und Sie können den Glyphen-Bitmap-Speicher vergrößern, können Sie zwei von vier Bytes verwenden, um eine Glyphe auf dem Bildschirm darzustellen, sodass Sie auf 2 ^ 16 = zugreifen können 65.536 verschiedene Glyphen (einschließlich der leeren Glyphe). Wenn Sie sich trauen, können Sie sogar das zweite Attributbyte überspringen, mit dem Sie auf 2 ^ 24 ~ 16,7 Millionen verschiedene Glyphen zugreifen können. Beide Ansätze beruhen auf spezieller Softwareunterstützung, aber der Hardware- und Firmware-Teil sollte ziemlich einfach zu handhaben sein. 65.536 Glyphen bei 18 x 14 Ein-Bit-Pixeln ergeben ungefähr 2 MiB, eine beträchtliche, aber nicht unüberwindbare Speichermenge zu diesem Zeitpunkt.
Grundlegendes US-Englisch benötigt mindestens 62 dedizierte Glyphen (Zahlen 0-9, Buchstaben AZ in Groß- und Kleinbuchstaben), sodass Sie mit 180-190 Glyphen spielen können, wenn Sie auch US-englischen Text gleichzeitig anzeigen möchten Zeit und gehen Sie mit 8 Bits pro Glyphe. Wenn Sie ohne gleichzeitige Unterstützung für US-Englisch leben können, was Sie möglicherweise in einer ressourcenbeschränkten Umgebung wie der frühen IBM PC-Architektur tun, haben Sie Zugriff auf die gesamte Anzahl von Glyphen.
Mit einigem Trick könnten Sie wahrscheinlich auch die beiden Schemata kombinieren.
Ich weiß nicht, wie es tatsächlich gemacht wurde, aber beide sind praktikable Schemata, um besonders ausgefallene "ausgefallene" Alphabete mit begrenzter Zeichenanzahl auf einen einfachen IBM PC-Bildschirm im Textmodus zu bringen, den ich mir vorstellen kann, wenn ich nur vorne sitze von Stack Exchange für einen Moment. Es ist durchaus möglich, dass es zusätzliche Grafikmodi gibt, die dies in der Praxis vereinfachen.
Beachten Sie auch die Unterscheidung zwischen Textmodus und Grafikmodus, in dem Text angezeigt wird . Wenn Sie sich im grafischen Modus befinden, möglicherweise über VESA, das allgemein unterstützt wird, sind Sie beim Zeichnen von Zeichen-Glyphen auf sich allein gestellt, haben aber auch viel mehr Freiheit beim Zeichnen. Ich bin mir zum Beispiel ziemlich sicher, dass die textbasierten Teile von Windows NT (zu denen die Produktfamilie gehört, zu der Windows XP gehört) einen grafischen Modus zum Anzeigen von Text verwenden, einschließlich des Windows NT 4.0-Startbildschirms und der BSODs.
quelle
Dies vereinfacht das, was @Michael Kjörling sagt.
Im Textmodus verfügen Sie über 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 Dinge wie Unterstreichen, Blinken usw.).
Der Adapter verwendet dieses Byte, um in eine andere "Zeichentabelle" zu indizieren, die die kleine 8x12 oder eine beliebige Bitmap des Zeichens enthält. 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 Standardschriftart für diese Karte (dies ist die Standardschriftart von IBM). Sie können den Adapter jedoch anweisen, zu einem Speicherort im RAM zu wechseln und dort Ihre eigenen Images abzulegen.
Solange die Software weiß, was los ist, stimmen die Codes im Bildschirmspeicher, die auf die Bilder in der Zeichentabelle verweisen, nicht mit ASCII-Codes überein, obwohl dies einfacher ist. Sie werden feststellen, dass es für 1-31 Bildschirmspeichercodes (und Zeichentabellenformen) gibt, die nicht druckbare ASCII-Zeichen sind - aber indem Sie direkt in den Bildschirmspeicher schreiben (schöne Erinnerungen an
DEFSEG = &HB800 : POKE 0,1
in GW-BASIC, um das oberste Zeichen in einen Smiley zu ändern) mind) Sie können sie immer noch anzeigen.Das Anzeigen anderer Sprachen ist also in Ordnung, wenn Sie die richtigen Bilder in den RAM des Adapters legen und über die erforderliche Softwareunterstützung verfügen können.
quelle
Ich habe etwas auf der Seite "VGA-kompatibler Textmodus" in Wikipedia und auch in einigen VGA-Programmierbüchern gefunden:
Sowohl der EGA- als auch der VGA-Textmodus ermöglichen gleichzeitig 512 Glyphen auf dem Bildschirm oder 2 Bänke mit jeweils 256 Glyphen. Das Attributbit 3 (Vordergrundfarbintensität) kann auch zwischen Bank A oder B wählen. Normalerweise zeigt das A- und B-Schriftregister standardmäßig auf dieselbe Adresse, sodass Sie nur 256 Glyphen erhalten. Damit dies funktioniert, müssen Sie die Schriftregister auf die richtigen Adressen einstellen.
Jede Bank hat 8192 Bytes, und jede der 256 Glyphen in der Bank hat 32 Bytes (8 Pixel breit und 32 Pixel hoch). Sie können das Scanline Count-Register einstellen, um die korrekte Höhe Ihrer Zeichen zu ermitteln. VGA-Karten drucken 400 Scanlinien auf dem Bildschirm, während EGA 350 Scanlinien auf dem Bildschirm druckt. Um 25 Zeichenzeilen zu erhalten, setzen sie ihre Zeichenhöhe auf 16 bzw. 14 Scanlinien. In VGA kann jede Glyphe 8 oder 9 Punkte breit sein, aber die 9. Spalte ist entweder leer oder nur eine Wiederholung der 8. Spalte. Alle diese Glyphen in beiden Bänken können benutzerdefiniert sein.
Wie können Sie in einigen Sprachen mehr als 256 verschiedene Zeichen auf dem Bildschirm anzeigen? In den obigen Beispielen besteht jedes spezielle Fremdzeichen aus zwei oder mehr Glyphen (links und rechts). Sie könnten die ersten beispielsweise 128 Glyphen aus Bank A für ASCII-Text auseinander setzen, und Sie hätten immer noch 128 Glyphen aus Bank A + 256 Glyphen aus Bank B = 384 Glyphen, die Sie anpassen können.
Sie können auch verschiedene linke und rechte Seiten kombinieren, um einen riesigen Zeichensatz zu erstellen! Nehmen wir zum Beispiel an, Sie möchten aus den 384 benutzerdefinierten Glyphen 184 für die linke Seite und 200 für die rechte Seite reservieren: Sie können 184 * 200 = 36800 verschiedene Zeichen haben! (Sicher, die meisten von ihnen wären wahrscheinlich ungültige Zeichen für diese Sprache, aber Sie können trotzdem eine gute Anzahl gültiger Kombinationen erhalten).
Im obigen Beispiel in japanischer Sprache haben Sie die Zeichen "ha" und "ba", die das linke Symbol teilen. Gleiches gilt für die Zeichen "si" und "zi". "ko" und "ni" auf der rechten Seite sind sich so ähnlich, dass sie dieselbe rechte Glyphe haben könnten. Das gleiche gilt für "ru" - und "ro" -Zeichen. Mit gutem Design können Sie Ihren Zeichensatz sehr gut erweitern. Das rechte Symbol des Zeichens "le" wird oben links auf dem Bildschirm angezeigt (grau), und in der vertikalen Bildlaufleiste wurden auch die Schaltflächen "Auf" und "Ab" geändert, sodass mindestens ein Teil der Bank A vorhanden ist wurde auch verwendet, um die neuen Glyphen aufzunehmen.
Zusammenfassend lässt sich sagen, dass die BIOS-String-Funktionen in der frühen PC-Ära nicht Unicode-fähig waren, dies aber nicht müssen. Sie mussten lediglich Ihre 512 Glyphen anpassen und die richtigen EGA- oder VGA-Register einstellen. Sie können beispielsweise die Glyphen "! @" "# $" "% ^" "& *" "Çé" "ñÑ" an Ihre Fremdzeichen (in Bank A oder B) anpassen und dann das BIOS drucken lassen "! @ # S% ^ & * çéñÑ "Zeichenfolge sofort. Das BIOS würde die Glyphen nicht überprüfen. Sie konnten die BIOS-Funktionen auch überhaupt nicht verwenden, da Sie direkt in den Videospeicher schreiben konnten. Um eine Glyphe aus Bank B zu verwenden, setzen Sie einfach das Attribut "Vordergrundfarbe" auf einen Wert zwischen 8 und 15 (helle Farbe).
(Entschuldigung für mein schlechtes Englisch)
quelle
Ich habe einige Nachforschungen angestellt, und wie ich erwartet hatte, müssen Sie den Grafikmodus verwenden oder spezielle Hardwareunterstützung benötigen, da im VGA-Textmodus nicht mehr als 512 Zeichen verwendet werden können
Die japanische Version von DOS (DOS / V) verwendet den ersten Ansatz und simuliert den Textmodus, indem die Zeichen mit einem speziellen Treiber im Grafikmodus gerendert werden . Der Treiber folgt dem IBM V-Text-Standard, einem Mechanismus zum Erweitern der Textanzeigefunktionen von DOS. Sie können zwischen verschiedenen 16/24/32/48-Punkt-Schriftarten wie diesen wählen
Einige andere Textmodus-Systeme verwenden dieselbe Technik. In FreeDOS können Sie einen speziellen Treiber für die japanische Unterstützung laden
Der Renderer fängt int 10h- und int 21h-Aufrufe ab und zeichnet den Text manuell, sodass er auch für normale englische Programme funktioniert. Es funktioniert jedoch nicht für Programme, die direkt in den VGA-Speicher schreiben. Zum Drucken japanischer Zeichen werden auch int 5h und int 17h eingehakt.
Laut dem späteren DOS / V-Handbuch hat IBM BIOS auch die Unterstützung für V-Text bis int 15h mit den folgenden 4 neuen Funktionen hinzugefügt
Ich nehme an, dies ist auch der Grund, warum ich japanische Unterstützung in den BIOS meiner alten PCs gesehen habe
Trotzdem kann die Langsamkeit des Grafikmodus beim Scrollen zu Störungen führen, die eine besondere Behandlung erfordern
DOS / V ist tatsächlich die erste Softwarelösung für den japanischen Textmodus
Gemäß demselben Artikel benötigen alle anderen Systeme vor der Erfindung von DOS / V ein Kanji-ROM in der Hardware
Zum Beispiel das IBM Personal System / 55 , das einen speziellen Grafikadapter mit japanischer Schrift verwendet, damit sie den Realtextmodus erhalten
https://en.wikipedia.org/wiki/DOS/V#History
Die AX-Architektur verwendet anstelle des Standard-EGA einen speziellen JEGA-Adapter
In späteren Versionen werden außerdem eine spezielle AX-VGA / H-Hardware und AX-VGA / S für die Softwareemulation auf VGA hinzugefügt
Die NEC PC-98-Serie verfügt außerdem über ein Zeichen-ROM im Display-Controller
Ich kenne die Situation für Chinesisch und Koreanisch nicht, aber ich denke, dass die gleichen Techniken angewendet werden. Ich bin mir nicht sicher, ob es andere Möglichkeiten gibt, dies zu erreichen oder nicht
quelle
Sie benötigen einen Grafikmodus anstelle eines fest codierten Textmodus, damit Unicode-Textzeichen angezeigt werden können. Anschließend stellen Sie MS-DOS so ein, dass eine Unicode-Schriftart verwendet wird, und ändern die Sprachzuordnung, um diese zu verwenden.
http://www.mobilefish.com/tutorials/windows/windows_quickguide_dos_unicode.html
quelle