Nescube v1.2 (Full version) documentation


Nescube- эмулятор безумно популярной в 90-х игровой консоли Nintendo Entertainment System (NES, более известной на просторах СНГ под торговой маркой Dendy) для мобильных устройств (телефонов, смартфонов) с поддержкой Java 2 ME (CLDC-1.0, MIDP-2.0). Для его работы необходимо устройство (далее просто телефон) с достаточно быстрым и мощным процессором.

Эмулятор реализует работу следующих узлов консоли NES:

Основные характеристики и особенности реализации эмулятора:

Nescube написан на J2ME под профиль MIDP-2.0 с применением жесточайшего процедурного программирования, что и позволило выжать максимум быстродействия из Java-подсистемы телефона. В коде используются только стандартные классы профиля, следовательно, эмулятор не заточен под конкретные модели телефонов, бережно расходует память и может работать практически на всех современных телефонах.

Официально эмулятор поддерживает устройства с дисплеем от 128x160 до 240x320, однако ориентирован он в основном на разрешение дисплея 176x220 точек, так как из реальных телефонов автору для тестирования доступен только Sony Ericsson K700i. Поэтому в основе всего сказанного ниже лежит результат наблюдения за работой Nescube именно на данном телефоне, особенно это касается видеорежимов и величин FPS.

Технологии, применяемые в Nescube

Smart CPU acceleration
Иногда процессор NES работает, что называется, вхолостую. Происходит это когда процессор ожидает некоторое аппаратное событие, которое должно произойти (например, VBlank - начало обратного хода луча в кадре, Sprite 0 hit - момент рисования на экране спрайта с номером 0 и т.д.). Иногда в программах NES можно встретить так называемый "вечный цикл", не имеющий условия выхода, в котором процессор "вращается" постоянно, выходя из него только по аппаратным запросам прерываний. Следовательно, некоторая часть времени, приходящегося на эмуляцию процессора NES, тратится на бессмысленные циклы ожидания.

Уникальная технология Smart CPU acceleration в процессе эмуляции процессора NES проводит статистический анализ адресов в командах условного/безусловного перехода и на основе полученных данных выявляет бессмысленный цикл ожидания, после чего блокирует его эмуляцию. За счет этого происходит ускорение эмуляции процессора, FPS в данном случае может подниматься на 5-15 кадров (при Skip frames = 4). Но у данной технологии есть и недостатки:

На разных этапах работы игры NES могут присутствовать различные циклы ожидания, следовательно, необходимо периодически повторять статистический анализ, но не понятно по каким признакам выявлять необходимость в новом анализе. На данный момент условием перезапуска статистического анализа служит FPS, опустившийся ниже 25 кадров.

Small screen interface
Данная технология делает возможным удобное отображение экрана консоли NES, имеющего разрешение 256х240 точек, на дисплее мобильного телефона, разрешение которого, как правило, меньше. Технология реализует понятие некой виртуальной камеры, снимающей экран NES и транслирующей его на дисплей телефона. Тип камеры задает способ и алгоритм трансляции картинки. На данном этапе своего развития технология реализует два основных способа трансляции:

Так же, данная технология "умеет" работать с повернутым по/против часовой стрелки дисплеем телефона, а так же позволяет производить масштабирование, при котором соотношение сторон картинки не сохраняется. Режимы слежения и непропорционального масштабирования позволяют максимально эффективно задействовать всю площадь дисплея телефона.

APU to MIDI transfer
Большинство современных мобильных телефонов умеют воспроизводить музыкальные файлы формата MIDI (GM, SP-MIDI), а значит имеют в своем арсенале MIDI-синтезатор, способный воспроизводить музыкальные инструменты с заданной тональностью и громкостью. Представленная технология позволяет как бы конвертировать данные, посылаемые в реальной консоли на звуковой процессор (APU), в команды управления MIDI-синтезатором. Достоинством технологии является то, что процесс конвертирования имеет простую реализацию в коде, а главное работает быстро практически не тормозя основной процесс эмуляции. В случае полноценной эмуляции APU нужно было бы использовать WAVE-синтез, который в паре с основным процессом эмуляции оказался б очень ресурсоемким для мобильного устройства. Недостатком является то, что получаемый звук лишь отдаленно напоминает истинное звучание APU, невозможно точно воспроизвести работу некоторых узлов APU, а работу каналов Noise и DMC вообще не возможно повторить на MIDI-синтезаторе (хотя Noise очень отдаленно можно). К тому же, прямое программирование MIDI-синтезатора из Java доступно лишь на определенных моделях телефонов (для Sony Ericsson начиная с моделей пятого поколения - JP-5).

Качество музыки в играх может оказаться очень низким, поэтому рекомендуется отключать (если это возможно) музыкальное сопровождение, оставляя включенным лишь звуковые эффекты.

Unceasing play
Процесс игры на мобильном устройстве обладает некоторыми специфичными особенностями, основным из которых является эпизодичность. Т.е. человек играет на мобильном телефоне в "свободную" минутку достаточно непродолжительными порциями, не превышающими 5-60 минут. К тому же часто это время сильно ограничивается ресурсом аккумуляторной батареи телефона. Таким образом подобный процесс игры делает невозможным прохождение большинства замечательных игр NES. Для решения данной проблемы в Nescube применяется механизм сохранения/восстановления игрового процесса, позволяющий в любой момент сохранить игровую ситуацию а потом вернуться к ней, если это необходимо.

Технология Unceasing play является как бы надстройкой над механизмом сохранения/восстановления игрового состояния, реализуя его работу в автоматическом режиме. Суть ее заключается в том, что если пользователь закроет игру либо выйдет из эмулятора, а потом опять запустит в эмуляторе эту игру, то он вернется в то состояние игры, из которого он вышел и сможет продолжить игровой процесс. Т.е. наблюдается некий эффект "замораживания" игры до "следующего сеанса", позволяющий постепенно проходить любимую игрушку.

