In che modo MS-DOS e altri programmi in modalità testo possono visualizzare caratteri CJK a doppia larghezza?


9

Ho visto molte schermate di configurazione del BIOS in modalità testo in giapponese e cinese. Di recente ho anche visto l'installazione di Windows XP in giapponese. MS-DOS aveva anche versioni giapponesi. Modalità DOS reale , non prompt dei comandi di Windows!

BIOS BIOS giapponese

MS-DOS giapponese 6.2

Una tipica schermata in modalità testo ha le dimensioni di 80x25 . Con caratteri giapponesi grandi quanto la doppia larghezza dei caratteri latini normali, il numero massimo di caratteri giapponesi che possono essere visualizzati contemporaneamente sullo schermo è di circa 1000. Quindi abbiamo bisogno di 2000 punti di codice per visualizzare la parte sinistra e destra dei caratteri.

Poiché la modalità di testo predefinita può visualizzare solo 256 caratteri, ma il primo 128 viene utilizzato per ASCII, quindi quelli utilizzabili sono limitati agli alti 128 punti di codice. Se necessario, possiamo espanderlo a 512, ma questo non può ancora supportare abbastanza punti di codice per il display. Mi chiedo sempre come siano riusciti a mostrare il set di caratteri di grandi dimensioni con un numero così limitato di personaggi.

[ Programma di installazione XP giapponese] 8]

La modalità testo in Linux sembra usare il driver della modalità grafica perché può visualizzare Unicode e ha molti più colori. Ma non posso spiegare come lo fanno nelle schermate di installazione di MS-DOS e BIOS.


EDIT: ho anche trovato un input di testo giapponese per DOS

IME giapponese

Ci sono anche coreani in modalità testo!

coreano

VMWare DOS coreano


Probabilmente non stai guardando "caratteri" giapponesi, ad esempio kanji , ma piuttosto hiragana o katakana , che hanno mappature Unicode.
segatura,

@sawdust: guarda l'immagine qui sopra e vedrai che può mostrare non solo tutto il kana ma anche Kanji
phuclv,

1
Nota che la pagina da cui probabilmente hai preso lo screenshot del programma di installazione di OS / 2 dice proprio accanto allo screenshot che "il supporto della modalità di testo grafico è stato inizializzato quasi immediatamente all'avvio di OS / 2". Parola chiave grafica .
un CVn

@ MichaelKjörling non è solo OS / 2 ma i programmi di installazione di MS-DOS e BIOS hanno questa capacità anche in modalità testo
phuclv,

Risposte:


6

La normale modalità "80x25 caratteri" è in realtà 720x350 pixel (il che significa che ogni cella di caratteri è larga 9 pixel e alta 14 pixel). Le modalità di caratteri a doppia larghezza ("40x25") possono semplicemente interpolare questa alla larghezza maggiore raddoppiando ciascuna colonna per risparmiare sulla memoria del contenuto video (tagliando la quantità richiesta di memoria del contenuto video a metà), oppure utilizzare una memoria glifica aggiuntiva e un identico quantità di memoria del contenuto video per aumentare le celle dei caratteri a 18 * 14 pixel.

Abbastanza presto (penso che sia stato fatto quando è stato introdotto EGA ), il supporto per glifi di caratteri definiti dall'utente è stato aggiunto alla modalità di visualizzazione del testo del PC IBM.

La normale modalità di testo del PC IBM è semplicemente una sequenza di 4000 byte di RAM di contenuti video a un indirizzo specifico. Questi vengono letti come un byte di attributi di carattere (lampeggiante, grassetto, sottolineato, ecc. In seguito, riutilizzato in seguito per i colori di primo piano e di sfondo e lampeggiante / evidenziazione, quindi la limitazione a 16 colori in modalità testo) e un byte che descrive il carattere a essere visualizzato. Il glifo effettivo da visualizzare per ciascun valore di byte di caratteri viene memorizzato altrove.

Ciò significa che finché puoi accontentarti di 256 glifi distinti sullo schermo in qualsiasi momento e ogni glifo può essere rappresentato come una bitmap 9x14 a un bit, puoi semplicemente sostituire i glifi in memoria per far apparire i caratteri in modo diverso . In parte, questa era una parte di ciò che mode con codepage selectfaceva su DOS. Questo è relativamente banale.

