1read 100read
2011年10月1期プログラム懐かしのMS-DOSプログラミング
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
C#終了のお知らせ
【肥大化】C++ を見捨てたヤシ 2人目【複雑化】
C系列って欠陥言語だろw
D言語 Part28
懐かしのMS-DOSプログラミング
- 1 :10/04/21 〜 最終レス :12/01/10
- mov dx,offset msg
mov ah,9
int 21h
mov ax,4c00h
int 21h
msg db '懐かしのDOS時代のプログラミングについて語ろうぜ',0dh,0ah,'$'
- 2 :
- DOS2.11の頃はDOS自体にmasmが付いていた。
Microsoft Cは98,000円もした。
29,800円で発売されたTurbo-Cにみんな飛びついた。
無料で配布されたLSI C-86試食版が大活躍してくれた。
- 3 :
- code segment
mov dx,offset AI_chan
mov ah,9
int 21h
mov ax 4c00h
int 21h
AI_chan:
msg db 'このスレッドは天才pンジーアイちゃんが立てたものといわれています。",10,13,'$'
msg db '関係者以外のカキコはご遠慮ください',10,13,'$'
code ends
- 4 :
- 2パスか3パスのコンパイラで
Phoenix Cとかなかったっけ?
- 5 :
- >>2
家にMSC/C++あるけどマニュアルとリファレンスが何冊も入っていて吹いた
箱でかすぎw CDもネットもない時代は大変だったんだなぁと
- 6 :
- MS-DOSプログラミング、って言うぐらいならDEBUGコマンドでやろうぜ
今でも何気に搭載されてるし
- 7 :
- 今でもsymdebは手放せない
- 8 :
- DOSプログラミングは青春の思い出だな
- 9 :
- >>6
edlinも今も残ってるんだよね。
DOSの生みの親Tim Paterson氏への敬意なのかな。
- 10 :
- うちはQuickCだったな。
これでCをある程度覚えた。MS-Cと互換性が高かったのも良かった。
日本語コメント付きのサンプルソースは実に役立った。
DOSの時代にCを覚えておいて正解だったと思う。
今のWindowsプログラムは複雑で何が何だか分からない。
SYMDEBは便利だったなー。
これを弄り回して8086の機械語を覚えた。
なるほど8086は2つの数値を組み合わせたアドレスでMBをアクセスするのか、とか。
- 11 :
- 誤) MB
正) 1MB
- 12 :
- このスレッドは天才pンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
- 13 :
- int 21h
の代わりに
call psp:50h
でもDOSを呼べたよね。
- 14 :
- >>2
LSI-C86試食版が安定してきたのはDOS3.1の時代以降だね。
初期は特に、sscanf()のバグが多くて指摘するのも大変だったw
- 15 :
- Cから覚えたんだけど、アセンブラのことがちょっと分かってくると、
ライブラリ関数が既に用意されてるものであっても、
わざわざintdosとかで得意げにCからDOSファンクションを呼んだりしたもんだ。
- 16 :
- Cの標準ライブラリを使わずに
敢えて似たようなものをアセンブラで自作して
それだけ作ってプログラムしたりな
- 17 :
- プログラムの終了はINT 20HでもOK。
- 18 :
- 今ならDOSBOXとかあるから、趣味ならあえて時代に逆行してもいいと思う。
どの環境でも動くからね。
- 19 :
- ファンクション31hで常駐終了するけど、
常駐させたプログラムを開放するファンクションがないので
あれこれ探したもんだ。
- 20 :
- 今のWindowsプログラムより、DOS時代の方が難しく感じるものの代表だな。
>TSR
- 21 :
- LSI-C86はコメントが標準のしか使えないのが今にしてみるとめんどい
その代わりネストが可能だけど
- 22 :
- >>20
常駐するだけなら難しくないだろ。Biosフックも今で言うAPIフックみたいなもんだし。
そんなことよりも、常駐アプリでどうやってメモリを確保するかの方がw
PC-98限定で、裏VRAMをバッファに使う猫なんて常駐物があったけど、
同じく裏VRAMをバッファに使う一太郎とバッティングするもんだから
「ウイルスだ」なんて騒ぐマスコミまで出てくるなんて楽しい時代だったね。
- 23 :
- 常駐開放=ベクタ復帰とメモリ開放
- 24 :
- あの時代は、どうやれば1byteでも減らせるかを考えてた。
- 25 :
- CP/M互換のシステムコール方法もあったよな。
CL=ファンクション番号でcall 0005hだったかな。
- 26 :
- CodeViewなんてのもあったね。
持ってたけどPC-98用なので今では使えない。
結局LSI-C + symdebの世話になってる。
- 27 :
- Programer's workbench
- 28 :
- DOS時代は (今も?) 統合環境なんて使わないのが常識でした。
- 29 :
- VzがあればIDEなんて不要
- 30 :
- 俺はmifes派
- 31 :
- Ezカスタマイズ版やNitEmacsカスタマイズ版を使っていたのはいい思い出。
- 32 :
- EMSとかXMSとかの規格が出て来て、DOSプログラムのキャパが増えた時期が楽しかった。
- 33 :
- 32bit DOS Extenderを使ったら、セグメントの呪縛から解放されて、天国にたどり着いたかのような気がした
- 34 :
- メモリモデルなんて言葉が懐かしい。
スモールでもかなりのことが出来たな。
- 35 :
- しかしスモールモデルのみとは言え、他に何の制約もないコンパイラを無償配布した
LSIジャパンの功績は大きかったと思う。
- 36 :
- LSI-C試食版に付いていたcppとmakeとlccのソースは何度も読み返した。
やはりプログラミングを覚えるには、他人の書いたある程度の規模のソースを読むのが一番。
- 37 :
- TURBO C Ver1.5つかってたときは、テキスト表示に
cprintf()やら、gotoxy()やら使って
ドラクエのメニューごときみたいなん作ってたなぁ
- 38 :
- TCのconio.hって思いっきり98依存の関数が多かったな。
text何たらとか。
- 39 :
- symdebよりdebugの方が使い出がある。
バッチコマンドからバイナリ作るとか。
ハードディスクのダイレクトアクセスとか。
- 40 :
- < バイナリ
---
> バイナリファイル
- 41 :
- >>35
βテストさせられたとも言える。標準ライブラリの出来が今ひとつだったからね。
>>38
IBM-PC依存の関数も山ほどあったような。
>>39
なんと言っても圧巻はX-ISH。
バイナリファイルのエンコーダ/デコーダであるISHの初期バージョンはバッチファイルによる実行モジュール作成方式で配布された。
# 今と違って、標準では転送ツールもデコーダがないから先ず最初にデコーダを作る必要があった。
# 今ならWebブラウザがバイナリファイルを受信できるしメールクライアントも添付ファイルのデコードはできて当然だけど。
- 42 :
- >>39
symdebで W100 2 0 1 やリダイレクトもできるぞ
(でも意味判らず試すなよ)
- 43 :
- >>41
DOS/V用Turbo-Cはお目に掛かったことがないな。日本でも売られてたの?
- 44 :
- >>43
DOS/V用じゃなくて、IBM-PC/AT互換機用だよ。DOS/V用は記憶にないけれど、あったとすれば日本専用でしょ。
# DOS/V自体が(事実上)日本専用なんだから。
- 45 :
- 失礼。当時はAT互換機=DOS/V機だったから。
で、ということは英語版?
- 46 :
- マニュアルが日本語になっていて一部メッセージが日本語になっただけの翻訳版だったかな?
もう忘れたよ……
- 47 :
- Turbo-CのAX版かもね
- 48 :
- TCのマニュアルは物凄く親切な記述だったように覚えてる
- 49 :
- あの頃のBolandはよかったな
ライブラリのバグも少なかった気がする
パソ通の時代から、こういう「おやじ御用達スレ」はなくならんなw
- 50 :
- 98用のTurbo-Cに入っていたpc98mouseという関数。
「Microsoft形式のマウスドライバには対応していません」
アンチMSぶりが良く現れてたな。
- 51 :
- 98用DOS5.0が出たとき、NEC自身も、mouse.comはDOSシェル専用だから、
市販アプリでは使えないと明記していた。
でも実際にはMS形式のマウスに対応したアプリも多かった。
- 52 :
- NEC版、MS版マウスドライバの見分け方
マウス初期化 (int 33h ax=0) のbxの値で見分けられる。
MS版はbxにボタンの個数が帰ってくるが、NEC版は何も返さない。
予めbx=0としておけば、コール後bx==0がNEC版ドライバ。
- 53 :
- マウス使うのってドライバ経由が普通だっけ?
俺はなんかI/O叩いて使ってたような気がするが
さすがに記憶が曖昧すぎて覚えていない
- 54 :
- マウスドライバやEMSドライバは、一見風変わりなドライバだ。
組み込み後はDOSを経由せずにアプリから直接ドライバとやり取りする。
- 55 :
- >>54
???
- 56 :
- 多分、普通のデバイスだと
アプリ -(int 21h)- DOS -(デバイス呼び出し)- デバドラ
だけど、マウスやEMSは
アプリ -(int xxh)- デバドラ
でアプリとデバドラが直接やりとりすることを挙げてるのだと思う。
- 57 :
- TCのインラインアセンブリは擬似命令だろうが何でも使えるので
おおっと思ったが、実はアセンブリソースを吐き出して
コンパイラはノータッチ、後はアセンブラ任せだった。
つまり、インラインアセンブリを使う場合アセンブラが別途必要。
(廉価版のTurboCには付いてなかったんだよ)
- 58 :
- xor ax,ax
- 59 :
- >>58
はるか大昔、それを得意気に使いまくってた上司に sub ax,ax を見せたら、
「そんな分かりにくいコーディングする奴があるかバカヤロォ」と怒られますたw
- 60 :
- >>59
得意も何も、今でも使われている常套手段じゃないか。
怒るのは問題かもしれないが、フラグに影響を与えまくる減算を使うのは間抜けだろう。
- 61 :
- はじめはxor使ってたが、ほとんどのCコンパイラがsub使ってたので途中からsubに変えた。
xorでもフラグは動くんじゃね?
- 62 :
- >>61
「ほとんど」をkwsk。
このスレなんだから、まさかとは思うがx86用じゃないなんて言わないよね。
- 63 :
- >>60
今でこそ常套手段だが、大昔のヘボPGには思いも及ばぬテクだったんだよ。
年代を言うとまた馬鹿が荒らすから言わんが。
そもそも、これを使う文脈でフラグに影響がどうたら言う時点で(ry
- 64 :
- DOS時代からMSCはSUBだったのは覚えている。
アセンブラのソースではよくゼロクリアにXORが使われてたが
8086だったらクロックや命令長で有利とかは無いはずだから、
Z80とか8080時代に何かあったのだろうか。
- 65 :
- >>64
8080/Z80だと命令長はXORもSUBも1バイトだし、クロックも最小だった。
でもなぜか、周りではみんなSUBじゃなくXORを使ってた。
もちろん、>>60の言うようなフラグどうたらの問題ではない。
(フラグを変えたくないようなレアケースではMOV命令を使ったから)
多分…小学校低学年で習うSUBに比べてXORはずっと高度な概念だから、
それを使う方が何となく「カッコ良かった」のかも知れないね。
- 66 :
- 一応、理屈の上ではxorの方が
各bitの出力が他のbitに影響を与えない分
回路的には簡単になるはず。
だからといってクロックや消費電力に差がつくかというと
うーんという感じなのだけど。
- 67 :
- このサイト面白いよ。
ttp://hp.vector.co.jp/authors/VA003988/asm.htm
- 68 :
- ゼロクリアに xor 使うのは、決まり文句みたいなものだからね
subより分かりやすい
- 69 :
- subの方がxorより複雑そうなイメージだから
何となくxorの方を使ってしまう
まあ実際速度的に差はないんだろうが
- 70 :
- lsic86試食版はマニュアルがコンパクトにまとまっててよかったな。
標準ライブラリとかあのテキストファイル一枚でそうとう勉強になった。
- 71 :
- x86系なのに、引数渡しにレジスタを使うのは止めて欲しかった
- 72 :
- 影の薄かった命令・・・LEA
- 73 :
- アセンブリプログラマにはたいへん有難い命令だが
- 74 :
- 8086には、独立したNOP命令がない。(8080にはる)
NOPニモニックは、単にXCHG AX,AXの別名。
まぁ、実用上それで別に問題ないわけだが…
他にも、こういうCPUはたくさんあるんだろうね?
- 75 :
- jmp $+2がnop代わりとか。
- 76 :
- mov ax,axとかcmp bx,bxとか、使い道のない命令がいくつかあるね。
Z80だとLD (HL),(HL)はHLTに割り当てられていた。
- 77 :
- LEAは頻出じゃね?
- 78 :
- jmp short $+2で時間稼ぎ良くやったな
- 79 :
- NOPは3クロック、ショートJMPは11クロックくらいあったっけ確か。
- 80 :
- 影の薄かった命令・・・LDS、LES
- 81 :
- おまいの頭皮のようにな
- 82 :
- どうせ面の皮は厚いんだろうけどねw
- 83 :
- Win95の頃になっても、config.sysにfcbsなんてパラメータがあるのに驚いた。
その時代までFCBファンクションなんか使っていたソフトあったのかな。
- 84 :
- int 29hって何だろう・・・
int 2ehって何だろう・・・
DOSの非公開機能って結構あったよね。
- 85 :
- ウイルスにフックされたのか?
((((;゚Д゚))))ガクガクブルブル
- 86 :
- と思ったら簡単に情報が見つかった(汗)
INT 29h 1文字出力
INT 2Eh DOSコマンド実行
- 87 :
- つ Interrupt List
ttp://www.cs.cmu.edu/~ralf/files.html
昔DLしてよくお世話になったけど、今じゃWebでも見れるんだな。
ttp://www.ctyme.com/rbrown.htm
検索できて便利…と思ったら、検索が動かんorz
- 88 :
- MIFES
- 89 :
- 俺はVz+VJE(or WXP)派
- 90 :
- Vz+WXII
- 91 :
- DOSエクステンダー(苦笑)
- 92 :
- emm386.sys
HIMEM.SYS
- 93 :
- mifes派
- 94 :
- emm386はexe
- 95 :
- .sysの頃もあった。
- 96 :
- デバドラとしても、TSRとしても、外部コマンドとしても使える。
そんな器用なプログラムが流行ったな。
- 97 :
- kwsk
- 98 :
- Vz Editor のことか!!
- 99 :
- WinXPだが、Vzは今でも時々使ってるよ。
あの軽さと独特の使い心地は、そう簡単に手放せるもんじゃない。
- 100read 1read
- 1read 100read
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
C#終了のお知らせ
【肥大化】C++ を見捨てたヤシ 2人目【複雑化】
C系列って欠陥言語だろw
D言語 Part28