nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 19 Aug 2017 03:14



Reply to topic  [ 37 posts ]  Go to page 1, 2, 3  Next
Точность эмуляции Радио 86РК 
Author Message
Doomed

Joined: 16 Mar 2002 20:00
Posts: 490
Reply with quote
Выяснял тут различные подробности устройства РК-шки - как работает ВГ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, соответственно, не учтена


11 Aug 2006 00:11
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15434
Location: New York
Reply with quote
Post 
Надо сохранить в анналах - а почему Emu80 обойдён? Вроде бы самый адекватный эмуль....

P.S. А что есть аналог 75-й микрухи?

_________________
:eugeek: https://twitter.com/Shaos1973


12 Aug 2006 00:42
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 16:41
Posts: 2155
Location: От туда
Reply with quote
Post 
Shaos wrote:
А что есть аналог 75-й микрухи?

ЕМНИП это КР580 есть аналог i82xx/i80xx. Или нет???


12 Aug 2006 00:56
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15434
Location: New York
Reply with quote
Post 
HardWareMan wrote:
Shaos wrote:
А что есть аналог 75-й микрухи?

ЕМНИП это КР580 есть аналог i82xx/i80xx. Или нет???

Я иметь ввиду оригинал 8275 - какие глюки повторяемы на нём?

_________________
:eugeek: https://twitter.com/Shaos1973


12 Aug 2006 01:19
Profile WWW
Doomed

Joined: 16 Mar 2002 20:00
Posts: 490
Reply with quote
Post 
ВГ75 - это 8275. А вот насколько точной копией он является - это вопрос. По крайней мере, некоторые моменты даташита на 8275 либо содержат ошибки, либо ВГ75 имеет отличия. Думаю, что всё-же в описании ошибки, а ВГ скопирован точно.


12 Aug 2006 01:25
Profile
Doomed

Joined: 16 Mar 2002 20:00
Posts: 490
Reply with quote
Post 
Попытался потестить в трёх других известных мне эмуляторах - неудачно. Давятся моим файлом из-за неправильной длины, указанной в заголовке;) А вот реал, между прочим, не давится (понятно, что говорит об ошибке - но файл загружается, и можно запустить). И Эмулятор-3000 тоже.

Потестирую потом.


12 Aug 2006 01:47
Profile
Doomed

Joined: 16 Mar 2002 20:00
Posts: 490
Reply with quote
Post 
Потестировал Emu80 Виктора Пыхонина (он, оказывается, грузил файл, просто довольно странным образом - я думал, сбрасывается).

Версия 2.86, в режиме graph (наиболее точная эмуляция), перехват обращений к памяти по записи и чтению.

Перемещение курсора - выполняется правильно (сразу по приёму первого параметра). Кстати, в текстовом режиме оно выполняется неправильно - по завершении передачи параметров, получается - два разных движка ВГ в Emu80?

Виды курсора - не эмулируются. В любом режиме отображения курсор всегда выглядит как мигающее подчёркивание.

Псевдографика не реализована (так и надо), но глюки не соответствуют реалу.

Рассинхронизация CRT/DMA в режиме прозрачных атрибутов не эмулируется.

В режиме непрозрачных атрибутов: атрибут мигания эмулируется, атрибут инверсии эмулируется (а не должен), подсвечивание не эмулируется (так и надо), подчёркивание не эмулируется (а должно).


12 Aug 2006 14:25
Profile
Doomed

Joined: 16 Mar 2002 20:00
Posts: 490
Reply with quote
Post 
Сделал ещё один тест, выяснилось несколько интересных подробностей. Также прогнал его на двух вышеупомянутых эмуляторах.

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 не эмулируется вообще, изменение размера экранного буфера никак не влияет на изображение.

Черезстрочный режим не эмулируется.

Изменение номера линии подчёркивания влияет на номер линии отображения курсора, как и должно быть.


13 Aug 2006 00:56
Profile
Doomed

Joined: 16 Mar 2002 20:00
Posts: 490
Reply with quote
Post 
Shiru wrote:
Выяснено: в режиме прозрачных атрибутов... что происходит-то в нём?


Извиняюсь, забыл описать этот момент:) Вобщем, фишка вот в чём: согласно описанию 8275, в режиме прозрачных атрибутов при чтении кода атрибута сразу-же происходит чтение следующего байта (оно идёт в буфер FIFO с обрезанием до 7 бит, и при отображении строки также сразу достаётся оттуда). То есть, происходит ещё один запрос байта по DMA, но счётчик символов в строке при этом, видимо, не уменьшается. Отсюда и рассинхронизация CRT/DMA - каждый использованный на экране атрибут в режиме прозрачных атрибутов увеличивает размер запрашиваемых для кадра данных на 1, и следующий кадр читается не с начала экранного буфера.


