0

我正在编写一个游戏机模拟器,我已经开始实现图形了。但是,就时序/时钟周期而言,我不太清楚它是如何与 cpu 一起工作的。CPU 是否执行一定数量的周期(如果有的话)然后将其交给 GPU?还是游戏机总是处于 hblank/vblank 状态,而 GPU 在它们之间使用 CPU?我找不到任何可以帮助我的信息,只有如何使用控制寄存器。

4

2 回答 2

3

这已在https://forums.nesdev.com/viewtopic.php?f=20&t=17754&p=225009#p225009得到解答

事实证明我完全错了,它们完全不同。

这是帖子:

Game Boy CPU 和 PPU 并行运行。4.2 MHz 主时钟也是点时钟。它除以 2 形成 PPU 的 2.1 MHz 内存访问时钟,再除以 4 形成 CPU 使用的多相 1.05 MHz 时钟。

每条扫描线长 456 点(114 个 CPU 周期),由模式 2(OAM 搜索)、模式 3(活动图片)和模式 0(水平消隐)组成。模式 2 长 80 个点(每个 OAM 条目 2 个),模式 3 大约是 168 加上给定行上的每个精灵大约 10 个,剩下的就是模式 0。绘制 144 条扫描线后是模式 1(垂直消隐)的 10 条线,总共 154 条线或每屏 70224 个点。CPU 在模式 3 期间看不到 VRAM(写入被忽略,读取为 $FF),但在其他模式下可以。CPU 在模式 2 和 3 期间看不到 OAM,但在消隐模式(0 和 1)期间可以。

于 2018-09-05T03:55:20.900 回答
1

该链接提供了更多一般性答案而不是实现细节,所以我想给我 2 美分。

CPU 通常是仿真器的主要部分,它实际上计算周期。每次您的 CPU 为任意数量的周期执行某些操作时,您都会将该数量的周期传递给仿真器的其他组件,以便它们可以自行同步。

例如,一些 CPU 指令作为单个指令的一部分读取和写入内存。这意味着将花费 Gameboy CPU 4(读取)+ 4(写入)周期来完成指令。因此,在模拟器中,您进行读取,将 4 个周期传递给 GPU,进行写入,将 4 个周期传递给 GPU。您对与 CPU 并行运行的其他组件(如计时器和声音)执行相同操作。

这样做实际上很重要,而不是模拟整个指令然后同步其他所有内容。不知道真正的 ROM,但有测试 ROM 可以验证这种确切的行为。8 个周期很长,在多次内存访问期间,其他一些 Gameboy 组件可能会做出改变。

于 2018-09-05T16:00:12.447 回答