Como o MS-DOS e outros programas de modo de texto exibem caracteres CJK de largura dupla?

7

Eu vi muitas telas de configuração do BIOS no modo de texto em japonês e chinês. Recentemente eu vi a configuração do Windows XP em japonês. O MS-DOS também tinha versões em japonês. Modo DOS real , não prompt de comando do Windows!

Umatelademododetextotípicotemotamanho80x25.Comcaracteresjaponesesqueocupamodobrodalarguranormaldecaractereslatinos,onúmeromáximodecaracteresjaponesesquepodemserexibidosaomesmotemponatelaédecercade1000.Porisso,precisamosde2000pontosdecódigoparaexibiraesquerdaepartedireitadospersonagens.

Comoomododetextopadrãopodeexibirapenas256caracteres,masoprimeiro128éusadoparaASCII,portanto,osusáveisestãolimitadosaosaltos128pontosdecódigo.Senecessário,podemosexpandi-lopara512,masissoaindanãosuportapontosdecódigosuficientesparaaexibição.Eusempremeperguntocomoelesconseguiramexibirograndeconjuntodecaracterescomumnúmerotãolimitadodecaracteres.

[] 8]

O modo de texto no Linux parece usar o driver de modo gráfico porque ele pode exibir Unicode e tem muito mais cores. Mas não consigo explicar como eles fazem isso nas telas de configuração do MS-DOS e do BIOS.

EDIT: Eu até encontrei uma entrada de texto em japonês para o DOS

Tambémháocoreanonomododetexto!

    
por phuclv 20.09.2013 / 10:38

4 respostas

4

O modo normal "80x25 caracteres" é, na verdade, 720x350 pixels (o que significa que cada célula de caractere tem 9 pixels de largura por 14 pixels de altura). Os modos de caracteres de largura dupla ("40x25") podem simplesmente interpolar isso para a largura maior dobrando cada coluna para economizar na memória de conteúdo de vídeo (reduzindo a quantidade necessária de memória de conteúdo de vídeo pela metade), ou usar memória de glifos adicional e um idêntico quantidade de memória de conteúdo de vídeo para aumentar as células de caracteres para 18 * 14 pixels.

Logo no início (acho que foi feito quando o EGA foi introduzido), o suporte para glifos de caracteres definidos pelo usuário era adicionado ao modo de exibição de texto do IBM PC.

O modo de texto normal do IBM PC é simplesmente um 4000 bytes sequenciais de RAM de conteúdo de vídeo em um determinado endereço. Estes são lidos como um byte de atributos de caracteres (originalmente piscando, negrito, sublinhado etc .; posteriormente reutilizados para cores de primeiro e segundo plano e piscando / realce, daí a limitação para 16 cores no modo de texto) e um byte descrevendo o caractere para Ser exibido. O glifo real a ser exibido para cada valor de byte de caractere é armazenado em outro lugar.

Isso significa que, contanto que você possa se contentar com 256 glifos distintos na tela a qualquer momento, e cada glifo puder ser representado como um bitmap de um bit 9x14, você pode simplesmente substituir os glifos na memória para tornar caracteres aparecem de forma diferente. Em parte, essa foi uma parte do que mode con codepage select fez no DOS. Isso é relativamente trivial.

Se você precisa de mais de 256 glifos distintos, mas pode viver com o número reduzido de glifos na tela, você pode usar um esquema de 40x25 com glifos de largura dupla (18 pixels de largura). Supondo que a quantidade total de RAM de conteúdo de vídeo seja fixa e supondo que você possa aumentar a memória de bitmap de glifo, você pode passar a usar dois bytes de cada quatro bytes para representar um glifo na tela, dando acesso a 2 ^ 16 65.536 glifos diferentes (incluindo o glifo em branco). Se você se sentir ousado, poderá até ignorar o segundo byte de atributo, que lhe dá acesso a 2 ^ 24 ~ 16,7M diferentes glifos. Ambas as abordagens dependem de suporte especial de software, mas a parte de hardware e firmware deve ser bem fácil de fazer. 65.536 glifos em pixels de um bit de 18x14 funcionam com cerca de 2 MiB, uma quantidade considerável de memória, mas não intransponível, no momento. 256 glifos em 18x14 pixels de um bit são cerca de 8 KiB, o que foi absolutamente razoável, mesmo na primeira metade da década de 80, quando o EGA foi desenvolvido e introduzido.

