#99 Article 854 Posted at 1994/05/17 00:17:12 by 夢中ゆわ (MAP2717) [STAY.98]

Subject: Re: 常駐モノの管理? /853

機械語の偉い方々がお見えにならないので拙宅がなんか書きます(^^;)

>・常駐する際にメモリブロックのオーナー名のセット

これはオーナーIDの事ですか?
オーナーIDは、メモリをDOSが確保した時に、自動的に設定される
(そのメモリブロックを要求したプロセスのPSPアドレス(セグメント))
ので、普通の常駐だけなら勝手にいじらない方がいいかと思います(^^;)
オーナーIDはMCBの+1,+2バイト目になります。

>・常駐解除の手段

私は、DOSファンクションの49Hを使っています。
MOV AH,49H
MOV ES,XXXX    ←解放するメモリブロックの先頭セグメントアドレス
INT 21H
JC  ERROR

ここでESは、メモリブロックのMCBじゃ無くてメモリ本体のセグメント値です。
普通はファンクション48Hで確保したメモリのセグメント値を代入します。
COMの常駐物なら、常駐時のDSあたりを覚えておけばいいのかな?
EXEならファンクション62HでPSPセグメント値を覚えておけばいいのかな?

MOV AX,62H
INT 21H

BX→PSPセグメントアドレス

>・環境領域の解放手段

環境領域のセグメントアドレスは、PSPの002CH~002DHにありますので、
後は、上と同じくファンクション49Hを使って解放します。

……………………………… と、ここまで書いていて、MCBをダンプして眺めてたら
未使用のハズの+5バイト目以降(+8~+F)に何やら怪しい文字列が…(^^;)
こ、これが、オーナー名っちゅーやつでしょうか?

未使用領域だから、勝手に操作してもいいとは思いますが…(^^;)
MCBの+8~+Fの8バイトです。

#MAP2717 夢中ゆわ
PS:
MCBとかPSPを知ってらっしゃるものとして話を進めてしまいましたが…
この辺の説明が入用でしたら又言って下さい。
MCB:メモリを管理する16バイトのブロックで、本体ブロックの16バイト前に
    ある(そのうち管理用に5バイトを使用)
PSP:プログラムが実行するのに必要な情報をDOSから受け取る為の領域で
    COM形式の場合、実行ファイルの先頭256バイトがPSP。
    EXEの場合は、きっとファンクション62Hで調べると思う。