Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Сб Июл 15, 2006 12:28 am Заголовок сообщения: |
|
|
АнС писал(а): | Ura_Orlov писал(а): | В общем, брякпоинт (или просто бряк или breakpoint или если хочешь Контрольная Точка ) |
Контрольная точка - это чекпоинт, а бряк - это Точка Останова. Я не придираюсь, просто на заметку. |
Ах.. Ну да, правильно. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Дек 29, 2006 2:51 pm Заголовок сообщения: |
|
|
Ghost писал(а): | После логического сдвига (строка 16E6), аналогичного возведению двойки в степень, получаем "размер словаря", в нашем случае это 2^11=2048=800h байт. Далее, из D4 вычитается 1 (получится D4=000007FF), это надо для усечения больших указателей (чтобы они не превышали размер словаря) командой AND (строка 1708). |
То есть, если указатель больше 7FFh, то его надо приравнять к нулю?
Да, и скажите мне наконец кто-нибудь, как всё-таки ставить бряки в Gens'е? |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пт Дек 29, 2006 3:24 pm Заголовок сообщения: |
|
|
HoRRoR писал(а): | Да, и скажите мне наконец кто-нибудь, как всё-таки ставить бряки в Gens'е? |
Да, и скажите И мне наконец кто-нибудь, как всё-таки ставить бряки в Gens'е? |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Дек 29, 2006 7:38 pm Заголовок сообщения: |
|
|
Кстати, я знаю, почему управляющий байт пустеет раньше времени Это нужно для того, чтобы точно указать конец архива.
Например, нам нужно добавить последние 3 байта: X1, X2, X3. Тогда нам надо сделать упр. байт таким: 00000111, но как же определитьЮ когда именно конец? Да очень просто! Именно в последнем управляющем байте старшим битом поставить 0, а во всех остальных 1 и читать 7 вместо 8-ми бит Тогда мы просто читаем эти три бита и байт пустеет |
|
Вернуться к началу |
|
|
Ghost
Зарегистрирован: 24.04.2004 Сообщения: 237
|
Добавлено: Пт Дек 29, 2006 8:06 pm Заголовок сообщения: |
|
|
Цитата: | То есть, если указатель больше 7FFh, то его надо приравнять к нулю? |
Нет, надо найти остаток от деления указателя на 800h. Т.к. число - степень двойки, можно сделать это так: x AND 7FFh. _________________ Мысль - это интеллектуальный эксцесс данного индивидуума. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Дек 29, 2006 9:03 pm Заголовок сообщения: |
|
|
Ghost писал(а): | Нет, надо найти остаток от деления указателя на 800h. Т.к. число - степень двойки, можно сделать это так: x AND 7FFh. |
А зачем это вообще надо? Откуда там взялись слишком большие указатели? |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Дек 29, 2006 10:06 pm Заголовок сообщения: |
|
|
Есть!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Написал пакер - РАБОТАЕТ!!!
И с анпакером разобрался - у меня проверка на нулевой байт шла после чтения бита!!! Поэтому в конце был мусор и были большие указатели :D
В общем, проект пошёл =))) |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пт Дек 29, 2006 11:16 pm Заголовок сообщения: |
|
|
Как вам мой Pack-Man? |
|
Вернуться к началу |
|
|
Ghost
Зарегистрирован: 24.04.2004 Сообщения: 237
|
Добавлено: Сб Дек 30, 2006 12:54 am Заголовок сообщения: |
|
|
Боюсь предположить, как твой пакер составляет указатели для подстрок? Просматривает подряд весь буфер? _________________ Мысль - это интеллектуальный эксцесс данного индивидуума. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Сб Дек 30, 2006 1:10 am Заголовок сообщения: |
|
|
Ghost писал(а): | Боюсь предположить, как твой пакер составляет указатели для подстрок? Просматривает подряд весь буфер? |
Не совсем понял, что ты имеешь ввиду... Что ты подразумеваешь под "подстрокой".
Вообще принцип действия такой:
1. От максимально возможной минимальной позиции берём байт.
2. Если байт равен байту на позиции чтения - берём следующий байт. Повторяем, пока не будет разных байтов.
2. У нас получился результат. Сравниваем его с предыдущим - если лучше - то ставим его как лучший. GoTo 2.
3. В конце остаётся лучший результат. Если он выгоден для паковки - обновляем управляющий байт, записываем результат. Если нет - просто добавляем байт. GoTo 1.
4. Запись архива в файл.
Кстати, как можно улучшить коэффициент сжатия? У меня сжимает точь-вточь как оригинал, но, например, изменённый шрифт в архиве занимает больше места, так что на место оригинала в РОМе его не впихнёшь, а добавлять в конец РОМа и возиться с дополнительными поинтерами не очень-то и хочеться. |
|
Вернуться к началу |
|
|
Ghost
Зарегистрирован: 24.04.2004 Сообщения: 237
|
Добавлено: Сб Дек 30, 2006 4:19 pm Заголовок сообщения: |
|
|
Строка - цепочка символов данного алфавита. В нашем случае алфавит = [0..255], строка = оставшаяся часть неупакованного файла, которую надо запаковать. Подстрока - часть строки, может и совпадать с ней. В LZ для сжатия ты ищешь в пройденной части подстроку максимальной длины, начало которой совпадает с началом оставшейся неупакованной части, расстояние до которой не больше N - размера словаря. Это расстояние и есть "указатель", а длина подстроки - число копируемых байт.
От того, как ищутся подстроки, зависит скорость работы пакера. Как ты описал, у тебя просто перебираются все байты из буфера - "словаря", и так ищется подстрока максимальной длины. А если бы словарь был 16-мегабайтный? _________________ Мысль - это интеллектуальный эксцесс данного индивидуума. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Сб Дек 30, 2006 6:13 pm Заголовок сообщения: |
|
|
Ghost писал(а): | От того, как ищутся подстроки, зависит скорость работы пакера. Как ты описал, у тебя просто перебираются все байты из буфера - "словаря", и так ищется подстрока максимальной длины. А если бы словарь был 16-мегабайтный? |
Ну, скорость меня пока устраивает Причём размер буфера поиска можно регулировать и при нахождении подстроки максимальной длины поиск прекращается. Да и максимальный размер словаря 32кб(ну, может 64, правда, тогда без кол-ва повторений, так что бесполезный, как, впрочем, и 32кб).
А что, есть другие способы поиска?
Мне бы качество сжатия улучшить...
Кстати, как с помощью дебаггера найти карту тайлов(скорей всего, запакованную)? И неужели это великая тайна, то как ставить бряки в Gens'е? |
|
Вернуться к началу |
|
|
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 вариант работает. |
|
Вернуться к началу |
|
|
Марат
Зарегистрирован: 08.01.2008 Сообщения: 211 Откуда: Казахстан, Астана
|
Добавлено: Вс Ноя 09, 2008 1:14 pm Заголовок сообщения: |
|
|
И почему я раньше не замечал этой темы? Я ведь уже давно ищу примеры дебага на сегу. А тут ещё так доходчиво написано, да ещё и LZ77. |
|
Вернуться к началу |
|
|
|