Fast fullscreen rendering
Данная технология переводит эмулятор Nescube в некоторый "упрощенный" режим эмуляции. В данном режиме построение картинки производится упрощенно. К тому же процесс эмуляции процессора консоли и некоторых других её узлов так же подвергается упрощению. Все это, как правило (но не всегда!), приводит к увеличению скорости эмуляции, но в то же время снижает совместимость с играми. В основном снижение совместимости выражается в виде "ненормального" поведения изображения в целом или отдельных его элементов. Тем не менее, много старых и простых игрушек при активной технологии Fast fullscreen rendering работают нормально (например, Contra, Dr.Mario и др.). Не рекомендуется использовать данную технологию с играми, у которых происходит перемещение заднего плана, т.к. в 90% случаев будет наблюдаться "ненормальное" поведение картинки.

Пользовательский интерфейс программы

Main menu

Open game
В данном разделе можно выбрать и запустить желаемую игру NES. В списке отображаются только те игры, которые прописаны в файле "nes_list.txt", находящегося внутри мидлета в папке "Games". Что это за файл можно узнать здесь.

Settings
Один из главнейших разделов. В нем сосредоточены все настройки, позволяющие тонко и эффективно настраивать эмулятор вцелом, или каждую игру по отдельности. Раздел Settings состоит из пяти подразделов:

Displayнастройки отображения экрана NES на дисплее телефона
Controlнастройки управления в эмуляторе
Engineнастройки движка эмуляции
Soundнастройки эмуляции звука
Otherдополнительные настройки

ВНИМАНИЕ! В каждом из указанных подразделов Settings на софт-клавишах телефона присутствуют дополнительные команды:

Saveсохранить настройки в памяти телефона
Defaultвыставить настройки по умолчанию
Cancelвыйти без сохранения настроек

About
В данном разделе сосредоточена различная информация: Cartridge - информация о запущенной игре (картридже), Emulator - справка эмулятора (версия, краткое описание, контактная информация об авторе), System - информация о Java-системе.

Exit
Завершение работы эмулятора. Если у вас запущена какая-либо игра и активна технология Unceasing play, то произойдет автоматическое сохранение состояния данной игры.

ВНИМАНИЕ! В главном меню (Main menu) на софт-клавишах телефона присутствуют следующие команды:

Minimizeсвернуть приложение (работает на телефонах Sony Ericsson)
Resumeвернуться в игру (доступно когда запущена игра)

Settings > Display

Settings > Display > Camera type [Scale LQ, Scale HQ, Dynamic, Static, Disabled]
С помощью данной настройки можно выбрать тип камеры, которая будет "снимать", обрабатовать соответствующим образом и транслировать экран NES на дисплей телефона. В данной версии Nescube доступны следующие типы камеры:

Scale LQПроизводится масштабирование экрана NES до размеров, позволяющих вместить его (экран NES) по горизонтали на дисплее телефона. В данном режиме используется упрощенный алгоритм масштабирования картинки на основе одной масштабирующей таблицы, прорисовка ведется непосредственно в видеобуфер дисплея. Качество картинки наихудшее, скорость работы наивысшая.
Scale HQПо своей работе подобен Scale LQ, но для масштабирования картинки использует две масштабирующие таблицы (для осей X и Y соответственно) и промежуточный буфер экрана NES. Результатом является значительно более качественная и разборчивая картинка, видны мелкие объекты, тексты читабельны. Скорость работы самая низкая.
DynamicКамера отслеживает изменяющиеся участки экрана NES и пытается их отобразить. Фактически камера следит за динамическими спрайтами (которые перемещаются по экрану), вычисляет т.н. центр событий и отображает его на дисплее телефона. Если на экране NES статичная картинка (ничего не "двигается"), то камера просто отображает центр этой картинки. Прорисовка ведется непосредственно в видеобуфер дисплея, скорость работы средняя.
StaticКамера реагирует на перемещение заднего плана на экране NES и пытается сдвинуть свой фокус в ту часть картинки, в направлении которой движется персонаж игры. Если задний план экрана NES неподвижен, то камера просто отображает центр картинки. Прорисовка так же ведется непосредственно в видеобуфер дисплея, скорость аналогична камере Dynamic.
DisabledВидеоподсистема эмулятора отключена.

Быстрое переключение типа камеры можно назначить на любую клавишу телефона, выбрав ее Key action равным "Switch camera".

ВНИМАНИЕ! Чем меньше разрешение дисплея телефона либо оно приближается к разрешению экрана NES (256x240), тем меньше заметна разница в картинке между режимами Scale LQ и Scale HQ. Так же при малом разрешении играть в режимах Dynamic и Static, даже не смотря на то, что они используют всю площадь дисплея, очень тяжело!

Settings > Display > Fullscreen scale [Disabled, Enabled]
Камеры Scale LQ и Scale HQ могут работать в одном из двух режимов масштабирования - "Windowed" и "Fullscreen". Если данная настройка выставлена в Disabled, значит, соответствующая камера работает в режиме "Windowed", в котором при прорисовке на дисплее телефона экрана NES сохраняется правильное соотношение сторон экрана (пропорций), так же на дисплее видны статусная строка телефона и надписи над софт-клавишами.

Если же настройка выставлена в Enabled, то соответствующая камера работает в режиме "Fullscreen", в котором при прорисовке на дисплее телефона экрана NES его пропорции не сохраняются, картинка максимально "растягивается" по высоте (ширине для повернутых режимов дисплея), занимая всю доступную площадь экрана. К тому же, при работе Scale LQ в таком режиме, разборчивость картинки становится выше. К диспропорциям изображения глаз человека "привыкает" быстро, поэтому дискомфорт в процессе игры не ощущается.

