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

  失われた技術 - としき 10/04/07-22:27 No.5132
  ┗ Re: 失われた技術 - konno 10/04/12-01:06 No.5134
   ┗ Re^2: 失われた技術 - としき 10/04/12-21:43 No.5135
    ┗ Re^3: 失われた技術 - konno 10/04/14-23:15 No.5137

(5132) 5132失われた技術  投稿者:としき   2010/04/07(水) 22:27
参照先:http://www.hinocatv.ne.jp/~toshiki/
   コメント数 1

大げさなタイトルですねぇ。
何かというと、DOSの時代、少しでも広いコンベンショナルメモリを確保するには
どうするか、ということが研究された時代があったわけです。その後、Win95以降
はすっかり廃れてしまったのですが、今またVTDOSの時代になって、かつての遺産
が役立つ時代が来ました。ところが、そういうときになって、その肝心の資産が
そもそも入手不能という、とても残念なことになっているわけです。

さて、本題。
VTDOSを起動して、起動後にvwxとvzを常駐させると、以下のようなメモリマップ
になりました。

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

addr PSP  blks   size  owner/parameters           hooked vectors
---- ---- ---- ------  -------------------------  -----------------------------
1001 10C2   4   15664  command                    23 24 2E
13D8        1    2032  <free>
1458 <--    1    1648  vwx 1.08b -z2              2F
14C0 <--    1    3888  vz 1.60  -z                1B 21 29
15B4-9FFF   1  566432  <free>

vwxの前に、約2KBの空き領域ができています。
毎回このvzとvwxを常駐させるなら、バッチファイルを使うところです。
例えば以下のようなバッチファイルを作ったとします。

auto1.bat---------------------------------------------------------------<
\vz\vwx -z2 -l8192 -x3 -v3
\vz\vz -z
auto1.bat---------------------------------------------------------------<

本来ならvtdos.cfgのSHELLで自動起動させるべきところですが、まずは起動後に
手動で実行させて見ます。この場合は以下のようなメモリマップになりました。

addr PSP  blks   size  owner/parameters           hooked vectors
---- ---- ---- ------  -------------------------  -----------------------------
1001 10C2   4   15664  command                    23 24 2E
13D8        1    2128  <free>
145F <--    1    1648  vwx 1.08b -z2 -l8192 -x3   2F
14C7 <--    1    3888  vz 1.60  -z                1B 21 29
15BB-9FFF   1  566336  <free>

わずかですが、さらにメモリの隙間が増えてしまいました。
この空きメモリの正体ですが、約2KBもあるのは環境変数領域です。
ためしに、setコマンドで環境変数を削りまくってからこれらのソフトを常駐させ
ると、メモリの隙間が減少するのがわかると思います。
また、バッチ実行時に増えた部分は、いわゆるバッチ管理領域です。

この、分断されたメモリ領域を何とかするプログラム、昔は多数ありました。
具体的には、frenvとかBCBC、CBM、mvbat、balocなんていうソフトです。
でも、現在、探した範囲では以下のものしか見つかりません。
vectorで配布されているDOSHIGHに同梱されているBHIGHというツールです。

http://www.vector.co.jp/soft/dos/hardware/se001731.html

これを使ってバッチファイルを書き直して見ます。

auto2.bat---------------------------------------------------------------<
bhigh
\vz\vwx -z2 -l8192 -x3 -v3
\vz\vz -z
bhigh r
auto2.bat---------------------------------------------------------------<

このバッチを、vtdos起動後に実行してみると、以下のようになりました。

addr PSP  blks   size  owner/parameters           hooked vectors
---- ---- ---- ------  -------------------------  -----------------------------
1001 10C2   4   15664  command                    23 24 2E
13D8 <--    1    1648  vwx 1.08b -z2 -l8192 -x3   2F
1440 <--    1    3888  vz 1.60  -z                1B 21 29
1534-9FFF   1  568480  <free>

おほほほ。
見事にメモリの隙間がなくなりました。
ということで、このauto2.batをvtdos.cfgのSHELLから自動起動させるようにして
みたところが、これが全然うまくない。vtdosが起動しなくなってしまうというか
瞬時に終了するような感じになってしまいます。

