Как сделать из РК86 компьютер c параметрами ZX80 и цветом
Посмотрел схему загрузки фонта. Ничего неожиданного, хотя я бы сделал немного иначе. Но в общем-то примерно так я это и представлял. Вот выдержка из темы "Что можно выжать из ВГ75", где freedy использует конструкцию на ВГ75 с загрузкой фонтов.
Цитата:
Сообщение от barsik
... знал одного фаната, который пытался доработать РК, введя загрузку фонта (чтобы игры РК стали красивыми). Фонт для ВГ75 хранится в ОЗУ с раздельными входом и выходом. Входы ОЗУ подключены к ШД. А адреса ОЗУ с помощью трёх КП11 при обращениях КР580 переключаются от ВГ75 на ША. Благодаря чему и происходит загрузка фонта. Думаю конструкция могла бы работать.
. . . .
Не вижу, что в таком варианте помешает загрузить фонт (кроме нагрузочной способности шины РК). ОЗУ 1 кб имеет 10 адресных входов, три КП11 коммутируют 12 цепей. Входы ОЗУ на шине данных. Что ещё надо? Ну, для совершенства можно предусмотреть гашение, чтобы не было блёсток по экрану, в момент загрузки фонта.
Этим хочу сказать, что сама концепция загрузки фонта и её достоинства мне известны с 1988 года. Реализовывать её не стал, не было нужды. Фонт 8*10 использовал (правда не в 80-е, а уже в середине 90-х). Фонт у меня был не обычный, а извращенный (2 последних линии - во 2-м килобайте). Это для того, чтобы можно было использовать и фонт 8*8 и 8*10.
Сама Ваша схема отличная и вполне грамотная. Однако боюсь, что не поддержав её хотя бы небольшим числом игр, трудно рассчитывать на её популярность, особенно если нет печатной платы. А желающих повторять конструкции чисто из спортивного интереса, боюсь что среди владельцев РК86 уже осталось мало (тех кто любит ручной монтаж проводками на слепыше).
Загрузка фонтов, позволяет иметь полноценную графику, если дополнить её другой идеей. позволяющей аппаратно или программно выбирать фонт для каждой строки. Режим полноценной графики интересен, но практически бесполезен, т.к реально может быть использован только для текстообработки, а тут настоящий текстовый режим намного быстрее. Игры в полноценной графике на РК86 будут тормознуты.Такой конструкцией я, возможно, займусь позже. Для начала проще ввести спрайтовую графику для игр на принципе Денди.
Использование спрайтов из ПЗУ, как в Денди, - не тормозит, здесь загрузка фонтов актуальна. А если есть и цвет из фонта, т.е аппаратная раскраска спрайтов, то для создания игр это удобнее, чем писать для цветной графики АПОГЕЯ. А удобство программиста важно.
А по трудозатратам. Что проще, просто перезашить ПЗУ или спаять отдельную платку на 8-ми корпусах, соединяемую ворохом проводов с платой РК?
В предлагаемой конструкции доработки до игр со спрайтами за счёт большого ПЗУ фонта удобно использовать не 27256, а 62256 с батарейкой. Вытащил, вставил в панельку загрузчика, загрузил код и опять воткнул в РК86. При старте игры, загружать фонт не надо и во многих играх можно использовать одни и те же спрайты. Это как альтернатива загружаемому фонту для ленивых. Хотя конечно, при разработке программ Ваша платка была бы полезна программистам игр и рисовальщикам спрайтов.
Планирую попробовать движение спрайтов из фонта в эмуляторе B2M, там есть поддержка коммутации фонтов и можно иметь много фонтов. Проблема только, где брать спрайты. Также думаю, что смогу сделать нормальную графику в шахматах РК86.
Собираюсь спаять Вашу (или чуть изменённую) схему загрузки фонта, но позже. Пока надо сделать более актуальные доаботки.
Теперь, что касается оцвечивания не игр, а текстовых программ, где не требуется, чтобы каждая буква была своим цветом. Истратив всего 8 фонтов по 1 кб, в варианте с двойным ПЗУ (фонт + цвет) и три атрибутных сигнала для их выбора, можно иметь 8 сочетаний цветов, что гораздо лучше, чем просто 8 цветов. Хотя, как и в АПОГЕЕ, при работе с текстом в пределах полной строки возможны лишь 3 смены цвета, и т.к в каждом из этих 8-ми фонтов все символы одного цвета, то смена цветов происходит не кодом символов, а только атрибутами ВГ75 переключающими фонт.
Если соответственно выбрать атрибуты и коды цветов, то схема будет совместимой с АПОГЕЕМ, одновременно давая быстрые цветные спрайты. Но не вижу смысла стремиться к совместимости по цвету с АПОГЕЕМ, т.к во-первых он несовместим с РК86, а во-вторых оцвеченные для АПОГЕЯ игры не нужны - с такой доработкой можно использовать монохромные игры РК в цвете, имея соответствующий цветной фонт.
Важно то, что можно использовать старые РК-игры в цвете без их трудоёмкой переделки, лишь добавив к ним стартёр включающий цветной фонт, специально предназначенный для этой игры. Или оцвечивание некоторых игр требует намного более простой адаптации. В АПОГЕЕ для раскраски надо менять алгоритм, т.е код игры, а здесь достаточно лишь выбрать и включить фонт с односимвольными цветными спрайтами, настроенными для конкретной игры, и лишь редко требуется заменять код символа-спрайта на другой (это когда в качестве спрайта используются буквы и они же используются для вывода текста).
PS: Чтобы было ясно насколько неудобен для программиста цвет АПОГЕЯ вспомните, что каждая атрибутная команда управляет только одним битом из R.G.B. Это же не байт записываемый в ОЗУ цвета, как в ОРИОНЕ. Поэтому чтобы установить неосновной цвет надо записать в строку подряд несколько атрибутов, а в строке Вы можете записать их всего 3. Т.е число цветов в строке ограничено. Ничего такого нет при цвете встроенном в фонт.
; ----------------------
Используя раскраску в варианте с одним ПЗУ фонта, но когда чётные биты в фонте несут информацию о графике, а нечётные - о цвете, из РК86 при минимальной пайке и расходе деталей (только формирователь R.G.B. и замена ПЗУ фонта на 27256) получается совершенно новый цветной текстовый режим с текстовым экраном 32*24, как в ZX80, только с цветом и быстрыми цветными спрайтами для игр. Причем разрешение цвета лучше, чем в ZX-Spectrum и в ОРИОНЕ - два цвета в пределах 4 пикселей и числе цветов 8. Тогда каждый "символ" в ПЗУ фонта имеет ширину 4 пикселя и для формирования символа на экране надо вывести рядом два знакоместа.
Это ограничивает общее число экранных символов до 64 (число символов в одном фонте 128). Но это не фатально, т.к переключая фонты 4-мя атрибутами ВГ75, мы можем иметь даже 256 КОИ-8 символов. Хотя трудно сочетать символы из разных фонтов в одной строке, т.к число атрибутов в строке ограничено.
Если изменить схему видеовыхода, то цвет можно сделать по принципу CGA, когда два соседних бита в фонте задают цвет пикселя (один из 4-х цветов). Это на пару корпусов больше, но зато можно использовать спрайты от PC XT и Amstrad CPC и каждая точка в спрайте может быть своего цвета. Тогда в качестве редактора спрайтов можно использовать графический редактор от PC XT для CGA.
Такой режим удобен не только для для игр, особенно если грамотно написать драйвер текста для этого режима. Выгода в том, что буквы более крупные и цветные.
Вложений: 5
Давайте сделаем игры РК86 красивыми
А не могли бы Вы сделать игру чуть красивее, используя не изображения стандартных символов, а специально нарисованные символы. В текстовых ЭВМ фигурки изображаемые символами, по сути являются спрайтами. И если использовать фонт, в котором вместо символов прошиты стилизованные фигурки или элементы пейзажа, то будет красивее. Если Вы почитаете последние сообшения в теме http://zx-pk.ru/threads/27125-moduln...6rk/page8.html, то Вы обнаружите там моё предложение впаять на место панельки для фонта РФ2 панельку на 28 ног, чтобы ставить туда большое ПЗУ типа 27256 (или 62256 с подпаянной батарейкой).
Конечно это следовало сделать 30 лет назад, чтобы дать РК86 шанс иметь приличные игры. Например, в текстовом ГДР-овском компьютере AC1 (1984) ввели второй фонт, чтобы использовать в играх. "Лучше поздно, чем никогда", давайте сделаем расширение фонта. Кроме того, для РК86 Alex_LG разработал несложную схему загрузки фонта, но её никто не станет делать, пока нет соответствующего ПО, использующего полноценную графику. Дайте этой доработке шанс.
Хотя для начала проще выкусить панельку на 24 ноги и впаять панельку на 28 ног. Я так уже множество раз делал на ОРИОНЕ, заменяя его ПЗУ РФ2 на 27256. Выводы 1,2 и 27,28 отгибаем в стороны, на выводы надеваем прокладку (от разобранных разъёмов СНП), это пластмассовая пластинка толщиной 0.5 мм с дырками с шагом 2.5 мм, что поднимает панельку над платой, отчего отогнутые в сторону выводы оказываются над платой. Я сам пока использую такой, более дешёвый вариант: на РФ2 напаивается панелька, уже в которую вставляется вторая РФ2, давая тем самым 4 фонта. В качестве чип селектов используется прямой и инверсный сигнал PA0 ППА D14. При этом требуется инвертор (он есть на плате).
Расход в несколько кусочков проволоки и одну панельку окупится миллион раз. Не только резким улучшением качества игр. Нормальные шрифты для текстообработки (маленькие и большие русские буквы), не говоря уже о возможностях иметь рамки в программах и инверсные окна, превращают РК86 в компьютер для игр и текстоообработки лучший, чем СПЕЦИАЛИСТ, а при добавке цвета и ОРИОН. Т.е простейшее расширение фонта, делает РК86 по играм близким к денди, а по текстообработке к Роботрону. И всё это достигается работой кусачками и паяльником в течение получаса. Грех это не сделать. А, если не делать, т.е не иметь "движения" на платформе РК, то зачем вообще иметь РК86? Только ради ностальгии достаточно и эмулятора.
Я очень рад, что для РК86 стали появляться новые игры. На Западе для рэтро компьютеров этим занялись давно и даже для ZX80 с ОЗУ в 1 кб выпустили до сотни игр, причём, что нагло, продают их за деньги, т.к есть эмуляторы для всех платформ смартфонов и число потребителей игр для ZX80 вновь стало большим. Если ввести фазы для спрайтов, то движения фигурок будут намного реалистичнее, даже при использовании спрайтов с размером в символ (особенно, если у Вас заменён счётчик ИЕ4 на ИЕ5, отчего фонт стал 8*8 вместо некрасивого 6*8), А используя спрайты 2*2, 2*3 или 3*3, игра вообще станет графической.
В эмуляторе B2M легко получить переключаемые 32 фонта и такой конфиг-файл я имею. Так что разработчик уже сейчас может отлаживать игру с графическими спрайтами, причём с объемом спрайтов до 8-ми фонтов. Не 16 фонтов из-за того, что бит RVV в этом эмуляторе занят на вариант инверсии (ж.Радиолюбитель 04.1992). Этот бит и должен переключать инверсию, но не так неудобно для программиста, как это сделано в АПОГЕЕ, а через фонт.
Однако, значительно легче и на порядок быстрее можно делать игры для РК86 используя ЯВУ. В частности BDS-C (или другой СИ для КР580, если такой будет найден) и на языке PL/M. PL/M даёт код эффективнее, чем ассемблер (по размеру кода и скорости прогона), но по нему трудно найти учебники на русском. А вот использованию СИ ничего не мешает. Я уже делал эксперименты в 1994 по написанию ПО для РК86 на СИ. Достаточно переписать RUM-time модуль, что находится в начале кода, а для игр и этого не надо. Причём, для игр остаётся простор творчества и для любителя ассемблера, т.к написав работающее ядро игры, затем надо все критические по времени прогона подпрограммы переписать на ассемблер.
Для РК86 ещё никто не писал игр на ЯВУ (естественно СИ и ПАСКАЛЬ из 1987 года, что входили в дистрибутивы клонов и находятся в ОЗУ во время прогона, отчего, ни для исходника, ни для объектного кода нет места, - это чушь).
Для управления фонтом, можно использовать 1 или 2 атрибута ВГ75 (остальные атрибуты для цвета, но не такого как в АПОГЕЕ), и порт А ППА D14 (т.к фонтов 32, одним битом уже не обойтись). Но первые 4 фонта должны быть стандартными. Фонт 0 - базовый РК86. Фонт 1 - даёт инверсию знакомест, рамки и инверсные окна с рамками. Фонты 2 и 3 - для текстообработки, где фонт 2 аналогичен базовому, но вместо псевдографики маленькие русские буквы. А фонт 3 то же самое, но полностью инверсный. Фонт 4 и 5 необходимо истратить на ASCII, большие и маленькие латинские и их инверсию, т.к в СИ из CP/M небходимы ASCII-символы 60...7F, а также для чтения английских док-файлов. Фонт 6 разумно отдать для псевдографики 192*100. Фонты 8...15 отдаём для цвета в текстовых программах, а все остальные фонты остаются для цветных игр.
Концепция следующая. Атрибут RVV, что и так во многих клонах задействован для инверсии, будет также делать инверсию. Но не напрямую, т.е управляя входом ЛП5, что приводит к инверсии сигнала с выхода ВГ75. Это не выгодно, из-за расхода в 2 доп.ИМС 155 серии, а главное оттого, что намного сложнее программирование (например, если забыть в строку вставить атрибут выключения RVV, то бордюр, что начинается в ОЗУ строки с 71 позиции будет инверсным и синхронизация по строкам сорвётся. При инверсии фонтом, она делается кодом символа и не надо вставлять в строку атрибуты, отчего позиции символов не сдвигаются и подпрограммы ПЗУ F800 по-прежнему работают правильно. Используется режим отображения атрибутов пробелом, но в отличие от цвета АПОГЕЯ, благодаря фонту инверсные и неинверсные символы могут стоять рядом (не разделённые пробелом).
Таким образом, пока (пока нет игр с большим числом спрайтов) для коммутации фонта достаточно всего 1-го атрибута RVV и 4-х битов порта А ППА D14. Эти 5 битов напрямую подаются на адреса A10...A14 ПЗУ 27256. Т.е только замена панельки и кучка проводов, вот и вся доработка превращающая РК86 в почти графический компьютер. Пока черно белый, но и цвет за счёт фонта делается так же просто (и намного удобнее для программиста, чем цвет в АПОГЕЕ).
Используя компилятор BDS-СИ можно делать новую игру за 3-4 дня, а если уже есть опыт и "движок" ранее реализованный (желательно на ассемблере) и 2 помошника (один рисующий графику, а второй придумывающий сценарий), то и быстрее. Для текстовой машины скоростей РК86 хватит. В РК-играх большой расход времени уходит на опрос клавиатуры медленной подрограммой F81B, так что даже, если скоростей будет мало, то опрос ускоряют прямым доступом в порт клавиатуры. Проблема нехватки ОЗУ в 32К легко решается путём грамотного применения проволоки и замены ОЗУ РУ3 на РУ5, тем более, что у большинчства пользователей и без того платы на РУ5, где вторая половина ОЗУ бездарно пропадает.
Т.к для РК86 существует куча клонов, что отличается только адресами портов и адресом начала экрана, я предлагаю ввести стандарт для совместимости всех программ РК-подобных. Начиная с офсета 3 надо разместить параметры, которые настраивает пользователь (вручную. или простейшим инсталлятором). Там д.быть: адрес экрана, адреса портов, реальный такт процесоора и доп.информация, по расширеному ОЗУ - объём и метод коммутации. Программа должна считывать и использовать эти данные. При программировании на СИ это не составит труда. Тем самым мы навсегда избавимся от проблем несовместимости, организованной неумными разработчиками клонов.
Поддержав, сначала простейшую доработку по расширению фонта, и получив десяток игр приемлемого качества, мы создадим предпосылки для использования схемы загрузки фонта, разработанной Alex_LG, а главное тогда у пользователей появится стимул сделать чуть более сложные доработки (второе ПЗУ фонта, чтобы получить цвет), турбировать РК86 до 3 МГЦ и расширить ОЗУ до 128К...4 мб. Тем самым мы превратим РК86 в "компьютер времён и народов", но главное, - получим приятную платформу для творчества.
В приложении картинки, что достигаются в базовом РК86 за счёт куска проволоки в 10 см (и допрошивки второго фонта в ПЗУ знакогенератора на РФ2). Это даёт всего 1 дополнительный фонт, который истрачен на инверсию знакомест и рамки (для цвета нужно ещё 8 фонтов в параллельном ПЗУ). Сравните расход деталей, труд и результат, с тем что достигается в АПОГЕЕ с его способом использования атрибутов и кучей деталей для цвета. Чтобы окна в РК86 стали цветными надо истратить лишь второе ПЗУ (для фонта цвета) и смонтировать R.G.B. видеовыход.