問題タブ [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.
assembly - これを 16 ビット マジックのループに変えることはできますか?
私は今 6502 アセンブリから始めていますが、8 ビットより大きい数値を処理する必要があるループに頭を悩ませています。
具体的には、いくつかのメモリ ロケーションをループしたいと考えています。疑似 C コードでは、これを行いたい:
したがって、RAM$44AD
に書き込みたいアドレスから始めて、前方にジャンプし、そこに書き込み、それを20回実行するまで再び前方にジャンプします(最後に書き込むアドレスは です)。$01
$28
$01
$28
$47A5
私の現在のアプローチは、書くのが面倒なループ展開です (アセンブラーを使えばもっと簡単にできると思いますが):
絶対アドレス指定については知っていますが (Y レジスタの代わりにアキュムレータを使用します - sta $44AD, x
)、それでは 0 から 255 までの数値しか得られません。私が本当に欲しいと思うのは、次のようなものです。
基本的には、最上位アドレスから始めてループダウンします。問題は、$14 * $28 = $320 または 800 dec であり、これは 8 ビット X レジスタに実際に格納できる量を超えていることです。
これを行うエレガントな方法はありますか?
assembly - MOS 6502 の asm で遅延を作成する方法
私は ASM を初めて使用し、次のコードの遅延を作成する方法を試しています。
byte - BASIC 6502 N バイト整数加算を再試行していますか?
私は最初 (助けを求めて)、2 つの n バイト整数を追加する 6502 ペット エミュレーターで BASIC プログラムを作成しました。ただし、私のフィードバックは、2 つの 16 ビット整数を追加するだけであるというものでした (n バイト整数を追加するのではありません)。
私のコードを見てこのフィードバックを理解し、2 つの n バイト整数を追加するプログラムを作成するための正しい方向を教えてくれる人はいますか?
コラボありがとう!
ドキュメント: 絶対インデックス アドレッシングを使用して 2 つの n バイト整数を追加します。加数はメモリ位置 $0600、$0700 から始まり、答えは $0800 にあります。整数のバイト長は $0600 です (¢ —> 256)
オペコード、ドキュメント、変数:
assembly - アセンブリ プリント バッファ
もう一度やりますが、今回は近いです。6502 チップでの作業。
アセンブリプリントバッファのプログラムを書いています。
私が抱えている 1 つの問題は、文字列が null かどうかを確認することです。
これまでの私のコードは次のとおりです:(人間が読める)
文字列が null かどうかを確認するにはどうすればよいですか?
ありがとう!
assembly - 結果でメモリの 100 の位置を埋める
6502 プロセッサーでの前の操作の結果で、メモリーの 100 ポジションを埋めようとしています。
レジスタに格納されているメモリ位置をインクリメントし、結果をレジスタに格納するにはどうすればよいですか?
assembly - Commodore 64 エミュレーターで文字が 0x40 オフセットされるのはなぜですか?
画面をクリアした後、文字列を画面メモリに出力する 6502 コードがあります。残念ながら、「HELLO WORLD」などの文字列を出力すると、文字化けしてしまいます。これは、ここの PETSCII コードから考えた 0x41 ではなく、大文字が 0x01 で始まるためであることがわかりました。
文字列から 0x40 を減算することでこれを修正できますが、スペースなど、文字以外のすべてが正しくありません。文字ジェネレーターが 0x01 を 0x41 ではなく文字 'A' に変換する理由がわかりません。0x41 を逆スペード記号 (トランプのデッキのように) に変換し、その上にあるものはすべて境界文字と奇妙な記号のように見えます。
しばらく見回した後、私が解決しようとしている問題を述べているように見える PETSCII のウィキペディアのページでこの引用を見つけましたが、それを修正する方法がわからず、どこにも情報が見つかりません...
実際のキャラクタ ジェネレータ ROM は、異なる割り当てセットを使用していました。たとえば、画面メモリを直接 POKE して画面に文字 "@ABC" を表示するには、64、65、66、および 67 ではなく、10 進数の値 0、1、2、および 3 を POKE します。
私は Mac OS X の VICE x64 エミュレーターで実行しており、64tass の OS X ポートでアセンブルしています。
これは、0x40 を減算しないアセンブリ コードです。
ここに出力のスクリーンショットがあります
コメントの皆さん、ありがとう!
他の人を助けるための補足事項
PLOTでカーソル位置を設定することにより、CHROUTが出力する行と列を設定できます
emulation - 6502 のオペコードからアドレッシング モードをプログラムで決定する方法はありますか?
つまり、オペコードで何らかの方法でエンコードされたさまざまなアドレス指定モードですか? それらはプログラムで抽出できますか、それともこの情報は 6502 のドキュメントにのみ存在しますか? 私はエミュレーターを書いていますが、パフォーマンスには関心がありません。可能であれば、オペコードを受け取ってアドレッシング モードを返す関数があると便利です。
これまでのところ、すべてのゼロ ページ命令で 3 番目のビットが設定されているように見えることを除いて、コードにパターンがあることを示す兆候は見られませんでした。
assembly - 6502 アセンブリは 2 桁の数字を 4 桁に変換します
乱数 (0 から 31 まで) x が address$00
に保存され、別の乱数 (0 から 31 まで) y が address に保存されています$01
。この 2 つの数値を座標として使用して、住所を導き出します$xy
。たとえば、x = 2、y = 10 の場合、アドレスは になります$020a
。私は初心者なので、誰かがこれを行う効果的な方法を共有できますか?
派生アドレスに他の値を格納したい$020a
ので、これが必要です。