Автор Тема: Вопросы новичков  (Прочитано 53810 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5557
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #240 : 31 Июль 2024, 03:00:05 »
И где можно почитать доходчивые статьи про мапперы с реальными примерами? Такое ощущение, что проще открыть исходники FCEUX и почитать, как там реализовано.
https://www.nesdev.org/wiki/Mapper. Некоторые мапперы реализованы только в https://unlicensed.games/libg/static.php?page=NintendulatorNRS, поэтому его исходный код тоже. В FCEUX точности не хватает для разработки игр, там даже в MMC3 не учитывается особенность IRQ. Кроме Mesen, нормальных эмуляторов со встроенным отладчиком нет. В любом случае нужно проверять на реальной консоли, лучше на разных.
UPD: В Mesen нужно в настройках эмуляции включить пункты для разработчиков.
« Последнее редактирование: 31 Июль 2024, 03:24:40 от Sharpnull »

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1383
    • ВКонтакте
    • Steam
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #241 : 31 Июль 2024, 13:20:20 »
пункты для разработчиков
Какие функции появляются?

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5557
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #242 : 31 Июль 2024, 14:00:38 »
Какие функции появляются?
Не функции, это эмуляция дополнительных особенностей. Случайные значения на старте и глитчи, поэтому выключено по умолчанию. Одна из опций помогла исправить дёргающийся фон в адаптации Tiny Toon Adventures 6 на MMC3. Недавно там появилось "Enable PAL black borders (when running in PAL/Dedny mode)", просто чёрная рамка 2 px слева/справа и 1 px сверху, мало пользы, т. к. всё равно нужно учитывать, что 8 px могут быть не видны справа/слева, а 8 px сверху/снизу обычно скрыты.

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 104
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #243 : 31 Июль 2024, 16:13:10 »
Mesen очень крут, он может даже отматывать игру назад.
Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1/2)
Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 2/2)
Спасибо, буду пробовать его  :cool:

Как раз эти статьи читал, видимо, надо перечитать еще раз и на свежую голову, но нахожу их слишком теоретическими без технических деталей и примеров  :neznayu:

Добавлено позже:
https://www.nesdev.org/wiki/Mapper. Некоторые мапперы реализованы только в https://unlicensed.games/libg/static.php?page=NintendulatorNRS, поэтому его исходный код тоже. В FCEUX точности не хватает для разработки игр, там даже в MMC3 не учитывается особенность IRQ. Кроме Mesen, нормальных эмуляторов со встроенным отладчиком нет. В любом случае нужно проверять на реальной консоли, лучше на разных.
UPD: В Mesen нужно в настройках эмуляции включить пункты для разработчиков.
Ого, вот это уже серьезнее, спасибо  :cool:
Не уверен, что дойду до консолей, у меня больше исследовательский интерес (парсер свой написать, в таких же целях, понятно что все исследовано, но интересно самому разобраться), я немного был поражен, какие игры можно было делать, какие игры были и почему, до мапперов, количеством инструкций процессора, и то что адресное простраство такое небольшое, после сеги немного вздохнул с облегчением, а тут мапперы  :D

Добавлено позже:
А декомпиляторы есть, я пробовал какой-то ldr python (там загрузчик, и декомпилятор от ида)? Вроде бы сносно, но он не показывает области памяти для мапперов.
Если несложно, можете посоветовать какой-нибудь ресурс, вдруг вам очень помог, в моменте когда изучал сегу, множество ресурсов очень помогло, что-нибудь, что больше всего понравилось  ^_^

Добавлено позже:
https://www.nesdev.org/wiki/Mapper.
Шикарный сайт, спасибо большое  :wow:
« Последнее редактирование: 31 Июль 2024, 17:05:51 от Turbo2000 »

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4581
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Re: [ALL] Вопросы новичков
« Ответ #244 : 31 Июль 2024, 22:56:41 »
А декомпиляторы есть
Декомпиляторы во что? О_о

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 104
  • Пол: Мужской
    • Просмотр профиля
Re: [ALL] Вопросы новичков
« Ответ #245 : 01 Август 2024, 00:03:01 »
Декомпиляторы во что? О_о
Лоадер, неправильно написал, у 6502 свой ассемблер.

