nedoPC.org

Community for electronics hobbyists, established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 05 Nov 2024 13:10



Reply to topic  [ 150 posts ]  Go to page Previous  1 ... 6, 7, 8, 9, 10
Расширяя горизонты возможностей ВГ75 
Author Message
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
Shaos wrote:
Alikberov wrote:
Shaos wrote:
Надо знакогенератор делать в ОЗУ :ebiggrin:
Ну, как в КР-04 или Пальмире. Так давно сделано.
Суть в другом: Имеем аппаратную табуляцию, что позволит обеспечить и горизонтальный скроллинг, и память буфера экономить. :ewink:

Ну горизонтальный скроллинг и так можно делать, перепрограммируя ВТ57 :roll:
Забыл уточнить: Горизонтальный скроллинг отдельных строк. :idea:

Кстати, раз уж на то пошло:
  • 80-BF - «10URGGBH» стандартные атрибуты ВГ75
  • C0-DF - «110PPPPP» выбор палитры
  • E0-E3 - «111000??» резерв?
  • E4-E5 - «1110010F» переключение параграфа знакогенератора
  • E6-E7 - «1110011?» резерв?
  • E8-EF - «11101???» резерв?
  • F0-F3 - «111100SS» управление циклами ПДП
  • F4-FF - «1111TTTT» управление табуляцией
Если чуточку поднапрячься, можно счётчик пикселей (D3 ИЕ4 в схеме РК) принудительно сбрасывать кодами (например, E0-E3) и обеспечить очень точный попиксельный скролл по горизонтали (что в тех же играх придало бы максимум плавности) всей отдельной строки.

Естественно, если табуляцию можно указывать несколько раз в строке, то выбор палитры или попиксельный скроллинг - только один раз. :roll:


25 Feb 2024 04:11
Profile WWW
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
Сейчас перерабатываю исходный код Монитора и подошёл к подпрограмме F82D по адресам FACE…FAFC. Основная цель - унифицировать подпрограмму так, чтобы приложению не нужно было самостоятельно обращаться к ВТ57 и ВГ75.
(Строго говоря, авторы РК вообще не предусмотрели никакого API для работы с периферией, из-за чего большинство программ напрямую всё программируют сами, нарушая совместимость и переносимость.)

Так, вот исходный код Монитора:
Code:
     .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
FACE -- -- -- -- -- -- -- -- -- -- -- -- -- -- E5 21
FAD0 01 C0 36 00 2B 36 4D 36 1D 36 99 36 93 23 36 27
FAE0 7E 7E E6 20 CA E1 FA 21 08 E0 36 80 2E 04 36 D0
FAF0 36 76 23 36 23 36 49 2E 08 36 A4 E1 C9
А вот мой вариант:
Code:
     .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
FACE -- -- -- -- -- -- -- -- -- -- -- -- -- -- E5 21
FAD0 XX XX 22 20 76 E1 E5 D5 2A 20 76 7E 23 57 5F 23
FAE0 7E 12 23 7E B7 FA DC FA 1A 1A A6 CA E9 FA D1 E1
FAF0 C9 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
.... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
XXXX E8 80 E4 D0 E4 76 E5 23 E5 49 C1 00 C0 4D C0 1D
XXXX C0 99 C0 93 C1 27 20 E8 A4
Где XXXX - некий адрес свободной области в ПЗУ под таблицу описания исходного режима ВТ57/ВГ75 РК.
При этом:
  • Ячейки 7620/7621 хранят адрес таблицы стандартного режима или пользовательского
  • «CALL FACE» - восстанавливают исходный режим
  • «CALL FAD6» - устанавливают пользовательский режим

Конечно, в исходном Мониторе это реализовать несколько проблематично и не имеет смысла, однако в рамках моего Монитора реализовать несколько легче, так как там имеется набор подпрограмм и для доступа к ROM-Диску.

Для остальных пользователей - подгружаемый вариант для изучения алгоритма работы.


Attachments:
File comment: Подгружаемый вариант программы "Гибкого режима видео"
FLEX-VIDEO.RKR.zip [231 Bytes]
Downloaded 58 times
07 Mar 2024 07:01
Profile WWW
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
Я тут подумал…

