0

私は MOS 6502 用のエミュレーターに取り組んでおり、この時点でほぼ完全に完成しています。ただし、小さな問題が 1 つあります。私が行ったすべてのテストに合格したように見えますが、何らかの理由で Enhanced Basic が文字を含むすべてを指数表記で出力してしまいます。

Enhanced Basic は、数値が 999999.4375 を超える場合にのみ、数値を指数表記に入れることになっています。

どこから見始めるべきですか?EhBasic からこのような応答を引き起こす可能性のあるエミュレーションの問題は何ですか? このような大規模なプログラムをどこから始めればよいかさえわかりません。また、エミュレーターが供給したすべてのテストに合格したことを考えると、テストの問題を正確に見つけることができません。

拡張基本からの出力例を次に示します。

6502 EhBASIC [C]old/[W]arm ?



Memory size ? $C000



4.8383E+04 Bytes free


Enhanced BASIC 2.22


Ready

4.8383 は、実際には 48383 のはずです。

私は自由にコードを書き直し、この問題を確認するために必要のないものはすべてコメントアウトしました。今では誰にとってもはるかに読みやすいはずです。

これを再現するには、C キーを押して EhBASIC Cold を実行し、メモリ サイズとして $C000 を入力します。

編集:明確にする

アキュムレータはメモリ[memory_size]です

一部の変数の後に [0] が付いているのは、javaScript Uint8 配列を利用して符号なし 8 ビット整数と符号なし 16 ビット整数を使用したためです。

4

1 に答える 1

3

これは実際、すべてのエミュレーター開発者にとって悩みの種です。エラーの特定に役立つテストはすべてパスしますが、大規模なプログラムは失敗します。

Basic のソース コードは入手できないと想定していますが、それ以外の場合は、値のチェックを実行するコードを少なくとも見つけることができます。

命令実行トレースを取得すると役立つことがわかりました。値を表示するために使用されるメモリの領域を分離できる場合は、トレースをメモリのその部分だけに制限できます。

トレースは、PC を出力し、実行する命令を逆アセンブルし、すべてのレジスタの内容を表示する必要があります。また、出力が発生したときにトレースで示す必要があります。これは、コードのさまざまなブロックが何を行うかを識別するのに役立ちます。

トレースは非常に大きくなる可能性があり、生成に時間がかかり、さらに分析に時間がかかります。問題を切り分ける 1 つの方法は、トレースを使用してエミュレータを実行し、同じトレースを出力する既知の正常なエミュレータを実行することです。トレースが異なっていれば、問題の原因を突き止めることができます。

于 2015-03-30T09:49:35.413 に答える