Оффлайн MaxWooD

  • Пользователь
  • Сообщений: 1110
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #246 : 10 Август 2024, 09:16:25 »
Приветствую форумчане!
Помогите с поиском игры на нашем форуме.
Помнится кто-то писал (и даже выкладывал версию игры) про исправления в игре Mickey's Adventures in Numberland [NES].
Никак не могу найти на форуме этот пост и этот хак. Может кто-то еще помнит?

Оффлайн Cyneprepou4uk

  • Пользователь
  • Сообщений: 207
  • Пол: Мужской
  • Самый лысый ромхакер
    • ВКонтакте
    • Просмотр профиля

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2651
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #248 : 12 Август 2024, 18:44:03 »
можно ли как-то в r57shell версии эмулятора Gens поглядеть загруженность 68 и Z80 ?

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5557
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #249 : 12 Август 2024, 20:21:22 »
можно ли как-то в r57shell версии эмулятора Gens поглядеть загруженность 68 и Z80 ?
А как эмулятор должен рассчитать нагрузку? Как это может сделать игра, я примерно понимаю: время вычислений до начала ожидания VBlank. В SGDK можете посмотреть SYS_getCPULoad() из sys.c, он может отображать загруженность на экране. Для NES видел пример отображения в демо для FamiTone2 от Shiru, до тестируемой функции включалась серая палитра, а после отключалась и на эране видно сколько от кадра тратится времени. Впрочем, в Mesen есть Event Viewer и можно увидеть когда срабатывает breakpoint. В эмуляторах BGB и no$gba есть отображение нагрузки, но это только из-за наличия инструкций процессора для ожидания VBlank, а в MD такого вроде нет. Для MD можно добавить специальный регистр, который эмулятор будет считать концом вычислений кадра и тогда проще модифицировать нужную игру. Если это тысячи раз переваренная Дюна, то давно бы уже добавили отображение в код игры.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2651
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #250 : 12 Август 2024, 20:41:51 »
ну... несколько другая, чуть менее тыщи, но тоже переваренная игра. вот мне бы с моими тремя классами церковно приходской понять это 68 загружается по самые помидоры, или все-таки проблема в чем-то другом :)

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5557
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #251 : 12 Август 2024, 21:12:05 »
понять это 68 загружается по самые помидоры
Если речь про видимые тормоза с пропуском кадров, например, когда много объектов на экране, тогда можно попробовать поставить breakpoint'ы на начало обработчика VBlank и вне обработчика на инструкцию, которая выполняется раз в кадр. Во время пропуска кадра VBlank должен выполниться два раза подряд, но вторую инструкцию ещё найти нужно.
Есть же эмуляторы с разгоном. В случае уменьшения тормозов от разгона, можно говорить о проблеме с нагрузкой.
UPD: Или можно наоборот ограничивать производительность пока не будет видно ухудшения :)
« Последнее редактирование: 12 Август 2024, 21:20:06 от Sharpnull »

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1383
    • ВКонтакте
    • Steam
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #252 : 13 Август 2024, 02:57:18 »
Как реализованы многоигровки на Дэнди типа "9999 игр в одном"? Это несколько полноценных игр и таблица адресов и значения для изменения этих игр? И при запуске игра как-то патчится, или как это реализовано?

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5557
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #253 : 13 Август 2024, 04:24:42 »
"9999 игр в одном"?
В роме находятся ромы отдельных игр, маппер у картриджа специальный, позволяющий записью в регистры маппера зафиксировать выбранную игру, при этом она не знает о существовании других игр и пользуется своими регистрами. Меню многоигровки похоже на отдельную игру, только запускается первым. Обычно, для переключения на игру, меню записывает в RAM код записи в регистры и прыжок на начало игры, потому что переключение PRG банков сменит код меню на игровой и мы окажемся не там (если инструкция записи в регистр не в нужном месте). В "Чайках" для одной из игр такой код RAM $400:
STA $C002 переключает игру, а JMP $8003 специально для этой игры. Чтобы не писать для каждой игры свой адрес начала, используют прыжок на адрес сброса (Reset) игры - JMP ($FFFC), но в данной многоигровке сделано иначе для появления меню при сбросе консоли, а не выбранной игры, для этого им пришлось изменить код каждой игры и по адресу Reset каждой игры переключение на меню.
Кроме номера банка и названия игры, для каждой игры могут храниться: значение mirroring, значение маппера, размеры PRG и CHR, возможность записи в CHR и другое. В некоторых многоигровках модифицированные игры, чтобы из меню был доступ к: разным уровням, вариантам игры, читам.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1383
    • ВКонтакте
    • Steam
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #254 : 13 Август 2024, 13:27:50 »
Sharpnull, спасибо, ты старался, но я всё равно не понял - в картридже только несколько игр, или же 9999? Если много, то для экономии места проще было бы таки просто патчить те несколько оригинальных игр при запуске?

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5557
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #255 : 13 Август 2024, 14:22:50 »
в картридже только несколько игр, или же 9999?
Я не понял, что речь про кол-во игр в многоигровках с указанием кучи игр, я рассказал как устроены многоигровки вообще. Реальных игр раньше было несколько, в картриджах с ненастоящим кол-во игр в меню генерируются названия игр, поэтому список настоящий, но игры повторяются. В некоторых случаях ещё меняются начальные значения RAM, но, чтобы это сработало, игру модифицируют (как минимум убирают очистку RAM в нужном месте). Код и графика игры неизменяемые, поэтому под модификацией имею в виду изменение игры до создания картриджа, во время работы картриджа ром не меняется. Например, чтобы добавить выбор уровня из меню многоигровки, в игре убирают очистку и установку начального значения в RAM для уровня, тогда будет загружен нужный уровень, довольно очевидно. Ничего сложного в многоигровках с повторами не используется.
UPD: Сейчас ничто не мешает разработать свой маппер с 512 KiB ОЗУ под PRG ROM (256 KiB CHR RAM уже есть), тогда можно копировать игру, а на неё накладывать аналог IPS-патча, тогда влезет много хаков на один картридж. У многоигровок бывает 256 KiB CHR RAM, так что графические хаки уже можно реализовать. Но это никому не нужно.
« Последнее редактирование: 13 Август 2024, 14:39:09 от Sharpnull »

