6502 легкие алгоритмы сжатия

Я реализую виртуальную память на двух кассетных магнитофонах на Commodore PET (для удовольствия) для Forth, которую я пишу. До сих пор я был в http://github.com/chitselb/pettil, если вам интересно.

Я планирую использовать собственный формат данных формата 192 байта кассеты. О да, всего 32 КБ ОЗУ для всего. Я вложил Woz отличный и очень эффективный в памяти интерпретатор Sweet-16 внутри языка.

Блок Forth (обычно) 1024 байта. Добавление двух байтов для идентификатора блока закрывает доступное виртуальное адресное пространство на 64 мегабайта, что намного больше, чем то, что подходит для ленты. Там будет "игровая" колода (устройство 1) и "колода записи" (устройство 2), а FLUSH будет включать в себя копирование всей виртуальной памяти с одного диска на другой. Зачем наклоняться на ветряные мельницы? Потому что назад в день, кассетная лента - то, что большинство владельцев ПЭТ, было включено.

Большинство данных будут экранами кода Forth, которые в этой реализации будут составлять 1000 байт текста и 24-байтная таблица строк, поскольку я также использую редактор экрана PET ROM. То, что я ищу, - это предложения для всего, что (возможно) избивает простую кодировку Run Length для этой цели, но без процессора и памяти накладные чем-то сложного, как Lempel-Ziv. Все предложения, кроме "просто забудьте об этом", оценены.

Ответ 1

Если это самый дорогой исходный код, о котором вы больше всего беспокоитесь, вы можете ограничить набор символов на 48 Chuck Moore, выбранный для colorForth, и использовать его кодировку Shannon схема, которая в среднем составляет 5,2 бита на символ. Он также утверждает, что источник colorForth только в два раза превышает размер объектного кода. Кстати, кажется, что набор символов всегда немного отличается от arrayForth (см. стр. 47 Руководства пользователя - различный порядок цифр, апостроф вместо двоеточия и т.д.).

Использование кодировки Шеннона не имеет ничего общего с цветными словами. Если вы хотите пройти весь путь и сохранить предварительно обработанные слова, как в colorForth, вы можете использовать его схему здесь.

Он не дает много подробностей, но для etherForth он отказался от кодировки Шеннона и пошел с простой 6-битной кодировкой для того же набор символов с 11xxxx, дополнительно указывающий 16-битный тег, который он использует для цветов и токенов, включая инструкции F18 и несколько ассемблерных примитивов (начало, конец, затем, для). Это действительно очень классная схема (и особенно на 18-битном F18 с комнатой для 3 на слово). Чрезвычайно простой и довольно компактный.

Во всяком случае, есть некоторые идеи. Не совсем прямой ответ на ваш вопрос сжатия, но некоторые способы хранения источника Forth в хорошо сжатой форме. Получайте удовольствие!