Быстрое переключение режима масштабирования можно назначить на любую клавишу телефона, выбрав ее Key action равным "Scale mode".

Settings > Display > Camera reaction [Fast, Normal, Slow]
Скорость реакции камеры на изменения, происходящие на экране NES. Настройка актуальна для режимов камеры Dynamic и Static. Доступно три скорости: Fast - быстро, Normal - средне, Slow - медленно.

Settings > Display > Rotate screen [Not rotate, Clockwise, Counterclockwise]
Здесь задается режим ориентации (поворота) дисплея телефона. Возможны три варианта:

Not rotateпортретная ориентация, дисплей не повернут
Clockwiseальбомная ориентация, дисплей повернут по часовой стрелке
Counterclockwiseальбомная ориентация, дисплей повернут против часовой стрелки

Быстрое переключение режима ориентации (поворота) дисплея можно назначить на любую клавишу телефона, выбрав ее Key action равным "Rotate".

Settings > Display > Palette [Palette file]
Настройка, при помощи которой можно из списка доступных цветовых палитр выбрать необходимую палитру, которая будет использоваться при прорисовке экрана NES. Палитра представляет собой таблицу индексированных цветов, в которой каждому цвету NES соответствует определенное сочетание RGB-компонент. Доступные цветовые палитры можно изменить, отредактировав "Nescube.jar"

Settings > Display > Saturation, % [0 - 100]
Управление цветовой насыщенностью картинки, выводимой на дисплей телефона в процессе эмуляции. Значение задается ползунком в диапазоне от 0 до 200 процентов. При 0% получаем черно-белую картинку, при 200% - перенасыщенную в два раза.

Settings > Display > Brightness, % [0 - 100]
Управление яркостью картинки, выводимой на дисплей телефона в процессе эмуляции. Значение задается ползунком в диапазоне от 0 до 200 процентов. Рекомендуется выставлять значение в пределах от 50 до 150%.

Settings > Control

Settings > Control > Turbo buttons > Turbo A (Jump) [checkbox]
Установленный флажок свидетельствует о том, что клавиша A (Jump) джойстика консоли работает в режиме Turbo. В этом режиме, при удерживании клавиши в нажатом состоянии, в играх ее срабатывание повторяется циклически.

Settings > Control > Turbo buttons > Turbo B (Fire) [checkbox]
Установленный флажок свидетельствует о том, что клавиша B (Fire) джойстика консоли работает в режиме Turbo. В этом режиме, при удерживании клавиши в нажатом состоянии, в играх ее срабатывание повторяется циклически.

Settings > Control > Joystick [UP] ~ Volume- (Zoom-) key [Key action]
Здесь представлен набор настроек, каждая из которых описывает закрепленное за соответствующей клавишей телефона действие. Некоторые из указанных в данном разделе настроек клавиши могут физически отсутствовать на конкретной, отдельно взятой модели телефона. Чтобы настроить управление, необходимо каждой клавише поставить в соответствие нужное действие (Key action):

Not definedдействие не определено
Rightклавиша джойстика "Вправо"
Leftклавиша джойстика "Влево"
Downклавиша джойстика "Вниз"
Upклавиша джойстика "Вверх"
Selectклавиша джойстика "Выбор"
Startклавиша джойстика "Старт"
A (jump)клавиша джойстика "Прыжок"
B (fire)клавиша джойстика "Огонь"
Switch cameraпереключение режима камеры
Scale modeпереключение режима масштабирования картинки
Rotateповорот дисплея

Следует отметить, что имеется возможность назначить на разные клавиши телефона одни и те же действия, тем самым, дублируя их (полезно, например, иметь на клавиатуре пару клавиш "Fire" или "Jump").

ВНИМАНИЕ! Для каждого режима ориентации дисплея (Not rotate, Clockwise, Counterclockwise) действия клавиш телефона задаются отдельно! По умолчанию действия клавиш определены только для Not rotate режима дисплея!

Settings > Engine

Settings > Engine > Skip frames [0 - 8]
Широко распространенная технология Skip frames (пропуск кадров) часто используется для повышения скорости эмуляции в ущерб "плавности" картинки. Количество кадров для пропуска показывает, сколько будет пропущено кадров между двумя последовательными прорисовками экрана NES на дисплее телефона. Настройка позволяет выставить пропуск от 0 до 8 кадров (0 - все кадры рисуются).

Settings > Engine > Video rendering > Fast fullscreen rendering [checkbox]
Установка флажка активизирует технологию Fast fullscreen rendering, которая переводит эмулятор Nescube в упрощенный режим эмуляции, что приводит к повышению FPS. Однако большинство игр работают в таком режиме не корректно, а иногда даже медленнее стандартного режима эмуляции. Рекомендуется использовать данную технологию, если в игре не наблюдаются "побочные эффекты".

Settings > Engine > Video rendering > Accurate Sprite 0 detect [checkbox]
Настройка, повышающая совместимость эмулятора. Установка флажка активизирует более точный алгоритм определения момента рисования видеоконтроллером NES спрайта (спрайт - элементарная составляющая подвижного графического объекта) с номером 0, что во многих играх NES используется для организации разделения экрана на подвижную и неподвижную (статичную) части и для некоторых других целей. Если в некоторых областях картинки появляется мусор в виде квадратиков и нехарактерных графических элементов, то установка данного флажка может исправить ситуацию.

