2017-04-23 60 views
1

我一直在试图理解一个老的6502处理器是如何工作的,特别是对于任天堂娱乐系统。有一件事继续令我困惑,系统如何将相关数据从ROM移入RAM中,因为所有汇编指令似乎都处理RAM-RAM命令。例如,如果游戏需要在马里奥加载敌人,那么CPU如何识别要加载的相关区域,然后加载它们?一旦它在RAM中,我有一个很好的理解,但它将数据存入内存,我不明白。谢谢!6502处理器如何在ROM和RAM之间传输数据?

+3

处理器完全不知道它是否正在访问RAM或ROM。程序员要确保他在写入之前从不从位于RAM中的地址读取数据,并且从不尝试写入ROM。并不复杂,在像这样的简单系统中,它们映射到固定地址。 –

+0

程序员将地址硬编码为汇编代码。虽然我不知道Nintento架构的确切细节,但ROM大概映射到地址空间中的固定位置。这是一种可能更适合[Retrocomputing.SE]的概念性问题。 –

+0

大多数处理器都不知道内存映射是关于ROM还是RAM,外设等等。这是程序员知道的。有一些例外情况,一些是外设访问被设计到指令集中,另一些则是像cortex-m那样的cpu被设计为使得地址段用于代码,一个用于数据,另一个用于外设,但仍然可以达到芯片供应商为此表示敬意,程序员要真正知道东西在哪里。 6502,8086,z80等100%,直至程序员。 –

回答

6

在典型的6502系统中,ROM被映射到处理器的地址空间。取决于处理器尝试访问的地址,访问权限将访问RAM,ROM,任何内容,或可能还有其他类似控制寄存器的内容。在主板上通常会有一些逻辑来查看高地址位并启用相应RAM或ROM芯片的片选线。处理器无法区分差异,尝试写入ROM会被忽略。

2

我不能说我完全理解你的问题,但以下可能会帮助你指出正确的方向。

  1. 您需要了解系统的内存映射。谷歌搜索“任天堂娱乐系统内存映射表”发现了这个有帮助的页面,其中许多其他人。 https://fms.komkon.org/EMUL8/NES.html它将帮助您识别哪些区域是RAM和ROM。程序中的某个地方必须有一个从磁盘ROM中加载数据的命令。

  2. 本身没有RAM-RAM命令这样的事情。寻址模式在这里描述:http://www.emulator101.com/6502-addressing-modes.html。所有数据都通过寄存器移动,所以将字节ROM移动(比如$ C042)至RAM(比如$ 00F5)可能看起来像:

    LDA $C042 
    STA $00F5 
    

    是运动的整体形状定义他们很可能会使用更复杂的寻址模式,绝对索引或甚至索引间接。后者可能会让你感到困惑,因为加载指令将引用一个先前加载了ROM地址的RAM地址,ROM地址用于存储正在提取的数据。

  3. 由程序(或者程序员)来跟踪合适的数据从哪里加载以及它的存储位置。

相关问题