我一直在試圖理解一個老的6502處理器是如何工作的,特別是對於任天堂娛樂系統。有一件事繼續令我困惑,系統如何將相關數據從ROM移入RAM中,因爲所有彙編指令似乎都處理RAM-RAM命令。例如,如果遊戲需要在馬里奧加載敵人,那麼CPU如何識別要加載的相關區域,然後加載它們?一旦它在RAM中,我有一個很好的理解,但它將數據存入內存,我不明白。謝謝!6502處理器如何在ROM和RAM之間傳輸數據?
1
A
回答
6
在典型的6502系統中,ROM被映射到處理器的地址空間。取決於處理器嘗試訪問的地址,訪問權限將訪問RAM,ROM,任何內容,或可能還有其他類似控制寄存器的內容。在主板上通常會有一些邏輯來查看高地址位並啓用相應RAM或ROM芯片的片選線。處理器無法區分差異,嘗試寫入ROM會被忽略。
2
我不能說我完全理解你的問題,但以下可能會幫助你指出正確的方向。
您需要了解系統的內存映射。谷歌搜索「任天堂娛樂系統內存映射表」發現了這個有幫助的頁面,其中許多其他人。 https://fms.komkon.org/EMUL8/NES.html它將幫助您識別哪些區域是RAM和ROM。程序中的某個地方必須有一個從磁盤ROM中加載數據的命令。
本身沒有RAM-RAM命令這樣的事情。尋址模式在這裏描述:http://www.emulator101.com/6502-addressing-modes.html。所有數據都通過寄存器移動,所以將字節ROM移動(比如$ C042)至RAM(比如$ 00F5)可能看起來像:
LDA $C042 STA $00F5
是運動的整體形狀定義他們很可能會使用更復雜的尋址模式,絕對索引或甚至索引間接。後者可能會讓你感到困惑,因爲加載指令將引用一個先前加載了ROM地址的RAM地址,ROM地址用於存儲正在提取的數據。
由程序(或者程序員)來跟蹤合適的數據從哪裏加載以及它的存儲位置。
相關問題
- 1. 如何在UIViewControllers之間傳輸數據?
- 2. 在as400和Oracle之間傳輸數據
- 3. 如何在Spring批處理步驟之間傳遞數據
- 4. 在數據幀之間傳輸數據
- 5. 如何在適配器之間傳輸數據?
- 6. 如何在MVC 3中的控制器之間傳輸數據?
- 7. 如何在瀏覽器和服務器之間傳輸數據結構
- 8. 服務器之間的數據傳輸
- 9. 如何在顫振和平臺之間傳輸話筒數據?
- 10. 我將如何去在JAVA和PHP之間傳輸數據?
- 11. 如何在Azure上的Azure表和Hadoop之間傳輸數據
- 12. 如何在servlet和jsp之間傳輸數據?
- 13. 如何在Java applet和ASP.NET網頁之間傳輸數據?
- 14. 如何在「mwArray *」和「mxArray *」之間傳輸數據?
- 15. rs和android之間的數據傳輸?
- 16. BroadCast和Activity之間的數據傳輸
- 17. Epicor 10如何在BPM預處理和後處理之間存儲數據?
- 18. html之間傳輸數據
- 19. HSA RAM和GPU-RAM之間的數據拷貝
- 20. 在C++應用程序和服務器之間傳輸數據
- 21. 如何處理聯網設備和服務器之間的雙向數據傳輸?
- 22. 如何在2個MySQL數據庫之間傳輸數據?
- 23. DMA傳輸RAM-RAM
- 24. 如何捕獲在Web服務器和WebService之間傳輸的實際數據
- 25. 地理數據庫和OpenLayers之間的傳輸格式
- 26. 如何在Android設備中獲取處理器速度和RAM
- 27. 在線Mysql和SQL Server數據庫之間的數據傳輸
- 28. 如何保護flash和php之間的數據傳輸?
- 29. 如何架構CSV和SQL之間的數據傳輸?
- 30. 在hadoop集羣之間傳輸數據
處理器完全不知道它是否正在訪問RAM或ROM。程序員要確保他在寫入之前從不從位於RAM中的地址讀取數據,並且從不嘗試寫入ROM。並不複雜,在像這樣的簡單系統中,它們映射到固定地址。 –
程序員將地址硬編碼爲彙編代碼。雖然我不知道Nintento架構的確切細節,但ROM大概映射到地址空間中的固定位置。這是一種可能更適合[Retrocomputing.SE]的概念性問題。 –
大多數處理器都不知道內存映射是關於ROM還是RAM,外設等等。這是程序員知道的。有一些例外情況,一些是外設訪問被設計到指令集中,另一些則是像cortex-m那樣的cpu被設計爲使得地址段用於代碼,一個用於數據,另一個用於外設,但仍然可以達到芯片供應商爲此表示敬意,程序員要真正知道東西在哪裏。 6502,8086,z80等100%,直至程序員。 –