Gameboy的GPU / PPU时序如何工作?

时间:2018-09-03 16:40:46

标签: gpu emulation timing gameboy

我正在编写一个Gameboy模拟器,并且开始实现图形。但是,就时序/时钟周期而言,我还不太清楚它如何与CPU配合使用。 CPU是否执行一定数量的周期(如果有多少个周期),然后将其交给GPU?还是游戏男孩总是处于hblank / vblank状态,而GPU在两者之间使用CPU?我找不到任何可以帮助我解决此问题的信息,仅是如何使用控制寄存器。

2 个答案:

答案 0 :(得分:0)

此问题已在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形成一个多相1.05 MHz时钟   由CPU使用。

     

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

答案 1 :(得分:0)

该链接提供了更多的一般答案,而不是具体的实现方式,所以我想给我2美分。

CPU通常是模拟器的主要部分,实际上是计算周期的重要部分。每次CPU在任何数量的周期内执行某项操作时,您都将这些周期数传递给仿真器的其他组件,以便它们可以同步。

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

以这种方式进行操作实际上很重要,而不是模拟整个指令,然后再同步其他所有内容。不了解真正的ROM,但是有测试ROM可以验证这种确切的行为。 8个周期是很长的时间,并且在多个内存访问中间,其他一些Gameboy组件可能会做出更改。