13 Aug 2006 01:11
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15434
Location: New York
Reply with quote
Post 
Ну ты просто таки гигантскую работу провёл!

_________________
:eugeek: https://twitter.com/Shaos1973


13 Aug 2006 09:16
Profile WWW
Maniac
User avatar

Joined: 14 Mar 2006 03:20
Posts: 211
Location: Иркутск
Reply with quote
Post 
Shiru Otaku wrote:
Shiru wrote:
Выяснено: в режиме прозрачных атрибутов... что происходит-то в нём?


Извиняюсь, забыл описать этот момент:) Вобщем, фишка вот в чём: согласно описанию 8275, в режиме прозрачных атрибутов при чтении кода атрибута сразу-же происходит чтение следующего байта (оно идёт в буфер FIFO с обрезанием до 7 бит, и при отображении строки также сразу достаётся оттуда). То есть, происходит ещё один запрос байта по DMA, но счётчик символов в строке при этом, видимо, не уменьшается. Отсюда и рассинхронизация CRT/DMA - каждый использованный на экране атрибут в режиме прозрачных атрибутов увеличивает размер запрашиваемых для кадра данных на 1, и следующий кадр читается не с начала экранного буфера.

Ну, да, всё правильно! В режиме "непрозрачных" атрибутов экранная область ОЗУ "один в один" соответствует размеру экрана. Коды соседних символов экрана находятся и в ОЗУ рядом. А если вставили атрибут, то это - вместо символа, т.е. атрибут занял и знакоместо на экране, там отпечатается пробел. А в режиме "прозрачных" на каждое знакоместо надо отводить по два байта (атрибут и код символа). При этом объём экранной области ОЗУ увеличивается вдвое и соответственно программируется контроллер DMA, но зато атрибуты не занимают место на экране: два соседних символа могут иметь разные атрибуты, а пробела между ними не будет.

P.S. Второй режим лучше, но разработчики РК, видно, память экономили, её ведь всего 16К было... Да и скорость работы подпрограмм, работающих с экраном повысить хотели, я думаю.

_________________
Кто мешает тебе выдумать порох непромокаемый?


13 Aug 2006 13:07
Profile
Doomed

Joined: 16 Mar 2002 20:00
Posts: 490
Reply with quote
Post 
Ball Bess wrote:
А в режиме "прозрачных" на каждое знакоместо надо отводить по два байта (атрибут и код символа). При этом объём экранной области ОЗУ увеличивается вдвое

Нет, это неправильно. Не два байта, и не вдвое. Дело в том, что в режиме прозрачных атрибутов на строке их не может быть использовано больше 16 - иначе возникнет переполнение буфера FIFO (выставится соответствующий флажок, и будут браться символы с начала буфера FIFO - как сказано в документации). Насчёт изменения объёма буфера - я описал всё в предыдущем посте: он увеличивается на кол-во использованных в кадре атрибутов.

Я думаю написать ещё один тест, чтобы достоверно узнать, что будет при переполнении FIFO, а также для проверки действия атрибутов конца строки, кадра, и прекращения DMA.


13 Aug 2006 15:41
Profile
Doomed

Joined: 16 Mar 2002 20:00
Posts: 490
Reply with quote
Post 
Третий тест.

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 (я не стал его подробно тестить, т.к. он совсем сырой) инверсия зачем-то реализована.


13 Aug 2006 20:22
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15434
Location: New York
Reply with quote
Post 
А ещё вроде есть Радио-86РК с цветным текстом! И там помниться авторы хвалились использованием стандартных фич ВГ75

_________________
:eugeek: https://twitter.com/Shaos1973


13 Aug 2006 20:28
Profile WWW
Doomed

Joined: 16 Mar 2002 20:00
Posts: 490
Reply with quote
Post 
Да, есть пара схем. Одна из них - вот:

http://nf8.jinr.ru/~volkov/pc-nostalgia/rk-color.htm

Она юзает два бита пользовательских атрибутов (GPA1,GPA0) и биты подсветки/инверсии; соответственно выходы ВГ-шки HLGT (как запрет красной компоненты) и GPA1 (как запрет синей), GPA0 (как запрет зелёной), RVV (инверсия цвета).

Но это всё самодеятельность, в конструкторах и промышленных клонах ничего такого не было. Да и софт под цветной режим я видел только у автора указанной примочки.


13 Aug 2006 21:03
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 37 posts ]  Go to page 1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.