2017-04-23 9 views
1

私は、古い6502プロセッサが、特に任天堂エンターテイメントシステムでどのように動作するかを理解しようとしています。私を混乱させ続ける一つのことは、すべてのアセンブリ命令がRAM-RAMコマンドを処理するように見えるので、システムが関連するデータをROMからRAMに移動する方法です。例えば、ゲームがマリオの敵をロードする必要があった場合、CPUはどのようにロードして関連する領域を特定し、ロードしますか?一度それがRAMに入っていれば私はまともな理解を持っていますが、それは私が理解していないRAMにデータを取り込んでいます。ありがとう!6502プロセッサは、ROMとRAMの間でどのようにデータを転送しますか?

+3

プロセッサは、RAMまたはROMにアクセスしているかどうかは完全に認識されません。書かれる前にRAMに格納されているアドレスから読んだり決してROMに書き込もうとしないようにすることはプログラマの責任です。単純なシステムでは、固定アドレスにマップされるなど、複雑ではありません。 –

+0

プログラマはアドレスをアセンブリコードにハードコードします。 Nintentoアーキテクチャの正確な内容はわかりませんが、ROMはおそらくアドレス空間の固定された場所にマップされています。これは、[Retrocomputing.SE]によく似た概念的な質問のタイプです。 –

+0

ほとんどのプロセッサは、ROMとRAM、周辺機器などのメモリマップは何の手がかりも持っていません。これを知っているのはプログラマです。いくつかの例外があります。周辺アクセスが命令セットに設計されているものとcortex-mのようにCPUが設計されており、アドレスバンドがコード用、データ用と周辺用の両方に設計されていますがチップベンダーはこれを賞賛し、プログラマーは実際にどこにあるのかを実際に知ることができます。 6502、8086、z80、etcプログラマまで100%。 –

答えて

6

典型的な6502システムでは、ROMはプロセッサのアドレス空間にマップされます。プロセッサがどのアドレスにアクセスしようとしているかに応じて、アクセスはRAM、ROM、または何も制御レジスタのようなものになります。メインボードには、通常、上位アドレスビットを見て、対応するRAMまたはROMチップのチップセレクトラインをイネーブルにするロジックがあります。プロセッサは違いを知らせることはできません.ROMへの書き込みは無視されます。

2

私はあなたの質問を完全に理解しているとは言えませんが、以下のように正しい方向に向けるのに役立ちます。

  1. システムのメモリマップを理解する必要があります。 「ニンテンドーエンターテイメントシステムのメモリマップ」をGoogleが検索した結果、多くの人々の間でこの有益な検索ページが見つかりました。 https://fms.komkon.org/EMUL8/NES.html RAMとROMであることを確認するのに役立ちます。あなたのプログラムのどこかに、カートリッジROMからデータをロードするコマンドがなければなりません。

  2. RAM-RAMコマンドそのものはありません。アドレッシングモードについては、http://www.emulator101.com/6502-addressing-modes.htmlを参照してください。

    LDA $C042 
    STA $00F5 
    

    は全体の形状定義を移動するように、彼らはへの可能性があります:すべてのデータはそうのように見えるかもしれません(たとえば$ 00F5)RAMへの($ C042を言う)ROMからバイトを移動するために、レジスタを介して移動させ、より複雑なアドレッシングモード、Absolute Indexed、またはIndexed Indirectを使用することができます。ロード命令は、フェッチされているデータを格納するROMアドレスで以前にロードされたRAMアドレスを参照するため、後者はあなたを混乱させる可能性があります。

  3. 適切なデータがどこからロードされ、どこに格納されるかは、プログラム(またはプログラマ)が把握しておく必要があります。

関連する問題