首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Gameboy中使用CPU周期

在Gameboy中使用CPU周期
EN

Software Engineering用户
提问于 2013-11-04 03:39:31
回答 1查看 1.3K关注 0票数 4

我正在开发一个GBA仿真器,并致力于实现CPU周期。我只知道它的基本知识,每一个指令的手臂和拇指模式,作为每一组不同的周期为每一个指令。目前,我只是简单地说,每个手臂指令花费4个周期和拇指指令花费2个周期。但是,如何像CPU文档所说的那样实现它呢?指令周期是否取决于它当前访问的内存的哪个部分?http://nocash.emubase.de/gbatek.htm#cpuinstructioncycletimes根据上面的规范,它说不同的内存区域有不同的等待状态,但我不知道它的确切含义。此外,什么是非序贯循环,序贯循环,内循环,协处理器循环?我在一些GBA源代码中看到,他们正在使用PC来计算每条指令需要多少个周期才能完成,但是他们是如何做到的呢?

EN

回答 1

Software Engineering用户

发布于 2013-11-15 00:46:20

这只是部分答复,因此可能不允许:

目前,我只是简单地说,每个手臂指令花费4个周期和拇指指令花费2个周期。

实际上,如果我正确地记住了ARM,实际发生的是,在一个记忆周期中,您可以获取一个32位的ARM指令,或者两个16位的拇指指令。当然,执行时间与指令有关.

指令周期是否取决于它当前访问的内存的哪个部分?http://nocash.emubase.de/gbatek.htm#cpuinstructioncycletimes根据上面的规范,它说不同的内存区域有不同的等待状态,但我不知道它的确切含义。

不同的内存区域可能有比CPU更多的数据客户端。尤其是在图形/视频存储器中,需要从RAM中提取像素才能发送到显示器。除非您使用更快(读:更贵)内存,CPU和图形硬件将不得不轮流访问RAM。因此,取决于有多少其他RAM客户端,在CPU到达RAM之前可能需要几个周期。

它甚至可能不是那么高尚--制造商可能只是决定他们可以用更慢的(读到:更便宜的) RAM来处理大部分的程序和数据空间,并且只对那些绝对需要它的东西使用一小块快速内存。

此外,什么是非序贯循环,序贯循环,内循环,协处理器循环?

顺序与非顺序是指按顺序或无序读取内存位置.RAM被安排为按行和列地址索引的存储单元的二维数组。如果您按升序访问内存位置(例如,0、1、2、3、4、5等),则只需更改(大多数情况下)列地址,并且每次连续读取比非顺序访问地址更快。从链接到的文档判断,您似乎可以免费获得CAS增量,但是完整的RAS+CAS需要额外的周期。

内部循环意味着CPU正在运行,“哇,这太复杂了,给我一些额外的时间来解决这个问题。”( MUL指令就是这方面的典型例子。)

协处理器周期是指与ARM协处理器交谈所需的时间。我不知道,如果有的话,ARM协处理器在GBA中。

至于实现:这不适合于一个单一的答案。如果是我,我会独立于指令执行时间来模拟RAM访问时间。当CPU读取/写入内存时,将访问的内存地址与所访问的前一个内存地址进行比较。如果它们是相邻的(M(当前) == M(前一个)+ 4),那么它是免费的;否则添加一个循环惩罚。然后添加您要访问的内存区域所施加的延迟。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/216421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档