【问题标题】:How can you find the electron gun/scanline position?你怎么能找到电子枪/扫描线的位置?
【发布时间】:2013-04-17 13:59:33
【问题描述】:

如何在 ZX Spectrum 上找到电子枪的位置(即主动改变像素/扫描线)?

不同的 Spectrum 模型的时序略有不同。

如果这不可能,有没有办法等待某种形式的垂直同步事件? (即在屏幕底部的顶部。)

【问题讨论】:

标签: c zxspectrum


【解决方案1】:

您拥有的唯一可靠同步事件是在屏幕刷新的垂直空白期开始时生成的 50Hz 中断。

基本上,您有两种选择。绝大多数人只会从中断等待屏幕开始。对于不同的模型和克隆,所需的等待时间是不同的。大多数依赖这种精确时间的程序只能支持一两个模型。最先进的程序会尝试识别特定的克隆/模型并相应地调整时间,但由于任务的复杂性和缺乏足够详细的文档,没有人基于这种方法创建真正可移植的程序在许多模型上。

第二个选项是使用端口#FF。它不是一个真正的端口,但从它读取会返回 ULA 当前从屏幕获取的字节的值(或 255)。因此,可以在中断上同步,然后轮询端口#FF,直到它返回不同于 255 的值(假设您的屏幕包含不同的内容)。但是,请注意,几种常见的 Spectrum 模型,例如+2A 和 +3,没有这种行为,所以再次强调,如果您对支持的模型的良好覆盖感兴趣,这不是一个选择。

【讨论】:

    【解决方案2】:

    在地址 23672 处有一个 3 字节的帧计数器。

    23672 FRAMES 
    3 byte (least significant first), frame counter. Incremented every 20ms.
    

    我假设这是由 50Hz 中断增加的。所以我只会循环轮询它,直到最不重要的字节发生变化。

    【讨论】:

      【解决方案3】:

      那是很久以前的事了,但我记得有一个内存刷新计数器会针对每条扫描线进行更新。如果在 vblank 将其设置为 0,它将包含当前的扫描线。

      【讨论】:

        猜你喜欢
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        相关资源
        最近更新 更多