趣味工房 HIRO-G
< トラ技基本モニタ(+4K BASIC)不具合解消 その1 >
思い返しますと、昨年10月12日に記載しましたBASIC No12で記載していますように、どうしてもBASICのINPUT命令を受け付けない状態からツマヅキが始まっていました。 この課題に関しては、実に1年弱に渡りモガイテいたことになります。 その間CP/M試作1号機は完成しましたが、 本件に関しては、思い込みもあり、いろいろ試みましたが、解消には長い道のりとなりました。 しかしながらこの不具合のお蔭様で、BASICに関しましては、いろいろ学ぶことができましたので、今となりましては、何とありがたい不具合であったかと思います。 まあ、この不具合が無ければ、東大版TinyBASICの移植やBASICの構造まで調べようという気には、なれなかったと思いますので。
結論から言いますと、不具合の原因は、当方の機械語の入力ミスであったとの、あっけないものでした。 それなら簡単に発見できるはずでは、と不思議に思われるのが普通ですが、自作のトラ技ボードが当初不安定なところもあり、また、幾度となくダンプリストや逆アセンブル、リストを確認しながら作業を進めており、下記の理由で特にソフト上のミスを発見でず、不具合の原因が、ハードにあるのかソフトにあるのかの切り分けができずに今に至ったと言えます。 言い訳じみているようですが、。 まあ、当方の思い込みもありますが、しかしながら、ここまで難儀な状態となった原因は、今まで経験(それほど長い経験はありませんが)したことがなく、恐らく、今後も、このようなケースにお目にかかることは、まず無いと思います。 まあ、それ程、極めて稀な入力ミスが起こったと言えますので、ちょっと、詳細を次に記載します。
ここ1週間は、今まで、幾度も確認した写真1のフローチャート(全部は完成してません。)、写真2、写真3の逆アセンブル・リストを中心に、このINPUT命令が受け付けられない不具合の解消に掛かりっきりとなりました。
以前から、薄々にINPUT命令問題の他に、ダイレクトでは問題がない計算が、プログラムでは実行できない場合があることやことや、ハングアップすることがあるなどの不具合があることが分かっていましたが、東大版のTinyBASICが正常に移植できたことにより、トラ技ボードに少々不安定な部分は残ってはいるものの、ハードの問題ではなく、プログラムの改造のミスか入力ミスであることを確信し、特に、今までの経緯から改造した部分に不具合があるのでは、との思いが強くありました。
ということで、一昨日(5日)に、まあ念のためこれも何度も確認した、変更した部分の確認と、未変更部分のダンプリストをトラ技の原文と照らし合わせながら、いつもどおりに、チェックサムをゆっくり確認しました。 8KBともなりますと、チェックサムの比較確認作業だけでも結構な手間になります。 まあ、いつもどおり間違いはありませんでした。 念のため、機械語のデータも比較確認してみようと思い、やってみましたが特に問題は発見できませんでした。 で、いつものように、改造部分の検証をしましたが、8KBもあるプログラム全体を理解できている訳ではありませんので、いろいろ確認作業を実施しましたが、発見できず、途方に暮れながら、疲れましたので当日の作業は終了。
昨日(6日)、気を取り直し、間違いはないものの、もう一度、徹底的に改造したダンプ・リストと原文を比較してやろうと思い、一字一字丁寧に照合しました。 結果、思いもよらぬミスを発見しました。
写真4が機械語の入力ミスを発見した位置のイメージで、写真5がそのアップ写真です。 まあ、当方の年齢になりますと、原文は相当見難いのは確かです。 入力ミスがあったのは、「D410H番地〜D41FH番地」で、BASICのプログラム領域です。
原文のデータを良く確認しますと、
D410: 03 C3 C0 D3 C3 47 D0 1A
FE 0D CA 28 D4 CD B0 D5 :70
となっています。 最後の「70」はチェックサムです。
で、入力ミスのあった基本モニタROMのダンプ・リストは写真6の通りです。
D410: D3 C3 C0 D3 C3 47 D0 1A
FE 0D CA 28 D4 CD B0 05 :70
両方を見比べても、チェックサム「70」は同じです。 どこが違うのか、一見して分かり難いと思いますが、「D410番地」の「03」と「D3」に違いがあります。 これだけですと、当然チェックサム「70」が違ってきますので直ぐに分かります。 が、何と!!、「D41F番地」の「D5」と「05」にも違いがありました。 いずれも上位4ビットの「D」と「0」の違いで、しかもテレコで間違っていました。 いやいや偶然とは恐ろしいものです。 二重のミスでチェックサムは全く同じとなってしまいました。 いや全く気がつきませんでした。
潜在的に、普通はチェックサムが合っておれば、いちいち詳細を確認しませんし、チェックするにしても、それほど慎重に確認はしません。 しかも原文は小さい文字で、鮮明ではないので、何度か確認はしていたのですが、まあ、思い込みで確認していたこともあり、「D」と「0」の違いは、完璧に見抜けませんでした。 デス。
で、早々に修正し、基本モニタ(BASIC)を確認しましたところ、あれほど手こずっていた事がウソのように見事に、何の問題もなく機能しました。
何のこっちゃと思いながらも、やれやれ、菱田さんではありませんが、金麦で、お疲れさん。
写真1 フローチャートの検討例
< 今後の予定 >
@トラ技基本モニタ(+4K BASIC)の不具合解消 その1: 完了
Aトラ技基本モニタ(+4K BASIC)の不具合解消その2: 整理中
B トラ技基本モニタ&BASICの構造調査: 調査中
C TK80BS 機械語インベーダーゲームの移植:
D TK80BS BASICの移植?:
E FDDの製作?:
F グラフィック・ボードの製作?:
BASICマシン復元進捗 ・トラ技基本モニタ(+4K BASIC)不具合解消 その1 |
2014年8月7日 |
写真2 逆アセンブル・リスト(0000H〜)の例
写真3 逆アセンブル・リスト(D000H〜)の例
写真4 トラ技基本モニタ(BASIC)全ダンプ・リスト原文
写真5 D410H番地付近の原文の拡大
写真6 入力ミスのある基本モニタROMのD410H番地付近のダンプ・リスト
|