同じ文字が256個続くのは16bitカウンタの値を外部8ビットバスへ出力するとき上位8ビット側を出力している、ということです。
ほんと混乱します
(1)アドレスバス、データバスのビット命名A0・・A15、D0・・D7の重みが逆
(2)メモリ上の配置はビッグエンディアン:偶数番地に上位8ビットが配される
(3)内部16bitを外部バス8ビットにサイジングするとき、上位8ビットが出力される
ここら辺はI/O制御の時注意がいります
ところで今までテストプログラムはアセンブラが出力したリスティングファイルのダンプをバイナリエディタで手打ちしてROMライタに転送していましたがプログラムがだんだん大きくなるとそうはしていられないのでアセンブラの出力ファイルをそのまま転送できるようにしてみます。
アセンブラAsm994aが出力するヘキサファイルはこんな内容になっています。
よくみてみると実コードは紛れているようで、スペース、改行を無視して5文字づつ区切っていくと・・・
なんか見えてきました。
:
:
B 8319
B 000D
B 000D
7 F830
F 0003
6 0080
B 000D
B 000D
7 F830
F 0003
6 0080
先頭の1文字がレコードタイプを示していて続く4文字がワードデータとなるようです
・レコードタイプ「B」は実際メモリコアに書かれるコード。
・レコードタイプ「9」はロケーションカウンタ
・レコードタイプ「6」は最後にあるのでおそらく終了コード
はすぐわかりますが「0」「7」「F」はなんだかわかりません。コードには影響ないので読み捨てることとして(コードが巨大化してきたらなんかあるかもしれない)
ひとまずは以下のようなプログラムを書いて変換するようにしてみます。
ファイルストリームfiから1文字づつ読み取りレコードタイプによってバイナリに変換してファイルストリームfoへ出力します