Автор Тема: (Sega Master System) Конвертер PNG изображения в ROM-файл  (Прочитано 249 раз)

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

Оффлайн Oleg1977

  • Пользователь
  • Сообщений: 3
    • Просмотр профиля
Всем здравствуйте. Посоветуйте простые утилиты в графической оболочке наподобие NESImageConverter или VGMPlayer, но для Sega Master System, в которых можно из PNG файла создать картинку-ROM для проигрывания в эмуляторе. Программы с Github представлены в виде кода и не подходят для нужных целей.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5384
    • Просмотр профиля
Для нубов не знаю, но опишу вариант для самостоятельного программирования.
С помощью gbdk-2020 (https://gbdk.org) можно писать программы на языке C для SMS/GG и других. В папке \examples\cross-platform\logo есть простой проект для отображения картинки, нужно в res\SEGA заменить GBDK_2020_logo.png на картинку 192x144 (можно меньше или больше, но чтобы хватило VRM, макс. 448 тайлов) с ограничением цветов до 16 или 32, но тогда в одном тайле (8x8 пикселей) должна быть одна из палитр, состоящая из 16 цветов (такое может https://rilden.github.io/tiledpalettequant/, для 16 цветов можно использовать http://x128.ho.ua/color-quantizer.html). Для сборки проекта я использовал ранее установленный MSYS2, открыл MinGW x64 и в папке с проектом выполнил make clean, потом make.
Я не понял как изменить адреса Nametable address, Sprite table address, чтобы использовать больше 256 тайлов, поэтому нашёл в роме байты F7 FF FF BF и заменил на FF FF FF FF. В \include\sms\hardware.h есть константы #define R2_MAP_0x3800  0xFF и #define R5_SAT_0x3F00  0xFF, нужно выяснить как записать в регистры.
Получилось такое, 16 цветов SMS | две палитры (18 цветов) SMS | две палитры (32 цвета) GG:

Здесь что-то на ассемблере https://github.com/mrcook/smstilemap.
В итоге, есть разные алгоритмы уменьшения цветов у картинки, поэтому картинки подготавливать всё равно отдельно для хорошего результата. Сделать аналог NES Image Converter 2 не проблема, может кто-то уже сделал.

Оффлайн Oleg1977

  • Пользователь
  • Сообщений: 3
    • Просмотр профиля
Благодарю за предоставленный материал. Но пока не могу найти готовую утилиту, а из имеющихся представлены те (на Github), которые нужно собирать из кода. Я в программировании не сильно силен, нужна простая программа, похожая на ImageToNES, где конвертация производится одним кликом.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5384
    • Просмотр профиля
К слову. Чтобы полностью покрыть экран SMS (256x192, 768 тайлов) уникальными тайлами, можно использовать хитрость как в Yie Ar Kung-Fu (NES). В одном тайле 4bpp (16 цветов) можно хранить два тайла 2bpp (4 цвета), для этого используются 2 палитры для каждого 2bpp тайла. Это увеличит кол-во уникальных тайлов в 2 раза, но цветов будет максимум 8, причём у каждого тайла одна из двух палитр по 4 цвета и кол-во тайлов для каждой палитры ограничено кол-вом 4bpp тайлов.
Возможно во время отображения (render) экрана можно менять палитры, но это всё равно увеличит кол-во цветов только по вертикали.