Z8000セグメントモード対応(その2)
前回枠組みができたので実際に変更していきます。
直接アドレスやJR
, CALR
などの相対アドレスはアセンブラが良きに計らってくれるので書き直す必要はありません。
問題はレジスタ間接(インデックスなども含む)です。これは単純に書き換えられない上に、アドレスレジスタが隣り合う2つのレジスタをペアにする関係でレジスタの割り当てを大きく変更する必要がありました。幸いレジスタ数に余裕があったためレジスタ番号の書き換え程度で済んでいますが、不足する場合はメモリに退避するなど変更規模が大きくなってしまいます。
今回は大きく3つのパターンで対応しました。
単純に32ビットレジスタへ置き換え
レジスタ間接のまま32ビット化するのが一番手っ取り早いのですが、レジスタをペアで使用するので多用するとレジスタが足りなくなる恐れがあります。
これはどこを指すかわからない場合に使用しました。具体的にはSTROUT
ルーチンへの引数と各コマンドでの対象メモリへのアクセスです。