Раз есть i8080A и i8255A, почему бы не, хотя бы, гипотетически, разработать i8275A?

  1. Полная совместимость по всем выводам¹
  2. Полная совместимость на программном уровне
  3. Снятие ограничений на максимальную длину знакоряда в 80 знакомест - до 128
  4. Снятие ограничений на количество атрибутов в знакоряде - до 128
  5. Возможность управления режимами через ПДП-поток
  6. Внутренний буфер²
¹ - в расширенных режимах есть нюансы.
² - цикл ПДП можно включать разово программно лишь после изменения содержимого буфера. Иначе говоря, при отключении ПДП экран не пустеет, а отображает всё из внутреннего кэша (скажем, на тех же РУ6).

Так, если ВГ75 по команде Сброса 00 принимает четыре байта режима (в РК - это «4D 1D 99 93»), то можно добавить ещё байтик управления шириной/высотой «бордюра», что сильно не хватало всегда! :roll:
Обычная ВГ75 вернёт в слове статуса C001 флаг «Improper Command» бит 3 маска 08h.

С другой стороны, запрет на приём из ПДП-потока двойного кода «Стоп ПДП»…
Например: «F3 00 F3 00» - подготовка к установке нового режима…
То есть, «F3 00 F3 00 4D 1D 99 93 VH XX YY» передаст в регистры режима стандартные параметры и ещё дополнительные, где «VH» - высота и ширина «бордюра», а «XX» и «YY» - позиция курсора.
Тем самым, задав в ПДП буфер экрана 76D0…7FFF, концовка может быть следующей:
Code:
      .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
7FF4: -- -- -- -- F3 00 F3 00 4D 1D 99 93 27 VH XX YY
И программе не нужно лезть в порты, чтобы изменить позицию курсора.
Просто настраиваем ПДП на какой-либо буфер, а сам режим - задаём в самой памяти.
(Естественно, ещё нужен котрольный байт, чтобы подтвердить валидность режима в ОЗУ.)

P.S.: Есть ещё некоторые соображения предопределения режима для каждой строки отдельно, типа как в тех же Atari.
Но тогда несколько сложнее всё получится.


20 Mar 2024 12:00
Profile WWW
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
Наконец-то дошли руки до написания кода тестирования тройного знакогенератора. :roll:


Attachments:
File comment: Вариант с тремя знакогенераторами (Штатный - Апогей/Текст - Апогей/Графика)
photo_2024-03-21_10-55-28.jpg
photo_2024-03-21_10-55-28.jpg [ 88.78 KiB | Viewed 2193 times ]
File comment: Вариант с тремя знакогенераторами (Штатный - Латиница - Кириллица)
photo_2024-03-21_10-55-15.jpg
photo_2024-03-21_10-55-15.jpg [ 89.02 KiB | Viewed 2193 times ]
File comment: Тестирование переключателя знакогенераторов
TEST-E4E5.RKR.zip [244 Bytes]
Downloaded 60 times
21 Mar 2024 09:09
Profile WWW
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
Попытался написать предельно быстрый алгоритм горизонитальной прокрутки области 64x25.
Примерно, 821 такт на прокрутку пятидесяти символов - около 26272 тактов на экран.


Attachments:
File comment: Исходный текст
SUPERPAN.ASM.zip [491 Bytes]
Downloaded 50 times
File comment: Запускаемый пример
SUPERPAN.RKR.zip [297 Bytes]
Downloaded 54 times


Last edited by Alikberov on 01 Apr 2024 10:57, edited 2 times in total.

30 Mar 2024 13:29
Profile WWW
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
Написал процедуру прокрутки экрана с предельной производительностью.


Attachments:
File comment: Исходный текст
SUPERSCROLLAR.ASM.zip [534 Bytes]
Downloaded 63 times
File comment: Исполняемый файл
SUPERSCROLLAR.RKR.zip [320 Bytes]
Downloaded 54 times
31 Mar 2024 04:41
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23393
Location: Silicon Valley
Reply with quote
Программный скролл? Через ВГ75+ВТ57 аппаратно же можно скроллить

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


