ホスト側プログラムをデバッガで追っていくと原因が分かりました。現状のプログラムは行の先頭に大文字の「L」があるとその行がヒューズマップと見做してアドレス、データを切り出していました
ところがWinCUPLが出力するJEDECファイルには「Location None」というコメント行があったためここから無理くり不当なアドレスads、データdat(大きい負数)を取り出しROMライタへのコマンド文字列を生成
sprintf_s((char *)buf,16,"S %lX %X\xd",adr,dat);
したときにFAST_FAIL_INVALID_ARG(CRT関数へのパラメータが有効でない)エラーで例外を発生させたようです。こういう例外に対するハンドラがないのも手抜きですが・・
もともとがかなり手抜きな構文解析だし行ごとの処理(デリミタに改行を使う)というのも本当はよくないですね。だいたいのアセンブラやコンパイラのパーサ処理は改行なんて無視してるんじゃないかと思います。改行は人間が目視したとき見やすいためだけじゃないかと
といっても大きく直すのは大変なのでまたまた手抜き。行の先頭にデリミタの「*」、2文字目に大文字の「L」がある行をヒューズマップとすることにしました。そのため今度はWinCUPLの出力しか受け付けません。
これで改めてCUPLでコーディングです。手始めに8ビットの入力をそのまま出力するロジック
コンパイルは問題なし。生成されたJEDECファイルは「らい太くん」にちゃんと取れこまれました