O inglês básico dos EUA precisa de pelo menos 62 glifos dedicados (números de 0 a 9, letras AZ em letras maiúsculas e minúsculas) para que você tenha algo como 180 a 190 glifos para brincar se também quiser exibir texto em inglês dos EUA ao mesmo tempo e vai com 8 bits por glifo. Se você puder viver sem suporte simultâneo a inglês dos EUA, o que pode ser feito em um ambiente com recursos limitados, como a arquitetura anterior do IBM PC, você terá acesso ao número total de glifos.

Com alguns truques, você provavelmente poderia misturar e combinar os dois esquemas também.

Eu não sei como foi realmente feito mas ambos são esquemas viáveis de como obter alfabetos "sofisticados" de contagem de caracteres particularmente limitados em uma tela simples do IBM PC em modo texto que eu possa vir apenas sentado na frente do Stack Exchange por um momento. É perfeitamente possível que existam modos gráficos adicionais que facilitam isso na prática.

Além disso, tenha em mente a distinção entre modo de texto e modo gráfico exibindo texto . Se você está no modo gráfico, talvez por meio do VESA, que é bastante universalmente suportado, você está sozinho no que diz respeito a desenhar glifos de caracteres, mas também tem muito mais liberdade de como desenhá-los. Por exemplo, tenho certeza de que as partes baseadas em texto do Windows NT (que é a família de produtos do qual o Windows XP pertence) usam um modo gráfico para exibir texto, incluindo a tela de inicialização do Windows NT 4.0 e BSODs.

    
por 20.09.2013 / 15:58
1

Isso está simplificando o que @Michael Kjörling está dizendo.

No modo de texto, você tem "memória de tela" que tem 1 byte por caractere na tela que informa ao adaptador qual caractere aparece em cada posição da tela. (Há também bytes "atributo" que informam ao adaptador que cor e coisas como sublinhado, piscar, etc.).

O adaptador usa esse byte para indexar em outra "tabela de caracteres" que possui o pequeno 8x12 ou qualquer bitmap do caractere. O DOS chama essa tabela de caracteres de uma página de código.

Começando com o CGA, você pode dizer ao adaptador para obter a tabela de caracteres em um local específico na RAM do adaptador. Cada adaptador tem uma ROM de caracteres que possui a "fonte" padrão para aquela placa (que é a fonte padrão da IBM), mas você pode dizer ao adaptador para mudar para um local na RAM e colocar suas próprias imagens lá.

Desde que o software saiba o que está acontecendo, os códigos na memória de tela que apontam para as imagens na tabela de caracteres não têm alinhamento com nenhum código ASCII, embora seja mais fácil se o fizerem. Você notará que há códigos de memória de tela (e formas de tabela de caracteres) para 1-31 que são caracteres ASCII não imprimíveis - mas gravando diretamente na memória de tela (boas lembranças de DEFSEG = &HB800 : POKE 0,1 em GW-BASIC para alterar o caractere superior para um smiley vem à mente) você ainda pode exibi-los.

Portanto, exibir outros idiomas é bom, se você puder colocar as imagens corretas na RAM do adaptador e ter o suporte de software necessário.

    
por 20.09.2013 / 16:56
0

Eu fiz algumas pesquisas e, como eu esperava, você tem que usar o modo gráfico ou precisar de suporte de hardware especial, porque não há como usar mais de 512 caracteres no modo de texto VGA

Well, DOS itself cannot print in charsets beyond 1-byte-per-char, because it uses the BIOS functions which in turn use the VGA hardware which cannot have more than 2 x 256 chars sized fonts. So this again sounds like a job for a DRIVER, one which uses graphics mode to render extensive fonts. We already have support for Unicode fonts in a few graphical DOS text editors and similar (thanks :-)) and whether DBCS or UTF-8 is used, both share the "size of character can be one or more bytes" handling "anomaly".

Will there ever be any official support for the Japanese language in FreeDOS?

A versão japonesa do DOS (DOS / V) usa a primeira abordagem e simula o modo de texto por renderizando os caracteres no modo gráfico usando um driver especial. O driver segue o padrão IBM V-Text, que é um mecanismo para estender os recursos de exibição de texto do DOS. Você pode escolher entre várias fontes 16/24/32/48-dot como esta

Algunsoutrossistemasdemododetextotambémusamamesmatécnica.NoFreeDOSvocêpodecarregarumdriverespecial para suporte japonês

O renderizador interceptará as chamadas int 10h e int 21h e desenhará o texto manualmente, assim funcionará mesmo para programas normais de inglês. Mas não funcionará para programas que gravam diretamente em memória VGA. Para impressão de caracteres japoneses, int 5h e int 17h também estão ligados.