Оффлайн Guyver(X.B.M.)

  • Пользователь
  • Сообщений: 2641
  • Пол: Мужской
  • Уничтожим Кронос!
    • Facebook
    • Twitter
    • ВКонтакте
    • Youtube
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #256 : 13 Август 2024, 14:32:59 »
Я в одной из подобных многоигровок столкнулся с необычным случаем. Многоигровка простая, там 4 игры всего размножено в 9999. Но прикол в том, что среди графики есть банк с хаком star force . И это при том, что самого кода этой игры на картридже нет. Зачем это было сделано? Добивали графику для ровного счёта банков??? Почему не повторили банк с уже существующей игрой? :neznayu: Одни вопросы...

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5557
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #257 : 13 Август 2024, 14:53:09 »
среди графики есть банк с хаком star force . И это при том, что самого кода этой игры на картридже нет. Зачем это было сделано?
Это нормально, когда в многоигровках находят часть CHR и PRG банков игр, которых нет в меню. По ошибке как-то попадают. Недавно современный картридж с настоящими играми "365-in-1 Dendy" разбирал, там оказалась полная игра не в меню, если отредактировать меню, то она появится, но не было превью (картинка в меню). Поискал этот картридж в сети и был вариант с этой игрой (судя по описанию), но тоже 365-in-1. Может им нужно было число 365 или не успели нарисовать превью.
В старых играх попадается отладочная информация, мусор, исходных код, бывает из-за программы, которая собирает игру и по ошибке копирует ОЗУ ПК в оставшееся место. На tcrf.net о таких играх пишут, иногда можно понять какой инструмент использовали разработчики.

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4581
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #258 : 13 Август 2024, 20:02:34 »
Может им нужно было число 365
Может быть по количеству дней в году? Типа, картридж на каждый день...

Оффлайн Ivan_Ages

  • Пользователь
  • Сообщений: 747
  • Пол: Мужской
    • Просмотр профиля
Re: [ALL] Вопросы новичков
« Ответ #259 : 14 Август 2024, 12:14:03 »
Эта не та ли 365-в-1 от ньюгейма. Сначала выпустили 375 в 1. Был топ. Но карик начали минусить в отзывах. Потому что там были баттлтодсы1,2, которые разумеется почти ни у кого не работали. Затем выходит 365. До сих пор на озоне лежит только по сотке в месяц накручивают.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5557
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #260 : 14 Август 2024, 16:24:17 »
Эта не та ли 365-в-1 от ньюгейма
https://www.emu-land.net/forum/index.php/topic,12058.msg1588707.html#msg1588707 "Dendy мега хиты 365 игр", ниже в теме информация по дампу, сборке своих игр и перезаписи. Ferzi ещё паяльником с ней что-то делал для исправления перезаписи, может брак, не разбираюсь.

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 104
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #261 : 22 Август 2024, 21:38:53 »
Можете, пожалуйста, объяснить, почему при вызове сабрутины может внезапно сработать VBLANK?
Может быть такое, что игра никак не синхронизируется с прерыванием?