Settings > Engine > Video rendering > Emulate disabled screen [checkbox]
Настройка, повышающая совместимость эмулятора. Игра NES программно может переводить видеопроцессор консоли NES в т.н. "выключенное" состояние, когда рисование спрайтов и заднего плана запрещено. В данном состоянии видеоконтроллер просто заполняет кадр черным цветом. Существуют много игр NES, которые используют данную особенность. Установка флажка заставляет эмулятор принудительно очищать видеобуфер кадра, повторяя тем самым поведение видеоконтроллера. Эффект от данной настройки очень наглядно можно увидеть в игре "Darkwing Duck", если на любом из уровней войти в режим паузы (нажать клавишу телефона, ответственную за клавишу джойстика "Start").

Settings > Engine > Video rendering > 224 lines in frame [checkbox]
Консоль NES существует для двух видеостандартов: NTSC - размер кадра 224 строки, PAL - размер кадра 240 строк. Если флажок установлен, то используется стандарт NTSC, и соответственно на дисплей телефона транслируются кадры в размере 224 строки, в противном случае - стандарт PAL с кадром в 240 строк. Для каждой конкретной игры рекомендуется выбрать свой стандарт. Для одних игр предпочтительней 240 видимых строк, чтоб картинка была видна в полном объеме, другие же игры рассчитаны на 224 видимых строки и в режиме PAL выглядят просто нелепо (игра "Blue Shadow", первый уровень на корабле, при 240 строках в самом низу картинки видно, как обрубленный край корабля движется вверх-вниз).

ВНИМАНИЕ! Данная опция лишь задает видимый размер кадра и никак не влияет на тайминги самих узлов консоли - они всегда остаются в стандарте NTSC (в кадре 262 логических строки по 113.7 тактов CPU на каждую строку).

Settings > Engine > Smart CPU acceleration [Restart on low FPS, Without restart, Disabled]
Данная настройка управляет работой уникальной технологи Smart CPU acceleration, призванной ускорить эмуляцию процессора NES за счет блокировки некоторых специфических участков кода от бессмысленной эмуляции. Активация технологии, как правило, неплохо повышает FPS. Доступны следующие варианты настройки:

Restart on low FPSСтатистический анализатор технологии Smart CPU acceleration, позволяющий выявлять "проблемные" участки кода, перезапускается, когда FPS переходит в "Красный" сектор, опускаясь ниже отметки в 25 кадров. Процесс статистического анализа расходует на себя не мало ресурсов, поэтому во время его запуска и работы общая скорость эмуляции снижается.
Without restartСтатистический анализатор технологии Smart CPU acceleration запускается лишь один раз во время перехода Nescube из любого другого режима непосредственно в режим эмуляции, и не перезапускается при низком FPS. Данный вариант настройки имеет смысл использовать, если игра работает с довольно низким FPS и постоянный автоматический перезапуск анализатора еще больше ее (игру) "затормаживает".
DisabledТехнология Smart CPU acceleration отключена. Можно попробовать использовать данный вариант настройки для "зависающей" по непонятным причинам игры - теоретически в зависании может быть виновата (в силу особенности своей работы) технология Smart CPU acceleration, но на практике доказательств этому не было обнаружено.

Settings > Engine > Frame delay [0 - 20]
Настройка задает задержку в миллисекундах в конце каждого сэмулированного кадра работы аппаратных узлов NES. Может использоваться для умышленного уменьшения/ограничения FPS в играх, сильно "шустро бегающих" на некоторых современных устройствах с J2ME. Так же внесение задержки может положительно сказаться на качестве эмуляции звука и надежности срабатывания клавиш телефона.

Settings > Sound

Settings > Sound > APU emulation [Disabled, Enabled]
Если данная настройка выставлена в Disabled, значит эмуляция APU (звукового сопроцессора) полностью отключена.

Settings > Sound > APU channels > Square 1 [checkbox]
Установленный флажок сигнализирует о том, что работа звукового канала Square 1 разрешена.

Settings > Sound > APU channels > Square 2 [checkbox]
Установленный флажок сигнализирует о том, что работа звукового канала Square 2 разрешена.

Settings > Sound > APU channels > Triangle [checkbox]
Установленный флажок сигнализирует о том, что работа звукового канала Triangle разрешена.

Settings > Sound > Triangle patch [0 - 127]
Число, задающее номер MIDI-инструмента, используемого при воспроизведении звукового канала APU с треугольной формой сигнала (канал Triangle).

Settings > Sound > Square patch [0 - 127]
Число, задающее номер MIDI-инструмента, используемого при воспроизведении звуковых каналов APU с прямоугольной формой сигнала (каналы Square 1 и Square 2).

ВНИМАНИЕ! Если при входе в данный раздел (Settings > Sound) вы получили сообщение "The sound output is not supported on this device!", значит ваше J2ME-устройство не поддерживает прямое программирование встроенного MIDI-синтезатора!

Settings > Other

Settings > Other > Video features > Enable OSD [checkbox]
Установленный флажок разрешает работу своеобразной информационной строки - OSD, функцией которой является отображение ответной на действия пользователя информации, например, после нажатия клавиши телефона, отвечающей за поворот дисплея, OSD выводит надпись "Rotation".

Settings > Other > Video features > Show FPS [checkbox]
Установленный флажок разрешает отображение на дисплее FPS (Frames per second - число виртуальных кадров за одну секунду), что может быть полезно на этапе настройки эмулятора или конкретной игры на максимальную скорость и наилучшее качество эмуляции. Данная надпись отображается в одном из трех цветов, характеризирующих скорость эмуляции вцелом:

Красныйскорость эмуляции низкая, требуется настройка параметров эмулятора с целью повышения быстродействия
Желтыйскорость эмуляции достаточна, дополнытельная настройка параметров эмулятора не обязательна
Зеленыйскорость эмуляции на уровне реальной консоли, желательна подстройка параметров эмулятора с целью повышения качества эмуляции

