問題タブ [chip-8]
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.
c - GLUT と C を使用した 2D テクスチャのちらつき
単純な C だけを使用して chip8 エミュレーターを作成しようとしています。ほとんどのオペコードが設定されているので、ディスプレイで作業する必要があります。セットアップが簡単に見えたので、ディスプレイに GLUT を使用することにしました。主なアイデアは、chip8 スプライトを 2D テクスチャに表示することです。オペコードを実行していくつかの数字を表示するようにしましたが、ちらつきます。私が読んだことから、何かを表示する準備ができていることを確認するための最良の方法であるため、ダブルバッファリングを使用していますが、まだちらつきがあります。何がそれを引き起こす可能性があるかについてのアイデアはありますか?
ディスプレイ用の OpenGL と GLUT のすべてのコードを次に示します。
編集:私はそれを理解したかもしれません。描画オペコードでは、XOR を使用します。そのため、最初に描画コマンドを実行するとスプライトが表示され、再度呼び出されると消えます。
javascript - Chip8 エミュレータのバグ
JavaScript を使用して Chip8 エミュレーターを作成していますが、ほぼ完成しています。問題は、最初の数秒間は機能し、その後、オペコードの無限ループに陥り、決して発生しないことです。
それをチェックしてください:http://output.jsbin.com/mopireb/
2 つのパドルとスコアをレンダリングし、コンソールを確認すると (すべてのオペコードとレジスタをログに記録すると、これら 3 つのコードが永遠にループしています。
私は何を間違っていますか?
これが私のソースコードです(これまでのところひどい最適化ですが、それは後で説明します):
opcode - チップ 8 オペコード FX65 で I をインクリメントする
チップ 8 エミュレーターを構築しているときに、チップ 8 情報の 2 つの主要なソースが異なるように見えるという問題に遭遇しました。これは、チップ 8 インタープリター全体に影響を与えます。
一方では、ウィキペディアがあり、オペコード FX65 の下で次のことがわかります。
「V0 から VX (VX を含む) を、アドレス I から始まるメモリの値で埋めます。I は、値が書き込まれるたびに 1 ずつ増加します。」
ここで、「書き込まれた値ごとに I が 1 増加します。」重要な部分です。
これに従うと、次のコードになります。
一方、cowgodによる chip-8 リファレンスがあります。これは、ほぼすべてのチュートリアルがリンクしているリファレンスであり、次のことがわかります。
「インタープリターは、位置 I から始まるメモリーから V0 から Vx までのレジスターに値を読み取ります。」
このロジックを適用すると、次のコードが得られます (これは、ほとんどのチップ 8 実装で使用される実装でもあります)。
これら 2 つの主な違いは、I がインクリメントされるかどうかです。I はエミュレータのレジスタ インデックスであるため、プログラムが正しく動作することは非常に重要です。
私が知りたいのは、このオペコードのどの実装が正しいかということです。