2017-06-13 59 views
-1

最近我花了很多时间思考硬件仿真和虚拟机。我一直在试图设计一个基于NES硬件的虚拟机。但是,我似乎无法找到有关NES如何访问超过256个字节的RAM的任何信息。根据NES wiki,机器有2k的CPU RAM。由于NES是8位机器,地址只能上升到255,所以这可能如何?他们是否只是将更大的地址存储在多个寄存器中?像NES这样的8位机器如何访问超过256字节的内存?

谢谢你的时间。

+0

https://wiki.nesdev.com/w/index.php/Nesdev_Wiki – xxbbcc

+1

跨站点重复:[8位处理器如何支持超过256字节的RAM?](https://electronics.stackexchange .com/q/57950/27052) –

+0

我会说他们并不局限于256字节,简单的维基百科搜索应该显示出来。各种具体的解决方案可以发生,x86使用的段(16位不是8,但同样的问题),在cpu中的其他人增加了额外的地址位,以某种方式访问​​和馈送到整个地址,空间,也可以解决问题在cpu你有逻辑提供额外的地址位,你可以用软件改变它们。 –

回答

4

的NES具有由Ricoh内置了6502家庭CPU(它缺少BCD模式)。 6502 CPU具有16位地址空间,可以使用各种模式进行寻址。

您可以直接指定指令中的16位地址,即

LDA $8000将加载与地址数据累加器$ 8000个

LDA $8000,X将X寄存器加$ 8000,然后在该地址读取的值(即如果X是76则地址为$ 8076)

更有趣的是零页面,它可以被视为128个16位指针寄存器。零个指令只需要一个字节到指定地址(但需要更多的周期来进行间接)

所以,如果在$ 0004的内存中包含的值是$ 1234和寄存器Y $ 21接着将指令

LDA ($04),Y会从零页面读取$ 1234,然后添加Y寄存器以获取地址$ 1255,然后将$ 1255的内容加载到累加器中。有更多的寻址模式,但更像是6502组装教程的东西。从广义上讲,处理器根据其数据路径的宽度分类,但是由于成本原因,CPU设计人员可能会在物理芯片上指定较少的数据或地址引脚。

例如,8088 & 8086被分类为具有20位地址总线和8位或16位数据总线的16位设备。摩托罗拉68000有一个8位总线(Sinclair QL使用68008)的另一个引脚缩减版本,后面的部件具有完整的32位地址/数据总线。

相关问题