<pre>表示

-

A4 - reiria

2016/01/02 (Sat) 12:08:21

LEMM v5.11c のスレにも書きましたが、従来の UCGW は FVIEW がハングすることが発覚しためため、
LEMM v5.12a は UCGW をかなり高速化しました。(UCGWIO と同じ)

この新しい UCGW ですが、WW v0.41b 以前は対応しておらず、WW v0.42a 以降対応しています。

また、Mirage についてですが、Mirage は様々な割り込みに介入するため、
なるべく遅い A4 UMB を通過しないように、A4 UMB を避けて常駐するようにしました。
Mirage v0.49a 以降、オプション A4UMB か UMBA4 を指定すれば Mirage v0.48a 以前と同様に常駐します。

あと、LEMM v5.12a に A4.com というプログラムを同梱しました。
この A4.com というのは、

・A4 UMB を無駄に確保して他のプログラムに使われないようにする
・A4 UMB を通過してる割り込みを調べる

といったことをするプログラムです。

Re: A4 - reiria

2016/01/02 (Sat) 12:10:04

■つまり

A4.com fill

A4 UMB で実行させたくない常駐物等

A4.com free

という感じに、A4 UMB で実行させたくない常駐物等の前後で実行します。

CONFIG.sys/コマンドラインどちらでも実行出来ます。

Re: A4 - reiria

2016/01/02 (Sat) 12:11:20

■とりあえず実行すると

A4 UMB のメモリマップ(MCB,サイズ,状態,名前)が表示されます。
A4 UMB が無いなら何も表示されません。

Re: A4 - reiria

2016/01/02 (Sat) 12:12:30

■オプション

fill A4 UMB の空き領域を無駄に確保 (※)

free A4 UMB の無駄に確保した領域を解放

map [c][u][x] A4 UMB 以外も表示

c conventional
u UMB
x XMS UMB
v verbose

"文字列" 文字列と一致したものを表示 (複数指定可)
'文字列' 〃

ASCII 大文字と小文字は区別しない
空白で区切らないと連結

例「"3.5"'"'" fdd" "hdd"」→「3.5" FDD」と「HDD」

esc リダイレクト時もエスケープシーケンスを出力

> リダイレクト (CONFIG.sys 可)
>> 〃

メモリマップの fill と free は水色で表示されます。

※A4 UMB を含む UMB の空き領域が一つだけの場合、
A4.com 実行前に何かを DEVICEHIGH すると DOS が A4 UMB を確保してしまうため、
その後の CONFIG.sys 実行中に A4 UMB に空きがあっても、
CONFIG.sys が終わるまで、A4.com は A4 UMB を確保出来ない場合があります。

Re: A4 - reiria

2016/01/02 (Sat) 12:14:11

■おまけオプション

int [番号] 割り込みハンドラのチェーンを表示(MCB,ベクタ,名前)
io 割り込みハンドラが使っている I/O port を表示
!out out を I/O port に出力せずにエミュレート

多重フックされたベクタのアドレスを確認出来ます。

A4 UMB は水色で表示されます。

表示されるベクタは 08~1F,21,25,26,28,29,2A,2F,DC だけです。

番号を指定すると、指定した割り込み番号だけ表示されます。
(16進正規表現)

MCB 範囲外は ? で名前は DOS,HMA,EMM,EMS,ROM-BIOS,Mirage 等と表示されます。

オプション int と map はどちらか一方のみ有効で、c u x の意味が異なります。
int での c は INT-0Ch の意味で、u x はエラーになります。

通常、オプション int は LEMM 専用です。

表示される内容は仮想 86 モード(リアルモード)の割り込みハンドラだけです。
メモリマネージャ等のプロテクトモードの処理はトレース出来ません。
システムマネージメントモードもトレース出来ません。

環境によって相性のよくない場合があるかも知れませんので、ご注意下さい。

Re: A4 - reiria

2016/01/02 (Sat) 12:15:51

■オプション int と相性のよくない場合って何?

ハードウェア割り込みハンドラをソフトウェア的に実行するため、
ハードウェア割り込みハンドラ側が想定していない状況の可能性があるためです。

安全対策として、ROMーBIOS は実行せずに iret するようにしています。

Mirage に到達しても iret します。

