問題タブ [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.

0 投票する
6 に答える
2447 参照

assembly - 命令がどのように翻訳されるかを見る (コンピュータ アーキテクチャ)

ちょっとややこしい質問です。しかし、私は本当に低レベルのプログラミングを学びたいと思っています。問題は、Arduino/Etc のような開発ボードです。何が起こっているのかを本当に隠します。

私はコンピュータ アーキテクチャ、ロジック/ゲート/シーケンシャル ロジックなどについて学ぶことに時間を費やしてきました. CMOSトランジスタなどを使用してゲートがどのように作られているかなど)。

しかし、それはそれがどこで終わるかについてです....そして、命令(16進数/またはアセンブリ/などのコードなど)が可能な限り単純なコンピューター(私が使用した多くの本が行きましたGates のようなものからコンピュータへとまっすぐに....その中間はありません)。レジスタやメモリの場所に値を保存するような単純なものでさえ(そしておそらくピクセルに印刷する?など)。

最終的にエミュレーターを作成することでさえ、興味深いものになると思います。私は高水準言語の経験がありますが、多くのアセンブリを使用し、命令セットがそれほど大きくないため、6502 のようなものが良いスタートになるかもしれないと聞きました。

役立つリソース/考え/本を知っている人はいますか? 私は「Elements of Computing Systems」を読んだことがありますが……良い本ですが、実際に何が起こっているのか、それが起こっているのかを見ていないとは思えません。これは Electronics.stackexchange の質問かもしれません。もしそうなら、お詫び申し上げます。

0 投票する
2 に答える
673 参照

assembly - CA65: 16 ビットで計算されたアドレスからの「範囲エラー」

次の CA65 コードがあるとします。

次のエラー メッセージが表示されます。

興味深いことに、次のバージョンは期待どおりに動作します。

では、これを内部で機能させるにはどうすればよい.scopeですか?

0 投票する
2 に答える
1177 参照

cpu-registers - 6502 は符号付きまたは符号なしの 8 ビット レジスタ (JAVA) を使用しますか?

私は 6502 用のエミュレーターを作成していますが、基本的に、レジスターの 1 つ (主に X と Y) にオフセットが保存されている命令がいくつかあり、分岐命令は符号付き 8 ビット整数を使用するため、レジスタは値を 8 ビット符号付きのままにしますか? これを意味する:

この状況で x = 0xEE としましょう。通常のバイナリでは、これは x = 238 を意味します。ただし、6502 では、分岐命令はメモリ アドレスへのジャンプに符号付きオフセットを使用するため、この場合 238 は -18 として解釈されるのか、それとも単に通常の符号なし 8 ビット値?

0 投票する
2 に答える
2162 参照

emulation - 6502の割り込みフラグの初期状態が1なのはなぜですか?

私は 6502 プロセッサをエミュレートしており、ほぼ完成しています (現在テスト段階にあります)。nesdev サイトの NES テストを使用しています。割り込みフラグと未使用の 5 番目のフラグの両方が最初は 1 に設定されているはずですが (つまり、割り込みを無効にします)、なぜですか? 未使用フラグの部分は・・・まあ・・・未使用なのでわかりますが、割り込みフラグがわかりません。Google で検索してみましたが、一部のサイトでは 1 に設定する必要があることが確認されていますが、この理由については誰も説明していません。プログラムの最初から割り込みがブロックされているのはなぜですか?

0 投票する
1 に答える
548 参照

emulation - 6502 エミュレーションでオーバーフローを伴う SBC の後にオーバーフロー フラグがクリアされる?

