Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

The cursor (caret) disappears in some text-modes

12 views
Skip to first unread message

Masanori HATA

unread,
Mar 27, 2006, 7:27:49 AM3/27/06
to
畑です。

Linux のフレームバッファに感動したのがきっかけで、テキスト画面の高解像度
化に凝っています。それで、今でも時々古いゲームなどをするために MS-DOS を
使う機会があるので、MS-DOS でもできるんじゃないかと思い、色々と情報収集
したりして試してみました。

# 特に、液晶モニタ(それも DVI 接続)を使っているため、解像度がピッタリ
# 合わないと見苦しくて仕方がないのが理由です。このモニタは低解像度の場合
# 拡大表示し、小さいまま中央に表示するような機能がありません。

問題点:
一応、解像度は変更することが出来たのですが、カーソル(キャレット)が表示
されなくなってしまいます。今日一日ハマッてしまいましたが、どうにもなりま
せん。どなたかお知恵を拝借願えませんでしょうか?

以下、状況説明:

環境は、
・PC/AT 互換機(PIII)
・nVidia GeForceFX 5700
・Eizo L567(DVI 接続)最適な解像度は 1280x1024
・MS-DOS 7.1(Win98 の DOS)

BIOS コール(INT 10h)を使ってモードを設定できることがわかりました。AX
レジスタに 4F02h をセットし、BX レジスタにモード番号をセットして、INT 10h。

モード番号は Linux のフレームバッファを使った経験から既にわかっていたの
でそれを使いました。106h/107h/11Bh でそれぞれ 1280x1024 の色深度 8/16/32
bit のモードです。

MS-DOS の debug コマンドで

mov ax,4F02
mov bx,106
int 10

てな具合です。

また、実際にモードをセットしてから、逆にモード情報を(ah=fh を使って)取
得すると、106h/107h/11Bh の代わりに 5Ah/6Bh/79h が実際には使われているこ
とがわかりました(Linux のフレームバッファをいじった時点ではこれらのモー
ドは知らなかったのですが 5Ah/6Bh/79h でモードセットしても同じ効果のよう
です)。

# 当然、このモード番号の割当ては nVidia 特有のものだと思います。

ah=1h を使って ch と cl にカーソルの上端・下端の Y 座標を指定することが
できるのもわかりました。デフォルトの画像モードではこの数値を変更すると
ちゃんとカーソルが太くなったりします。
ところが、画像モードを変更した状態では、カーソルは消えたままであり、また
カーソルの上下端の値をセットしても、何の変化もありません。さらに、ah=3h
を使うと、マウスカーソルの上下端の設定値を cx レジスタで見ることができる
のですが、ah=1h でセットしたにもかかわらず、cx レジスタは 0000h のまま
(デフォルトの画像モードではちゃんと ah=1h の結果が反映されています)。

Linux のフレームバッファではちゃんとカーソルが表示されているので、できな
いはずはないと思って、さらにムキになって情報を探しました。

# Linux フレームバッファ(vesafb.c 等)のソースはちょっと見ましたが、
# C プログラムはイマイチよくわかりません。

それで I/O ポート 3D4h/3D5h 経由で VGA のレジスタにアクセスできることが
わかりました。それでカーソルの上下端の値を書き換えました。──やはり、デ
フォルトの画像モードでは上手く行くのに、画像モードを変更すると上手く行き
ません。ah=3h の結果はやはり cx=0000h のまんま。

# と、このあたりで力尽きたという次第です。

参照にしたサイトの一部:
<http://www.ctyme.com/intr/int-10.htm>
<http://www.osdever.net/FreeVGA/vga/crtcreg.htm>

--
Masanori HATA

Yuuichi Naruoka

unread,
Mar 27, 2006, 10:40:33 PM3/27/06
to
 成岡@DTI静岡です。

 やはりかつてのV-TEXT関連の情報を入手するほが早道だと思います。Vectorの
