一個前の記事の説明にすらなってない理由で開発滞らせていたわけですが、実はさらに開発が遅くなりそうなことを思いついていたり。
知ってる人は知っているだろうけど、実はth105_aiには初期版から脈々と受け継がれているバグがあって処理の内容に関係なく常に落ちる可能性を秘めていたりする。
その理由が実数→整数の変換処理で、これは緋想天と完全同期をしないためにどうやっても回避できない(と思っている)。
で、今まで起こさない方法がなかったので放置していたわけですが、逆に「例外起きても問題なく進められればいい」という新境地に踏み込んでみたく……
具体的にいうと
1:ai周辺データの退避
2:小数点演算フラグの初期化(不正演算時点で壊れてしまい、以降の処理に影響が出るため)
3:不正な実数のクリア
4:ai周辺データの復帰
こういう処理を例外処理内で行ってしまおうという話。
文として書くとすごく簡単そうだけど、実際にやる場合は全てレジスタ経由で読み書きすることになるのでかなり大変な予定。
幸い、例外処理中のみC言語の構造体としてレジスタにアクセスできるためアセンブラを書く必要はないが、大変なことにはかわりなさそう。
まだ脳内マップなので実現できるかも不明なわけですが、例外を根絶できるかもと考えれば挑戦してみる価値はあるはず。
ほんと、こういうことが出来るからC言語使うのは止められない。
追記:
例外を回避できない理由を書き忘れた。
その壊れたデータを参照した時点で例外するので、IFで検地しようとしてもその時点で例外を吐いてどうしようもありません。
int*キャストからごにょごにょで多少検地できてますが完璧には無理、ということで上の話になったわけです。