Форум PSCD.ru

Игровые приставки и Эмуляция => Ромхакинг и программирование => Уроки / Документация => Тема начата: SPOT от 30 ноября 2016, 11:25

Название: Хранение сжатой графики SMS (Sega Master System)
Отправлено: SPOT от 30 ноября 2016, 11:25
Хранение сжатой графики SMS
В этой статье я хочу рассмотреть один из примеров сжатия графики в играх. В частности, мы будем рассматривать игру Double Hawk для Sega Master System (SMS).
 
Так же будет полезно ознакомится со статьёй «SMS/GG (Метод хранение несжатой графики в играх для SMS/GG) (http://pscd.ru/forum/index.php?/topic/316-khranenie-neszhatoi-grafiki-na-razlichnykh-igrovy/?p=3275)».
 
Метод хранения схож с методом описанном в статье «Хранение сжатой графики 1BBP (http://pscd.ru/forum/index.php?/topic/593-khranenie-szhatoi-grafiki-1bbp/)».
 
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-87249200-1480497695.png)
В игре много пожатой графики, мы же будем рассматривать надпись Mission.
 
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-06756300-1480497696.png)
Так называемый архив со сжатой графика хранится в роме (игре) с $CCAD по $D0BE.
 
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-22001300-1480497696.png)
Первые два байта 60 01 эта что-то вроде размера архива. Переворачиваем значение и получаем 01 60. В переводи в десятичные это 352. Это значение сколько пикселей по 8 мы запишем в видеопамять консоли. Проще говоря «размер архива».
 
Начнём рассматривать по порядку.
 
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-36121100-1480497696.png)
Байт 01 это число сколько графических дынных будет до следующего «служебного байта».
 
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-51556000-1480497696.png)
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-68345300-1480497695.png)
В нашем случае мы считываем одно значение FF 00 00 00 равное 4 байтам.
 
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-01369000-1480498044.png)
Далее идёт «служебный байт» 81, который указывает на количество повторений.
 
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-20154500-1480498044.png)
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-50393600-1480497695.png)
В нашем случае 3 повторения значения 47 B8 00 00.
 
То есть 0x81 – 0x7E = 3
 
(http://pscd.ru/forum/uploads/monthly_11_2016/post-95-0-37873900-1480498162.png)
Для наглядности
 
Название: Re: Хранение сжатой графики SMS (Sega Master System)
Отправлено: PSXDev от 30 ноября 2016, 11:41
Большое дело делаешь, ведь раньше так подробно никто это не расписывал и не объяснял.
Надеюсь, благодаря вашим усилиям появится ещё больше хороших ромхакеров, а с ними и новых качественных переводов игр.
 

Цитировать 
То есть 0x81 – 0x7E = 3
P.S. Откуда взялась 0x7E?
Название: Re: Хранение сжатой графики SMS (Sega Master System)
Отправлено: SPOT от 30 ноября 2016, 11:50
Цитата: PSXDev от 30 ноября 2016, 11:41P.S. Откуда взялась 0x7E?
 
«Служебный байт» делится на два типа. Один считывает значения данных подряд, другой повторяет.
От 01 до 7E это количество которое будет считываться подряд.
От 7F до FF – количество повторов.