Я писал этот распаковщик в 2:00, поэтому к оптимизации и стилю не придирайтесь. Жутко не выспался, но было жутко интересно.
Распаковщик написан так, что он обрабатывает данные блоками по 9 байт. Я буду загружать по 9 байт из внешней ПЗУ.
Кратко принцип работы можно описать так. В первом байте из 9 описывается, что значат следующие 8 байт. По биту на байт. Если бит = 0, значит надо просто записать этот символ в память. Если бит=1, значит надо взять слово из словаря (словарь 256 слов). А в словарь помещается каждый записанный в память символ или слово + следующий символ. То есть, если мы запишем в память последовательно "ABCDEF" то в словарь попадет "AB,BC,CD,EF". Если мы потом выведем первое слово из словаря AB и букву G, то в словарь попадет ABG.
Сейчас результаты такие:
Размер распаковщика 155 байт.
Память под переменные распаковщика 771 байт (из которых 768 словарь).
Игра "Гонки" упаковалась на 50%.
Архиватор RAR упаковал её на 38% (лучше).
Распаковка 32 Кб занимает меньше 4-х секунд.
Я вложил файл gonki_packed.rka (17 Кб). Там объединен разархиватор и архив игры. Оригинальный файл занимает 29 Кб. И это работает!
Загрузить, запустить G8004 (если эмулятор это не сделает за вас) и запустить игру G0.




Ответить с цитированием