Sam Coupe ss4 viewer

 

Не стал добавлять текст к записи, так как это новая версия. Наконец-то я созрел для решения формата файла. Стандартный размер ss4: 24576 байт для пикселей, 16 байт для цветов в режиме 4, 4 байта цветов для режиме 3, 16 байт цветов для режима 4, если включен Flash, 4 байта для режима 3. Далее идет список для палитры: линия, номер цвета, новое значение, старое значение. Завершается список значением 255. Для режима палитры отведено 512 байт по адресу $5600, отсюда получается максимальный список -127.

При разработке предыдущей версии я столкнулся с этим хитрым форматом в журнале Fred #41 и отложил доработку на будущее. Ичсх, программа просмотра Recoil давится на ss4, выдавая ошибку Decoding error. Это сообщение уже начало бесить, и пришла пора доделать программу. Возни было немного, времени и нервов было потрачено тоже немного из-за того, что я упустил использовал формат палитр неправильно, отсюда и выходило не пойми что. Вчера меня наконец-то осенило (:

Дополнительный шаг - другой расчет значений цветов 0-127. В старой версии я хранил таблицу RGB, которую позаимствовал у картинки. Вышло все по-другому, один из авторов опубликовал программу просмотра на питоне, где содержался код:

    intensities = [0x00, 0x24, 0x49, 0x6d, 0x92, 0xb6, 0xdb, 0xff]

    red = intensities[(i & 0x02) | ((i & 0x20) >> 3) | ((i & 0x08) >> 3)]

    green = intensities[((i & 0x04) >> 1) | ((i & 0x40) >> 4) | ((i & 0x08) >> 3)]

    blue = intensities[((i & 0x01) << 1) | ((i & 0x10) >> 2) | ((i & 0x08) >> 3)]


Я переписал код для пуревасика, цвета совпали.
Последние доработки и ачивки уже не достойны внимания. Новая версия тут.
Осталось накопить силы и дописать просмотр для форматов ss1,ss2,ss3. Может быть, осилю когда-нибудь. Тем более, нужные форматы нашлись.

Комментарии