ВНИМАНИЕ! В зависимости от конкретного этапа работы игры NES (заставка, игровой процесс и др.), FPS может сильно меняться! Рекомендуется настраивать параметры эмуляции именно на этапе игрового процесса, так как большую часть времени вы будете проводить именно на этом этапе игры.

Settings > Other > OSD colour [White, Yellow, Cyan, Blue]
Данная настройка задает цвет, которым будет отображаться OSD: White - белый, Yellow - желтый, Cyan - голубой, Blue - синий. Выберите цвет, который считаете наиболее приятным для ваших глаз.

Settings > Other > OSD size [Small, Medium, Large]
Данная настройка задает размер шрифта, которым будут отображаться OSD и FPS: Small - мелкий, Medium - средний, Large - крупный.

Settings > Other > Game features > Keep game settings [checkbox]
Одна из мощнейших настроек эмулятора Nescube. Установленный флажок сигнализирует о том, что настройки Settings > Control, Settings > Engine и Settings > Sound индивидуальны для каждой игры NES. Это означает, что для каждой игры, не зависимо от остальных игр, можно единожды настроить основные параметры эмуляции и в дальнейшем не возвращаться к этой утомительной процедуре при запуске каждой новой игры NES. Настройки Settings > Display и Settings > Other остаются общими для всех игр!

Settings > Other > Game features > Unceasing play [checkbox]
Установленный флажок говорит о том, что технология Unceasing play активна. Данная технология автоматически производит сохранение/восстановление состояния игры при ее закрытии/запуске, позволяя проходить ее (игру) в "несколько подходов".

Nescube в режиме эмуляции

Когда Nescube находится в режиме эмуляции, то происходит эмулирование аппаратных узлов консоли NES, работает игра NES, на дисплее отображается экран NES, воздействия пользователя на клавиши телефона переносятся в игровую ситуацию и приводят к ее адекватному поведению. Если что-то в реальности не соответствует этому перечню, то это указывает на наличие проблем эмуляции, часть из которых можно решить путем правильной настройки эмулятора.

В режиме эмуляции на софт-клавишах телефона доступно несколько комманд:

Settingsвызов раздела настроек
Save stateсохранение игрового состояния
Load stateвосстановление игрового состояния
Resetобщий сброс консоли NES
Menuвыход в главное меню эмулятора

Если у вас активна настройка Settings > Other > Video features > Enable OSD, то на дисплее, в ответ на некоторые действия пользователя отображается подтверждение в виде строки OSD, перекрывающей на некоторое время надпись FPS (если она разрешена флажком Settings > Other > Video features > Show FPS). Перечень возможных сообщений:

Reset [map: X]Сброс консоли NES. X - номер маппера, который использует игра NES. Данное сообщение появляется при запуске игры (если технология Unceasing play не активна) - "холодный" старт, память консоли очищается, либо при выборе команды Reset из меню на софт-клавише телефона - "горячий" старт, память консоли не очищается.
Camera: XСообщение появляется в момент переключения типа камеры клавишами телефона, для которых назначено действие Switch camera. X - выбранный тип камеры: Scale LQ, Scale HQ, Dynamic или Static. Переход от одного типа камеры к другому осуществляется последовательно, после Static опять следует Scale LQ. Полное отключение камеры доступно только из Settings > Display > Camera type.
Scale: XСообщение появляется в момент переключения режима масштабирования клавишами телефона, для которых назначено действие Scale mode. Имеет смысл только для камер Scale LQ и Scale HQ. X - режим масштабирования: Fullscreen (на полный экран, без сохранения пропорций), Windowed (в окне, пропорции сохраняются).
RotationСообщение появляется в момент переключения режима ориентации (поворота) дисплея клавишами телефона, для которых назначено действие Rotate. Переход от одного режима поворота к другому осуществляется последовательно: поворот по часовой стрелке, поворот против часовой стрелки, без поворота - и так по кругу.
State is savedСообщение, подтверждающее факт сохранения игрового состояния. Оно появляется при выборе команды Save state из меню на софт-клавише телефона. Если подтверждающее сообщение (при включенном OSD) не появилось, то это значит, что сохранение состояния по каким-то причинам не произошло. Самая распространенная причина - слишком длинное имя игры, из-за чего не удается сформировать запись в постоянной памяти телефона (RMS).
State is loadedСообщение, подтверждающее факт восстановления игрового состояния. Оно появляется при выборе команды Load state из меню на софт-клавише телефона либо при запуске игры, если активна технология Unceasing play. Отсутствие (при включенном OSD) подтверждающего сообщения говорит о том, что для данной игры состояние еще ни разу не сохранялось.
CPU failed!Данное сообщение, которое появляется и больше не исчезает, говорит о том, что процессор консоли NES "завис", т.е. произошла ошибка при выполнении кода программы и процессор "пошел гулять" по только ему известным адресам. Подобная ошибка в большинстве случаев связана с неправильной эмуляцией каких-то узлов консоли. Рекомендуется поэкспериментировать с настройками Settings > Engine. Если это не помогло, то обратитесь к автору эмулятора с точным указанием названия проблемной игры, чтобы он смог выяснить и исправить причину ошибки в следующей версии Nescube!

ВНИМАНИЕ! При запуске игры эмулятор может выдавать различные сообщения об ошибках, наиболее распространенным из которых является "Unsupported mapper" - непподдерживаемый маппер игры. Парой строк выше будет указан сам номер неподдерживаемого маппера. Эта ошибка говорит о том, что эмулятор не способен запустить данную игру, так как не поддерживает маппер, на который она (игра NES) расчитана.

Замена/добавление игр NES и цветовых палитр в эмуляторе Nescube

Использование пакета Nescube 1.2 package

