Apple IIe 6502 组件存取盘

Apple IIe 6502 Assembly Accessing Disk

我目前正在为需要 reading/writing 磁盘文件的 Apple IIe 编写程序。在阅读我在网上找到的关于 Apple II 汇编语言的书籍时,我遇到了 $C060 用于访问盒式磁带端口的子程序,但我似乎找不到可以访问的子程序磁盘驱动器。有没有这样的监控命令?如果没有,我会在程序中对 read/write 一个文件 to/from 磁盘做什么?

在DOS下可以不加载软盘读写。如果你想 read/write 其他程序可以使用的磁盘,DOS 很有用,使用 DOS 使事情可靠地工作比使用原始 I/O 更容易,但原始 I/O 可以是比 DOS 更快,并允许在磁盘上存储更多信息,特别是如果您永远不需要一次读取或写入少于一个轨道。

当使用一次一个轨道时 I/O,写入和读取磁盘在概念上很简单:

  1. 要写入磁盘磁道,建立一个缓冲区,容纳大约6K的适当格式的数据,打开电机,将磁头移动到所需磁道,打开写入信号,写入模式0x92 $A4 大约500次,之后是$9F 然后输出缓冲区的内容并关闭写信号。必须每 32 个时钟周期将字节精确地发送到驱动控制器一次。甚至一个周期的滑动都会导致控制器输出垃圾。

  2. 读取磁盘磁道,打开电机,将磁头移动到所需磁道,从磁盘读取数据字节,直到看到字节序列$92 $A4 $9F,然后读取其余数据。数据将以大约 32cycles/byte 的速率到达,每个字节必须在 7 个周期内读取 window.

读回的数据应该与写入的数据精确匹配,前提是缓冲区中的每个字节都遵守三个限制:

  1. 每个字节都必须设置最高有效位。

  2. 任何字节都不能包含超过两个连续的 0 位。

  3. 每个字节必须至少包含一对连续的 1 位。

有 64 个可能的字节值满足这些条件。在存储之前对任意数据进行编码以适应该限制,并对以这种方式写入的信息进行解码可能会很麻烦,但这是编写自己的磁盘例程的“乐趣”的一部分。许多磁盘程序在不解码的情况下将数据读入缓冲区,然后再解码,但如果选择合适的编码,则可以在从磁盘接收信息时实时解码信息。