これ、vmapでの通常のメモリ表示を見ているだけでは原因がわかりません。
でも、msでメモリ状況を表示するか、あるいはvmapでもnオプションを指定すれば
見えてきます。

再び、vtdos起動後にvwxとvzを手動で常駐させたときのメモリマップを、今度は
msで表示させて見ました。

 MCB  PSP  Size      Owner name     Param/Dev        Hooked Vectors
---- ---- ------- ----------------- ---------- -----------------------------
1000 10C2   3072  command                     
10C1 10C2   8432  <unknown>                    23 24 2E
12D1 0000     64  <free>                      
12D6 10C2   4096  <unknown>   (env)           
13D7 0000   2032  <free>                      
1457 1458   1648  vwx               VWX 1.08b  2F
14BF 14C0   3888  vz                vz 1.60  - 1B 21 29
15B3 0000 566432  <free>                      

なんか、今まで見えていなかった64バイトのメモリの隙間があります。
次に、vtdos起動後にauto1.batを実行させてみたときのmsでのメモリマップです。

 MCB  PSP  Size      Owner name     Param/Dev        Hooked Vectors
---- ---- ------- ----------------- ---------- -----------------------------
1000 10C2   3072  command                     
10C1 10C2   8432  <unknown>                    23 24 2E
12D1 0000     64  <free>                      
12D6 10C2   4096  <unknown>   (env)           
13D7 0000   2128  <free>                      
145E 145F   1648  vwx               VWX 1.08b  2F
14C6 14C7   3888  vz                vz 1.60  - 1B 21 29
15BA 0000 566336  <free>                      

やっぱりその64バイトの隙間があります。
では、このauto1.batをvtdos.cfgのSHELLで自動起動してみるとどうなるか。
以下がそのときのメモリマップです。

 MCB  PSP  Size      Owner name     Param/Dev        Hooked Vectors
---- ---- ------- ----------------- ---------- -----------------------------
1000 10C2   3072  command                     
10C1 10C2   8432  <unknown>                    23 24 2E
12D1 10C2   4096  <unknown>   (env)           
13D2 0000   2176  <free>                      
145C 145D   1648  vwx               VWX 1.08b  2F
14C4 14C5   3888  vz                vz 1.60  - 1B 21 29
15B8 0000 566368  <free>                      

なんと、64バイトの隙間がなくなるというか、サイズ的に考えると、場所がずれ
て、その後ろの約2KBの隙間とくっついてしまったような感じになります。
おそらく、これが不具合の原因でしょう。

実は、バッチ管理領域というのはシステムと密接に関連しているようで、うかつ
に動かすと不具合が起こるというのは昔から知られていました。一方、環境領域
については、この手の不具合は起こりにくい模様。そのため、BHIGHにも、環境領
域だけを動かすオプションというものがあります。それを指定してバッチを書き
直すと以下のようになります。

auto3.bat---------------------------------------------------------------<
bhigh 2
\vz\vwx -z2 -l8192 -x3 -v3
\vz\vz -z
bhigh 0
auto3.bat---------------------------------------------------------------<

これをvtdos.cfgのSHELLで自動起動した場合は以下のようになります。

 MCB  PSP  Size      Owner name     Param/Dev        Hooked Vectors
---- ---- ------- ----------------- ---------- -----------------------------
1000 10C2   3072  command                     
10C1 10C2   8432  <unknown>                    23 24 2E
12D1 10C2   4096  <unknown>   (env)           
13D2 0000    144  <free>                      
13DC 13DD   1648  vwx               VWX 1.08b  2F
1444 1445   3888  vz                vz 1.60  - 1B 21 29
1538 0000 568400  <free>                      

見事にバッチ管理領域だけが残ってしまっています。



実は私、vtdosではDOS6.3のcommand.comを使っています。
そして、たまたま、このバージョンのDOSに対応したバッチ管理領域移動ツールと
して、ねこ氏の作られたnmvbat.comというツールを持っています。このツールは
純粋にバッチ管理領域だけを動かすもので、環境変数領域は移動してくれません。
試しに、以下のバッチファイルをvtdos.cfgのSHELLから自動起動してみます。

