Улучшение видео возможностей РК86

Перейти вниз

Улучшение видео возможностей РК86

Сообщение  barsik в Пт Сен 01 2017, 13:06

Первое, что приходит в голову, когда речь об улучшениях видео возможностей РК86, это использовать хотя-бы те возможности, что изначально заложены в БИС ВГ75. В частности атрибут ReVerseVideo (RVV), который позволяет инвертировать знакоместо (причём схема проста: VIDEO пропускают через вентиль из 555 ЛП5 на второй вход которого заводят атрибут). Ну и лобовое улучшение фонта до матрицы 8*8, что выглядит намного красивее, чем изначальный фонт 6*8.

Схема для улучшения фонта одновременно повышает и быстродействие, т.к кварц меняется с 16 на 20 МГЦ. Но если хреновая реакция и трудно играть в игры на повышенной скорости, то можно этого избежать, если для тактирования ВГ75 собрать отдельный генератор на 20 МГЦ, оставив такт ГФ24 равным исходным 16 МГЦ. Кроме замены такта на входе счётчика надо выкусить 155ИЕ4 и впаять 155ИЕ5, что изменит коэффициент деления с 6 на 8 и поставить диоды согласно схеме.

Схема ReVerseVideo - типовая, хотя кажется, это не та же схема использования RVV из журнала "Радиолюбитель" 04.1992 (кажется добавлен триггер, чтобы сдвинуть позицию). Обратите внимание, что в схеме Reverse Video красными крестиками обозначены переделки, что делаются при фонте 8*8. Если Вы делаете Reverse Video до переделки на фонт 8*8 (т.е со старым фонтом 6*8 ), то делать разрезы указанные красными крестами не надо.

Насчёт инверсии знакомест за счёт атрибута Reverse Video, - не знаю использует ли кто-нибудь аппаратную инверсию в программах, а вот лучший фонт полезен любому.

Оказалось, что инверсия атрибутом RVV неудобна, из-за того, что ROM-BIOS РК это не поддерживает, все последующие экранные позиции сдвигаются, вывод происходит не там и курсор мигает в другом месте. Поэтому для инверсии символов я использую альтернативный фонт, в котором вместо русских букв прошиты латинские, но с инверсией знакоместа, а вместо символов "якобы точечной" графики (коды 0...1F) прошиты символы для рисования рамок из настоящей псевдографики (причём есть как инверсные так и неинверсные рамки).

Конечно, если речь о улучшении видео возможностей, надо думать и о цвете. Для РК86 известна всего одна реализация цвета, описанная в той же статье "Цветные РК86" в журнале "Радиолюбитель" 04.1992.  В этой конструкции на цвет истрачены все 4 атрибута - инверсия, яркость и оба GPA (General Purpose Attributes).

Что очень печально, т.к использование хотя бы одного атрибута для целей коммутации фонта позволяет обойти ограничение в семибитовости выводимых символов, т.е иметь на экране одновременно более 128 разных букв. Т.к атрибут может менять управляющий сигнал прямо в строке, то уже один атрибут позволяет одновременно отображать на экране 256 символов, т.е иметь КОИ-8 вместо КОИ-7.

А 4 атрибута позволяют иметь 16*128=2048 разных символов, например тайлов спрайтов фигурок в разных фазах. Если использовать спрайты размером 2*2 знакоместа, т.е когда каждый спрайт состоит из 4-х тайлов и хранить для каждой фигурки 16 фаз (чего более чем достаточно для мультипликации), то один спрайт занимает 16*4=64 кода в фонте. Что теоретически позволяет иметь 2048:64=32 спрайта. Т.к один символ занимает в ПЗУ фонта 8 байт, то весь фонт в 2048 символов занимает 2048*8= 16 кб, т.е половинку ПЗУ 27256.

Таким образом, получается, что мы можем иметь или цвет и старый убогий фонт в 128 символов или множество символов, в том числе КОИ-8 и спрайты для игр, но без цвета. На мой взгляд монохромные игры с красивой графикой лучше, чем цветные, но с фигурками состоящими из букв.

