ページ 1 / 1
高速化
Posted: 2005年9月15日(木) 02:21
by shoji
はじめましてお願いします
プログラムがお粗末なのは重々承知ですが
機械語レベルでデータの読み書きをしたいです!!
AB4での方法を教えてください。
#N88BASIC
Dim A As long,B As long ,C As long,D As long
OPEN "C:\takarakuji.txt" FOR OUTPUT AS #1
FOR A=1 TO 30
FOR B=A+1 TO 30
FOR C=B+1 TO 30
FOR D=C+1 TO 30
PRINT #1,A,B,C,D
print A,B,C,D
NEXT D
NEXT C
NEXT B
NEXT A
CLOSE #1
Posted: 2005年9月15日(木) 03:21
by マティ
インラインアセンブラの無いABで、どのように処理を行うのでようか?
私も興味があります。
まあ、COMを利用して外部実装しなさいが正解でしょう!!
あと、 実践コードモジュールにマシン語を走らせる項目がありましたが・・・貴方のマシン語レベルは、ものすごいレベルなのでしょうか?
マシン語を使う前にアルゴリズムを変更する事をお勧めします。
PS.
私も大昔?にN88互換のBasicFirst?で2次元配列の順番がバージョンアップによって変更になり、痛い目にあった経験があります・・・
マシン語って大変ですよ!
やりたい事をきちんと説明してから、実行した方が幸せになれると思います。
Posted: 2005年9月16日(金) 23:36
by マティ
自分もAB4から始めたので、ABに関しては初心者です!
ABをコンパイルしても性能がインタープリタ系のBASICより遅い場合があるのは、文字列処理(String型)系とIfで条件式が複雑な場合だと認識しています。
インタープリタ系の言語は、文字列等のチューニングが行われていますが、
ABは返却用の文字列領域を必ず作成するので、オーバーヘッドがもの凄く大きいです。
それ以上に気になる事があります。
画面に表示する速度が遅いのが問題なのでしょうか?
何が問題かを教えて下さい。
Posted: 2005年9月17日(土) 12:20
by NoWest
マティ さんが書きました:> 自分もAB4から始めたので、ABに関しては初心者です!
>
> ABをコンパイルしても性能がインタープリタ系のBASICより遅い場合があるのは、文字列処理(String型)系とIfで条件式が複雑な場合だと認識しています。
>
> インタープリタ系の言語は、文字列等のチューニングが行われていますが、
> ABは返却用の文字列領域を必ず作成するので、オーバーヘッドがもの凄く大きいです。
>
> それ以上に気になる事があります。
> 画面に表示する速度が遅いのが問題なのでしょうか?
>
> 何が問題かを教えて下さい。
画面への表示速度が遅いというのは事実です。
というのもActiveBasicが描画用に使っているビットマップに
デバイス依存型ビットマップを使っているからです。
この辺りを改良すればN88BASIC互換モードの描画速度はかなり改善する筈です。
DIBでビットデータを参照できるようにすれば
PeekとPokeでビットマップを描くことができるようなったりとか妄想してます。(笑
Re: 高速化
Posted: 2005年9月17日(土) 13:57
by マティ
画面描画に関するエミュレーション方法がグラフィックをサポートする#N88BASICと、テキストのみ?の#consoleで大分異なっているようですね!
ディスプレイドライバーを256色固定で使用できるなら、パレットを使って高速にエミュレーションできますが・・・
多色対応になると、グラフィックとをテキストのビットマップを合成する処理に時間がかかってしまいます。
#N88BASICの高速化提案ですが、自分はDirectXに詳しくないので・・・
DirectVideoを利用して、表画面にテキスト、裏画面にグラフィックを描画してオーバーレイを行えばエミュレーションが#console並に高速になると思われます。
早い話が、文字の背景色に使用する色をオーバーレイ対象色にしてしまうって事です
また、複数の解像度のグラフィックや2画面サポートも出来たりして・・・
Posted: 2005年9月19日(月) 23:29
by norige
マティさん、NoWestさん
ありがとうございました!!
とにかく勉強になりました!!
僕なりに思うのは、簡単な計算だけだったら
いちいちディスク保存するのではなく、メモリ内で
処理しようと思います。
これからの身ですがまたお願いします。