是的,Apple II 的鼠标卡 IRQ 与垂直同步信号(VBL)同步。

H1:关于 Apple II 鼠标卡中断与垂直消隐同步的技术探讨

主要观点:

  • 明确本文不是发现,而是对“如何”的解释。
  • 探讨 Apple II 鼠标卡的中断及其与垂直消隐的同步问题。

关键信息:

  • 鼠标卡文档表明 IRQ 与 VBL 同步。
  • 在 MAME 仿真中,游戏闪烁,而实际中渲染干净,因测试环境不同(如 Apple //c 与 Apple IIe)。
  • 调查发现 Apple II 鼠标卡 IRQ 精确同步于 VBL 信号,鼠标固件通过软件等待垂直消隐。
  • 鼠标卡固件通过 6821 PIA 和 68705 CPU 设定其 IRQ 与 VBL 同频,68705 固件中有特定编程。
  • 68705 定时器每 2MHz 时钟周期递减 Timer Data,达到 0 时根据 $4F 和 $50、$51 的值重新初始化,从而实现每 17030 或 20280 个 6502 周期产生一次中断,与垂直消隐周期一致。
  • 对于使用鼠标 IRQ 同步 VBL 的程序员,需根据计算机类型使用 TIME_DATA 调用设置正确速率,可通过计数周期、cc65 的 get_tv()函数或询问用户来实现,且此方法会有几百个周期的延迟。

重要细节:

  • 在 Apple IIe 上,鼠标固件通过监视 $C019 的 RDVBL 等待垂直消隐;在 Apple //+上,通过设置全零的 HGR 页和相关字节并进行蒸汽锁来确定光束位置。
  • 68705 固件中的编程涉及对 PORTA、PORTC 等寄存器的操作,以及对 $59、$50、$51 等地址的读写。
  • $51 包含 $DF,$50 包含 $C7(X = 0 时)或 $D9、$6E(X = 1 时),计数器编程为不同频率。
  • 定时器数据在 68705 的 IRQ 期间重新设置时,LDA 和 SUBA 操作会占用一些周期,最终实现精确的同步。
  • 从 IRQ 向量到 ProDOS 再到各种 IRQ 处理程序到代码,实际代码通知 VBL 会有几百个周期的延迟。
阅读 10
0 条评论