Я реализую виртуальную память на двухкассетных магнитофонах на Commodore PET (ради развлечения) для Форта, который я пишу. То, что у меня есть на данный момент, находится на http://github.com/chitselb/pettil, если вам интересно.
Я планирую использовать собственный 192-байтовый формат файла данных кассеты PET. Ах да, только 32 КБ ОЗУ для всего. Я встроил в язык отличный интерпретатор Sweet-16 от Woz, который очень эффективно использует память.
Блок Forth (обычно) составляет 1024 байта. Добавление двух байтов для идентификатора блока ограничивает доступное виртуальное адресное пространство до 64 мегабайт, что намного больше, чем может поместиться на ленте. Будет колода «воспроизведение» (устройство 1) и колода «запись» (устройство 2), а FLUSH будет включать копирование всей виртуальной памяти с одного диска на другой. Зачем бросаться на ветряные мельницы? Потому что когда-то кассетная лента была тем, что было у большинства владельцев ПЭТ, включая их самих.
Большая часть данных будет экранами кода Forth, который в этой реализации будет состоять из 1000 байтов текста и 24-байтовой таблицы переноса строк, поскольку я также использую экранный редактор PET ROM. То, что я ищу, - это предложения для всего, что (вероятно) превзойдет простое кодирование длины цикла для этой цели, но без накладных расходов ЦП и памяти на что-то столь же сложное, как Lempel-Ziv. Все предложения, кроме «просто забудьте об этом», приветствуются.