CC’2011: Как я программировал на Commodore 128

Конец первого дня фестиваля Chaos Constructions 2011 подходил к концу, и мне начинало становиться скучно. Большинство участников расползлись кто куда: питерские разошлись по домам, приезжие группками покидали помещение, чтобы подыскать более уютное (и не исключающее алкоголь) место для задушевных разговоров. В «Хакзоне» по-прежнему кипела работа, но отвлекать от неё хакеров я не решался. Чем занять себя, пока сон не начал подкашивать?

Пришедший в голову ответ оказался поразительно очевидным. Передо мной стояло два ряда старинных компьютеров: почти все включены, и никого рядом — подходи, делай, что хочешь. Сперва я сел за классический Macintosh, но он оказался скучноват: поразительно, но после современных «маков» он ощущался как что-то очень знакомое.

Да, в нём поменьше всего, но то, что есть, поразительно узнаваемо и привычно. Полоска меню, Finder, стандартные приложения… В общем, уже минут через десять я понял, что изучать решительно нечего.

Следующей идеей было сесть за какой-нибудь из многочисленных «Спектрумов». Ведь именно с ZX Spectrum началось моё знакомство с компьютерами, и вспомнить детство, поигравшись со встроенным «Бейсиком», было бы мило. Но какой смысл смотреть на то, что я видел уже тысячу раз и отлично помню? Раз уж есть выбор, нужно смотреть на что-то неизведанное. Обойдя ряды компьютеров кругом, я остановился возле двух «Коммодоров» — 64 и 128. Хоть Commodore 64 и был когда-то очень популярен (после чего считается классической и особенно уважаемой моделью), я выбрал сто двадцать восьмой — как более экзотический. И не прогадал!

Сперва я, конечно, не понял, что делать — экран показывает приглашение и курсор, но что напечатать? HELP? Компьютер отвечает только «READY». DIR? SYNTAX ERROR. Но тут я обратил внимание на верхнюю строчку и понял свою ошибку. Как ZX Spectrum и прочие старые домашние компьютеры, Commodore загружается сразу в BASIC. Что ж, отлично, будем программировать!

Сперва дело не пошло дальше банального PRINT «HELLO, WORLD!». Пришлось поставить рядом ноутбук и полезть в интернет за инструкцией. Она быстро нашлась, и работа закипела. Я нашёл переключение цветов, вспомнил, как делать циклы, и написал первую простенькую программку.

По дороге я почерпнул из «Википедии» захватывающие дух знания о том, что у Commodore 128 аж три процессора: двухмегагерцовый MOS 8502, Z80, необходимый, чтобы запускать операционную систему CP/M (увы, я этого сделать не смог — дискеты с системой на столе не было), и ещё один 8502 — в дисководе. Компьютер, у которого в дисководе находится процессор, равноценный основному, — сложно вообразимая сегодня вещь.

Потихоньку разобрался и с клавиатурой. Кнопка Return на ней оказалась не равноценна Enter (команды вводятся именно второй), а функциональные клавиши в «Бейсике» сразу вставляют полезные команды — к примеру, LIST или RUN.

В надежде перейти к рисованию каких-нибудь графических красот я углубился в изучение руководства. Оказалось, что здесь есть специальные команды для вывода и анимации спрайтов, а также для определения пересечения между ними. Во времена ZX Spectrum я о таком мог только мечтать — делать игры было бы фантастически просто! (Справедливости ради скажу, что для «Спектрума» я потом нашёл Laser Basic с похожими возможностями, но насладиться им до перехода на PC так и не успел.)

Каково же было моё расстройство, когда я понял, что переключить экран в графический режим у меня не получится. Команда GRAPHIC 1,3 должна переводить «Коммодор» в многоцветный графический режим и очищать экран. Вместо этого система только говорила READY и ничего не очищала. Зато GRAPHIC 1,5, очищающая экран в текстовом режиме, исправно работала. Как мне на следующий день объяснил обладатель компьютера, графика на самом деле отображалась, но выводилась на неподключённый второй монитор.

Расстроившись, я было решил пересесть за стоявший рядом Commodore 64. Уж он-то должен быть менее замороченным. Но не тут-то было! Быстрое знакомство с руководством в интернете открыло страшную истину: графика здесь программируется исключительно командой POKE, пишущей байты непосредственно в память. То есть сесть и начать рисовать кружочки и линии здесь не получится — картинка выводится по пикселям. Упражняться в самостоятельной реализации алгоритма Брезенхема на старинном Бейсике в половине первого ночи меня определённо не тянуло.

Напоследок я взглянул на оболочку GeOS. Не скажу, что она меня чем-то поразила. С виду похоже на клон интерфейса Macintosh, но с запутанной концепцией страниц.

Я немедленно ткнул в какой-то пункт меню, создавший новую страницу, а как её удалить, так и не разобрался. Зато запустил Geopaint и немного порисовал, после чего решил, что можно наконец отправиться спать.

Что будем искать? Например,ChatGPT

Мы в социальных сетях