Автор: Владимир Трушкин (vladtru)
В 2016 году исполняется 30 лет одному из самых выдающихся и распространённых отечественных домашних ПК 80-х — «Вектору-06Ц». И, конечно, такой юбилей даёт отличный повод для того, чтобы ещё раз вспомнить любимый многими компьютер, тем более что по прошествии многих лет мы можем достаточно ясно и непредвзято оценить его возможности, в том числе в сравнении с другими ПК той эпохи.
Прошу простить за большой объём статьи: «Вектор» — очень необычный и интересный компьютер, о котором можно говорить очень долго. В качестве оправдания также отмечу, что этот материал — далеко не всё, что хотелось бы написать о «Векторе» . И, кроме того, статья снабжена немалым числом иллюстраций, «разбавляющих» столь длинный текст.
«Вектор-06Ц.02» с ч/б монитором МС-6105
История
Как и у многих моделей ПК, судьба «Вектора» была очень непростой, но, тем не менее, явно счастливой.
Главное здание ПО «Счётмаш» (с 1992 года — «Сигма») в Кишинёве
Главный его создатель — кишинёвский энтузиаст-электронщик Донат Темиразов (работавший наладчиком электронного оборудования), который, судя по всему, как и тысячи других радиолюбителей, в первой половине 80-х был вдохновлён великолепными статьями о знаменитом любительском ПК «Микро-80», выходившими в 1982–1985-м годах в главном советском радиолюбительском журнале «Радио» (а в этих статьях, надо заметить, прекрасно были описаны «с азов» не только сам ПК, но и в целом принципы работы микропроцессоров и микро-ЭВМ). По воспоминаниям Сергея Попова, одного из разработчиков «Микро-80» и «Радио-86РК», а также одного из авторов тех самых статей в «Радио», Донат Темиразов неоднократно приезжал в Москву ещё в 82–84-м годах, общался с создателями «Микро-80», переписывал разные программы с дискет на кассеты (см. http://zxbyte.ru/?id=77). Для изготовления первых «Векторов» и разработки программного обеспечения Темиразов привлёк также Александра Соколова, трудившегося на том же кишинёвском заводе «Счётмаш».
1986
И хотя подробных воспоминаний авторов о процессе создания «Вектора», к сожалению, нет, отрывочные данные из разных источников позволяют предположить, что на разработку ПК ушло несколько лет, причём было несколько разных вариантов, а в 1986-м появилась окончательная, знакомая нам конструкция (видимо, отсюда и цифры 06 в названии, намекающие на год создания) — правда, пока ещё без программируемой палитры на статическом ОЗУ, но с возможностью выбора разных фиксированных палитр на основе ПЗУ. После этого Темиразов и Соколов неоднократно обращались к руководству своего предприятия с предложением наладить выпуск «Вектора», однако пробиться через бюрократическую стену никак не могли. Причём, руководителей «Счётмаша» тоже можно понять — тогда домашние ПК в СССР только-только появлялись (БК-0010 выпускался уже пару лет, но других-то серийных моделей пока не существовало!), и перспективы их были совсем не ясны, да ещё и требовались немалые усилия для «пробивания» такого производства в министерстве, снабжения его комплектующими и т.д. Так что в то время (как и сейчас) не было абсолютно никакой гарантии, что какие-то удачные любительские разработки попадут в серийное производство и получат широкое распространение. Собственно, среди советских ПК невероятно повезло в основном лишь тем любительским моделям, которые попали в многотиражную прессу, а таких считанные единицы: «Радио-86РК» и аналоги (журнал «Радио»), «Специалист» (журнал «Моделист-конструктор») да, отчасти, «Орион-128» (тот же «Радио»).
1987
Донат Темиразов с «Вектором» на 33-й Радиовыставке в Москве (обложка журнала «Радио» №10 за 1987 год)
Донат Темиразов с «Вектором» на 33-й Радиовыставке в Москве (обложка журнала «Радио» №10 за 1987 год)
Однако в 1987 году создателям «Вектора» удалось продемонстрировать свой ПК на 33-й юбилейной (70 лет Октября) Всесоюзной радиовыставке в Москве, традиционно проходившей на ВДНХ и представлявшей наиболее интересные любительские разработки разнообразной радиоэлектронной техники. И они получили главную премию! В конце выставки Д. Темиразов почти случайно смог привлечь внимание заместителя министра радиопромышленности Владимира Алексеевича Курочкина и продемонстрировать ему «Вектор», и этот момент стал решающим в судьбе ПК — замминистра заинтересовался, и вскоре руководство кишинёвского «Счётмаша» получило указание о подготовке к производству «Вектора» (см. http://old.kp.md/freshissue/life/187835/).
Описание «Вектора» и заключение комиссии к выставке, март 1987 г. (начало)
Любопытно, что в описании «Вектора», сделанном для выставки, он представляется своими создателями вовсе не как бытовой (домашний) ПК, а как компьютер, который «предназначен для решения широкого круга научно-технических, экономических, задач управления и в качестве интеллектуального цветного графического терминала». Там же указано, что «благодаря высоким техническим характеристикам, простоте обслуживания и невысокой стоимости (менее 400 рублей), может быть использован в школах, ПТУ, средних и высших учебных заведениях» (см. http://asdasd.rpg.fi/~svo/scalar/ware/851/). То есть, несмотря на неординарные возможности именно графики и звука (что, казалось бы, явно указывает в основном на домашнее, развлекательное, назначение) сами создатели, очевидно, видели «Вектор» как достаточно универсальный ПК, в том числе для профессионального и учебного применения. Об этом же говорит и то, что разработчики изначально предусмотрели для «Вектора» применение электронного диска и дисковода, а не только самый дешёвый вариант внешней памяти на основе бытового магнитофона.
В этом же «выставочном» документе, в результатах испытаний комиссии написано буквально следующее: «При сравнительной оценке комиссия обнаружила существенно лучшие (в 2–4 раза) технические характеристики представленного ПК по сравнению с известными ПК. Так, возможности цветной графики представленного ПК исключительно высоки и трудно сопоставимы с графическими возможностями других ПК».
Описание «Вектора» и заключение комиссии к выставке, март 1987 г. (конец)
1988
Точная 3D-модель «Вектора-06Ц» (автор Вячеслав Славинский)
Видимо, в начале года начинается серийное производство «Вектора» на кишинёвском «Счётмаше» (часто указывается, что производство началось ещё в 1987-м, однако это достаточно сомнительно — слишком сжатые сроки (выставка закончилась, предположительно, летом 87-го); к тому же, самые ранние программы для «Вектора», шедшие, к примеру, в комплекте ПК, датируются именно 1988-м годом (за исключением самого первого Бейсика — версии 1.3 от 1987 г.)); впрочем, какие-то небольшие партии могли быть выпущены и в 1987-м, поскольку к началу 87-го конструкция ПК и основное ПО были уже вполне законченными и, вполне возможно, Темиразов и Соколов заранее готовили и его промышленный выпуск.
В этом же году «Вектор» получает серебряную медаль ВДНХ.
1989
В конце 80-х, когда вдруг начали появляться разнообразные советские домашние ПК, в основном совершенно несовместимые друг с другом, возникла здравая идея: зачем плодить множество самых разных моделей (зачастую весьма низкого уровня), не лучше ли создать один или несколько продвинутых ПК и наладить их массовое производство. В 89-м году Государственный комитет СССР по вычислительной технике и информатике (ГКВТИ) совместно с ЦК ВЛКСМ и несколькими другими организациями, наконец, проводит конкурс на создание лучших моделей бытовых ПК. И «Вектор-06Ц» занимает второе место (а среди 8-разрядных ПК — первое), вместе с IBM-совместимым МС-1502 (на первом месте — IBM-совместимый же МК-88, на третьем — 8-битные ПК8002 «Эльф» и «Гуру»). То есть «Вектор» фактически был рекомендован производителям как один из стандартных бытовых ПК.
В 1989-м проходит 34-я Всесоюзная радиовыставка, и «Вектор» (точнее, его модификация «Вектор-06Ц.03, оснащённая дисководом и электронным диском) снова получает главную премию среди ПК (на втором месте ещё один незаурядный компьютер — «Орион-128»).
Таким образом, к концу 80-х, через три года после окончания разработки, «Вектор-06Ц» по-прежнему оставался лучшим среди советских бытовых 8-битных ПК.
В конце 1980-х Д. Темиразов переезжает в Москву (переходит на работу в московский НИИСчетМаш), занимается разработкой следующей модели «Вектора» — 1608Ц, с двумя процессорами (8- и 16-разрядным), совместимой с IBM PC. Однако этот ПК уже не успел увидеть свет — после распада СССР и начавшихся в стране реформ для отечественных предприятий начались тяжёлые времена, и уже не было смысла начинать выпуск каких-либо совсем новых моделей.
1990
В 90-м году «Вектор» серийно производится как минимум на пяти предприятиях: в Кишинёве, Кирове, Волжском, Астрахани, Минске. Ещё два завода делали близкие аналоги: «Вектор Старт-1200» (Кишинёв) и «Криста-2» (Муром). Планируемый суммарный объём выпуска — около 20000 штук за год. Правда, продукция разных заводов несколько отличалась по качеству и конструкции – например, где-то использовалась очень надёжная герконовая клавиатура, а где-то — «ёмкостная», гораздо менее приятная в работе и требующая периодической чистки или даже замены контактов.
Программное обеспечение постепенно развивается: на 90-й год было выпущено не менее 70 игр и программ в кодах (плюс множество на Бейсике), в том числе такие классические векторовские шедевры, как «Адскок», «Амбал», Alien Ambush, «Кираш», «Полёт», а также отличные порты с MSX — Putup, Pairs, Rotors, Rise Out, Ninja Kage, Pacman и др. Из неигровых программ доступны несколько вариантов Бейсика, ЛС-Паскаль, графический редактор «Карандаш», ассемблеры, отладчики и т.д. Кстати, возможности Бейсика у «Вектора» были достаточно широкими — например, он прекрасно поддерживал графические и звуковые функции ПК — и программы (в том числе игры) на Бейсике были вполне достойными.
1991
«Вектор-06Ц.02»: дизайн чуть строже, всё в серых тонах
Начинается выпуск «Вектора-06Ц.02», полностью аналогичного первой модели, но с несколько усовершенствованной схемой, уменьшенным энергопотреблением (за счёт применения более экономичных микросхем мелкой логики) и добавлением двух встроенных разъёмов для джойстиков.
Появляется астраханский ПК-6128Ц — значительно усовершенствованный «Вектор», имеющий 128 Кбайт ОЗУ, 16 Кбайт ПЗУ (со встроенным Бейсиком и загрузчиком), чуть более современный и быстрый процессор (ИМ1821ВМ85), встроенный контроллер дисковода и т.д.
1992-1993
Производство «Векторов» постепенно сворачивается из-за распада СССР и общих экономических проблем в стране, а также в связи с повсеместным распространением аналогов «Спектрума», а чуть позже — дешёвых игровых приставок.
Конструкция
Главная уникальность «Вектора» — очень высокая планка графических и звуковых возможностей, изначально поставленная разработчиками. Они не стали создавать самый простой и дешёвый ПК, вроде «Радио-86РК» или «Специалиста», не стали ограничиваться 4-цветной графикой (как создатели БК-0010/0011, ПК-01 «Львов», «Искры 1080 Тарту» или советских IBM-совместимых) или искать возможности сокращения объема видеопамяти за счёт атрибутного представления цвета (как разработчики ПК8000, ПК8002, «Ориона-128» и, конечно, клонов «Спектрума»). Они сделали дешёвый ПК с графикой лучше, чем у большинства на порядок более дорогих моделей.
Конструктивно «Вектор» был, конечно, не самым простым ПК: в нём использовалось от 83 до 97 микросхем (первый вариант с герконовой клавиатурой, не содержащей микросхем, второй — с «ёмкостной», на которой дополнительно 14 корпусов ИС). Впрочем, во многом такое обилие микросхем связано как раз с неординарной конструкцией видеоконтроллера — архитектура ПК предусматривала для вывода на экран чтение сразу 32-х бит видеопамяти одновременно (параллельно в 4 сдвиговых регистра, на выходах которых формировался 4-битный код логического цвета точки), поэтому использовалось 32 микросхемы ОЗУ малой ёмкости КР565РУ6 (16 Кбит) вместо восьми более современных 64-килобитных чипов КР565РУ5. Однако, поскольку РУ5 вплоть до конца 80-х были большим дефицитом, в отличие от РУ6, то предприятиям-изготовителям было гораздо проще использовать именно РУ6, и такое своеобразие конструкции «Вектора» было даже им на руку.
Для сравнения, в самом простом из отечественных IBM-совместимых — «Поиске» — было всего 80 микросхем (при 128 Кбайтах (16 микросхем) ОЗУ); в более сложных домашних «айбиэмках» МК-88 и «Ассистенте-128» — вдвое больше, 155–170 на 3–4-х платах; в довольно близком «Вектору» по качеству игровой графики компьютере ПК8000 «Сура» — 88 микросхем на 2-х платах; в классических БК-0010 и БК-0010-01 — всего 44–45 (за счёт использования специализированных БМК); в УКНЦ — 55 микросхем (также за счёт БМК); в «Корвете» — около 120; в наших «Спектрум»-совместимых — от 12–18 (с использованием аналогов ULA) до 45–80 (на мелкой логике). То есть, в общем-то, конструкцию «Вектора» можно даже считать простой, поскольку корпусов «мелкой логики» в ней было всего-то порядка 40 штук (у варианта с герконовой клавиатурой) — примерно на уровне обычных клонов «Синклера-48» без ULA.
В зарубежных 8-битных бытовых ПК второй половины 80-х было, как правило, порядка 20–30 микросхем: Commodore 64C — 16 штук (в первом варианте С64 их вдвое больше), ZX Spectrum+ — 19–33 (разные версии), ZX Spectrum 128К — 29 штук, Atari 65XE — 23, в 16-битном Atari 520ST — уже около 45, Amstrad CPC 464 — 24 штуки, Amstrad CPC 6128 — 32–46 (разные версии), Acorn BBC Model B (32 Кб, первая половина 80-х) — около 95 штук (!), Acorn Electron — 16 штук, Acorn BBC Master Compact — 40 штук, MSX2 (Sony XV-J550) — 37 штук. Понятно, что меньшее число микросхем в зарубежных ПК связано со стремлением сократить их себестоимость за счёт использования заказных БМК (ULA) и стандартных (либо собственной разработки) однокристальных видеоконтроллеров, звуковых генераторов и т.п. Чтобы понять, какой выигрыш в упрощении конструкции давало применение БМК и других специализированных чипов, давайте взглянем, например, на ПК Tandy Color Computer 3 (разработка 1986 года, по возможностям во многом похож на «Вектор»): в интернете есть фотографии и описания его прототипа, построенного на стандартных микросхемах и представляющего собой здоровенную плату со 154-мя чипами (!), из которых 16 м/с — это ОЗУ. Каково же число микросхем в серийном ПК (он, правда, не имеет встроенного контроллера дисковода, в отличие от прототипа)? Всего 17 штук! И из них всего 4 ОЗУ по 256 килобит каждая.
К сожалению, для советских разработчиков возможности применения базовых матричных кристаллов (БМК) были очень ограничены (они использовались практически только в компьютерах под маркой «Электроника», выпущенных министерством электронной промышленности), что вынуждало большинство создателей ПК брать только стандартные комплектующие (мелкую логику, самые ходовые ОЗУ и ПЗУ, БИС из микропроцессорного комплекта К580 и т.п.), в том числе для построения видеоконтроллера, звукогенератора и т.д. Аналогично, среди десятков выпускавшихся в СССР микропроцессоров для большинства разработчиков и производителей были реально доступны лишь самые простые и дешёвые КР580ВМ80А (которые, однако, были не так уж плохи и вполне сравнимы по возможностям с процессорами дешёвых иностранных ПК). Впрочем, частично недоступность БМК и других специализированных микросхем компенсировалась применением ПЛМ (программируемых логических матриц) и ПЗУ, которые можно было «прошивать» без участия производителей микросхем, и это несколько сокращало число корпусов в советских ПК, однако, как видим, они всё равно были намного сложнее по конструкции, чем массовые иностранные модели. С другой стороны, нет худа без добра: применение в большинстве наших ПК простых и распространённых ИС и отсутствие каких-то редких микросхем нередко здорово облегчало (и сильно упрощает сейчас) ремонт этих ПК, так как найти обычные, ходовые микросхемы значительно проще, чем какие-то редкие чипы, тем более выпускавшиеся специально для каких-то конкретных моделей ПК.
Итак, если посмотреть на схему «Вектора» (http://asdasd.rpg.fi/~svo/scalar/ware/515/), то мы не обнаружим там практически никаких остродефицитных микросхем: более трети корпусов — это самые простые и ходовые ОЗУ КР565РУ6, в качестве ПЗУ — опять же самая простая и дешёвая К556РТ5 (512 байт) или К556РТ7 (2 Кбайта), из комплекта К580 применяются лишь несколько очень распространённых чипов — сам процессор КР580ВМ80А, два программируемых параллельных порта КР580ВВ55А, программируемый таймер КР580ВИ53 да несколько простых шинных формирователей КР580ВА86 и ВА87; для хранения палитры стоят два самых простых статических ОЗУ К155РУ2 (16х4 бита); всё остальное — «мелкая логика» (логические элементы, триггеры, счётчики, мультиплексоры, дешифраторы, регистры) и пара ПЗУ К155РЕ3 (32х8 бит). Микросхем, требующих процедуру прошивки, всего три, и каких — самые наипростейшие К155РЕ3 и К556РТ5 (РТ7). Для сравнения, некоторые из советских домашних ПК (в общем-то, прямые конкуренты «Вектора»), например, ПК8000, ПК-01 «Львов» и «Искра 1080 Тарту» имели одних лишь чипов основного ПЗУ 8–10 штук плюс чуть ли не до десятка вспомогательных ПЗУ и ПЛМ (и всех нужно было прошивать).
Поэтому «Вектор» был, безусловно, одним из самых «бездефицитных» и удобных для сборки ПК, что теоретически позволяло достаточно легко обеспечить его массовый выпуск на разных предприятиях по всей стране. Собственно, на практике он и был одним из самых популярных отечественных ПК у производителей: всё же 5 или больше заводов (он выпускался ещё, как минимум, в Дубоссарах, есть упоминания о выпуске в Бресте) — это не меньше, чем число изготовителей БК-0010/0011М, а уж большинство других моделей и вовсе делались обычно лишь на одном предприятии и совсем небольшими «тиражами».
Правда, применение «разогнанного» процессора (см. ниже) было достаточно спорным решением (во всяком случае, других серийных ПК на КР580ВМ80А с частотой выше номинальной не существовало), которое могло вызывать трудности у производителей — см. «Анализ «Синтеза»» (http://asdasd.rpg.fi/~svo/scalar/ware/890/). Однако приведённые в статье «ужасы» производства «Вектора Старта-1200» (которые, видимо, должны служить «контрастом» к идиллической картинке описанного в ней дальше выпуска «Спектрум»-совместимого «Синтеза») выглядят явно преувеличенными — по крайней мере, с подобными трудностями (которых, безусловно, не были лишены и многие другие модели) все производители «Вектора» как-то справлялись, выпуская вполне надёжные ПК и достаточно массово.
Графика
Трудно сказать, использовались ли в качестве прототипа графики «Вектора» какие-то иностранные ПК — полных аналогов его графического контроллера среди известных зарубежных ПК нет, как нет и соответствующих воспоминаний разработчиков, но ближе всего он получился к Atari ST (у которого те же 4 плана/16 цветов, программируемая палитра из 512 цветов, примерно такие же разрешения, за исключением самого высокого — 640х400), Commodore Amiga (но там уже 5 планов/32 цвета + аппаратное ускорение графики), а также к самой продвинутой и дорогой из популярных видеокарт для IBM-совместимых ПК тех лет — EGA (4 плана/16 цветов из палитры 64 цвета, разрешение от 320х200 до 640х350). Можно предположить, что об устройстве совсем новых на тот момент «Амиги» и «Атари СТ» создатели «Вектора» могли и не знать, но IBM PC с EGA наверняка был им знаком; кроме того, они могли знать и о более ранних ПК (выпускавшихся с 1982 года) с видеокартами на основе нескольких битовых планов, которые применялись, например, в очень дорогом DEC Professional (и, соответственно, советском аналоге «Электроника-85» — в цветном варианте 3 плана/8 цветов, 96 Кбайт видеоОЗУ) и нескольких популярных в Японии домашних ПК вроде NEC PC-8801, Fujitsu FM-7 и Sharp X1 (у всех 3 плана/8 цветов, 48 Кбайт видеопамяти).
Даже если графика «Вектора» была лишь «подражанием» Atari ST, IBM PC c EGA или другим упомянутым ПК — это были, безусловно, лучшие из возможных образцов для подражания. В любом случае создатели «Вектора» показали недюжинную творческую смелость и дальновидность, решив использовать в простом и дешёвом ПК такой же продвинутый видеоадаптер, который только-только появился на лучших моделях относительно дорогих зарубежных компьютеров.
Напомню главные отличия графики «Вектора» от привычного уровня тех лет на других ПК:
— До 16 одновременно используемых цветов без каких-либо ограничений на выбор цвета для любых точек экрана. У других ПК — часто лишь 2-4 цвета (большинство советских моделей, IBM PC c CGA, Tandy CoCo, Dragon 32/64), либо 6–8 цветов (Apple II и его многочисленные клоны (6 цветов), BBC Micro и Acorn Electron, Oric, Thomson, многие японские ПК, «Корвет»), либо 15–16 цветов, но со значительными ограничениями на их выбор для соседних точек (атрибутная графика — Commodore 16/64/128/+4, MSX, ZX Spectrum и клоны, Thomson, ПК8000, ПК8002, «Орион-128» в 16-цветном режиме). Лишь несколько зарубежных 8-битных ПК имели графику, подобную векторовской — MSX2, Tandy CoCo 3, Amstrad CPC (но у CPC намного меньше разрешение), а также более продвинутые Atari ST и IBM PC c EGA; из советских — лишь некоторые любительские аналоги «Спектрума» (типа ATM Turbo).
— Любой из 16 цветов произвольно выбирается из палитры в 256 цветов, что значительно расширяет изобразительные возможности ПК, позволяя отображать как «чистые», основные цвета (наподобие БК-0010, «Спектрума», BBC Micro и т.д.), так и достаточно тонкие оттенки, до 4-8 градаций яркости одного цвета, имитировать цвета многих других ПК (БК, «Спектрума», MSX, IBM PC, С64 и т.д.). Среди советских домашних ПК подобную палитру имели только раритетные ПК8002, у 8-битных зарубежных многоцветные палитры появились лишь у некоторых моделей (в основном не самых массовых), выпускавшихся после 1985–1986 года — MSX2 (512 цветов), Amstrad CPC+ (1990 г., 4096 цветов), Thomson TO8/TO9 (4096 цветов), NEC PC-8801MKII (512 цв.), Fujitsu FM77AV (4096 цв.); отчасти сравнимы и Tandy CoCo 3 (64 цвета), IBM PC c EGA (64 цв.), Commodore 16/+4 (121 цвет, атрибутная графика), Atari XL/XE (до 128/256 цветов, но с большими ограничениями). Заметим, что самые массовые и известные модели имели весьма небольшие палитры — обычно до 15–16 цветов (Apple II, Commodore 64, ZX Spectrum, Tandy CoCo и CoCo 2, MSX, BBC Micro, Amstrad CPC (27 цв.), IBM PC/CGA и мн. др.).
— Видеопамять «Вектора» разбита на 4 одинаковых «плоскости», в каждой из которых хранится один бит из 4-битного кода цвета, что позволяет (в сочетании с программируемой палитрой) легко регулировать объём используемой видеопамяти (8, 16, 24 или 32 Кбайта) и накладывать аппаратно 2–4 плана изображения друг на друга (например, спрайты на сложный фон), а также даёт большую гибкость в выборе нужного соотношения цветности подвижных объектов и фона, объемов занимаемой ими памяти и скорости их вывода на экран. Подавляющее большинство других ПК имели совсем другую организацию экрана: либо линейное представление цвета (в каждом байте видеопамяти хранился цвет нескольких точек, каждая из которых занимала обычно 2 или 4 бита, обеспечивая 4 или 16 цветов (или 8 цветов + бит для мигания)), либо вовсе атрибутное (само изображение фактически монохромное, но для каждого его фрагмента из 8х1 или 8х8 точек в отдельной области памяти задавался специальный атрибут, определяющий цвет единиц и цвет нулей в этом фрагменте или нечто подобное). Среди советских 8-битных домашних ПК раздельные плоскости имели только несколько моделей, но у всех лишь две плоскости — «Искра 1080 Тарту», ПК8002 (в 4-цветном режиме) и «Орион-128» (в 4-цветном режиме); среди зарубежных — лишь японские 8-цветные (3 плоскости) NEC PC-8801, Fujitsu FM7 и Sharp X1. Вообще, многоплановая структура видеопамяти обычно характерна для ПК достаточно высокого класса (к которому дешёвые домашние не относились) — скажем, советских «Корвета», УКНЦ, ДВК с КЦГД, цветного варианта «Электроники-85», зарубежных Atari ST, Amiga, IBM PC/EGA, многих японских моделей.
—Простая и логичная организация видеопамяти не «по строкам», а «по столбцам»: увеличение адреса видеопамяти на единицу соответствует переходу не по горизонтали, а по вертикали, то есть старший байт адреса указывает на номер вертикального столбца экрана (размером 256 байт), а младший байт адреса — на номер строки в этом столбце. И если нужно нарисовать, например, точку с заданными координатами на экране в обычном режиме 256х256, то координата Y даёт сразу младший байт адреса в видеопамяти, а старшие 5 бит координаты X — старший байт адреса (точнее, смещение относительно адреса начала экранной плоскости) и младшие 3 бита координаты X — номер бита в найденном байте экранной памяти. Такая структура экранной памяти обеспечивает наибольшую среднюю скорость работы с изображением (очистку областей или их заполнение мелкими текстурами, копирование небольших областей и т.п.) и она была, так сказать, «ноу-хау» советских разработчиков — применялась лишь в нескольких отечественных ПК: «Векторе», «Специалисте», «Орионе-128» (и была очень удобна для машин, имеющих вертикальный размер экрана 256 точек), а вот иностранные модели с аналогичной «постолбцовой» видеопамятью автору неизвестны (у зарубежных ПК часто использовались стандартные видеоконтроллеры типа 6845 или TMS-9918, работающие исключительно со строками или даже «символами»; да и вертикальное разрешение было обычно 200 или 192 точки (более подходящее для ТВ стандарта NTSC), что делало применение столбцовой организации почти бессмысленным).
— Поддержка плавного аппаратного вертикального скроллинга (в специальном регистре указывался номер строки, с которой начинался вывод на экран), что сильно расширяло, прежде всего, игровые и развлекательные возможности ПК, а также делало быстрее и комфортнее работу с текстом. При всей кажущейся простоте, этой функции не было у подавляющего большинства недорогих моделей ПК — среди советских аппаратным скроллингом были оснащены только БК-0010/0011М и, в несколько другом виде, УКНЦ, а у зарубежных он был предусмотрен только в считанных единицах игровых ПК — Commodore 64, Atari XL/XE, MSX2; в остальных все скроллинги были либо программные (с достаточно серьёзной загрузкой процессора), либо использовались ступенчатые полуаппаратные скроллинги за счёт программного сдвига экранного буфера (MSX и подобные) или, в редких случаях, какие-то хитрости с нестандартными режимами работы видеоконтроллеров. Впрочем, понятно, что для «Вектора» аппаратный скроллинг был во многом вынужденным, поскольку для программного сдвига 32 Кбайт экранной памяти могло потребоваться от четверти до трети или даже половины секунды (при запрещённых прерываниях меньше, при разрешённых — больше), что сильно замедляло бы даже обычный вывод текста на экран в многоцветном режиме. Но раз уж создатели ПК предусмотрели плавный сдвиг экрана, «Вектор» оказался в очень узкой компании машин со столь продвинутой графикой да ещё и аппаратным скроллингом (практически единственный его собрат среди всех массовых 8-битных ПК — MSX2).
— Поддержка не только среднего разрешения 256х256 точек, но и высокого — 512х256 точек (правда, с достаточно необычной организацией экрана — две плоскости 256х256 совмещались в одну 512х256 так, что нечётные точки по горизонтали брались из одной плоскости, а чётные — из другой). И хотя скорость работы с экраном в высоком разрешении была пониже, для игр этот режим, естественно, почти не использовался, а для работы с текстом или в ОС СР/М и МикроДОС её вполне хватало. В отличие от большинства недорогих зарубежных и отечественных ПК, способных работать в высоком разрешении (а у большинства моделей высокого разрешения просто не было, в том числе и у самых массовых — Commodore 64, MSX, ZX Spectrum, Atari XL/XE, часть Apple II, ПК-01 «Львов», ПК8000 и т.д.), у «Вектора» оно было не только монохромное (как у БК-0010, BBC Micro, Amstrad CPC, IBM PC/CGA и т.д.), но и цветное (всего 4 цвета, однако и это совсем неплохо по меркам других ПК). Впрочем, чаще всего высокое разрешение требовалось именно монохромное (работа с СР/М, текстами, таблицами и т.п.), тем более с целью экономии памяти. Причём в плане памяти были особенности — даже при использовании в режиме 512х256 лишь 2-х цветов и 16 Кбайт видеопамяти непрерывное пользовательское ОЗУ составляло не 48 Кбайт, а 40 или 32 (для монохромного высокого разрешения использовались планы 1 и 2 (середина области видеопамяти) или 0 и 3 (края области видеопамяти), а не 0 и 1 или 2 и 3). Впрочем, ничего страшного в этом нет — при использовании 2-го и 3-го планов последние 8 Кбайт в конце адресного пространства как раз применялись для размещения самой ОС (СР/М или МикроДОС), а нижние 40 Кбайт отводились для программ пользователя (а при наличии квазидиска пользовательская память увеличивалась до 48–60 и более Кбайт).
Звук
О серьёзности подхода разработчиков «Вектора» говорит и выбор звукогенератора: ведь они могли бы точно также, как и большинство других создателей советских ПК, просто не заморачиваться этим вопросом — выводить простейший однобитный звук программно, как это сделано в большинстве наших моделей (БК, РК, «Специалист», «Орион», «Львов», УКНЦ, даже в игровом ПК8000) и во многих зарубежных (Apple II, первые «Спектрумы» и др.), либо использовать один канал таймера, как в «Микроше», «Кристе», «Корвете» или IBM-совместимых. Но Д. Темиразов практически совершил подвиг — отвёл для звука всю микросхему КР580ВИ53 целиком, все три канала, что было по советским меркам почти невероятно, ведь других наших ПК с аппаратным 3-канальным звуком тогда ещё не было и в помине (ПК-11 ещё разрабатывался, и вряд ли Темиразов о нём знал, «Апогей БК-01» появился лишь через пару лет, ПК8002 — ещё позже). Правда, жаль, что создатели «Вектора» всё же уделили звуку гораздо меньше внимания, чем графике, и не попытались в этой области достичь уровня хотя бы недорогих зарубежных ПК, а ведь сделать это было не так уж трудно: в принципе, достаточно было поставить последовательно с программируемым таймером ВИ53 вторую такую же микросхему (как это было сделано в ПК-11 и ПК-11/16), что позволило бы уже получить раздельную, поканальную, регулировку громкости (за счёт изменения скважности импульсов) да ещё и в придачу интересные аппаратные звуковые эффекты с использованием частотной модуляции. Ну и не помешало бы для полного счастья добавить в схему хотя бы простой генератор шума. Впрочем, ещё раз отметим, что по советским меркам (а у нас специализированные микросхемы звукогенераторов для ПК, приставок, синтезаторов и т.д. вообще не выпускались, поэтому и средний уровень качества встроенного звука на ПК заметно ниже зарубежного) звук «Вектора» итак был на высшем уровне.
При всей кажущейся простоте микросхемы КР580ВИ53, воспроизводящей в обычном режиме лишь прямоугольные импульсы одинаковой скважности, звуковые возможности у неё достаточно приличные: высокая входная частота (на «Векторе» — 1,5 МГц) позволяет получить широкий диапазон частот звука с их плавным изменением (в режиме деления частоты на целое число), а также некоторыми интересными эффектами: например, биения при выводе близких частот в разных каналах, вибрато при плавном периодическом «плавании» частоты, тремоло при прерывистом выводе звука и т.д. На практике многие композиции, написанные для AY-3-9810 и подобных звукогенераторов, вполне прилично и близко к оригиналу звучат и на ВИ53 (см. http://www.youtube.com/watch?v=dFLmm1hbago, http://www.youtube.com/watch?v=f_KYi3vZ-oU, http://www.youtube.com/watch?v=n5jJETxMAZk и др.). А ведь у «Вектора» есть и программный однобитный звуковой выход (на магнитофон), который фактически даёт 4-й канал звука, через который вполне удобно воспроизводить, например, шумовые эффекты или простейшую речь, хотя и с большой загрузкой процессора.
Но и это ещё не всё: в режиме программируемого одновибратора (генератора импульсов заданной длительности) ВИ53 превращается практически в настоящий ЦАП с широтно-импульсной модуляцией, способный воспроизводить 3-канальный оцифрованный звук с частотой дискретизации порядка 4–10 кГц с количеством уровней в каждом канале, эквивалентном 6–8 битному ЦАП. Чем выше частота дискретизации, тем меньше возможное количество уровней, поскольку число уровней равно 1,5 МГц/двойная частота дискретизации (т.е. максимальная частота отсчётов для эквивалента 8-битного ЦАП равна (1500000/256)/2=2930 Гц, а для 7-битного — вдвое больше, 5.86 кГц). На практике частоты дискретизации порядка 6–8 кГц давали на подключенных к ПК усилителях или магнитофонах вполне приличное звучание, мало отличимое от настоящего ЦАП (скажем, резисторного Covox), хотя, конечно, не без некоторых помех и призвуков. То есть «Вектор» был способен самым элементарным путём — выводом в порт 6–7-битных значений уровня сигнала воспроизводить достаточно серьёзный для подобных ПК оцифрованный звук, причём без малейших переделок и добавок, самыми стандартными средствами. Это, конечно, открывало совершенно новые возможности в программном воспроизведении музыки, речи и спецэффектов (см. http://www.youtube.com/watch?v=n5jJETxMAZk). Отмечу, что подобная технология ещё с 80-х довольно часто применялась на IBM PC, где штатный генератор звука был полностью аналогичен векторовскому — тот же программируемый таймер, но лишь один канал вместо 3-х, однако музыка через подобный «ЦАП» выводилась очень даже неплохо и была гораздо богаче стандартной. Правда, программный синтез музыки через ЦАП на небыстром 8-битном ПК всё же был непростой задачей, да и мало кто из программистов вообще знал о таких способностях «Вектора» — в руководствах пользователя они, к сожалению, не упоминались, в векторовских информационных изданиях начала 90-х — тоже. К тому же применять такой звук непосредственно во время игры было практически невозможно, поскольку программный вывод требовал очень большой загрузки процессора (вернее, точного программного отсчёта временных интервалов). При этом у «Вектора» (в отличие от некоторых других ПК — скажем, довольно похожего Tandy CoCo3, имевшего в качестве звукогенератора 6-битный ЦАП) не было аппаратных прерываний с программируемой частотой или, например, от строчной развёртки (а имевшиеся прерывания от кадровой развёртки с частотой 50 Гц здесь были бесполезны), что могло бы сильно упростить воспроизведение оцифрованного звука, особенно совместно с выполнением других задач (в процессе игры, в демках и т.п.). Впрочем, разработчики «Вектора» о таких звуковых способностях КР580ВИ53, и тем более их поддержке дополнительными прерываниями по таймеру, скорее всего, вообще не задумывались, иначе они как-то упомянули бы о воспроизведении оцифрованного звука в документации на ПК (хотя сам по себе метод широтно-импульсной модуляции давно и хорошо известен в электронике) — ну что ж, понять их тоже нетрудно, ведь в середине 80-х в СССР сами по себе домашние ПК только-только появлялись, и вряд ли им было до каких-то звуковых изысков. Какого-то заметного распространения компакт-дисков и других цифровых звуконосителей в СССР тогда тоже ещё не было, то есть не было ещё моды на цифровой звук. И то, что сделали Темиразов и Соколов — итак настоящее чудо.
Другая причина невостребованности подобных экзотических методов синтеза музыки — широкое распространение с начала 90-х звукогенераторов типа AY-3-8910 (8912, YM-2149F), применявшихся в ряде известных зарубежных ПК (ZX Spectrum 128K, MSX, Amstrad CPC, Atari ST) и массово подключавшихся любителями к советским клонам «Спектрума», а также и к другим, чисто отечественным ПК вроде БК-0010/0011М. Не обошла эта мода стороной и «Вектор» — для него к середине 90-х было несколько видов плат звукогенераторов на основе AY: например, Sound Tracker (подключался к разъёму ВУ — системной шине), R-Sound, R-Sound 2 и XUIDO (все подключались через ПУ — параллельный порт). Эти платы (особенно первая) поддерживались большинством игр и демок, выпущенных для «Вектора» с середины 90-х годов, под них же были переделаны и некоторые более старые игры. Естественно, существовали и музыкальные редакторы для AY. Таким образом, владельцы «Вектора», купившие или собравшие самостоятельно какую-то из плат на AY, получали такое же звучание в некоторых играх и демках, как и владельцы «Спектрумов» с AY и других ПК с подобными генераторами. Однако, если для БК или, скажем, «Ориона», подключение AY давало радикальное улучшение звука (хотя для этого требовалась ещё и программная поддержка), то для «Вектора» разница между стандартным звуком и звуком AY была уже далеко не столь серьёзной. Впрочем, звучание AY, безусловно, приятнее достаточно жесткого звука ВИ53, и спецэффекты в играх под AY могли быть намного разнообразнее.
Конечно, к «Вектору» через параллельный порт легко можно было подключать и Covox — простейший 8-битный ЦАП на резисторах. Однако, как и в случае с широтно-импульсным ЦАПом на основе ВИ53, это требовало достаточно сложной программной поддержки и огромной загрузки процессора. Тем более смысла в «Ковоксе» немного по причине упомянутой способности ВИ53 воспроизводить оцифрованный звук без всяких дополнительных ЦАПов. В общем, никакого заметного применения Covox или других ЦАП на «Векторе» не наблюдалось.
Процессор
Это одна из главных загадок «Вектора». Наверное, одной из причин того, почему Темиразов и Соколов рискнули использовать штатно разогнанный до 3 МГц процессор, была достаточно уверенная работа КР580ВМ80А на такой частоте — видимо, разгон на 20% (номинальная частота у него 2,5 МГц) большинство экземпляров переносили прекрасно, иначе вряд ли разработчики стали бы закладывать в своё детище такую «мину». Вероятно, частота 3 МГц была удобна с точки зрения схемотехники (для упрощения тактового генератора и т.д.). Наверняка создатели «Вектора» также понимали, что при таких неординарных графических возможностях скорость 8-битного процессора итак находится на грани разумного, а у «Вектора» он ещё и заметно тормозится видеоконтроллером. Так что поднятие до 3 МГц позволяло приблизить производительность к теоретической скорости неразогнанного ВМ80А с частотой 2,5 МГц. Как бы то ни было, опыт работы показал, что «Векторы» не отличались какой-либо особенной ненадёжностью или глючностью: да, были и жалобы (как и у владельцев других ПК), но большинство «Векторов» работали вполне надёжно (нередко буквально сутками) и многие даже сохранились до наших дней. И скорость у ПК оказалась достаточно высокой, в том числе и при работе с графикой.
Как известно, процессор «Вектора» тормозится видеоконтроллером по схеме (характерной и для некоторых других ПК — например, Amstrad CPC) расширения машинных циклов до 4-х тактов: если при выполнении какой-либо машинной команды цикл равен 4-м тактам, то он не меняется, а если не равен, то удлиняется до величины, кратной 4-м тактам. То есть, к примеру, самые простые 4-тактовые команды (ADD, RAR и т.д.) так и выполняются за 4 такта, но 5-тактовые (MOV и т.п.) — уже за 8 тактов (как и 7-тактовые), 10-тактовые — за 12, 11-тактовые (PUSH, RST) — за 16, 13-тактовые — за 16, 16-тактовые — за 20, 17- и 18-тактовые — за 24 (причём время выполнения некоторых команд иногда может быть и выше, т.е. стабильность скорости выполнения команд не совсем стопроцентная, хотя и близкая к ней). Это приводит к тому, что средняя производительность процессора падает примерно на 20–25% — эффективная тактовая частота «Вектора» около 2,25–2,33 МГц (но она, конечно, несколько зависит от конкретного набора команд в программе и частоты их исполнения; интересно, что в описании «Вектора» для выставки 87-го года указана эффективная частота 2,4 МГц — немного выше, но на каких-то программах это очень даже может быть). Таким образом, несмотря на повышенную тактовую частоту, процессор «Вектора» работает всё же чуть медленнее (процентов на 5–10) тех ПК на базе КР580ВМ80А, которые имеют максимальную стандартную частоту 2,5 МГц, но без торможения (а таких ПК, кстати, совсем не много — у нас это лишь «Корвет» и «Орион-128»).
Максимальная производительность процессора немаленькая — 750 тысяч оп/сек, но она достигается как раз на 4-тактовых командах, которые работают как бы без торможения. Если же учесть реальное среднее торможение, то «эффективная максимальная производительность» — примерно 560-600 тыс. оп/сек. (в описании выставочного «Вектора», а также в документации к серийным ПК как раз указано 600 тыс. оп/с).
А вот некоторые параметры, более близкие к практике программирования (все данные без учёта вспомогательных операций и для развёрнутых циклов, т.е. без учёта команд организации циклов, которые, конечно, могут ставиться после достаточно длинной последовательности одинаковых блоков команд, тогда реальная скорость копирования и т.д. будет близка к указанной):
— Скорость заполнения памяти любой цепочкой до 4–6-ти байт (например, стирание области экрана или заполнение текстурой размером до 8х6 точек) стековыми операциями PUSH Rp (может требоваться отключение аппаратных прерываний от кадровой развёртки, имеющих частоту 50 Гц) — до 375 тыс. байт/сек (16 тактов на 2 байта), без стековых операций — до 187 тыс. байт/с (16 тактов на байт)).
— Копирование блоков оперативной памяти (в том числе на экране) стековыми операциями (POP, 2xMOV M,R, 2xINX) — до 136 тыс. байт/с (44 такта на 2 байта), без стековых операций (MOV A,M, STAX, 2xINX) — до 93 тыс. байт/с (32 такта на байт); в некоторых случаях возможно более быстрое копирование с помощью цепочек POP/SHLD (с большим расходом памяти под программный код) — до 187 тыс. байт/с (32 такта на 2 байта) или LHLD/PUSH — до 166 тыс. байт/с (36 тактов на 2 байта).
— Скорость плавного (попиксельного) программного горизонтального сдвига области экрана — до 857 тысяч монохромных точек в секунду (28 тактов на байт (8 точек) — MOV A,M_RAL_MOV M,A_DCR H), при сдвиге в нескольких плоскостях — пропорционально меньше в 2–4 раза.
Давайте сравним эти показатели с некоторыми другими популярными ПК. Например, у дешёвого 16-битного БК-0010 скорость копирования блоков была до 150 Кбайт/с (у него нет разницы между скоростью стековых операций и обычной пересылки данных — копирование всегда делается одной командой типа MOV (R1)+, (R2)+, которая перемещает сразу 2 байта и автоматически инкрементирует/декрементирует регистры-указатели), скорость очистки области памяти — до 212 Кбайт/с (командой CLR (R1)+), скорость заполнения памяти каким-то значением — до 185 Кбайт/с (командой MOV R1, (R2)+), скорость горизонтального программного попиксельного сдвига — 424 тысячи цветных или монохромных точек в секунду (2хROL -(R1)=18.8 мкс на сдвиг 8-ми точек) при обычном разрешении (256х256) или 848 тысяч монохромных в высоком разрешении (512х256). Кстати, если под пересылкой блоков памяти подразумевается работа именно с видеопамятью, то здесь у БК (как и у многих других ПК) также есть тонкость: скорость копирования в точках зависит от текущего режима цветности — для цветного экрана 256х256 в одном байте всегда содержится 4 точки, а для монохромного 512х256 — 8 точек. То есть, например, если «Вектор» копирует точки в обычном режиме 256х256 лишь в одной плоскости, то он будет это делать намного быстрее (по числу точек в секунду), чем БК-0010 — 1088 тыс. точек/с (с помощью POP) против 600 тыс. точек/с. Но при копировании 4-цветного изображения (две плоскости «Вектора») уже БК будет несколько быстрее — 600 тысяч точек в секунду против 544-х.
Для ZX Spectrum показатели примерно такие: максимальная скорость копирования блоков памяти обычными командами типа LDI или LDD (16 тактов на байт) — до 218 тысяч байт/сек (без учёта возможного торможения), заполнение памяти каким-то значением или небольшой цепочкой байтов (через PUSH, без учёта торможения) — до 636 тыс. байт/с.
У Commodore 64 и других ПК на процессоре 6502 с частотой около 1 МГц (Apple II, Oric, «Агат», «Правец» и т.д.) максимальная скорость копирования — около 120 тыс. байт/с.
В общем, как видим, «Вектор» при работе с памятью, в том числе при выводе на экран по скорости вполне сравним с 16-битным БК-0010 (а в каких-то случаях может быть даже вдвое быстрее!). «Спектрум», имеющий более продвинутый процессор Z80, работает с памятью в 1,5 с лишним раза быстрее (при условии отсутствия торможения), зато, в отличие от «Вектора», не имеет никакой аппаратной поддержки игровой графики.
В 90-е годы энтузиасты «Вектора» иногда меняли процессор КР580ВМ80А на более современные: КР580ВМ1 (ВМ80 с расширенной системой команд, увеличенной скоростью и одним напряжением питания вместо 3-х) или всё тот же Z80. Причём замена на Z80 позволяла увеличить до 15–20% скорость работы даже обычных программ, рассчитанных на КР580ВМ80А (за счёт меньшего числа тактов у некоторых команд Z80) и, естественно, расширяло набор ПО, совместимого с «Вектором» (скажем, часть программ для CP/M, вроде Турбо-Паскаля, не поддерживали i8080, работая только на Z80).
Мифы о «Векторе»
Все владельцы «Вектора» хорошо понимали, насколько велики возможности этого ПК, причём в разных сферах применения, включая и развлекательную — лучшие векторовские игры ничуть не уступали аналогам на других недорогих домашних компьютерах, в том числе и наиболее известных зарубежных.
Однако у тех, кто знаком с «Вектором» лишь поверхностно, часто возникает ложное впечатление о медленности ПК («ведь у него же процессор не Z80, а самый простейший советский КР580»), связанное, в том числе, с высоким качеством графики и большим объёмом видеопамяти (якобы «медленному» процессору совершенно невозможно справиться с такой огромной видеопамятью, поэтому вся чудесная графика «Вектора» годится, вроде как, лишь для отображения статичных картинок). Особенно трудно избавиться от этой иллюзии владельцам «Спектрум»-совместимых, которые привыкли к аксиоматичной для них мысли: «чем меньше видеопамять и быстрее процессор, тем лучше». К счастью, создатели «Вектора», судя по всему, не были близко знакомы с параметрами «Спектрума» и сделали ПК с полностью противоположной видеосистемой — с максимально возможной для дешёвого 8-битного ПК видеопамятью, с «честным» (без всяких атрибутов) отображением до 16 цветов, 4-плановой структурой экрана, многоцветной (256 цветов!) палитрой, организацией видеопамяти «по столбцам» и аппаратным вертикальным скроллингом. Заодно, в отличие от первых «Спектрумов», предусмотрели и аппаратный 3-канальный звук. И они не прогадали — компьютер получился и быстрый, и с невероятными на то время графическими способностями.
Как же так получается? Как же простенький 8-битный процессор управляет 32-килобайтной видеопамятью, если на том же «Спектруме» гораздо более мощный Z80 нередко с трудом справляется с почти монохромными 6-ю килобайтами?
Ничего мистического здесь нет, просто «Вектор» имеет гениально простую и эффективную архитектуру видеосистемы, сильно отличавшуюся от подавляющего большинства других недорогих ПК.
«Медленный» процессор
Но сначала уделим немного внимания основной «претензии» к «Вектору»: применению самого простого и дешёвого процессора КР580ВМ80А, который часто был заметно медленнее, скажем, Z80, знакомого многим по известным иностранным моделям ПК и их отечественным аналогам. Однако здесь возникают сразу два «встречных вопроса»: насколько же конкретно ВМ80 отставал от других 8-битных процессоров (если отставал) и была ли вообще у разработчиков «Вектора» какая-то альтернатива при выборе процессора?
Подробное сравнение ВМ80 с Z80, 6502 и другими иностранными моделями давайте отложим до следующего раза — тема уж больно интересная и обширная. Но кратко можно заметить, что никакого катастрофического отставания ВМ80, в среднем, конечно, не было, тем более относительно таких процессоров, как 6502 и 6809 на частоте 1 МГц и менее, которые применялись в очень многих популярных зарубежных компьютерах. Пока же могу посоветовать взглянуть на таблицу скорости выполнения простейших тестов на Бейсике (а большинство интерпретаторов Бейсика на ПК 80-х были одного происхождения — от Microsoft и обычно имели достаточно близкие «алгоритмы» работы), дающую некоторое представление о средней скорости соответствующих ПК в неигровой сфере: https://docs.google.com/spreadsheets...it?usp=sharing. Кроме того, есть и такое чисто субъективное ощущение: при подробном знакомстве с самыми быстрыми и лучшими советскими ПК на базе КР580ВМ80А — «Корветом», «Вектором-06Ц», «Орионом-128» — отнюдь не возникает какого-то ощущения «тормознутости»; наоборот, учитывая достаточно высокие разрешения (512х256 у «Корвета», 384х256 у «Ориона»), многоцветную графику и большой объём видеоОЗУ (а у «Корвета», к примеру, целых 48 Кбайт видеопамяти (или 192 Кб с 4-мя кадровыми буферами)), можно отметить, что, скажем, многие игры на них идут удивительно шустро, гораздо быстрее, чем можно было ожидать. Это же можно сказать и о работе с операционными системами и прикладными программами (хотя в них, как и в играх, многое зависит от квалификации их создателей и от выбранных режимов работы экрана).
Ответ на второй вопрос вполне очевиден: к сожалению, в середине 80-х никаких других относительно дешёвых и доступных для советских разработчиков-любителей процессоров не было. Единственным массовым 8-битным микропроцессором в СССР был именно КР580ВМ80А (он же в более раннем обозначении — КР580ИК80А). Другие советские 8-разрядные процессоры были очень редкими, и в массовых ПК вообще не применялись — речь идёт о 1821ВМ85 (аналоге Intel 80C85), а также появившихся в конце 80-х–начале 90-х К580ВМ1 (улучшенный вариант ВМ80А) и военных 4.К602ВМ1 (аналог 65С02). Первые отечественные аналоги Z80 появились лишь в 1991 году, на волне «синклеромании» (Т34ВМ1/К1858ВМ1). Многочисленные 16-разрядные и секционные процессоры, выпускавшиеся советской промышленностью (серии 1801, 1806, 1807, 1810, 1811, 1831, 581, 588, 589, 1800 и т.д.) вовсе не относились к дешёвым и доступным. Например, все модели с системой команд PDP-11 (1801, 1806, 1811 и др.) применялись в ПК, производимых исключительно в рамках министерства электронной промышленности СССР (к которому кишинёвский «Счётмаш», например, не относился) и наряду с другими 16-битными процессорами в то время использовались, как правило, в сложных и очень дорогих профессиональных ПК (ДВК, «Электроника-85», серия 1810 — в IBM-совместимых EC-1840, «Нейрон», «Искра-1030» и т.д.), почти не касаясь дешёвых и, тем более, домашних компьютеров (конечно, не считая единственного исключения — 16-разрядного БК-0010).
Таким образом, принимая во внимание явное стремление Д.Темиразова сделать простой, дешёвый, «бездефицитный» и доступный для сборки ПК, нужно признать, что он сделал вполне правильный и логичный выбор (и он «поддержан» другими разработчиками первых советских недорогих ПК — практически все они, за исключением «Спектрум»-совместимых, основаны на КР580ВМ80А). Впрочем, никакого выбора, скорее всего, действительно, не было — он использовал тот процессор, который, опять же, был единственно доступным и единственно возможным. Применение зарубежных процессоров тогда, в середине 1980-х, было бы почти фантастическим проектом, который уменьшал и так небольшие шансы на промышленное производство «Вектора» до уровня ниже нуля (да и зачем, собственно, нужны были иностранные процессоры? Это в «Спектрум»-совместимых, о которых во время разработки «Вектора» и речи не было, без Z80 никак не обойтись (или в «Агате» без хоть какого-нибудь аналога 6502), а в других-то ПК к чему такие проблемы?). Использование советских 16-битных также никак не ассоциировалось с недорогими ПК и также резко снижало бы вероятность серийного производства ПК.
«Вектор» и «Радио-86РК»
У тех, кто только начал знакомится с советскими домашними 8-битными ПК, может возникнуть впечатление, что все они, в той или иной степени, были какими-то аналогами простейшего «любительского» компьютера «Радио-86РК»: все они на одном и том же процессоре ВМ80А, используют какие-то общие микросхемы из того же микропроцессорного комплекта К580 (например, ВВ55), имеют во многом схожие клавиатуры и т.д. Тем более, что у того же «Вектора» в инструкции прямо заявлено о его совместимости с такими ПК, как «Микро-80», «Радио-86» и «Микроша». Однако, это впечатление ложное: все основные классы отечественных 8-битных ПК на базе ВМ80А — «Радио-86РК» и аналоги, «Специалист» и аналоги, «Вектор» и аналоги, ПК8000, «Искра-1080», ПК-01 «Львов», «Орион-128», «Корвет» — были вполне самостоятельными по архитектуре и, к сожалению, слабо совместимыми друг с другом. А заявленная для «Вектора» совместимость с «Радио-86РК», «Микрошей» и т.д. (самыми простейшими ПК на базе ВМ80) означала лишь то, что при загрузке в ОЗУ «Вектора» специального эмулятора, имитирующего системный монитор этих ПК, часть программ для них (использующих для работы с клавиатурой и экраном строго функции этого монитора, а не прямое обращение к «железу») могла исполняться и на «Векторе». Что, однако, на практике почти не использовалось за ненадобностью — под «Вектор» изначально, ещё до начала серийного производства, были разработаны все базовые системные программы: Бейсик, ассемблер, отладчик и т.д., так что особой необходимости в каких-то программах от РК не было.
В аппаратной архитектуре различия между РК и «Вектором» просто огромны: у последнего частота процессора почти вдвое (!) выше, вместо монохромного текстового режима экрана используется многоцветный графический, вместо программного «бипера» стоит аппаратный 3-канальный звукогенератор, вместо 16–32 Кбайт стандартного ОЗУ используется максимально возможный (без страничной адресации) объём в 64 Кбайта. Для «Вектора», в отличие от РК, с самого начала существовали стандартные варианты расширения памяти («квазидиск» от 256 Кбайт) и подключения дисководов с поддержкой СР/М и МикроДОС. Как ни удивительно, но такие разные по классу ПК не так уж сильно отличались по цене: «Вектор» продавался за 750 руб., а РК-совместимые — за 400-600 руб. Кстати, в этот же диапазон 400–750 руб. укладывались и почти все другие отечественные домашние ПК с ОЗУ не более 64 Кбайт (кроме ПК8000 и ПК8002, стоивших 1000 руб. и больше) — возможно, это также создаёт иллюзию того, что все эти ПК довольно близки по параметрам и возможностям. Но на самом деле все наши семейства домашних ПК совершенно разные и значительно отличаются — прежде всего, по организации экрана и звука — и все модели по-своему уникальны и интересны.
Четырёхплановая видеопамять
Почему-то у многих поклонников других ПК возникают трудности с пониманием, какие преимущества имеет многоплановая организация видеопамяти над линейным кодированием цвета (несколько точек в одном байте) или даже над атрибутной графикой. Видимо, это просто достаточно редкое решение, с которым многие почти не сталкивались (хотя подобная видеопамять применялась и в IBM PC с EGA, и в «Амиге» с Atari ST, и в советских «Корвете» с УКНЦ).
Главные достоинства 4-плановой системы с программируемой палитрой: большая гибкость в выборе объема видеопамяти и количества отображаемых цветов (память от 8 до 32 килобайт, от 2 до 16 цветов), возможность аппаратного наложения друг на друга до 4-х планов изображения (но чаще использовалось лишь 2 плана), возможность относительно быстрого программного скроллинга монохромного (или, гораздо реже, 4–8-цветного) фона и экономный расход памяти при хранении графики.
Аппаратное наложение планов
Хитрость с аппаратным наложением основана на том, что можно так запрограммировать цвета (ведь у нас же любому из 16-ти логических цветов можно присвоить любой из 256 реальных цветов), что объекты, находящиеся в одних плоскостях будут полностью (или даже с «полупрозрачностью»!) перекрывать объекты в других. Например, мы хотим наложить друг на друга четыре прямоугольника: синий (самый дальний), красный, зелёный и белый (самый ближний). Для этого палитра задаётся таким образом (один из вариантов): нулевой цвет (фон) любой необходимый (скажем, серый), первый цвет (0001) — синий, второй цвет (0010) — красный, 4-й (0100) — зелёный, 8-й (1000) — белый. Остальные цвета задаются так, чтобы при пересечении они давали ближний к нам цвет: 3-й (0011) — красный (как и 2-й), 5-й (0101) — зелёный (как 4-й), 6-й (0110) и 7-й (0111) — тоже зелёный (снова как 4-й), 9-й (1001), 10-й (1010), 11-й (1011), 12-й (1100), 13-й, 14-й и 15-й (1111) — белый. Теперь при любом пересечении объектов любой формы тот, который в 3-й (ближней к нам) плоскости, будет перекрывать те, что в 0–2-й плоскостях, 2-я плоскость будет перекрывать 0-ю и 1-ю, 1-я плоскость перекрывать нулевую.
Причём всё это справедливо и при задействовании не всех 4-х, но и 2–3-х плоскостей. Кроме того, совсем не обязательно использовать 4 независимых плоскости, в каждой из которых находятся монохромные объекты, можно плоскости объединить, чтобы, например, 1-цветные объекты (одна плоскость) накладывались на 8-цветный фон (три других плоскости) — см. игры Lemmings, Xyzolog, Crazy Train и т.д. Или 7-цветные объекты (три передних плоскости) на двухцветный фон (одна задняя) — как в Wonder House. Часто использовался вариант с двумя плоскостями переднего плана и двумя заднего плана, что давало возможность накладывать 3-цветные объекты (обычно движущиеся спрайты) на 4-цветный фон, и этих семи цветов, в общем-то, вполне хватало для создания достаточно красивой, цветной картинки (см. «Амбал», «Гротоход», Tower).
Если 5–9 цветов мало, то в ряде случаев (например, когда фон, в пределах которого перемещаются спрайты, в основном одноцветный) можно вместо полного перекрытия планов применять обычную 16-цветную графику, но так, чтобы перекрывающиеся объекты (спрайты и фон) находились в разных плоскостях — тогда манипуляция графикой будет такой же быстрой, но при наложении спрайтов на сложный фон цвет спрайтов может меняться (а для элементов фона, которые никогда не перекрываются спрайтами, можно спокойно использовать все 16 цветов).
Палитру при необходимости можно запрограммировать так (и выбрать такие плоскости для спрайтов и фона), чтобы спрайты не только находились ПЕРЕД фоном, но и наоборот — ЗА фоном, в том числе и одновременно — впереди одних элементов фона и позади других.
Понятно, что аппаратное наложение спрайтов на фон происходит очень быстро: как правило, просто копируются нужные объекты из памяти в соответствующее место экрана и всё — не нужно никаких сложностей с наложением логическими операциями, предварительным стиранием фона теневой маской, сохранением участков фона в буфере или восстановлением фона под спрайтами и т.д. И это прекрасно компенсирует сравнительно низкую скорость процессора «Вектора», позволяя реализовать достаточно сложные в динамическом плане игры.
Теневые буферы
Кроме того, высокая скорость вывода графики (аппаратное наложение спрайтов на фон, а также и другие описанные особенности ПК) позволяет обойтись без использования теневого буфера, который часто применялся на том же «Спектруме», чтобы избежать неприятных мерцаний и изломов на объектах и сдвигаемом фоне. Соответственно, не надо тратить память на буфер (что в режиме 32-килобайтного экрана всё равно практически невозможно и время на его копирование в видеопамять. Однако, если выводится достаточно сложная графика, которая всё же требует буферизации (например, вычисляемая 3D-графика или изометрия), видеоконтроллер «Вектора» позволяет легко организовать два независимых экранных буфера — скажем, полноэкранных 4-цветных (или монохромных, если надо) либо 8-цветных высотой в полэкрана (во втором случае для переключения экранов используется также аппаратный скроллинг и затенение половины экрана непрозрачной маской). Горизонтальный скроллинг
Значительное достоинство «Вектора» относительно моделей типа БК-0010, «Львова», IBM PC/CGA, Apple II, Acorn Electron, Tandy Color Computer, Amstrad CPC и т.д. — гибкость реализации программного скроллинга, что было особенно актуально для горизонтального сдвига (ведь вертикальный у «Вектора» аппаратный!). Причём именно программный скроллинг — это явное слабое место подобных ПК, особенно имевших простые 8-битные процессоры и сравнительно большой объём видеопамяти при отсутствии каких-либо аппаратных средств для ускорения этого самого скроллинга. А у «Вектора», к тому же, достаточно медленный процессор, серьёзно уступающий по скорости копирования и сдвига, скажем, моделям на основе Z80.
Наверное, не всем понятно, насколько «Вектор» в этом смысле отличался от других ПК — дело здесь в том, что при более привычном «линейном» кодировании цветов (2-4 точки на байт, как у всех только что перечисленных ПК) программный скроллинг В ЛЮБОМ СЛУЧАЕ требовал обработки большого объёма данных (равного «число точек Х количество бит на точку в выбранном видеорежиме»), даже если достаточно было сдвигать лишь одноцветный фон. Это связано именно с тем, что цвета точек хранились как последовательности битов по несколько точек в одном байте. А это означало, что никакой возможности разделить отдельные биты в коде цвета и быстро обрабатывать (сдвигать) их по отдельности не было. Если взять для примера, скажем, некий гипотетический 4-цветный ПК с «линейным» цветокодированием (2 последовательных бита на точку) на том же процессоре ВМ80А, то в одном случае — при быстром побайтовом скроллинге (копировании всего байта целиком, без сдвига, с шагом, кратным 4-м точкам) областей одинакового размера в точках — придётся выполнять примерно вдвое больше операций, чем на «Векторе» при сдвиге одной плоскости (поскольку при равном числе точек надо сдвигать вдвое больший объём памяти). А в другом варианте — медленный побитный скроллинг командами сдвига через перенос — даже вчетверо (!) больше операций сдвига (т.е. цепочек типа MOV A,M, RAL, MOV M,A, DCX или DCR H), чем при сдвиге одной плоскости «Вектора». То есть «Вектор» мог делать медленный (попиксельный) горизонтальный скроллинг ВЧЕТВЕРО быстрее (но только одной монохромной плоскости) аналогичных по мощности и типу процессора моделей, имеющих последовательное 2-битное кодирование цвета, либо ВДВОЕ быстрее при сдвиге точно такого же 4-цветного фона. Откуда же берётся двукратное преимущество «Вектора» при одинаковом количестве цветов и одинаковом количестве сдвигаемых точек? А вот откуда. Пусть нам нужно сдвинуть на одну точку влево строку из 256 точек (это типичное горизонтальное разрешение многих ПК) — «Вектору» для этого понадобится всего 32 операции (так как в строке 32 байта) «чтение-сдвиг-запись» (для одной плоскости), а сколько понадобится тому же гипотетическому ПК с двухбитным «последовательным» цветом? В каждой строке экрана (256 точек) у такого ПК не 32 байта, а 64 (по 4 точки в каждом), и, поскольку каждая точка занимает два бита, для сдвига всей строки на одну точку понадобится сдвигать каждый байт по два раза — причём не просто двумя последовательными RAL, а повторяя двукратно все цепочки из вышеупомянутых 4-х команд MOV, RAL и DCX. Таким образом, на этом ПК мы получаем уже 128 цепочек сдвига — 64 байта надо сдвинуть по 2 раза, что и даёт 4-кратное отставание от монохромного сдвига «Вектора» и 2-кратное от 4-цветного (в двух плоскостях).
Единственное гипотетическое преимущество линейного цветокодирования в плане скроллинга — меньший шаг при ступенчатом побайтовом сдвиге, особенно при 4-х битах на точку (тогда обычное побайтное копирование даёт шаг сдвига всего в 2 точки, и его часто можно было бы использовать вместо более медленного побитного (на 1 точку) плавного сдвига). Однако давайте представим, что «Вектор» снабдили именно такой видеосистемой (2, 4 или 8 точек на байт (4, 2 или 1 бит на точку) — как у Tandy CoCo 3, имеющего близкие разрешения) — и что это нам даст? Использовать в таком случае для программного сдвига 16-цветный режим практически бессмысленно — да, можно получить достаточно плавный (на 1/128 экрана при разрешении 256х256) горизонтальный скроллинг, но при 32 Кбайтах экранной памяти и максимальной скорости копирования порядка 130 Кбайт/с «Вектор» с более-менее приемлемым качеством потянет на практике никак не больше 1/4 экрана (8 Кбайт), а скорее ещё раза в 2–3 меньше (всего лишь 1/8–1/12): ведь кроме скроллинга в игре нужно делать ещё что-то, а у нас, между прочим, аппаратного наложения планов-то теперь нет — поскольку нет и самих планов, кодирование цвета «последовательное». То есть говорить о каком-то многоцветном скроллинге значительной части экрана просто не приходится: необходимо переходить в 4-цветный режим (и сдвигать не более 1/4 экрана, причём с шагом уже 1/64 ширины изображения — а такой скроллинг можно легко и быстро получить и на реальном «Векторе», используя вместо настоящего сдвига копирование на экран элементов фона, заранее сдвинутых на 4 точки) или вообще в монохромный (тогда до 1/2 экрана — а это уже неплохо, но скроллинг тогда будет явно ступенчатый и очень быстрый, 1/32, что ничем не отличается от реального, «многопланового», «Вектора») — но всё это лишь при маловероятном условии сохранения одинакового разрешения экрана, а не росте его вместе с уменьшением цветности (как было у Amstrad CPC, БК-0010, IBM PC/CGA и т.д.), когда объём экранной памяти не уменьшается, и снижение цветности не даёт ускорения скроллинга. При этом в любом случае использование плавного побитного сдвига (например, в 4-цветном режиме) будет также почти бессмысленным, так как его скорость упадёт в 2–4 раза относительно реального «Вектора» (в 4 раза — при сдвиге монохромной картинки).
Вот это сюрприз — переход от плоскостей к последовательному цветокодированию сразу создаёт огромные проблемы: 1) исчезает аппаратное наложение планов («будьте добры, делайте теперь, как все — используйте теневые маски, медленные логические операции вместо быстрых PUSH и POP, восстановление фона при перемещении объектов и т.д., а как вы хотели — аппаратных спрайтов-то нет»); 2) напрочь улетучивается гибкость видеосистемы и конфигурации ОЗУ («куда там — «хочу, использую 8 Кбайт видеопамяти и 2 цвета, хочу, 32 Кбайта и 16 цветов или наложение 3 цветов на 4, а хочу, 24 Кбайта и 8 цветов и т.д.», не-е-т — вот вам 32 Кб и три разрешения с разной глубиной цвета, играйтесь теперь с ними, как хотите, но расширить пользовательское ОЗУ за счёт видеопамяти нельзя, ускорить вывод на экран за счёт снижения разрешения или цветности тоже нельзя и т.д.»); 3) возникают невероятные сложности с горизонтальным скроллингом («как это вы хотите иметь многоцветное изображение, но сдвигать лишь монохромный фон — где вы такое видели?, делайте, как у всех — сдвигайте весь многоцветный (16 цветов) фон (ну, конечно, насколько хватит скорости процессора или уменьшайте цветность хоть до 2-х, но это вам всё равно ничего не даст в плане скорости скроллинга»); 4) появляются странные проблемы с экономным хранением графики в памяти (см. ниже). Это же просто кошмар — и как же бедные программисты делали игры на таких ПК, не имеющих ни поддержки спрайтов, ни программируемого аппаратного знакогенератора, ни, как правило, аппаратных скроллингов, ни аппаратного наложения планов, как Amstrad CPC, BBC Micro / Acorn Electron, Tandy CoCo / CoCo2 / Dragon 32/64, Thomson, IBM-совместимых с CGA и т.д. Получается, что «спасало» либо низкое горизонтальное разрешение в многоцветном режиме экрана и сравнительно небольшая видеопамять при достаточно мощном процессоре (как у BBC Micro или Amstrad CPC), либо просто отсутствие многоцветного режима и небольшая видеопамять при довольно быстром процессоре (БК-0010/0011М, IBM c CGA), либо самый минимальный объём видеопамяти при любом процессоре (от 6 Кбайт — Tandy CoCo, ZX Spectrum и т.п.).
Игра «Морской охотник-2»
Кстати, в реальных векторовских играх максимальный объём плавно (побитно) сдвигаемого горизонтально изображения был всего-то около 3–4 Кбайт (примерно до половины монохромной плоскости экрана — например, «Морской охотник 2», где сдвигаемая область выглядит достаточно внушительной по размеру), причём скорость сдвига обычно была порядка 8–12 раз в секунду, и выглядел он вполне плавно. А вот ступенчатый побайтный сдвиг мог быть самый разный – от 1–2 Кбайт (передний план в Fatax и т.п.), до 26 Кбайт (16-цветное игровое поле в Rockford, скорость «скроллинга» — около 3-х сдвигов в секунду, хотя можно было бы сделать и пять .
Игра «Rockford»
Разговоры об относительно высокой скорости скроллинга монохромной графики (одной плоскости) на «Векторе» могут создать ложное впечатление, что такой скроллинг подразумевает использование в игре чисто монохромной графики. Это, конечно, не так — монохромной должна быть лишь сдвигаемая часть фона, а всё остальное — каким угодно. Неподвижные части фона могут быть многоцветными, скроллинг может быть параллаксным (скажем, сравнительно узкая дальняя часть сдвигается медленно попиксельно и окрашена в один цвет, а ближняя — быстро побайтово, причём с другим цветом (находится в другой плоскости)), спрайты могут точно также аппаратно (или, при желании, программно) накладываться на фон в любом режиме (от «1 на 8», до «7 на 2»). То есть вся остальная графика, кроме непосредственно сдвигаемого фона, может быть очень даже цветной.
«Столбцовая» видеопамять
Ещё одно преимущество «Вектора», не всегда понятное владельцам других ПК — столбцовая организация видеопамяти. А ведь это также даёт порой существенное ускорение: допустим, нам нужно очистить какую-то область экрана размером 16х16 точек или вывести в неё некую мелкую текстуру (скажем, шахматную) и представим, что экран «Вектора» организован по строкам (как у БК-0010, ПК-01 «Львова», «Спектрума» и т.д.), тогда для вывода такого мелкого, но вполне обычного кусочка экрана нам, к сожалению, почти нет никакого смысла использовать стековые операции — после каждого PUSH (отображающего сразу 16 горизонтальных точек) придётся ставить команды, корректирующие указатель стека да ещё учитывать возможную разность изображения в разных строках. Т.е. последовательность команд для заполнения одинаковыми байтами или 2-байтными словами будет выглядеть, например, так (в HL — начальный адрес блока на экране, в DE — число 32 (если строки следуют линейно друг за другом)): SPHL, PUSH В, DAD D (в сумме — 36 тактов на 2 байта), и так 16 раз — длина кода 48 байт. Если же нам нужно выводить разные байты в разных строках (как при мелкой шахматной текстуре), то в этом случае для быстрого вывода на экран просто не хватит регистров — нужна 4-я, свободная, пара, которой нет, то есть эту простую последовательность придётся как-то усложнять и замедлять. При этом заполнение без стековых операций выглядит так (повторить 16 раз): MOV M,C, INX H, MOV M,B, DAD D (в DE находится число 31; в сумме примерно те же 36 тактов на 2 байта), длина кода развёрнутого цикла — 63 байта (последний DAD не нужен). Кроме того, вариант без стековых операций позволяет легко выводить и нашу шахматную текстуру: достаточно чередовать вывод на экран из регистров C и B — одна 16-точечная строка заполняется двумя одинаковыми байтами из С, а следующая строка — из B.
Как же вывод подобных объектов делается на реальном «Векторе» с «постолбцовым» экраном? Вы, наверное, уже догадались — да, как правило, всё делается одной-единственной повторяющейся командой записи в стек (но прерывания, конечно, при этом выключаются, чтобы не нарушать вывод на экран и работу программы): два раза повторяем последовательность команд SPHL, PUSH B, PUSH B, PUSH B, PUSH B, PUSH B, PUSH B, PUSH B, PUSH B, INR H и всё (длина основной части кода с развёрнутым циклом — всего 20 байт!). Получаем около 18 тактов на вывод 2-х байт (333 тыс. байт/с) — ровно в 2 раза быстрее, чем на гипотетическом «построчном» экране. Причём никаких проблем с шахматными текстурами — команда PUSH выводит содержимое регистров С и В друг над другом, по вертикали, поэтому они как раз и образуют любую нужную текстуру размером 8х2. Более того, поскольку пара регистров DE здесь не используется, то и её можно задействовать без какой-либо потери в скорости для отображения более сложных текстур — 8х4 точек, чередуя PUSH B и PUSH D.
Если посчитать скорость вывода на экран таких же объектов типа шахматной текстуры размером 16х16 точек (или просто очистки области экрана 16х16 точек) у «Спектрума» (типичная «построчная» видеопамять, хотя и нелинейная — после первой строки в памяти идёт девятая, потом 17-я и т.д.) при аналогичном подходе, то получаем: LD (HL),C, INC L, LD (HL),C, INC H, LD (HL),B, DEC L, LD (HL),B, INC H, повторить всё 8 раз (длина основной части кода с развёрнутым циклом — 64 байта). То есть скорость заполнения равна (без учёта возможного торможения процессора) 11 тактов на байт, или до 318 Кбайт/с — даже чуть медленнее, чем у «Вектора» (хотя, например, по показателям скорости копирования длинных блоков «Спектрум» быстрее «Вектора» в 1,5-2 раза). Причём применение стековых операций здесь также не поможет ускорить процесс — слишком коротка цепочка PUSH (всего одна команда), после которой приходится корректировать указатель стека. Специфические команды Z80 для копирования блоков (LDI, LDD и т.д.) тем более ничего не дадут, так как у них копирование одного байта займёт не меньше 16 тактов.
Конечно, надо отметить, что это лишь частный пример, и далеко не всегда столбцовая видеопамять существенно превосходит по скорости строчную. Но принцип здесь понятен: поскольку большинство объектов на экране имеют «квадратный» размер в точках (8х8 точек, 16х16, 32х32 и т.д.) или примерно квадратный, а в одном байте размещается 8 монохромных горизонтальных точек, то число байтов в высоту практически у всех графических объектов в разы больше, чем в ширину. Поэтому организация по столбцам позволяет в той или иной степени сократить «накладные расходы» на организацию циклов и коррекцию индексных регистров, особенно при использовании стековых операций, а также при относительно небольшом размере выводимых объектов. И уж, во всяком случае, практически нет никаких реальных задач, когда на одном и том же ПК строчная организация экрана была бы быстрее или удобнее (или экономичнее по памяти) столбцовой.
Другая тонкость — все эти расчёты для «Вектора» приведены применительно к одной монохромной плоскости, а если требуется вывод в несколько планов, то скорость будет пропорционально, в 2–3–4 раза, ниже (однако и на ПК, имеющих «строчную» видеопамять, при росте числа цветов скорость также будет пропорционально падать). Впрочем, в большинстве векторовских игр и программ основные объекты как раз выводятся лишь в одну-две плоскости, и скорость их отображения в любом случае остаётся высокой.
Экономный расход памяти
Очень любопытен и другой эффект «многоплановой» видеопамяти — она не только ускоряет вывод на экран, но и позволяет часто в разы экономить память! Суть здесь очень проста: у ПК с «последовательным» цветокодированием (БК, «Львов», Amstrad CPC, BBC Micro, Apple II и т.п.) быстрый вывод на экран (а он у них итак достаточно «неторопливый») возможен только при хранении в памяти объектов в «готовом виде» — именно таком, в котором они будут сразу копироваться в видеопамять (2 или 4 бита на точку, по 4 или 2 точки на каждый байт). А что делать, если объекты монохромные (а такое в играх — сплошь и рядом)? Тогда они будут храниться с явной избыточностью, ведь вместо 1 бита на точку они будут занимать в памяти целых 2 бита (при 4-цветной графике) или даже 4 бита (16-цветный режим). Аналогично 4-цветные объекты будут занимать вдвое больше места на 16-цветном ПК, чем могли бы. И эта ситуация достаточно распространённая — например, при переносе игр со «Спектрума» на БК-0010/0011М или «Львов» подобные трудности возникали постоянно: у «Спектрума»-то графика хранится практически в монохромном виде, а, скажем, на БК-0010, мало того, что пользовательская память в 2,5 раза меньше, так ещё и на хранение той же графики могло требоваться вдвое больше места (2 бита на точку вместо 1-го с хвостиком). Представляете чувства бэкашного программиста, решившего перенести какую-то игру с «Синклера»? На «Львове» память пользователя втрое превосходит таковую на БК-0010 и несколько больше спектрумовской, но при простом переносе графики (1 бит «Спектрума» в 2 бита «Львова») даже её может не хватить.
Соответственно, возникает интересная проблема (и не только на БК и «Львове», но и на всех ПК с «последовательным» цветом): как вообще экономно хранить графику в памяти, да ещё и по возможности быстро выводить её на экран. Однако основных вариантов здесь немного: если требуется быстрый вывод на экран (спрайты, программно движущийся фон), то приходится хранить объекты, независимо от их реальной «цветности», в том самом «готовом» виде — по 2 или 4 бита на точку, несмотря на большой расход памяти; а если допускается медленный вывод на экран (статичный фон) — можно хранить и в монохромном виде, «распаковывая» графику непосредственно при её копировании в видеопамять. Но во втором случае вывод на экран может замедляться в разы — ведь для этого придётся использовать достаточно долгое преобразование с помощью сдвигов или более быстрое таблицами (но под таблицы нужно ещё выделять немало памяти). Возможно, по этой причине БКшные порты игр со «Спектрума» часто имеют такую неторопливую перерисовку экранов (в Phantis — порядка 1,3 сек!). С другой стороны, нет худа без добра: на многих подобных ПК (опять же БК, «Львов», Amstrad CPC, BBC Micro и т.д.) программисты не заморачивались подобной экономией памяти и процедурами «распаковки» монохромных объектов, а просто рисовали многоцветные спрайты и элементы фона, создавая яркую, красивую картинку, временами заметно отличавшуюся в лучшую сторону от нередко почти монохромных аналогов на том же «Спектруме» (хотя возможный «объём» графики, конечно, при этом был в разы меньше).
Чем же в этом плане выделялся «Вектор»? Благодаря 4-плановой видеопамяти, у «Вектора» таких проблем не было вовсе! Вся графика могла занимать оптимальный объём — монохромная храниться в формате 1 бит на точку, 4-цветная — в виде двух монохромных планов и т.д. При этом для получения нужного цвета при выводе на экран достаточно было для каждой монохромной плоскости указать 4-битный код, показывающий, в какие плоскости экрана она должна копироваться. Кроме того, если монохромный объект выводился лишь в одну плоскость (а такое было очень часто), то и скорость его отображения была очень высокой (в 2-4 раза больше, чем на близких по мощности процессора ПК с «последовательным» цветокодированием). То есть, никакого медленного преобразования графических объектов с «экономной» глубиной цвета в глубину цвета выбранного экранного режима никогда не требовалось. Фактически «Вектор» позволял хранить графику в таком же экономном виде, как ПК с атрибутным видеоконтроллером (ZX Spectrum, Commodore 64, MSX) и зачастую почти также быстро выводить её на экран, но имел и возможность отображения сложной, многоцветной графики без каких-либо атрибутных ограничений.
Вертикальный скроллинг
Ну и, наконец, давайте коснёмся и последней функции ускорения графики у «Вектора» — аппаратного вертикального скроллинга. Фактически, это редчайшая способность для неигровых ПК, и она, вместе с другими незаурядными графическими «фишками», выводила «Вектор» в ряд наиболее мощных и универсальных 8-разрядных домашних компьютеров, в том числе приближая его по игровым возможностям к чисто «геймерским» моделям вроде Commodore 64 и Atari. Суть аппаратного скроллинга вполне понятна: «Вектор» мог начинать отображать экран с любой строки (указанной в специальном регистре), что давало возможность без всякой загрузки процессора сдвигать его мгновенно или плавно (с небольшим смещением в каждом кадре) вверх или вниз на любой шаг.
Использовалась эта функция постоянно — при выводе текста, а вот в играх, к сожалению, не так часто, как хотелось бы. Возможно, из-за этого можно встретить опасения такого плана — «ну да, хорошо, что есть аппаратный скроллинг (ещё бы!), но хватит ли «медленному» процессору «Вектора» скорости для того, чтобы успевать «дорисовывать» изображение во время скроллинга и, главное, постоянно перерисовывать или сдвигать неподвижные элементы картинки (как правило, «табло» с очками, жизнями и т.п., которое надо программно «сдвигать обратно» при каждом аппаратном смещении экрана)». Опасения эти, безусловно, по большей части совершенно беспочвенны: даже при копировании фона самым медленным способом «Вектор» может поставлять данные для прокрутки со скоростью до трёх 16-цветных экранов в секунду. В самой быстрой векторовской игре такого плана, «Полёте», экран сдвигается почти в 8 раз медленнее — за 2,5 секунды, а в другом хите — Death Fight — аж за 15 секунд, причём у обеих игр фон, судя по всему, 4-цветный. То есть в реальных играх используется скорость отрисовки изображения всего лишь порядка 1–7 килобайт в секунду, что занимает порядка 1-7% всего процессорного времени. «Табло» в реальных играх на «Векторе» также совсем не обременяет процессор: в «Полёте» оно занимает лишь незначительную часть экрана (размером порядка 100 байт), в Step&Jump — лишь одну верхнюю текстовую строку (256 байт), в «Буре в пустыне» — примерно аналогично, одна строка (не более 256 байт), а в Death Fight никакого табло вообще нет, и это абсолютно не мешает играть (в ней номер зоны и число оставшихся попыток сообщается на отдельном экране и только перед началом уровня).
Фактически, привычные многим большие табло были нужны как раз лишь на ПК, лишённых аппаратного скроллинга и аппаратного наложения планов с весьма банальной целью — уменьшить размер игрового поля, чтобы процессор мог успевать всё отрисовать и чтобы не тратить слишком много памяти на теневой буфер. А игроки были бы только рады максимальному расширению игрового поля и минимизации «бесполезной» части экрана. Итак, для табло, в общем-то, более чем достаточно одной монохромной строки размером порядка 256 байт, и даже если восстанавливать положение этой строки 50 раз в секунду (хотя такая скорость скроллинга совсем не обязательна — вполне нормально, очень плавно, выглядели и 25 или 16 сдвигов в секунду), это потребует копирования примерно 13 Кбайт в секунду — где-то 10–15% процессорного времени (а при 25 сдвигах в секунду — вдвое меньше, при 12–16 сдвигах — втрое–вчетверо меньше). Всё остальное — те же задачи, которые стоят перед программистом в любых других играх, только на «Векторе» они сильно облегчаются аппаратным наложением планов, организацией экрана по столбцам и т.д. Так что, хотя какие-то трудности при создании игр со скроллингом, безусловно, возникали, они были гораздо менее серьёзными, чем у игрописателей на большинстве других домашних ПК. «Вектор», можно сказать, даже баловал программиста, давая такие возможности, о которых на других ПК можно было только мечтать.
Но, к большому сожалению, далеко не все «избалованные» векторовские программисты умели и хотели эффективно пользоваться этими естественными возможностями. Впрочем, учитывая отсутствие широкодоступной подробной информации об устройстве ПК и приёмах программирования вплоть до начала 90-х, а также принимая во внимание слабую конкуренцию между разными ПК и создателями игр и учитывая юный возраст и минимальный опыт многих векторовских программистов, удивляться достаточно большому количеству неудачных поделок и недоделок никак не приходится.
Промежуточные итоги
Таким образом, комбинация всех приёмов ускорения графики, характерных для «Вектора» давала огромные возможности при реализации игр самого разного типа, позволяя без особых проблем создавать и многоцветные (до 16 цветов на экране) игры на однородном фоне, и 7–9-цветные игры с аппаратным наложением переднего плана на задний (или до 4-х независимых монохромных планов), и любые по цветности игры с вертикальным скроллингом (обычно также с аппаратным наложением типа «1 на 8» или «3 на 4»), а также и вполне динамичные игры с горизонтальным скроллингом одноцветного фона достаточно большой площади (также с аппаратным наложением планов). Возможность гибкого выбора разрешения, цветности и, соответственно, размера видеопамяти была также очень удобна и при написании прикладных или системных программ, позволяя при необходимости увеличить пользовательское ОЗУ (до 48–56 Кбайт) за счёт уменьшения экранного и вообще подобрать наиболее оптимальное для программы количество цветов и разрешение.
Об играх и в целом о программном обеспечении, а также и других особенностях «Вектора», не затронутых этой статьёй (память, клавиатура, Бейсик, расширения, «клоны» и т.д.) и более подробное сравнение с другими ПК — во второй части, которая, надеюсь, вскоре появится.
Основные параметры ПК "Вектор-06Ц"
Основные параметры ПК "Вектор-06Ц" | |||
Параметры | Значение | Похожие по данному параметру советские недорогие ПК | Похожие иностранные ПК |
Год разработки / начала серийного производства | 1986 / 1988 | "Корвет", УКНЦ, ПК8000, "Львов", БК-0010-01/0011, РК-совместимые, "Специалист" и т.д. | Tandy CoCo3, MSX2+, Apple IIGS, Amiga-500 |
Цена (до 1991 г.) | 750 рублей | ПК-01 "Львов", часть БК-0010-01 | ориентировочно Commodore 64, Atari 130XE |
Процессор | |||
Тип процессора | 8-разрядный КР580ВМ80А (аналог Intel 8080A) | "Корвет", ПК8000, "Львов", РК-совместимые, "Орион", "Специалист" и др. | DAI PC (Бельгия), Tesla PMD 85, MATO, IQ-151 (все Чехословакия) и др. |
Тактовая частота процессора | 3 МГц | БК-0010 (но совсем другой процессор) | TI-99/4A, ABC80 (Швеция), оба с другими процессорами |
Эффективная тактовая частота | 2,2–2,4 МГц | частично "Корвет", "Орион", "Специалист" | NEC PC8001 (2,3 МГц) |
Память | |||
Объём ОЗУ | 64 Кбайта | "Львов", ПК8000, "Искра 1080 Тарту" | Commodore 64/+4, Atari 800XL/65XE, Amstrad CPC 464/664 |
Объём ОЗУ пользователя | 32–56 Кбайт | "Львов", ПК8000, "Искра 1080 Тарту", "Спектрум"-совместимые | Commodore 64/+4, Atari 800XL/65XE, Amstrad CPC 464/664, ZX Spectrum 48K |
Стандартное расширение ОЗУ | от 256 Кбайт (квазидиск) | IBM-совместимые ("Поиск", "Ассистент-128", МК-88, МС-1502, "Квазар" и др.) | ~ многие ПК |
Объём ПЗУ | 0,5 или 2 Кбайта | частично "Микроша", "Криста", "Орион", "Юниор" | практически нет (обычно не менее 4 Кбайт) |
Наличие Бейсика в ПЗУ | нет | "Микроша", "Криста", "Орион", "Юниор", "Апогей", ПК8002, "Поиск" и др. | очень мало моделей (Sharp MZ/X1, Thomson) |
Возможность подключения внешнего ПЗУ | да, до 32 Кбайт и более | большинство ПК | большинство ПК |
Стандартная внешняя память | магнитофон или дисководы (с внешним контроллером) | многие ПК | большинство ПК |
Экран | |||
Объём видеопамяти | от 8 (2 цвета) до 32 (16 цветов) Кбайт | нет (только самодельные ATM Turbo и подобные), частично "Орион" и "Искра 1080" (оба до 24 Кбайт) | Atari ST, Tandy CoCo3, Apple IIGS, Tandy 1000 |
Разрешения экрана | 256х256, 512х256 | БК-0010/0011М, частично "Львов", "Корвет" | Sinclair QL, ~ MSX2 (до 512х212), у большинства моделей схема 640х200 > 320х200 > 160х200 |
Типичное разрешение в играх | 256х256 | БК-0010/0011М, "Львов" | Sinclair QL, частично MSX/MSX2, ZX Spectrum |
Число одновременно отображаемых цветов (в стандартном режиме) | 2, 4, 8, 16 (256х256), 2 или 4 (512х256) | нет (только самодельные ATM Turbo и подобные), частично ПК8000, ПК8002 и "Орион" | Atari ST, Tandy CoCo3, Apple IIGS, Tandy 1000, MSX2 |
Общая палитра | 256 цветов | ПК8002 | частично Atari ST, MSX2, NEC PC-8801MKII (все 512 цветов), Tandy CoCo3 (64 цв.) |
Наличие аппаратного вертикального / горизонтального скроллинга | да / нет | БК-0010/0011М, УКНЦ | MSX2, частично Tandy CoCo3 (+ ступенч. гориз.), С64/128, Atari (+плавн. гориз.) |
Наличие аппаратных спрайтов | нет | все, кроме ПК8002 | большинство, кроме MSX/MSX2 и подобных, Commodore 64/128, Atari XL/XE |
Наличие аппаратного наложения планов изображения | да (до 4-х монохромных) | частично "Корвет" (3 плана), ПК8002 и "Искра 1080" (по 2 плана) | Thomson TO8, частично NEC PC-8801MKII, Fujitsu FM-77AV (у обоих 3 плана) |
Наличие нескольких переключаемых видеобуферов | да (до 4-х монохромных) | "Орион-128", ПК8000, частично БК-0011/0011М, клоны ZX Spectrum 128K (по 2 б.), "Корвет" (до 3 или 12 буферов), УКНЦ (до 3 и более) | ZX Spectrum 128K, Apple II, MSX2, NEC PC-8801MKII, Fujitsu FM-77AV, Thomson и другие |
Наличие аппаратного текстового режима | нет | БК-0010/0011М, УКНЦ, "Поиск", "Львов", "Искра 1080", "Спектрум"-совместимые | Acorn Electron, Amstrad CPC, ZX Spectrum, Thomson TO/MO |
Организация видеопамяти | по столбцам | "Специалист", "Орион-128" | частично Amstrad PCW |
Звук | |||
Аппаратный звукогенератор | есть | "Микроша", "Криста", "Апогей", ПК8002, "Корвет", "Поиск" и др. IBM-совместимые, часть "Спектрум"-совместимых | Atari XL/XE, TI-99/4A, BBC Micro, Commodore VIC-20/64/128, MSX, Amstrad CPC, ZX Spectrum 128K и др. |
Программный звукогенератор | есть | практически все ПК | почти все ПК |
Число аппаратных звуковых каналов | 3 | "Апогей", ПК8002, часть "Спектрум-128К"-совместимых | TI-99/4A, BBC Micro, Commodore VIC-20/64/128, MSX, Amstrad CPC, ZX Spectrum 128K и др. |
Диапазон воспроизводимых частот | от 23 Гц до 1,5 МГц | ~ "Апогей", "Микроша", "Криста", "Корвет", IBM-совместимые | ~~ большинство моделей в звуковом диапазоне частот (кроме SN76489) |
Число волновых форм аппаратного звука | 1 (прямоугольная, скважность=2) | "Микроша", "Криста", "Апогей", ПК8002, "Корвет", "Поиск" и др. IBM-совместимые | Atari XL/XE, TI-99/4A, BBC Micro, Commodore VIC-20/16/+4 |
Возможность программной регулировки громкости аппаратного звука | нет | "Микроша", "Криста", "Апогей", "Корвет", "Поиск" и др. IBM-совместимые | почти у всех моделей с аппаратным звуком громкость регулируется |
Наличие аппаратного / программного генератора шума | нет / есть | все модели, кроме ПК8002 | Apple IIe, ZX Spectrum 16/48K, Acorn Electron |
Наличие программно-управляемого ЦАП, разрядность и частота дискретизации | есть (ШИМ), 6–7 бит, ~8 кГц (> при меньшей разрядности) | ~ "Апогей", "Микроша", "Криста", "Корвет", IBM-совместимые, ПК8002 (5 бит) и др. | Tandy CoCo(все), Thomson TO8 (по 6 бит), частично ПК на базе AY-3-8910, SN76489, SID и т.д. (обычно 4 бита) |
Программное воспроизведение оцифрованного звука, каналов | 3 | "Апогей БК-01/01Ц" | все модели с поканальной регулировкой громкости (Atari, MSX, Amstrad CPC, ZX Spectrum 128K и т.д.) |
[свернуть]
Другие параметры ПК "Вектор-06Ц"
Другие параметры ПК "Вектор-06Ц" | |
Магнитофон | |
Стандартная скорость обмена данными с магнитофоном (ROM-формат) | в среднем ~ 1000–1200 бит/с (при дублировании блоков — 500–600 бит/с) |
Основной способ обмена с магнитофоном | блоками по 256 байт (+ подблоки по 32 байта) |
Клавиатура | |
Тип клавиатуры | "ёмкостная" / герконовая |
Качество клавиатуры | низкое (ёмк.) / высокое (герк.) |
Число клавиш | 70 (из них 3 — для ввода и запуска программ) |
Количество функц. клавиш / наличие спец. цифрового поля | 5 / нет |
Разъёмы | |
Внешние разъёмы | ТВ (RGB+ч/б), магнитофон, ПУ (24-битный двунаправл. параллельный порт), ВУ (системная шина), у 06Ц.02 — плюс 2 джойстика |
Возможность непосредственного подключения стандартных принтеров / мышей / модемов | да (через паралл. порт, но разъём нестандартный) / нет / нет |
Конструкция | |
Количество микросхем | 83 (герк. клав) / 97 (ёмк. клав.), у 06Ц.02 — 92 (герк.), из них 32 — чипы ОЗУ |
Число напряжений питания | 3 |
Потребляемая мощность | не более 30 Вт (до 20 Вт у 06Ц.02) |
Габариты и масса ПК | 415х235х70 мм, не более 4 кг |
Исполнение и тип блока питания | внешний, импульсный |
Габариты БП | 230х130х65 мм |
Комплектация | |
Типичная комплектация ПК | осн. блок со встроенной клавиатурой, БП, шнуры, кассета с ПО, 5 брошюр документации, набор для подключения к ТВ |
Типичный набор ПО в комплекте | Бейсик 2.5, монитор-отладчик, редактор-ассемблер, копировщик, тест устройств, реклама ПК на Бейсике, самоучитель Бейсика (10 прогр.), 4 игры на Бейсике, 2 игры в кодах |
Дополнительные устройства, не входящие в комплект (стандартные и любительские) | квазидиск (доп. ОЗУ от 256 Кбайт), контроллеры НГМД и НЖМД, внешние ПЗУ, звукосинтезатор на AY-3-8910, часы реального времени, устройство захвата видеоизображения и т.д. |
[свернуть]
Сообщение форума