Данный пакет предназначен для автоматизации процесса создания файла-мидлета "Nescube.jar" с необходимым набором игр NES. После распаковки zip-архива, вы получите три папки и два bat-файла: "Make Nescube Full" и "Make Nescube Lite". Первый файл создает наиболее полную версию эмулятора со всеми задуманными в нем "красотами". Второй файл создает упрощенную версию эмулятора, в которой отсутствует заставочная картинка и все иконки. Функционально версия "Lite" ничем не уступает "Full", но за счет отсутствия сопутствующей графики "весит" она на 66 Кб меньше.

Так как же создать мидлет эмулятора с нужным набором игр? Рассмотрим последовательность действий:

  1. Устанавливаем Nescube 1.2 package на компьютер. Для этого нужно раcпаковать архив "nescube12_package.zip".
  2. Если необходима дополнительная информация, то заходим в папку "doc". Там находится данная документация.
  3. В папку "nes" складываем все игры (файлы с расширением ".nes"), которые хотим увидеть в эмуляторе.
  4. Находим в той же папке файл "nes_list.txt", в котором прописываем имена всех nes-файлов без расширения ".nes". Каждое имя должно располагаться на новой строке, по длине не превышать 28 символов, состоять только из латинских букв, цифр и знаков! Не забывайте прописывать имена, иначе файл игры попадет в мидлет, но сам эмулятор не сможет его увидеть!
  5. Когда все готово запускаем "Make Nescube Full" (для "Lite"-версии - "Make Nescube Lite"). В корневой папке пакета появятся файлы "Nescube.jad" и "Nescube.jar".
  6. Если в телефоне имеется более старая версия Nescube, то желательно ее удалить.
  7. "Заливаем" файл(ы) в телефон любым удобным способом. Все, эмулятор Nescube готов к использованию!

Не забывайте главное - для использования пакета вам необходим компьютер!

Редактирование файла Nescube.jar вручную

Чтобы добавить или заменить игру NES вручную выполните следующую последовательность действий:

  1. Файл "Nescube.jar" открываем любым, умеющим работать с zip-архивами, архиватором, например, WinRar и извлекаем находящиеся в нем файлы. В результате должна получиться папка "Nescube" cо следующим содержимым:

    • games
    • META-INF
    • resource
    • nescube.png
    • a.class
    • b.class
    • nescube.class

  2. Войдите в папку "Nescube\games\". Здесь собраны все находящиеся в мидлете игры, представляющие собой файлы с расширением ".nes". Удалите ненужные файлы или добавьте новые, переименуйте их в удобные для вас имена, учитывая что каждое имя должно по длине не превышать 28 символов, состоять только из латинских букв, цифр и знаков!

  3. В папке "Nescube\games\" присутствует файл "nes_list.txt". В нем находится список доступных для запуска игр. Открыв его в блокноте, можно увидеть нечто вроде этого:

    • Adventure Island
    • Battletoads II
    • Battle City
    • Super Mario
    • Contra

    Каждая строка содержит название определенной игры NES. Причем название должно полностью соответствовать файлу игры из папки "Nescube\games\", но без расширения ".nes". Т.е. для файла, например, "Contra.nes" в "nes_list.txt" необходимо прописать "Contra" (без кавычек). Шаги 2 и 3 повторяются до тех пор, пока в папке "Nescube\games\" окажутся все необходимые игры, а в файле "nes_list.txt" - их имена. Не забывайте прописывать имена, иначе файл игры попадет в мидлет, но сам эмулятор не сможет его увидеть!

    ВНИМАНИЕ! Перед тем, как добавлять игру в Nescube, желательно проверить ее на совместимость. Для этого на любом "ПиСи'шном" эмуляторе (VirtualNES, FCE, Nester и т.п.) запустите нужный nes-файл и потом опцией типа "Rom info", "About rom" посмотрите информацию, вчастности пунк "Mapper". Если номер маппера отсутствует в списке поддерживаемых Nescube мапперов, то игра не будет работать на данном эмуляторе!

  4. Теперь необходимо заново создать файл мидлета. Рассмотрим случай с использованием все того же WinRar. В папке "Nescube" выделяем всё иимеющиеся файлы и жмем правую кнопку мыши. В появившемся контекстном меню выбираем "Добавить в архив...", при этом запускается архиватор. В WinRar'е в опции "Формат архива" выбираем ZIP - это очень важно! Другие настройки оставляем как есть! Далее жмем "ОК" и через мгновение в папке "Nescube" появляется архив "Nescube.zip". Меняем расширение "zip" на "jar" и "заливаем" мидлет в телефон!

ВНИМАНИЕ! Существует возможность использовать сохранения состояния, сделанные в процессе прохождения той или иной игры, после обновления мидлета! Для этого при создании нового файла-мидлета включите соответствующие игры в его состав. Названия игр должны в точности соответствовать названиям игр из мидлета "Nescube.jar", все еще находящегося в телефоне. Далее отправляем новый мидлет на телефон. Телефон сообщит, что файл "Nescube" уже существует и предложит его заменить (перезаписать). Разрешаем ему это сделать. Запускаем эмулятор Nescube > нужную игру > загружаем сохранение ее состояния и продолжаем играть с прежнего места. Если у вас актавна технология " Unceasing play", то она вернет вас в игровую ситуацию автоматически. Так же сохранятся все индивидуальные настройки игр и общие настройки самого эмулятора!

Замена/добавление файлов цветовых палитр

Замена/добавление файлов палитр выполняется по такому же принципу, как и замена/добавление файлов игр путем редактирования файла "Nescube.jar". Разница лишь в том, что файлы цветовых палитр находятся в папке "Nescube\resource\palettes\", а список палитр - в файле "pal_list.txt". Цветовая палитра представляет собой файл с разрешением ".pal" и размером 192 байта. Данные файлы можно найти в составе некоторых "ПиСи'шных" эмуляторов NES либо можно сформировать самостоятельно. Следует помнить о том, что наличие файла палитры "Nescube\resource\palettes\Nescube.pal" обязательно, так как эта цветовая палитра используется по умолчанию!

