我目前正在为需要从磁盘读取/写入文件的 Apple IIe 编写程序。在阅读我在网上找到的有关 Apple II 汇编语言的书籍时,我遇到了$C060
用于访问磁带端口的子程序,但我似乎找不到可以访问磁盘驱动器的子程序。有这样的监控命令吗?如果没有,我会在程序期间如何从磁盘读取/写入文件?
1 回答
可以在不加载 DOS 的情况下读取和写入软盘。如果您想读/写其他程序可用的磁盘,DOS 很有用,并且使用 DOS 使事情可靠地工作比使用原始 I/O 更容易,但是原始 I/O 可以比 DOS 更快并且允许更多存储在磁盘上的信息,特别是如果您一次不需要读取或写入少于一个磁道。
使用一次跟踪 I/O 时,写入和读取磁盘在概念上很简单:
要写入磁盘磁道,请构建一个包含大约 6K 适当格式数据的缓冲区,打开电机,将磁头移动到所需磁道,打开写入信号,写入模式 0x92 $A4 大约 500 次,然后是 $9 F 然后输出缓冲区的内容并关闭写信号。字节必须每 32 个时钟周期准确地发送到驱动控制器一次。甚至滑过一个周期都会导致控制器输出垃圾。
要读取磁盘磁道,请打开电机,将磁头移动到所需磁道,并从磁盘读取数据字节,直到看到字节序列 $92 $A4 $9F,然后读取其余数据。数据将以大约 32 个周期/字节的速率到达,并且必须在 7 个周期窗口内读取每个字节。
如果缓冲区中的每个字节都遵循三个限制,则读回的数据应该与写入的数据精确匹配:
每个字节都必须设置最高有效位。
任何字节都不能包含超过两个连续的 0 位。
每个字节必须包含至少一对连续的 1 位。
有 64 个可能的字节值符合这些标准。在存储之前对任意数据进行编码以适应该限制,并对以这种方式写入的信息进行解码可能会很麻烦,但这是编写自己的磁盘例程的“乐趣”的一部分。许多磁盘例程将数据读入缓冲区而不对其进行解码,然后再对其进行解码,但是如果选择合适的编码,则可以在从磁盘接收信息时实时解码信息。