Можно попробовать использовать 3 атрибута на цвет и 1 атрибут на коммутацию фонта. Тогда 2 бита кодируют цвет, 1 бит определяет  задаётся цвет для символа или для фона, и последний бит выбирает текущую половину знакогенератора. Для системных программ это вполне удобно, т.к там число цветов не особо важно, т.к цвет в системном ПО служит лишь для выделения участков экрана. А как для игр?  Общее число цветов - 5 (т.к в зависимости от RVV, или фон или символ - всегда чёрный). Всего 256 символов. Используя спрайты 2*2 знакоместа и всего 8 фаз для каждого спрайта, на спрайт тратится 8*4=32 знакоместа. Итого в фонте умещается всего 8 спрайтов. Если использовать 7 спрайтов, оставив 32 символа для формирования пейзажа, то этого достаточно для многих игр.

Есть ещё одна возможность изменить видео возможности РК для игр. Вспомним, что в первой микро ЭВМ Apple-II для первых игр использовался цветной режим с разрежением 40*48. Разрешение низкое, зато каждый из 40*48= 1920-ти квадратиков на экране мог быть любого из 16-ти цветов. И 1977 году этого всем хватало, пользователи визжали от восторга, играя в цветной тенис и подобные игры. Например, такой видео режим вполне пригоден для тетриса. Смысл этого абзаца в том, что для игр пригоден режим низкого разрешения экрана, особенно если при этом число цветов 16 или более.

Собственно говоря, РК86 изначально имеет псевдографический режим 128*60. Это получается перепрограммированием ВГ75 на высоту знакоместа в 8 линий растра вместо 10-ти, отчего видимыми становятся уже 30 строк вместо 25-ти, и использованием "якобы псевдографики" с кодами 0...1F. Называть графический режим РК86 псевдографикой неправильно. Псевдографика в текстовом адаптере IBM PC, а это не псевдографика. Правильно такой называть не псевдографикой, а матрично-символьной графикой. Чтобы далее увеличить разрешение нужен альтернативный фонт. Разумны режимы с фонтом высотой в 6 или в 4 точки.

ВГ75 позволяет программно менять как размер знакоместа, так и формат экрана. К сожалению, ради экономии одного TTL-корпуса (ценой в 40 копеек), в РК86 сигналы ССИ и горизонтальный бордюр формируются программно. Замечу, что насчёт того, что вертикальный бордюр - программный, возражать трудно. Т.к это сделано авторами сознательно из-за 565 РУ3. Ведь если бы использовали ВГ75 по РТМ, когда гашение по кадрам аппаратное, то между кадрами регенерация 565 РУ5 прерывалась бы на время более, чем 2 МСЕК и динамическое ОЗУ не могло бы хранить данные. Поэтому отображение строк идёт без перерывов, а бордюр и гашение луча формируются программно за счёт вывода чёрных знакомест. Но вот формирование горизонтального бордюра также программно, как и вертикального, это ошибка разработчиков ради пустяшной экономии.

Из-за этого в РК86 никак не изменить число знакомест на строке, оно всегда 78 (но видимы только 64). Можно менять только высоту знакоместа, а тем самым число строк (т.к общее число видимых линий растра при частоте кадров 50 ГЦ неизменно, порядка 260 из общих 312). К сожалению, базовый фонт РК86 позволяет использование для вывода графики только знакоместа высотой в 8 или 4 точки. Что даёт базовый графический режим 128*62 (или 128*64) и теоретически для современных телевизоров возможен режим 128*51, который имеет частоту строк в 60 ГЦ (51 видимая строка высотой 4 линии). Первый режим широко используется в играх, а режим 128*51 не был доступен в 80-тые (т.к советские телевизоры не синхронизировались на 60 ГЦ), но стал доступен сейчас.