FAQ - Часто задаваемые вопросы

  1. У меня FPS счетчик 50-80 выдает, а на глаз 15-20. Почему так?
    Цифра, которую видно на экране телефона рядом с надписью FPS (Frames Per Second) - это количество сэмулированых программой за одну секунду кадров работы аппаратных узлов реальной консоли NES. Вся эмуляция сводится к эмуляции одного кадра работы узлов, потом этот процесс циклически повторяется. Именно эта величина характеризует скорость работы эмулятора в целом. В идеале она должна быть около 60 кадров за секунду. В конце эмуляции очередного кадра работы узлов консоли на дисплее телефона формируется (в процессе эмуляции соответствующих узлов графического процессора - PPU) содержимое экрана NES. Данный процесс весьма ресурсоемкий и сильно занижает значение FPS.

    Для повышения скорости эмуляции в Nescube используется широко распространенный механизм пропуска процессов прорисовки экрана - Skip frames (пропуск кадров). При активном механизме Skip frames, картинка обновляется на экране телефона не на каждом кадре эмуляции, а на каждом втором (третьем, четвёртом и т.д.). Тогда общее время, затраченное на процесс прорисовки экрана, будет в два (три, четыре и т.д.) раза меньше. Высвобожденное время будет потрачено на процесс эмуляции работы узлов консоли. Тем самым повысится FPS (но не в два раза, так как здесь роль играет соотношение времени эмуляции кадра работы консоли и времени прорисовки ее экрана). Т.е. чем больше величина параметра Skip frames, тем больше процессов прорисовки пропускается за единицу времени, тем больше времени (ресурсов, производительности) приходится на эмуляцию работы консоли и тем выше величина FPS! НО, так как число прорисовок экрана уменьшается, то соответственно ухудшается "плавность" картинки. Следует помнить так же о том, что увеличение параметра Skip frames не всегда приводит к увеличению скорости эмуляции, так как скорость работы процессора телефона, а значит и java-системы ограничена!

    Чтобы получить реальную частоту обновления картинки на дисплее телефона необходимо FPS разделить на (величина Skip frames + 1).

  2. Имеет ли значение разрешение дисплея телефона?
    Рекомендованным разрешением дисплея для Nescube является 176x220 точек. Официально эмулятор поддерживает дисплеи от 128x160 до 240x320 точек. Однако встроенная технология Small screen interface способна работать с любым дисплеем J2ME-устройства.

  3. Что может быть причиной "артефактов" (неправильного повидения картинки на экране) в некоторых играх?
    Причин может быть очень много, вот лишь некоторые из них:

    • Недостаточная совместимость эмулятора с самой игрой. Решение - выход более новой версии эмулятора, в которой будет устранена несовместимость.
    • Включен упрощенный режим эмуляции Fast fullscreen rendering, в котором игра работает не правильно. Решение - отключить указанный режим для данной игры.
    • В эмуляторе не верно отслеживается момент рысования 0-го спрайта. Решение - установка флажка Settings > Engine > Video rendering > Accurate Sprite 0 detect.
    • Игра, в силу особенностей своей реализации, требует более точной эмуляции состояния видеопроцессора, в котором рисование спрайтов и заднего плана запрещено. Решение - установка флажка Settings > Engine > Video rendering > Emulate disabled screen.

  4. Что значит надпись FPS и можно ли её скрыть?
    Надпись FPS показывает среднее количество виртуальных кадров работы узлов консоли, сэмулированных эмулятором за одну секунду. Ее можно скрыть, воспользовавшиcь настройкой Settings > Other > Video features > Show FPS.

  5. Почему звук не работает на моем телефоне?
    Для эмуляции звука в Nescube используется технология APU to MIDI transfer. Условием ее работы является обязательная поддержка Java-подсистемой телефона прямого доступа ко встроенному MIDI-синтезатору. Скорее всего ваш телефон не соответствует данному условию, на нем не возможна эмуляция звука.

  6. Почему качество звука плохое? Почему он играет не равномерно, замедленно с завываниями?
    Качество эмуляции звука очень далеко от идеала. Причин этому много:

    • синтезирование звука при помощи MIDI, лишь отдаленно напиминающее APU;
    • уровень FPS, который почти всегда ниже требуемых 50-60 кадров;
    • постоянно скачащий FPS, который ухудшает стабильность звучания и привносит искажения;
    • достаточно упрощенный алгоритм эмуляции APU.

  7. В некоторых играх (например Blades of Steel) есть звуки человеческого голоса. Будет ли слышно их на телефоне?
    Нет, и врятли когда нибудь это будет слышно, так как полноценная реализация APU-канала DMC, отвечающего за подобные эффекты, в рамках технологии APU to MIDI transfer не возможна.

  8. Не слишно шумового канала, ударников. В чем дело?
    Эмуляция звуковых каналов музыкального сопроцессора Noise (шумовой канал) и DMC (используется для эффектов, голоса) в Nescube 1.2 не реализована.

  9. Что это за режим камеры "Disabled" и как его можно использовать?
    Это не режим, а значение настройки Settings > Display > Camera type, которое обозначает, что выдеоподсистема эмулятора отключена (трансляция экрана NES на дисплей телефона отсутствует). Никакого особого практического приминения "Disabled" не имеет, но его можно использовать, например, при прослушивании музыки в игре, которая в этом режиме играет "шустрее".

  10. Могу ли я как-то запустить другие игры, помимо тех, которые "прописаны" в мидлете?
    В данной версии эмулятора запустить можно только те игры, которые находятся внутри мидлета. Процесс замены/добавления игр в мидлет описан в соответствующем разделе данного руководства. Возможности запуска игр из других папок телефона в данной версии Nescube нет, так как эмулятор не поддерживает файловую систему телефона!

  11. Не работают клавиши на некоторых смартфонах.
    Часто встречающаяся проблема, решение которой автору не известно, так как у него нет возможности экспериментировать на смартфонах ввиду отсутствия доступа к данным устройствам. В качестве "теоретического" решения проблемы автор может посоветовать лишь манипуляции с настройкой Settings > Engine > Frame delay.

  12. Какие существуют ограничения на запускаемые в эмуляторе игры?
    Существуют два типа ограничений на запускаемые в эмуляторе игры NES:

    • ограничения, накладываемые совместимостью эмулятора с играми (например, номер маппера);
    • ограничения, накладываемые самим J2ME-устройством - телефоном (например, объем доступной в Java-системе памяти, параметры дисплея, быстродействие процессора).

    В общем случае не рекомендуется использовать с эмулятором игры объемом более 512Кб.

  13. Можно ли задать кнопкам фотокамеры (Zoom-, Zoom+), регулировкам громкости (Volume-, Volume+) действия в играх?
    Да, эти кнопки доступны в наборе настроек Settings > Control > Joystick [UP] ~ Volume- (Zoom-) key и им можно назначать необходимые действия. Однако следует помнить, что, не смотря на физическое присутствие, данные кнопки могут оказаться программно недоступными из Java. Так же не рекомендуется назначать на данные кнопки действия, соответствующие кнопкам джойстика NES.

  14. Можно ли играть в режиме двух игроков?
    Нет, и врятли данная возможность появится в ближайшее время, так как ее реализация сопряжена с большими техническими трудностями. К тому же низкая нынешняя скорость эмуляции не оставляет никаких шансов для обработки режима двух игроков.

  15. Появится ли руссифицированный интерфейс?
    Это зависит от активности пользователей относительно данного вопроса. Если число желающих видеть русифицированный интерфейс будет достаточно велико, то в будущем возможен выход новых версий Nescube с русифицированным интерфейсом или даже с многоязычной поддержкой на программном уровне.

  16. Требуется ли покупка/активация программы?
    Нет. Эмулятор Nescube (на момент выхода версии 1.2) является бесплатной программой и не требует покупки или активации. Его функциональность ничем не ограничена.

  17. С какими моделями телефонов совместим Nescube?
    Эмулятор Nescube совместим с большинством мобильных телефонов с поддержкой Java 2 ME (CLDC-1.0, MIDP-2.0), однако, кроме этого важную роль играет быстродействие телефона. Эмулятор тестировался на реальном телефоне Sony Ericsson K700. Совместимость и качество работы программы на других телефонах автором лично не проверялись.

  18. Где брать игры для Nescube?
    В разделе Ссылки есть ссылка на крупнейший эму-ресурс, на котором можно найти тысячи игр NES и массу полезной информации. В сети Internet есть много других ресурсов с играми NES, найти которые можно воспользовавшись поиском.

  19. Работает ли данный эмулятор быстрее всеми любимого vNes?
    Ответ на этот вопрос пользователь может найти сам. Для этого лишь нужно правильно сравнить эмуляторы. Изначально по умолчанию vNes настроен на максимальное быстродействие при минимальной совместимости, Nescube же настроен на наилучшее соотношение "скорость/совместимость". Поэтому при сравнении нужно настроить оба эмулятора на примерно одинаковый режим работы.

  20. Что планируется в новой версии?
    Для новой версии будет создано новое ядро версии 2, основной идеей которого будет "простота кода - ключ к быстродействию". Много бессмысленной функциональности будет убрано, полностью будет изменена видеоподсистема эмулятора, намечена реализация возможности доступа к файловой системе телефона на основе стандарта JSR-75. Так же планируется переработка звуковой подсистемы эмулятора, в частности улучшение эмуляции APU и добавление встроенного MIDI-плеера, улучшение совместимости и расширение количества поддерживаемых мапперов.