auto4.bat---------------------------------------------------------------<
nmvbat.com
\vz\vwx -z2 -l8192 -x3 -v3
\vz\vz -z
auto4.bat---------------------------------------------------------------<

このときのメモリマップは以下の通りです。

 MCB  PSP  Size      Owner name     Param/Dev        Hooked Vectors
---- ---- ------- ----------------- ---------- -----------------------------
1000 10C2   3072  command                     
10C1 10C2   8432  <unknown>                    23 24 2E
12D1 10C2   4096  <unknown>   (env)           
13D2 0000   2032  <free>                      
1452 1453   1648  vwx               VWX 1.08b  2F
14BA 14BB   3888  vz                vz 1.60  - 1B 21 29
15AE 0000 566512  <free>                      

メモリの隙間がバッチ管理領域の分だけ減少しています。
ということで、バッチ管理領域はnmvbat.com、環境変数領域はBHIGHで、それぞれ
対応することにしました。この2つのツールを使ったバッチファイルは最終的に
以下の通りとなります。

auto.bat---------------------------------------------------------------<
nmvbat.com
bhigh 2
\vz\vwx -z2 -l8192 -x3 -v3
\vz\vz -z
bhigh 0
auto.bat---------------------------------------------------------------<

そして、vtdos.cfgのSHELLから自動起動した場合のメモリマップは以下の通り。

 MCB  PSP  Size      Owner name     Param/Dev        Hooked Vectors
---- ---- ------- ----------------- ---------- -----------------------------
1000 10C2   3072  command                     
10C1 10C2   8432  <unknown>                    23 24 2E
12D1 10C2   4096  <unknown>   (env)           
13D2 13D3   1648  vwx               VWX 1.08b  2F
143A 143B   3888  vz                vz 1.60  - 1B 21 29
152E 0000 568560  <free>                      

非常にすっきりしたものとなりました。いやぁ、めでたしめでたし。



なお、たかだか0.3%空きメモリを増やすために、これだけの労力をかけることが
果たして正しいか、ということは問うてはいけない事項だったりします。かつて
のいわゆる、メモリオタクとか環境オタクと呼ばれる人種によって開拓されたこ
の道は、転んでけがをすることも多い道かもしれませんし。
      - No.5132 -    このTreeへ           [リストへもどる] pre

(5132) 5134Re: 失われた技術  投稿者:konno   2010/04/12(月) 01:06
    5132 番 としき さんへのコメント    コメント数 1

としきさん、亀レスですみません。このところすっかり放置モードになってまして。

> その後、Win95以降
> はすっかり廃れてしまったのですが、今またVTDOSの時代になって、かつての遺産
> が役立つ時代が来ました。

Win95以降はそのツール類は使えなくなったのでしたっけ?
というのはどうでもいいんですが、VTDOSでというのは半分ネタなのかなぁと。

もともとVTDOSは仮想環境なので、初期の頃は空きが600K以上ありましたよね。
最近の版はメモリ配置の変更で空きが少なくなりましたが、メモリ配置を変更する
オプションがあり、私はそれを利用して600K以上の空きを確保しています。
以下、VTDOS.TXTから引用します。

TPALOW=0|1
  TPAの開始を限界(80h)まで拡張します。
  初期のPKLITEなどは問題が出ます。
  デフォルトは1000hから。

TPAEXT=0|1
  TPAを限界まで拡張します。
  ソフトによっては問題があるようです。デフォルトはA0000hまで。
  ちなみに、VTDOSはUMBはありません(HMAはある)

TPAMIN=0xhhhh
  TPALOW=0の時にTPAの下限を指定します。
  デフォルトは0x1000。

TPAMAX=0xhhhh
  TPAEXT=0の時にTPAの上限を指定します。
  デフォルトは0xa000。プラグインを利用する場合は0xb800以下に設定します。

ということで、私は、TPALOW=1 を設定しています。

addr PSP  blks   size  owner/parameters           hooked vectors
---- ---- ---- ------  -------------------------  -----------------------------
0081 0148   3   19328  command                    23 24 2E
053C        1    2192  <free>
05C6 <--    1    1648  vwx 1.08b -z2 -v2 -x1 -l4
062E <--    1    3088  taglight /v stay           10 2F
06F0        1    2160  <free>
0778 <--    1    3888  vzibmj 1.60t -sw2 -z       1B 21 29
086C-9FFF   1  620848  <free>

