タイトル/名前 | 更新者 | 更新日 |
---|---|---|
技術/歴史/FAQ/DOS/Vって結局OSの名前?規格の名前? | msakamoto-sf | 2010-04-07 13:48:29 |
技術/歴史/FAQ/キーボード・マウスコネクタの"PS/2"について | msakamoto-sf | 2010-04-07 13:47:33 |
技術/歴史/FAQ/EMM,XMS,DPMI...DOSの拡張機能略称大杉ワロス | msakamoto-sf | 2010-04-07 13:44:33 |
日記/2010/04/06/しょうらいのゆめ | msakamoto-sf | 2010-04-06 22:16:46 |
技術/歴史/DOS時代のメモリ管理(EMS,XMS周辺) | msakamoto-sf | 2010-04-05 13:14:24 |
技術/歴史/DOS時代,Windows初期のCPUとPC | msakamoto-sf | 2010-04-03 00:01:59 |
技術/歴史/zip,gzip,zlib,bzip2 | msakamoto-sf | 2010-04-03 00:01:24 |
日記/2010/03/31/歴史のスパゲッティコード | msakamoto-sf | 2010-03-31 23:17:30 |
C言語系/呼び出し規約/x86 | msakamoto-sf | 2010-03-27 17:19:17 |
日記/2010/03/27/「x86呼び出し規約」シリーズ一旦完結。 | msakamoto-sf | 2010-03-27 17:12:37 |
当初は1990年にIBMが開発した "IBM DOS Version J4.0/V"、およびその後の "MS-DOS 5.0/V" を含む互換OSの略称です。
DOS/V登場以前、日本ではNECのPC-9801シリーズが殆ど独占状態でした。というのも、日本のPC市場ではカナ漢字表示が必須条件で、NECのPC-9801シリーズではハードウェアレベルでカナ漢字フォントを搭載し、高速な日本語表示を可能としていたからです。OSもNEC側でカスタマイズしたMS-DOSを販売していました。CPUこそx86と互換のv30などを搭載していましたが、マザーボードの構成などハードウェアレベルでは当時世界標準だったIBM PCとは互換性のない、今で言うところのガラパゴス状態でした。
それを崩したのがDOS/Vで、PS/2で広まったVGAのスペックを活用し、カナ漢字のフォント情報をメモリ上に展開する、ソフトウェアによる日本語表示を実現しました。IBMは1991年には"PCオープン・アーキテクチャー推進協議会"を立ち上げ、ハードウェア仕様の一本化を推進し、結果としてPC/AT互換機とDOS/Vの普及に繋がっています。
"DOS/V"の"V"はVGAを使っているところから来たようです。
この辺の歴史を見てみると、2009-2010年現在進行中のAndroidやAppleのiPhone, iPadがガラパゴスと呼ばれた携帯市場に着々と進出している流れと重なって見えて面白いですね。
参考:
PC/AT互換機は1984年にIBMが発売した "PC AT" と互換性のあるマシンを言います。もっとも、現代のPC/AT互換機は互換性を考慮したものの、その後に登場した拡張や標準化を重ねており、当時の"PC AT"の面影は残っていません。
キーボード・マウスで使われているコネクタの "PS/2" というのは、1987年にIBMが発売した "IBM Personal System/2"(以下PS/2) から来ています。PS/2で登場したキーボード・マウスコネクタ、720kb/1.4MBフロッピーディスク、VGAはPC/AT互換機にも取り込まれ、現代でも生き延びています。
それ以前はどうなっていたかというと、グラフィックはEGAと呼ばれる規格で最大640x350ピクセル、マウスはシリアルポート、フロッピーディスクは5.25インチという時代でした。
PS/2で使われたMCAバスは結局PC/AT互換機には取り込まれませんでしたが、キーボード・マウスコネクタ、VGA、フロッピーディスクなどは順調にPC/AT互換機に組み込まれ、やがて登場するDOS/Vパソコンで一気に業界標準として広まりました。
今日使われているPCのお爺さん・お婆さんは"IBM PC 5150"、お父さんとお母さんにあたるのが"IBM PC AT"と"IBM Personal System/2"ですね。
ちなみにmsakamoto-sfは中学時代、EPSONの"PC-286"というラップトップを使ったことがありますが、シリアルポートのマウスを接続していました。ちなみに当時からトラックボールのマウスを自分で選んで購入していましたので、トラックボールマンセーなのは昔からです。
参考:
DOSはCPUやメモリ容量の増加と共に歴史を歩んできたので、DOSの拡張機能も段階的に増えていきました。2010年現在から見ると、一度に沢山の略称・拡張機能が出てくるので混乱します。
拡張機能は大きく2つに分類されます。
プロテクトモード登場後に出てきたのが、1MBを超えるメモリ空間にアクセスする為の "XMS", Windows 3.0 と共に登場したDOSアプリからプロテクトモードを使う為のクライアント・サーバーモデルを意識したDPMI の二つです。
メモリ管理やプロテクトモードはCPUとメモリ容量の発展と共に、少しずつ少しずつ段階的に拡張されていきました。今から見ると一度に沢山の方式があるように見えますが、当時の歴史を追うことで、上述のように大別され、あらましを掴めると思います。
詳細:
DOS時代、およびWindows3.x, 9x時代くらいまでのメモリ管理技術、特にEMSとXMS周辺のまとめメモです。
HMA, UMA, UMB, EMB, EMM, EMS, EMM386.{SYS|EXE}, QEMM, CEMM, XMS, HIMEM.SYS, LOADHIGH
これらの略語について、簡単に解説+まとめています。
DOSの初期~Windowsの初期(Windows3.1)位までの、CPU/IBM PC/DOS/Windows/NEC勢 の簡単なまとめ年表です。
お仕事絡みで、ZIPファイルの歴史が気になったので調べてみた。
前々から何となく「gzipとzlibとzipってどう違うんだろう」とは思っていたのだけれど、WindowsでLhacaやLhaplusなどのアーカイブソフト、あるいはXP以降ならOSの機能としてデフォルトでzip圧縮できるし、Linux/UNIXでも2-3回コマンドラインオプションを試行錯誤してmanページ見ればtar.gz作ったり逆にWindows上で圧縮したzipを適当に解凍できるので「ま、いっか。」で済ませてた。
でもせっかくなので、技術的な詳細には突っ込まないが、ざっくりとした歴史や流れをWikipediaを中心に追ってみた。
※殆どの記述をWikipediaに依っている為、本記事自体の信頼性はWikipediaと同等かそれに劣るものとして下さい。正確性は無保証、Wikipediaの寄せ集め。自分用のメモです。
簡単に紹介:
因果関係・事実関係を、時間軸逆向きに辿っていくのが・・・僅か40年程度の流れでも、これほど大変だとは思っていなかった。それも、比較的記録に残されていると思われるコンピュータの歴史という分野で。
「結果」は時系列で並べればお仕舞いだけど、「原因」を探るのが容易でない。いや、「結果」を揃える事すら難しい。
例えば"0x7C00"。この発祥を求めるにあたり、ビンテージコンピュータであったりIBM PCの歴史であったり、Altairに端を発するマイコンブームの盛り上がりとCP/Mの登場、S100バスの普及やシアトルコンピュータプロダクトの動き、IntelCPUの流れなど・・・いくつものカテゴリに分断されたカードを、自分なりに並べ直した。
"0x7C00"については、たまたま、SCP 86-DOS と IBM PC 5150 ROM BIOS INT 19h の境目を見つけられたので運が良かった。カードの境界線がはっきりと目に飛び込んできた。
「パーソナルコンピュータ」という限定された歴史ですら、すでにスパゲッティコードの様相を呈している。
しかし・・・絡まり合った点と線をほぐしていくのは、個人的には結構快感を感じてしまっている。
カードの並びを読み解くのには前後関係と文脈が必要で、ちょっとした探偵気分を味わえる。
別の見方をすれば、コンピュータの歴史は未だにカードだけが時系列にぶら下がっているだけともいえる。
カードとカードの繋がりを「物語り」に出来ていない。いくつかの人間ドラマについては成功しているが、特定の技術要素に焦点を当てた「物語り」はまだまだ不足しているのだろう。
もっとも現場の技術者にとって必要なのは、現時点で利用出来る「結果」であり、因果関係を「物語り」として理解する必要性は低い。
ここ暫く続けている昔の・・・DOS時代の技術調査は、単に自己満足以外の何ものでもない。
それでも、まだまだ謎(Mystery)は残っている。
どれも、今の時点での仕様がどうなっているのかを調べるだけでは不十分で、歴史を辿らなければならない(Trace)。これらの疑問全てに対して、「Why, When, Who」を見つけ出す事が出来るかは分からない。もし見つけることが出来たら"0x7C00"の時と同様、自分でそれを「物語り」にして語ってみる。
それまでは暫し、コンピュータ技術の歴史に対して "Mystery Tracing" を続けてみたい。
x86(80x86)CPUにおける各種「呼び出し規約」, "Calling Convention(s)" が実際にどのようなアセンブラコードになるのか延々と載せていくページ
各種コンパイラのバージョンについて。
Visual C++ 2008 Express Edition on Windows XP SP3
> cl Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. > link Microsoft (R) Incremental Linker Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved.
Borland C++ Compiler 5.5.1 on Windows XP SP3
> bcc32 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland (...) > ilink32 Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland (...)
OpenWatcom Compiler(16bit)
> wcl -v Open Watcom C/C++16 Compile and Link Utility Version 1.8 Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. > wcc -v Open Watcom C16 Optimizing Compiler Version 1.8 Portions Copyright (c) 1984-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. Error! E1138: Filename required on command line
OpenWatcom Compiler(32bit)
> wcl386 -v Open Watcom C/C++32 Compile and Link Utility Version 1.8 Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. > wcc386 -v Open Watcom C32 Optimizing Compiler Version 1.8 Portions Copyright (c) 1984-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. Error! E1138: Filename required on command line
OpenWatcom 環境変数(owsetenv.bat)
@echo off echo Open Watcom Build Environment set PATH=C:\WATCOM\BINNT;%PATH% set PATH=C:\WATCOM\BINW;%PATH% set INCLUDE=C:\WATCOM\H;%INCLUDE% set INCLUDE=C:\WATCOM\H\NT;%INCLUDE% set WATCOM=C:\WATCOM set EDPATH=C:\WATCOM\EDDAT
※一部16bitでのコンパイル時にのみ
set INCLUDE=%WATCOM%\h;%WATCOM%\h\win
によりヘッダファイルの読み込み位置を調整。
MinGWとgcc
MinGW-5.1.6 gcc.exe (GCC) 3.4.5 (mingw-vista special r3) MSYS 1.0
Linux(CentOS5.2)上のgcc, binutils:
gcc-4.1.2-42.el5 libgcc-4.1.2-42.el5 binutils-2.17.50.0.6-6.el5
書籍:
Webページ:
"thiscall"まで一通り出揃ったので、x86の呼び出し規約シリーズは一旦完結となります。
同じ呼び出し規約でも、コンパイラによって微妙なクセがあったりして面白かったです。特にGCCで、ESPをその関数内で使うであろう最小値まで最初にSUBしてしまって、それによりcallerスタッククリーン系でもESPを戻さずに済むよう調整していたのが印象的です。他にもOpenWatcomのデフォルトのwatcall呼び出し規約が独自路線で面白い。
ちなみに、こんなに呼び出し規約が乱立してるのってx86(32bit)ならではみたいです。実はPowerPCやARM、MIPSなど他のCPUアーキテクチャでは、呼び出し規約がCPU側のドキュメントに載っているようです。つまりCPU側の仕様に含まれていると考えられます。そのせいか、各アーキテクチャ毎に1種類の呼び出し規約、みたいな形でシンプルになっているようです。まぁ他のCPUって汎用レジスタがx86(32bit)の倍以上はあるのばっかりなんで、引数は殆どレジスタ渡しになってるみたいですね。
この後は、引き続き4-5月も他に習い事が出来てしまってますので、スピードを一旦緩め、IBM PC 5150からの系譜やDOSの拡張メモリ(EMSやらXMSなど)について簡単にまとめていこうかと思います。本当はそっちが先だったんですが・・・DOSの拡張メモリを調べていく内にIBM PC 5150に突き当たってしまい、ROM BIOSが読めるのでじゃぁ0x7C00の謎も解いておこうか・・・ともの凄い寄り道をしてしまっている訳ですが。さらに何でDOSに今更・・・かというと、呼び出し規約でOpenWatcomやTurbo C++ 4.0Jでのパターンを確認しておきたかったのでFreeDOS環境を構築したのは良いのですが、あらためてDOSに触ると「あれ、EMSやらXMSってなんなんだっぺさ」と気になりだして。「はじめて読む486」にもEMSの話は出てきていますので。
それが終わったらまた軌道修正をかけます。大きく以下の4テーマを消化していく予定です。
"Linkers and Loaders"、前から気にはなってるんですが・・・あんまり評判も良い方ではないので躊躇してるんですよね・・・。日本語訳版と、原著版、両方立ち読みできると良いんですが。
バイナリ解析やデバッグ系は実行ファイルのレイアウトや、OSの仕組みを良く理解していないと分かりづらい。なので一番最後がベターかも。実行可能イメージは、a.outやELF,COFFやOMF,PEなど実行ファイルのフォーマットについて調べる必要が出てくるが、それがOS上で展開される箇所についてはやはりOSの仕組みを理解していないと分かりづらい。ということで、こんな順序に。
もしかしたら、さらにこの前にアセンブラプログラミングについて色々お試しが入るかも・・・。
まだまだ長いなぁ。