ВНИМАНИЕ! СЛЕДУЮЩИЕ ИДЕИ СЧИТАТЬ УСТАРЕВШИМИ. НОВЫЙ
ВАРИАНТ ИСКАТЬ НА СТР. 14-15 ПОД ЗАГОЛОВКОМ "NEW SCF-MODE"
А ЕЩЕ ДАЛЬШЕ ИСКАТЬ ПОСЛЕДНЕЕ ВЛОЖЕНИЕ С ОРИЕНТИРОВОЧНЫМИ
СПЕЦИФИКАЦИЯМИ ВИДЕОКАРТЫ.
ВCТУПЛЕНИЕ
Пробудившись после десятилетнего пц-шного кошмара написанием со скуки примитивного
эмулятора 48-го компа, я в поисках технических подробностей с некоторым удивлением
обнаружил не только то, что за меня эту работу уже многократно проделали другие,
но и что реальный Спек до сих не загнулся, а напротив - активно монструировался,
обрастал мозгами, винтами, клавами, модемами, звуковыми платами, недоделанными
осями и т.д. и т.п.
Но если с мозгами и всякой периферией дело обстояло более-менее благополучно, то
самая главная болячка народного компа продолжает существовать в неизменном виде
уже третий десяток лет. Я, конечно, про экран говорю.
Нет, что-то уже появлялось, какие-то режимы делались новые (каждый производитель
так и норовил выдумать свой вариант) - высокое разрешение, EGA-режим (на 32 кб!),
мультиколор аппаратный (от которого проку нуль), гигаскрин (который и не видеорежим
вовсе, а так, хитрость); даже целый Денди запихивали в несчастный Спек. В сети
иногда на такое наткнешься - народ мечтает о Truecolor'е и 3D-ускорителях! Нда.
Не хочу сказать, что все реализованные идеи так уж плохи. Только выглядит все это
как-то уж совсем инородно, к собственно Спектруму никаким боком. Расширенные экраны
или совсем по-другому устроены, или для телевизора не годятся, или еще что. Причем
отношение производителя/автора приблизительно такое: ну вот же есть режим без всяких
там ограничений, которые так напрягали раньше - чего вам еще нужно? А почти весь
софт так и пишут под "голый" 128-й Пентагон. Ну под GS там еще. Ну память лишнюю
используют иногда. Но другие видеорежимы - неееет!
Есть, конечно, какие-то программы. Системные. Или вообще под CP/M. И для чего они?
Для профессионального применения? Еще кто-то профессионально юзает Спек? Флаг им в
руки, конечно, но все же знают, что для подавляющего большинства Спек уже только
хобби и не более того. 90% нового софта - демы и игрушки (если не считать новым
софтом очередную 'надцатую версию асма или редактора) - которые пишутся под тот же
"голый" 128-й с тем же экраном. И никто их переделывать не будет, и так рады, что
закончили. Ну разве что поддержку GS добавят.
У меня Спека живого нет. Но вот тут слухи ходят, что новые модели Спеклонов все
еще разрабатываются и даже планируется их выпускать. И видеорежимы дополнительные
в них, наверное, будут. Такие же от Спека далекие.
В связи с этим не могу молчать!!
И главное, что хочу сказать: Спектрум сейчас нуждается в улучшении именно обычного,
всем до боли знакомого видеорежима, причем в улучшении, логически вытекающем из
уже давно существующей стандартной архитектуры. Ничего не имею против реализации
нестандартных "профессиональных" видеорежимов, но говорить о том, что они РЕШАЮТ
графические проблемы СПЕКТРУМА - неправильно.
Попробую сформулировать основные требования к новому прибамбасу:
1) Максимальный эффект при минимуме изменений. Как завещал дедушка Синклер - все
должно быть дешево и сердито. (Сразу скажу, что я не железячник и не радиолюбитель
никаким боком. Но даже такие люди могут интуитивно чувствовать сложность задачи).
2) (Скорее первое). Все это дело должно бать поддержано софтом, иначе какой смысл.
Софта есс-но нет. Писать софт трудно, лениво и неблагодарно. Значит, надо сделать
так, чтобы писать было как можно легче (а в особенности переделывать, что все же
проще - иначе не было бы на Спеке такого количества конверсий).
3) (Снова скорее первоеМинимальная несовместимость со стандартной машионй.
Пусть даже со стандартным клоном.
Собственно, на требованиях можно было бы и закончить (получив репутацию пустомели,
которому только подай готовенькое). Но раз уж всякие мысли приходили в голову,
почему бы сразу не изложить, как бы могла выглядеть конкретная реализация.
1. УВЕЛИЧЕНИЕ ЦВЕТОВОГО РАЗРЕШЕНИЯ
Небось, все помнят игрушки с атрибутно-красочной графикой вроде Savage, Extreme,
Dan Dare 3, Shadow Warriors... Astro Marine Corps - самый яркий пример. Вот чего
можно добиться, с умом распорядившись ограниченными цветовыми возможностями
стандартного экрана! Но все-таки заметно, что спрайты довольно-таки угловатые
(и слишком большие), а анимация дерганая.
Вот если бы увеличить цветовое разрешение в два раза (то есть поделить знакоместо
на четвертушки - и для каждой свой атрибут) - качество картинки сразу резко
улучшится, угловатость практически сойдет на нет, мелкие спрайты можно раскрасить.
И чанки цветные сделать! => и видеоролики типа Worms c удвоенным разрешением.
Теперь о проблемах (о том, как ULA при выводе строки должна читать в полтора раза
больше байт из-за удвоенного цветового разрешения по горизонтали - хотелось бы
услышать мнение железячников; я, как уже говорил, рассматриваю вопрос с позиции
программиста).
Понятно, что понадобится больше видеопамяти (ровно 9 килобайт на весь экран); и
залезет он на область системных переменных и Васика. Этого можно избежать, если
использовать этот режим только для дополнительного экрана на 7 странице. Хотя
вообще-то безобразие - ULA для разных экранов в разном режиме должна работать,
что ли (и возможно ли это)? А если они переключаются на разных там моргалках?
Мы пойдем другим путем.
Предложение такое: область атрибутов (точнее, уже четыре области - четыре набора
атрибутных "четвертушек") не привязывать жестко к одному адресу (стандартно это
22528), а адресовать четырьмя аппаратными указателями-регистрами в пределах 16-ти
киловой экранной страницы. Штука в том, что любые два и более указателя могут
хранить один и тот же адрес (например, тот самый 22528). То есть сразу после
включения имеем обычный Спековский экран и можем загружать старые проги.
Комбинация атрибутных областей может быть любая:
11 12 11 12 12
11 12 22 31 34
(соответственно стандартный атрибут; поделенный по вертикали - для мелкого шрифта;
поделенный по горизонтали - для вертикальных скроллеров; извращенный вариант -
например, у буквы левый нижний угол темнее, а правый верхний бликует; полностью
расчетверенный атрибут). Это и по памяти дает экономию, если что-то излишне. Можно
и совсем уж сэкономить: читать атрибуты из третьего сегмента экрана, а его забить
цветом бордюра. Получаем ужатый экран с улучшенной цветностью - всего 7 кб).
Почему указатели только в пределах страницы? Чтобы можно было их использовать и для
второго экрана (с поправкой на страницу); да и регистров лучше все-таки поменьше
иметь. А если располагать их только по ровным (кратным 256) адресам, то можно вообще
обойтись одним 8-разрядным портом (то есть посылаем байт, в котором 2 бита - номер
четверти, а 6 бит - номер 256-байтного куска - как раз 16 килобайт получается).
Правда, Васик пострадает, ну да фиг с ним - если уж так приперло использовать все
это из Васика, в крайнем случае можно загнать атрибуты в REM-строку).