Windows 7の中に眠る 42年前の遺伝子についての個人的な考察

Windows 7の振る舞いをよく観察すると 42年前の 8bit時代のOS CP/Mとの互換性を残していることを理解できます。 Windows 7の中に残る CP/Mの遺伝子についての個人的な考察です。
プログラミング 運用 システム管理 Windows CP/M マイクロソフト 互換性 システムコール
83
ヒト科の幼虫 @yamate_yokohama
昨日 勤務先で windows 7上において “prn.txt”というファイルを作成できないと言っている人がいた。 実は prn だけではなく con とか nul とか aux というファイルも作成できない。 pic.twitter.com/K9HOLyiemp
 拡大
ヒト科の幼虫 @yamate_yokohama
いまどきの若いもん は シェルと コマンドラインというものをご存知でない。 prn , con , nul そして aux はファイルではなく それぞれ\dev\prn \dev\con \dev\nul \dev\aux などのデバイス名なのである。
ヒト科の幼虫 @yamate_yokohama
これは 1983年にMS-DOS 2.*がリリースされたときに 同じマイクロソフトのXENIX286から影響を受けて導入された概念である。 MS-DOS時代の遺伝子である。
ヒト科の幼虫 @yamate_yokohama
ちなみに Windows 7には 1974年にリリースされた 8080用のOS CP/Mの遺伝子も残っている。 画像を見ていただきたい。 pic.twitter.com/IFHztTD0TV
 拡大
ヒト科の幼虫 @yamate_yokohama
****:0000 に “CD 20” と書かれている。 これは アセンブラの “INT 0x20” つまりプロセス終了のコードである。
ヒト科の幼虫 @yamate_yokohama
CP/M時代には “CALL 0”を実行して 、プロセスを終了する仕組みになっていた。 つまり Windows 7は 42年前のCP/Mと アセンブラレベルでの 互換性を一部残している。
ヒト科の幼虫 @yamate_yokohama
****:0080 には “FOO.BAR”と書かれているが 、これは起動したアプリケーションに引数を渡す FCB ( ファイルコントロールブロック)と呼ばれる領域である。 これも CP/Mとの互換性を維持している。

CP/Mの場合 メモリイメージ上のコードは 0x0100 から始まるので FCBも128バイトに制限される。
MS-DOSでも COMモデルにおいて この形式を引き継いだので 、原則としてコマンドラインは128文字に制限された。

ヒト科の幼虫 @yamate_yokohama
いわゆる void main(int argc, char *argv[]) を書けば FCBに書かれた引数が得られる。
ヒト科の幼虫 @yamate_yokohama
Windowsは 、Windows2000を最後に 、POSIX互換システムコールを捨ててしまったが 、 どういう方針なのかはわからないが いまだに42年前の8bit時代の CP/Mの遺伝子を残している。

ついしん

人間の遺伝子の中にも 細菌のような生物と共通する遺伝子があるのと似たような事情か。

2:10 AM
Thursday, March 10, 2016 (JST)
Time in Yokohama, Kanagawa Prefecture

ヒト科の幼虫 @yamate_yokohama
食事休憩。 Windows 7と 42年前の CP/Mの関係に これほど多くの人が興味を示すとは思わなかった。 最近はスマホしか持ってないという人もいると思うけど、スマホにも シェルと コマンドラインがあるので遊んでみてください。 pic.twitter.com/vo4UYZP4EA
 拡大

コメント