Real Soft Makers homepage
Домашняя страничка автора. Здесь выкладываются самые новые версии эмулятора Nescube, присутствует форум, на котором можно задать свои вопросы или высказать предложения автору программы.
Nescube v1.2 package
Пакет, при помощи которого вы сможете достаточно легко и быстро создать Nescube.jar (+ Nescube.jad), наполненный интересующими вас играми NES. Работа с данным пакетом подробно описана здесь, в составе присутствует данная документация. Размер пакета в архиве zip - 568 Кб.
Nescube v1.2
Прямая ссылка на собранный эмулятор Nescube. В него включены следующие игры: Adventure Island, Battletoads II, Battle City, Super Mario, Contra. Тип файла - jar, размер - 462 Кб.
Nescube old versions
Небольшой архив предыдущих версий эмулятора. Предназначен для интересующихся историей Nescube, или любителей поиграть медленно и глюкаво. В состав каждой версии эмулятора входит одна игра - Battle City. Архив типа zip, размер - 166 Кб.
www.emu-land.net
Огромнейшая база игр NES и не только. Все игры имеют скриншот и авторское описание. Если вы будете качать игры с этого ресурса, то учитывайте следующее: каждая игра NES запакована в архив 7z, внутри которого иногда бывает несколько файлов, представляющих собой разные вариации и хаки данной игры. Распакуйте архив и выбирите один nes-файл для использования совместно с эмулятором Nescube.


Идея, графическое оформление, воплощение в коде:

Dr.Lion/RSM

Реклама, тестирование, моральная поддержка:

knoplef

Тестирование:

ch41ns4w, RamTop, CyberPunk, Cooper/RSM

Контактная информация:

e-mail: lion_rsm@mail.ru
icq: 347279524

Ukraine, Kharkov, Real Soft Makers 2007


Hosted by uCoz