De acordo com o Manual do DOS / V mais tarde IBM BIOS também adicionou suporte para V-Text por int 15h com o abaixo 4 novas funções

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

Suponho que esta seja também a razão pela qual eu vi suporte japonês em BIOSes dos meus PCs antigos

No entanto, a lentidão do modo gráfico pode apresentar falhas durante a rolagem , precisa de manuseio especial

O DOS / V é, na verdade, a primeira solução de software para o modo de texto em japonês

Meanwhile, serious research had been going on at IBM Japan since the early 1980s to produce a software solution to the problem of displaying Japanese characters. With the advent of high-resolution VGA monitors, faster processors, and larger memories and hard drives, designers at IBM's Fujisawa and Yamato research laboratories realized that information about the shape and size of kanji characters could be stored on disk, loaded into extended memory, and displayed through graphics-mode VRAM. (The "V" in DOS/V, by the way, comes from the VGA monitor necessary to display the Japanese characters via software.)

DOS/V: The Soft(ware) Solution to Hard(ware) Problems

De acordo com o mesmo artigo, antes da invenção do DOS / V outros sistemas, todos precisam de uma ROM Kanji em hardware

All of the brands of computers used hardware solutions to handle the display of Japanese characters, storing the data for all of the characters on special chips known as kanji ROMs. This method required the double-byte code for each character of keyboard input to be sent to the CPU, which in turn fetched the corresponding character from the kanji ROM and sent it to the screen via text-mode VRAM. The use of kanji ROM meant that the shape of each character was fixed, while the use of text-mode VRAM set a standard 16x16 dot size for each character.

Por exemplo, o IBM Personal System / 55 que usa um adaptador gráfico especial com fonte japonesa, para que eles modo de texto real

In early 1980s, IBM Japan released two x86-based personal computer lines for Asian-pacific region, IBM 5550 and IBM JX. The 5550 read Kanji fonts from the disk, and drew text as graphic characters on 1024 x 768 high resolution monitor.

link

Similar to IBM 5550, the text mode was 1040x725 pixels (12x24 and 24x24 pixel font, 80x25 characters) in 8 colors, can display Japanese characters read from font ROM

A arquitetura AX usa um adaptador JEGA especial em vez do padrão EGA

AX (Architecture eXtended) was a Japanese computing initiative starting in around 1986 to allow PCs to handle double-byte (DBCS) Japanese text via special hardware chips, whilst allowing compatibility with software written for foreign IBM PCs.

...

To display Kanji characters with sufficient clarity, AX machines had JEGA (ja) screens with a resolution of 640x480 rather than the 640x350 standard EGA resolution prevalent elsewhere at the time. Users could typically switch between Japanese and English modes by typing 'JP' and 'US', which would also invoke the AX-BIOS and an IME enabling the input of Japanese characters.

Versões posteriores também adicionam um hardware especial AX-VGA / H e AX-VGA / S para emulação de software em VGA

However, soon after the release of the AX, IBM released the VGA standard with which AX was obviously not compatible (they were not the only one promoting non-standard "super EGA" extensions). Consequently, the AX consortium had to design a compatible AX-VGA (ja). AX-VGA/H was a hardware implementation with AX-BIOS, whereas AX-VGA/S was a software emulation.

Due to less available software and other problems, AX failed and was not able to break the PC-9801 dominance in Japan. In 1990, IBM Japan unveiled DOS/V which enabled IBM PC/AT and its clones to display Japanese text without any additional hardware using a standard VGA card. Soon after, AX disappeared and the decline of NEC PC-9801 began.

As séries NEC PC-98 também têm uma ROM de caracteres no controlador de exibição

A standard PC-98 has two µPD7220 display controllers (a master and a slave) with 12 KB main memory and 256 KB of video RAM respectively. The master display controller handles font ROM, displaying JIS X 0201 (7x13 pixels) and JIS X 0208 (15x16 pixels) characters

Eu não sei a situação do chinês e do coreano, mas acho que as mesmas técnicas são usadas. Não tenho certeza se existem outras maneiras de conseguir isso ou não

    
por 19.07.2018 / 15:30
-1

Você precisa de um modo gráfico em vez de um modo de texto codificado para que os glifos de texto unicode possam ser exibidos. Em seguida, você define o MS-DOS para usar uma fonte unicode e altera o mapeamento de idioma para usá-lo.

link

    
por 20.09.2013 / 11:41