Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Сжатая графика Pac-man 2(SEGA)
На страницу Пред.  1, 2, 3, 4, 5
 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Сб Июл 15, 2006 12:28 am    Заголовок сообщения: Ответить с цитатой

АнС писал(а):
Ura_Orlov писал(а):
В общем, брякпоинт (или просто бряк или breakpoint или если хочешь Контрольная Точка Very Happy )


Контрольная точка - это чекпоинт, а бряк - это Точка Останова. Я не придираюсь, просто на заметку.

Ах.. Ну да, правильно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Дек 29, 2006 2:51 pm    Заголовок сообщения: Ответить с цитатой

Ghost писал(а):
После логического сдвига (строка 16E6), аналогичного возведению двойки в степень, получаем "размер словаря", в нашем случае это 2^11=2048=800h байт. Далее, из D4 вычитается 1 (получится D4=000007FF), это надо для усечения больших указателей (чтобы они не превышали размер словаря) командой AND (строка 1708).

То есть, если указатель больше 7FFh, то его надо приравнять к нулю?

Да, и скажите мне наконец кто-нибудь, как всё-таки ставить бряки в Gens'е?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пт Дек 29, 2006 3:24 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR писал(а):
Да, и скажите мне наконец кто-нибудь, как всё-таки ставить бряки в Gens'е?


Да, и скажите И мне наконец кто-нибудь, как всё-таки ставить бряки в Gens'е?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Дек 29, 2006 7:38 pm    Заголовок сообщения: Ответить с цитатой

Кстати, я знаю, почему управляющий байт пустеет раньше времени Smile Это нужно для того, чтобы точно указать конец архива.
Например, нам нужно добавить последние 3 байта: X1, X2, X3. Тогда нам надо сделать упр. байт таким: 00000111, но как же определитьЮ когда именно конец? Да очень просто! Именно в последнем управляющем байте старшим битом поставить 0, а во всех остальных 1 и читать 7 вместо 8-ми бит Smile Тогда мы просто читаем эти три бита и байт пустеет Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Пт Дек 29, 2006 8:06 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
То есть, если указатель больше 7FFh, то его надо приравнять к нулю?

Нет, надо найти остаток от деления указателя на 800h. Т.к. число - степень двойки, можно сделать это так: x AND 7FFh.
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Дек 29, 2006 9:03 pm    Заголовок сообщения: Ответить с цитатой

Ghost писал(а):
Нет, надо найти остаток от деления указателя на 800h. Т.к. число - степень двойки, можно сделать это так: x AND 7FFh.

А зачем это вообще надо? Откуда там взялись слишком большие указатели?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Дек 29, 2006 10:06 pm    Заголовок сообщения: Ответить с цитатой

Есть!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping Jumping
Написал пакер - РАБОТАЕТ!!!
И с анпакером разобрался - у меня проверка на нулевой байт шла после чтения бита!!! Поэтому в конце был мусор и были большие указатели :D

В общем, проект пошёл =)))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Дек 29, 2006 11:16 pm    Заголовок сообщения: Ответить с цитатой

Как вам мой Pack-Man? Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Сб Дек 30, 2006 12:54 am    Заголовок сообщения: Ответить с цитатой

Боюсь предположить, как твой пакер составляет указатели для подстрок? Very Happy Просматривает подряд весь буфер?
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Сб Дек 30, 2006 1:10 am    Заголовок сообщения: Ответить с цитатой

Ghost писал(а):
Боюсь предположить, как твой пакер составляет указатели для подстрок? Просматривает подряд весь буфер?

Не совсем понял, что ты имеешь ввиду... Что ты подразумеваешь под "подстрокой".
Вообще принцип действия такой:
1. От максимально возможной минимальной позиции берём байт.
2. Если байт равен байту на позиции чтения - берём следующий байт. Повторяем, пока не будет разных байтов.
2. У нас получился результат. Сравниваем его с предыдущим - если лучше - то ставим его как лучший. GoTo 2.
3. В конце остаётся лучший результат. Если он выгоден для паковки - обновляем управляющий байт, записываем результат. Если нет - просто добавляем байт. GoTo 1.
4. Запись архива в файл.

Кстати, как можно улучшить коэффициент сжатия? У меня сжимает точь-вточь как оригинал, но, например, изменённый шрифт в архиве занимает больше места, так что на место оригинала в РОМе его не впихнёшь, а добавлять в конец РОМа и возиться с дополнительными поинтерами не очень-то и хочеться.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Сб Дек 30, 2006 4:19 pm    Заголовок сообщения: Ответить с цитатой

Строка - цепочка символов данного алфавита. В нашем случае алфавит = [0..255], строка = оставшаяся часть неупакованного файла, которую надо запаковать. Подстрока - часть строки, может и совпадать с ней. В LZ для сжатия ты ищешь в пройденной части подстроку максимальной длины, начало которой совпадает с началом оставшейся неупакованной части, расстояние до которой не больше N - размера словаря. Это расстояние и есть "указатель", а длина подстроки - число копируемых байт.
От того, как ищутся подстроки, зависит скорость работы пакера. Как ты описал, у тебя просто перебираются все байты из буфера - "словаря", и так ищется подстрока максимальной длины. А если бы словарь был 16-мегабайтный? Wink
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Сб Дек 30, 2006 6:13 pm    Заголовок сообщения: Ответить с цитатой

Ghost писал(а):
От того, как ищутся подстроки, зависит скорость работы пакера. Как ты описал, у тебя просто перебираются все байты из буфера - "словаря", и так ищется подстрока максимальной длины. А если бы словарь был 16-мегабайтный?

Ну, скорость меня пока устраивает Smile Причём размер буфера поиска можно регулировать и при нахождении подстроки максимальной длины поиск прекращается. Да и максимальный размер словаря 32кб(ну, может 64, правда, тогда без кол-ва повторений, так что бесполезный, как, впрочем, и 32кб).
А что, есть другие способы поиска? Shocked
Мне бы качество сжатия улучшить...

Кстати, как с помощью дебаггера найти карту тайлов(скорей всего, запакованную)? И неужели это великая тайна, то как ставить бряки в Gens'е?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Вс Дек 31, 2006 12:09 am    Заголовок сообщения: Ответить с цитатой

Скачай с сайта GensDebug, и сможешь ставить один бряк.
Или делай патч-код <адрес>:60FE (например, 000BA2:60FE) и жди, пока игра зависнет, затем заходи в дебуггер.
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Вс Дек 31, 2006 11:47 am    Заголовок сообщения: Ответить с цитатой

Вот 2 вариант работает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Марат



Зарегистрирован: 08.01.2008
Сообщения: 211
Откуда: Казахстан, Астана

СообщениеДобавлено: Вс Ноя 09, 2008 1:14 pm    Заголовок сообщения: Ответить с цитатой

И почему я раньше не замечал этой темы? Я ведь уже давно ищу примеры дебага на сегу. А тут ещё так доходчиво написано, да ещё и LZ77.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4, 5
Страница 5 из 5

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group