5

我正在学习使用SINH模拟器为PDP-4编程。我一直在理解磁带驱动器的工作原理。我想读DECtape 550第一单元的一个单词,但我不知道该怎么读。我是第一次学习PDP,很抱歉。我查看了文档,发现了以下示例代码:

jms MMWRS/MMRDS阅读law 100/LAC(100)区块号jmp错误/错误返回10000/单位选择law 1000/1000,核心起始地址1777/1777号法律,核心最终演讲

我找到了DECtape的说明:

  • mmrd—读取、清除(0或AC,并将一个字从MMIOB传输到AC的0-17位。
  • mmwr-写入。将一个字从AC的位0-17传输到MMIOB。
  • mmse-SELECT,将AC位2-5中指定的单元连接到DECtape控件。
  • mmlc-负载控制。从AC的位12-17将DECtape Control设置为正确的模式和方向,如下所示:

12-开始

13-倒档

14-动态读取

15-模式:

  • 0-移动

  • 1-搜索

  • 2-读取

  • 3-写入

  • 4-备用

  • 5-通读块末端

  • 6-直写块结束

  • 7-写入定时和标记磁道

  • 即42=向前读

  • 62=反向读取

  • 43=向前写

  • 41=向前搜索

  • 61=反向搜索

  • mmrs-读取状态。清除10或AC,并将DEC磁带状态条件传输到AC的0-8位,如下所示:

  • Bit 0=数据标志

  • Bit 1=块结束标志

  • Bit 2=错误标志

  • Bit 3=磁带的Erid

  • Bit 4=定时错误

  • Bit 5=反向

  • Bit 6=执行

  • Bit 7=标记轨迹错误

  • Bit 8=磁带无法使用

  • mmdf—跳过DECtape数据标志。在搜索模式下:应通过mmrd指令卸载块标记号。在读取模式下:应通过mmrd指令卸载数据或反向校验和。在写入模式下:应通过mmwr指令加载数据。

  • mmbf—跳过DEC磁带块结束标志。在读取模式下:通过mmrd指令卸载正向校验和。在写入模式下:通过mmwr指令加载正向计算的校验和。

  • mmef—跳过DECtape错误标志。发生了定时错误、标记磁道错误、结束磁带或磁带无法使用的情况。使用mmrs指令检测特定错误。

2个答案2

重置为默认值
5

部分答案:

这个在这里

jms MMWRS/MMRDS阅读

是一个子程序调用,只有在您的模拟PDP-4上运行了一些操作系统,而这些操作系统实际上提供了这些例程时,它才会起作用。

我不知道你使用了哪些文档,当然你也没有链接到它,但是当你查看Bitsavers时DEC磁带550手动提及

DECtape系统提供了三种类型的程序子例程,或者可以获得用于DECtape系统的程序子例程。第一个是用于搜索、读取和写入的基本子程序集。

DEC磁带子程序4-45-IO是允许程序员使用预先编写和测试的子程序读取、写入和搜索DEC磁带的程序。

所以您的示例代码需要这些。不,我不知道在哪里可以找到这些,但也许您的示例代码的源代码中有更多信息?

DEC代码在调用后将参数放入子例程调用中也很常见,所以我想

law 100/LAC(100)区块号jmp错误/错误返回10000/单位选择law 1000/1000,核心起始地址1777/1777号法律,核心最终演讲

是参数,一些参数的形式为法律操作码。

注意,这还将从DECtape将一个完整的块读入指定的核心地址,从指定的单元跳到错误如果有任何问题,请贴上标签。

它不会“读一个单词”。读一个单词也没有多大意义,因为你必须找到正确的方块等。

最后一个建议:如果你正在学习PDP-4,那么从键盘或纸带上的代码开始阅读可能更有意义(如果你还没有这样做,但你的问题看起来还没有)。


如果你想为PDP-4编写自己的操作系统,我建议你像在真正的PDP-4上开发时那样做:从纸带引导开始,从某种解释器读取键盘开始。然后,添加驱动程序。

这也应该教会你如何使用IOT命令。

MMWRS/MMRDS例程将是非常有用如果你能在某个地方找到它们,因为你基本上可以把它们逐字逐句地复制到你的驱动程序中。还要记住,simh上的DECtape是模拟的,不是真实的;在simh上运行的代码可能无法在真正的PDP-4上运行。尝试从头开始,仅以模拟作为参考,然后解决所有问题将有些痛苦。

simh网站链接到一个包含DECsys磁带的zip文件中,例程可能以二进制甚至源代码的形式存在。作为如何使用DECsy磁带的早期尝试,DECsys也很有趣。

如果您是DECtapes的新手,我还强烈建议您在PDP-8上试用OS/8,您可以在那里工作得很舒服。(我也在真正的PDP-8上做过这件事。顺便说一句,模拟缺少了你在真正硬件上的计时功能。磁带需要时间倒带,如果你的文件在磁带末尾以某种方式掉了,你会注意到的)。


PDP-7的磁带例程实际可用在这里,您可能需要对PDP-4进行一些修改。

6
  • 我从这个文档中找到了一个例子:bitsavers.trailingedge.com/pdf/dec/pdp7/… 5月13日18:30
  • 示例代码前面的两段清楚地表明,示例使用的是DEC提供的子程序,因此需要在加载图像中显示这些子程序。
    – 戴夫
    5月13日20:03
  • 哎呀,我只是想为我的加载映像编写一个DECtape驱动程序。所以示例代码是不相关的,因为我没有为PDP使用操作系统。 5月13日20:14
  • 1
    示例代码不关心操作系统(没有操作系统),但它关心DEC提供的子程序。由于这些子程序实际上是一个设备驱动程序,如果您的目标是编写驱动程序,那么您可能根本不需要它们。您需要在IOT级别进行编码。参见第7-11页及以后。
    – 戴夫
    5月13日21:31
  • 2
    我支持从比550控件更简单的东西开始的建议。打印“hello world”(认真地说)是设备I/O中的第一个很好的练习。它可能会给人一种使用IOT指令的感觉。
    – 戴夫
    5月13日23:14
2

本550型DECtape控制文件似乎提供了如何从裸金属控制DEC磁带的必要信息。

我从未对PDP-4、PDP-7或DECtape控件进行过编程,所以您可能需要对此稍加考虑。然而。。。

550是非常低的水平。它可以缓冲一个机器字。与此同时,磁带正在读写块。这意味着时间要求相当紧——您需要在单词出现时从控件中读取单词,而不是在单词出现之前或之后。

我猜你开始手术的时候毫米lc,然后循环读取标志并发出毫米/日当需要时。

你必须登录来回答这个问题。

不是你想要的答案吗?浏览标记的其他问题.