Введение

ZSNES — это эмулятор видеоигровой консоли Super Nintendo Entertainment System, написанный преимущественно на ассемблере x86 с официальными версиями для Linux, DOS и Windows, а также неофициальными версиями для Xbox и macOS.

Предыстория

Разработка ZSNES началась 3 июля 1997 года, а первая версия была выпущена 14 октября 1997 года для DOS. С тех пор были созданы официальные порты для Windows и Linux. Эмулятор стал свободным программным обеспечением под лицензией GPL 2.0 или более поздней 2 апреля 2001 года. Несмотря на заявление Adventure of Link в 2009 году о том, что "ZSNES не умерла, она все еще находится в разработке", сделанное на форуме ZSNES после ухода ее оригинальных разработчиков zsKnight и Demo, разработка значительно замедлилась с момента выхода последней версии (1.51, выпущенной 24 января 2007 года). Большая часть усилий по разработке была сосредоточена на повышении переносимости эмулятора путем переписывания ассемблерного кода на C и C++, включая новый графический интерфейс на базе Qt. ZSNES примечателен тем, что одним из первых смог эмулировать несколько чипов расширения SNES на определенном уровне. До версии 1.50 ZSNES поддерживал сетевую игру через TCP/IP или UDP. Интересной ранней функцией ZSNES были "ZMV-фильмы". Эта функция позволяла игрокам записывать свои действия во время игры и затем сохранять их в файл ZMV, чтобы другой пользователь с копией ZSNES, соответствующим ROM-файлом и файлом ZMV мог "смотреть" игровой процесс другого человека. Это произошло задолго до широкой доступности игровых видео в интернете и являлось ранней формой обмена подобным контентом. Поскольку ZSNES в основном написан на низкоуровневом ассемблере для процессоров x86, портирование ZSNES на устройства с архитектурой RISC, такие как ARM, крайне нецелесообразно. Коммерческие игровые консоли обычно не использовали процессоры x86 (за исключением оригинального Xbox) до восьмого поколения, с выходом Xbox One и PlayStation 4 в 2013 году.

История развития

Первым публичным выпуском ZSNES была версия 0.150, 14 октября 1997 года. Она включала в себя весь набор инструкций 65816 от модифицированного микропроцессора WDC 65C816 SNES, а также поддержку SRAM и частичную реализацию режима 7. В ней также уже была реализована возможность сохранения состояний в ZST-файл как дополнительная функция. В этой первоначальной версии отсутствовала поддержка некоторых функций DSP. Версия 0.600 от 9 сентября 1998 года стала первой, в которой участвовал разработчик Pharos (в качестве помощника в кодировании), и ознаменовала важный этап благодаря внедрению нового 16-битного графического движка, а также совершенно нового графического интерфейса с расширенным функционалом. Вскоре после этого, версия 0.700 от 27 октября 1998 года впервые была скомпилирована с использованием кода на C. Начиная с версии 0.900c/a от 4 июля 1999 года, была добавлена важная для того времени функция – встроенная поддержка ZIP-компрессии, позволявшая пользователям экономить место на тогдашних дорогих жестких дисках. Также активизировались работы по улучшению поддержки чипа SA-1. Версия 1.000 от 1 сентября 2000 года ознаменовала первый официальный выпуск ZSNES для Windows, а последующие версии эмулятора были направлены на улучшение качества этого порта. 2 апреля 2001 года исходный код программного обеспечения был опубликован, и к команде присоединился программист Teuf. Выпуск 1.30b от 16 июня 2001 года можно считать вехой в эмуляции Super Nintendo, поскольку он обеспечил первоначальную поддержку Star Ocean и его чипа сжатия S-DD1. Эта игра максимально использовала возможности аппаратного обеспечения системы, предлагая голосовые клипы и улучшенную графику, и даже запуск на эмуляторе был непростой задачей. После ухода zsKnight по личным причинам в июле 2001 года, проект выпустил версию 1.337 от 30 сентября 2001 года в знак уважения к нему и его семье. Эмулятор продолжал обновляться до июля 2002 года, но выпуск новых версий был приостановлен, и прошло более двух лет до следующего публичного релиза. Когда версия 1.40 была выпущена 25 декабря 2004 года, это стало поворотным моментом для проекта, с привлечением новых участников и значительной переработкой устаревших систем эмулятора. Разработчики Nach и pagefault особенно сосредоточились на удалении нескольких известных хаков, присутствовавших в кодовой базе ZSNES, и реализации корректного кода, необходимого для запуска сложных игр. Параллельно велась обширная работа по улучшению поддержки специальных чипов. Версия v1.50 от 22 декабря 2006 года стала еще одним крупным обновлением, которое, по словам разработчиков, заключалось в том, что "ZSNES – это программа, состоящая из более чем 200 000 строк исходного кода, и в этом выпуске было изменено более 25% этого кода; также около 15% ассемблерного кода было переписано на C". Это был последний крупный релиз эмулятора, за которым последовала незначительная версия 1.51, после чего разработка была свернута.

Прием

ZSNES в своё время пользовался большой популярностью, и в 2005 году британский игровой журнал Retro Gamer назвал этот эмулятор "очень впечатляющим", особо выделив "невероятный режим тостера". Однако с появлением более точных эмуляторов SNES, таких как Snes9x и higan, по мере увеличения вычислительной мощности компьютеров, в ретроспективных обзорах ZSNES критиковали не только за относительно низкую точность, но и за то, что его бывшая популярность привела к созданию множества фанатских переводов и модификаций, разработанных с учётом особенностей и неточностей эмулятора. Это часто делает их неиграбельными как на оригинальном железе, так и в более новых эмуляторах, которые превзошли ZSNES. Некоторые из этих эмуляторов даже включают режим, специально предназначенный для имитации особенностей ZSNES, что позволяет вновь запускать модификации, созданные для ZSNES. В 2015 году в версии 1.51 была обнаружена уязвимость, позволяющая специально созданному SNES ROM получить контроль над системой и выполнять вредоносный код; вскоре после этого была выпущена частично исправленная предварительная версия.