Добавлено позже:
Там есть какая-то синхронизация по кадрам, но она происходит до
Структура заполняется, и тайлы распакованные отправляются на VDP через DMA во время VBlank.

Добавлено позже:
Кажется, понял в чем дело, перепроверю код VBlank, но скорее всего в данном случае реализована очередь команд для VDP, поэтому синхронизация не требуется
« Последнее редактирование: 22 Август 2024, 23:40:54 от Turbo2000 »

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 104
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #262 : 23 Август 2024, 18:46:27 »
А можете, пожалуйста, подсказать, какие алгоритмы сжатия используются в Dune 2, The Story of Thor?

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2651
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #263 : 23 Август 2024, 18:50:29 »
о! а чо там в Дюне сжато? я думал там как открытая книга :)

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5557
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #264 : 23 Август 2024, 19:57:56 »
какие алгоритмы сжатия используются в Dune 2, The Story of Thor?
В The Story of Thor / Beyond Oasis два метода сжатия, один как в Streets of Rage 2. Я когда-то писал медленный компрессор на Python для метода из SoR2, потом я писал на C компрессор метода из Тор с обоими декомпрессорами, но не добавил компрессор от SoR2. Там ещё алгоритм предполагает возможность работы с блоками. Для сжатия методом из SoR2 можно использовать https://github.com/hansbonini/lz_ancient, но разжатие сделано с ошибкой. Прикладываю мою программу для разжатия обоих методов и сжатия методом из Тора.

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 104
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #265 : 23 Август 2024, 20:31:00 »
о! а чо там в Дюне сжато? я думал там как открытая книга :)
В оригинале много чего сжато, 100%: графика, маппинги (тайлы), если не ошибаюсь, то таблицы спрайтов тоже

Добавлено позже:
В The Story of Thor / Beyond Oasis два метода сжатия, один как в Streets of Rage 2. Я когда-то писал медленный компрессор на Python для метода из SoR2, потом я писал на C компрессор метода из Тор с обоими декомпрессорами, но не добавил компрессор от SoR2. Там ещё алгоритм предполагает возможность работы с блоками. Для сжатия методом из SoR2 можно использовать https://github.com/hansbonini/lz_ancient, но разжатие сделано с ошибкой. Прикладываю мою программу для разжатия обоих методов и сжатия методом из Тора.
О, спасибо, большое, если что, то могу выложить программу расжатия графики для дюны, вроде работает без ошибок, но не уверен, что кому-то надо

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2651
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #266 : 23 Август 2024, 20:53:49 »
а что есть такого в оригинале, чего не разобрано в сборщике?

Оффлайн bgr

  • Пользователь
  • Сообщений: 596
    • ВКонтакте
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #267 : 23 Август 2024, 21:16:54 »
Sharpnull, а разве на ромхакинге выложен плохой упаковщик? В комплекте с редактором SoR2

Добавлено позже:
Turbo2000, выкладывай, если в интернете нет :)

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 104
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #268 : 24 Август 2024, 08:18:33 »

Добавлено позже:
Turbo2000, выкладывай, если в интернете нет :)
Лично не нашел, сделаю библиотеку:)

Добавлено позже:
а что есть такого в оригинале, чего не разобрано в сборщике?
Ничего, просто интересно, нет же исходников и инструментов, как это было разобрано, только результат и структура для сборки
« Последнее редактирование: 24 Август 2024, 08:25:19 от Turbo2000 »

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 104
  • Пол: Мужской
    • Просмотр профиля
[ALL] Вопросы новичков
« Ответ #269 : 24 Август 2024, 17:23:57 »
Turbo2000, выкладывай, если в интернете нет
Сделал либу https://github.com/DramaDesu/ym-smdtools
Пока не устанавливается (поддержка разных пакетных менеджеров), но сделаю устанавливаемой

Добавлено позже:
Единственное, там 20-е плюсы, могу, если что снизить версию, но придется от некоторых вещей отказаться

Добавлено позже:
Можно еще повозиться с оптимизациями алгоритма распаковки, чтобы оптимизировать бранч-предикты, но лень, запутанный код