問題タブ [6502]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
emulation - 6502 CPU エミュレーション
週末なので、趣味のプロジェクトを書いて 1 週間のプログラミングから解放されます。
昨日、MOS 6502 CPU エミュレータのフレームワークを書きました。レジスタ、スタック、メモリ、およびすべてのオペコードが実装されています。(以下ソースへのリンク)
私が書いたデバッガーで一連の操作を手動で実行することはできますが、NES ROM をロードして、プログラム カウンターをその命令に合わせたいだけです。これが欠陥のあるオペコードを見つけるための最速の方法であると考えました。
簡単な NES rom ローダーを作成し、ROM バンクを CPU メモリにロードしました。
問題は、オペコードがどのようにエンコードされているかがわからないことです。オペコード自体は、オペコードを一意に識別するオペコードごとに 1 バイトのパターンに従うことを知っています。
等
ただし、オペコード引数がどこにあるのかわかりません。直後のバイトですか?絶対メモリでは、バイトではなくショートかもしれないと思います。
このCPUのメモリモデルに精通している人はいますか?
編集:これはおそらく暗闇で撮影されていることを認識していますが、古い学校のアップルとコモドールのハッカーがここに潜んでいることを望んでいました.
編集:ご協力いただきありがとうございます。各操作を調整するための適切な変更を実装した後、CPU はマリオ ブラザーズをロードして実行できます。開始を待ってループする以外は何もしませんが、それは良い兆候です:)
ソースをアップロードしました:
https://archive.codeplex.com/?p=cpu6502
エミュレーターがどのように機能するのか疑問に思ったことがある人なら、理解するのは非常に簡単です。少なくとも最適化されていませんが、2.4 GHz マシンで 2 MHz で動作する CPU をエミュレートしています :)
low-level - CPUエミュレーションと特定のクロック速度へのロック
私の他の質問を読んだことがあれば、私が今週末、プログラミング演習として6502CPUエミュレーターを組み立てるのに費やしたことをご存知でしょう。
CPUエミュレーターはほぼ完成しており、限られたテストからはかなり正確に見えますが、非常に高速に実行されているため、マシンの実際のクロック速度まで抑制したいと思います。
私の現在のテストループはこれです:
お分かりのように、各オペコードは完了するまでに特定の時間がかかるため、CPUサイクルクロックをカウントダウンするまで次の命令を実行しません。これにより、オペコード間の適切なタイミングが提供されます。これにより、すべてが高速になります。
目標のCPU速度は1.79mhzですが、複雑さを加えても速度を1.79mhzに維持するために、クロックの問題を解決したいので、調整する必要はありません。
何か案は?
assembly - 未満の場合の分岐の正しい分岐命令はどれですか
私は昨日これに答えを書きました: あなたが見たり行ったりした中で最もクールなハックは何ですか? 私は 6502 アセンブリを思い出すのに非常に苦労しました。
何の指示かわかる方いますか?BNE と BEQ は同じで、BCC はキャリー用で、CMP は基本的に SBC でキャリーに影響しますが、その場合に機能するかどうかはわかりません。
java - エミュレーター フレームワーク
コンピュータ システム エミュレータを開発するための優れたオープン ソース フレームワークはありますか? 私は特に、8 ビット プロセッサ (6502、6510 など) 用のエミュレータの開発に伴う労力を削減できる Python または Java で書かれたものに興味があります。
hardware - 自作のニンテンドーエンターテインメントシステムソフトウェアを実際のハードウェアでテストするにはどうすればよいですか?
数年前、私は6502アセンブリで書かれたクラスプロジェクトとしてNESゲームを実装しました。ファミコンエミュレータでしか実行していませんが、実際のハードウェアで実行してほしいです。これを行うための開発ボードはありますか?マッパーチップなどでは多少注意が必要ですが、一般的なマッパー(MMC3など)だけに限定したいと思います。
assembly - x86を使用していない従来のアセンブリ言語テキスト?
アセンブリプログラミングの原則を詳細に扱い、ターゲットアーキテクチャとしてx86を使用しないテキストを探しています。そのような最近の本は見つかりませんでしたが、アプリケーション全体がまだアセンブリで書かれていた1970年代と1980年代に書かれた良い本がいくつかあったと思います。使用されるアーキテクチャも、6502やVAXなどのよりクリーンな設計の1つである必要があります。
assembly - 基本的なNESエミュレーション理論-私は立ち往生しています
正直なところ、このトピックに関する私の知識は非常に不完全であり、私の問題を説明することすら難しいと感じているので、事前に、この質問のオープンエンドと一般的な希望に満ちた態度についてお詫びします。私は本当に投稿したくありませんでしたが、私は完全にそして完全に立ち往生しています。
NESエミュレータを起動しました。解釈されます(したがって、動的な再計算は行われません)。
Atmは、ROM(mapper 0 rom)をロードしてマップし、割り込みとPPUを処理する必要がある場所まで初期化コードを実行できます。それは私が立ち往生しているところです。
これが私のemuatmからの出力例です。実行は8000から始まり、800aで無限ループに陥り、そこからどのように進むかがわかりません。
だから私の質問は、誰かが私のためにPPUレンダリングを介した1回の反復の基本を説明できますか?サイクルカウント、割り込みなどを含みます(つまり、240スキャンライン画面全体を描画して次の画面に移動します)。
loops - アセンブリでwhileループを書く
6502 プロセッサでアセンブリに while ループを書き込もうとしていますが、16 進数コードの書き方がわかりません。ループの開始位置と終了位置を示すラベルがある短縮形を使用して記述された例を見てきましたが、実際の 16 進コードについては何も表示されません。
私が有用だと思う2つのコードは次のとおりです。
- メモリ内のバイトを X reg と比較します (省略形: CPX、16 進数: EC)。これは、等しい場合に Z フラグをゼロに設定し、
- Z フラグ = 0 の場合、X バイトを分岐します (省略形: BNE、16 進数: D0)。
assembly - キーストロークの比較-アセンブリCCS64
アセンブリ(CCS64)のキーストロークを比較したいと思います。同じキーを続けて入力する場合は、次の例を実行します。A A=これを実行する
しかし、私がこれを入力した場合:A B=何か他のことをする
提案?
lisp - 8 ビット システムでの Lisp ライクな言語の VM に興味がある
8 ビット マイクロプロセッサで実行でき、動的言語をサポートする、推奨される仮想マシンを探しています。コード密度、移植性、および小さなインタープリターを持つ能力の点で利点を認識しているため、VM ソリューションが必要です。
私の目標は、6502 マイクロプロセッサのようなもので、「Apple II のロゴ」構文に従って、完全なロゴ インタープリタを実行することです。
PyMite 、Java の「マイクロ エディション」への参照を見てきました。もちろん、1970 年代の UCSD p-System ソースが利用可能になりました。
提案は大歓迎です。