[HOME]  [リストへもどる]
一括表示

  VTDOSとLHA - としき 10/03/03-23:21 No.5067
  ┣ Re: VTDOSとLHA - 文太 10/03/05-00:38 No.5070
  ┣ Re: VTDOSとLHA - konno 10/03/05-01:10 No.5072
  ┗ Re: VTDOSとLHA - としき 10/03/05-23:00 No.5074
   ┗ Re^2: VTDOSとLHA - 10# 10/03/05-23:37 No.5075
    ┗ Re^3: VTDOSとLHA - としき 10/03/05-23:51 No.5076
     ┣ Re^4: VTDOSとLHA - としき 10/03/07-11:28 No.5094
     ┗ Re^4: VTDOSとLHA - としき 10/03/22-15:40 No.5113
      ┗ Re^5: VTDOSとLHA - 10# 10/03/28-01:22 No.5121
       ┗ Re^6: VTDOSとLHA - としき 10/03/28-09:38 No.5122

(5067) 5067VTDOSとLHA  投稿者:としき   2010/03/03(水) 23:21
参照先:http://www.hinocatv.ne.jp/~toshiki/
   コメント数 3

今年の1月ごろ、VTDOSでLHAを使うと具合が悪いという話がありました。
その後、対処されたようで、問題があるという話は聞かなくなりました。
ところが、うちのほうでは、再現性の高い不具合があることに気がつきました。

OS: XP(x86)
shell: DOS6/Vのcommand.com 1993/12/06 6:20 58886 bytes
VTDOS: 1.22
LHA: 2.67

こんなバージョンのLHAを使っているのが悪いのかもしれませんが。
ファイルの圧縮時では、今のところ問題は発覚していません。
気がついていないだけかもしれませんが。
ファイルの展開時に問題が出ています。
圧縮前(展開後)のファイルサイズが約64KBより小さいサイズのものは問題なく
解凍できるのですが、それより大きなサイズだと、LHAがCRCエラーを検出します。
解凍だけではなく、「lha t」でテストを行ってもエラーを検出する状況です。
65536bytesをわずかに超過したファイルの場合、同じファイルでも、lh6で圧縮し
たものは解凍可能なのに、lh5やlh1で圧縮すると解凍不可、という状況も発生し
ています。
この状況は、Vzを全く使用していなくても発生します。
また、VTDOSではなくコマンドプロンプトで行えば、同一のファイルを展開または
テストしても、エラーを検出しません。

ということで、皆さんに協力のお願い。
LHA 2.13とか2.55をお持ちでしたら、それらのバージョンで私のところと似たよ
うな状況が再現するか試験していただけないでしょうか。もちろん、2.67をお持
ちの方による再現試験も歓迎です。

なにとぞよろしくお願いいたします。
      - No.5067 -    このTreeへ           [リストへもどる] soft

(5067) 5070Re: VTDOSとLHA  投稿者:文太   2010/03/05(金) 00:38
    5067 番 としき さんへのコメント

>lha
LHA version 2.55b

>dir test.* |to
2010/03/05  00:35            12,796 TEST.LZH
2010/03/05  00:34            72,506 TEST.TXT

 上記の環境で、test.lzhをVTDOSで解凍しようとすると固まります。

      - No.5070 -    このTreeへ    コメント元:5067 へ [リストへもどる] pre

(5067) 5072Re: VTDOSとLHA  投稿者:konno   2010/03/05(金) 01:10
    5067 番 としき さんへのコメント

> その後、対処されたようで、問題があるという話は聞かなくなりました。

実は問題は残っていたんですが、CRCエラーなので、VTDOSの問題とは気が付いていなかったのでした。

> 圧縮前(展開後)のファイルサイズが約64KBより小さいサイズのものは問題なく
> 解凍できるのですが、それより大きなサイズだと、LHAがCRCエラーを検出します。

おお、そういうことだったのですか。実はVTDOS.EXEの解凍がCRCエラーで失敗するのは
LHAのバージョンか何かが違うのかと思っていたのでした。
うちはLHA2.55bですね。

      - No.5072 -    このTreeへ    コメント元:5067 へ [リストへもどる] soft

(5067) 5074Re: VTDOSとLHA  投稿者:としき   2010/03/05(金) 23:00
参照先:http://www.hinocatv.ne.jp/~toshiki/
    5067 番 としき さんへのコメント    コメント数 1

ふぅむ、ちょっと古いバージョンでも同様事象は発生するようですね。
実家に行けば、LHAではなくLHarcの1.13があるはずなので、そちらでどうなるか
実験してみましょう。

これもやっぱり、メモリ獲得の関係なのかなぁ。
LHAでは、確かスライド辞書法を使っているはずだから、展開時に辞書がいっぱい
になったら追加のメモリを獲得するようになっている、とか。最新版のソースが
ないから本当のところはわかりませんが。
ベクターでは2.11のソースが公開されているけど、これにはint21h ah=48hは複数
あるけど、ah=4ahは自己解凍書庫でしか使っていないみたい。
      - No.5074 -    このTreeへ    コメント元:5067 へ [リストへもどる] soft

