[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