例えば、INT-09h をソフトウェア的に実行する場合、

>A4 int 9
↓↑
INT-09h をフックしている常駐物等は実行される
↓↑
(Mirage に到達したら iret する)
↓↑
INT-09h ROM-BIOS の入口で iret する

ここまで来ない

INT-09h ROM-BIOS は実行されない

という流れになります。

Re: A4 - reiria

2016/01/02 (Sat) 12:17:25

■オプション int って LEMM 専用じゃないと駄目なの?

シングルステップ割り込みを割り込み元のスタックを使わずに処理するためです。

例えば、

cli
mov sp, NEW_SP
mov ss, NEW_SS

というシーケンスでシングルステップ割り込みが発生した場合、

mov sp, NEW_SP

シングルステップ割り込み発生

mov ss, NEW_SS

となるので、変な SS:SP に IP CS FLAGS が積まれるとまずいです。

SS SP の設定が、

mov ss, NEW_SS
mov sp, NEW_SP
や、
push NEW_SP
push NEW_SS
pop ss
pop sp
や、
lss sp, NEW_SSSP

というようなシーケンスであれば、
SS SP の設定中にシングルステップ割り込みは発生しませんが(たぶん(^^;)
割り込み禁止で SS や SP を汎用的に使う場合もあります。

よって、シングルステップ割り込みで割り込み元のスタックが使われないように、
(つまり、リアルモードのシングルステップ割り込みハンドラが起動しないように)
シングルステップ割り込みを LEMM 側の例外ハンドラで処理します。

Re: A4 - reiria

2016/01/02 (Sat) 12:18:46

■もう何でもいいから割り込み元のスタックを使ってもいいなら

>A4 int !LEMM

というようにオプション !LEMM を指定します。

他のメモリマネージャやリアルモードでも実行出来ます。

オプション !LEMM で実行した場合、最後に <!LEMM> が点滅で表示されます。

大概、何事もなくあっさり動きますが、不具合の有無は単純には判断出来ません。
暴走しないからといって不具合が無いかどうかはわかりません。

Re: A4 - reiria

2016/01/02 (Sat) 12:19:23

■デバッガで常駐物追うのに疲れた時に

unag を常駐させ、

>A4 int logall una

というようにオプション logall una を指定すると逆アセの内容も表示されます。

A4 にアクセスする命令は水色で表示されます。
in out 命令は黄色で表示されます。

※ ins outs 命令が A4 をアクセスする場合はオペランドが水色。
※ !out で出力しなかった out 命令は点滅。
※ !out の場合でも I/O port 063C 0704 0A08~0A0A 0CF8~0CFF は出力されます。

Re: A4 - reiria

2016/01/02 (Sat) 12:20:08

■いつの日か ROM-BIOS も実行してみたい時が来たら

>A4 int logallrombios una

Mirage で ROM-BIOS の実行ログが見えるのは Mirage v0.49a 以降です。
(Mirage の実行ログには * が点滅)

なお、INT-1Eh の ROM-BIOS は危ないので実行しません。

Re: A4 - reiria

2016/01/02 (Sat) 12:20:52

■エミュとオプション int

Virtual98 以外うまく動かないっぽいです。(2015.8.24 現在)
まだよく調べておらず、今のところエミュでの動作は考慮していません。

Re: A4 - reiria

2016/01/02 (Sat) 12:21:47

■割り込み呼び出し時のレジスタ値

<?pre>
INT AX BX CX DX SI DI BP DS ES

08-17 0000 0000 0000 0000 0000 0000 0000 A4CS A4CS
18 05FF 0000 0000 0000 0000 0000 0000 A4CS A4CS
19 7FFF 0000 0000 0000 0000 0000 0000 A4CS A4CS
1A B101 0000 0000 0000 0000 0000 0000 A4CS A4CS
1B 7FFF 0000 0000 0000 0000 0000 0000 A4CS A4CS
1C 7FFF 0000 0000 0000 0000 0000 0000 A4CS A4CS
1D 7FFF 0000 0000 0000 0000 0000 0000 A4CS A4CS
1E 7FFF 0000 0000 0000 0000 0000 0000 A4CS A4CS
1F CC01 0000 0000 0000 0000 0000 0000 A4CS A4CS
21 5100 0000 0000 0000 0000 0000 0000 A4CS A4CS
25 00FF 0000 0000 FFFF 0000 0000 0000 A4CS A4CS
26 00FF 0000 0000 FFFF 0000 0000 0000 A4CS A4CS
28 0000 0000 0000 0000 0000 0000 0000 A4CS A4CS
29 000D 0000 0000 0000 0000 0000 0000 A4CS A4CS
2A 0000 0000 0000 0000 0000 0000 0000 A4CS A4CS
2F 0500 0000 0000 0000 0000 0000 0000 A4CS A4CS
DC 0000 0000 0012 0000 0000 0000 0000 A4CS A4CS
<?/pre>
※ 386 以降では 32bit レジスタの上位ワードと FS GS は 0 です。
※ A4CS は A4.com 自身を実行している CS です。
※ 08 の呼び出し時は、念のため インターバル タイマ BIOS のハンドラを設定しています。
※ 0C の呼び出し時は、念のため RS-232C BIOS の受信バッファを設定しています。

Re: A4 - reiria

2016/01/02 (Sat) 12:44:11

A4 fill で無駄に確保した A4 UMB のメモリブロックの次のメモリブロックの MCB を A4 UMB 末端に残すか、
それとも A5 に入れるかでちょっと悩みましたが A4 UMB 末端に残しました。

なので、メモリマップ表示ツールで A4 fill のメモリマップを眺めると、
空きメモリブロックに A4FF が表示されると思いますが、そのメモリブロックの中身は A500:0 からになりますので、
そこに常駐しても、A4 UMB を通過することはないかと思います。

Re: A4 - reiria

2016/09/18 (Sun) 16:17:31

A4.com v0.02a v0.03a はオプション vme の INT clock に iret 命令のクロック数が含まれていたのですが、
v0.04a は含まないようにしました。

また、仮想 86 モードで実行した場合でも、リアルモードの計測もするようにしました。

なお、2016-9-7 にアップした LEMM v5.13a のアーカイブ lemm513a.lzh は、

2016-9-7 A4.com v0.02a
2016-9-8 A4.com v0.03a
2016-9-18 A4.com v0.04a

というように、同梱する A4.com を差し替えたため、異なる lemm513a.lzh が既に 3 種類存在します。

Re: A4 - reiria

2016/09/18 (Sun) 16:19:11

あと、リアルモード int と pushf cli callf のクロック数が同じ CPU もあるようです。
というか、いつも使ってる Ra266 PentiumIII はそのようです。
さすがに全く同じっていうのはちょっと妙な気もしますが、どうも同じようです(^^;

1000 回連続計測するうちに CPU がうまいこと処理するのかもですが、
若干遅いのは 1, 2 回目で、3, 4 回目から大差ないというか、1000 回も計測する必要ない気もします(^^;
(最初に wbinvd invd した場合、1 回目の遅さは若干程度ではなく元気よく遅い)

仮想 86 モード VME 有効 int のクロック数はリアルモードに近いですが、僅かに多いようです。

Re: A4 - reiria

2016/09/18 (Sun) 22:14:20

> 2016-9-18 A4.com v0.04a

オプション vme が Jack の遅延を掃き出さないままハングする致命的問題が発覚したため公開中止しました。
もし既に A4.com v0.04a をゲットした方がおられましたら捨てて下さい(;_;)

Re: A4 - reiria

2016/09/18 (Sun) 22:30:07

久しぶりに遅延の恐怖味わい中(T_T)

Re: A4 - reiria

2016/09/18 (Sun) 22:55:09

ハングの原因は、A4.com v0.04a のオプション vme で INT clock の計測時に、
仮想 86 モードからリアルモードに切り替わる際に Jack が自動的に遅延を掃き出そうとすると、
A4.com v0.04a がハードウェア割り込みを止めるせいで、書き込み失敗するためです。

Re: A4 - reiria

2016/09/19 (Mon) 17:52:15

オプション vme と Jack の遅延との不具合を修正した A4.com v0.05a をアップしました。
lemm513a.lzh も差し替えました。

名前
件名
メッセージ
画像
メールアドレス
URL
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

Copyright © 1999- FC2, inc All Rights Reserved.