トップページ⇒tech
981コメント294KB

DOSでプログラミング

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ハードウェアを直接叩くのはやっぱり楽しい!

DOSにおける開発について語りましょう。
0153141NGNG
>>152
>いや、当時は全部アセンブラで書いていたから・・・
(MASMの)アセンブラの構造体こそ望ましいものです。アドレスを指定して,
構造体メンバにアクセスできて「->」をうざがって刺されることもないです。
0154デフォルトの名無しさんNGNG
 
0155デフォルトの名無しさんNGNG
>148
PLMとは懐かしい。今でも昔のサポートで使うことありますが(w
gccでも直アドレス指定出来ますよ。
まあOSによっては、やっても怒られるだけですが(w
0156141NGNG
>>155
>gccでも直アドレス指定出来ますよ。
直アドレスを
char *base_adr= 0xd0000;
とできるのは当たり前で,お伺いしたかったのは
struct board_foo;
として作ったものを0xd0000に配置するような機能のことです。ほんとうにできますか。
>まあOSによっては、やっても怒られるだけですが(w
WindowsNT系でもOS標準でできるんで困りませんし,タイミングが10msec以上の
比較的シビアなものではリアルタイム拡張製品などを使うので問題ありません。
それにタイミングが絡んでくると,OSなんかの機能よりも「作り方・書き方」の方が大事だと思います。
特殊なハードのラッチ信号をPCからポチポチ制御するような困ったちゃんシステムとか。
0157デフォルトの名無しさんNGNG
>156
あれま(構造体)変数などの絶対番地ロケートでしたか。
gccで開発するCPUでROM化などしたことがないのでわかりませ〜〜ん(^^;
わざわざ実体を重ねなくても、構造体へのポインタで良いような
気がしますけどね。処理系の環境に依存させるのがいやですから。

怒られるはメモリアクセス例外などが出るだったんですが。
タイミングですか、OSの機能というより挙動を知ってないと
いけない、じゃないですかね。何がWinNT系のOS標準で出来る
だかわかりませんが、WinNT系でもリアルタイム拡張があれば
時間の保証が得られるらしいですね。
0158デフォルトの名無しさんNGNG
昔は知識不足その他で果たせなかった事を何となくしてみたくなって、
使わなくなってた古い9821にdjgppをインストールしました。
今更ですが、Undocumentedな機能(PEGCとか)を使ってみたり、
直書きや割り込み、DPMI等で遊んでます。

…何で今更はまるんでしょう(笑)
結局、DOSは嫌いじゃないんだよなあと再確認しますた。
0159デフォルトの名無しさんNGNG
>>156
> struct board_foo;
> として作ったものを0xd0000に配置するような機能のことです。ほんとうにできますか。

mapped I/Oなら
#define foo1 (*(struct board_foo *)0xd0000)
じゃダメなん?
0160141NGNG
>>159
>#define foo1 (*(struct board_foo *)0xd0000)
おお。新パターンです。ありがとうございます。
#defineだとデバッガが・・・ゲホゲホ
ちなみにこれは,実際にお使いですか?
0161デフォルトの名無しさんNGNG
mapped I/Oでドライバ書いたことはないけど、DOSでは使ったな。
0162デフォルトの名無しさんNGNG
>>161
VRAMの位置とか?
0163デフォルトの名無しさんNGNG
質問させてください。キーイン待ちして、何秒後かにタイムアウトする
ようなプログラムは作れるでしょうか?
キーイン待ちのときに割り込み28hが呼ばれるようになっていても、
この中からいきなりキー入力処理の後にジャンプなんてできそうに
ないと思うし(安全とは思えないので)。なんか手ってないもんでしょうかね?
0164デフォルトの名無しさんNGNG
>>163
while(kbhit()){
if(time >= basetime + 1000){
timeoutflag = 1;
break;
}
}
0165163NGNG
>>164
ありがとうございます。
そうですね、この方法がありますね。一点気になるのがCPUを喰いすぎる
かなと思うところです。(シングルタスクなので実際上の問題は無いと思い
ますが。。)
0166デフォルトの名無しさんNGNG
>> 163
割り込み28hの中でフラグ立てるようにして,
キー入力待ちする側でタイムアウトをカウントしながら
そのフラグを監視すればよいと思います。
もちろんそのフラグは利用側で事前・事後にクリアしてやらないといけません。
>> 165
> 一点気になるのがCPUを喰いすぎる
?CPUを食わないようになんてできませんよ。CPUは常に100%フル回転です。
nop連続にした方がバスへのアクセスも減って,動作しない内部ロジックが増えて
発熱・消費電力を抑えられるとか,そういう趣旨なんですかね。
それとも省電力対応CPUのお話ですか。
0167デフォルトの名無しさんNGNG
ビジーループってこったろ
0168デフォルトの名無しさんNGNG
>>167
MS-DOSでビジーループを気にする理由がわかりませんね。
タイマ割り込みでソフトタイマー作って,キー入力を割り込みで処理するんなら,
なんにも悩むことなんてありませんですよ。
自前で擬似マルチタスクでも作ってその上で何かなさっておられるのなら,
ビジーウェイトを気になさるのも理解できますが。
0169デフォルトの名無しさんNGNG
ごめんごめん。俺が悪かった。

>(シングルタスクなので実際上の問題は無いと思い
>ますが。。)

これすら読まずに屁理屈こねるような奴に言っても無駄だったな。
0170デフォルトの名無しさんNGNG
お互い様でしょうね。
0171デフォルトの名無しさんNGNG
>>170
同意。
0172デフォルトの名無しさんNGNG
Interrupt Listの最新って61?
0173デフォルトの名無しさんNGNG
61
ttp://www.ctyme.com/rbrown.htm
0174デフォルトの名無しさんNGNG
あげ
0175デフォルトの名無しさんNGNG
バッチファイルを作っているのですが
特定のアプリを強制終了させるコマンドがどうしてもわかりません。
どなたか教えてください。

OS環境はWindows2000Proです。

XPだと、taskkillコマンドが使えるらしく
Win2kならtasklist→killコマンドが使えるらしいのですが
MS-DOS上でそのコマンドを打ってみてもだめでした

ダメモトでバッチファイルでkillコマンドとtaskkillコマンドを書き込んでみましたが
当然だめでした。
0176デフォルトの名無しさんNGNG
>>175
killはWindows 2000 Support Toolsに入っている。
Windows 2000 Support ToolsはWindows 2000のCDに入っている。
0177175NGNG
ありがとうございます!!
0178デフォルトの名無しさんNGNG
カレントディレクトリのファイル名を全部大文字にするツールを
作ってるんですが、rename( 旧ファイル名, 新ファイル名 ) とやっても
全然変化しないんですよ。

DOS プロンプトから rename 旧ファイル名 新ファイル名 なら
いけるんですが・・・

Cで DOS のコマンドを実行するっていう命令ありませんでした?
10年前に使ったような記憶があるが思い出せない・・・
0179デフォルトの名無しさんNGNG
system
または
exec系関数
0180デフォルトの名無しさんNGNG
ここはいっちょディレクトリエントリを
直接書き換えるというのは、、、
0181デフォルトの名無しさんNGNG
>>178
一回ダミーファイル名に変換してからとか。
0182デフォルトの名無しさんNGNG
ありがとうございます。
さっそくプログラム中・・・
メインプログラマーがウンコすぎて仕事が殆どオレに
まわってきて死にそうです。
0183デフォルトの名無しさんNGNG
とりあえずダミーファイル名に変更することで対応できました。
ありがとうございました。
ていうかメインプログラマーまだ出社してこないよ・・・
もう○んでクレ。
0184デフォルトの名無しさんNGNG
おそらく彼は今頃コタツの中で安らかに・・・
0185デフォルトの名無しさんNGNG
おならを死んだ
0186デフォルトの名無しさんNGNG
すみません。
時間を取得してファイル名にセットしたいのですが、
TIMEコマンドだと:が混じってしまい設定ができません。
何か良い方法は無いでしょうか?
よろしくお願いします。
0187デフォルトの名無しさんNGNG
age
0188田宮良子NGNG
おまえ、混じっているな
0189ツソイチNGNG
混じってるって、どぼぉいうことだよ、
みゅぅぃぃぃぃぃぃいいいぎゅぅいいいいいいいいいいいいぃぃぃ!!!!!
0190は ◆cplnFO9T0I NGNG
ネットワークプログラマに朗報です。
閉鎖されてたかと思われたTEENのサイトは、ただ単に鯖のHDが飛んでただけなので、
(マシントラブルとかかれていますが、どう考えたって、消失するといったらHDが飛んだとしか考えられません。)
仮運用の状態にあるそうです。みなさん、これからもがんがってください。
ttp://www.pc88.gr.jp/~teen/
0191デフォルトの名無しさんNGNG
>>190
>(マシントラブルとかかれていますが、どう考えたって、消失するといったらHDが飛んだとしか考えられません。)

さて、と。
0192デフォルトの名無しさんNGNG
>>6
0193デフォルトの名無しさんNGNG
こんなサイトを見つけました↓

http://www.command.com/

ここのスレの住民なら笑えるかも。
0194デフォルトの名無しさんNGNG
ttp://command.com/
にして、www.を省略したほうがそれっぽいよ。
0195は ◆cplnFO9T0I NGNG
2ちゃんねるブラウザを作ってるんですが、
お気に入りを読み込む部分は動的リンクにしたほうが良いでしょうか?
回答願います。
0196デフォルトの名無しさんNGNG
スレ違い
0197デフォルトの名無しさんNGNG
>>196
そうなのか?
0198デフォルトの名無しさんNGNG
Web Boy を参考にせよ
0199デフォルトの名無しさんNGNG
>>197
だってどう見ても195はDOS用の2ちゃんねるブラウザを作っているようには見えない
0200は ◆cplnFO9T0I NGNG
>>198
参考にしろといわれてもねぇ。
>>199
何故に?
コンポーネントをEXEにして分離したほうがいいのか聞いてるんですけど。
0201デフォルトの名無しさんNGNG
>>200
それは動的リンクとは言わない。
0202デフォルトの名無しさんNGNG
オーバーレイとかあったなぁ(しみじみ
0203デフォルトの名無しさんNGNG
思うがままに作って、完成させてから要望聞いて対応すりゃいいじゃん。
要望が出そうなところが分かってるなら、最初からそういう風に設計できるだろ?
ただ、DOS用なら、俺としては実行部はファイル1つの方が分かりやすい。
>>195の言う「動的リンク」が何を指すのか、>>200でいよいよ分からなくなったが…
0204は ◆cplnFO9T0I NGNG
>>201
似非動的リンク
>>203
わかったYO!
ともかくそこの部分を変更可能なように作っておくということで。
ともかく、ひとつのEXEで作ってみる。
0205デフォルトの名無しさんNGNG
>>204
似てもいない。
0206デフォルトの名無しさんNGNG
とりあえず、がんがれ。
0207デフォルトの名無しさんNGNG
消えた「は」
0208は ◆cplnFO9T0I NGNG
生きてますよ。
0209デフォルトの名無しさんNGNG
昔から疑問だったんだけど、>>143にあるようなVRAMアドレスって
DOSエクステンダを使うとどうなるんですか?
アドレス変わっちゃうのかな?
0210デフォルトの名無しさんNGNG
DOSエクステンダは1MB以下のメモリはアドレスが変わらないように
マップしてくれます。その代わりぬるぽが検出できないわけで
0211デフォルトの名無しさんNGNG
pharlapのdosエクステンダはvram用セレクタがあるよ
0212デフォルトの名無しさんNGNG
前に他のスレで伺ったらスレ違いとのことでしたので、
こちらでお尋ねしてもよろしいでしょうか?

VCでCUIのプログラムを作ったのですが、
Windows(XP/200/98等)内のDOSプロンプトでは動作するのに、
Windows98の起動ディスクで起動したDOSプロンプト内では動作しません。
Win32APIは使っていません。
調べた範囲ではSTUBが動作してしまっているようなのですが、
どうすればこの場合STUBではなく通常動作させられるのでしょうか?
0213デフォルトの名無しさんNGNG
最近のVCはDOS用プログラム作れないからCUIでビルドしても無理
DOS対応コンパイラを探せ
0214デフォルトの名無しさんNGNG
TurboC++とかだな
0215212NGNG
>>213 , >>214
ありがとう
0216デフォルトの名無しさんNGNG
Digital MarsとかもDOS吐けるでしょ。
0217デフォルトの名無しさんNGNG
お分かりになる方がいらしたら教えていただきたいのですが・・・

MASMver5で作ったマンデルブロ集合計算プログラム( .387ディレクティブ
で有効にした浮動小数点命令を使用してます)なんですが、IBMのDOS5J
の下で実行させると45分もかかるのに対して、WIN98SEのDOS窓では
4分程で終了します。どうしてこんなに実行時間に差がでるのか?と不思議に
思っています。何が原因でしようか。
CPUはATHLON2000+で、マ・・集合計算プログラム中でEMMS命令により
MMX命令を禁止させてます。(EMMS命令を追加してやらないと浮動小数点
命令が正常に実行されません)

よろしくお願いします。。
0218デフォルトの名無しさんNGNG
SEは優秀だから
0219デフォルトの名無しさんNGNG
>>217
計算だけ? 描画もしてる?
DOS窓はフルスクリーン?
0220217NGNG
>>219様
レス、ありがとうございます。
DOS窓はフルスクリーンで、計算と同時に描画も行っています。
0221デフォルトの名無しさんNGNG
>>220
試しに計算だけで比べてみるといい。
DOSの描画はVGA互換モードだから遅いのかな。
0222217NGNG
>>221様
ありがとうございます。
ご指摘のようにDOSでの描画は、BIOSのサービス(ファンクション番号
0CH)を利用しているため遅いです。正確に測ったことはありませんが、
単純に点を打っていくだけでも、400*400の面いっぱいを描くのに数十
秒位かかったように記憶しています。
0223デフォルトの名無しさんNGNG
XPでLSI-Cを使おうとすると、uasgeが空行になっちゃうんですが
対処法あります?
0224デフォルトの名無しさんNGNG
>>223
状況がよく分からんのでソース貼ってくれ。
実行結果も。
0225デフォルトの名無しさんNGNG
>>224
いやただたんに

$lsic

(謎の改行(usage分?))

$

こんな感じなんですよ
0226デフォルトの名無しさんNGNG
一回command.com起動汁

XPってDOSコマンドが表示されない時があるんだよな・・・
0227デフォルトの名無しさんNGNG
NTVDMとやらが悪さしているようでガスね
毎回command.com立ち上げるのめんどいんでこれを機にDOSBOX入れまス
0228デフォルトの名無しさんNGNG
DOSBOXってこれ?
http://dosbox.sourceforge.net/
0229デフォルトの名無しさんNGNG
sou
0230デフォルトの名無しさんNGNG
ハードウェアを直接叩くのが面白いと聞いたので、パンチしたら壊れました。
どう責任とってくれるんですか。楽しくありませんでした。
0231デフォルトの名無しさんNGNG
スレ違い
http://pc5.2ch.net/test/read.cgi/tech/1090324689/
0232デフォルトの名無しさんNGNG
最近はハードウェアよりもソフトウェアに対してムカつくことが多いです。
ソフトウェアを直接叩く方法を教えてください。
0233デフォルトの名無しさんNGNG
>>232
右斜め45度から勢いよくやれ。
0234デフォルトの名無しさんNGNG
>>233
本当だな?
0235sageNGNG
諸先輩方に質問があります。
大変、厨房な質問ではありますがどうかよろしくお願いいたします。

(1).EXEファイルの先頭512バイトのリロケーション情報領域の事ですが、先頭1バイト目の『ファイル識別子』の種類と意味を知りたいのですがどなたかご存知でしょうか?
(2).EXE/.COMファイルのリロケーション領域について詳しく紹介されているHPがあれば教えていただきたいのですが。

現在、勉強中なのですが参考文献も減ってきており四苦八苦しております。
どうか宜しくお願い致します。
0236235NGNG
>(2).EXE/.COMファイルのリロケーション領域について詳しく紹介されているHPがあれば教えていただきたいのですが。
(2).EXEのリロケーション領域と.COMのPSP領域について詳しく紹介されているHPがあれば教えていただきたいのですが。
の間違いでした。スミマセン。
0237デフォルトの名無しさんNGNG
MSDOS拡張機能セットを買え
0238デフォルトの名無しさんNGNG
昔はプログラミングの資料がOSに付いてたんだったな
つーかマジな話拡張機能セットってまだ買えるの?
0239デフォルトの名無しさんNGNG
MSDNに載ってないか?
0240デフォルトの名無しさんNGNG
ここにある資料ではどうよ?
漏れは「リロケーション領域」の意味がわからんので自分で調べてくれ。

ttp://www.wotsit.org/
0241デフォルトの名無しさんNGNG
>>235
DOS PSP」でググッたら、PSPの説明ありますた。
超カメレスで、スマソ

ttp://www5c.biglobe.ne.jp/~ecb/assembler2/7_5.html
0242235NGNG
皆さんレス有難う御座います。

>MSDOS拡張機能セット
・・・資金が不足している為、購入不可です。

>MSDN
そういえば、載っているかも知れませんね。
調査不足でした。

>>240さんから紹介して頂いたページは最高にいいですね。
ピンポイントで知りたい情報が載ってました。
その他にも色々なファイル情報があり素晴らしいページですね。
お気に入りに登録しときました。
本当に有難う御座いました。

もうちょっと精進しときます。
0243デフォルトの名無しさんNGNG
>>235
DOS5Aのマニュアルp295,296
「EXEファイルの構造と・・・」

http://uploda.net/cgi/uploader2/index.php
ここに飛んでupload25235.jpgをクリックしてちょ
0244デフォルトの名無しさんNGNG
>>233
せっかくカラー化できると思ったのに白黒に逆戻りになってしまうではないですか?
0245デフォルトの名無しさんNGNG
VGAの同期信号を一時的に停止させるgenericな方法ってありませんか?
0246デフォルトの名無しさんNGNG
VGA コントロールレジスタ」でググッたら、こんなのがありますた。
         ↓
http://community.osdev.info/index.php?VGA

0x03c3:VGA動作許可レジスタ(8bit、W)
bit0:VGA動作許可(1:動作許可)
bit1-7:リザーブ
このレジスタいじったら、どうなるんだろ?
0247デフォルトの名無しさんNGNG
PCIバスボードの割り込み関係の話なんですけど、
割り込みを使用するボードを1枚挿してBIOS上で
単一のIRQ(例えば5)のみを使用するように設定して
そのベクタを書き換えた場合の割り込み処理は問題ないのですが、
複数のIRQ(例えば5と12)を使用するように設定した場合に
ベクタを書き換えた後、割り込みが発生すると
スタックオーバーフローが出て暴走してしまいます。
勿論IRQを複数使用できる設定にしていても実際使用している
IRQは1つですし、実行ファイルも同じものです。
割り込み処理の記述等で何か注意する必要があったりしますか?
0248デフォルトの名無しさんNGNG
>>247
「スタックオーバーフローが出て暴走してしまいます。」

スタックポインタのチェックコードが有効のままになっていて、
割り込みルーチンであぼんしているわけじゃなくて、本当にスタックを
食いつぶしているってことですか?
0249デフォルトの名無しさんNGNG
interrupts?で追い確認?
0250デフォルトの名無しさんNGNG
>>248
割り込みを発生させた途端、

Internal Stack Overflow
System Halted

のようなメッセージが画面に表示されて
止まってしまうような状況です・・・。
このメッセージ自身DOSで出してるので
恐らく実際スタックを潰しちゃってると
思うんですが・・・。
0251デフォルトの名無しさんNGNG
>>250
割り込みの発生ペースは上がってますか?
config.sys で STACKS=64,512 とか指定してみるとどうでしょう。
0252デフォルトの名無しさんNGNG
>>251
割り込みトリガそのものは外部のスイッチから与えてるので
発生している割り込みは1回だけだと思います、多分。
スイッチのチャタリングが発生してる可能性もあるかも知れませんが、
上手くいくパターンでは1回の割り込みしか発生していませんでした。
しかし駄目なパターンの場合はその1回目で例のメッセージが
出てしまうんですよね・・・・。
config.sysの変更については今その環境が無いので
試せませんが明後日に試してみようかと思います。
■ このスレッドは過去ログ倉庫に格納されています