Введение
ВИК 20 Картридж расширения
VIC 1211 Super Expander – это картридж для домашнего компьютера VIC 20. Он был разработан для расширения возможностей интерпретатора BASIC на компьютере, главным образом для облегчения программирования графики и звука. Картридж также предоставлял 3 килобайта дополнительной оперативной памяти (из которых 136 байт использовались самим картриджем). Картридж был создан компанией Commodore Business Machines (CBM) и выпущен в 1981 году.
Описание
Диалект BASIC, поставляемый с VIC 20, Commodore BASIC V2.0, был печально известен своей ограниченной функциональностью. Он даже не соответствовал возможностям более ранней линейки компьютеров Commodore, PET, которая к тому времени уже была оснащена Commodore BASIC версии 4.0. В результате он устарел к моменту выпуска VIC 20 и казался довольно примитивным по сравнению с диалектами BASIC, доступными на других микрокомпьютерах. Если быть честным, решение Commodore использовать старый BASIC повторно, и тот факт, что он помещался всего в 16 кБ ПЗУ (включая KERNAL), помогли сохранить минимальную цену VIC 20 и, следовательно, способствовали его огромному успеху. К тому же, он был стабильным и почти полностью лишен ошибок, в отличие от некоторых конкурирующих BASIC. Тем не менее, "VIC BASIC" не только не имел команд, считающихся фундаментальными для языка BASIC, таких как "else" и "renum", но и полностью отсутствовала поддержка графики и звуковых эффектов. Чтобы использовать графику и звук VIC 20, программистам приходилось напрямую "PEEK и POKE" байты в графическое/звуковое оборудование VIC 20, а именно в видеочип 6560 (VIC). Это делало программирование довольно трудоемким и подверженным ошибкам, поскольку постоянно приходилось использовать непонятные адреса и коды памяти, а ошибки в них обычно приводили к сбою компьютера вместо вывода сообщения об ошибке, и для выполнения даже простых задач требовалось множество команд. В условиях крошечной оперативной памяти и медленной интерпретации BASIC того времени это было фатально. Программисты могли частично смягчить эти проблемы, используя машинный код, но это само по себе было утомительным процессом с довольно крутой кривой обучения. Чтобы решить эти проблемы, Commodore создала картридж Super Expander. Он предоставлял дополнительные команды BASIC для упрощения работы с графикой и звуком на VIC 20. Также он содержал команды для чтения джойстика и светового пера, и позволял использовать функциональные клавиши.
Графика
VIC 20 не поддерживал графику высокого разрешения напрямую. Графика высокого разрешения достигалась путем "закрашивания" экрана символами и "переопределения" растровых шрифтов в реальном времени. Это был сложный и трудоемкий процесс; реализовать его в программе на BASIC было практически невозможно из-за времени, необходимого для отрисовки чего-либо. Super Expander брал на себя всю сложную работу. Он позволял программисту рисовать точки, линии, эллипсы и дуги, а также заливать замкнутые области одной строкой кода. Можно было использовать все 16 цветов VIC 20, хотя и с некоторыми ограничениями, связанными с особенностями чипа 6560. Разрешение экрана составляло 160×160 пикселей, сниженное с 192×200, поддерживаемых чипом 6560, для обеспечения возможности адресации каждого пикселя. Поддерживалась многоцветная графика высокого разрешения (с разрешением 80×160), которую можно было комбинировать с обычной графикой высокого разрешения.
Звук
Звуковые возможности VIC 20 были довольно простыми, поэтому программирование звуковых эффектов с помощью "PEEK и POKE" было не таким трудоемким занятием, как программирование графики. Тем не менее, Super Expander предоставлял команду для воспроизведения простых тонов на четырех голосовых каналах VIC 20 и управления громкостью. Воспроизведение музыки на VIC 20 не поддерживалось; обычно музыкальную ноту реализовывали, воспроизводя тон внутри временной задержки цикла for. В отличие от этого, с Super Expander музыкальные произведения можно было воспроизвести, просто напечатав строку символов. (Музыкальные строки отличались от обычных строк специальным символом обратного управления, знакомым всем, кто использовал цвета или управление курсором в программах VIC 20.) Каждый из четырех голосовых каналов VIC 20 мог одновременно воспроизводить свои собственные произведения, создавая гармоничные эффекты, которые по меркам того времени могли быть весьма впечатляющими.
Другие устройства
Super Expander предоставлял команды для чтения состояния джойстика и управляющих кнопок, а также положения светового пера. В случае джойстика, поскольку он был цифровым или представлял собой набор переключателей, для определения его положения требовались дополнительные операции с битами.
Функциональные клавиши
Обычно клавиши функций VIC 20 можно было использовать только в программе, проверяя код нажатой клавиши при чтении с клавиатуры. В прямом режиме VIC 20 они были недоступны для каких-либо действий. С Super Expander клавиши функций можно было настроить для выполнения команд в немедленном режиме. По умолчанию они были предварительно запрограммированы на наиболее часто используемые команды BASIC, подобно GW BASIC на IBM PC. Пользователь мог затем назначить своим клавишам функции собственные команды или любую произвольную строку.
Недостатки
Ниже приведены основные ограничения привлекательности и полезности Super Expander. Компания Commodore разработала Super Expander для отображения графики в системе координат 1024×1024. Согласно этой схеме, каждый видеопиксель имел размер 6,4 (или 12,8) "виртуальных" пикселей. Это означало, что для точного позиционирования пикселей на экране требовалась дополнительная операция масштабирования, реализованная программно. Аналогичная функциональность была доступна в BASIC 3.5 и 7.0 через команду SCALE, но в этих версиях BASIC масштабирование было необязательным и могло выполняться до любого произвольного размера, заданного пользователем. Система координат не учитывала соотношение сторон выходного устройства (например, телевизора). Таким образом, на NTSC круг размером, скажем, 300×300, отображался бы в виде эллипса. Аналогично, линия, проведенная из точки (0,0) в точку (300,300), не отображалась бы под углом 45°. При рисовании дуг окружности начальный и конечный углы необходимо было задавать в нестандартных единицах – 100 "градов" на окружность (вместо 360 градусов или 400 фактических градов). Super Expander не поддерживал вывод растровых изображений. Это означало, что произвольные растровые изображения, которые могли бы использоваться в играх с высоким разрешением, приходилось отрисовывать пиксель за пикселем. Медленная работа интерпретатора BASIC делала это непригодным для приложений, таких как аркадные игры. В результате возможности Super Expander были наиболее полезны для рисования фигур, таких как диаграммы и простые изображения, или для приключенческих игр со статичными картинками. Программы, написанные с использованием дополнительных команд Super Expander, не были переносимыми. Это было неизбежно, поскольку программы не помещались бы в память VIC 20 без расширения, а дополнительные команды BASIC все равно не распознавались бы. Пользователю требовалось владеть картриджем и установить его, чтобы запустить программу, написанную с использованием дополнительных команд. Загрузка программы на VIC 20 без расширения приводила к ошибкам. Поэтому количество программного обеспечения, выпущенного для использования возможностей Super Expander, включая программы, публиковавшиеся в журналах, было очень небольшим. Несмотря на вышесказанное, функции Super Expander восполняли многие пробелы в среде программирования VIC 20. Кроме того, аналогичные микрокомпьютеры на рынке страдали теми же или эквивалентными недостатками.