chi*_*elb 11 compression assembly 6502 forth
我正在Commodore PET(为了好玩)的双盒式磁带录像机上实现虚拟内存,我正在写作.如果您有兴趣,我到目前为止在http://github.com/chitselb/pettil.
我打算使用PET的原生192字节盒式数据文件格式.哦,是的,一切只有32K的RAM .我已经在语言中嵌入了Woz优秀且非常节省内存的Sweet-16解释器.
Forth块(通常)为1024字节.为块ID添加两个字节会使可用的虚拟地址空间达到64 meg,这比磁带上的容量更大.将存在"播放"牌组(设备1)和"记录"牌组(设备2),并且FLUSH将涉及将整个虚拟存储器从一个驱动器复制到另一个驱动器.为什么要在风车上倾斜?因为当天早些时候,盒式磁带是大多数PET用户所拥有的,包括在内.
大多数数据将是Forth代码的屏幕,在此实现中将是1000字节的文本和24字节的换行表,因为我也在利用PET ROM屏幕编辑器.我正在寻找的是任何可能(可能)为此目的击败简单的运行长度编码的建议,但没有像Lempel-Ziv这样复杂的东西的CPU和内存开销.除了"忘记它"之外的所有建议都表示赞赏.
如果您最担心的是 Forth 源代码,您可以将字符集限制为 Chuck Moore 为 colorForth 选择的 48 个字符,并使用他的 Shannon 编码方案,该方案平均每个字符 5.2 位。他还声称 colorForth 源代码的大小仅为目标代码的两倍左右。顺便说一句,arrayForth 中的字符集似乎略有不同(请参阅用户手册的第 47 页- 数字顺序不同,撇号而不是冒号等)。
当然,使用香农编码与彩色单词没有必然关系。如果你想像colorForth 一样存储预先解析的单词,你可以在这里使用他的方案。
他没有提供太多细节,但对于 etherForth,他放弃了香农编码,并为相同的字符集采用了简单的 6 位编码,其中 11xxxx 还表示他用于颜色和标记(包括 F18)的 16 位标签。指令和一些汇编程序原语(begin、end、then、for)。这确实是一个非常酷的方案(尤其是在 18 位 F18 上,每个字有 3 个空间)。极其简单且相当紧凑。
无论如何,还是有一些想法的。这并不是对您的压缩问题的直接回答,而是以良好压缩的形式存储 Forth 源代码的一些方法。玩得开心!