問題タブ [z80]

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 投票する
2 に答える
1550 参照

interrupt - IM0 の Z80 マルチバイト コマンド

私は楽しみのために、多くの周辺機器を備えたより複雑な Z80 CP/M システムを設計しようとしています。ドキュメントを読んでいるときに、IM0 で割り込みを受け入れるときの Z80 CPU の (ドキュメント化されていない?) 動作に出くわしました。

割り込みが発生すると、Z80 は M1 と IORQ をアクティブにして、外部デバイスに「オペコードをくれ」という信号を送ります。オペコードが rst 00 またはこのようなものであれば、すべて問題ありません。ドキュメンテーションによると、CALL など、任意のコマンドの任意のオペコードを CPU に与えることができます。

しかし、文書化されていない部分があります。「マルチバイト命令の最初のバイトは、割り込み応答サイクル中に読み取られます。後続のバイトは、通常のメモリ読み取りシーケンスによって読み取られます。」

「通常のメモリ読み取りシーケンス」。CPU がメモリからバイトを取得したいのか、デバイスから次のバイトを取得したいのかを判断するにはどうすればよいですか?

編集:私は、(良い?) 解決策を見つけたと思います: IORQ と M1 を分析することで、割り込み確認サイクルの開始を検出できます。また、MREQ と M1 を分析することで、次の「通常の」オペコード フェッチを検出できます。このようにして、これら 2 つの AND 信号によってトリガーされるフリップフロップをインストールできます。つまり、CPU が io デバイスからデータを読み取る限り、フリップフロップは 1 です。この 1 を使用して、メモリとの間でバス ドライバを禁止できます。

私の意図?CPLD で 8 つの優先入力を備えた割り込みコントローラーを設計しています。そのレジスタは、各割り込みピンの 16 ビット アドレスを保持します。楽しみのためだけに:-)

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

assembly - GBDK コンパイラの 2 の累乗乗算に関するバグ

私は現在、ゲームボーイエミュレーターを開発しており、エミュレーターの正確性をテストするために、GBDK を使用してエミュレーター用の C プログラムをコンパイルしています。

コンパイラは (予想どおり) 回転を行うことで、2 の累乗である定数を使用して乗算を最適化することに気付きました。ただし、特定のパワーに対して正しい量の回転を生成していないようです。

たとえば、次の非常に単純なプログラム:

次のアセンブリを生成します。

RR命令は実際にはキャリーフラグを介して回転し、効果的に9ビットの回転になるため、これは正しくないように見えます。これは、現在 (0x40) の間違った結果ではなく、正しい結果を生成するために追加のローテーションが必要であることを意味します。

視覚化:

これが実際に GBDK に付属する SDCC コンパイラのバグであることを確認できる人はいますか? ローテーションに続く and 命令の使用にも興味があります。

sourceforge の Windows 用 GBDK の最新 (3-2.93) バージョンを使用します。

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

assembly - このコードの理解に助けが必要 (Z80 アセンブラー)

持っているドキュメントを調べてみましたが、本当にわかりにくいです。試験のためにこれを理解する必要がありますが、多くの問題があります。

ほとんどの「関数」(ld、add、jp、inc)が個別に何をするかは理解していますが、理解できないのは次のとおりです。

1) 最初の行で IX にロードされる値は? (変数?) ベクトルには 4 つの値があります。これを z80 シミュレーターで試してみたところ、IX が値 0019 を取得すると表示されましたが、これがどこから来ているのかわかりません...

2) "vector: db 12,7,9,21" が値 12,7,9,21 の配列を作成することを正しく理解していますか?

3)「end start」という行は何をしますか?

4)保有している「金額」とは何の価値ですか?

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

z80 - ゲームボーイのCPのキャリーフラグの挙動は?

ゲームボーイ CPU マニュアルの87 ページでは、CP n命令がボローがなかったときにキャリー フラグを設定し、それがA < n. A > n. _