31 Mar 2024 05:54
Profile WWW
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
Shaos wrote:
Программный скролл? Через ВГ75+ВТ57 аппаратно же можно скроллить
Ну, так это да.
На программном уровне просто было любопытно посмотреть, на сколько сложно прокручивать экран без трюков с ВТ57/ВГ75 - только стек.
Получается, порядка 13 тактов на знакоместо + 10 тактов на строку: 13x64+10=842 такта на строку - 21050 тактов на 25 строк.
То есть, за секунду - 84 fps прокрутки. :roll:


31 Mar 2024 06:19
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23393
Location: Silicon Valley
Reply with quote
Это быстро получается :)

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


31 Mar 2024 12:16
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23393
Location: Silicon Valley
Reply with quote
Alikberov wrote:
Написал процедуру прокрутки экрана с предельной производительностью.

Ты SUPERPAN забыл сюда прицепить :lol:
(я его чегой-то не заметил)
Чем он от SUPERSCROLLAR отличается?

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Apr 2024 09:22
Profile WWW
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
Shaos wrote:
Ты SUPERPAN забыл сюда прицепить :lol:
http://www.nedopc.org/forum/viewtopic.php?f=93&t=10577&view=unread#p173116
Shaos wrote:
Чем он от SUPERSCROLLAR отличается?
Только направлением прокрутки. :mrgreen:

Можно, конечно, реверс вверх/вниз реализовать - уже нашёл способ (мысленно), но не писал ещё - нет практической необходимости.
А вот реверс влево/вправо - нельзя в один код описать. И вправо скорость несколько меньше - +1 такт на каждую пару знакомест: +40 тактов на строку.

Например, вот код, который читает данные из ROM-Диска по схеме Апогея 512 Кб и более - до 8 Мб.
Можно бегущую строку / мультик так прошить.


Attachments:
File comment: Бесконечный панорамный фильм (до 8 Мб)
PANOFILM.RKR.zip [352 Bytes]
Downloaded 39 times
03 Apr 2024 03:46
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23393
Location: Silicon Valley
Reply with quote
Это хорошая идея :mrgreen:

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


03 Apr 2024 08:50
Profile WWW
Junior

Joined: 15 Jun 2009 00:02
Posts: 5
Location: 77.232.145.63
Reply with quote
Post Re:
Lavr wrote:
vinxru wrote:
В контроллер записывается число на единицу меньше,
т.е. реально 78 столбцов (4Eh).

Да вот я и туплю на этот повод... в контроллере ПДП ВТ57 - там явно сказано,
"число циклов" - 1 (при настройке).

А вот у ВГ75 я такого что-то не помню... и у меня что-то расчет для "РК-86" не сходится:
сдвиговый регистр тактируется частотой 8МГц ~ 125 нс.

Размер стандартной строки 64 мкс. Делим: 64 мкс на 0.125 мкс = 512 точек в строке.
Как я говорил, в "РК-86" настраивается строчный синхроимпульс,
а не строчный гасящий, и ССИ, согласно настройке, - выбран равным
времени отображения восьми знаков.

Предположим, что знаков в строке 78, как мы и насчитали...
Вместе с ССИ в полной строке 78 + 8 = 86 символов.

Считаем число точек на 1 знакоместо: 512 точек / 86 знакомест = 5,95 точек -
округляем - это 6 точек.

Теперь проверяем... если в строке 78 знакомест, т.е. 86 знакомест вместе с
ССИ, то 86 знакомест * 6 точек = 516 точек в полной строке.
А если в строке 77 знакомест, т.е. 85 знакомест вместе с
ССИ, то 85 знакомест * 6 точек = 510 точек в полной строке.

Но при 8МГц в строке 512 точек...
В принципе и 510 точек в полной строке и 516 точек в полной строке в
параметры телевизионной развёртки влезут...
Но что из них верно?

В строке точно 78 знакомест. Я смотрел исходники игр для Апогея.


29 Jun 2024 15:41
Profile
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
Lavr wrote:

Жаль, что дальше теории тема не сдвинулась.

