4

我目前正在为我的下一个仿真项目学习 C,这是一个周期精确的 68000 内核(我的上一个项目是一个用 Java 编写的非周期精确的 Sega Master System 仿真器,现在已经发布了第三版)。我的查询将循环级别的准确性视为将事物提升到这个级别对我来说是新事物。

要将事情分解为 1 个 CPU 周期的粒度,大概我需要知道内存访问需要多长时间等等,但我的问题是,对于在内存获取/写入阶段需要多个周期的指令,CPU 在做什么每个周期 - 例如每个周期复制的 x 位数。

使用我的 SMS 仿真器,我不必太担心 M1 阶段等,因为它只是为每条指令使用循环计数 - 换句话说,它只精确到指令级别,而不是循环级别。我不是在寻找特定于架构的细节,只是想知道在达到这种粒度级别时应该注意哪些事情。

但是,欢迎提供 68k 详细信息。基本上,我想知道如果视频芯片从内存区域读取,而 CPU 在指令的该阶段中途仍在向其写入数据,以及其他类似情况,会发生什么。我希望我已经说得够清楚了,谢谢。

4

2 回答 2

1

我的猜测是,您不必深入到令人难以忍受的细节来获得足够好的结果来进行此类事情的时间安排。如果您不想深入了解架构的细节,那么无论如何您都无法做到这一点。

您的主要问题似乎是“如果视频芯片从内存区域读取而 CPU 仍在向其写入数据会发生什么”。通常在这些较旧的芯片上,总线协议非常简单(它们没有打包)并且通常有一个指示总线繁忙的引脚。因此,如果 CPU 正在写入内存,则视频芯片将只需要等待 CPU 完成即可。由于这些限制,双端口 ram 流行了一段时间,以便 CPU 可以同时写入帧缓冲区并由 RAMDAC 读取。

于 2012-06-25T15:40:43.020 回答
1

对于真正的周期精确仿真,您必须首先决定要用作参考的主时钟。这应该是软件运行的粒度可以检测到出现顺序差异的最快时钟。这可以由 CPU 时钟决定,但在大多数情况下,总线周期时间决定了可以识别的粒度事件(这通常只是 CPU 时钟的一小部分)。

然后您需要找出连接到该总线的不同设备(IC)具有的优先顺序(如果有多个总线主控器)。一个例子是视频 DMA 是否(以及如何)延迟 CPU。

通常不存在同时发生的事件。CPU 在 DMA 读取之前写入,或者相反(在双端口设备的情况下仍然如此,您只需要考虑设备的固有优先机制)。

一旦您充分了解哪个时钟可以有效控制可识别事件的粒度,您就可以考虑如何构建模拟器以准确地重现该行为。

通过这种方式,您可以创建 100% 循环精确仿真,前提是您有足够的关于所有设备行为的信息。

对不起,我不能给你更详细的信息,我对世嘉硬件的细节一无所知。

于 2012-06-28T15:38:37.203 回答