Точность эмуляции Радио 86РК
Moderator: Pyk
-
- Retired
- Posts: 490
- Joined: 16 Mar 2002 17:00
Точность эмуляции Радио 86РК
Выяснял тут различные подробности устройства РК-шки - как работает ВГ75 вообще (даташит 8275 местами ошибается или умалчивает детали), и какие её фичи реализованы в РК. Написал тест, прогнал его на моём Спектр'е. Потом им-же потестил Эмулятор-3000. Другие эмуляторы пока не тестил (может, кто хочет?). Публикую результат, чтобы авторы эмуляторов РК (я знаю, что они сюда захаживают:), если у них будет такое желание, реализовали эмуляцию видеоконтроллера более точно.
Сам тест, его исходник, и видео с записью выполнения на реале, здесь: http://rapidshare.de/files/28966885/test1.rar.html (извиняюсь за рапидшару). Архив - 5 мегабайт.
Результаты теста есть в архиве, также пишу их здесь:
Описание теста.
Проверяется алгоритм работы команды установки позиции курсора:
0 - курсор помещается в координаты 8,8
1 - передаётся код команды смены позиции
2 - передаётся первый параметр (выяснено: перемещение происходит сразу по приёму параметра)
3 - передаётся второй параметр
Проверяются режимы отображения курсора (в позиции 8,8):
0 - мигающий инверсный блок (выяснено: инверсия на РК не реализована)
1 - мигающее подчёркивание символа
2 - немигающий инверсный блок
3 - немигающее подчёркивание символа
Проверяется отображение псевдографики средствами ВГ
Четыре строки всех возможных символов псевдографики,
со всеми вариантами атрибутов:
- не мигает, не подсвечено
- не мигает, подсвечено
- мигает, не подсвечено
- мигает, подсвечено
Выяснено: псевдографика (character attributes) не
реализована на РК. Подсветка не реализована на РК.
Подтверждается отсутствие реализации инверсии.
Проверяются атрибуты отображения символов (не все комбинации проверяются)
ВГ находится в режиме прозрачных атрибутов:
A - без атрибутов
B - подчёркивание
C - инверсия
D - мигание
E - подсветка
F - подчёркивание с инверсией
G - подчёркивание с миганием
H - подчёркивание с подсветкой
I - инверсия с миганием
J - подсветка с миганием
Выяснено: режим прозрачных атрибутов (не занимающих знакоместо) сбивает
синхронизацию CRT/DMA! Поэтому происходит скролл экрана. Почему - неясно,
возможно не работает FIFO в ВГ (работает не так, как описано).
Повторение предыдущего теста в режиме непрозрачных атрибутов.
Непрозрачные атрибуты работают, как и предполагалось (учитывая отсутствие
реализации подсветки и инверсии символов).
Выполнение теста на Эмулятор-3000:
- Команда курсора отрабатывается неправильно (по завершении передачи параметров)
- Режимы отображения курсора реализованы полностью, что не соответствует реальному РК
- Псевдографика не реализована, но результат (глюки) не соответствует реальному РК
- Атрибуты символов не реализованы вообще ни в каком виде
- Рассинхронизация CRT/DMA, соответственно, не учтена
Сам тест, его исходник, и видео с записью выполнения на реале, здесь: http://rapidshare.de/files/28966885/test1.rar.html (извиняюсь за рапидшару). Архив - 5 мегабайт.
Результаты теста есть в архиве, также пишу их здесь:
Описание теста.
Проверяется алгоритм работы команды установки позиции курсора:
0 - курсор помещается в координаты 8,8
1 - передаётся код команды смены позиции
2 - передаётся первый параметр (выяснено: перемещение происходит сразу по приёму параметра)
3 - передаётся второй параметр
Проверяются режимы отображения курсора (в позиции 8,8):
0 - мигающий инверсный блок (выяснено: инверсия на РК не реализована)
1 - мигающее подчёркивание символа
2 - немигающий инверсный блок
3 - немигающее подчёркивание символа
Проверяется отображение псевдографики средствами ВГ
Четыре строки всех возможных символов псевдографики,
со всеми вариантами атрибутов:
- не мигает, не подсвечено
- не мигает, подсвечено
- мигает, не подсвечено
- мигает, подсвечено
Выяснено: псевдографика (character attributes) не
реализована на РК. Подсветка не реализована на РК.
Подтверждается отсутствие реализации инверсии.
Проверяются атрибуты отображения символов (не все комбинации проверяются)
ВГ находится в режиме прозрачных атрибутов:
A - без атрибутов
B - подчёркивание
C - инверсия
D - мигание
E - подсветка
F - подчёркивание с инверсией
G - подчёркивание с миганием
H - подчёркивание с подсветкой
I - инверсия с миганием
J - подсветка с миганием
Выяснено: режим прозрачных атрибутов (не занимающих знакоместо) сбивает
синхронизацию CRT/DMA! Поэтому происходит скролл экрана. Почему - неясно,
возможно не работает FIFO в ВГ (работает не так, как описано).
Повторение предыдущего теста в режиме непрозрачных атрибутов.
Непрозрачные атрибуты работают, как и предполагалось (учитывая отсутствие
реализации подсветки и инверсии символов).
Выполнение теста на Эмулятор-3000:
- Команда курсора отрабатывается неправильно (по завершении передачи параметров)
- Режимы отображения курсора реализованы полностью, что не соответствует реальному РК
- Псевдографика не реализована, но результат (глюки) не соответствует реальному РК
- Атрибуты символов не реализованы вообще ни в каком виде
- Рассинхронизация CRT/DMA, соответственно, не учтена
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Banned
- Posts: 2139
- Joined: 20 Mar 2005 13:41
- Location: От туда
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Retired
- Posts: 490
- Joined: 16 Mar 2002 17:00
-
- Retired
- Posts: 490
- Joined: 16 Mar 2002 17:00
-
- Retired
- Posts: 490
- Joined: 16 Mar 2002 17:00
Потестировал Emu80 Виктора Пыхонина (он, оказывается, грузил файл, просто довольно странным образом - я думал, сбрасывается).
Версия 2.86, в режиме graph (наиболее точная эмуляция), перехват обращений к памяти по записи и чтению.
Перемещение курсора - выполняется правильно (сразу по приёму первого параметра). Кстати, в текстовом режиме оно выполняется неправильно - по завершении передачи параметров, получается - два разных движка ВГ в Emu80?
Виды курсора - не эмулируются. В любом режиме отображения курсор всегда выглядит как мигающее подчёркивание.
Псевдографика не реализована (так и надо), но глюки не соответствуют реалу.
Рассинхронизация CRT/DMA в режиме прозрачных атрибутов не эмулируется.
В режиме непрозрачных атрибутов: атрибут мигания эмулируется, атрибут инверсии эмулируется (а не должен), подсвечивание не эмулируется (так и надо), подчёркивание не эмулируется (а должно).
Версия 2.86, в режиме graph (наиболее точная эмуляция), перехват обращений к памяти по записи и чтению.
Перемещение курсора - выполняется правильно (сразу по приёму первого параметра). Кстати, в текстовом режиме оно выполняется неправильно - по завершении передачи параметров, получается - два разных движка ВГ в Emu80?
Виды курсора - не эмулируются. В любом режиме отображения курсор всегда выглядит как мигающее подчёркивание.
Псевдографика не реализована (так и надо), но глюки не соответствуют реалу.
Рассинхронизация CRT/DMA в режиме прозрачных атрибутов не эмулируется.
В режиме непрозрачных атрибутов: атрибут мигания эмулируется, атрибут инверсии эмулируется (а не должен), подсвечивание не эмулируется (так и надо), подчёркивание не эмулируется (а должно).
-
- Retired
- Posts: 490
- Joined: 16 Mar 2002 17:00
Сделал ещё один тест, выяснилось несколько интересных подробностей. Также прогнал его на двух вышеупомянутых эмуляторах.
http://rapidshare.de/files/29203790/test2.rar.html (4 мегабайта)
Описание теста.
Тест курсора - проверяется, что будет при выходе значений координат за пределы экрана. В цикле перебираются значения 0..255 для X, потом тоже самое выполняется для Y; текущая координата отображается на экране.
Выяснено: счётчики координат имеют разную разрядность. Для X-координаты используется 7 бит (т.е. при значениях более #80 курсор снова виден на экране!); для Y-координаты используется 6 бит.
Четыре раза выполняется тестовый вывод двух экранов с использованием атрибутов в разных режимах. Первый экран - горизонтальная строка символов A-P, перед каждым идёт код атрибута (все возможные варианты). Второй экран – такая же строка символов, но выводится по вертикали.
Первый заход - вывод в режиме непрозрачных атрибутов. Как и ожидалось, между символами в горизонтальной строке получаются пробелы; действие атрибутов распространяется до следующего кода атрибута.
Второй заход - вывод в режиме прозрачным атрибутов (который устанавливается Монитором РК по умолчанию). Наблюдается сдвиг экрана.
Третий заход - аналогично первому, но размер экранного буфера (т.е. счётчика DMA) уменьшен на 15 (кол-во использованных атрибутов). Сдвиг экрана не устраняется.
Третий заход - также аналогично первому, но размер экранного буфера увеличен на 15. Сдвиг экрана прекращается, но наблюдается мерцание изображения (кадр есть, кадр нет). Возможно, это проблемы моего клона РК - в игре Lode Runner у меня наблюдается аналогичное мерцание (хотя там не используются атрибуты, там высота символов уменьшена до 8 пикселей). Непрозрачные атрибуты в этом режиме отображаются, как и предполагалось - без пробелов между символами в горизонтальной строке. Однако, вертикальная строка символов сдвинулась по диагонали.
Выяснено: в режиме прозрачных атрибутов... что происходит-то в нём?
Тест черезстрочного режима отображения (когда каждая вторая строка символов не выводится, и запросы DMA не выдаются). Сначала выводится заполненный символами экран в обычном режиме, затем в черезстрочном (с уменьшенным вдвое размером экранного буфера). Черезстрочный режим работает, однако наблюдается некий непонятный глюк в виде мерцания нижней части экрана.
Тест изменения номера линии для подчёркивания - номер изменяется от 0 до 15. Тест проводится в режиме непрозрачных атрибутов, чтобы избежать рассинхронизации CRT/DMA. Мусор под символами при значении номера линии <8 присутствует, и это правильно, т.к. согласно описанию при значении 1 старшего бита номера линии подчёркивания выполняется гашение самой верхней и самой нижней линий символа.
Выяснено: изменение линии подчёркивания на РК реализовано, и оно также влияет на номер строки, в которой будет появляться курсор (если он отображается в виде подчёркивания).
Эмулятор 3000:
Разрядность счётчиков координат курсора не учитывается - при выходе значения за пределы 0..79,0..63 он просто не отображается.
Атрибуты не эмулируются (это же показал и предыдущий тест); в любом режиме отображаются как некоторые символы знакогенератора.
DMA не эмулируется вообще, изменение размера экранного буфера никак не влияет на изображение.
Черезстрочный режим не эмулируется.
Изменение номера линии подчёркивания не влияет ни на что (атрибут подчёркивания не реализован; курсор отображается на одной и той-же линии).
Emu80 (настройки как в предыдущем тесте):
Разрядность счётчиков координат курсора не учитывается - при выходе значения за пределы 0..79,0..63 он просто не отображается.
Атрибут инверсии эмулируется неправильно, атрибут подчёркивания не эмулируется (как и в предыдущем тесте). Действие эмулируемых атрибутов, судя по инверсии, начинается в поле с атрибутом, а не на следующем поле (как указывает документация и как происходит на реале).
Прозрачные атрибуты не эмулируются (считаются непрозрачными).
DMA не эмулируется вообще, изменение размера экранного буфера никак не влияет на изображение.
Черезстрочный режим не эмулируется.
Изменение номера линии подчёркивания влияет на номер линии отображения курсора, как и должно быть.
http://rapidshare.de/files/29203790/test2.rar.html (4 мегабайта)
Описание теста.
Тест курсора - проверяется, что будет при выходе значений координат за пределы экрана. В цикле перебираются значения 0..255 для X, потом тоже самое выполняется для Y; текущая координата отображается на экране.
Выяснено: счётчики координат имеют разную разрядность. Для X-координаты используется 7 бит (т.е. при значениях более #80 курсор снова виден на экране!); для Y-координаты используется 6 бит.
Четыре раза выполняется тестовый вывод двух экранов с использованием атрибутов в разных режимах. Первый экран - горизонтальная строка символов A-P, перед каждым идёт код атрибута (все возможные варианты). Второй экран – такая же строка символов, но выводится по вертикали.
Первый заход - вывод в режиме непрозрачных атрибутов. Как и ожидалось, между символами в горизонтальной строке получаются пробелы; действие атрибутов распространяется до следующего кода атрибута.
Второй заход - вывод в режиме прозрачным атрибутов (который устанавливается Монитором РК по умолчанию). Наблюдается сдвиг экрана.
Третий заход - аналогично первому, но размер экранного буфера (т.е. счётчика DMA) уменьшен на 15 (кол-во использованных атрибутов). Сдвиг экрана не устраняется.
Третий заход - также аналогично первому, но размер экранного буфера увеличен на 15. Сдвиг экрана прекращается, но наблюдается мерцание изображения (кадр есть, кадр нет). Возможно, это проблемы моего клона РК - в игре Lode Runner у меня наблюдается аналогичное мерцание (хотя там не используются атрибуты, там высота символов уменьшена до 8 пикселей). Непрозрачные атрибуты в этом режиме отображаются, как и предполагалось - без пробелов между символами в горизонтальной строке. Однако, вертикальная строка символов сдвинулась по диагонали.
Выяснено: в режиме прозрачных атрибутов... что происходит-то в нём?
Тест черезстрочного режима отображения (когда каждая вторая строка символов не выводится, и запросы DMA не выдаются). Сначала выводится заполненный символами экран в обычном режиме, затем в черезстрочном (с уменьшенным вдвое размером экранного буфера). Черезстрочный режим работает, однако наблюдается некий непонятный глюк в виде мерцания нижней части экрана.
Тест изменения номера линии для подчёркивания - номер изменяется от 0 до 15. Тест проводится в режиме непрозрачных атрибутов, чтобы избежать рассинхронизации CRT/DMA. Мусор под символами при значении номера линии <8 присутствует, и это правильно, т.к. согласно описанию при значении 1 старшего бита номера линии подчёркивания выполняется гашение самой верхней и самой нижней линий символа.
Выяснено: изменение линии подчёркивания на РК реализовано, и оно также влияет на номер строки, в которой будет появляться курсор (если он отображается в виде подчёркивания).
Эмулятор 3000:
Разрядность счётчиков координат курсора не учитывается - при выходе значения за пределы 0..79,0..63 он просто не отображается.
Атрибуты не эмулируются (это же показал и предыдущий тест); в любом режиме отображаются как некоторые символы знакогенератора.
DMA не эмулируется вообще, изменение размера экранного буфера никак не влияет на изображение.
Черезстрочный режим не эмулируется.
Изменение номера линии подчёркивания не влияет ни на что (атрибут подчёркивания не реализован; курсор отображается на одной и той-же линии).
Emu80 (настройки как в предыдущем тесте):
Разрядность счётчиков координат курсора не учитывается - при выходе значения за пределы 0..79,0..63 он просто не отображается.
Атрибут инверсии эмулируется неправильно, атрибут подчёркивания не эмулируется (как и в предыдущем тесте). Действие эмулируемых атрибутов, судя по инверсии, начинается в поле с атрибутом, а не на следующем поле (как указывает документация и как происходит на реале).
Прозрачные атрибуты не эмулируются (считаются непрозрачными).
DMA не эмулируется вообще, изменение размера экранного буфера никак не влияет на изображение.
Черезстрочный режим не эмулируется.
Изменение номера линии подчёркивания влияет на номер линии отображения курсора, как и должно быть.
-
- Retired
- Posts: 490
- Joined: 16 Mar 2002 17:00
Извиняюсь, забыл описать этот момент:) Вобщем, фишка вот в чём: согласно описанию 8275, в режиме прозрачных атрибутов при чтении кода атрибута сразу-же происходит чтение следующего байта (оно идёт в буфер FIFO с обрезанием до 7 бит, и при отображении строки также сразу достаётся оттуда). То есть, происходит ещё один запрос байта по DMA, но счётчик символов в строке при этом, видимо, не уменьшается. Отсюда и рассинхронизация CRT/DMA - каждый использованный на экране атрибут в режиме прозрачных атрибутов увеличивает размер запрашиваемых для кадра данных на 1, и следующий кадр читается не с начала экранного буфера.Shiru wrote:Выяснено: в режиме прозрачных атрибутов... что происходит-то в нём?
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Maniac
- Posts: 211
- Joined: 14 Mar 2006 00:20
- Location: Иркутск
Ну, да, всё правильно! В режиме "непрозрачных" атрибутов экранная область ОЗУ "один в один" соответствует размеру экрана. Коды соседних символов экрана находятся и в ОЗУ рядом. А если вставили атрибут, то это - вместо символа, т.е. атрибут занял и знакоместо на экране, там отпечатается пробел. А в режиме "прозрачных" на каждое знакоместо надо отводить по два байта (атрибут и код символа). При этом объём экранной области ОЗУ увеличивается вдвое и соответственно программируется контроллер DMA, но зато атрибуты не занимают место на экране: два соседних символа могут иметь разные атрибуты, а пробела между ними не будет.Shiru Otaku wrote:Извиняюсь, забыл описать этот момент:) Вобщем, фишка вот в чём: согласно описанию 8275, в режиме прозрачных атрибутов при чтении кода атрибута сразу-же происходит чтение следующего байта (оно идёт в буфер FIFO с обрезанием до 7 бит, и при отображении строки также сразу достаётся оттуда). То есть, происходит ещё один запрос байта по DMA, но счётчик символов в строке при этом, видимо, не уменьшается. Отсюда и рассинхронизация CRT/DMA - каждый использованный на экране атрибут в режиме прозрачных атрибутов увеличивает размер запрашиваемых для кадра данных на 1, и следующий кадр читается не с начала экранного буфера.Shiru wrote:Выяснено: в режиме прозрачных атрибутов... что происходит-то в нём?
P.S. Второй режим лучше, но разработчики РК, видно, память экономили, её ведь всего 16К было... Да и скорость работы подпрограмм, работающих с экраном повысить хотели, я думаю.
Кто мешает тебе выдумать порох непромокаемый?
-
- Retired
- Posts: 490
- Joined: 16 Mar 2002 17:00
Нет, это неправильно. Не два байта, и не вдвое. Дело в том, что в режиме прозрачных атрибутов на строке их не может быть использовано больше 16 - иначе возникнет переполнение буфера FIFO (выставится соответствующий флажок, и будут браться символы с начала буфера FIFO - как сказано в документации). Насчёт изменения объёма буфера - я описал всё в предыдущем посте: он увеличивается на кол-во использованных в кадре атрибутов.Ball Bess wrote:А в режиме "прозрачных" на каждое знакоместо надо отводить по два байта (атрибут и код символа). При этом объём экранной области ОЗУ увеличивается вдвое
Я думаю написать ещё один тест, чтобы достоверно узнать, что будет при переполнении FIFO, а также для проверки действия атрибутов конца строки, кадра, и прекращения DMA.
-
- Retired
- Posts: 490
- Joined: 16 Mar 2002 17:00
Третий тест.
http://rapidshare.de/files/29306236/test3.rar.html
Описание теста:
Тест переполнения буфера FIFO в режиме прозрачных атрибутов. Выводятся две строки, одна над другой (с учётом смещения после первой строки). На каждой строке выводятся 20 символов с разными атрибутами: 0123456789ABCDEFGHIJ, где символы 02468 выводятся с атрибутом подчёркивания, символы ACEGI с атрибутом мигания, а остальные с выключенными атрибутами (код атрибута %10000000). Размер экранного буфера в этом тесте увеличен на 40, чтобы не было рассинхронизации CRT/DMA.
Выяснено: атрибуты действуют как указано в описании, т.е. инверсия и мигание происходят на тех полях, на которых и предполагалось. Но на экране отображается GHIJ456789ABCDEFGHIJ вместо заданной строки. Таким образом, FIFO-буфер имеет длину 16 символов, и заполняется циклически - при превышении лимита в 16 ячеек начинает заполняться с начала; выборка идёт в том-же порядке, что и заполнение, с нулевой ячейки (всё соответствует описанию).
Тест атрибутов конца строки и кадра без остановки DMA, в режиме прозрачных атрибутов, стандартный размер буфера. Сначала экран заполняется символом #, потом на одной из строк, и через строку на трёх строках подряд ставится символ окончания строки, потом на одной из строк ставится символ окончания кадра.
Выяснено: атрибуты конца строки и кадра без остановки DMA работают, как указано в описании: после них прекращается отображение символов до конца строки и кадра соответственно.
Тест атрибута конца строки с остановкой DMA (аналогично предыдущему тесту в части атрибута конца строки). Размер экранного буфера соответственно скорректирован.
Выяснено: атрибут конца строки с остановкой DMA действует как описано - до конца строки символы не отображаются; экран из-за коррекции размера экранного буфера не сдвигается.
Тест атрибута конца кадра с остановкой DMA. Атрибут конца кадра установлен на середине экранного буфера, размер экранного буфера соответственно уменьшен вдвое.
Выяснено: атрибут конца кадра с остановкой DMA работает не так, как описано (либо это проблемы с моим реалом) - после него отображение кадра продолжается.
Эмуляторы тестить не стал, предыдущие тесты показали достаточно о реализации подобных тонкостей в них.
Да, насчёт атрибутов подсвечивания и инверсии - в схеме РК эти выводы ВГ75 вообще не задействованы. Соответственно, работать они не должны, хотя в Emu80 и в YARK (я не стал его подробно тестить, т.к. он совсем сырой) инверсия зачем-то реализована.
http://rapidshare.de/files/29306236/test3.rar.html
Описание теста:
Тест переполнения буфера FIFO в режиме прозрачных атрибутов. Выводятся две строки, одна над другой (с учётом смещения после первой строки). На каждой строке выводятся 20 символов с разными атрибутами: 0123456789ABCDEFGHIJ, где символы 02468 выводятся с атрибутом подчёркивания, символы ACEGI с атрибутом мигания, а остальные с выключенными атрибутами (код атрибута %10000000). Размер экранного буфера в этом тесте увеличен на 40, чтобы не было рассинхронизации CRT/DMA.
Выяснено: атрибуты действуют как указано в описании, т.е. инверсия и мигание происходят на тех полях, на которых и предполагалось. Но на экране отображается GHIJ456789ABCDEFGHIJ вместо заданной строки. Таким образом, FIFO-буфер имеет длину 16 символов, и заполняется циклически - при превышении лимита в 16 ячеек начинает заполняться с начала; выборка идёт в том-же порядке, что и заполнение, с нулевой ячейки (всё соответствует описанию).
Тест атрибутов конца строки и кадра без остановки DMA, в режиме прозрачных атрибутов, стандартный размер буфера. Сначала экран заполняется символом #, потом на одной из строк, и через строку на трёх строках подряд ставится символ окончания строки, потом на одной из строк ставится символ окончания кадра.
Выяснено: атрибуты конца строки и кадра без остановки DMA работают, как указано в описании: после них прекращается отображение символов до конца строки и кадра соответственно.
Тест атрибута конца строки с остановкой DMA (аналогично предыдущему тесту в части атрибута конца строки). Размер экранного буфера соответственно скорректирован.
Выяснено: атрибут конца строки с остановкой DMA действует как описано - до конца строки символы не отображаются; экран из-за коррекции размера экранного буфера не сдвигается.
Тест атрибута конца кадра с остановкой DMA. Атрибут конца кадра установлен на середине экранного буфера, размер экранного буфера соответственно уменьшен вдвое.
Выяснено: атрибут конца кадра с остановкой DMA работает не так, как описано (либо это проблемы с моим реалом) - после него отображение кадра продолжается.
Эмуляторы тестить не стал, предыдущие тесты показали достаточно о реализации подобных тонкостей в них.
Да, насчёт атрибутов подсвечивания и инверсии - в схеме РК эти выводы ВГ75 вообще не задействованы. Соответственно, работать они не должны, хотя в Emu80 и в YARK (я не стал его подробно тестить, т.к. он совсем сырой) инверсия зачем-то реализована.
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Retired
- Posts: 490
- Joined: 16 Mar 2002 17:00
Да, есть пара схем. Одна из них - вот:
http://nf8.jinr.ru/~volkov/pc-nostalgia/rk-color.htm
Она юзает два бита пользовательских атрибутов (GPA1,GPA0) и биты подсветки/инверсии; соответственно выходы ВГ-шки HLGT (как запрет красной компоненты) и GPA1 (как запрет синей), GPA0 (как запрет зелёной), RVV (инверсия цвета).
Но это всё самодеятельность, в конструкторах и промышленных клонах ничего такого не было. Да и софт под цветной режим я видел только у автора указанной примочки.
http://nf8.jinr.ru/~volkov/pc-nostalgia/rk-color.htm
Она юзает два бита пользовательских атрибутов (GPA1,GPA0) и биты подсветки/инверсии; соответственно выходы ВГ-шки HLGT (как запрет красной компоненты) и GPA1 (как запрет синей), GPA0 (как запрет зелёной), RVV (инверсия цвета).
Но это всё самодеятельность, в конструкторах и промышленных клонах ничего такого не было. Да и софт под цветной режим я видел только у автора указанной примочки.