Skip to content
Compare
Choose a tag to compare
@MiGeRA MiGeRA released this 11 Sep 18:49
· 8 commits to master since this release

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

  • Код разделен на отдельные файлы: отделены части касающиеся ОЗУ и ПЗУ взломщика;
  • Большая (в сравнении с предыдущими) часть конструкций переписана на ассемблере (*.s - файлы), но некритичные вещи оставлены в с-реализации (в качестве примера такой возможности);
  • В оперативу (в качестве «RAM-функций») можно заставлять копироваться как сишный код, так и ассемблерный (см. заголовок asm_dat.i). Но последнее предпочтительнее, т.к. иначе будет требоваться ручная проверка в ходе отладки – ибо неизвестно какого мусора и откудова прилинкуется вместе с сишным кодом (примитивные конструкции SGDK генерят на выходе просто аццкий говнокод на ассемблере!);
  • Скорректирована обработка комбинации A + B для избегания ложных срабатываний одной из кнопок при несинхронном их отпускании;
  • Удалил старый закомментированный код, который впредь явно не актуален;
  • Для сборки использован SGDK с обновленным компилятором и утилитами (см. далее).

К релизу прилагаю копию своей рабочей кастомной (тюнингованной) сборки SGDK 1.65 (+). Цель этого не только просто дать возможность собрать исходники в том виде, в котором это получилось у меня (многие кодеры кладут болт и не указывают даже версию среды, уж не говоря о конфигах и патчах – в итоге херчтособерешь) - но и пользоваться в дальнейшем настроенным комплектом SGDK который с использованием куда как более свежих версий инструментов действительно генерирует код компактнее, что для МегаДрайва весьма актуально. И так, в целом, что скорректировано в SGDK:

  • Обновлены средства компиляции кода m68k (и скорректированы make-файлы): вместо архаических 10-летней давности gcc-6 и иже с ним – теперь самосборный (мной) комплект gcc-10 из репозитория проекта marsdev. Экзешники заменить легко, но вот компилировать их (средствами msys64/mingw32) чертовски-долго (больше часа). Так же необходимо учесть, что другая версия «gcc и компании» наверняка будет требовать изменений параметров в make-файлах (а то может запросто получиться кратное увеличение, а не уменьшение объема результата, к примеру). Следует также не забыть снабдить папочку с новыми экзешниками актуальными версиями требуемых библиотек (скопировать из mingw в которой их собирали) – так разработчик marsdev сдуру выложил только бинарники, в результате они не более чем неюзабельный мусор! (у него-то наверняка все работало, если пути прописаны, а вот переносимость – нулевая в итоге). Результат: экономия в размере генерируемого кода в ROM-картриджа - до двух раз!;
  • Компоненты SGDK по обработке ресурсов являющиеся java-приложениями также пересобраны из прилагающихся исходников и вместе с этим добавлены упакованные в exe-формат их экземпляры для удобства запуска из командной строки или батников (если будет нужно вдруг);
  • Скорректированы (по необходимости и для единообразия) и пересобраны все тестовые примеры SGDK;
  • Старые файлы из комплекта SGDK не удалены, а переименованы в *.bak (можно удалить);

Попутно напомню, что для фиксации и применения любого изменения в исходниках SGDK необходимо заново осуществлять сборку объектной библиотеки libmd.a (запускать build_lib.bat), т.к. при компиляции и сборке сега-приложения (скриптом makefile.gen) она будет просто прилинкована в части касаемой в бинарном виде (невзирая на текстовые исходники и их наличие).

Переходить на следующую версию (1.70) с текущей моей (1.65) – смысла не вижу никакого, от слова совсем!