私は 6502 プロセッサのエミュレートを「完了」しており、現在テスト段階にあります。私は初心者なので、この 1 つの問題にすでに数時間悩まされています。基本的には自作のROMと誰かが作成したログであるNESテストに従っています。メモリをステップスルーした後、すべてのレジスタにあるはずの値が示されています。アキュムレータの値が 0x40 で、最初の引数 (メモリ pc + 1) が 0x41 に等しい場合でも、即時の SBC 命令の後にオーバーフロー フラグがクリアされることをログが示している部分に行き詰まっています。つまり、0x40 ~ 0x41 は 0xFF、つまり -1 である必要があり、オーバーフローが発生したということですよね? オーバーフロー フラグに関する記事を読みましたが、また、値が大きすぎたり小さすぎたりして符号付きバイトに保持できない場合にオーバーフローが発生し、反対側にオーバーフローすることを示しています (つまり、2 8 ビットの正が 8 ビットの負になり、その逆も同様です)。だから私は間違った方法を考えていますか?これはログ行です:

その次の行は、P レジスタが 0xA4 になったことを示しています。これは、キャリー フラグとオーバーフロー フラグの両方がクリアされたことを意味します。キャリー部分は取得できますが、オーバーフロー部分は取得できません。これは次の行です。

ところで; その2行目は私の主張を証明しています.Aレジスタは実際に0xFFになり、符号付きバイトの0xFFは256 - 255 = -1に等しくなります....

0 投票する
6 に答える
1360 参照

assembly - マシンは画面に表示されるものをどのように決定しますか (具体的には 6502)?

これは非常に漠然とした質問であることは承知しており、これは実際にはハードウェアに関連するものであるため、プログラマーにとっては良い質問ではないかもしれませんが、このサイトに適したアセンブリ/マシンコードが登場すると思います.

だから私が疑問に思っているのは; 6502 プロセッサを想像してみてください。いくつかのレジスタ、命令セット、および一定量のメモリへのアクセスがあります。次に、任意の解像度の LCD 画面があるとします。この画面に表示される内容はどのように決定されますか? どの位置のどのピクセルにどの色が割り当てられているかは、どのように決まるのでしょうか? たとえば、画面には常に、6502 のアキュムレータの値、x 位置がレジスタ x に格納され、y 位置が y に格納されたピクセルが表示されますか? それとも、マシンごとに解釈が異なるのでしょうか?

誰かが JavaScript 6502 エミュレーターを作成しました。デバイスは、200 ドルから始まるメモリ位置にあるピクセルの値を表示します。たとえば、次のようになります。

x:0, y:0 の位置にピンクがかったピクセルが表示されます。

x:5, y:0 の位置に白いピクセルが表示されます。

ただし、NES を見ると、専用の PPU があり、画面上の特定の領域に特定のピクセルを特定の値で表示します。

それで、それはどのように機能しますか?すべてのマシン (つまり、Apple II、C64、NES) によって解釈が異なるのでしょうか、それとも解釈方法にある種の一貫性がありますか?

実際のところ、Apple II 用にコンパイルされたプログラムが何らかの形で C64 で実行されたらどうなるでしょうか? 機械は指示を読めるはずですよね?

0 投票する
2 に答える
311 参照

x86 - 6502 のようなものと比較して、x86 アーキテクチャのようなものをエミュレートすると、どのような問題が発生しますか?

現在、Java で NES エミュレーターを作成しています。いくつかの小さな問題を除いて、私の 6502 コアは 99% 動作します。問題は、私は NES 用に 6502 をエミュレートしているということですが、PS1、N64、または DOS のようなものに興味を持ったことはありません。前述のシステムのように、単純な 2D スプライトを画面に描画する以上のことができるコンソール/システムをエミュレートしたいと常に考えていました。

私が聞きたいのは、x86 プロセッサのようなものを 6502 と比較してエミュレートするのが難しい理由は何ですか? 私が思いつく唯一のことは、巨大な x86 命令セットであり、x86 エミュレーターは、コードの読みやすさではなく、効率性のためにもう少しプログラムする必要があるということです。DosBox のソース コードを調べたので、この質問をしています。そこにある 6502 オープン ソース エミュレータのほとんどと比較すると、DosBox の x86 コアのソースは、リモートで理解することすらできません。プロセッサがオペコードのリストを検索してそれらを体系的に実行するだけなのに、なぜ複雑さにこれほど大きな違いがあるのでしょうか?