ヒト科の幼虫 @yamate_yokohama 2016年3月10日
Androidにも シェルと コマンドラインがあるので 、スマホしか持って無い人も遊んでみてください。
T.Nakagawa @nora1962 2016年3月10日
「MS-DOS は UNIX からスペシャルファイルの概念を導入したが、これをデバイスファイルと呼んだ。ごく初期のMS-DOSはディレクトリ階層をサポートしていなかったため、デバイスファイルの名称を予約語にしていた。予約された名称は、CP/M の PIP コマンドでの「スペシャルファイル」と互換」 なるほど。
nekosencho @Neko_Sencho 2016年3月10日
NT化してごっそり新調されたはずだけど、互換性とかの関連なのかねえ。 MacOSXにも何か残ってるんだろうか
緑川だむ @Dam_midorikawa 2016年3月10日
Androidもいろいろかっぱぐと下からLinuxが出てくるしな
のべやん @fox2fire 2016年3月10日
ウインドウズのサイレントジーン…いや、今も使われてるならハウスキーパーか?
SAKURA87@多摩丙丁督 @Sakura87_net 2016年3月10日
32bit版のWindowsならいまでもMS-DOSの16bitアプリ動くしな。
しゃふと @sp_schaft 2016年3月10日
おいらより年寄りで知らん人がいてびっくり
fujita nozomu @fujitanozomu 2016年3月10日
0080~ にコマンドライン引数全体がコピーされますがFCBではありません。CP/MのFCBはFCB1が005C~、FCB2が006C~ がデフォルトで、コマンドライン引数の1項目と2項目が展開されファイルのオープンに使用されます。 0080~ はコマンドライン解析を終えたあとはDMAに使うのがCP/Mのプログラムでのセオリーだったと思います。
fujita nozomu @fujitanozomu 2016年3月10日
SYMDEBの画面で16DE:0005 からCALL FAR命令が配置されてるようですが、CP/M互換のCALL 5によるBDOSコールで機能するものもまだあるのでしょうか? FCBアクセスはなんかのタイミングで廃止したとか聞いた気がしますが。
ヒト科の幼虫 @yamate_yokohama 2016年3月10日
fujitanozomu ご指摘ありがとうございます。 CP/Mを実際に使っていた世代ですが 、 すでに資料が散逸してしまっていて 記憶が不正確な部分がございました。
アルビレオ@炙りカルビ @albireo_B 2016年3月10日
多くの人が目にしてるMS-DOS時代からの遺産「実行ファイルの拡張子が.exe」。拡張子を変えなかったので実行ファイルの内部形式もMS-DOSのものを拡張した形式で、昔のWindows実行ファイルにはDOSで実行すると「これはWindows用だからMS-DOSでは実行できないよ」というメッセージが出るようになっていた。つまりDOSでも「メッセージを出す」という機能は実行できるようになってた。そういう過去のWindowsアプリも実行できるようにするために、いまだにDOS時代の遺産も現役なのです
亜山 雪 @ayamasets 2016年3月11日
久しぶりにWindows8.1のコマンドラインから「mkdir lpt1」したら叱られたでござる。
イスラエルエリカちゃん @syuu1228 2016年3月11日
互換性の維持自体がWindowsの存在意義みたいなとこあるからなぁ
さく @sakuro 2016年3月11日
Neko_Sencho OSXの過去との互換性といえば、ターミナルで名前に : 入りのファイルを作るとFinderでは : の代わりに / で表示される(あるいはその逆)とか。
takusan @kaitakusan 2016年3月12日
concon問題で知ったなあ、このあたりの。
山中島の冒険者 @Mattun_ 2016年3月12日
互換性に関しては、互換性の為に遠回りして実装した機能ってのがあって、もはや変更する事が出来ない部分が出てくるからなぁ。 特に複数回そういう実装をすると、本来関係無い所への影響が大きくなって変更が出来なくなる。 だからこそ一度、10まで上げてこれまでのシステムと切り離したい部分も有るんだろうな。
アルビレオ@炙りカルビ @albireo_B 2016年3月12日
Mattun_ 「根本的にやり直したいけどもはや変更できない」のラスボスがx86命令コードw
SIVA* @ Wired Ghost @sivaktkr 2016年3月15日
こういうまとめはとても好きだ。
TAKAMAGAHARA @SILVER_CAP 2016年3月16日
ブラウザに例のアドレス入れて一瞬でブルースクリーンになって焦りまくった思い出が鮮やかに蘇るね
電子馬@お腹いっぱい。 @Erechorse 2016年6月13日
Mac OS Xによる以前のOSとの互換性ブッチはそもそものユーザー数が少なかったのと、その信頼性の高さから宗教とも呼べるAppleの体制によって成し遂げられたものなのかもしれない
Ichigo Mayo @15my 2016年12月3日
つまり今のexeには「これはWindows用だからMS-DOSでは実行できないよ」と「これは32bit用だから16bit環境では実行できないよ」と「これは64bit用だから32bit環境では実行できないよ」と「これは.NET Frameworkの実行ファイルだから無いと実行できないよ」が入っているのですね?
ログインして広告を非表示にする
ログインして広告を非表示にする