2017-04-23 104 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. 由程序(或者程序員)來跟蹤合適的數據從哪裏加載以及它的存儲位置。

相關問題