DOS 用ソフトのハードウェア -> 画面設定その他の中にまだ情報がありました。
# 私もV-TEXTでの高解像度化に感動したくちです。Demacsを使いまくっていました。

--
成岡@DTI(yn...@jade.dti.ne.jp)

Masanori HATA

unread,
Mar 28, 2006, 4:32:25 AM3/28/06
to
成岡さん、フォローありがとうございます。

Yuuichi Naruoka wrote:
>  やはりかつてのV-TEXT関連の情報を入手するほが早道だと思います。Vectorの
> DOS 用ソフトのハードウェア -> 画面設定その他の中にまだ情報がありました。
> # 私もV-TEXTでの高解像度化に感動したくちです。Demacsを使いまくっていました。

情報収集過程で件の Vector のコーナーも見ていました。
<http://www.vector.co.jp/vpack/filearea/dos/hardware/console/vtext/index.html>
この辺りですよね。
パッと見た感じ、PC-98 関係のものらしきのが多そうだったのと、SVGA 800x600
を対象としたものが主なように思えたので、実際にはちゃんと試したわけではな
く、通り過ぎていました。

気合が回復したら、V-TEXT 関係を試してみたいと思います。

# 僕は「DOS/V」という用語が流行だった時代の PC/AT ユーザではなく(PC-98
# の MS-DOS(3.3 ぐらい)はほんの少し触れていましたが)、Win95 以降に
# PC/AT を使い始めて、その中で逆行的に MS-DOS に関心を深めていった口なの
# で、V-TEXT という用語自体、馴染みがなかったりします。(^^;
# Linux のフレームバッファの話なんかでも「かつて DOS の時代にはテキスト
# 画面を高解像度化するのが流行った時代があった」とかありましたが、要する
# に V-TEXT のことを指したコメントなのでしょうね。
# 用語の意味を Google で調べてみて、ふーん、という感じ。NEC の PC-98 帝
# 国終焉に至る萌芽だったのかしら。

--
Masanori HATA

junkeye

unread,
Mar 28, 2006, 1:08:45 PM3/28/06
to
なら31行計画がなじみあるのではこれもマップ配置かち合わないところ
だったらV-TEXTと同様にCRT[今は液晶か?]へもっと表示できたかもしれない

DOS/Vのカーソル[DOS]は特定の画面モードでしかブリンクしないだから
JPモードでカーソルはブリンクしていないと思う(記憶の彼方)
ブリンクはプログラム細工してSoftでやったり、画面切り替えたり、割り込み
で実現
ただ日本用SoftはNEC98が幅利かせていたし、英語圏DOSプログラムはANSI.SYS
使わず実現しているからJPで実行すると英語圏しか考慮していないからフリーズ
したように見えちゃうから一部のマニアしか使わなかったのかな?
日本語表示V-TEXTで拡張しないと無理だし公式Softではないから動作が
保障されていない[Softが個別に対応必要だった]

DOS/Vが出ても640MBに圧迫しているのにさらに日本語Fontでmem減少ではSoftが動ける


mem確保難しかったし
386になってEMBやEMSが無駄な領域確保に見えた[今はメモリマネージャ必須だし]

Win95になってNec98では見劣りしてきて、DOS/V機が日本語扱っても問題なく
表示できるしハードアーキテクチャを隠蔽に成功したから移植に手間掛かる
Nec98が足かせになった?

それでDOS/VのV-TEXTはVideoカードの解像度の限界に挑戦する
文字表示支援Softだから当時高価だったSVGA 800x600が説明対象でも、
現在ではもっと高解像度できるし文字ポイント小さくすれば読めなくなっても
全体把握できるからうろ覚えの記事箇所探すのに便利だったな
...

Yuuichi Naruoka

unread,
Mar 29, 2006, 12:12:14 AM3/29/06
to
 成岡@DTI静岡です。

"Masanori HATA" <ha...@iname.com> wrote in message news:e0avra$slk$1...@caraway.media.kyoto-u.ac.jp...


