CPU実験室

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

ホストプログラム修正

ホスト側プログラムをデバッガで追っていくと原因が分かりました。現状のプログラムは行の先頭に大文字の「L」があるとその行がヒューズマップと見做してアドレス、データを切り出していました

ところがWinCUPLが出力するJEDECファイルには「Location   None」というコメント行があったためここから無理くり不当なアドレスads、データdat(大きい負数)を取り出しROMライタへのコマンド文字列を生成

    sprintf_s((char *)buf,16,"S %lX %X\xd",adr,dat);

したときにFAST_FAIL_INVALID_ARG(CRT関数へのパラメータが有効でない)エラーで例外を発生させたようです。こういう例外に対するハンドラがないのも手抜きですが・・

f:id:O3I:20200726103120j:plain

もともとがかなり手抜きな構文解析だし行ごとの処理(デリミタに改行を使う)というのも本当はよくないですね。だいたいのアセンブラコンパイラのパーサ処理は改行なんて無視してるんじゃないかと思います。改行は人間が目視したとき見やすいためだけじゃないかと

といっても大きく直すのは大変なのでまたまた手抜き。行の先頭にデリミタの「*」、2文字目に大文字の「L」がある行をヒューズマップとすることにしました。そのため今度はWinCUPLの出力しか受け付けません。

 

これで改めてCUPLでコーディングです。手始めに8ビットの入力をそのまま出力するロジック

f:id:O3I:20200726103150j:plain

 

コンパイルは問題なし。生成されたJEDECファイルは「らい太くん」にちゃんと取れこまれました

f:id:O3I:20200726103211j:plain