CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

データアライメント

あとはROMに書き込まれたデータがおかしいとしか考えられないわけで
ロジアナでリセット解除直後の最初にフェッチされるコードをデータバスから取り込んでみました
 
その結果がこれ。
 
イメージ 2
一見良さそうですが「EB/FE」って上位下位逆!?  これでは動かないわけです
 
もともとROMライタのバッファにはコードが以下のように展開されています
 
 
イメージ 1
 
 
 
ROM上の0x1FFF0(システムのロケーション上は0xFFFF0)にJMP$の「EB/FE」のコードがありますが
 オペコード「EB」が偶数番地すなわち16ビットの下位8ビット
 オペランド「FE」が奇数番地すなわち16ビットの上位8ビット
にアライメントされなければなりません
 
バッファからはvoid*ポインタをunsigned shortでキャストしていっぺんに16ビット数値dataを引き、これを2個の8ビットポートを介してROMのデータバスに接続されます。
ポートとバッファ間は以下のように相互変換していて、本来は正しく上位下位がセットされるはずなのですが・・・・・
 
どこで逆転しちゃったんでしょうか
 
 
イメージ 3