像NES这样的8位机器如何访问超过256字节的ram?

时间:2017-06-13 15:30:46

标签: assembly virtual-machine virtual emulation

最近我花了很多时间考虑硬件仿真和虚拟机。我一直在尝试设计一个基于NES硬件的虚拟机。但是,我似乎无法找到有关NES如何访问超过256字节RAM的任何信息。根据NES维基,该机器有2k的CPU内存。由于NES是8位机器,因此地址最多只能达到255.那么这怎么可能呢?他们只是将更大的地址存储在多个寄存器中吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:4)

NES有一个由Ricoh构建的6502系列CPU(它缺少BCD模式)。 6502 CPU具有16位地址空间,可以使用各种模式进行寻址。

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

LDA $8000将使用地址$ 8000

的数据加载累加器

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

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

因此,如果$ 0004的内存包含值$ 1234且Y寄存器为$ 21,那么指令

LDA ($04),Y将从零页面读取$ 1234然后添加Y寄存器以获取地址$ 1255,然后将$ 1255的内容加载到累加器中。有更多的寻址模式,但感觉更像6502汇编的教程。

从广义上讲,处理器按其数据路径的宽度分类,但CPU设计人员可能出于成本原因在物理芯片上指定较少的数据或地址引脚。

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

答案 1 :(得分:0)

是的,使用"多个寄存器"在机器的硬件或墨盒上称为银行转换:https://en.wikipedia.org/wiki/Bank_switching