Я видел много экранов настройки BIOS текстового режима на японском и китайском языках. Недавно я даже видел установку Windows XP на японском языке. У MS-DOS были и японские версии. Настоящий режим DOS , а не командная строка Windows!
Один типичный текстовый режим имеет размер 80x25 . Поскольку японский символ занимает целую двойную ширину латинского символа, максимальное количество японских символов, которое может отображаться одновременно на экране, составляет около 1000. Поэтому нам нужно 2000 кодовых точек для отображения левой и правой части символов.
По умолчанию текстовый режим может отображать только 256 символов, но первые 128 используются для ASCII, поэтому используемые можно ограничить до 128 кодовых точек. При необходимости мы можем расширить его до 512, но это все еще не может поддерживать достаточно кодов для отображения. Мне всегда интересно, как им удалось отобразить большой набор символов с таким ограниченным количеством символов.
[ ] 8]
Текстовый режим в Linux, кажется, использует драйвер графического режима, потому что он может отображать Unicode и имеет намного больше цветов. Но я не могу объяснить, как они это делают на экранах настройки MS-DOS и BIOS.
РЕДАКТИРОВАТЬ: я даже нашел японский ввод текста для DOS
В текстовом режиме тоже есть корейский!
Ответы:
Обычный режим «80x25 символов» на самом деле составляет 720x350 пикселей (это означает, что каждая ячейка символа имеет ширину 9 пикселей и высоту 14 пикселей). Символьные режимы двойной ширины («40x25») могут либо просто интерполировать это значение на большую ширину, удваивая каждый столбец, чтобы сэкономить на памяти видеоконтента (сокращая необходимый объем памяти видеоконтента в два раза), либо использовать дополнительную глиф-память и идентичную объем памяти видео контента для увеличения ячейки персонажа до 18 * 14 пикселей.
Довольно рано (я думаю, что это было сделано, когда была представлена EGA ), в режим отображения текста на IBM PC была добавлена поддержка пользовательских глифов символов.
Обычный текстовый режим IBM PC - это просто 4000 байтов ОЗУ видеоконтента по определенному адресу. Они читаются как один байт символьных атрибутов (первоначально мигающий, полужирный, подчеркивание и т. Д .; затем повторно используется для цветов переднего плана и фона и мигающий / выделенный, отсюда ограничение до 16 цветов в текстовом режиме) и один байт, описывающий символ для отображаться. Фактический глиф, отображаемый для каждого значения байта символа, хранится в другом месте.
Это означает, что до тех пор, пока вы можете обойтись с 256 различными глифами на экране в любое время, и каждый глиф может быть представлен как однобитное растровое изображение 9x14, вы можете просто заменить глифы в памяти, чтобы символы выглядели по-разному , Частично это была одна часть того, что
mode con codepage select
делали в DOS. Это относительно тривиально.Если вам нужно более 256 различных символов, но вы можете жить с уменьшенным количеством символов на экране, вы можете использовать схему 40x25 с символами двойной ширины (18 пикселей в ширину). Предполагая, что общий объем ОЗУ видеоконтента фиксирован и предполагая, что вы можете увеличить память растрового изображения глифа, вы можете перейти к использованию двух байтов из каждых четырех байтов для представления одного экранного глифа, что дает вам доступ к 2 ^ 16 = 65 536 различных символов (включая пустой символ). Если вы чувствуете смелость, вы можете даже пропустить второй байт атрибута, который дает вам доступ к 2 ^ 24 ~ 16,7M различным символам. Оба эти подхода основаны на специальной поддержке программного обеспечения, но аппаратная часть и прошивка должны быть довольно просты. 65 536 символов с разрешением 18x14 однобитных пикселей занимают около 2 МБ, что является значительным, но не непреодолимым объемом памяти в то время.
Базовому американскому английскому языку нужно как минимум 62 выделенных глифа (цифры 0-9, буквы AZ в верхнем и нижнем регистре), поэтому у вас есть что-то вроде 180-190 глифов для игры, если вы также хотите иметь возможность отображать текст на английском языке США время и идти с 8 битами на глиф. Если вы можете жить без одновременной поддержки американского английского, что вы можете выбрать в среде с ограниченными ресурсами, например, в ранней архитектуре IBM PC, у вас есть доступ ко всему количеству глифов.
С некоторой хитростью вы могли бы, вероятно, смешать и сопоставить две схемы тоже.
Я не знаю, как это было на самом деле, но обе они являются жизнеспособными схемами для того, чтобы вывести «причудливые» алфавиты с особенно ограниченным числом символов на простой экран IBM PC в текстовом режиме, которые я могу придумать, просто сидя впереди. стек обмена на мгновение. Вполне возможно, что есть дополнительные графические режимы, которые делают это проще на практике.
Также имейте в виду различие между текстовым режимом и графическим режимом отображения текста . Если вы работаете в графическом режиме, возможно, с помощью VESA, который довольно универсально поддерживается, вы можете самостоятельно рисовать глифы символов, но у вас также есть гораздо больше свободы в их рисовании. Например, я уверен, что текстовые части Windows NT (к которому относится семейство продуктов, к которому относится Windows XP) используют графический режим для отображения текста, включая загрузочный экран Windows NT 4.0 и BSOD.
источник
Это упрощает то, что говорит @Michael Kjörling.
В текстовом режиме у вас есть «экранная память», которая имеет 1 байт на экранный символ, который сообщает адаптеру, какой символ появляется в каждой позиции экрана. (Существуют также байты «атрибута», которые сообщают адаптеру, какой цвет и такие вещи, как подчеркивание, мигание и т. Д.).
Адаптер использует этот байт для индексации в другую «таблицу символов», которая имеет маленькую 8x12 или любую другую битовую карту символа. DOS называет эту таблицу символов кодовой страницей.
Начиная с CGA, вы можете сказать адаптеру, чтобы он получал таблицу символов в определенном месте в оперативной памяти адаптера. Каждый адаптер имеет символьное ПЗУ, в котором есть «шрифт» по умолчанию для этой карты (который является стандартным шрифтом IBM), но вы можете указать адаптеру переключиться в какое-либо место в ОЗУ и поместить туда свои собственные изображения.
Пока программное обеспечение знает, что происходит, коды в экранной памяти, которые указывают на изображения в таблице символов, не совпадают с какими-либо кодами ASCII, хотя легче, если они это делают. Вы заметите, что есть коды экранной памяти (и формы таблиц символов) для 1-31, которые являются непечатаемыми символами ASCII, но записывая их непосредственно в память экрана (любящие воспоминания
DEFSEG = &HB800 : POKE 0,1
в GW-BASIC для изменения самого верхнего символа на смайлик приходят к ум) вы все равно можете их отобразить.Поэтому отображение других языков - это хорошо, если вы можете поместить нужные изображения в оперативную память адаптера и иметь необходимую программную поддержку.
источник
Я нашел что-то на странице "VGA-совместимый текстовый режим" в Википедии, а также в некоторых книгах по программированию VGA:
Текстовые режимы EGA и VGA позволяют одновременно отображать 512 символов на экране или 2 банка по 256 символов каждый. Бит атрибута 3 (интенсивность цвета переднего плана) также может выбирать между банком A или B. Обычно происходит то, что по умолчанию регистры шрифтов A и B указывают на один и тот же адрес, давая вам только 256 символов. Таким образом, чтобы это работало, вы должны установить регистры шрифтов на правильные адреса.
Каждый банк имеет 8192 байта, и каждый из 256 глифов в банке имеет 32 байта (8 пикселей в ширину и 32 пикселя в высоту). Вы можете установить регистр числа строк сканирования, чтобы определить правильную высоту символов. Карты VGA печатают 400 строк развертки на экране, в то время как EGA печатают 350 строк развертки на экране, поэтому, чтобы получить 25 строк символов, они устанавливают высоту символов 16 и 14 строк сканирования соответственно. Кроме того, в VGA каждый глиф может иметь ширину 8 или 9 точек, но 9-й столбец либо пустой, либо просто повторение 8-го столбца. Все эти символы в обоих банках могут быть определены пользователем.
Как вы можете получить более 256 различных символов на экране на некоторых языках? В приведенных выше примерах каждый специальный иностранный символ состоит из двух глифов (слева и справа) или более. Вы можете установить первые, скажем, 128 глифов из банка A отдельно для текста ASCII, и у вас все равно будет 128 глифов из банка A + 256 глифов из банка B = 384 глифов, которые вы можете настроить.
Кроме того, вы можете комбинировать разные левые и правые стороны, чтобы сделать огромный набор символов! Скажем, например, что из 384 пользовательских глифов вы хотите зарезервировать 184 для левой стороны и 200 для правой стороны: вы можете иметь 184 * 200 = 36800 различных символов! (конечно, большинство из них, вероятно, будут недопустимыми символами для этого языка, но все же вы можете получить хорошее количество допустимых комбинаций).
В приведенном выше примере с японским языком у вас есть символы "ha" и "ba", разделяющие левый глиф. То же самое для персонажей "си" и "зи". Правые части "ko" и "ni" настолько похожи, что могут иметь одинаковый правый глиф. То же самое можно сказать о персонажах «ru» и «ro». С хорошим дизайном вы можете очень хорошо расширить свой набор символов. Глиф справа от символа «le» отображается в левом верхнем углу экрана (серым цветом), а на вертикальной полосе прокрутки также были изменены кнопки «вверх» и «вниз», что означает, что, по крайней мере, часть банка A был также использован для размещения новых глифов.
В заключение, функции строки BIOS в раннюю эру ПК не были ориентированы на Unicode, но это не обязательно. Все, что вам нужно было сделать, это настроить 512 символов и установить правильные регистры EGA или VGA. Например, вы можете настроить символы "! @" "# $" "% ^" "& *" "Çé" "ñÑ" на ваши иностранные символы (в банке A или B), а затем выполнить печать BIOS "! @ # S% ^ & * çéñÑ "строка сразу. BIOS не будет проверять глифы. Вы также не можете использовать функции BIOS вообще, так как вы можете писать прямо в видеопамять. Чтобы использовать глиф из банка B, просто установите для атрибута «Цвет переднего плана» значение от 8 до 15 (яркий цвет).
(извините мой плохой английский)
источник
Я провел некоторое исследование, и, как я и ожидал, вы должны использовать графический режим или вам нужна специальная аппаратная поддержка, потому что в текстовом режиме VGA невозможно использовать более 512 символов.
Японская версия DOS (DOS / V) использует первый подход и имитирует текстовый режим с помощью визуализации символов в графическом режиме , используя специальный драйвер. Драйвер следует стандарту IBM V-Text, который является механизмом расширения возможностей отображения текста в DOS. Вы можете выбрать один из 16/24/32/48-точечных шрифтов, как этот
Некоторые другие системы текстового режима также используют ту же технику. В FreeDOS вы можете загрузить специальный драйвер для поддержки японского языка.
Рендерер будет перехватывать вызовы int 10h и int 21h и рисовать текст вручную, поэтому он будет работать даже для обычных программ на английском языке. Но это не будет работать для программ, которые записывают в память VGA напрямую. Для печати японские символы int 5h и int 17h также подключены.
В соответствии с руководством по DOS / V позднее IBM BIOS также добавил поддержку V-Text через int 15h с помощью 4 новых функций, указанных ниже.
Я полагаю, что это также причина, по которой я увидел поддержку японского в BIOS моих старых ПК
Тем не менее, медленный графический режим может вызвать сбои при прокрутке, что требует особой обработки
DOS / V на самом деле является первым программным решением для японского текстового режима
Согласно той же статье, до изобретения DOS / V для всех других систем требовалось ПЗУ Кандзи в аппаратном обеспечении.
Например, IBM Personal System / 55, которая использует специальный графический адаптер с японским шрифтом, чтобы они получали реальный текстовый режим
https://en.wikipedia.org/wiki/DOS/V#History
Архитектура AX использует специальный адаптер JEGA вместо стандартного EGA
Более поздние версии также добавляют специальное оборудование AX-VGA / H и AX-VGA / S для программной эмуляции на VGA.
Серия NEC PC-98 также имеет символьное ПЗУ в контроллере дисплея
Я не знаю ситуацию для китайского и корейского, но я думаю, что используются те же методы. Я не уверен, есть ли другие способы достичь этого или нет
источник
Вам нужен графический режим вместо жестко закодированного текстового режима, чтобы можно было отображать текстовые символы Юникода. Затем вы устанавливаете MS-DOS для использования шрифта Unicode и изменяете отображение языка, чтобы использовать его.
http://www.mobilefish.com/tutorials/windows/windows_quickguide_dos_unicode.html
источник