例:A=0と の場合、のようなフラグを設定しB=1ます。これは 0 - 1 です。これは 0 + 255 = 255 になり、キャリー フラグは設定されませんが、.CP BSUB A, BA < B

他の Z80 ドキュメントでも同じ問題に遭遇したので、これはタイプミスではないと思います。

借り方とSUB働き方を誤解していますか、それとも何か他のことが起こっていますか? フラグに関しては、2 の補数とSUB等しくない?ADD

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

assembly - short を表す 2 バイトに 1.5 を掛ける

私はいくつかのアセンブリコードを見ていて、次のコードに出くわしました(読みやすくするために変換しました)。レジスタはすべて 8 ビット、ポインタは 16 ビットです。したがって、(q)8 ビットをロードします。

(q+1) = (q+1) = rr(q+1)どこで(q)逆参照さqれ、rr(q)右に回転 (q) = (q) + (q)/2 + bit((q+1), 0)し、どこbit((q+1), 0)で の 0 番目のビットを取得します。(q+1)

上記のコードは、エンディアンに関係なく 16 ビット値を 1.5 で乗算するため、これは私を本当に混乱させました (つまり、q をリトル エンディアンまたはビッグ エンディアンで解釈しても、その値はそれぞれのエンディアンで 1.5 倍されます)。

2 つの 8 ビット値を使用して 16 ビット値を 1.5 で乗算する方法について、私は混乱しています。何が起きてる?具体的には、の0ビット目を足す目的と右(q+1) to (q)回転させる目的は何ですか?(q+1)

アセンブリコードは次のとおりです。

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

assembly - z80 のアセンブリ バブル ソート

大学の課題があります。z80 プロセッサ用のアセンブリでプログラムを作成する必要があります。プログラムは次のことを行う必要があります。

0201H から始まる 20 個の連続したメモリアドレスに 20 個の数値が格納されています。プログラムは、最初に 0200H に格納されている番号をチェックする必要があります。値が 0 の場合、プログラムは数値を昇順で並べ替え、それ以外の場合は降順で並べ替えます。最後に、並べ替えが終了すると、プログラムはこれら 20 個の数値の平均を計算する必要があります。

この質問がサイトのルールに従って形成されていないことはわかっていますが、本当に助けが必要です.

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

sd-card - z80 への SPI ハードウェア インターフェイス

z80 を使用してレトロなコンピューターを作成しようとしていますが、理想的には SD カードから起動できるようにしたいと考えています。私は 100% z80 を使用することに決めており、内部 SPI ハードウェア インターフェイスを備えたマイクロコントローラーを使用したくありません。コンピューターのハードウェアとソフトウェアの両方の側面を理解したいので、購入する前にハードウェア側が完成しているため、arduino とマイクロコントローラーは対象外です。とにかく、私の主な質問は、SPIモードを介してSDカードから読み取るために、シフトレジスタ、いくつかのデコードロジック、およびソフトウェアを組み合わせることは可能でしょうか? 私は何時間もインターネットを検索し、いくつかの記事を読みましたが、チュートリアルが見つからないようです。SPI プロトコルは理解していますが、マイクロコントローラにはすべてのハードウェアが組み込まれている傾向があるため、ハードウェア側に関する情報が不足しています。SDカードのSOMIをシフトレジスタのシリアル入力ピンに接続し、SDカードのSIMOをシフトレジスタのシリアル出力ピンに接続し、いくつかのデータピンをいくつかのフリップフロップに接続してデコードすることを計画しました特定のポートに出力すると、フリップフロップがトグルされます。フリップフロップは、SD カードへのクロックおよびチップ イネーブル ラインとして機能します。また、z80 のピンをシフト レジスタのラッチ ピンに接続し (再びデコード ロジックを介して)、特定のポートに出力するとシフト レジスタのデータがラッチされるようにします。SDカードからデータを正確に読み取れる限り、速度/効率は気にしません。また、SDカードを接続するのと同じクロックにシフトレジスタクロック入力を接続しますか? これを実装する方法についてのアドバイスをいただければ幸いです。