所以我正在编写一个gameboy模拟器,而且我不能100%确定为什么其他项目会花时间将内存分解成适当的类别。我不知道是否存在我所遗漏的重大技术困境(可能在指令中处理非法参数?),但似乎唯一重要的是写入指令给出的地址是可检索的通过适当的阅读指令。因此,对于一个子问题,如果我在假设程序集完全合法(意味着没有什么东西试图读/写它可以的地方)的情况下工作,我可以制作一个大数组并读取和写信给它?
请注意,这是一个概念性的问题,我知道一个大阵列将是一个记忆猪,我不一定寻找最好的方法来做,只是试图了解它是如何工作的以及为什么其他模拟器开发人员就像他们那样做了。
答案 0 :(得分:2)
您将拥有只读存储器,读/写存储器和存储器映射I / O(外围设备等)。因此,您需要在某种程度上解码地址以将其分解为主要类别,然后对于外围设备,您必须模拟所有这些,因此您必须在地址解码中得到非常详细的信息。
对于外围设备,您需要检测对某个地址的读/写操作,这是通过简单地将写入数据放入数组中而无法完成的(例如,相同值的两次写入会产生影响,您只能将某些数据扫描到查找必须在读取和写入时触发的更改并执行硬件操作。)
如果你希望循环准确,你还需要知道rams和roms的时间,以模仿那些,取决于每个的库数量,或者时间是否依赖于你需要解码地址进一步
硬件将这些地址解码到同一级别,因此如果您要模拟硬件,则需要...模拟硬件......并进行相同数量的地址解码。
答案 1 :(得分:0)
我将在这里成为特定游戏男孩。看看gameboy的地址空间地图。地址空间本身是分开的,并不是模拟器能够做到的。硬件本身就是这样运作的。
以下某些区域无法实现为数组: