« N88-DISK BASIC の中間コードファイルをアスキーファイルに変換するのは、一応できた | トップページ | 「THE POST」 »

0x3A の罠は、まだ続く

つづき。

実数の有効桁関連の修正をして N88 DISK BASIC と同じ結果になるようにしたのは、思ったよりは難しくなかった。

というのも、はじめ難儀していた丸め処理に関して 3.x 系の今となっては小数点以下についても Float#round が使えるとわかったので。

はじめはレシピブックを見て桁数指定で処理するメソッドを別に用意したのだけれど、どうもこれの動きがおかしなことになり、いろいろ調べているうちにいつからかはわからないけれど、現状では小数点以下、以上の任意の桁を指定して round 処理ができるらしい。

結果、プログラムも楽になったし、きちんと動作するようにもできた。

この過程で、できればファイル比較ができたらよいなと VS Code の拡張機能を探した。それらしいものを見つけたので試すと十分機能する感じ。

はじめに 88 側でアスキーセーブもしておいて、それと生成したものとを比較してみる。当初多く見つかったのが実数の桁数と丸め処理関連。ここが完了して残っていたのが条件分岐の ELSE の前についた : 。

アスキーセーブしたものにはついておらず、バイナリセーブされたものをみると ELSE を示す 16 進数の前に 3A つまり : がはいっている。どうやらこのまま実行しても問題はないようで動作はしていたけれど、やはり面白くないので対応することに。

おそらくは先の REM 文同様で明確に区別するための方式なのだろうと思うのだけれど、詳細は確かめようもない。

修正してもなかなかうまくいかず不思議に思っていたが、時間をあけてよくよく見れば、コードを挿入すべき場所が間違っているのだった。そこをきちんと対処したら意外とあっさりとしたコードでとりあえず動作するようにはなった。

ただ、ほかのバイナリファイルを試すとエラーになったりするので、まだ未知のなにかがあるのかもしれない。問題ないファイルもある。気長に順次対応ということで。

最悪、アスキーセーブしなおすという方法は残されているので。(というか、比較のためにも一度すべてやっておくべきか)

#タイトルを少し修正(20220607)

|

« N88-DISK BASIC の中間コードファイルをアスキーファイルに変換するのは、一応できた | トップページ | 「THE POST」 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« N88-DISK BASIC の中間コードファイルをアスキーファイルに変換するのは、一応できた | トップページ | 「THE POST」 »