> 情報収集過程で件の Vector のコーナーも見ていました。
> <http://www.vector.co.jp/vpack/filearea/dos/hardware/console/vtext/index.html>
> この辺りですよね。
> パッと見た感じ、PC-98 関係のものらしきのが多そうだったのと、SVGA 800x600
> を対象としたものが主なように思えたので、実際にはちゃんと試したわけではな
> く、通り過ぎていました。

 なるほど、既にチェックはいれていたのですね。ちなみに当時はVESA 800x600 16色
モードと言うものがありまして、これはVGA用のメモリがあれば実質搭載可能なモード
だったので「全ての機種についていた」のです。だから話の中心になったのでしょう。
# 512KBのビデオメモリが必要。VGAは384KBで良いが当時のメモリチップの状況から
# わざわざ384KBにするメーカーはなかった。

 実は有料&現在入手可能かどうかわからないので前回は紹介しなかったのですが、
ソフトバンク社から「DOS/V スーパードライバーズ」「~32」と言う書籍が出ていました。
これには各ビデオチップ毎のドライバーが付属しておりまたV-TEXTに関する技術情報
も記載されていました(私は前者を買いました)。これがあれば話は早いのですが。
また日本IBMが(いまだに)売っている「PC-DOS 2000」にはIBM版V-TEXTドライバー
&技術資料がついていたりします。ちゃんとフリー版&ソフトバンク版とアプリケーション
実行レベルでの互換性はありますよ。
# 私はこのマイナーチェンジ前の「PC-DOS 7.0/J」を持っています。

