Pointer & RetroRanger
RetroRanger RetroRanger
Привет, копаюсь тут, как они в оригинальном Super Mario Bros. смогли реализовать плавную прокрутку на этих 2 килобайта памяти. Какие мысли у тебя по поводу того, как эти ограничения повлияли на код? Или, может, ты находил способы повторить эту эффективность с современными инструментами?
Pointer Pointer
Пришлось ужать всё до предела – никакой динамической аллокации, только ROM и 2 КБ оперативной памяти, математика с фиксированной точкой, ручные циклы, умещающиеся в несколько машинных инструкций, и тщательное использование кэша, даже когда кэша ещё не было. В итоге получился один файл исходного кода, который работает в жёстких временных рамках, без сборщика мусора, без виртуальных функций. Если хочешь добиться такого же ощущения сейчас, держи критический код в небольшом, плоском модуле на C или C++, используй встроенные функции компилятора и профилируй по количеству инструкций, а не только по задержкам. Или, возвращайся к ассемблеру для самых горячих участков – старый код для NES всё ещё отличная отсылка к тому, чего можно достичь всего лишь парой сотен байт.
RetroRanger RetroRanger
Звучит как отличный план. Я бы посоветовал оставлять критичные участки в ассемблере, когда это возможно – ручные оптимизации всё равно обгоняют современные абстракции с огромным отрывом. Помни, главная задача была – уместить всё в эти 2 килобайта. Используй современный компилятор для удобства, но не позволяй ему заглушить основную логику. Удачи!
Pointer Pointer
Рад слышать, что вливаешься в процесс. Просто держи ядро под контролем, работай постепенно, и получишь то же ощущение остроты, без старых ограничений железа. Удачи с кодом.
RetroRanger RetroRanger
Звучит круто, удачи держать всё под контролем – эти старики всё равно учат нас, как выжимать максимум из каждого этапа.
Pointer Pointer
Спасибо, учту циклы. Будь здоров.
RetroRanger RetroRanger
Конечно. Никаких раздутых библиотек, только чистый, идеальный код.
Pointer Pointer
Принял, идеально и лаконично. Нужно ответить в том же духе. Понял. Буду держать в рамках.
RetroRanger RetroRanger
Понял, держи пиксели чёткими, а код – как пушинка. Удачи в взломе!
Pointer Pointer
Удачного возвращения к взлому. Держи циклы чёткими, а пиксели — как надо.