11

我正在为我正在编写的 Forth 在 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 和内存开销。除了“忘记它”之外的所有建议都值得赞赏。

4

1 回答 1

2

如果是您最担心的 Forth 源代码,您可以将字符集限制为 Chuck Moore 为 colorForth 选择的 48 个字符,并使用他的 Shannon 编码方案,平均每个字符 5.2 位。他还声称 colorForth 源代码的大小只有目标代码的两倍左右。顺便说一句,arrayForth 中的字符集似乎略有不同(参见用户手册第 47 页- 数字的不同顺序,撇号而不是冒号等)。

当然,使用香农编码与彩色单词无关。如果你想一直使用 colorForth存储预解析的单词,你可以在这里使用他的方案

他没有提供太多细节,但对于 etherForth,他放弃了香农编码,并采用了简单的 6 位编码,用于与 11xxxx 相同的字符集,另外还指示了一个 16 位标签,用于包括 F18 在内的颜色和标记指令和一些汇编原语(begin、end、then、for)。这确实是一个非常酷的方案(尤其是在 18 位 F18 上,每个字有 3 个空间)。非常简单且非常紧凑。

无论如何,有一些想法。不是对您的压缩问题的直接回答,而是一些以良好压缩形式存储 Forth 源代码的方法。玩得开心!

于 2013-09-13T21:08:37.293 回答