Улучшить графические возможности для игр позволяет альтернативный фонт. Не важно программно включаемый или тумблером. Наилучшим по разрешению можно считать нестандартный по частоте кадров режим 192*103 с высотой знакоместа в 4 линии. Этот режим получается из режима с 51 строкой за счёт деления знакоместа 6*4 по вертикали вдвое и по горизонтали втрое.

Но я предпочитаю (т.к у меня фонт шириной в 8 точек) режим получаемый за счёт альтернативного фонта высотой в 6 линий. Это 43 видимых строки высотой в 6 линий растра при стандартной частоте кадров. Такой режим при матричной графике с матрицей 2*3 пикселя в знакоместе обеспечивает разрешение 128*129. Такой режим есть в Партнёре. Псевдографика занимает 64 символа в ПЗУ знакогенератора. Остальные 64 символа позволяют иметь 32 буквы в матрице 8*12. Каждая буква состоит из двух поставленных одно над другим знакомест. Для этого режима у меня есть текстовый драйвер дающий 21 символ в строке.

Ещё один удобный режим можно получить при использовании знакоместа высотой в 9 линий и матричной графики также 2*3 пикселя. Тогда 29 отображемых строк дают экранное разрешение в 128*87. В этом режиме пиксель более квадратный, а главное, - остаётся возможность вывода 64 символов высотой в 9 линий. Вспомним, что в Apple-II, тоже было всего 64 символа, но это не помешало его массовому выпуску. Для использования такого режима нужно обеспечить неразрывность знакомест по вертикали (см. следующий пост).

Т.о совершенно ясно, что РК86 совершенно необходим альтернативный фонт. Этого не ввели официально лишь потому, что изготовители плат новоделов тупо повторяли лишь базовую конструкцию. Я не понимаю тех современных авторов, кто пишет чисто текстовые программы для РК сейчас. Ведь без всякого усложнения программы, просто применив альтернативный фонт со спрайтами игра становится красивой.

Виноваты в этом, конечно, авторы эмуляторов, т.к не поддерживают коммутацию фонтов. Оттого и нет красивых программ для РК86. Похоже, что альтернативный фонт был только у меня.


Последний раз редактировалось: barsik (Вт Апр 24 2018, 18:01), всего редактировалось 4 раз(а)
avatar
barsik
новичёк

Сообщения : 87
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

Избавление РК86 от межстрочных разрывов

Сообщение  barsik в Вт Апр 24 2018, 15:25

Кто нибудь может ответить на вопрос каким образом в РК86 осуществляется гашение луча во время вывода 9-той и 10-той линии растра в знакоместе?

Логично делать гашение 9-той и 10-той линий знакоместа запрещая сигналом LC3 ПЗУ фонта, отчего его выходы в третьем состоянии, что регистр ИР13, благодаря резисторам привязки, считывает как единицы, что и обеспечивает гашение луча. Однако в схеме РК ПЗУ фонта запрещается только сигналом VSP, который разрешает выборку во время вывода экрана в том числе и на 9-той и 10-той линиях. Значит гашение, т.е две чёрные линии растра разделяющие строки обеспечивает какой-то другой механизм.

Это мне хотелось узнать, т.к возникла идея как за счёт несложной доработки выводить сплошные рамочки псевдографикой без вертикальных разрывов при 25-ти строках, а также избавиться от разрывов в инверсных окнах. При 30-ти видимых строках межстрочных разрывов нет, а вот в основном режиме при 25-ти строках вертикальные разрывы присутствуют.

Однако с помощью 555 ЛЛ1 и перезашивки фонта от межстрочных разрывов легко избавиться. Для этого достаточно сигналом LC3 сигналы LC0, LC1, LC2 на входах ПЗУ сделать равными единице, что приведёт к выборке из фонта графики 8-й линии символа. Сигнал LC3 как раз и становится равным 1 при выводе 9-той и 10-той линий знакоместа.

