今日、なにげに、YASATさんの tview.def をポケ3で使ってみました。 バージョンは v0.13 というやつ。 何もカスタマイズしないでそのまま使ってみたのですが、うまく動かない。 縦書き画面が出てくる前の段階でハングしてしまいます。 ^C も [ESC] も、当然 [SPC] も [RET] も効きません。 昔、PC-98 で使った時はそんな事なかったんだけどなぁ。 でも、ざっとコードを追いかけてみましたが、機種依存していそうな部分は ありません。何が悪いんだろう。 ・・・と、しばらく(数分!)放置していたら、縦書き画面が出てきました。 単に動作速度が極端に遅かっただけのようです。 どこが悪いのかと &t を使って追いかけてみたところ、ローカル20番の中の、 内側のループといっていいのかな、ラベル :B に飛んでくるところで著しく 時間を食っていることまでは判明しました。が、その中のどこの部分が悪い のかまでは特定できませんでした。 ここでいくつか質問です。 マクロに詳しい方の目から見て、その部分で極端に時間がかかりそうなルー チンというのは存在しているものでしょうか。 あるいは、ある特定の条件で遅くなる可能性というのはありますでしょうか。 例えば、ポケ3は縦が短いですが、行数が少なければ少ないほど時間がかか るとか、変換前のテキストの横桁数と表示時の縦行数がある特定の関係にな る場合に遅くなる可能性がある、といったことです。または、対象のテキス トがある特定の条件を満たすと遅くなってしまうとか、疑似縦文字との変換 でこの条件が重なるとマズイとか。 もしかしてテキストが長すぎるとマズイかと思い、たった3行、50バイト に満たないようなテキストで試しに実行してみましたが、やっぱりちょっと とてつもなく遅かったです。まさか、テキストが短ければ短いほど遅い、と いうことはないですよね。 う〜ん、何もカスタマイズしていない、というのが問題なのかなぁ。 あ、そうだ、200LX 等の遅めのマシンをお持ちの方がいらっしゃいましたら、 試しに、適当なテキストで走らせてみていただけませんか? もし現実的な時間(数十秒以内)で表示が出てくるようであれば、ポケ3版 特有の事象かもしれません。ポケ3版では特定の関数かコマンドとが異常に 遅い、という事があるかもしれませんので。 なにとぞよろしくお願いします。
> 次のURIからライブラリ版(2003/03/22,no.727)をダウンロードして実行してみてください。
> オアシスポケットで遅い,の原因を調べるには,いくつかの代表的な処理をループさせて計測する方法が考えられますが,それはv1.0を試用してみてからということでいかがでしょう。
> 後ほどじっくりと試してみたいと思います。試してみました。 当初、予測としては、EMSの使用が悪さをしているのではないかと考えて いました。が、結果としてはこれは大ハズレ。EMSの有無は体感にはほと んど現れてきませんでした。 色々と条件を変えてみた結果、ポケ3ではこのマクロはそもそも遅いという ことが判明。それが、さらにとてつもなく遅くなる要因としては、省電力の ための常駐ソフトであるPDCが最大の原因であるとわかりました。 テストに使ったのは、たった3行、57バイトのテキストファイルです。 以下のようなものです。> B:\>WC A> 3 6 57 a>> B:\>ポケ3は、通常モードというか、縦12行モードです。 Vzはポケ3版konnoパッチを使用。 以下、全て条件は同じです。 これで、縦画面描画が終わってマクロが入力待ちになるまでの所要時間は、 おおむね以下のようなものでした。 PDCなしで40秒 PDCを常駐させると、なんと7分10秒 どこが遅いのか、&s をコメントアウトして、画面表示をじっくりと観察して みました。結果、マクロの挙動というか画面表示更新の挙動としては、以下 を繰り返しているような感じでした。 元ファイルを一瞬表示 縦書き画面(.TVW ファイル)に一文字表示 一旦停止 PDCを使うと、全体に動作が遅くなるような感じでしたが、特に一旦停止 の部分で、体感でわかるほど待ち時間が長くなっています。実際にはマクロ が停止しているわけではなく、裏で文字置換などが動いているんでしょうが、 ほんと、もっさりもっさり、という感じでした。 具体的には、ローカル20番の、ラベル :B に戻ってくるループ部分が該当 の個所だと思います。> そういえば、昔、検索文字列の連続取得マクロの遅さに耐えきれず、一部を> マシン語ルーチンにした、というのを思い出してしまいました。これは、GGW でしたね。 ここの過去ログの #228 からのツリーで検討しています。 両方で使われているコマンドまたは関数が主犯格、ということなのかな。> さらに、なんかのゲームマクロもやっぱり異様に遅かったような。> 母艦でもほとんど使わないマクロだという事もあって、ポケ3では遊ぶこと> そのものをあきらめた記憶があります。母艦でも使っていないものなので、どのゲームか判然としませんが、なんと なく、7並べかオセロのマクロのような気がしてきました。
> TVIEW遅いですよ。
> 愚直に編集テキストを切り替えながら一文字ずつ展開してますからね。
> 読むだけだったら別のマシンで桁数行数指定して一気に展開しておいて、目的のマシンに持ってく方法もあります。
その他にもポケ3では著しく遅いマクロを見つけてしまいました。 LXCLND.DEFです。 LXCLND20.LZH 収録の (v1.00) というやつです。日付は 99-12-28。 最初の、カレンダーが表示されるまでがとっても待たされます。 具体的にどの部分が遅いかまでは追いかけていません。 なんか、マシン語とかテーブルとか色々使っているので、見た瞬間にあきら めました。 あと、遅いことのほかに、どうもポケ3ではキーコードが異なっているらし く、カーソル移動関係などがうまく動いてくれません。まぁ、こちらはなん とかできそうですけどね。
本格的に使うつもりはないので、あまり追いかけてはいないのですが。 ただ、起動キーを押してから最初の表示が出るまで、が遅いわけですから、 被疑範囲は結構広いです。なので、追いかけることをあきらめました。 あと、キー操作については、キーコードによらない、というのは思ってもみ ませんでした。今回は特にいじるつもりはありませんが、今後、同じように うまく動かないマクロに出会った場合の対応にとても参考になります。 ありがとうございました。
> LXCLND20.LZH 収録の (v1.00) というやつです。日付は 99-12-28。
> 最初の、カレンダーが表示されるまでがとっても待たされます。
> このマクロの冒頭に、&t を追加して、スペースで追っかけて待たされる> 箇所を特定できないでしょうか。たぶんスペースを押しっぱなしにして> いれば、ふっと動きが止まる部分があるのではないかと思うのですが。この程度であれば、時間はたっぷりかかるかもしれませんが、手間はあまり かからないと思いますので、そのうち実験してみましょう。今週は木曜日か 土曜日頃にまとまった時間が取れると思いますので、その時に試してみます。> これが気になったのは、てっきりEMS関係が遅いのだと思っていたから> なんですが、このマクロは多分使って無いですよね。なので、それ以外の> 特定の関数が遅いようなのがとても気になったもので。その他のマクロの場合ですが、このツリーで検討しているTVIEWの遅い部分は ほぼ絞りこめています。あと、#228 からのツリーでも遅いルーチンを提示し ていますので、ざっと見ていただけるとありがたいです。
> その他のマクロの場合ですが、このツリーで検討しているTVIEWの遅い部分は
> ほぼ絞りこめています。あと、#228 からのツリーでも遅いルーチンを提示し
> ていますので、ざっと見ていただけるとありがたいです。
> ポケ3はメモリアクセスが遅いのかなという印象ですが、今回のは節電機能が> 働いていたのではないかという気がしました。そうですね。それに間違いないでしょう。 節電機能を使うことによって遅くなるのは今までも色々なソフトで経験して いましたが、まさかVzでこれほど差が出るとは思っていなかったので、ち ょっとびっくりしています。> 一度SRAMカードのベンチマークとかしてみてはどうでしょうか。そのうちに試してみましょう。 カードは何枚も持っていますから、それぞれの速度を計って、製造メーカー や容量毎の傾向が見えてくれば面白いかもしれません。 ただ、内蔵RAMの速度の測定にあたってはちょっと問題があって。 覚えている範囲では、私の手持ちのディスクベンチマークソフトはいずれも 500KB 程度のデータを読み書きして測定するものばかりなんです。ところが、 本体内蔵RAMは総容量がわずか 150KB 程度しかないので、それらのソフト は使えません。なので、ベンチマークソフトを探すところから始めなくては。 あとは、確か EMSUTY にEMS の速度を測定するオプションがついていたよう な気がします。これを使って、内蔵RAMに設定した EMS の速度を測定する ことは可能かもしれませんが、たかだか8ページしか EMS を確保できないの ですから、常用するのは難しいです。
> LXCLND.DEFです。> LXCLND20.LZH 収録の (v1.00) というやつです。日付は 99-12-28。今日、再度実行してみたのですが、全然遅くありません。 何回試しても、素早く、パっとカレンダーが表示されます。 前回は、色々なマクロを試している時だったので、メモリのどこかにゴミが たまっていたとか、バッファのどこかが破壊されていたという事があったの かもしれません。 前回、試したときも気が付いていたのですが、このマクロ、ポケ3では色の 指定があまり芳しくありません。エスケープシーケンスの実装状況が不十分 だからでしょう。どうなるかというと、標準のモノクロモードの指定の場合、 休日のところで色が反転するといった感じで、デフォルトの3ヶ月表示では 左の月と右の月はほとんどの日が反転表示で、真ん中の月はほとんどの日が 非反転表示、といった感じ。試行錯誤して、aa="$$!",bb="$$8",cc="$$!", という設定が一番良さそうだというところまで追い込みましたが、それでも 完璧とは言えません。 ポケ3の場合、色指定にかかわるエスケープシーケンスは、反転色指定と、 色指定解除の2種類しかありません。多分、これではどうしようもないので しょう。色指定なしにすればそこそこ実用的に使えるような気はします。 今日は、この色指定の部分をいろいろといじっていました。 逆に、その部分しか触っていないのは保証します。 そんな中で、妙な状況が発生しました。 マクロが途中で停まってしまったのです。 停まってしまったときは、何かエラーが発生したのでしょう、左下にマクロ コードが表示されて止まりました。ポケ3版は高橋版以前と同じで、エラー 停止の場合、左下のファンクションキーまでのほんの数文字しかマクロコー ドが表示されないのですが、この時は、「!01」と表示されていました。この コードはマクロ内に1ヵ所しか含まれていないので、場所はすぐに特定でき ます。ただ、なぜそんなところで停まったかがわからない。 この、停まった時のマクロファイルを保存しておけばよかったのですけど、 消してしまったのが残念です。ただ、その同一のファイルで、複数回、^K^で 読み込みなおしても同じ状況だった、というのは手がかりになるかもしれま せん。誤って、色指定の部分の二重引用符かカンマを消してしまったのかと、 あとから再現実験を行ったのですが一向に再現しません。もしかしてこれも、 いろいろといじっている間にどこかのメモリ領域が壊れたことにより発症し たのかな、なんて妄想しています。