GPU / PPU时序如何在Gameboy上运行?

问题描述 投票:-2回答:2

我正在写一个gameboy模拟器,我来实现图形。然而,就时间/时钟周期而言,我无法弄清楚它如何与cpu一起工作。 CPU是否执行了一定数量的周期(如果有的话),然后将其交给GPU?或者游戏玩家总是处于hblank / vblank状态,而GPU在它们之间使用CPU?我找不到任何有助于我的信息,只能找到如何使用控制寄存器。

gpu emulation timing gameboy
2个回答
0
投票

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

CPU通常是模拟器的主要部分,实际上是循环的重要部分。每次CPU执行任何循环周期时,您都会将该周期数传递给模拟器的其他组件,以便它们可以自行同步。

例如,某些CPU指令作为单个指令的一部分读写存储器。这意味着将采用Gameboy CPU 4(读取)+4(写入)周期来完成指令。因此,在仿真器中,您执行读取,将4个周期传递给GPU,执行写操作,将4个周期传递给GPU。对于与CPU并行运行的其他组件(如定时器和声音),您也会这样做。

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


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以形成CPU使用的多相1.05 MHz时钟。

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

© www.soinside.com 2019 - 2024. All rights reserved.