Se hai bisogno di più di 256 glifi distinti ma puoi vivere con il numero ridotto di glifi sullo schermo, puoi scegliere uno schema 40x25 con glifi a doppia larghezza (18 pixel di larghezza). Supponendo che la quantità totale di RAM del contenuto video sia fissa e supponendo che sia possibile aumentare la memoria bitmap glifo, è possibile passare a utilizzare due byte su ogni quattro byte per rappresentare un glifo sullo schermo, dando accesso a 2 ^ 16 = 65.536 glifi diversi (incluso il glifo bianco). Se ti senti audace, potresti persino saltare il secondo byte attributo che ti dà accesso a 2 ^ 24 ~ 16.7M glifi diversi. Entrambi questi approcci si basano su un supporto software speciale, ma la parte hardware e firmware dovrebbe essere abbastanza facile da fare. 65.536 glifi a pixel 18x14 a un bit funzionano a circa 2 MiB, una quantità considerevole ma non insormontabile di memoria al momento.

L'inglese americano di base ha bisogno di almeno 62 glifi dedicati (numeri 0-9, lettere AZ in maiuscolo e minuscolo), quindi hai qualcosa come 180-190 glifi con cui giocare se vuoi anche essere in grado di visualizzare il testo inglese americano allo stesso tempo e via con 8 bit per glifo. Se riesci a vivere senza il supporto simultaneo dell'inglese americano, cosa che potresti scegliere di fare in un ambiente a risorse limitate come l'antica architettura PC IBM, avrai accesso al numero completo di glifi.

Con qualche accorgimento potresti probabilmente mescolare e abbinare anche i due schemi.

Non so come sia stato effettivamente fatto, ma entrambi questi sono schemi praticabili su come ottenere alfabeti "fantasiosi" con un numero di caratteri particolarmente limitato su un semplice schermo del PC IBM in modalità testo che posso trovare semplicemente seduto di fronte di Stack Exchange per un momento. È perfettamente possibile che ci siano ulteriori modalità grafiche che lo rendono più semplice in pratica.

Inoltre, tenere presente la distinzione tra modalità testo e modalità grafica che visualizza il testo . Se sei in modalità grafica, forse tramite VESA che è supportato in modo abbastanza universale, sei da solo per quanto riguarda il disegno di glifi dei personaggi ma hai anche molta più libertà su come disegnarli. Ad esempio, sono abbastanza sicuro che le parti testuali di Windows NT (che è la famiglia di prodotti a cui appartiene Windows XP) usano una modalità grafica per visualizzare il testo, inclusi lo schermo di avvio di Windows NT 4.0 e BSOD.


Potresti vedere che ci sono caratteri latini a larghezza normale oltre a quelli giapponesi / coreani a doppia larghezza, quindi non può essere la modalità a doppia larghezza 40x25. Pertanto non è possibile combinare 2 byte ogni 4 byte per rappresentare il glifo. Usando il bit 3 del colore di primo piano puoi rappresentare 512 glifi contemporaneamente ma non abbastanza se i caratteri riempiono la maggior parte dello schermo en.wikipedia.org/wiki/VGA-compatible_text_mode#Fonts
phuclv

@ LưuVĩnhPhúc Potresti riappropriarti del bit più alto o utilizzare un numero qualsiasi di possibili altri trucchi per mescolare i caratteri che richiedono più byte con quelli a singolo byte. Penso ancora che la risposta sia riconoscere l'affermazione fatta nel paragrafo iniziale: anche quando mostri dei personaggi, a un certo livello hai ancora a che fare con i pixel, e quei pixel possono essere lavorati anche se forse non direttamente.
un CVn

Conosco tutto il testo e la modalità di visualizzazione del testo in modalità grafica, confondo solo come abbiano abbastanza punti di codice per multibyte poiché la parte sinistra e destra richiedono 2 punti di codice. Ma da quello che hai detto, ho pensato a un altro modo di farlo. Penso che la tua risposta sia accettabile
phuclv,

1

Questo semplifica ciò che dice @Michael Kjörling.

In modalità testo, hai una "memoria dello schermo" che ha 1 byte per carattere su schermo che dice all'adattatore quale carattere appare in ogni posizione dello schermo. (Esistono anche byte di "attributo" che indicano all'adattatore di che colore e cose come sottolineato, lampeggiante, ecc.).

L'adattatore utilizza questo byte per indicizzare in un'altra "tabella dei caratteri" che ha la piccola 8x12 o qualunque bitmap del carattere. DOS chiama questa tabella di caratteri una tabella codici.

A partire da CGA, è possibile indicare all'adattatore di ottenere la tabella dei caratteri in un punto specifico nella RAM dell'adattatore. Ogni adattatore ha una ROM di carattere che ha il "font" predefinito per quella scheda (che è il font IBM standard), ma puoi dire all'adattatore di passare a una posizione nella RAM e di inserire lì le tue immagini.

