我真的很难理解J1第四代CPU编程。我对第四章有基本的了解,但我无法理解d#和h#之类的J1第四章编程中定义的单词...以及它如何处理IO外设...您能在其中帮助我吗?
答案 0 :(得分:2)
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
以包括我需要的单词,基元和功能,因为我真的只需要一个脱机编译器,而不是一个能够动态构建自己的代码的完整系统。