Идея заимствована из VGA-адаптера. Там встроенный фонт имеет матрицу 8*14 (или 8*16), но можно включить режим когда фонт выводится в матрице 9*14 (или 9*16), что достигается тем, что девятый горизонтальный пиксель знакоместа всегда повторяет 8-мой. Это приводит к тому, что горизонтальные линии начерченные псевдографикой выводятся без разрывов.

Здесь тоже самое, только по вертикали. Изменив фонт так, чтобы во всех буквенно-цифровых символах фонта 8-я линия была пустой, 9-тая и 10-тая линии повторяющие 8-ю - также будут пустыми. Благодаря этому в символах псевдографики вертикальные линии получатся сплошными.

_________________
***
avatar
barsik
новичёк

Сообщения : 87
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

Знакоместо 9*8

Сообщение  barsik в Сб Май 12 2018, 21:51

Описанная в предыдущем посте идея по расширению графики в знакоместе по вертикали может быть с успехом применена и по горизонтали.

В базовом РК знакоместо имеет размер 6*10 (а фонт 6*8 ). В моём личном РК путём замены счётчика ИЕ4 на ИЕ5 знакоместо увеличено до размера 8*8 и фонт значительно более красивый. Но для альтернативных граф.режимов 192*102 (60 ГЦ) или 192*90 (50 ГЦ), где знакоместо по горизонтали разбивается на три пикселя, ширина знакоместа в 8 точек не подходит, т.к 8 хреново делится на 3. Потому при моём красивом фонте 8*8 знакоместо по горизонтали можно разбить только на 2 пикселя, отчего максимальное разрешение по горизонтали ограничено всего в 128 точек.

А для более качественной графики выгоднее высокое разрешение именно по горизонтали (в частности, это даёт бОльшее число символов в строке и более разборчивый шрифт). Чтобы при знакогенераторе с фонтом 8*8 расширить знакоместо до 9 точек можно использовать биты из 8-го столбца знакоместа, т.е выводить колонку 9 в знакоместе такой же как 8-ю колонку. Это сохранит возможность сплошных горизонтальных линий, т.е полноценную псевдографику. Такой трюк применялся и в промышленных текстовых адаптерах.

При этом также несколько увеличивается междубуквенный интервал, т.е фонт занимает поле 7*8 и две точки разделяют символы (что кстати, делает фонт более разборчивым). Реализуется это увеличением частоты кварца до 20:8*9= 22.5 МГЦ, что при использовании такого кварца для ГФ24 увеличивает такт КР580 до 2.5 МГЦ. И требуется добавить ТМ2 и ЛА3, чтобы сделать равным 9 коэфф-т деления счётчика в формирователе такта знакомест (и защёлкивать 9-тый бит). Как известно, быстродействие РК при повышении такта растёт больше, чем простое соотношение частот, т.к при большем такте ПДП быстрее закачивает строку в ВГ75, отнимая у CPU уже не 26% времени, а меньше.

Так соотношение частот 2.5 МГЦ и 1.77 МГЦ равно ~1.41. Это значит, что ПДП будет занимать шину не 26% времени, а в 1.41 раза меньше, т.е всего 18.4% времени. Тогда процессор 81.6% времени будет прогонять программу на такте 2.5 МГЦ, что в итоге даст эффектифный (реальный) такт 2.5*0.814= 2.035 МГЦ и чуть превысит быстродействие Специалиста (у которого такт ровно 2 МГЦ). Что означает ускорение в 1.55 раза относительно реальной скорости базового РК в 1.31 МГЦ.

Естественно, цель расширения знакоместа до 9 пикселей - не ускорение CPU, а получение режима графики 192*90, основное применение которого это игры, где скорость д.быть равна базовой. Потому разумно ввести отдельный генератор на 22.5 МГЦ на отдельной 531 ЛН1 для ВГ75, оставив такт для ВТ57 и КР580 равным как и в базовом РК 1.77 МГЦ, т.е оставив стандартную скорость прогона программ (что необходимо для использования РК-игр тем, у кого пониженная реакция).