Finché il software sa cosa sta succedendo, i codici nella memoria dello schermo che puntano alle immagini nella tabella dei caratteri non si allineano con nessun codice ASCII, anche se è più facile se lo fanno. Noterai che ci sono codici di memoria dello schermo (e forme della tabella dei caratteri) per 1-31 che sono caratteri ASCII non stampabili - ma scrivendo direttamente nella memoria dello schermo (ricordi affettuosi DEFSEG = &HB800 : POKE 0,1in GW-BASIC per cambiare il carattere più alto in uno smiley arrivano a mente) puoi ancora visualizzarli.

Quindi visualizzare altre lingue va bene, se puoi mettere le immagini giuste nella RAM dell'adattatore e avere il supporto software necessario.


Era già nel CGA? Devo invecchiare. (A mia difesa, ho scritto quella risposta in gran parte dalla memoria, e in realtà non ho usato quelle tecniche nemmeno per divertirmi come per sempre.)
un CVn

Penso che tu abbia subito dopo averlo esaminato, era EGA.
LawrenceC,

So che possiamo cambiare il carattere del testo cambiando il puntatore, ho imparato a farlo anni prima, ma non so come possano rappresentare il set di caratteri a doppio byte, poiché 256 o 512 punti di codice non possono nemmeno contenere abbastanza il numero massimo di diversi personaggi sullo schermo, senza contare l'intero set di caratteri complessi
phuclv

1

Ho trovato qualcosa nella pagina "Modalità testo compatibile VGA" in Wikipedia e anche in alcuni libri di programmazione VGA:

Entrambe le modalità di testo EGA e VGA consentono simultaneamente 512 glifi sullo schermo o 2 banchi con 256 glifi ciascuno. Il bit di attributo 3 (Foreground Color Intensity) può anche selezionare tra il banco A o B. Quello che normalmente si verifica è che per impostazione predefinita entrambi i registri di font A e B puntano allo stesso indirizzo, dandoti solo 256 glifi. Quindi, affinché funzioni, devi impostare i Font Font sugli indirizzi corretti.

Ogni banco ha 8192 byte e ognuno dei 256 glifi nella banca ha 32 byte (8 pixel di larghezza e 32 pixel di altezza). È possibile impostare il registro Conteggio scanline per indicare l'altezza corretta dei caratteri. Le schede VGA stampano 400 linee di scansione sullo schermo mentre EGA stampa 350 linee di scansione sullo schermo, pertanto, per fornire 25 righe di caratteri, impostano l'altezza dei caratteri rispettivamente su 16 e 14 linee di scansione. Inoltre, in VGA ogni glifo può avere 8 o 9 punti di larghezza, ma la nona colonna è vuota o solo una ripetizione dell'ottava colonna. Tutti questi glifi in entrambe le banche possono essere definiti dall'utente.

Come puoi ottenere più di 256 caratteri diversi sullo schermo in alcune lingue? Negli esempi sopra, ogni carattere straniero speciale è composto da due glifi (sinistra e destra), o più. Potresti impostare i primi 128 glifi dalla banca A a parte per il testo ASCII, e avresti ancora 128 glifi dalla banca A + 256 glifi dalla banca B = 384 glifi da personalizzare.

Inoltre, puoi combinare diversi lati sinistro e destro per creare un set di caratteri enorme! Diciamo, ad esempio, che dai 384 glifi definiti dall'utente, vuoi riservare 184 per il lato sinistro e 200 per il lato destro: puoi avere 184 * 200 = 36800 caratteri diversi! (certo, molti di loro probabilmente sarebbero caratteri non validi per quella lingua, ma puoi comunque ottenere un buon numero di combinazioni valide).

Nell'esempio di lingua giapponese sopra, hai i caratteri "ha" e "ba" che condividono il glifo sul lato sinistro. Lo stesso vale per i caratteri "si" e "zi". "ko" e "ni" sul lato destro sono così simili da condividere lo stesso glifo sul lato destro. Lo stesso si potrebbe dire dei personaggi "ru" e "ro". Con un buon design potresti espandere molto bene il tuo set di caratteri. Il glifo sul lato destro del carattere "le" appare nella parte in alto a sinistra dello schermo (in grigio) e nella barra di scorrimento verticale sono stati cambiati anche i pulsanti su e giù, il che significa che almeno una parte della banca A è stato utilizzato anche per accogliere i nuovi glifi.