Вот, сделал набросок одного из возможных вариантов синхронизации ВГ75 от внешнего источника композитного видео.
Из всех доработок:
  1. Отрезаем вывод 7 ВГ75 к выводу 4 ЛП5 и оба выводим к дополнительному ТМ2
  2. Отрезаем выводы 2 и 3 у ИЕ4 от массы и подключаем к дополнительному ТМ2
Логика работы схемы следующая:
  1. Первая половина ТМ2 включена в режим инвертирования сигнала «BURST» от LM1881 и пока не пришёл ССИ как лог. "0", с вывода 6 выдаётся лог. "0" на вывод 4 элемента ЛП5 D5.2
  2. В конце графической линии растра ВГ75 вырабатывает сигнал HRTC и стробирует загрузку "1" с первой половины ТМ2 во вторую половину ТМ2
  3. Загруженная лог. "1" с вывода 9 поступает на выводы 2 и 3 ИЕ4, переводя его в состояние сброса, чем прерывается поступление частоты сигналом CCLK на ВГ75 в ожидании синхроимпульса от внешнего источника
  4. Когда LM1881 обнаруживает синхроимпульс и вырабатывает лог. "0" на «BURST», с вывода 6 ТМ2 на вывод 4 ЛП5 D5.2 поступает лог. "1". Также лог. "0" на «BURST» сбрасывает вторую половину ТМ2 и на выводе 9 устанавливается лог. "0", разращая работу счётчика ИЕ4 в штатном режиме
  5. Так как ВГ75 всё это время находилась без тактирования по CCLK, теперь начинается отсчёт длительности сигнала HRTC уже с началом ССИ от внешнего источника, тем самым позволяя программисту использовать параметр «ZZZZ» как величину определения левого "бордюра"

Главное условие корректной работы: HRTC должен приходить раньше сигнала ССИ внешнего источника.
Решение: Либо чуть повысить частоту тактирования ИЕ4, либо в коде инициализации ВГ75 константу 93h заменить на 92h.

P.S.: Вариант схемы очень черновой и нигде не проверялся.
Также, в схеме нет (пока что) синхронизации по кадрам: Картинка будет прыгать.


Attachments:
File comment: Графики принципа работы
VG75_TM2_LM1881-SIGNALS.png
VG75_TM2_LM1881-SIGNALS.png [ 42.05 KiB | Viewed 179 times ]
File comment: Черновой набросок
VG75_TM2_LM1881.png
VG75_TM2_LM1881.png [ 88.3 KiB | Viewed 182 times ]
25 Sep 2024 14:12
Profile WWW
Doomed
User avatar

Joined: 14 Oct 2019 18:10
Posts: 345
Location: Tashkent
Reply with quote
В очередной раз перечитывая документацию к ИМС i8275/ВГ75, задумался над примечанием:
Quote:
Note: If a Stop DMA character is not the last character in a burst or row, DMA is not stopped until after the next character is read. In this situation, a dummy character must be placed in memory after the Stop DMA character.
Тем самым, если в конце строки разместить код F1 или F3 в конце кадра, любой следующий символ будет прочитан, но проигнорирован самой ВГ75.
А это - целых 256 комбинаций кода!

Опционально можно выбирать хоть любой из 256-ти знакогенераторов в каждой строке или устанавливать палитру.
В общем, дело вкуса и фантазии!

Осталось лишь разработать схемку...
  • Вентиль 5-И отлавливает ситуацию с кодами F0-FF
  • Триггер ТМ2 защёлкивает флаг "управляющего кода"
  • Регистр ИР27 запоминает следующий Dummy-байт
В общем, всё просто!

Тем самым, подобно как и в ПК Atari-XE, можно под каждую строку изменять и режим интерпретации символов (пропускать код через знакогенератор, непосредственно рассматривать его как три четырёхцветных CGA-пикселя или два восьмицветных пикселя и т.п.).


Attachments:
File comment: Черновой набросок схемы
i8275-Dummy.png
i8275-Dummy.png [ 17.57 KiB | Viewed 161 times ]
04 Oct 2024 16:01
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 150 posts ]  Go to page Previous  1 ... 6, 7, 8, 9, 10

Who is online

Users browsing this forum: No registered users and 6 guests


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.