При этом разумно ввести кнопку ТУРБО, для чего придётся добавить мультиплексор и однобитовый стробирующий регистр, чтобы переключение Турбо--Нетурбо происходило без сбоев. Таким образом общее число дополнительных ИМС достигает четырёх (КП11, две ТМ2 и ЛА3).

_________________
***
avatar
barsik
новичёк

Сообщения : 87
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

выбор метода коммутации фонтов

Сообщение  barsik в Ср Май 23 2018, 18:55

Как уже упомянуто ранее, введение дополнительных фонтов это одновременно и самое простое и самое полезное усовершенствование схемотехники РК86. Дополнительные фонты полезны как для системных программ (доп.фонты дают окна, красивые рамки и маркировку строк инверсией), так и для игр, повышая разрешение псевдографики. Понятно, что глупо переключать фонты тумблером. Но стандарта на управляющие адреса и биты до сих пор никто не опубликовал.

Конечно лучше всего переключать фонты атрибутами ВГ75. Но они уже заняты на цвет. Не думаю, что стОит губить цвет. Можно, конечно, попробовать как-то совместить коммутацию фонтов с цветом, для чего придётся "нагромоздить", но проще ввести доп.фонты просто кусочками проволоки.

В РК-МАКСИ для управления фонтом использовался бит PC3 клавиатуры. Это бит для светодиода РУС/ЛАТ. У них этот бит не только зажигает светодиод, но и включает мелкие русские буквы вместо латиницы. Это вполне грамотно, т.к и индикация РУС-ЛАТ остаётся и биты не тратятся.

Как при MS-7007, так и при стандартной РК матрице два бита PC1 и PC2 не используются. Два бита позволяют выбрать 4 фонта. Таким образом, если фонтов всего 4 (прошитых в две РФ2), можно сохранить светодиод РУС/ЛАТ подключенный на PC3.

Меня лично светодиод РУС/ЛАТ не волнует, т.к удобнее индицировать регистр клавиатуры формой курсора и высотой тона подзвучки нажатий. Кроме того, в РК есть возможность при включённом русском регистре выводить рамку по краю экрана (как бы бордюр, в MSDOS-русификаторах индикация русского регистра цветом бордюра была очень удобна). На светодиод расположенный на клавиатуре при наборе текста никто не смотрит, потому у меня не было вообще никогда светодиода РУС/ЛАТ.

В 90-тые годы я не догадался использовать PC1...PC2 и использовал для переключения фонтов биты с запасного ППА D14. Тогда я использовал биты порта A (и так сделано в моём эмуляторе РК на ОРИОНЕ), но теперь считаю, что разумнее использовать биты порта C, т.к это не конфликтует с ROM-диском.

Эмуляторы EMU и EMU80 поддерживают ROM-диск, читаемый через ППА D14. Но вот коммутацию фонтов ни один эмулятор не поддерживает. Пока, чтобы отладить программу с альтернативным фонтом в эмуляторе приходится его ставить вместо базового фонта (при этом естественно пропадают базовые возможности вывода текста, отчего иногда запускать программу приходится вслепую).

В принципе, не важно как конкретно коммутируется фонт, т.к можно ввести дополнительную стандартную подпрограмму ROM-BIOS (F842), которой в регистре А будет передаваться номер фонта. А уж подпрограмма ПЗУ сама знает как в данном конкретном компьютере переключается фонт. Например, не получится переключать фонт с помощью битов порта C, если на РК используется клавиатура с иной матрицей (например 6*12 или 8*16), отчего биты PC1...PC3 заняты.

Но для тех, кто использует базовую РК-клавиатуру с матрицей 8*8 + 3 спец.клавиши невозможно придумать более простой и разумный способ коммутации фонтов, чем PC1, PC2 и, при отказе от светодиода РУС/ЛАТ, и PC3, что даёт с затратой всего в три кусочка проволоки 8 фонтов.

_________________
***
avatar
barsik
новичёк

Сообщения : 87
Дата регистрации : 2016-11-10
Откуда : 600 км от Москвы

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Улучшение видео возможностей РК86

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения