我真的觉得J1 Forth CPU编程很难理解。
我对 Forth 有基本的了解,但我无法理解 J1 Forth 编程中定义的词语,例如 d# 和 h#……以及它是如何处理 I/O 外围设备的?
d#
和单词的存在h#
只是所选编译器实现方法的结果。
为J1编写的代码实际上是在托管 Forth 系统上运行的。J1的程序虽然看起来与 Forth 源代码完全一样,但它只是一个由主机系统(Gforth)按顺序执行的单词列表,从文件中读取。并且只有在执行该字时,才会将实际的J1指令添加到最终图像中。
使用这种方法,只有正在执行的单词才能为J1生成指令。数字文字不是那些词,所以它们必须用对d#
(十进制数)或h#
(十六进制数)的调用来包装。如果没有包装,文字会将数字放在编译器堆栈上,并且不会添加任何指令供J1执行。
外设通常映射到内存空间或 I/O 空间。您将要写入的值和外围设备的地址放在堆栈上,然后发出适合所选空间的存储命令。地址空间可能不同,也可能只有一个共同点——取决于实际的J1版本或实现细节。原来的J1有一个单一的地址空间;您的 RAM 和外围设备将使用!
和@
字统一寻址。J1a版本具有专用的I /O 空间,并包含附加io@
/io!
字。
我个人认为J1a是更好的版本。但是我没有使用SwapForth - 一个完整的J1a的 Forth 系统,而是将其扩展cross.fs
为包含我需要的单词、原语和设施,因为我真的只需要一个离线编译器而不是一个能够在其上构建自己的代码的完整系统苍蝇。