Eu já vi muitas telas de configuração do BIOS em modo de texto em japonês e chinês. Recentemente, vi até a instalaçã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!
Uma tela típica de modo de texto tem o tamanho de 80x25 . Como os caracteres japoneses ocupam o dobro da largura normal de caracteres latinos, o número máximo de caracteres japoneses que podem ser exibidos ao mesmo tempo na tela é de cerca de 1000. Portanto, precisamos de 2000 pontos de código para exibir as partes esquerda e direita dos caracteres.
Como o modo de texto padrão pode exibir apenas 256 caracteres, mas o primeiro 128 é usado para ASCII, portanto, os utilizáveis são limitados aos 128 pontos de código altos. Se necessário, podemos expandi-lo para 512, mas isso ainda não suporta pontos de código suficientes para a exibição. Eu sempre me pergunto como eles conseguiram exibir o grande conjunto de caracteres com um número tão limitado de caracteres.
[ ] 8]
O modo de texto no Linux parece usar o driver do modo gráfico porque pode exibir Unicode e possui muito mais cores. Mas não consigo explicar como eles fazem isso nas telas de configuração do MS-DOS e BIOS.
EDIT: Eu até encontrei uma entrada de texto em japonês para o DOS
Também há coreano no modo de texto!
Respostas:
O modo normal de "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 (cortando a quantidade necessária de memória de conteúdo de vídeo pela metade) ou usar memória de glifo 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.
Bastante cedo (acho que foi feito quando o EGA foi introduzido), o suporte a glifos de caracteres definidos pelo usuário foi adicionado ao modo de exibição de texto do PC IBM.
O modo de texto normal do IBM PC é simplesmente 4000 bytes seqüenciais de RAM de conteúdo de vídeo em um endereço específico. Estes são lidos como um byte de atributos de caractere (originalmente piscando, negrito, sublinhado, etc .; posteriormente reutilizado para cores de primeiro e segundo plano e piscando / realçar, daí a limitação para 16 cores no modo de texto) e um byte descrevendo o caractere Ser exibido. O glifo real a ser exibido para cada valor de byte de caracteres é armazenado em outro local.
Isso significa que, desde que você possa se contentar com 256 glifos distintos na tela a qualquer momento, e cada glifo possa ser representado como um bitmap de 9 bits de 9x14, você pode simplesmente substituir os glifos na memória para fazer com que os caracteres apareçam de maneira diferente . Em parte, essa foi uma parte do que
mode con codepage select
ocorreu no DOS. Isso é relativamente trivial.Se você precisar de mais de 256 glifos distintos, mas conseguir viver com o número reduzido de glifos na tela, poderá seguir 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 usar dois bytes de quatro em 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 sente ousado, pode até pular o segundo byte de atributo, que fornece acesso a 2 ^ 24 ~ 16,7M diferentes glifos. Ambas as abordagens dependem de suporte de software especial, mas a parte do hardware e do firmware deve ser bastante fácil de fazer. 65.536 glifos em pixels de um bit de 18x14 funcionam para cerca de 2 MiB, uma quantidade considerável de memória, mas não insuperável, no momento.
O inglês básico dos EUA precisa de pelo menos 62 glifos dedicados (números 0-9, letras AZ em maiúsculas e minúsculas), para que você tenha algo como 180-190 glifos para brincar se também quiser exibir o texto em inglês dos EUA da mesma forma tempo e vá com 8 bits por glifo. Se você pode viver sem o suporte simultâneo em inglês dos EUA, o que pode optar por fazer em um ambiente com recursos limitados, como a arquitetura antiga do IBM PC, você tem acesso ao número completo de glifos.
Com alguns truques, você provavelmente poderia combinar e combinar os dois esquemas também.
Eu não sei como isso foi realmente feito, mas esses dois são esquemas viáveis para obter alfabetos "sofisticados" com contagem limitada de caracteres em uma tela simples de PC IBM no modo de texto que eu posso pensar em sentar na frente do Stack Exchange por um momento. É perfeitamente possível que haja modos gráficos adicionais que facilitem isso na prática.
Além disso, lembre-se da distinção entre o modo de texto e o modo gráfico que exibe o texto . Se você estiver no modo gráfico, talvez através do VESA, que é bastante universalmente suportado, estará por conta própria no que diz respeito aos glifos dos personagens, mas também terá muito mais liberdade para desenhá-los. Por exemplo, tenho certeza de que as partes baseadas em texto do Windows NT (que é a família de produtos ao 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.
fonte
Isso está simplificando o que @Michael Kjörling está dizendo.
No modo de texto, você tem "memória na tela" com 1 byte por caractere na tela que informa ao adaptador qual caractere aparece em cada posição da tela. (Também existem bytes de "atributo" que informam ao adaptador que cor e coisas como sublinhado, piscam 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 CGA, você pode dizer ao adaptador para obter a tabela de caracteres em um local específico na RAM do adaptador. Cada adaptador possui uma ROM de caracteres que possui a "fonte" padrão para esse cartão (que é a fonte padrão da IBM), mas você pode dizer ao adaptador para alternar 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 da 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. Você notará que existem códigos de memória de tela (e formas da tabela de caracteres) para 1-31 que são caracteres ASCII não imprimíveis - mas escrevendo diretamente na memória de tela (boas lembranças
DEFSEG = &HB800 : POKE 0,1
no GW-BASIC para alterar o caractere mais alto para um smiley) mente) você ainda pode exibi-los.Portanto, é bom exibir outros idiomas, se você puder colocar as imagens corretas na RAM do adaptador e ter o suporte de software necessário.
fonte
Encontrei algo na página "modo de texto compatível com VGA" na Wikipedia e também em alguns livros de programação VGA:
Os modos de texto EGA e VGA permitem 512 glifos simultâneos na tela ou 2 bancos com 256 glifos cada. O bit de atributo 3 (Intensidade da cor do primeiro plano) também pode selecionar entre o banco A ou B. O que normalmente ocorre é que, por padrão, os Registradores de fontes A e B apontam para o mesmo endereço, fornecendo apenas 256 glifos. Portanto, para que ele funcione, é necessário definir os Registradores de fontes com os endereços corretos.
Cada banco possui 8192 bytes e cada um dos 256 glifos do banco possui 32 bytes (8 pixels de largura e 32 pixels de altura). Você pode definir o registro do Scanline Count para informar a altura correta dos seus caracteres. Os cartões VGA imprimem 400 linhas de digitalização na tela, enquanto a EGA imprime 350 linhas de digitalização na tela; portanto, para fornecer 25 linhas de caracteres, eles definem sua altura de caracteres para 16 e 14 linhas de digitalização, respectivamente. Além disso, em VGA, cada glifo pode ter 8 ou 9 pontos de largura, mas a 9ª coluna está em branco ou apenas uma repetição da 8ª coluna. Todos esses glifos nos dois bancos podem ser definidos pelo usuário.
Como você pode obter mais de 256 caracteres diferentes na tela em alguns idiomas? Nos exemplos acima, cada caractere estranho especial é composto de dois glifos (esquerda e direita) ou mais. Você pode definir o primeiro, digamos, 128 glifos do banco A à parte para o texto ASCII, e ainda terá 128 glifos do banco A + 256 glifos do banco B = 384 glifos para personalizar.
Além disso, você pode combinar diferentes lados esquerdo e direito para criar um conjunto enorme de caracteres! Digamos, por exemplo, que dos 384 glifos definidos pelo usuário, você deseja reservar 184 para o lado esquerdo e 200 para o lado direito: você pode ter 184 * 200 = 36800 caracteres diferentes! (com certeza, a maioria deles provavelmente seria caracteres inválidos para esse idioma, mas você ainda pode obter um bom número de combinações válidas).
No exemplo do idioma japonês acima, você tem os caracteres "ha" e "ba" compartilhando o glifo do lado esquerdo. O mesmo para os caracteres "si" e "zi". Os lados direito "ko" e "ni" são tão semelhantes que poderiam compartilhar o mesmo glifo do lado direito. O mesmo poderia ser dito sobre os caracteres "ru" e "ro". Com um bom design, você pode expandir seu conjunto de caracteres muito bem. O glifo do lado direito do caractere "le" aparece no canto superior esquerdo da tela (em cinza) e, na barra de rolagem vertical, os botões para cima e para baixo também foram alterados, o que significa que pelo menos uma parte do banco A também foi usado para acomodar os novos glifos.
Em conclusão, as funções de string do BIOS no início do PC não eram compatíveis com Unicode, mas não precisam ser. Tudo o que você precisava fazer era personalizar seus 512 glifos e definir os registros EGA ou VGA corretos. Por exemplo, você pode personalizar os glifos "! @" "# $" "% ^" "& *" "Çé" "ñÑ" para seus caracteres estrangeiros (no banco A ou B) e depois imprimir a BIOS "! @ # S% ^ & * çéñÑ "string de uma só vez. O BIOS não verifica os glifos. Você também não pode usar as funções do BIOS, pois pode escrever diretamente na memória de vídeo. Para usar um glifo do banco B, basta definir o atributo Cor do primeiro plano do caractere para um valor entre 8 e 15 (cor brilhante).
(desculpe meu inglês ruim)
fonte
Fiz algumas pesquisas e, como previ, é necessário usar o modo gráfico ou precisar de suporte especial de hardware, porque não há como usar mais de 512 caracteres no modo de texto VGA
A versão japonesa do DOS (DOS / V) utiliza a primeira abordagem e simula o modo de texto por tornar os caracteres em 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 de 16/24/32/48 pontos como esta
Alguns outros sistemas de modo de texto também usam a mesma técnica. No FreeDOS, você pode carregar algum driver especial para suporte ao japonês
O renderizador interceptará as chamadas int 10h e int 21h e desenhará o texto manualmente, para que funcione mesmo em programas normais de inglês. Mas não funcionará para programas que gravam diretamente na memória VGA. Para imprimir caracteres japoneses int 5h e int 17h também são viciados.
De acordo com o manual do DOS / V, mais tarde, o IBM BIOS também adicionou suporte ao V-Text até as 15h com as 4 novas funções abaixo
Suponho que esse também seja o motivo pelo qual vi suporte japonês nos BIOS dos meus PCs antigos
No entanto, a lentidão do modo gráfico pode apresentar falhas durante a rolagem, o que exige um tratamento especial
O DOS / V é realmente a primeira solução de software para o modo de texto em japonês
De acordo com o mesmo artigo, antes da invenção do DOS / V, todos os outros sistemas precisam de uma ROM Kanji em hardware
Por exemplo, o IBM Personal System / 55, que usa um adaptador gráfico especial com fonte japonesa, para que eles obtenham o modo de texto real
https://en.wikipedia.org/wiki/DOS/V#History
A arquitetura AX usa um adaptador JEGA especial em vez do EGA padrão
Versões posteriores também adicionam um hardware AX-VGA / H especial e AX-VGA / S para emulação de software no VGA
A série NEC PC-98 também possui uma ROM de caracteres no controlador de vídeo
Não sei a situação para chinês e 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
fonte
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.
http://www.mobilefish.com/tutorials/windows/windows_quickguide_dos_unicode.html
fonte