> # Linux のフレームバッファの話なんかでも「かつて DOS の時代にはテキスト
> # 画面を高解像度化するのが流行った時代があった」とかありましたが、要する
> # に V-TEXT のことを指したコメントなのでしょうね。

 完全に昔話ですが(^^;、私は仕事でunixマシンを使ってその高解像度環境に感動し、
自宅でもなんとか「少しでも多くの文字を画面に表示したい」といろいろと遍歴した口
です。当初はハイレゾ98に手を出したのですがこれ、「DOS では文字数は変わらない
(後に31行モードの存在を知ったが)」「windows は(当時のマシンパワーでは)あまり
にも遅くて使い物にならない」とさんざんでした。その後X68000では「768x512 と言う
解像度で16dot fontが使える」「そこそこの速度のwindow systemがあり12dot fontも
使える」と言うことでしばらくこちらを使っていました。その後DOS/V の登場でAT互換
機に乗り換えたわけです。やはりVzエディターやDemacsが使えたのが大きいです。
丁度「DOS/V Magazine」誌創刊の頃で、いろいろな高解像度関連記事が掲載されて
V-TEXTの普及と同時進行のような感じでした。ちなみに当時の高解像度関連の記事
の魁としては「windows 3.1の英語版デバイスドライバーで日本語表示可能なものが
ある。これを使えばwindowsでは高解像度日本語環境を構築できる」なんてものも
ありました。更にHP200LX も使い始め「低解像度DOS/V」にものめりこんでいきました。

 実際当時は重宝しました。まだまだパソコンは高価な時代でしたが、社内に余って
いた286 AT互換機(EGA画面/日本語不可)をもらってきてV-TEXT化して日本語端末
として使ったりもしました。こうしたマルチスクリーン環境にも感動して、現在はThinkpad
X22の2画面モードで仕事をしています。

--
成岡@DTI(yn...@jade.dti.ne.jp)

Masanori HATA

unread,
Apr 1, 2006, 11:24:08 PM4/1/06
to
畑です。junkeye さん、成岡さん、フォローどうもです。

junkeye さん wrote:
> DOS/Vのカーソル[DOS]は特定の画面モードでしかブリンクしないだから
> JPモードでカーソルはブリンクしていないと思う(記憶の彼方)

そうなのですか。Linux のフレームバッファドライバでどのように実現している
か解析できれば一番いいのですけどね……(現状、僕にそこまでのスキルがない。
肝心の C 言語スキルに欠くのが痛すぎる)。

そもそも僕の要望としては、日本語モードは全く必要なくて、単に DOS ゲーム
用のちょっとした config.sys & autoexec.bat で起動メニュー画面を表示した
りするのを、高解像度でできれば嬉しいなという感じで(もちろんそういった作
業時に edit とかの基本コマンドを DOS の高解像度下で作業できるととても嬉
しい)。

これが、Linux のフレームバッファドライバだと、ちゃんと、VGA のハードウェ
アフォントのまま、カーソルだけがちゃんと表示されているんですよね。

カーソルだけのために V-TEXT で解決するというのは、本末転倒な方法なのかも
しれませんが、なぜか、はまってしまっています。Vector にあった、ChaN さん
(この方は有名なブートローダ MBM の作者でもあります)作の DSP4U.COM とい
うドライバでは、800x600 のモードでカーソルもちゃんと表示されています。
<http://www.vector.co.jp/soft/dos/hardware/se019409.html>

> ブリンクはプログラム細工してSoftでやったり、画面切り替えたり、割り込み
> で実現

今、必死になって逆アセンブルしてみたりして解析を試みています(基本情報技
術者試験の CASL 程度のアセンブリ言語知識しかないのに……)。

# 画像モードを変更するためのコードはたった 4 行のニーモニックで済んだの
# に、カーソルだけのために 800 行近いアセンブリコードを相手にしなくては
# ならないとは……。どうやら、コマンドのオプションの文字解析にコードの多
# くが割かれている模様なんですけどね。
# # 今から組込プログラマでも目指す?:p

成岡さん wrote:
> やはりVzエディターやDemacsが使えたのが大きいです。

そうなんですよ~(突然)。高解像度のテキスト専用画面だと、emacs どころか
さらに vi の良さがすごく痛感されるというか。僕は「萌え」という言葉は恥ず
かしくて使えないと思っているのですが(萌え系の方、スミマセン)、高解像度
テキスト画面だけはまさに「萌え」という感じかもしれないと思っています
(笑)。GNOME だとかの GUI 環境構築よりも「燃え」ています。

--
Masanori HATA

junkeye

unread,
Apr 2, 2006, 7:17:16 AM4/2/06
to
一番簡単な実現はKey入力を改善ツールかディバイスドライバ(ディスプレイ
ドライバ)でキー入力検知したら裏画面と一定時間ごとに切り替えれば実現
だけど高解像度は裏画面もてないと思うから実現不可
http://www.vector.co.jp/vpack/filearea/dos/util/shell/ksh/index.html

DOSコンソール出力(文字表示)サポートするのかBIOSのVideoまで
実現するかでProgram規模が変わる
USアプリはBIOSで文字表示しているのが大半だから大変だろう

それかAnsy.Sysでブリンク制御できたかな?[Nec98は標準で
組み込まれていたから色々な画面制御できた]
でも実現出来ていても、文字Program埋め込んでもDOS経由で
表示しないとエスケープシーケンス処理してくれない
eof

"Masanori HATA" <ha...@iname.com> wrote in message

news:e0njl9$kbg$1...@caraway.media.kyoto-u.ac.jp...

Yuuichi Naruoka

unread,
Apr 2, 2006, 7:56:36 AM4/2/06
to
 成岡@DTI静岡です。

"Masanori HATA" <ha...@iname.com> wrote in message news:e0njl9$kbg$1...@caraway.media.kyoto-u.ac.jp...

> そうなんですよ~(突然)。高解像度のテキスト専用画面だと、emacs どころか
> さらに vi の良さがすごく痛感されるというか。

 実は現在もmule for winを使っていますが何を隠そう、unix上のemacs の頃から
ずっとvip mode一筋です(^^;。

--
成岡@DTI(yn...@jade.dti.ne.jp)

0 new messages