CPU実験室

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

ファイル変換

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

イメージ 2