In conclusione, le funzioni di stringa del BIOS nella prima era del PC non erano compatibili con Unicode, ma non è necessario. Tutto quello che dovevi fare era personalizzare i tuoi 512 glifi e impostare i registri EGA o VGA corretti. Ad esempio, è possibile personalizzare i glifi "! @" "# $" "% ^" "& *" "Çé" "ñÑ" ai caratteri stranieri (nella banca A o B) e quindi stampare il BIOS "! @ # S% ^ & * çéñÑ "stringa contemporaneamente. Il BIOS non controlla i glifi. Inoltre, non è possibile utilizzare affatto le funzioni del BIOS, poiché è possibile scrivere direttamente nella memoria video. Per usare un glifo dalla banca B, basta impostare l'attributo Carattere Colore primo piano su un valore compreso tra 8 e 15 (colore brillante).

(scusate il mio cattivo inglese)


So che possiamo avere 512 caratteri come indicato nella domanda. Comunque il fatto è che quei programmi sopra mostrano i caratteri Kanji reali , non Kana, il che aumenta significativamente il numero di cose visualizzate allo stesso tempo. Nei sistemi con codifica limitata a mezza larghezza verrà usato Katakana, che ha maru e decine separati, quindi lo stesso punto di codice può essere usato sia per し che じ, oppure は e ば, non è necessario condividere la parte sinistra e destra
phuclv

0

Ho fatto qualche ricerca e, come anticipato, devi usare la modalità grafica o hai bisogno di un supporto hardware speciale perché non c'è modo di usare più di 512 caratteri in modalità testo VGA

Bene, lo stesso DOS non può stampare in set di caratteri oltre 1 byte per carattere, perché utilizza le funzioni BIOS che a loro volta utilizzano l'hardware VGA che non può avere più di 2 caratteri da 256 caratteri. Quindi, questo suona di nuovo come un lavoro per un DRIVER, uno che utilizza la modalità grafica per il rendering di caratteri estesi. Abbiamo già il supporto per i caratteri Unicode in alcuni editor di testo DOS grafici e simili (grazie :-)) e sia che si utilizzi DBCS o UTF-8, entrambi condividono la "dimensione del carattere può essere uno o più byte" gestendo "anomalia" .

Ci sarà mai un supporto ufficiale per la lingua giapponese in FreeDOS?

La versione giapponese di DOS (DOS / V) utilizza il primo approccio e simula modalità testo da rendere i personaggi in modalità grafica utilizzando un driver speciale. Il driver segue lo standard IBM V-Text che è un meccanismo per estendere le capacità di visualizzazione del testo del DOS. Puoi scegliere tra vari tipi di carattere a 16/24/32/48 punti come questo

Carattere DOS / V

Alcuni altri sistemi in modalità testo usano anche la stessa tecnica. In FreeDOS puoi caricare alcuni driver speciali per il supporto giapponese

Driver giapponese FreeDOS

Il renderer intercetterà le chiamate int 10h e int 21h e disegnerà il testo manualmente, quindi funzionerà anche per i normali programmi in inglese. Ma non funzionerà per i programmi che scrivono direttamente nella memoria VGA. Per la stampa di caratteri giapponesi sono anche agganciati int 5h e int 17h.

Secondo il manuale DOS / V in seguito IBM BIOS ha anche aggiunto il supporto per V-Text attraverso int 15h con le seguenti 4 nuove funzioni

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

Suppongo che questo sia anche il motivo per cui ho visto il supporto giapponese nei BIOS dei miei vecchi PC

Tuttavia, la lentezza della modalità grafica può presentare anomalie durante lo scorrimento che richiedono una gestione speciale

DOS / V è in realtà la prima soluzione software per la modalità di testo giapponese

Nel frattempo, all'inizio del 1980, presso IBM Japan, erano in corso ricerche serie per produrre una soluzione software al problema della visualizzazione dei caratteri giapponesi. Con l'avvento dei monitor VGA ad alta risoluzione, processori più veloci e memorie e dischi rigidi più grandi, i progettisti dei laboratori di ricerca Fujisawa e Yamato di IBM hanno capito che le informazioni sulla forma e le dimensioni dei caratteri kanji potevano essere archiviate su disco, caricate in memoria estesa, e visualizzato attraverso la modalità grafica VRAM. (La "V" in DOS / V, a proposito, proviene dal monitor VGA necessario per visualizzare i caratteri giapponesi tramite software.)

DOS / V: la soluzione Soft (ware) ai problemi Hard (ware)