#もしかして、釣られたのかなぁ。(^^;
でもメモリ関係のツールが動作するとは、VTDOSの再現性はかなりのものですねぇ。

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

(5132) 5135Re^2: 失われた技術  投稿者:としき   2010/04/12(月) 21:43
参照先:http://www.hinocatv.ne.jp/~toshiki/
    5134 番 konno さんへのコメント    コメント数 1

> としきさん、亀レスですみません。このところすっかり放置モードになってまして。

いいんじゃないですか。
安定しているという意味で。

> Win95以降はそのツール類は使えなくなったのでしたっけ?

使えるのですが、誰もそんな細かいメモリを気にしなくなったということです。

> 最近の版はメモリ配置の変更で空きが少なくなりましたが、メモリ配置を変更する
> オプションがあり、私はそれを利用して600K以上の空きを確保しています。

VTDOSにはUMBがありませんが、昔、PC-98では、ほとんどありとあらゆるデバドラ
から常駐ソフトまでをUMBに追い出して、空きメモリ638KBとかいうマニアがいた
のを覚えています。
ちなみに、アーキテクチャが異なるFMR系では、コンベンショナルメモリはBFFFH
までの最大768KBが確保できます。でも、FMR系であるポケ3では、UMB等を設定で
きないので、何も追い出せません。なので、config.sys & autoexec.batが存在し
ない状態では、645KBぐらいの空きメモリとなります。

> addr PSP  blks   size  owner/parameters           hooked vectors
> ---- ---- ---- ------  -------------------------  -----------------------------
> 0081 0148   3   19328  command                    23 24 2E
> 053C        1    2192  <free>
> 05C6 <--    1    1648  vwx 1.08b -z2 -v2 -x1 -l4
> 062E <--    1    3088  taglight /v stay           10 2F
> 06F0        1    2160  <free>
> 0778 <--    1    3888  vzibmj 1.60t -sw2 -z       1B 21 29
> 086C-9FFF   1  620848  <free>

うん、約2KBの空きメモリが2つありますが、気になりませんか?
私は気になります。
これを解消しようというのが、先の投稿だったりするわけです。
気にならなければ、このままでもいいでしょう。

> #もしかして、釣られたのかなぁ。(^^;

釣ってるというよりも、ほとんどネタだったりするわけで。
      - No.5135 -    このTreeへ    コメント元:5134 へ [リストへもどる] pre

(5132) 5137Re^3: 失われた技術  投稿者:konno   2010/04/14(水) 23:15
    5135 番 としき さんへのコメント

> 使えるのですが、誰もそんな細かいメモリを気にしなくなったということです。

・・・う〜ん、そうなんでしょうか。

> VTDOSにはUMBがありませんが、昔、PC-98では、ほとんどありとあらゆるデバドラ
> から常駐ソフトまでをUMBに追い出して、空きメモリ638KBとかいうマニアがいた

PC-98ではここまで拘った人たちが、Win95では何もしなかったのかと。
・・・そうか、みんなWindowsアプリに乗り換えてしまったんですね。(^^;

> ちなみに、アーキテクチャが異なるFMR系では、コンベンショナルメモリはBFFFH
> までの最大768KBが確保できます。

そういうPCが他にもあったようですね。ちなみに、VTDOSで、TPAEXT=1 にしてみたら、

addr PSP  blks   size  owner/parameters           hooked vectors
---- ---- ---- ------  -------------------------  -----------------------------
1001 10C8   3   19328  command                    23 24 2E
14BC        1    2192  <free>
1546 <--    1    1648  vwx 1.08b -z2 -v2 -x1 -l4
15AE <--    1    3088  taglight /v stay           10 2F
1670        1    2160  <free>
16F8 <--    1    3888  vzibmj 1.60t -sw2 -z       1B 21 29
17EC-EBFF   1  868656  <free>

なんと、こんなに空きが出来ました。す、すごい!!

> うん、約2KBの空きメモリが2つありますが、気になりませんか?

ということで、2k程度の隙間はまったく気にならないのでした。

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