(5067) 5075Re^2: VTDOSとLHA  投稿者:10#   2010/03/05(金) 23:37
参照先:http://vtdos.web.fc2.com
    5074 番 としき さんへのコメント    コメント数 1

僕の環境でも現象確認できました。
2.11で発生するかはまだ未確認ですよね?
ソースがあるのはかなりありがたい。
      - No.5075 -    このTreeへ    コメント元:5074 へ [リストへもどる] soft

(5067) 5076Re^3: VTDOSとLHA  投稿者:としき   2010/03/05(金) 23:51
参照先:http://www.hinocatv.ne.jp/~toshiki/
    5075 番 10# さんへのコメント    コメント数 2

> 2.11で発生するかはまだ未確認ですよね?

2.11は、実行ファイルが入手できないのですよ。
実家に行けば、1.13(これはLHarc)と2.13のバイナリがあります。
1.13はベクターでソースも公開されているので、これで症状が再現すれば原因の
追求は容易かもしれません。土曜の夜に、実家に戻ってテストしてみます。

> ソースがあるのはかなりありがたい。

2.67の逆汗を取ってみましたが、int21h ah=4ahは1ヶ所しかありませんでした。
2.11のソースと同様と仮定すると、これは自己解凍ファイルに付加される部分の
はずなので、今回の問題である通常の解凍またはテスト時には使用されない部分
のはずです。
      - No.5076 -    このTreeへ    コメント元:5075 へ [リストへもどる] soft

(5067) 5094Re^4: VTDOSとLHA  投稿者:としき   2010/03/07(日) 11:28
参照先:http://www.hinocatv.ne.jp/~toshiki/
    5076 番 としき さんへのコメント

> 実家に行けば、1.13(これはLHarc)と2.13のバイナリがあります。
> 1.13はベクターでソースも公開されているので、これで症状が再現すれば原因の
> 追求は容易かもしれません。土曜の夜に、実家に戻ってテストしてみます。

いずれのバージョンでも、症状は発生しませんでした。
念のため、2.13で圧縮したものを2.67で解凍するということも行ってみましたが、
こちらでは症状が発生しました。
ということで、2.13から2.55の間で変化した部分が原因でしょう。
これはもうソースもないし、バイナリをトレースするしかないかと。
      - No.5094 -    このTreeへ    コメント元:5076 へ [リストへもどる] soft

(5067) 5113Re^4: VTDOSとLHA  投稿者:としき   2010/03/22(月) 15:40
参照先:http://www.hinocatv.ne.jp/~toshiki/
    5076 番 としき さんへのコメント    コメント数 1

今までいろいろとからかってきましたが、でもわかったことは、私の手には余る
ということだけ。ということで、手を引くに当たって、ここまでのまとめを。

まず、前提が正しくない可能性が高いのですが。
MCBが壊れるというところから、メモリ開放部分を疑いました。
が、LHA2.11のソースにもLHA2.67の逆アセリストにも、func 49hはありません。
ではfunc 4ahはどうかというと、いずれにも1ヶ所ずつ。
これは、LHA2.11では自己解凍ファイルのルーチンで使われているだけ。
ということは、LHA2.67でも同様と推測できます。
参考までに、func 48hはLHA2.11のソースだとアセンブラの部分だけで5ヶ所あり
ます。その他、C言語で書かれた部分もあり、全体としてはこのファンクションを
5個以上使っているはずです。一方、LHA2.67では、func 48hは4箇所しか見つか
りませんでした。逆アセを失敗している可能性もあるかなぁ。

次の手がかりは、エラーを吐いているアドレス。例えば、

VMAP Version 2.01  Copyright (C) 1989-91 by c.mos

addr PSP  blks   size  owner/parameters           hooked vectors
---- ---- ---- ------  -------------------------  -----------------------------
1001 10BC   1    2976  command
10BC <--    1    8432  command cn                 23 24 2E 2F
12CC        1      64  <free>
12D1 10BC   1    4096  command (env)
13D2        1    1968  <free>
144E <--    1    3888  vz 1.60  -z                1B 21 29
1542        1    1984  <free>
15BF-9FFF   1  566272  <free>

このようなメモリ状態のときに lha t v.lzh とやると

>COMMAND(10BC) 10BC:02B1 '致命的エラー: MCBが壊れています。'

と出てきます。このアドレス、よく見ると、アプリケーションのものではなく、
シェルか何かのアドレスであることがわかります。そこで、このアドレスにどの
ようなコードがあるのかと、debugを使って逆汗してみました。すると、

10BC:02AE C3            RET	                                   
10BC:02AF CD21          INT	21                                 
10BC:02B1 FA            CLI	                                   

こんな結果が出ました。
う〜む、これはいったいなんだろう。

と、ここまで来たところで、私の技術力は底をついてしまったのでした。
いやぁ、浅い浅い。



以下、余談。
メモリ状況の表示ツールとしては、私は、ms vmap zmapの3つを使っています。
ところが、WinXPのcommand.comでは、msが固まります。他の2つは大丈夫。
一方、VTDOSでは、zmapで不具合が発生します。他の2つは問題ありません。
それぞれ、どのような状況かというと。