Secondo lo stesso articolo, prima dell'invenzione di DOS / V tutti gli altri sistemi necessitano di una ROM Kanji nell'hardware

Tutti i marchi di computer hanno utilizzato soluzioni hardware per gestire la visualizzazione di caratteri giapponesi, archiviando i dati per tutti i personaggi su chip speciali noti come ROM kanji. Questo metodo richiedeva che il codice a doppio byte per ogni carattere dell'input da tastiera fosse inviato alla CPU, che a sua volta prendeva il carattere corrispondente dalla ROM kanji e lo inviava allo schermo tramite VRAM in modalità testo. L'uso della kanji ROM significava che la forma di ciascun personaggio era fissa, mentre l'uso della modalità testo VRAM impostava una dimensione standard di 16x16 punti per ciascun personaggio.

Ad esempio IBM Personal System / 55 che utilizza una speciale scheda grafica con caratteri giapponesi, in modo da ottenere la modalità testo reale

All'inizio degli anni '80, IBM Japan pubblicò due linee di personal computer basate su x86 per la regione del Pacifico asiatico, IBM 5550 e IBM JX. Il 5550 ha letto i caratteri Kanji dal disco e ha disegnato il testo come caratteri grafici sul monitor ad alta risoluzione 1024 x 768.

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

Simile a IBM 5550, la modalità testo era 1040x725 pixel (font 12x24 e 24x24 pixel, 80x25 caratteri) in 8 colori, in grado di visualizzare caratteri giapponesi letti dalla ROM dei caratteri

L' architettura AX utilizza un adattatore JEGA speciale anziché EGA standard

AX (Architecture eXtended) è stata un'iniziativa informatica giapponese a partire dal 1986 circa per consentire ai PC di gestire il testo giapponese a doppio byte (DBCS) tramite chip hardware speciali, consentendo al contempo la compatibilità con software scritto per PC IBM stranieri.

...

Per visualizzare i caratteri Kanji con sufficiente chiarezza, le macchine AX avevano schermi JEGA (ja) con una risoluzione di 640x480 anziché la risoluzione EGA standard 640x350 prevalente altrove in quel momento. Gli utenti possono in genere passare tra le modalità giapponese e inglese digitando "JP" e "US", che invocherebbe anche AX-BIOS e un IME che consente l'immissione di caratteri giapponesi.

Le versioni successive aggiungono anche uno speciale hardware AX-VGA / H e AX-VGA / S per l'emulazione software su VGA

Tuttavia, subito dopo il rilascio di AX, IBM ha rilasciato lo standard VGA con cui AX non era ovviamente compatibile (non erano i soli a promuovere estensioni "super EGA" non standard). Di conseguenza, il consorzio AX ha dovuto progettare un AX-VGA (ja) compatibile. AX-VGA / H era un'implementazione hardware con AX-BIOS, mentre AX-VGA / S era un'emulazione software.

A causa della minore disponibilità di software e di altri problemi, AX fallì e non riuscì a rompere il dominio del PC-9801 in Giappone. Nel 1990, IBM Japan ha presentato DOS / V che ha consentito a IBM PC / AT e ai suoi cloni di visualizzare il testo giapponese senza alcun hardware aggiuntivo utilizzando una scheda VGA standard. Poco dopo, AX scomparve e iniziò il declino di NEC PC-9801.

La serie NEC PC-98 ha anche una ROM di caratteri nel controller del display

Un PC-98 standard ha due controller di display µPD7220 (uno master e uno slave) con rispettivamente 12 KB di memoria principale e 256 KB di RAM video. Il controller del display principale gestisce la ROM dei caratteri, visualizzando i caratteri JIS X 0201 (7x13 pixel) e JIS X 0208 (15x16 pixel)

Non conosco la situazione di cinese e coreano, ma penso che vengano utilizzate le stesse tecniche. Non sono sicuro se ci sono altri modi per farlo o no


-1

È necessaria una modalità grafica anziché una modalità di testo hardcoded in modo da poter visualizzare glifi di testo unicode. Quindi si imposta MS-DOS per utilizzare un carattere Unicode e modificare la mappatura della lingua per usarlo.

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


No, guarda le immagini che ho pubblicato, è la vera modalità DOS, non il comando promt in windows
phuclv,

Il titolo dell'articolo è completamente sbagliato e fuorviante. cmd.exe non è DOS nonostante abbia un'interfaccia terminale simile a DOS e alcuni comandi simili. Il prompt dei comandi e MS-DOS sono la stessa cosa?
phuclv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.