Рефакторинг был крутой, это да.
Во-первых, начиная с версии 1.37, код с указанием делителей MCLK и таймингов PPU
лежит в NstBase.hpp. Раньше все это хозяйство находилось в NstCpu.hpp и NstPpu.hpp соответственно.
Но и это еще не всё. Есть еще один "прикол", который я не могу объяснить.
Вот, как думаете, почему у меня в подписи два билда нестопии с режимом денди, 1.36 и 1.37?
Потому что по непоняным пока причинам, NSF плеер в денди-режиме работает корректно только на 1.37 и выше.
Но вот засада, у 1.37+ имеются косяки с заиканиями звука.
Подробнее про проблемы с NSF:
Есть в NstApu.cpp так называемые таблицы для Noise и DPCM - разные для PAL и NTSC режимов.
Чтобы получить нужную высоту тона DPCM в "самодельном" денди-режиме, нужно таблицу PAL заменить на NTSC.
В таком случае и в играх, и в NSF-режиме высота звука DPCM будет корректной. Но, почему-то опять только с 1.37.
При замене таблиц в 1.36 NSF-пллер не меняет высоту тона.
Я думал, что эти таблицы продублированы отдельно для NSF-плеера где-нибудь в другом месте кода, однако не нашел.
Более того, уже начиная с 1.38 (который не имеет проблем NSF-плеера) начинаются
другие глюки с денди,
предположительно из-за:
Код:
v.1.38 changes:
- PPU power/reset timing and register states.
- Misc IRQ/NMI/BRK/DMA special-case behavior.
В сухом остатке получается, что идеальный и беспроблемный "денди-режим+денди-NSF-плеер" можно с лёгкостью получить только на 1.37, не куря тонны кода.
С другой стороны версия 1.36 со звуком не хрустит. Денди-режим там тоже хороший, но с NSF проблемы.
В общем, это засада. Я сделал все, что умел, а потом забил.
PS: Я случайно отыскал на ютубе Андреаса, брата Мартина.
Он сказал, что Мартин забросил нестопию насовсем и больше к ней не вернется.