Единственное, что я знал о Commodore 64 (или далее C64) это было, пожалуй, только то, что это был 8-битный компьютер, аналог и конкурент ZX Spectrum. Ну и понятно почему: в детстве у меня, конечно же, не было домашнего C64, я его ни разу не видел ни в школе, ни в университете. Только когда я прикупил ZXDOS+ и начал искать, что ещё можно на нём опробовать (а изначально был только ZX Spectrum, Amstrad CPC, MSX и Acorn Atom), я узнал, что для его предшественника ZXUNO существует много разных ядер 8-битных компьютеров, которые теоретически должны быть рано или поздно портированы на ZXDOS+.
Ну и где-то через год это примерно и свершилось — для ZXDOS+ вышла новая прошивка со множеством ядер (и я по этому поводу написал статью, которую на днях обновил). Изначально я и хотел сделать серию статей про все эти ядра и их работоспособность, но начал, естественно, с тех, с которыми был знаком и понимал, что от них ждать: ZX Spectrum, ZX Spectrum Next, NES, MSX, PC XT. Остальные тоже планировались, но тут меня торкнуло с темой реальных дисководов и я начал длительный забег по граблям, который кончился приобретением трёх Спектрумов, нескольких дисководов и сотен дискет! Поэтому ZXDOS+ и оказался временно не у дел и только недавно я вернулся к нему с целью освоить и другие ядра.
Поскольку остальные ядра мне как один были незнакомы, то решил начать с самого популярного компьютера: Commodore 64. Я-то ведь до этого и не знал, что он был продал в количестве 15 млн. экземпляров, что в 3 раза превышает количество официально проданных ZX Spectrum! Да, C64 был недорогим компьютером, но всё-таки его цена превышала стоимость стоимость Спектрума, да и вышел он раньше: процессор работал на более низких частотах, поддержка цвета сильно зависела от разрешения экрана (160×200 в 4-х цветах? ну такое). Безусловно, у C64 были и сильные стороны: это и аппаратная поддержка аж 8 четырехцветных спрайтов и плавная прокрутка экрана в текстовом режиме. Это действительно позволяло использовать C64 как неплохой игровой компьютер, чем тот же ZX Spectrum по задумке сэра Клайва Синклера вообще не должен был быть (муа-ха-ха!). Кроме обычного ТВ-видеовыхода был сразу и композитный сигнал (плюс S-Video), что позволяло сразу получить более качественное изображение (хотя у того же Спектрума потом появился полноценный RGB-выход, который по качеству в разы лучше). Ну и надо про звук не забыть: ведь у C64 сразу был очень приличный трехголосый музыкальный сопроцессор SID (и можно было даже программно соорудить дополнительный 4-битный цифровой звук, например, для воспроизведения голоса или спецэффектов) и по своему качеству он превосходил AY-3-8910, который на Спектруме, кстати, появился значительно позднее (только в моделях с 128 Кб памяти). Так что по железу C64 на старте смотрелся получше, чем ZX Spectrum 48.
Эмулятор и игры
Чтобы понять, что из себя вообще представляет данный компьютер и чтобы было с чем сравнивать ядро залитое в ZXDOS+ пришлось сначала погонять эмулятор. Я воспользовался VICE (Versatile Commodore Emulator), который кросс-платформенный и позволяет эмулировать большое количество моделей Commodor, в том числе и C64.
Эмулятор этот мне понравился, вполне работоспособный, настроек в нём полным-полно, многие из которых для меня были совершенно непонятными. Всё-таки, надо быть серьёзно в теме, а я так — мимокрокодил. Самое главное, что игры он загружал исправно, никаких артефактов не вылезало.
Кстати, про игры. В сети множество ресурсов, на которых можно скачать игры для Commodore, но искать и выкачивать по одной — сущее мучение, поэтому пришлось поискать что-то более весомое в виде сборника всех игр. Теоретически, можно выкачать всё-всё-всё с TOSEC (The Old School Emulation Center), но мне было даже тут лень ковыряться, и в итоге я скачал уже что-то готовое с сайта "Новая реальность". Там в архиве на 1.3 Гб действительно оказалось практически всё что я хотел попробовать на C64.
Ядро Commodore 64
Клавиша F12 вызывает главное меню. F9 — запускает и останавливает ленту. ESC заменяет кнопку RUN/STOP. Больше никаких дополнительных кнопок не задействовано, всё управление через меню. Меню, к сожалению, на испанском. Половина интуитивно понятна, но остальное пришлось гуглить:
- Sonido Carga Cinta — вкл/выкл звука загрузки ленты
- Filtro de Audio — вкл/выкл фильтра аудио (я разницы не заметил)
- Disco Solo Lectura — вкл/выкл диск только для чтения
В пункте CIA можно выбрать какую микросхему использовать — старую 6526 (в меню опечатка) или новую 8521. Carga D64 — используется для загрузки образа дискеты в формате D64, а пункт Carga TAP — для загрузки образов лент в формате TAP.
Загрузка с кассеты
Самый стандартный способ загрузки в то время — с кассеты. Тут это делается просто — выбираем в меню Carga TAP файл (кстати, в списке файлов отображается всего строк 25, так что приходится множить каталоги, чтобы хоть что-то разместить), потом вводим команду LOAD и нажимаем F9.
Из десятка опробованных TAP-файлов у меня полностью загрузился только Exolon:
Часть файлов просто начинали играть в тишину после половины загрузки, какие-то начинали передавать какой-то шум, в отличие от нормального высокочастотного скрежета. Не знаю в чем тут причина, но в эмуляторе эти файлы грузились нормально.
Hero Quest загрузился, но после этого потребовал отмотать счётчик ленты в начало и когда я попытался запустить первую миссию попросил включить ленту, что ни к чему не привело. Отдельно добивает то, что непонятно — в каком месте файла мы находимся в данный момент и вообще отсутствуют всякие инструменты по управлению лентой. Вот что надо сделать, чтобы отмотать ленту в начало? Непонятно. А ведь множество игр имеют подзагрузку уровней, которую в этом ядре непонятно как вообще делать. В итоге на образы TAP для ядра C64 я просто забил. Долго, ненадёжно, неудобно.
Загрузка с дискеты
Загрузка с дискет делается по другому алгоритму:
- тоже выбираем образ дискеты через пункт меню Carga D64,
- вводим команду загрузки с дискеты LOAD"*",8,1 (вообще дисководов в C64 может быть и больше и номера будут 9, 10, 11, но в этом ядре только одно устройство по умолчанию, и номер у него 8). Кавычки вводим SHIFT-2, * — на кнопке со скобочками } и ]
- после загрузки возвращается курсор и если всё загрузилось, пишем команду RUN (а иногда попадаются игры с автозагрузчиком и этого делать не нужно).
С дискетами (точнее их образами) ситуация оказалась получше, но, к сожалению, не особо. Часть образов не загружались до конца. Т.е. грузилась заставка или загрузчик крякнутой игры и потом всё. Я ждал по 20-30 минут — ничего. В эмуляторе эти же образы загружались нормально. Не смог загрузить ни одной двусторонней (или двудисковой) игры. Даже не дошел до вставки диска — игра просто не загружалась.
Но некоторые игры нормально загружались. Например, Dizzy:
Или Bomb Jack:
В итоге, после многочисленных испытаний я пришел к выводу, что относительно простые игры грузятся нормально, а вот навороченные, созданные в последние годы платформы, отнюдь не всегда.
Скорость загрузки
Второе, на что я обратил внимание — это длительная загрузка игр даже с дискеты. Ситуация понятная, ядро в ZXDOS+ (как и эмулятор, кстати), обеспечивает ту же скорость чтения, которую обеспечивал дисковод Commodore 1541, и скорость эта была ниже 1 Кб в секунду! Для Спектрума эта цифра была выше раз в тридцать. Поэтому загрузка с дискеты по скорости прям таки сопоставима с лентой, что в ядре C64 в ZXDOS+ напрягает ещё и потому что никак не отображается — никакой мигающей лампочки это ядро не показывает, поэтому понять — грузится ли игра с дискеты или уже зависла — никак невозможно (в случае с лентой хоть по звуку понять можно). И в случае с нестабильной загрузкой, которая показана чуть ранее — бесит вдвойне. Почему нельзя было сделать ускорение загрузки — мне непонятно. Некоторые игры хотя бы полосы отображают на экране, что куда ни шло. Посмотрите, как пример, загрузку Space Crusade:
Музыку на заставке я осознанно оставил послушать, как в C64 звучит тот самый сомнительный момент, о котором я писал статье про внешнюю аудиокарту на чипе AY. Тут он тоже слышен на 10 секунде ролика, но более сглажен, резонанс слух не так режет. После начальной заставки 20 секунд грузится меню, после выбора миссии 20 секунд грузится миссия. Я такого даже на 48 Кб Спектруме не помню! Там меню и первая миссия сразу загружаются в память, а остальные миссии требуют подзагрузки с магнитофона по 10 секунд. А тут 64 Кб.
Работоспособность ядра
С загрузкой уже разобрались — не очень всё хорошо, ядро загружает не все образы. Что же собственно с работоспособностью того, что загрузилось? Многие игры идут хорошо, никаких проблем с изображением или производительностью нет. А вот с определенным количеством игр наблюдаются проблемы с изображением спрайтов или фона, что делает невозможным игру в них. Приведу примеры:
В игре Myth — History in the Making фон блестит во всех смыслах, а должен вроде бы быть чёрным. Заснял весь процесс загрузки, чтобы продемонстрировать и отличный звук (+ голос), и спецэффекты, и замечательную графику. Вот только играть в это оказалось невозможно, а ведь ждать загрузки с дискеты пришлось 3 минуты!
Также были проблемы и в других играх, не стал всё показывать. Где-то не принципиальные, где-то такие, что играть вообще никак. То есть в ядре какие-то явные проблемы с графикой в некоторых играх. Не знаю, с чем это связано, возможно, не все недокументированные возможности реализованы. Всё-таки, надо понимать, что сама по себе FPGA не гарантирует 100% повторяемости оборудования, для этого ещё постараться надо. Так же как и программные эмуляторы все разные по качеству, так и аппаратные эмуляторы (на ПЛИС) тоже разные. В данном случае видим недоработки разработчиков данного ядра или проблемы при его портировании для ZXDOS+.
Общие впечатления от C64
Я, само собой, хотел сравнить Commodore 64 и ZX Spectrum в качестве игр. Как говориться — что круче. Однозначного ответа у меня так и не получилось. Есть игры, которые на C64 выглядят лучше чем на Спектруме, например, Kung-Fu — The Way of the Exploding Fist: неожиданно яркая графика, приятная музыка, спецэффекты ударов — браво, разработчикам:
Сравним с ZX Spectrum. Тут тоже разработчики постарались, убрав как только возможно клешинг аттрибутов (с фоном это проще, поэтому бойцы в чёрном цвете):
Видно, что детализация в C64 получше, но у ZX Spectrum цвета более яркие и за счёт этого вытаскивают достаточно бедную графику.
Также понравился Laser Squad. Абсолютно один-в-один похоже на версию для ZX Spectrum, только палитра другая, но в этом случае более пастельные цвета не раздражают, как в других играх C64:
Ну и да, когда разработчики стараются как-то обыграть достаточно бледную палитру, получается хорошо. За счёт отсутствия клэшинга больше игр с цветом (ч/б игры на Спектруме — это всё-таки не есть гуд).
Но есть игры, в которых цвет больше напоминает «серо-буро-малиновый», я б в такое играть не стал. Например, Exolon:
Версия для ZX выглядит, однозначно, симпатичнее. Или Space Crusade:
Тут мой выбор тоже за Спектрумом. Даже более детализированная заставка не спасает:
Итог
Да, ядро Commodore 64 в ZXDOS+ позволяет запускать игры для C64. Но качество ядра оставляет желать лучшего. Часть игр вообще не дозагружается, часть — с графическими артефактами. Настроек у ядра мало, фактически только выбор PAL/NTSC (что задаёт нам частоту вертикальной синхронизации 50 или 60 Гц), да выбор типа микросхемы CIA.
В какие-то игры, которых на ZX Spectrum нет (типа Winter Games, Summer Games) я бы с удовольствием поиграл на C64, жаль только что в этом ядре они не грузятся. Из того что загружается поиграл бы, пожалуй, только в Kung-Fu — The Way of the Exploding Fist. В остальное бы не стал играть из-за ограничений количества цветов на экране и бледной палитры.