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