そうだ、「tank-defender(I/O ’81/08:TANK-DEFENDER)」やりてー とか思いたち 掲載されてるI/Oは持ってる、MZ-700も有る。FORMも持ってる。 過去に一度 打ち込んだんだが、その時のデータはMZ-1500を 知人に譲るときに一緒に付けたカセットに入っていて手元にはない。 ダンプリストから打ち込むしかない、だが今更 老体に鞭打ってMZ-700のキーボードで ポチポチ打ち込んでなどいられない。 前に打ち込んだときは、MZ-80KE2のキーボードで10インチのモニタの前で 眠い目擦りながらの打ち込みだった。若かったからやれたが今となっては無理筋だ。 そこで21世紀の未来技術(笑)を使おうじゃないか まず、FORMの逆アセンブル解析データは以前作ったものが有るので これを、chatGPTさんにみせて、runtimeとcompilerとエディタ類に分けてもらい。 欲しいのは、runtimeとcompiler部分 これを、gcc用に書き換えともらう。 当初はruntimeまでC言語に書き換えようとしてたが、 runtimeは z80のアセンブラソースとしてインクルードすることにした。 コンパイラ内部で z80のニーモニックを扱う部位を極力マクロにパラメータ渡す形にして runtime部の修正で他機種への移植が可能なように心がけたつもり。 ※MZTファイルヘッダの組み込み部とか有るから 移植が簡単とは言い辛い。 とはいえ、アセンブラのソースの形で出してくれるので中で何をやってるかの 参考にはなるとは思う。残念ながら オリジナルのFORMでコンパイルしたものより オブジェクトサイズが大きくなる。これは オリジナルがループ処理部で ステップ数のマイナス値への対応などを一切考慮してないのを、 開始値、終値、ステップ値 それぞれの 大小関係をその都度監視するようにしたのが 大きく影響してる。 詳しくはruntimea.asmの「end_do」マクロを参照して欲しい。 気に食わないようなら、この部分をオリジナルのランタイムと同じ動作になるように 削ればオブジェクトサイズの削減くらいにはなるかも知れない。 ただ、オリジナルと同じようにし続ければ、”オリジナルで十分では?”って話になるので 私からはやるつもりはない。 今回のクロスコンパイラに...
以前話したgcc6809のビルドに潜んでるバグについてのchatGPTとの 会話ログがダウンロードできたのでそこから該当部分を抜粋して上げる。 まず、会話の概要は SBC6809用の一文字出力関数を作って、「hell world」させるだけのものを作ろうとしたのだが まともに動かない、ステップトレースして putch関数を呼び出すだけ呼び出して、戻って来ることなく PCが際限なくカウントされ続け、想定外の位置でフォールトする。 で、調べて判ったのが関数の始点(prolog)はあるが、終点(epilog)が出てない。 その事について、該当ビルドフォルダの精査などについて相談した chatGPTとの会話が以下になる。 -------------------------------------------------------------- # 今回の症状をコードと対応させると `_putch` では、 ```asm pshs u leas -1,s leau ,s ``` が出ているので、 ```c emit_prologue_insns() ``` は動いています。 一方、 ```asm leas 1,s puls u,pc ``` が全く出ていないので、 ```c emit_epilogue_insns() ``` が動いていない可能性が高いです。 **これはかなり強い状況証拠です。** 次に `TARGET_EXPAND_EPILOGUE` 周辺の grep 結果を見れば、どこが抜けているかを具体的に特定できます。 特にこの結果をください。 ```bash grep -R -n -A8 -B8 \ -E 'TARGET_EXPAND_PROLOGUE|TARGET_EXPAND_EPILOGUE|TARGET_ASM_FUNCTION_PROLOGUE|TARGET_ASM_FUNCTION_EPILOGUE' \ gcc/config/m6809 ``` ここで**プロローグを呼ぶフックはあるのに、エピローグのフックだけ未登録**なら、今回の症状を直接説明できます。 user $ grep -n -E 'emit_prologue_insns|emit_epilogue_insns|prologue_epilogue_requi...