0

Motorola 68000 のバイナリ オペコードをフォーマットしようとしてきましたが、宛先メモリ アドレス、命令指定とアドレッシング モード/サイズ、およびメモリ マップされたアドレス バスにコピーされるデータ値の両方をエンコードすることは不可能であることがわかりました。入出力。

Sega Genesis のビデオ ディスプレイ プロセッサについて、Genesis のメモリ マップの C00004 にメモリ マップされている制御ポートに書き込もうとしています。

C0004 は、2 進数で 1100 0000 0000 0000 0000 0100、つまり 3 バイトです。書き込んでいる値は 87 で、VDP はこれを VDP レジスタ #7 で 8787 として認識します。私が抱えている問題は、32 ビット相当のデータをエンコードする方法を理解することです。たとえば、命令プレフィックス指定move.b、値 87、#$87および MMIO の宛先メモリ アドレスC00004は、途中で正しい VDP ポートに再ルーティングされます。 VDP。

全体として、次のようになります。

move.b  #$87, $00C00004,

これは大まかにfourではなく、4 バイトとニブル(正確には 36 ビット!)に変換されます。

0001 1000 0111 1100 0000 0000 0000 0000 0100

Motorola 68000 はmicrocodeを処理するときに 32 ビットのみを解析するため、十分なスペースがない場合 (および同じ命令内) に必要な情報をエンコードするにはどうすればよいでしょうか?

おそらく私はこれを間違って理解していますか?

これがほとんどのプログラマーが予想するレベルを超えていることはわかっていますが、誰かがこれを分解して、このエンコード方式がどのように機能するかを説明してくれることを願っています.

4

1 に答える 1