まず、VTDOSとzmap。
実際に不具合が発生するのはUMBの情報を取得しようとしたときだけのようです。
でも、デフォルトでUMB情報の取得を行うようになっているので、オプションを何
も指定しないとハングアップ。コンベンショナルメモリだけ、とオプション指定
すれば回避可能ですが、非常に頻繁に忘れます。
これ、他の2つのツールに比べて、UMB情報の取得の方法が特殊なのでしょうか。

一方、WinXPのcommand.comとms。
具体的には、コンベンショナルメモリの表示オプションであるmとc、またはUMBを
表示させるオプションのuとqを指定すると、行ったきり帰ってきません。あと、
vオプションでも戻ってきません。そして、やはりというか、msはデフォルトでは
コンベンショナルメモリのみを表示して帰ってくることになっているので、オプ
ションを何も指定しないとハングアップ。オプションでコンベンショナルメモリ
とUMBの情報を取得しないようにすれば動作しますが、それらの情報を取得しない
となると、このツールの存在理由が大きく減殺されてしまう。
それはともかく、このツールも一体どんな特殊なことをやっているのだろう。
      - No.5113 -    このTreeへ    コメント元:5076 へ [リストへもどる] pre

(5067) 5121Re^5: VTDOSとLHA  投稿者:10#   2010/03/28(日) 01:22
参照先:http://vtdos.web.fc2.com
    5113 番 としき さんへのコメント    コメント数 1

LHAの障害の原因はリリースノートに述べたとおりでした。

バッチ処理の互換性調査は概ね確立していまして、
DOS窓でのsymdebのトレース結果と、VTDOSでのsymdebのトレース結果を
比較照合することで行っています。
その前処理でどこからトレースするかというポイントは調べた上でなんですが。
一般的な(およそ10KB未満)プログラムだとさほど手間は掛からないのですが、
いかんせん圧縮プログラムは処理が重い。
最小のワークセットで、65537バイトのテキストを解凍してみたんですが、
主要ロジック部分だけで150万ステップ(行数で400万行)ありました。
DOS窓でのトレースはまだいいんですが、VTDOSでのトレースは半日がかりです。
出力されたファイルはそれぞれ200MBぐらいありました。
それでも最近のPCはオンメモリで処理できてしまうところがまたすごい。
対話的プログラムや、常駐ソフトは確立してる訳ではなくて、
VZなどはソースが無いと(有ってもですが)お手上げですね。
初期の頃は、command.comとFDを動かすまでが過酷でした。
(というか今でも良く動いてるなと思ったりします)

zmapは初耳です。適当な配布元が見つからなかったのですが、
もし心当たりがあればお知らせ下さい。

      - No.5121 -    このTreeへ    コメント元:5113 へ [リストへもどる] soft

(5067) 5122Re^6: VTDOSとLHA  投稿者:としき   2010/03/28(日) 09:38
参照先:http://www.hinocatv.ne.jp/~toshiki/
    5121 番 10# さんへのコメント

> LHAの障害の原因はリリースノートに述べたとおりでした。

ご対応ありがとうございました。
これを機会に、長い名前に対応しているLHA32に移行しようかとも思いましたが、
やっぱりなんかちょっと違和感があって。

> 主要ロジック部分だけで150万ステップ(行数で400万行)ありました。
> DOS窓でのトレースはまだいいんですが、VTDOSでのトレースは半日がかりです。
> 出力されたファイルはそれぞれ200MBぐらいありました。

すごい。
物量に圧倒されます。

> zmapは初耳です。適当な配布元が見つからなかったのですが、
> もし心当たりがあればお知らせ下さい。

WEBの世界では見当たりませんねぇ。
作者はZOBplusの速水さんです。
昔、1993年ごろは、雑誌の付録フロッピーなんかによく収録されていたのですが。
私の持っているのはv1.04というもので、圧縮ファイルの日付は1993-04-18です。
ASCII誌1993年5月号の付録かなぁ。
このバージョンは、ドキュメントに転載の可否も明記してないので、裏でメール
などでやり取りするしかないのかも。v1.02までは、TTY時代のニフティにも転載
されていたことが確認できましたが、それより新しいバージョンは、調べた範囲
では見つかりませんでした。まぁ、でも、当時のニフティも広大だから、どこか
にはあったかも。

あ、ドキュメントを読み直したら、ハングすることに関しての記載がありました。

「一部のマシンではA0000h〜FFFFFHのメモリエリアのリードをするとハング
 アップするようです。そのような機種ではCオプション等でUMBの表示を抑止
 してください。」

ドキュメントに不具合として明記してあるわけですから、vtdos側の問題ではあり
ませんね。大変失礼しました。
一部のマシンというのがどのようなマシンかということがわからないのですが、
たまたま、vtdosはそういうマシンを詳細にエミュレーションしてしまっていると
いうことなのでしょう。
      - No.5122 -    このTreeへ    コメント元:5121 へ [リストへもどる] soft