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