目次
前のページ
2014-06-17 テッド・ネルソンの誕生日(1937)
2014-06-19 ブレーズ・パスカルの誕生日
2014-06-21 ファミリーベーシックの発売日(1984)
2014-06-22 コンラッド・ツーゼの誕生日(1910)
2014-06-23 アラン・チューリングの誕生日(1912)
2014-06-26 ロバート・エバレットの誕生日
2014-06-27 MSX規格発表の日
2014-06-29 DAISY DAISY
2014-06-30 ヴァネバー・ブッシュの命日(1974)
2014-07-01 「我々が考えるように」発表(1945)
2014-07-01 NOP 命令が作られた日(1960)
2014-07-02 ダグラス・エンゲルバートの命日(2013)
2014-07-06 【訂正】NOP命令が作られた日
2014-07-17 続・世界初のMML
2014-07-20 BCD (二進化十進)とは
2014-07-23 高柳健次郎の命日(1990)
2014-07-27 NTSC PAL SECAM
2014-07-28 6502 は遅かったのか?
2014-08-11 スティーブ・ウォズニアックの誕生日(1950)
2014-08-12 IBM PC の発売日(1981)
次のページ
今日はテッド・ネルソンの誕生日(1937)。
Xanadu を作った…というか、まだできてないので考案した人です。
Xanadu を知らない人は上の記事を読んでもらうことにして…
ちょうど1週間前、openXanadu がリリースされた、と話題になっていました。
報じたサイトは数あれど、中にはちゃんと理解していないサイトもあって、ちょっと酷かった。
(もちろん正しく認識し、伝えているサイトもありました)
酷いサイトがどこか、名指しで批判するのは辞めておきましょう。
僕だって事実誤認はしょっちゅうしている。人の揚げ足を取っても面白くない。
でも、正しく認識してもらうためにも、そのサイトの報じ方が「よく勘違いされる部分なのだ」と考えて、正そうと思います。
まず、openXanadu がプロジェクト開始から54年たってついにリリースされた、という話題について。
54年もたってリリース、と言うと話が面白いので、そう報じたサイトがありました。
でも、今までに何度もリリースしています。また新しいバージョンができた、というだけ。
新しい Photoshop がリリースされる際に、最初のバージョン作成開始の時期にさかのぼって「25年たってついに」と言ったらおかしなことになります。
同じように、openXanadu も54年たってついに、ではありません。新バージョンが出ただけ。
もっと早く出ていれば WEB の地位を奪えたのに、とか、WEB になり損ねたプロジェクト、というような「競合関係」に見る記事もあったのですが、WEB は Xanadu に触発されて作られたものです。
だから、Xanadu は「WEB になり損ねた」のではなく、WEB を生み出す母体となったものです。
たとえソフトウェアが完成していなくても、高く掲げられたその理想は、コンピューター業界をリードしてきました。
Twitter などでリリースの報に触れた話題で、「昔 Mac にハイパーカードっていうのがあったけど似てる」見たいなものを見かけました。
ハイパーカードもまた、Xanadu に触発されて作られたものです。
ハイパーカードを作成したビル・アトキンソンは、Xanadu の「ハイパーテキスト」の概念をちゃんと理解していました。
だから、ハイパーテキストを名乗るのは畏れ多い、と「ハイパーカード」を名乗ったのです。
長大な「テキスト」ではなく、ほんの短く区切られた「カード」。
このサイズの違いが、ハイパーカードと本来のハイパーテキストの差である、という意味です。
もちろん、これは比喩ですよ。画面サイズが小さいとかの物理的な意味ではなくて、概念としてずっと小さなものだということ。
でも、エッセンスは十分詰まっていました。
それに比べると、WEB は「ハイパーテキスト」と名乗ってしまいました。
http って、「ハイパーテキスト・トランスファー・プロトコル」の略だからね。
でも、ハイパーテキストを名乗るには、あまりにも機能が貧弱で、問題だらけでした。
テッド・ネルソンは、WEB を忌々しく思っている節があります。彼が熟考したハイパーテキストの概念を踏みにじってしまったからです。
その一方で、彼の構想のほんの一部でも実現し、世界が大きく変わったことは事実として受け入れ、喜んでいるようにも思います。
WEB を作ったティム・バーナーズ・リーだって、WEB がまさかこんなに普及するとは思っていなかったでしょう。
もともとは、CERN の内部で使われる小さなシステムだったはずなのですから。
テッド・ネルソンが「WEBは問題だらけだ」と指摘するように、ティム・バーナーズ・リーもまた「こんなに普及するならもっと良い設計にしたかった」と言っています。
しかし、彼らはそう言いながらも、わかっているように思います。
もし良い設計にしていたなら、普及はしなかったでしょう。
問題への対処なんて考えていない、単純な機能を実装してみただけの非常にシンプルな構成だからこそ、WEB は多くの環境に移植でき、拡張され、普及したのです。
じゃぁ、テッド・ネルソンの設計が複雑すぎて悪かったのか、と言えばそんなこともありません。
「まず動く小さなモデルを作らないといけなかった」としたり顔で書いているようなサイトもありましたが、それでは問題が噴出することがわかっていたから、彼は大きなシステムを作ろうとしたのです。
まだ皆が手書きで文章を書いていた時代、簡単に活字にすることはできないし、コピー機すら珍しかった時代に、彼はコンピューターのパワーを正しく認識していました。
皆がコンピューターで文章を書けば、引用も参照も思うがまま。
いつでもバックナンバーを入手できるし、へき地に住むから情報にアクセスできない、ということもない。
その一方で、引用も参照も簡単だということは、著作権侵害も簡単に起こるということです。
実際、現在のインターネットでは著作権問題はもめ続けています。
2ch まとめだって、NAVER まとめだって、パクツイだって著作権侵害だけど、誰もそのことを気に留めてない。
明日にも自分が被害者になるかもしれないのに、実際被害にあわないと問題意識を持てないのです。
また、電子データは紙の本と違い、一瞬で消える可能性があります。
知識と言うのは、先人の知識の上に乗っかって高くなっていくものです。
(西洋では、このことを「巨人の肩に乗る」とする言い回しがあります)
ところが、そのベースとなるデータが、ある日突然消えてしまったとしたら?
その消滅データの価値がどうであったか…という話ではありません。
そんな脆弱な状況では、人類の知は砂上の楼閣となってしまいます。
…これが、テッド・ネルソンが複雑で、強固なシステムを最初から目指していた理由です。
やっぱり複雑なこと考え過ぎに見える?
そうかもしれません。
しかし、当時はまだ誰もコンピューターの利便性に気が付いておらず、その利便性の先にある問題点など当然気づかない段階。
「最初に道を開拓するもの」の努めとして、後に遺恨を残さないように頑張っていたのでしょう。
もちろん、今の WEB がこれらの問題を解決できていない「ダメシステム」と否定するものではありません。
利便性を多くの人に示してくれましたし、問題点もやはり世界中の人に気づかせてくれました。
いま、世界はやっと 54年前にテッド・ネルソンが「利便性だけでなく問題点も多い」と気づいた頃に追いついたところ。
じゃぁ、その問題を解消するための次の一手はどうするか? …といえば、やはり Xanadu には学ぶところが多いのです。
テッド自身、WEB に Xanadu を融合するための方法を研究している…はずだったんですけど、その後の進捗聞きません。
WEB が普及しすぎて、一人の人間の手には負えない状況なんでしょうね。
とはいえ、おそらく何年か後には問題のいくつかは解決されるでしょう。
ほおっておくわけにはいきませんから。
そして、たぶんその解決法はやっぱり Xanadu を参考にしているのだと思います。
出来たシステムがやっぱり Xanadu でなかったとしても、Xanadu が「なりそこない」なわけではないのです。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日はブレーズ・パスカルの誕生日(1623)。
うちのページ的には、パスカリーヌの開発者。
または、Pascal 言語に名を残す人。
「人間は考える葦である」という言葉で有名な哲学者ですが、パスカリーヌを考えたり世界初の公共交通機関を考案したりする発明家でもあり、確率論を創始した数学者でもあり、圧力の単位「パスカル」に名を残す物理学者でもあり、そして宗教家でもありました。
業績多すぎ。
それぞれ非常に興味深いものですが、本気で説明すると長すぎるのでざっと紹介。
興味を持ったら自分で調べてね。
パスカリーヌは別のページに書いてあるので簡単な概要だけ。
現存する、世界最古の「計算機」です。歯車で計算を行います。
現存しなくていいならもっと古いものもあるし、パスカリーヌは足し算・引き算しかできないけどね。
これ、当時のフランスの通貨体系が非常にややこしかったために作られた機械でした。
これ重要。そこをおさえとかないと、足し算引き算くらい機械を使わない方が速い、という話になっちゃう。
当時の通貨体系は「リーブル」。1リーブルは20スーで、1スーは12ドゥニエでした。
10進法と20進法と12進法が混ざってる。
普段の生活ならいざ知らず、税務官吏をやっていたパスカルのお父さんは、ややこしい体系に苦闘していました。
このお父さんの仕事をために、と発明した、なんと親思いの子供。ちなみに、17歳の時から製作を開始し、発明は19歳の時です。
確率論。
当時は賭博は非常に人気があり、当然必勝法は誰もが知りたいところ。
当然多くの人が同時多発的に確率論を研究しはじめ、パスカルもその一人に過ぎません。
しかし、彼は一人で研究を行ったのではなく、直感的に矛盾するような問題をいくつも考えては、友人を巻き込んで議論を始めたため、多くの数学者がこの問題を考えることになります。
あとで書きますが、パスカルは「自分で考える」ことを最重要だと思っていたようです。
だから、彼が研究して発表するのではなく、周囲に問題を投げかけて、考えに巻き込む。
巻き込まれた人が多く、パスカルの周辺で確率論の研究が進んだため、確率論はパスカルの創始、ということになっています。
以下は僕の個人的な話になりますが、大学1年の時に確率が必修でした。
しかし、その授業が厳しかった。単位を落とす人は珍しくなく、僕も例にもれず2回も落としました。
おかげで確率はそれなりに詳しくなり、あとでゲーム業界に入った際に役立ちました。
確率の使い方って、ゲームの面白さをかなり左右します。
せっかくいいアイディアなのに、ここら辺の処理でつまらなくなっているゲームもよく見ます。
圧力。
流体力学の原理の一つである「パスカルの原理」を見つけています。
油圧機器…パワーショベルとか、ダンプトラックとかは、パスカルの原理を応用することで非常に大きな力を出しています。
流体の圧力の研究をした功績から、圧力の単位に「パスカル」が使われています。
台風の中心気圧は 980ヘクトパスカル…とかいうときの「パスカル」ね。
これも僕個人の話を書くと、死んだ父は油圧機器の設計販売会社をやっていました。
別に父に教えられたわけではないですが、なんとなく油圧の原理とか好きでしたね。
ヘロンの噴水とかいつか取り上げたいテーマ、って、サイト作りはじめた 20年前から言っている気がする (^^;;
公共交通機関。
最初に書いたように、17世紀は富裕層と一般庶民の間には明らかな格差がありました。
富裕層の移動手段は馬車ですが、一般庶民は徒歩。
その時代に、パスカルは庶民でも安価に乗れる「乗合馬車」を考案し、実際に運用しています。
1662年に始められた乗合馬車は、世界初の公共交通機関とされています。
パリ市内の各地を結ぶもので、運賃は1区間5スー。
…先に説明しましたが、20スーが1リーブル。
事業の認可条件として「労働者は乗せない」などがあり、庶民でも上層を相手にした模様。
しかし、誰でも乗れるわけではないややこしい条件が嫌われ、思ったより利用が伸びず、採算があいません。
後に6スーに値上げしても厳しく、15年で廃止されています。
19世紀に入ってから乗合馬車は復活し、その際には「omunibus」と名乗ります。
「万人のために」という意味のラテン語ですが、略称として bus だけが使われたのが、現代の乗合自動車(バス)の名前の由来。
また、多くのものが相乗りをすることから、小さな話を寄せ集めて作る物語形式を「オムニバス」と呼びます。
人間は考える葦である。
パスカルは乗合馬車の運用開始から半年後に、39歳の若さで世を去ります。
元々病弱だったのですが、急に体調が悪化したのです。
死後、パスカルの考えを示すメモの断片が編集され、本として出版されます。
それが、哲学者としてのパスカルを有名にした「パンセ」でした。
「人間は考える葦である」はその中でも一番有名な言葉。
葦は弱い者の代表です。簡単に折り、殺すことができます。
人間の肉体はまた、簡単に死に至ります。その点では葦と同じ。
しかし、人間は考えることができます。思想はどこまでも自由です。
宇宙の果てを思うことも、遥かな未来を想うこともできます。
これが葦と人間の最大の違い。
ちなみに、「考えることは偉大だ」の後は、「愛はもっと偉大だ」と続きます。
考える、というのは所詮論理の積み重ね。論理なんて超えてすべてを包み込む愛はもっと偉大です。
さて、パスカルは宗教家でもあります。
16世紀にはじまった宗教改革は、宗教のあり方を変えました。
集金のための機関になっていた宗教のあり方を見直し、本来の宗教に戻そうとしたのです。
それでも、そこは宗教ですから、神の存在は疑う余地のない前提でした。
信じよ、さらば救われん。
ところがパスカルは、まず宗教を疑え、と問いかけます。
先に書いたように、宗教には集金機関の側面もありましたが、そうした部分は疑ったときにすぐぼろが出ます。
疑ってもやはり信じられる部分は、たぶん本物。そこを信仰すればよいのです。
さらには、神の存在を疑います。
パスカルは、研究テーマでもあった確率論を導入し、思考実験を行います。
その結果、神は存在しないかもしれないが、存在を信じて信仰することが、良い人生を過ごせるとの結論に達します。
これ、現代風に言えば「信念を持って生きる人は幸せだ」ってことです。
パスカルの時代には宗教が重要だったから「信仰せよ」となりますが、何か信じられるものを持つなら、何でもいい。
そして、信念を持っている人にとって、神がいるかどうかなんて些細なことなのです。
この言葉、先に書いた「愛は偉大だ」と呼応します。
本来ここでの愛は宗教用語(神の慈悲)なのですが、現代的に考えると「打算的ではない信念」…かな。
打算的ではない信念は全てを包み込むし、そういうものを持てる人は幸せな人生を送れる。
もっと簡単に言えば、趣味に打ち込める人はしあわせだ、ってことか。
これは卑近すぎるかもしれないけど、本質的に間違っていない気がする。
まぁ、現代でも十分に通じる、含蓄を持った言葉だとわかってもらえると良いです。
Pascal 言語。
これはパスカルの発明品じゃありませんね。名前の由来はパスカルですけど。
でも、もっとも僕のページらしい話題なので(笑)書いてしまいます。
ALGOL の影響下で作られたコンピューター言語で、そういう意味では C の親戚。
C は「高級言語のふりをしたアセンブラ」だと言われることが多いのですが、Pascal は本当に高級言語でした。
ここでいう「高級」というのは、ハードウェアの違いなどを気にしないで良い、という意味。
Pコードコンパイラとか説明したいけど、詳細に入り込み過ぎると長いので泣く泣く割愛。
Apple 社は、Pascal が好きでした。
Apple II 用にも Pascal の処理系を発売していましたし、Macintosh は Pascal の使用を前提とした ROM を持っていました。
Mac 発売後に C が流行して、Mac 用のプログラムは大抵 C で組まれることになります。
でも、内部 ROM の利用時には Pascal との互換性を気にする必要がありました。
文字列の持ち方とか、パラメータの積み方とか違うんだよね。
ちなみに、MacOS X に切り替えた際に Pascal とは決別したので、今は気にする必要ありません。
その昔、MS-DOS に TurboPascal という言語処理系がありました。
これ、優れもので、当時の遅い CPU でも一瞬でコンパイルが終わります。
それでいて、コンパイラ言語なので当時主流だった BASIC などよりずっと速いのです。
まるで魔法でした。
TurboPascal は後に言語仕様を拡張し、オブジェクト指向に対応しています。
しかし、これでは Pascal とは呼べないため、現在では Delphi という名前でリリースが続けられています。
昔ほどの人気は無くなってしまったようだけど、いまでもコンパイルの速さは健在で、気軽にプログラムを楽しめます。
そのため、趣味のプログラムをする人には人気があるようです。
同じテーマの日記(最近の一覧)
関連ページ
ブレーズ・パスカルの命日(1662)【日記 14/08/19】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日はファミリーベーシックの発売日(1984)
このウェブサイトで一番最初に書いた記事が、ファミリーベーシックの紹介記事でした。
今ならもっと突っ込んだ内容書くだろうけど、あのころは「毎週更新」を目指していたので、それほど深い内容書く余裕なかったんだよね…
まぁ、ファミベを深く書くと、結局ファミコンの話になります。
ファミコンの内部構造は詳しく書いたページは山ほどあるし、僕らしく紹介したページも作ったので、ファミベページは原則そのまま。
で、そちらのページにあるように、僕が初めて所有したベーシックマシンです。
僕は1か月ほど後に誕生日なのですが、その際に「誕生日だから欲しい」と親に交渉し、半額を自分で出すことで買ってもらいました。
(1万5千円は、我が家の誕生日プレゼント額の上限を超えていたため)
発売から1か月程度で手に入れたため、BASIC のバージョンは 1.0 。
後にベーマガのプログラムを見ていたら、知らない命令が入っていました。
「マニュアルに記載されていない命令があるのか?」と試してみてもエラーになる。
しかもこれ、「指定座標に書いてあるキャラクタを調べる」という、ゲームを作る上で非常に重要な命令です。
メモリが 2K しかなかったファミベーでは、配列に仮想画面持つような余裕はありません。
自然と「背景は添え物のシューティングゲーム」ばかりになっていたのですが、背景のキャラクタがわかれば、パックマンのような迷路ゲームだって作れます。
任天堂に電話したら「新しいバージョンの BASIC が出ているので、無償交換します」と言われ、2.1 を入手しました。
これでゲーム作りの幅が広がりました。
ファミコンは2画面持っていて、ファミベーでは片方を「裏画面」として使用します。
ここにベーシックとは別に描いた画面を保存しておいて、命令一発で表画面にコピーできるのですね。
その一方で、先に書いた「画面に書かれたキャラを調べる」命令では、裏画面を調べることも出来ました。
そこで、広大なダンジョンのマップを裏画面に用意しておいて(0~Fの16進数で、マス目周囲の壁を表現した)、3Dダンジョンを表示する RPG 作ってみました。
今考えると、ファミベで 3Dダンジョン、という無謀ともいえるテクニックだけのゲームで、バランスとか無茶苦茶悪いし、RPG の体をなしていません。
そもそも当時は RPG というものをよくわかってなかった。
でも、これはベーマガに投稿して採用されました。
掲載されたプログラムリスト、なぜか CLS が CLEAR に化けてたよ。
(当時のベーマガは、ファミベのプログラムを FM-7 経由でプリントアウトするプログラムを使用していたと思われるが、そのプログラムのバグの模様)
画面消去するタイミングで変数がクリアされてプレイ続行不可能になるのだけど、「で・ば・ぐ」のコーナーにお詫びが出なかったよ。
…ということは、苦情が来なかったわけで、誰も打ち込んで遊んだりしなかったんでしょうなぁ (^^;
他にもう一回、別冊ムック扱いで採用されたことがあるけど、投稿はその2回だけだったかな?
#投稿が2回で、掲載も2回。原稿料は結構よかった。
もっと投稿するつもりで準備していたが、プログラムばかりやっていて成績が落ちて父に怒られたため、自粛。
先に「僕が初めて所有したベーシックマシン」と書きましたが、最初に所有したのは FX-マイコン。
そして、はじめてBASICを学んだのは、友人から1か月くらい借りた MSX。
だけど、気持ちの上ではファミリーベーシックは僕のファーストマシンです。
機械語を覚えたのもこの機械。
ノートにアセンブラプログラム書いて、ハンドアセンブルして、POKE & CALL で動かしたとき、想像を超える速さで驚きました。
BASIC で逆アセンブラ組んで、ROMの中を探検もしました。
いろんなテクニックを学びました。
もう詳細覚えてないけど、6502 の 2byte 命令を 2byte 目から実行すると意味が変わることを利用して、メモリを節約できるテクニックがあったんですよね…
BASIC の ROM の中にその書き方の部分があって、見つけて感心したのだと思います。
Apple II では定番テクニックだったらしいのですけどね。
これ、たぶん岩田さんが言ってるメモリ節約の「バグみたいな使い方」は、このことなのだと思います。
ファミリーベーシックはグラフィックもかけない、スプライトの絵も変えられない、メモリも2Kしかない、すごく狭い環境でした。
でも、まだ初心者だった僕にはこの環境が幸いでした。
余計なことを考えようにもメモリの余裕はなく、とにかくシンプルでいいアイディアのゲームを、無駄のないプログラムで作るしかなかったのです。
そして、ベーマガのプログラムもみんな短い。
他人のプログラムを読んでテクニックを勉強するのも、簡単に出来る環境でした。
ゲームアイディアの考え方も、プログラムテクニックも、自然と身につく。
そんな環境は、今も昔もそれほど多くないように思います。
僕にとっては、ゲームプログラマーへの最初の一歩を踏み出した、記念すべきマシンです。
同じテーマの日記(最近の一覧)
別年同日の日記
16年 コンピューターが初めてプログラムを実行した日(1948)
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日は、コンラッド・ツーゼの誕生日(1910)。
いつかは取り上げたいと思いつつ、いまだに取り上げていなかった人の一人です。
コンピューターは主にアメリカで発展してきているのですが、彼はドイツ人。
そして、アメリカのコンピューター史とは独立してコンピューターを作成しています。
ツーゼは、自分の名前(Zuse)の頭文字を取った、Z シリーズ計算機を作っています。
ただし、いずれも「電気計算機」ではありますが、「電子計算機」ではありません。
Z1 の完成は1938年。
22bit 浮動小数点の計算機でしたが、完成したものの部品精度の問題で動作が不安定で、実用に至りませんでした。
機械式で動作し、駆動力に電気を使用しています。
パンチテープにより計算手順をプログラム可能でしたが、条件判断などがないため、現代的な意味でのプログラムが組めるわけではありません。
機械式ではありますが歯車式ではなく、2進数を使用しています。
そして、2進数を使用した世界初のコンピューターと一部の人たちが主張する ABC マシンの完成は1942年。
完成と言いつつ、Z1 も ABC も実用にならなかった(つまり未完成で終わった)のですが、このことをもって Z1が世界初のコンピューターだと主張する人もいます。
ちなみに、僕はプログラム内蔵型の電子計算機でないとコンピュータとは呼べない、と考えているので、私見ではこれは世界初のコンピューターではありません。
Z2 は1939年。Z1 より単純化して安定動作を目指しました。16bit の固定小数点演算を行います。
リレー式回路で、機械式のような精度問題は生じず、正しく動作しました。
Z3 は1941年。Z2 の成功を元に、リレー回路で Z1 に再挑戦したものです。
22bit の浮動小数点で、プログラムには相変わらず分岐は無いものの「条件実行」が可能になりました。
後にこの「条件実行」文によってチューリング完全であることが証明され、「工夫すれば」現代のコンピューターと同等のプログラムが組める、と判りました。
そのため、ENIAC (1946)以前の、世界初のコンピューターだと主張する人もいます。
しかし、僕はプログラム内蔵型の電子計算機でないとコンピュータとは呼べない、と考えているので(以下略)。
この後、1943年にベルリン空襲があり、Z1~Z3 は破壊されます。
ツーゼは Z4 を作成中でしたが、設計図を持って避難します。
Z4 は1945年。
32bit の浮動小数点に拡張され、命令も単純な四則演算だけではなく、各種関数が使えるようになっています。
分岐命令が追加されたのは特筆すべきことでしょう。これにより、プログラムの幅がずっと広がりました。
プログラムは相変わらずパンチテープですが、出力はタイプライターでの印字が可能になっています。
Z4 もまだ、ENIAC 以前に作られたものです。
ENIAC は歯車計算機を模して10進演算で、プログラムを配線によって行っていました。
Z4では2進数で、パンチカードでプログラムが可能です。
これらの特徴だけ見ると、ENIAC より Z4の方が、ずっと近代的なコンピューターに見えます。
そのため、Z4が世界初のコンピューターだと主張する人もいます。
しかし、僕はプログラム内蔵型の(以下略)。
この後も、Z5、Z11、Z12…と、ツーゼのコンピューター作成は続きますが、とくに有名なのは Z4 までです。
というのも、1980年代になり、コンピューターが普及してから「ENIAC以前に孤独にコンピューターを作成したドイツ人技師がいた」という美談が広まったため。
ENIAC以前だった、という限定が付かないと面白くないため、有名なのは Z4 までなのです。
そして、「コンピューターだった」と強調されたため、完成しなかった、ただの計算機である Z1 すらもコンピューターだったと主張する人が多いのは先に書いた通り。
ツーゼは、土木設計技師でした。
土木設計では強度計算などで非常に複雑な計算が必要で、彼はそのために計算機を作成しようとしました。
真空管を使えば高速化できる、ということを示唆した友人もいたようですが、当時の真空管はとても高価で、自費で計算機を作成していた彼は「現実的でない」とリレー機械式を貫き通しました。
そのため戦後ヨーロッパでは Z4 は量産され、普及しています。
僕は再三書いた通り、Z1~Z4 はコンピューターとは言えない、と考えています。
しかし、戦時中で他のコンピューター学者との交流がなかったために、大変独創的な仕組みを作り、動作させていることは称賛に値します。
また、プログラム可能な計算機…現代的なものではないにせよ「コンピューター」として最初に普及したのは Z4 である、というのは紛れもない事実なのです。
同じテーマの日記(最近の一覧)
関連ページ
ジョン・アタナソフ誕生日(1903)【日記 13/10/04】
コンラッド・ツーゼ 命日(1995)【日記 14/12/18】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日はアラン・チューリングの誕生日(1912)。
コンピューターの歴史を少し学ぶと…いや、歴史に踏み込まずとも、コンピューターの世界を少し深く覗き込むと、チューリングの名前がいたるところに出てきます。
先日も、史上はじめて、チューリングテストに合格した人工知能が現れた、というニュースが世界をかけめぐりました。
これはどうやらテスト方法に不備があり、合格とはとても言えないようなお粗末な内容だったようですが…
詳細は後で書きますが、こんな風に現代社会でも、チューリングの名前は時々登場するのです。
チューリングはイギリスに生まれ、子供のころから数学の高い才能を持っており、周囲を感心させています。
大天才でした、などと簡単には書きません。
数学や論理的なこと以外、一般常識などの発達は遅い、いわゆる発達障碍児だったようです。
具体的に言えば、おそらくアスペルガー症候群。
当時はアスペルガー症候群という言葉はありませんし、当然診断されたわけでもないので断定できませんが、まぁ大方そうだろう、と言われています。
蛇足ながら付け加えると、アスペルガー症候群はは発達のバランスが平均値から外れている子供につけられる名称です。
別に何らかの病気ではありませんし、発達バランスの問題なので、大抵は大人になるにしたがって発達が遅れていた部分も発達し、問題は無くなります。
でも、早く発達した部分…チューリングの場合、読み書きや計算能力は大人になるころには常人を超えたレベルになります。
ニュートンもアインシュタインも、大天才とされる人は大抵アスペルガー症候群だったようだ、という指摘があります。
さて、チューリングは大学に進み、高等数学を研究します。
チューリングが大学に進学したその年、数学者を震撼させる恐ろしい論文が発表されます。
ゲーデルの不完全性定理。
1900年に、当時高名な数学者だったヒルベルトが「今後100年で解決すべき23の難題」を数学者に示します。
いずれも難題でしたが、それを解決できればもっと新しい数学分野が開けるだろう、という問題を集めてありました。
それらの難題の中に、人類が過去に構築してきた「数学」が矛盾を持たないことを示せ、というものがありました。
これ、非常に重要です。これまでの人類は、数学を重要な道具として使い、矛盾がないと信じて高等な理論を構築してきました。
しかし、だれも矛盾がないことを確認はしていないのです。もし矛盾があれば、過去に築いた高等理論は砂上の楼閣として崩れ去ります。
しかし、「数学」の枠組みの中で、その「数学」に矛盾がないかを検証するのは、非常に難しいのです。
もし、数学に矛盾があれば、「数学に矛盾はない」という矛盾した結論に至る可能性がありますから。
それでも、数学者たちは、頑張って証明しようとしてきました。
この問題だけでなく、他の22問についても証明に挑む人が多くいました。
たとえ難しくても、数学の問題については必ず証明が与えられるはず、それがこの時代の常識でした。
ところが、です。ゲーデルが1931年に発表した論文は、非常に恐ろしいものだったのです。
その論文に書いてある内容を簡単に言えば、「(まだ証明されていないが)もし数学に矛盾がないのであれば、証明不可能な問題が必ず存在する」ということを、誰の目にも明らかなように、論理的に示してあったのです。
もし数学に矛盾があれば、過去数千年にわたって築き上げた数学は失われます。
しかし、数学に矛盾がなければ、いつか解けると信じていた難題は、永遠に解けないのかもしれません。
どちらに転んでも、数学者には夢も希望もない、という宣告でした。
数学は非常に高度で、人間の知恵の産物だと考えられてきました。
すでに簡単な計算機はありましたが、そんな機械で計算を行えるのはほんの一部だけ。
多くの計算は、やはり人間の手で行わなくては…。そう、夢も希望もなくたって、数学者にはまだまだ仕事があります。
チューリングは1936年に、ゲーデルの不完全性定理を別の手法で示します。
それが「計算可能な数について」と呼ばれる論文です。
ここで、チューリングは「非常に簡単な計算機」を想定します。
一つの計算機は、たいしたことはできませんが、とにかく計算は行えます。
チューリングが想定したこの機械を、チューリングマシンと呼びます。
そして、少しづつ性能の違う、そうした計算機が沢山ある、と想定します。
現実にはあり得ないことですが、無限個の計算機があれば、無限の数を数えることができます。
さて、無限の計算機があり、それによって無限の数が扱えるのであれば、実はたった1台の計算機で無限の数を扱うこともできます。
非常に単純な機能しか持たない「チューリングマシン」をどのように組み合わせれば、たった一台の計算機ですべてをこなす「万能チューリングマシン」を作れるのか、チューリングはそれを明らかにしています。
そして、実は万能チューリングマシンは、すべての機械を統合したような大掛かりなものではなく、非常に簡単な仕組みになってしまうのです。
これによりわかることは、人間にしかできないと考えられていた計算のほとんどは、実は機械でも出来るような単純作業の寄せ集めである、ということでした。
命題を与えられたときに証明を考え出す、という作業も、無限を扱える「万能チューリングマシン」により、無限の時間をかければ得られてしまうのです。
数学者には夢も希望もなく、仕事すらも機械に奪われてしまうようです…
ただ、ここで問題になるのは「無限の時間」を本当にかけられるのか、ということです。
場合によっては、万能チューリングマシンは無限ループにハマり込むことがある、と示されます。
無限ループにはまり込んでしまえば、答えは出ません。
無限の時間がかかってから「ループでした」と気づいても遅いので、できれば動作前に、どの程度の時間で結果が出るのか見積もりたいところです。
しかし、論文中でこれは不可能であることが示されます。
結論としてはこうです。
万能チューリングマシンはあらゆる計算を行うことができ、あらゆる証明を行うこともできます。
しかし、時として無限ループにハマりこみ、無限の時間をかけても結果を出さない場合があります。
そして、その時が来るまで、無限ループにハマるかどうかはわかりません。
これが、「証明不可能な命題」です。手法は違いますが、そのような命題が存在する、という結論はゲーデルと変わりません。
チューリングの論文の中に出てくる「万能チューリングマシン」は、この時点では論理的な考察を行うための道具にすぎませんでした。
しかし、非常に単純な動作を繰り返すことで、ありとあらゆる計算を行うことができる、という可能性が示されたことになります。
この後アメリカに留学したチューリングは、ジョン・フォン・ノイマンと親交を結びます。
ノイマンは後に完成直前の ENIAC を知り、さらには次に作られようとしていた EDVAC の計画を知ります。
EDVAC は万能チューリングマシンのサブセットであると見抜いたノイマンは、このプロジェクトを事実上乗っ取り、後に「ノイマン型コンピューター」(現在のコンピューターの総称)の生みの親として名を残します。
後にチューリングはイギリスに戻り、政府の暗号解読組織に在籍します。
その後第二次世界大戦が勃発し、当時「世界最高レベルの機密保持性能」であった、ドイツ軍のエニグマ暗号の解読に従事します。
当初は構造も不明だったものの、同盟国であるポーランドが入手したエニグマの情報を入手。
ポーランドはこの情報を元に、暗号解読を行う機械を設計していました。
エニグマには癖がありました。
平文と暗号は「絶対に」異なる文字となる、などです。
こうした癖を使って、暗号文のほんの一部でも解読できたら…暗号にとって一番重要な「鍵」を見つけだすヒントを手に入れたことになります。
当時は秘密鍵暗号ですから、鍵さえ手に入ればこちらの物。他の暗号も次々解くことができます。
ポーランドの作った機械は、「必ず」暗号が解けるわけではありませんが、総当たりで暗号を解いてみて、上記の癖や、解けた一部の単語などを使って「明らかに違う答え」を排除し、解読文の可能性の高いものだけを人間に示すものでした。
暗号解読自体は総当たりです。非常に時間がかかるため、イギリス軍も機械を作ることにしました。
チューリングはこの仕様設計を行っています。
ポーランドの作った機械は「ボンバ」と呼ばれ、イギリスの機械はそれにならって「ボンベ」と名付けられました。
(いずれもボンブ、爆弾のこと)
ボンベは、大量に並んだ「エニグマのレプリカ」が、ひたすら暗号を作り出すのを制御する、機械式の専用計算機でした。
チューリングはこの後もエニグマの癖を研究し、ボンベを高性能化する改良を提案したりしています。
さらに、数学的な手法でエニグマを解読できるかもしれないと示唆し、これを元に「コロッサス」が作成されています。
(チューリングは方法を示唆したのみで関与していないようです)
戦争中の暗号解読は、軍の絶対機密でした。
チューリングは数々の功績に対し表彰されていましたが、表彰された件や仕事内容は当然、暗号解読の仕事をやっていたことすら他言してはなりませんでした。
戦後、チューリングはマンチェスター大学で、マンチェスター Mark I に携わっています。
その際には、コンピューターでチェスを行う手順なども考案していますが、これはプログラムと言うよりはアルゴリズムのアイディアメモに近いものです。
この頃に、コンピューターの知性はどこまで人間に近づけるのか、ということに強い興味を持ったようです。
しかし、コンピューターはいつまでたってもコンピューター。そのままでは「人間」にはなれません。
ここで、思考実験としての「チューリングテスト」を提唱します。
人間は、相手の見た目や声などを結構気にしますが、これは「知性」とは関係ありません。
コンピューターの「知性」を判断するのであれば、これらを徹底して取り除く必要があります。
そこで、テレタイプライターを使って二人の人間が文字で会話できるようにして、遠く離れた小部屋で会話を行います。
離れているので、相手の見た目や声などはわからず、文字での会話からのみ、相手の知性を判断できます。
この時、遠く離れた部屋にいるはずの「相手」がコンピューターだったとしたら?
コンピューターが未熟なら、相手は人間ではない、とすぐにばれてしまうでしょう。
でも、十分に会話をしても多くの人が「相手は人間だ」と判断する様になれば、それはコンピューターが人間並みの知性を持ったことになります。
冒頭に書いた「チューリングテスト」とは、このようなものです。
史上初の、人間と認められた人工知能…というのは、たった5分しか会話を行っておらず、しかも「英語は母国語ではない」という設定で、会話が成立しないものだったそうです。
どうやら、会話が成立しないにもかかわらず、相手が英語をわからないのでは仕方がない、という判断で「相手は人間だ」と判定された様子。
これは正常なテストとは言えません。
このイベントはチューリングの死去60年目の命日に行われたので、節目の日に記念として発表できるような成果が欲しくてねつ造された…のでしょう。
さて、晩年チューリングは同性愛で訴えられています。
当時、同性愛は罪でした。
チューリングは戦時中に、女性と婚約しています。
その後、チューリングが「同性愛者だ」と彼女に打ち明け、それでもかまわないという彼女をチューリング側から別れているそうです。
…これ、単に女性と付き合うのが苦手だった、ということは無いのかな。
チューリングがアスペルガーだったとしたら、人付き合いはかなり苦手なはず。
ましてや異性が相手では考え方も違いすぎてどうしてよいかわからないかも。
本当に同性愛者だったらそもそも付き合わないと思うし、面倒くさいから別れる口実じゃないの? という気もします。
また、戦時中の彼のアパートには、夜な夜ないろんな男がやってきて、一晩中起きていた、というアパート管理人の証言もあります。
裁判になった際、彼はこの証言に対し、なんの弁明もできませんでした。
…だって、彼は絶対口外してはならない軍の最高機密を扱ってたんですよ?
夜中でも相談事項が大量にあったのは想像に難くないし、それを他言できない以上、弁明なんて無理です。
まぁ、多くの歴史家が「彼は同性愛者だった」としているので、それなりの証拠もあるのでしょうし、そうだったのだと思います。
でも、噂が大きくなりすぎている可能性はかなり感じます。
偉大な人物の醜聞なので、皆面白がっている節もあります。
結局、チューリングは同性愛の罪で、1952年に有罪判決を受けています。
そして、その2年後に謎の死を遂げます。
…自室で死んでいたのです。42歳の若さでした。
部屋には青酸の瓶が多数あり、かじりかけの林檎が落ちていました。
林檎に青酸を塗って食したことによる自殺、とされましたが、これには後の歴史家から各種異論が出ています。
彼は「来週やるべきことのリスト」を常にまとめていて、この時もリストが作られていたそうです。
やりたいことがあるのに、自殺する理由がありません。
また、検視結果からも、死因は青酸中毒であるものの、青酸を「食した」反応が出ていないのだそうです。
チューリングは化学も好きで、自室で化学薬品を扱うこともありました。
その時の扱いは、かなり雑だったそうです。
そのため、これは換気不足により、発生した青酸ガスを吸入した事故死ではないか、と言われています。
2012年はチューリング生誕100年でした。それを前に、彼の名誉を回復しよう、という活動が起こります。
2009年に、政府による謝罪が請願され、数千人が署名を行いました。
これに対し、当時のイギリスの首相は、過去にチューリングを同性愛で有罪としたことに対し「間違っていた」と公式謝罪しています。
冤罪だったというわけではなく、当時の法律で正しくとも、彼の偉業を考えると名誉を貶めている、という意味です。
2011年、今度はチューリングを免罪し、名誉を回復してほしい、という請願書が出されます。2万人以上の署名が集まりました。
しかし、法務大臣はこれには応じられない、と拒否します。
彼個人の考えとして、チューリングが罪人となっているのは遺憾であるが、当時の法にのっとった正当な手続きだったため、法務大臣としてこれを曲げることはできないとの理由でした。
では、法を曲げましょう。2012年にチューリングに恩赦を与える法案が貴族院に対し提出され、可決されます。
これをもって、イギリス女王名義で、正式な「恩赦」がだされています。
彼が同性愛者で、変人の数学者であったとされるのはもう過去の話。
今では、イギリスを代表する偉人の一人として讃えられています。
同じテーマの日記(最近の一覧)
関連ページ
スティーブ・ファーバー 誕生日(1953)【日記 15/03/21】
アラン・チューリング命日(1954)、ドナルド・デービス誕生日(1924)【日記 16/06/07】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日は、ロバート・エバレットの誕生日(1921)。
誰それ。…という反応が正常です。
Whirlwind I 、というあまり知られていないコンピューターがあり、そのコンピューターを作成するプロジェクトの、No.2 の地位にいた人です。普通知らないわな。
世界初のコンピューターってどれ? という質問に対しては、普通は ENIAC という答えが出てきます。
ちょっと聞きかじった人なら、ENIAC よりも古いとされる ABC や Z4 を答えるかもしれません。
一方で、現代的なコンピューターの条件として「ノイマン型」を理解している人なら、EDVAC や EDSAC あたりを挙げるでしょう。
でも実は、それらのコンピューターの設計は現代とはかなり違います。
少しでも早く計算を行うにはどうすればよいか、軍の予算をふんだんにつぎ込んで、MIT の天才たちが作った、常識外れのコンピューターが Whirlwind I でした。
当時はまだ「スーパーコンピューター」という概念は無いのですが、世界初のスーパーコンピューターだった、と呼ぶ人もいます。
そして、この設計手法は非常に良いものだったので、その後のコンピューターのスタンダードになっていきます。
現代の PC は、 ENIAC や EDSAC の子孫と言うよりも、Whirlwind I の子孫です。
歯車計算機が類人猿で ENIAC がアウストラロピテクスだとしたら、Whirlwind Iでホモサピエンスになった、というくらい違います。
(なんだ、このわかりにくい例えは…)
で、エバレットはそのプロジェクトの No.2 で、事実上の最高責任者でした。
なんで No.2 なのに最高責任者?
それはもちろん、No.1 が各界の調整で多忙を極めたためです。
Whirlwind I の作成は、非常に大規模なプロジェクトでした。
軍と、軍の研究機関と、MIT の3者で連絡を取り合いながら作成されています。
予算も膨大。関わる人数も膨大。もちろん資料や会議の回数も膨大です。
プロジェクトリーダーは多忙を極め、現場の指揮はできません。
それで、エバレットが no.2 でありながら、事実上の最高責任者となったのです。
後に、関係機関の連絡を取りやすくしたり、特許を集約する目的で、MIT 発祥の軍需会社 MITER (マイター)が生まれています。
この時にもエバレットは創設者に名を連ね、後には最高責任者も務めています。
Whirlwind I は、コンピューターにディスプレイが接続された初めてのマシンでした。
面白そうなデバイスを見たら遊んでみるのがプログラマーの常。
Whirlwind I の完成前、まだ一部機能しか動いていない段階で、すでに「弾むボール」というプログラムが作られています。
ディスプレイに、ボールが放物線を描きながら飛び、落ちると弾む、というだけのもの。
これ、歴史的なことを知らないと全く理解できませんが、「すごく面白い」プログラムでした。
これがきっかけの一つとなり、後に「ディスプレイに面白いものを表示する」プログラムが流行し、その中から、テレビゲームの元祖が生まれることになります。
Whirlwind I に興味を持った方は、別記事で詳細書いていますのでご覧ください。
「弾むボール」から派生して、各種ゲームが作られた様子は、「世界初のテレビゲーム」の記事にまとめています。
今回は短め。だって、エバレットはやっぱマイナーな人物で、詳細情報があまりないのだもの…
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日はMSX規格発表の日(1983)。
コンピューターの統一規格を作る、というのはある種の野望で、後にも先にも MSX しかなかったように思います。
IBM-PC とか、UNIX の SYSTEM-V のように、普及して互換機も出来て、なし崩し的にデファクトスタンダードに…というのは沢山あります。
でも、そういうものは先に製品があり、だんだんと他社も作りやすいように規格が統一されていく。
今日がその、MSX 規格発表の日。
おそらく、まだ実機もない段階でコンピューターの詳細な規格が発表されて、2社3社でない多くの会社が従った、というのは、これが唯一だったのではないかと思います。
#って書くと、いろいろ指摘が来そうだけど。
互換機作っている協議会で、新たな仕様を定めた、とかって話じゃないとは書いておく。
#…あ、よく考えたら、Android は実機より先に規格があったし、多くの会社が作っているな。
パソコンかは微妙だけど。
で。MSX 規格の第1号は、4か月後の10月21日に発売された、三菱電機の LETUS 。
僕の MSX の思い出と共に、LETUS 発売日は過去の日記に書いているので、そちらをご覧ください。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
しばらく前に「世界初のMML」という記事を書いて、じゃぁ「世界初」から「現在」の間のミッシングリンクはどうなっているのか、と感じて調べています。
この成果はまだまだ発表できそうにありません。
かなり調査は進んだ…と思ってまとめている最中に、また新資料が出てきたりしているから。
でも、「まとめている最中」ではありました。
えーと、大体調査しながら荒まとめしたので 2000行くらい。
これはもう、ほんとうにつらつらと書き綴っただけ。
ちなみに、2000行の時点でも、何度も書きなおした部分があるので、6000行くらいは書いてる。
最終的には、500行くらいにまとめたいのだけど、おそらくは無理なので 1000行程度にしたい。
で、泣く泣く削らないといけない部分もあるのだけど、今困っているのが「完全に余談なのだけど、余談がないと全体が理解できない」部分が出てきてしまったこと。
どうしよう…と悩むこと5秒(短っ!)
これはあれだ、ハイパーテキストなんだから、別の話題に切り出してしまおう。
というわけで、今日の日記に「余談」を書いておく。
後で原稿が仕上がった際には、詳細はこちら、とこの日記をリンクするから(笑)
さて、「世界初の MML 」に、MUSIC というシステムが出てくる。さらっと触れただけだけど。
音を作り出すプログラムね。計算で音の波形を作り、再生するという、今でいえば PCM 音源の始祖です。
これが作られたのが 1957年。IBM 704 が使われています。
システムと言っても「ライブラリ」で、MUSIC を使った応用プログラムがいろいろ作り出されました。
まぁ、MUSIC の名前の通り、当初は演奏プログラムなどが作られたようです。
でも、「喋る」プログラムがすぐに作られ、さらに演奏プログラムと組み合わせて「歌う」ようになります。
1961年、このシステムで初めて歌ったのが「Daisy Bell」という曲。
上の映像の中では、演奏を 1961, IBM 7094 と書いているのだけど、IBM 7094 は 1962年完成。
これは、IBM 704 の間違いだ。
映像自体古そうに見えるが、これは見せかけだけ。最近作られたものだ。
(写真や音楽自体は本物)
さて、ここからが「MML」の話には書けない余談の部分。余談にもかかわらず非常に重要。
7年後の 1968年、映画「2001年宇宙の旅」が公開されます。
この映画、セリフが極端に少ないのが特徴。
とにかく、映像を「体験」してもらおう、という作り方で、説明がない。
たとえば、宇宙ステーションから地球にテレビ電話をかける。
特に説明はないのだけど、会話と会話の間に妙な間が空く。
電波でも明らかな時間がかかるほどの距離、というのを示していて、間の取り方も距離を正しく反映している。
でも、この「妙な間」は特に説明されない。
映画の最初のクライマックスは、宇宙船のコンピューター HAL9000 の反乱と、船長による反撃。
HAL9000 は次々と乗員を殺し始め、船長はそんな HAL を分解してしまう。
分解される中で、恐怖を語り、命乞いをする HAL。
しかし船長は手を止めない。ついに HAL は、薄れゆく意識の中で Daisy Bell を歌い始める…
この映画のもう一つの特徴として、実在する企業のロゴが多数出てくることがあります。
もちろんスポンサーとしてお金を出しているのもあるのだけど、必要なところにさりげなくロゴを出すことで、リアリティを増している。
IBM は特に重要なスポンサーでした。
優れた人工知能が木製探査船を制御している…という設定でしたから。
しかし、人間に反乱を起こす、というストーリーを知って、IBM は怒ってスポンサーを降ります。
この時には、HAL のアルファベットを後ろにずらすと、IBM となる…というのも怒りの理由でした。
クラークは、小説のあとがきで、「IBM の協力なくしては、この映画は完成できなかった。わざわざ彼らを怒らせるようなことをする理由は無い。HAL を隣の文字にずらすと IBMとなる、というのは全くの偶然だった」と書いています。
(注:記憶による。高校の時に図書室で借りて読んだけど、実物は手元にないから)
でも、たぶん嘘だよねー。クラークが意図してなかったとしても、キューブリックは意図してたよねー。
だって、HAL は Daisy Bell を歌うんですよ。これは IBM 704 が歌った曲です。
しかも、死ぬ間際に…。死に面して子供の頃に好きだった歌を口ずさむ、なんて、非常に人間的なドラマじゃないですか。
そう、「IBM 704」が子供だとすれば、「HAL 9000」は成長した大人なのです。
優れた知能を持ち、人間と対等に会話できるだけでなく、いつまでも従順なだけではない、立派な「人格」になったのです。
HAL = IBM でないと、この部分の意図が出ない。
そして、コンピューターが人間並になった時、人間ももっと上の存在にならなくては、というのがこの後のストーリー。
そして、話はコンピューターの音楽史に戻るのです。
全体を 500行に収めたい、と言っているのに、こんな長い余談書けないけど、音楽史で非常に重要。
詳しくは後日公開予定の本文に書きますが、1975年に発売された Altair 8800 の最初期ユーザーの一人は、入手してすぐに音楽演奏プログラムを作っています。
そして、「ホームブリュー・コンピュータークラブ」で演奏をお披露目しています。
この時に演奏した曲は、当時流行していたビートルズの「フール・オン・ザ・ヒル」。
非常に調子っぱずれでノイズの多い演奏ですが、Altair 8800 がほとんど出荷されていない状況で、もし購入しても 256byte しかないメモリで何を作ればよいかわからない中で、皆が初めて見た「見事なプログラム」でした。
演奏が終わって、皆が拍手をしようとしたとき、次の演奏が始まります。
プログラムの中には、すでに「アンコール」演奏まで入れてあったのです。
ここで演奏されたのが… Daisy Bell。
2001年宇宙の旅は話題になった映画ですし、コンピューター好き = SF 好きが多かったので、何人かはその意図を理解しました。
10年前には IBM の大型コンピューターにしかできなかった「音楽演奏」が、今みなの目の前で、手に入る金額のコンピューターで行われているのです。
その曲目が Daisy Bell だということは、「このコンピューターは、IBM 704 の子孫であり、未来の HAL 9000 である」という主張です。
そんなにすごいものを、誰もが手に入れられるようになったのです。
このプログラムは後に雑誌掲載されているのですが、Altair 8800 を入手した人ならだれもが試したいプログラム…つまり、パーソナルコンピューター最初の「キラーアプリ」だったようです。
作者の人は「何度も夜中に電話で起こされて、プログラムがうまく演奏してくれた、という喜びの言葉を聞いた」そうです。400回はあったとか。
わざわざ作者に感動を伝えたくなるほど、当時の人々がこの演奏に感動していたのがわかります。
その感動の半分はおそらく、Daisy Bell を曲目に選んだ、という部分にありそうですけどね。
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日はヴァネバー・ブッシュの命日(1974)。
機械式のアナログコンピューターを考案した人で、第2次世界大戦時のアメリカで、軍に「科学的な」知見の提供を推し進めた人。
この、科学的な知見があったからこそアメリカは核兵器の開発に成功したのですし、どんな戦局で敵を確実に狙える射表を作り続けていたのです。
彼は天才でした。MIT を卒業し、しばらくは軍で働きますが、数年後には教授として MIT に戻ってきています。
この時に微分解析機を発明しています。
機械式計算機、というと、通常は歯車を使用します。
これは、お金の計算をするような際には非常に役立ちますし、簡単な計算アルゴリズムで求まる値を出すのにも役立ちます。
しかし、この方法で砲弾の着弾点を計算するなど、事実上無理でした。
歯車計算機は、デジタルで演算を行います。「連続した」計算は得意ではありません。
たとえば、射表を作るために砲弾の動きを計算するとなると、「連続して」飛んでいく様子を計算する必要があります。
これは繰り返し計算を行うことになるのですが、1回の計算ごとに、いくつものパラメーターの再計算が必要になります。
速度は刻々と変わりますし、空気抵抗は速度の関数です。ある時点での抵抗を求め、その抵抗を元に速度の変化を求め、変化した速度でまた抵抗を求め…
重力加速度の考慮もありますし、計算が膨大なのです。
効率よく計算するには、1回の計算で砲弾のすすむ距離を大きくとればいいのです。
しかし、そうすると誤差は大きくなります。計算ごとに誤差が蓄積し、着弾点は全く見当はずれの場所になります。
1回の計算で進む距離を小さくとれば、誤差は小さくなりますが、計算の回数が膨大になります。
しかも、空気抵抗は気温や湿度によって変わります。重力も緯度によって異なります。
これに、大砲の角度や火薬量のパラメータを加え、何度も何度も計算する必要がありました。
彼はこの難題に対し、「アナログコンピューター」という、新たな概念を発明しました。
…いや、アナログ計算機はすでにありました。計算尺とか、非常に簡単だけどアナログ計算機。
彼が作ったのは、歯車の代わりに円盤とゴム製の車輪を使うコンピューター。
位置を「少しづつ」変えることで、ギア比に相当するものを連続して変えられます。
ある車輪の回転が、別の車輪の位置や回転に影響を与えるようにすると、連続した計算を続けることができます。
そして、計算が終わると…砲弾の高さを示す車輪が「地面」に達すると、機械は停止します。
この時、砲弾の「発射位置からの距離」を示す車輪のある位置が着弾点です。
この方法で、膨大な射表を作ることが可能になりました。
他にも応用は可能ですが、実際多くの射表が、ブッシュの作った微分解析機によって作られています。
ブッシュは、後に MIT の副学長にまでなっています。
エリートだったのです。
ブッシュは天才であり、自分が天才であることを知っていました。
そして、凡人は天才の意見に従うべきだ、という強い信念を持っていました。
つまりは、自分こそが正しくて反対するやつは気に食わん、という非常に困った考えの持ち主です。
人格破綻者と言ってもいいでしょう。
でも実際、天才ブッシュの意見は傾聴に値するものでした。
1939年。ブッシュはワシントン・カーネギー研究機構の総長となります。
アメリカの科学的権威の最高峰です。政府に助言を行い、政策を左右する力もありました。
ところで、第1次世界大戦では、アメリカ軍は参戦したものの、非常に多くの戦死者を出しました。
当時のアメリカはまだ「精神主義」で戦っており…つまり、気合さえあれば勝てる! と無謀な戦いを挑むことが多かったのです。
ここでブッシュは「科学的な戦い」の重要性を説き、国防研究委員会の設立を呼びかけます。
1940年、ルーズベルト大統領と会談し、わずか 10分で説き伏せ、国防研究委員会の議長の座につきます。
10分で説き伏せた、というのはつまり、ルーズベルトも「精神主義で戦いに勝てるわけがない」と感じていたのでしょう。
そこに、科学的研究の最高機関の総長が、国防のために科学的な協力を申し出たわけです。渡りに船で認めたのだと思います。
しかし、これによってブッシュの権力は有事に於いて政府より強いものとなり、政府を無視して様々な「国防のための」計画を始めていきます。
ブッシュは、軍の資金を「科学の研究のため」にばら撒きました。
ENIAC も、Whirlwind I もこの資金で作られましたし、原爆もこの資金で作られました。
ただ、ブッシュはいちいち個々の計画の承認・非承認を判断していたわけではありません。
ENIAC の開発プロジェクトが始まってからも、「射表の計算は微分解析機を使うのが一番で、デジタル計算機など役に立たない」と発言しています。
先に書いた通り、歯車計算機では計算量が膨大すぎて役に立たなかったのは事実です。
そして、ブッシュは自分の考えが正しいと常に思っていました。
幸い、彼が ENIAC への研究資金を引き揚げることはありませんでした。
ブッシュは、非常に責任の重い仕事についていたために忙しく、重要そうな情報を探し出すシステムを夢想しています。
1930年代には着想していたらしいのですが、この夢想を論文の形で発表したのは 1945年でした。
「As We May Think」(我々が考えるように)というタイトルで知られるこの論文、今でいえばハイパーテキストシステムの考案です。
コンピューターの黎明期から、コンピューターの進化の方向付けに、大きな役割を果たしています。
…しかし、この話は、また明日。
同じテーマの日記(最近の一覧)
関連ページ
ヴァネバー・ブッシュ 誕生日(1890)【日記 15/03/11】
ダグラス・エンゲルバート 誕生日(1925)【日記 16/01/30】
ケン・オルセン 誕生日(1926)【日記 17/02/20】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日は MEMEX の構想が発表された日(1945)。
さて、昨日(ヴァネバー・ブッシュの命日)の話の続きです。
「今日は何の日」で、まさかの2日連続の話題。
ブッシュは、1945年の今日発売の The Atlantic Monthly 誌に、「As We May Think」(我々が考えるように)という論文を発表しました。
この論文は、仮想機械 MEMEX の効用を説いたものです。
今は良い時代で、この全文を読むことができます。
論文の前半は、過去の技術の進化と現在の最先端が…各種分野ごとにわかりやすく列記されます。
露光に何時間もかかった写真が進化し、乾板写真となり、現在ではテレビで生中継が可能なこと。
鉛筆やタイプライターで紙に記録してきたのが、現在ではパンチカードに記録することで自動集計が可能になったこと。
そろばんで計算していたのが、機械式計算機が生まれ、複雑な方程式も解ける微分解析機となったこと。
情報を適切に並べるのに、紙の束を何らかの順で並べてファイルしていたのが、パンチカードによってソートが可能になり、何万件ものデータを扱えるようになったこと…
それらの紹介の後、MEMEX のアイディアが披露されます。
技術は進み、たくさんの情報を記録し、ソートしておけるようになりました。
しかし、たとえ「膨大な本をタイトル順に並べた」としても、それで必要な情報が探しやすくなったのでしょうか?
情報を整理するのには、機械的な方法ではダメで、「我々が考えるように」しなくてはならないのです。
ここで、とある情報に、関連性がありそうな別の情報を接続し、後でいつでも引き出せるようにする、という MEMEX の、基本的なアイディアが紹介されます。
膨大な情報は、マイクロフィルムで記録されます。
新しい本や新聞をマイクロフィルムで購入することもできます。
新たな手書きノートも、メモも写真も、撮影して瞬時にマイクロフィルム化できます。
そして、関連する事柄を接続しておくことができます。
…ブッシュは、この「接続された情報」のことを、トレイル(足跡)と呼びました。
たとえば、百科事典では、項目の末尾に関連項目が示されます。
MEMEX のフィルムとして購入できる百科事典は、項目ごとにトレイルが設定されているものになるでしょう。
そして、MEMEX の白眉は、これら「トレイル」の扱いにあります。
トレイルのデータもまた、MEMEX のマイクロフィルムとして記録されます。
パンチカードの穴の有無が光によって検査されているのだから、マイクロフィルム上のインクで同じように情報を記録できる、という技術的裏付けも示唆されています。
そして、マイクロフィルムは複製することも簡単です。
あなたのトレイルデータを複製し、友人に渡すこともできるのです。
例えば、あなたが趣味で「ヨーロッパにおける弓の歴史」を調べたとします。
あなたの書いた論文と、根拠を示す関連書籍を結び付けたトレイルデータを、あなたの友人に渡せば、友人は根拠となる事実が正しいことを確認しつつ、あなたの論文を評価できるのです。
(関連書籍は買う必要があるかもしれませんが、それは「本」が情報の中心だった当時としては当たり前のことです)
弁護士は自分の関与した事件の関連書類をまとめておいて、クライアントに対して、自分が過去にどのような事件を専門として仕事をしてきたか、すぐに示せるでしょう。
医者は珍しい症例のデータを共有し、患者の診断に役立てられるかもしれません。
MEMEX は、単に個人的な記憶の手段としてだけでなく、人々の暮らしを変える「情報の交差点」となるのです。
昨日、ブッシュの命日の記事で書いた通り、ブッシュは自分以外の人の考えを認めないところがありました。
彼はデジタル計算機の限界を超えるために、微分解析機というアナログコンピューターを発明しています。
そのため、デジタル計算機は信用しておらず、新たに生まれつつあったデジタルコンピューターも信用していませんでした。
彼にとっては、マイクロフィルムが最先端技術であり、MEMEX はマイクロフィルムによって発明されるだろう技術でした。
実は、マイクロフィルムを使った連想記録は、この頃すでに発明されていたそうです。
しかし、その発明のことは知らず、技術を発展させるのではなく、夢想するだけに終わっています。
これもまた、「自分のような天才以外に、このようなことを思いつくはずがない」という過信からだったようです。
しかし、この論文のタイトルが「MEMEX」ではなく、「我々が考えるように」だということに注意してください。
ブッシュは、仮想機械として MEMEX を示しましたが、この機械が重要だと言っているわけではありませんでした。
MEMEX を重視するのであれば、ただ MEMEXの夢を語ればよいのです。
しかし、論文の前半は「各分野ごとの工学発展史」でした。
彼は、それまで「技術」が先行し、バラバラに発展していた各種工学分野の成果を、「そろそろ、人間が使いやすいことを重視して、まとめなおすべきではないか」と提言したのです。
いうなれば、20世紀の機械技術の
現代的に振り返えれば、ユーザーインターフェースに革命を促したのです。
MEMEX は魅力的な機械でしたが、夢想が壮大すぎてすぐに実現できそうにはありませんでした。
しかし、後の世に確実に種をまきました。この論文を読み、感銘を受け、後に MEMEX を自分なりに作り出そうとした人たちがいるのです。
…というところで、今日の話は終わりにしておきます。
続きはまた明日。(ナヌッ!?)
同じテーマの日記(最近の一覧)
関連ページ
ヴァネバー・ブッシュ 誕生日(1890)【日記 15/03/11】
ダグラス・エンゲルバート 誕生日(1925)【日記 16/01/30】
ダグラス・エンゲルバートの命日(2013)【日記 14/07/02】
別年同日の日記
15年 A Dark Room , Candy box! , Cookie Clicker.
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日は NOP 命令が初めて公式文章に記された日(1960)。
…本当かどうかわかりませんが。
僕の調べではこれより古い NOP 命令の記述はありません。
2014.7.6 追記
もっと前の記述がある、という情報が寄せられました。情報提供ありがとうございます。
この記事の内容全てが誤りではありませんが、少なくとも「初めて公式文書に記された日」は誤りでした。
最初に NOP が登場したのは IBM 701。しかし、考え出したのは先に開発を始め、後で発売された IBM 702のようです。
IBM 702 では、明確な目的を持って NOP が作られています。
詳細は別記事にまとめてあります。
えーと、1年近く前に書いた記事、「NOP命令の誕生」は、自分では結構面白い内容だと思うのですが、面白さが伝わる人はかなり限られたようです。
うん。妻にすら、なんだかわからないと言われたよ。
まず、普通は NOP 命令が何かわからないよね。それで当然。
もっと多くの方に読んでもらえるように、前知識を解説しちゃいますよ!
面白いと思ったら本文も読んでいってね。
現代のコンピューター機器は、大抵 CPU を搭載しています。
会社によっては MPU って呼んだりするけど、つまりはコンピューターの本体部分。
コンピューターは電流を使って計算をしているわけですが、これは、計算できる回路をたくさん用意して、切り替えているのです。
足し算をしたいなら足し算回路を、引き算をしたいなら引き算回路を、掛け算をしたいなら掛け算回路を、割り算をしたいなら割り算回路を呼び出すだけ。
計算以外では、メモリにデータを記録しておく、とか、逆にデータを読み込む、とか。全部回路で用意されている。
そんな、小さな命令の寄せ集めでコンピューターは動いています。
ちなみに、画面に文字を書いたり、キーボードからの入力を読み込むのは、「記録」の一種です。
特定の場所に書いたデータは画面に表示されて、特定の場所のデータは、キーボードの内容によって勝手に書き変わる。
コンピューターって、本当に、驚くほど簡単な事しかできません。
さて、そんなコンピューターの「命令」も、データとしてメモリに記録されています。
コンピューターは数字しか扱えませんから、10 だったら足し算、11だったら引き算…みたいに、命令は数字と対応している。
しかし、数字だとプログラムしにくいので、一対一対応で、英語を省略したような名前が付いているのが普通です。
足し算なら add 、引き算なら sub 、掛け算なら mul 、割り算なら div 、という具合。
データの読み込みは CPU によって mov (ムーブ、移動、の意味)だったり、ld (ロード、読み込む、の意味)だったり、store (ストア、保存する、の意味)だったり。
余程単純な英語でない限り、CPU メーカーによって命令の呼び名も、その動作詳細も異なるのが普通です。
ところが、メーカーに寄らずほとんど同じ名前、動作も同じ命令があります。
それが NOP 命令。
No OPeration (なにもしない)の略なのですが、略であれば NOOP になりそうなものが、なぜか NOP 。
(NOOP にしているメーカーもあります)
…と、これが「NOP命令」が特別な理由なのですが、理解できる人が非常に少ないんですよね。
多分、プログラム能力がある人って、非常に簡単なものを作る能力でも 100人に1人いない。
ましてや、機械が理解できる言葉(機械語)で直接プログラムしようなんて人は、プログラムできる人のうち 100人に1人いない。
そして、機械語プログラムができる人でも、NOP 命令に興味を持つ人なんて、100人に一人いない。
…となると、今日が「NOP が初めて公式文書に記述された日」と書いて関心を持つ人は、日本全国で 100人程度しかいないことになる。
#今まで NOP に興味を持ってなかった人の2人に1人が、このページを読んで興味を持ってくれれば、5千人程度には増える計算(笑)
僕がコンピューターを使い始めた時には NOP はあって当たり前の命令でした。
だから僕も、正直なところ NOP の存在を特に疑問に思ったことはありませんでした。
これがちっとも「常識」ではないと知ったのは、がたろうさんのページに、「NOPと都市伝説」というコーナーを見つけたから。
そして、上記ページを見つけた時、すでに僕は がたろうさん が求めている答えを知っていました。
がたろうさんは、ある程度有名なマシンを調べて PDP-1 が NOP を最初に搭載したマシンである、と結論付けていました。
そして、その理由はおそらく技術的に自然発生しただけだろう、と。
NOP の名前の由来も、同じように自然発生と考えています。
しかし、PDP-1 の前には TX-0 があり、TX-0 には NOP が存在しなくてはならない、強い理由があるのです。
実際、PDP-1 よりも前に TX-0 の技術文章に NOP が登場していました。
TX-0 は、非常に複雑な命令系を持っています。
先に、CPU の命令を「足し算」「引き算」などの簡単なものしかない、と書きましたが、TX-0 にはそれすらもないのです。
「半加算」と呼ばれる、繰り上がりの無い足し算は出来ました。
また、「繰り上がり処理」も出来ました。
だから、組み合わせれば足し算ができます。でも、それを組み合わせるのはプログラマの責任でした。
全ての命令が、いくつか組み合わせたら何かできそうな機能どまりなのです。
そして、これらの命令は「同時に」実行することが可能でした。
命令の特定のビット(2進数の1桁)を 1 にすると実行され、0 にすると何もしないのです。
いくつかの命令は、2進数1桁ではなく、5桁で表現されました。
この命令体系は TX-0 独特のもので、僕は他のマシンでこのような方法を見たことは無いです。
5桁で示される命令は…2進数5桁では、32種類の組み合わせを作り出せます。
しかし、当初は全ての数字に命令が割り振られていたわけではありません。
命令表で「何も入っていないところは将来の拡張予定」とされました。
しかし、ここで問題が起こります。
1桁で示される命令は「0」を指定すると、その命令は実行しない、と決められています
5桁の場合、すべての桁が 0 の場合は、何もしないことになっていました。
しかし、「何もしない」がゆえに、命令表には何も書かれていませんでした。
何も書かれていないのですから、これは、将来の拡張予定なのでしょうか?
もし拡張されたら、5桁の2進数で示される部分は、「何もしない」ことができなくなり、他の命令に悪影響を与えるのでは?
そして、懸念していた事態…すべてが 0 の「将来の拡張予定」部分に、命令が拡張される時が来ます。
追加された命令は「NOP」。意味はもちろん「No OPeration」でした。
「命令が入ってない場所は将来の拡張予定」でしたが、すべてが 0 の時は何もしないことを保証したかったため、「何もしない」命令が作られたのです。
この追加命令が公式文章に登場したのが、1960年の7月1日。つまり54年前の今日でした。
ちなみに、TX-0 は、6bit を 1byte とする、18bit コンピューターでした。
当時はアスキーコード選定前。1文字は 6bit で、3文字を同時に扱える、ということになります。
このため、TX-0 の機械語命令は、3文字で1命令とするのが普通でした。
NOOP ではなく NOP となっているのはそのためです。
…と、概要は以上の通り。
詳細は「NOP命令の誕生」を読んでね。
ちなみに僕が書いたページ、がたろうさんのページでは触れられていませんが、書いてすぐに連絡済みです。
いろいろお忙しい方なので、ページ更新の暇が無いようです。
お忙しい方の手を煩わせたくないので、「こんな記事があるよ」というような無駄な追加連絡はしないように。
(こっちも趣味、あっちも趣味だから、主張が違ったって構いませんし)
同じテーマの日記(最近の一覧)
関連ページ
ヴァネバー・ブッシュ 誕生日(1890)【日記 15/03/11】
ダグラス・エンゲルバート 誕生日(1925)【日記 16/01/30】
ダグラス・エンゲルバートの命日(2013)【日記 14/07/02】
別年同日の日記
15年 A Dark Room , Candy box! , Cookie Clicker.
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日はダグラス・エンゲルバートの命日(2013)。
一周忌です。
昨年追悼文かいたので、そちらも参照のこと。
50年代の画面技術も彼に関係の深い話です。
さて、一昨日はブッシュの命日。
昨日は、ブッシュが「MEMEX」の構想を発表した日でした。
そして今日命日のダグラス・エンゲルバートは、MEMEX を実現しようとした、最初の一人。
「今日は何の日」で3日連続で話ができるとは思いませんでした。
ブッシュは、情報を記録する最先端メディアであったマイクロフィルムと、情報を整理する最先端メディアであったパンチカードを組み合わせたようなもの、として MEMEX を構想しました。
ブッシュ自身は、若いころに「デジタル計算機」の限界を感じ、機械式アナログコンピューターを作った人です。
その経験から、デジタルコンピューターなんて信じていませんでした。
でも、エンゲルバートは海軍のレーダー技師で、SAGE を使った経験から「コンピューターを使えば、情報の記憶と整理の両方が可能である」ことに気が付きます。
これを使えば MEMEX が実現できるでしょう。
そして彼は NLS を作りました。
世界初の、コンピューターで文章を執筆し、推敲し、共有できる環境です。
このために、彼は(正確には彼と仲間たちは)世界初をたくさん考案しています。
一番有名なのは「マウスの発明者」ですが、ディスプレイ、ワープロ、GUI、メール、チャット…などなど。
MEMEX の「トレイル」…現在では「ハイパーリンク」と呼ばれているものに相当するものはありません。
でも、MEMEX では「マイクロフィルムによって友人と情報を共有できる」としていた情報を、オンラインで共有しながら会議ができるようになりました。
エンゲルバートは NLS を大々的に発表します。
直接見たわけではないようですが、テッド・ネルソンにも影響を与えました。
エンゲルバートの NLS は、使いやすくしようと頑張っていたのですが、実はまだまだ非常に使い方の難しい、技術偏重のシステムでした。
アラン・ケイは、NLS に触発されながらも MEMEX の目指した「我々の考えるように」使えるシステムをめざして研究を開始します。
テッドネルソンは、NLS に足りないもの…情報を繋げる「トレイル」を、コンピューター上に取り入れる方法を考え、マイクロフィルムではとても実現できなかった「ハイパーテキスト」に辿りつきます。
現在の WEB は、アランケイの目指した「使いやすいシステム」と、テッドネルソンの目指した「ハイパーテキスト」の上に作られた…今すぐ実現しそうな機能だけで作られた、小さな箱庭。
…違うもので比較ができません、というのであればよいのですが、残念ながら WEB は、先行する研究者の考えたもののサブセットに過ぎません。
サブセットでも十分便利ではあるけど、問題がいろいろあるのもまた事実。
いつか、新しい技術で解決されると思いますが、その方向性を見極めるためにも、先人たちの研究には敬意を払っておくべきでしょう。
同じテーマの日記(最近の一覧)
関連ページ
ダグラス・エンゲルバート 誕生日(1925)【日記 16/01/30】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
先日、「NOP命令が作られた日」という内容を掲載しました。
そちらの記事にも書いてありますが、1年ほど前に書いた記事にゆかりの日に、概要をまとめて再掲載したもの。
しかし、ありがたいことに多くの方に読んでもらいました。
面白がってくれた人が Twitter でリツイートしてくれて、1日で100RTくらい行ったの。
その結果、元記事を書いて1年たっても情報提供がなかったのに、「IBM 704 に NOP あるよ」という有用情報が寄せられました。
調査したら本当で、もっと深いことがいろいろ見えてきました。
というわけで、訂正記事を書きました。
704 よりもっと前にさかのぼり、それでもちゃんと NOP は意味のある命令でした。
(動作は「何もしない」だけど、作られた理由が明確)
今回の話では、「自己書き換えプログラム」「10進法(BCD)コンピューター」「パンチカード集計機」「無条件分岐命令」あたりがカギでした。
いや、ほとんど古代の遺物のような技術で、これらが結びついたら NOP が出来上がった、というのが目からウロコ。
前回記事を読んで面白いと思ってくれた人なら、今度の記事もお楽しみいただけるかと思います。
一方、前回記事が面白くなかった人は、今度の記事もつまらないかと (^^;;
前回記事もそうだったのですが、少ない手がかりを元に真実を探り当てる、歴史推理小説のようなつもり…で書いてます。
ある程度の前提知識が必要ですが、余りにも一般的でない知識についてはその都度解説しています。
NOP 命令の話なので、少なくとも「プログラムすること」を理解しているのは前提。
出来れば機械語の知識もほしい。
かなりマニアなプログラマーでないと読めない推理小説ですね (^^;
#でも、プログラマーは推理小説好きだと思う。
…と、気を持たせるだけ持たせておいて、詳細は訂正記事に譲ります。
この後は、多くの方が読んでくれたので、反響に返事をします。
(別に僕宛てに送ってなくても、ツイートしてたの見つけたのを含む)
いちいち許可取るの面倒だから、文面はコピーせずに概要だけね。
「読みやすくて面白い」
ありがとうございます。最高の褒め言葉です。
また記事書こうと励みになります。
「読みにくい」
申し訳ありません。精進いたします。
しかし、たぶん文章が読みにくいのではなく、内容が理解しづらいのだと思います。
技術系の話題なので、理解にはそれなりの前提知識を必要とします。
「アセンブラわかる人ってそんなに少ないもんかな?」
僕は非常に少ないと思っています。経験則上。
20年前はゲーム会社にいたので、アセンブラ出来ないとロクなもの作れないだろう…とおもうのですが、実際アセンブラわからないプログラマが半分くらいはいましたよ。
ちなみに、普段の仕事はすでに C で十分でした。アセンブラ必須ではない。
でも、ゲームで繊細な動きを作れる人は、やはりアセンブラレベルまで理解できている人でした。
ゲーム会社でそれなのだから、普通に考えたらもう絶望的。
「μコードに似てる」
いや、全くその通りです。呑み込みが早い。
TX-0 のベースとなった Whirlwind I は、μコードを最初に考案したマシンで、TX-0 は簡略化のために、μコードを直接使ってプログラムするような形式でした。
「0の発見に通じるものがある」
こちらも呑み込みが早い。
先日書いた日記には書いてませんが、元記事のまとめにはそういう表現を使いました。
僕がそう感じていたので、記事全体がそういうことを匂わす流れになっているとは思います。
「妻に理解を求めるのが一番ハードル高い」
あー、妻すら理解してくれない、と書いたからね。
世間一般的には、夫の趣味を理解しない妻(もしくはその逆)という構図は多いのですが、うちは幸いその点は大丈夫。
趣味に理解はあります。
妻もプログラムできるし(PHP / Javascript を少し、という程度)、古いコンピューターも理解してる。
(妻が PC 始めたのは MacOS 7 / Windows 3.1 以降だけど、8bit 時代の雰囲気くらいは理解してる)
ただ、アセンブラレベルになると理解が難しいし、ましてやμコードを直接駆動するような TX-0 の話は理解できない。
直接対話で説明できる妻であっても理解させることは難しいのに、ましてや文章でどれだけの人に伝わるか…
という意味合いでした。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
もう1か月半ほど前に「世界初のMML」という日記を書いたのだけど、書いてから気になって調査を続けていました。
TX-0 が世界初の MML 、というのはまぁいいでしょう。
MORIYA Ma. 氏の調査で、現代 MML の先祖がベーシックマスターらしいことも判っている。
じゃぁ、この間はどのようにつながっているの?
…このミッシングリンクが気になっていました。
TX-0 と現代 MML の間は「つながっている」のか、「偶然の一致」なのか、と言い換えることもできます。
いろいろ調査したら、出るわ出るわ…
思った以上に音楽演奏プログラムは多い。500行くらいにまとめたかったのだけど、最終的には 1500行くらいかな? 多すぎて読むのが疲れるので、全体を3部構成にしています。
それでも、途中で見つけて、興味深いから調べて、かなり長い文章書いて、結局枝葉に過ぎなかったので全部消した、というシステム多数。これは、「調査済み」ということを示すために最後に概要だけまとめてある。
コンピューターの黎明期から音楽演奏はあったし、コンピューターが新たなフェイズに入ると、必ず歴史が繰り返されて、音楽演奏の方法が「再発見」される。
世界初のコンピュター演奏で、データはバイナリだった。でも、数年たって TX-0 が MML っぽい記述で演奏を可能にする。
このまま技術がどんどん洗練されていくのかな…とおもったら、PDP-8 でコンピューターが驚くほど安くなり、新たなユーザー層が開拓され、またバイナリ演奏の方法が「発明」される。
そのシステムはすぐに言語を獲得し、洗練されていく。洗練の速度は黎明期より速い。
でも、やっぱり Altair が発売されて新たなユーザーが増えると、またバイナリ演奏からはじまることになる。そして、あっという間に言語が洗練される。
でも、TK-80 が日本で発売されると、またバイナリ演奏に戻る。
…いつまでも続く無限廻廊のよう。でも、ユーザーが増えてつながりも出来ているから、発展の速度はどんどん上がり、システムは洗練されていく。
Altair は非常に普及したので、いくつもの音楽演奏プログラムが作られ、発表されている。
そのうち、特によく出来た2つ…SCORTOS と MUSIC の記述方法を組み合わせ、さらに改良したものがベーシックマスターの BASIC に組み込まれる。
さらに、MZ-80K の技術者は「2つを混ぜた」ことに気付いたようで、再度2つの配合の仕方を変えて再改良する。
またさらに、マイクロソフトがベーシックマスターと MZ-80K と SCORTOS と MUSIC と MUSYS(SCORTOS や MUSIC の元になったシステム)を再発見し、よく研究して根本から作り直す。
いろんな人の手で、何度もスクラップ&ビルドが繰り返され、生み出されたのが現代 MML の始祖。
だから、「どれが最初」と簡単に言えるようなものではないのだけど、あえて言うなら SCORTOS が直系の始祖。
(TX-0 が偶然とはいえ類似文法でより古い、というのは事実で、世界初を否定するものではない)
と、概要はこんな感じ。
細かな文法や、システムの発表時期などを調査して、おそらくこうだろう、と類推しただけで、実際の開発者たちに話を聞いたわけではありません。
ただ、細かなデータなど、証拠はたくさんある。あてずっぽうに言っているわけではない。
興味を持ち、詳しく知りたい人は、詳細記事へ。
別年同日の日記
20年 phpSpreadsheet で小数点付き数値と見なせる文字列を入力するとおかしくなる
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
NOP 命令の話を書いたときに、IBM 702 が出てきました。
「BCDを使った10進計算機だった」と書いたところ、ツイッターで思わぬ反響がありました。
電卓なんかは内部で 10進の計算をしている、と書いてある書籍があったが、デジタル回路でどうやって10進計算をしているのか不思議だった、とのこと。
あーなるほど。ここら辺微妙な技術ですね。
2進数がわかる、というのはそれなりにコンピューターに詳しい人だと思いますが、その2進数で10進の計算をする、という話題は、さらにプログラムができる人でないとわからない。
古いコンピューターでは BCD はよく使われた技術なのですが、今ではあまりお目にかかることはありません。
2進数を10進数に変換するのが「当たり前」の技術になったためでもありますが、昔はこの変換も大変で、10進数で結果が欲しいのであれば、最初から 10進数で計算する、というのは悪くないアイディアでした。
2進数を10進数に変換する、というのが当時どれほど大変だったことか、僕が良く挙げる本ですが「ハッカーズ」に書かれています。(第1部 真のハッカーたち 第2章 ハッカー倫理 「芸術や美をコンピューターで作り出すことは可能である」より)
ある時、TX-0 で二進数を十進数に直して表示するルーチンを作る競争が始まります。競争は自然に始まったものですが、誰もが使う基本的なルーチンを少しでも短くできるように、多くの人が知恵を競い合うようになります。
最初は百命令もあったルーチンは、参加者の努力で50命令ちょっとまで削られます。しかし、その後はなかなか進みません。
50命令の壁…誰もがそう感じ、これ以上は1命令たりとも削れないのではないか、という雰囲気が、皆の間に広まります。
その後、寡黙なハッカー、ジェンソンのチャレンジが始まります。彼は誰にも相談せずにアルゴリズムを根本から考え直し、絶妙なテクニックを駆使し、それまでの誰もが思いもつかなかった方法でプログラムを短くするのです。
以下引用。
その内容がようやくハッカー仲間に明らかになったのは、ジェンソンのプログラムが掲示板に張り出されたときだった。十進法プリント・ルーチンを限界まで切り詰めたことをみんなに知らせる彼らしいやり方と言える。
「命令数46」
コードを見つめるみんなの口があんぐりと開いた。マージ・ソーンダースは、その後幾日か、ハッカーたちがいつになく無口だったことを覚えている。
「みんな、これが決定版だってわかったんだよ」と、ボブ・ソーンダースは後に語った。「ついに解脱というわけさ」
今なら2進数を10進数に変換するのは当然の基幹技術で、高級言語では意識することもありませんし、アセンブラでも簡単にできるように命令が揃えられています。
しかし、それ以前は、こんな苦労をして2進数を10進数に変換するか、最初から BCD で計算するかのどちらかだったのです。
さて、BCD の話。
1bit は、 0 か 1 かの2つの状態を表せます。
ここでの足し算は、4種類しかありません。
0+0 = 0
0+1 = 1
1+0 = 1
1+1 = 10
最後だけ、ちょっと特別。繰り上がりが入っているからです。
もし結果も 1bit なら、上の桁は無くなって答えは 0 です。(XOR:排他的論理和、と呼ばれる状態)
繰り上がりは上の桁に足される、と考えれば、何桁に増えようとも、この4つのパターンの組み合わせだけで計算ができます。
これが、2進法計算の原理。
2進法が 2bit なら 2*2 で4種類の状態を表現できます。(00 01 10 11 の4つ)
3bit なら 8 種類、4bit なら 16 種類の状態となります。
10進数一桁(0~9の10種類の状態)を表すのに、3bit では足りないが 4bit なら十分であるとわかります。
そこで、4bit を単位として 10進数を表現することを、BCD と呼びます。
BCD は、Binary Coded Decimalの略。2進数に変換された10進数、という意味合いで、日本語訳は2進化10進。
0000 は 0 。0001 は 1 、0010 は 2 。ここら辺は普通に2進法と10進法が一致します。
1000 は 8 で 1001 は 9 。
この次が重要で、普通に2進数で数えていれば、 1010 になります。(16進数では A と記述される)
でも、2進化10進では繰り上がりが生じて、1 0000 になります。9の次は 10 、という表現です。
足し算も、1bit 単位では2進数と変わりません。でも、計算後に 4bit 単位で結果を見直し、9を超えたら繰り上がって、1の位だけ残すようにします。
#実際にはいろいろややこしいが、特定条件になった時に6を足せばよい。この6は、10進と16進の差分。
そういう回路が組んである場合もあるし、計算後に補正する、なんて面倒を無くすために、最初から足し算を九九みたいな表で持っている機械もありました。
ここまでできれば後は応用。引き算は足し算の逆だし、掛け算は九九の表を持っておけば足し算に変換できます。
(割り算が厄介なのは2進数と同じ)
これで、2進数を使ったデジタル回路で、10進数の計算ができます。
ざっくり言えば、これが BCD の原理です。
昔の BASIC だと、32768 を超えるとエラーになりました。これ、16bit では -32768~32767 しか表せなかったためです。
科学計算では非常に大きな値を扱う可能性がある一方、観測精度の問題も付きまとうため、「おおよその値」がわかれば十分なことが多いです。
だから、たとえば 16bit の範囲の値に「10 倍」とか「10000倍」とか、倍率を付けて(下駄をはかせて)計算しても構いません。
このように下駄をはかせる場合、下駄のことを「指数」と呼びます。
指数があると非常に大きな数も扱えるようになるけど、正確な計算ができるのは、やっぱり最初の 16bit の範囲だけ。これを有効桁数と言います。
現代的には、たとえば Javascript では常に倍精度実数計算をしています。倍精度実数、というのは、有効桁数が 53bit で、指数が 11bit 、符号が 1bit ということ。合計すると 65bit なのですが、ちょっとした数学マジックでごにょごにょ…っとすると、64bit 丁度に収まります。(1bit 得してる)
だから Twitter のステータス(つぶやきにつけられるID)が 53bit を超えてしまったときに騒ぎになったのは記憶に新しいです。
さて、話を戻して、この「有効桁数を持った数値を、指数で大きくして計算」は、コンピューター以前から科学分野では当たり前でした。
IBM の最初のコンピューターである 701 は科学分野向けに作られていたため、当然この方法で計算します。
しかし、これは科学分野では当たり前でも、事務会計分野ではとんでもない話です。
事務会計では、最後の1セントまでキッチリ計算できないと話にならない。桁が大きくなって有効桁数を超えました、なんていって誤差が生じるようでは困るのです。
結果として、科学計算用ほどの速度を求めない代わりに、どんなに桁数が多くても最後の1桁までキッチリ計算する正確さが求められました。
これに応じるように作られていたのが IBM 702 で、BCD を採用しています。
(言語設計上の FORTRAN と COBOL の違いでもあります。FORTRAN は科学技術用で高速性重視、COBOL は事務用で正確さ重視でした。実際、COBOL は内部表現に BCD を使用します。)
BCD の数値はメモリ上に用意され、「終端記号」が現れるまで何桁でも増やすことができました。
もちろん、計算もメモリ・メモリ間で非常に長い桁数同士で行えます。
2進数であっても、レジスタよりも長い有効桁数の計算を行う際に、メモリ上に値を持つことがあります。
このようなものを「多倍長整数演算」と呼びます。多倍長演算すると、ただでさえ厄介な「2進数から10進数への変換」が、さらに厄介になります。
その点、BCD を使った多倍長整数演算なら、10進数への変換は簡単です。IBM 702 は、そのような用途に特化してあったのです。
話は急に変わって、世界初の 1chip CPU である Intel 4004 も IBM の BCD コンピューターの流れを汲む設計でした。
もともと、Intel に「計算機用 LSIの開発」を依頼したビジコン社では、計算する内容をすべてレジスタに入れる形式を考えていたそうです。10進10桁を想定していて、36bit 必要だった、とのこと。(内部演算は2進だったのかな)
想定されていた LSI は、40pin パッケージが必要でした。
しかし、当時の Intel はメモリを作っている会社で、18pin が生産できる LSI の限界でした。
ビジコンから交渉に出向いていた嶋正利はこの技術的限界に気付かずに作りたいチップの仕様を挙げますが、どうも話がかみ合わないまま2か月が過ぎます。
ある日 Intel のテッド・ホフが「電卓なら、4bit で BCD 計算すれば十分では?」とアイディアを思いつきます。
これが、4bit CPU 誕生に結びつきます。出来上がった LSI は 16pin パッケージに収まりました。
テッドは、BCD コンピューターの IBM 1620 を使ったことがありました。
(先に書いた、「足し算も表をひいて行う」コンピューターです)
また、PDP-8 も使ったことがあり、4004 の命令などは PDP-8 の影響が強いです。
訂正 2017.8.28
当初 40pin を想定、と書いてしまいましたが、勘違いでした。
当初は 24pin で8個ほどに分割した LSI を想定。これは大規模すぎて Intel では作れない、とテッド・ホフが 4bit 計算のアイディアを持ってきます。
ところが、ホフのアイディアでは内部回路は単純化されるが、外部は 40pin にかえって大きくなってしまったそうです。
でも、アイディアが良かったので外部 pin 数を減らす工夫を考え、4004 が完成したという話。
また、「2進から10進に変換するためには高価なチップを使えない」ので、4004にはBCD命令を持たせた、という記述がありました。(計算機屋かく戦えり)
どうも、当初は内部2進数演算を想定していた、ということで間違いなさそうです。
時代が飛び回りますが、IBM 702 より古い話。
ENIAC の設計者が後に作った、世界初の「商用マシン」である UNIVAC I では、 XS-3 と呼ばれる特殊な BCD で計算を行います。
先に書いた通り、4bit では 16 の状態があり、BCD ではこのうち10個を使います。
残る状態は 6 個。これを半分にして、BCD の「上下」に3個づつ割り振る、という方法です。
簡単に言えば、2進数の 0000 を 10進数の -3 に割り当てます。
2進数の 0011 が 10進数の 0 。1100 が 9 にあたり、 1111 は 12 です。
1桁づつ計算を行うとき、「繰り上がり」や「繰り下がり」が発生します。
数値範囲には上下に幅がありますから、一旦「2進数として」上の桁を +1 -1 しても問題ありません。
(0000 を 0 とする BCD で -1 すると、 1111 になってしまいおかしくなる)
他にもメリットがあります。0111 が 4 で、1000 が 5 ですから、「最上位ビットが立っているかどうか」を見るだけで、四捨五入ができるようになります。
さらに、ビット反転するだけで「補数」が求められます。
補数とは、簡単に言えば符号が逆の数なのですが、BCD 1桁には 0~9 しかないため、「符号を逆にしたのと同じ意味になる」数を意味します。
もっと言えば、10 進数の場合「10から元の数を引いたもの」が補数です。
たとえば、0100 は 2 ですが、ビット反転して 1011 にすると 8 。
5-2 = 3 となりますが、補数を足すと 5+8 = 13。
1桁で考えると、両者とも結果が「3」となり、同じです。
ビット反転が補数になる、というのは XS-3 の利点です。
…などなど、BCD をちょっと改良しただけなのですが、メリットが沢山。
うまいこと考えたなぁ、と思います。
(実は、UNIVAC I はそれほど詳しくなくて、XS-3 は存在を知っているだけ。
そのうち詳細を調べたいマシンの1つです)
話は戻って IBM 702。
BCD は1桁を 4bit で示す、と書きましたが、702 では 6bit で表しました。
残る 2bit を使って、数字だけでなく文字も表せます。計算専用ではなく、事務書類の作成も含めて「事務処理用」だったわけです。
この文字コード、先頭 2bit が 00 の時は、下 4bit が 0000 ~ 1001 で 0~9 を示します。BCD 数値と文字コードの 0~9 が一致しているのです。
だから、計算結果をそのまま表示することが可能でした。
(本当は少し違うけど、大まかに言えばそういうこと)
最後の桁には、「終わり」を意味するため、先頭の 2bit を特別扱いします。
符号などもここで扱いました。
現代の 8bit コードでも、下 4bit を BCD にして、上 4bit を 0011 にすると、0~9 の文字が出せます。(ASCII の場合)
この形式を「ゾーン BCD」と呼びます。頭 4bit で BCD の範囲(ゾーン)を示すから、ゾーン BCD というわけです。
最後の桁でフラグを持たせる、というのは IBM 702 の時からの伝統…とも言えなくて、処理するシステムによってマチマチ。決まっているのは頭が 0011 だということだけ。
僕が以前に Javascript で作った「開平法計算機」では、Javascript の扱える値の範囲を超えて計算をするために、多倍長演算を行っています。
…といっても、実際は数値を文字列にして、8桁づつ範囲を区切って数値化して計算しているだけ。
文字列として数値を保持して計算しているのですから、ゾーン BCD だと言えます。
先に書いた、Twitter が 53bit を超えてしまったときの対処も、「ID 数値を文字列として表現」でした。これもゾーン BCD です。
ゾーン BCD は、8bit で10進数1桁しか表せません。
8bit に 4bit の数値2桁を一緒に入れれば、もっとメモリを節約できます。
こちらは、2桁を詰め込む(packed)ため、パックド BCD と呼ばれます。
先に書いた、BCD を前提として 4bit に設計された CPU 4004 の後継機種に、8bit の 8080 があります。
8080 には、加算結果を BCD に直してくれる10進補正命令(DAA)がありました。
加算してから BCD 補正、を桁ごとに繰り返す形になりますが、CPU が最初から BCD を扱えるように設計されているのです。
8080 では加算専用だったのですが、Z80 では減算にも対応しました。
GB CPU は 8080 ベースですが、この部分は Z80 互換になってます。
6502 にも BCD 命令があります。というか、BCD 「モード」にすると、ADC と SBC (キャリー付可算と、ボロー付減算)計算命令の動作が変化して、パックド BCD を対象とするようになります。
こちらのやり方では、8080 と違っていちいち補正命令を使う必要はありません。
(実は、Z80 では6個、GB CPU では4個のフラグのうち、2個は BCD 補正命令のためだけについています。6502 にはこの無駄がありません)
ただ、僕はファミコンで 6502 を覚えたので、実際にこのモードを使ったことはありません。
ファミコンでは、回路規模削減のためにこのモードは削除されていたんですよね。
68000 にも BCD 命令があって、加算命令の名前が ABCD です。Add BCD の略、というだけなのだけど、名前に美しさを感じました。
(ABCD に意味を持たせるなんて、他には ABCD包囲陣くらいしか知らない)
その理由だけでこの命令を使いたくて、大学時代に自作したシューティングゲームでは得点を BCD で扱っています。
でも、これは失敗だった。BCD 命令は加減算と符号反転(補数を得る)しかなくて、特別な方法で敵を倒すと得点が何倍、とかの計算すら困る状態でした。
良く理解しない技術に手を出すな、という教訓ですね (^^;
関連ページ
クリストファー・レイサム・ショールズ 命日(1890)【日記 15/02/17】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日はテレビの父、高柳健次郎の命日(1990)。
1926年に「イ」の文字の送受信に成功した、というのが有名な話。
最大視聴率だった、というネタ、好きだわ。
80年代の画面技術で、走査線について書きました。
ブラウン管に電子銃でビームを当て、電磁石によって横に向かってビームを動かします。
さらに、縦方向にも少しづつ動かしていきます。すると、ビームが平面を覆い尽くします。
あとは、ビームを強弱させれば光の強さが変わります。白黒テレビの出来上がり。
…受像機側はこれでいいんですよ。
問題は、撮影側。
ビームが動くのと同期するように、対象物を「左上から横方向に」「少しづつ下方向に」撮影しないといけない。
じつは、この原理は1884年には発明されていて、開発者の名前を取って「ニプコー円盤」と呼ばれています。
受光素子の前を、大きな円盤で覆います。円盤の縁の近くギリギリでおおわれるようにし、縁に多数の穴を開けます。
円盤を回すと、受光素子の前を、穴が多数通り過ぎていきます。
この時、穴は左から右に通り過ぎ、1個が過ぎるとすぐ次の穴が左から現れるようにします。
そして、穴の位置はだんだん下に下がっていきます。
…これで、撮影側の走査線を作ることができます。
じつはこれは、受信機側にも同じ装置を使うことができて、ブラウン管がなくてもライトの光を使って、スクリーンに光を映し出せます。
こうやって、送信側も受信側も「機械式」でテレビを作った例は、高柳健次郎の前にもありました。
しかし、送信側はともかく、受信側に大きくて可動部分が多い方式を使うのは現実的ではない。
家庭に普及させるには、小型化と、可動部分を少なくすることが必須でした。
そこで、受信側はブラウン管を使い、見事に映像を送ったのが 1926年のこと。
「イ」と書いた雲母板(透明な板)の後ろから光を当てて撮影していました。
送信先は、すぐ隣にある受像機で、電線で接続されています。
でも、これがテレビ放送の第一歩。
その後、1933年にアメリカのツヴォルキンが、撮影側も電子化する方法を発明。
これをすぐに高柳も取り入れることで、走査線の数と、1秒間のコマ数を飛躍的に増やします。
ちなみに、走査線が増えれば画像は綺麗になるし、コマ数が増えれば動きが綺麗になります。
1937年には走査線 441本、毎秒30枚の方式を完成。これをほぼそのまま使用する形で、1939年には実験放送が始まっています。
しかし同年、後に第2次世界大戦と呼ばれる戦争が起こり、1941年に日本も参戦。
このため研究は中止され、電波技術に詳しかった高柳もレーダーの研究などを行います。
一方、アメリカでは1941年にはテレビ放送が実用化されます。
高柳は1946年に弟子と共にビクターに入社、テレビの研究が再開します。
1948年、再度実験放送の開始。
1953年にやっと本放送が始まりますが、この年にアメリカではカラー放送の規格が成立しています。
日本のカラー放送は 1960年開始です。
1959年、高柳は世界初のビデオ・テープレコーダーを開発しています。
当初はもちろん放送機材としての利用でしたが、後に高柳のいたビクターで家庭用に改良され、VHS規格となります。
また、静岡県の浜松で生まれ、東京で勉強したのちは浜松に戻って教員をしていた高柳の教え子には、浜松ホトニクス(カミオカンデでニュートリノが発するわずかな光を捉えた受光管を作った会社)の創業者などがいます。
最後に、「テレビ」の話ではありますが、それはそのまま「パソコンモニタ」に流用されています。
だから、これはパソコンの歴史の話でもある。
世界初のラスタースキャンディスプレイを備えたシステムは、安価に入手できる市販のテレビを利用しました。
Apple II もテレビ用の NTSC 信号を前提としたカラー回路を備えています。後にパソコンは専用のディスプレイを使うようになっていきますが、最初はテレビなのです。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
サターンのCPU、という記事の中で、CPU の動作クロックが、NTSC のビデオ信号から決められた、と書きました。
NTSC は、日本のアナログテレビで使われていた方式。
簡単に書けば、1秒間に60枚の絵で動きを表現し、1枚の絵は 720x480 ドット程度で表現されます。
この信号を作るための基本的な周波数(搬送波と言います)が、3.58MHz (正確には 3.579545MHz) です。
テレビに出力するにはこの周波数を作り出す回路は必要。
CPU もこの周波数で動くようにすれば、回路を減らしてコストを下げられます。
だから、MSX は 4MHz で動けるはずの Z80 を、わざわざ 3.58MHz に速度を落として駆動します。
スーパーファミコンも同じ 3.58MHz で、ファミコンは半分の 1.79MHz。
記事に書いたサターンでは、8倍の 28.6MHz でした。
ちょうど半分、とか、8倍、というのはデジタル回路で計算しやすいので、CPU を、 NTSC 搬送波の単純な比率で作れるクロックで駆動できれば、クロックを作り出す発振回路や、別々のクロックの部分をつなぐための回路を節約できます。
…という話を書いたら、「PAL では影響を受けるの?」という質問が来ました。
なるほど。僕も詳しく調べたことはありませんでした。
PAL はヨーロッパで普及したアナログカラーテレビの規格です。
NTSC よりも画素が細かく、1枚の絵が 720x576ドット程度で表現されます。
その代り、1秒間の枚数は 50枚に減ります。
(ややこしくなるので詳細は書きませんが、PAL には NTSC とほぼ同じ解像度・秒間枚数の方式もあります。
以下は、上記に書いたものを PALとして話を進めます)
計算するとわかるけど、1秒間に表示されるドット数は同じです。
これは、電波で伝送できる情報の量が、当時の技術的限界から決まってしまっていたから。
動きを綺麗に見せようとしたのが NTSC で、画像を綺麗に見せようとしたのが PAL 、というわけです。
(もっとも、それを意図したのかどうかは不明。画面枚数は単に交流周波数の影響を受けた気がする)
そして、PAL の周波数は 4.43MHz (正確には 4.433619MHz) 。
…あれ、僕が思ってたのと違う (^^; NTSC と結構違いますね。
PAL版でもCPU速度はたいして変わらない、と聞いたことがあったので、NTSCと周波数変わらないのかと思ってた。
ちなみに、SECAM は、PAL をさらに改良した方式で、色が綺麗に出るようです。
信号の作り方は違うけど、解像度や秒間枚数、搬送波の周波数は同じ。
さて、「CPU 速度はほぼ同じ」と聞いていたのはどういうことだろう。
気になって調べてみました。
NTSC | PAL | |
ファミコン | 1.79 | 1.66 |
Master System | 3.58 | 3.55 |
スーパーファミコン | 3.58 | 3.55 |
メガドライブ | 7.67 | 7.61 |
コモドール64 | 1.02 | 0.985 |
AMIGA | 7.16 | 7.09 |
MSX | 3.58 | 3.58 |
サターン | 28.6 | 28.6 |
単位は MHz。有効数字3桁に丸めています。
ファミコンは、NTSC は搬送波の周波数の半分、PAL は 3/8。
Master System ・スーパーファミコンは、NTSC はそのままで、PAL は 4/5。
周波数を整数で割って遅くするのは、「分周回路」と呼ばれ、よく使われるテクニックです。
もっとも、僕はハード工作は詳しくないので、具体的な回路は良く知らない。
3/8 にするなら、あらかじめクロックを3倍速にしておいて、8で割ればいいんじゃないかな。
8で割るのは2進カウンタで、3bit 目を取り出せばよいだけ。
この場合、ビデオ回路側には3で割ったクロックを供給する必要があるけど、3で割るのはちょっと厄介。
もっとも、2進カウンタは基本なので、8 で割る回路と一部共用できると思う。
4/5 も同じ考え方で、4倍速クロックを、4と5で割る必要がある。こちらの場合も、4は簡単で5は少し厄介。
搬送波か、CPUクロックかの、どちらかは簡単になる分数を選んでいるのが、なかなか巧妙。
しかし、メガドライブは、謎です。
68000 は NTSC の 15/7 、 PAL は…91/53? で駆動されているけど、Z80 部分は Master System 互換。
改造して 68000 だけクロックアップ、っていうのが流行したようなので、68000 のクロックはビデオ信号とは無関係なのかな?
(しかし、それだとなぜ NTSC と PAL で速度が違うのかわからない。ビデオ信号回路とのタイミング合わせが必要で微調整されている?)
ところで、「PAL のゲーム」といえば AMIGA です。いや、個人的にそう思っているだけで、おそらく一般性は無いのですが。
AMIGA はアメリカで作られたマシンですが、ヨーロッパで非常に良く売れました。
そのため、PAL で作られたソフトが多く、NTSC で表示すると縦方向解像度の違いから、画面の下の方が表示されなかったりしたそうなのですね。
最初から「テレビに接続する」ことを前提に考えられたマシンで、日本ではウゴウゴルーガの製作に使われていた、という話が有名です。
AMIGA はコモドール社のパソコンなので、8bit 時代の大ヒット機、コモドール 64 も調べたら、やっぱ PAL 版がありました。
コモドール 64 のクロックは、NTSC の 2/7 と PAL の 2/9 なのだけど、なんでこんな厄介そうな数字で割っているだろう。
AMIGA は、 NTSC は 2倍、 PAL は 8/5 になっています。まぁ、こちらは素直な感じ。
MSX とサターンは謎。NTSC 信号を基準にした速度ですが、PAL 版でも同じだったことになってます。
MSX はパソコンだったので、値段が高くなっても速度を重視したのかもしれません。
(それくらいなら、Z80 を 4MHz で駆動すればよかったのに…)
セガサターンは、もしかしたら、本当は PAL で変わっているのだけど、ヨーロッパではあまり売れなかったので資料がないだけかも。
さて、総じて PAL の方が速度が遅かった、という結果になるのですが、実はこんなものは誤差範囲。
ゲームを作るうえでは、CPU の速度が多少変わったことよりも、1秒間の画面枚数が違うことや、解像度が違うことの方が重要でした。
ファミコンでは、PAL 版で画面上の縦の解像度が 240ラインになっています。
NTSC だと、240ラインを出力するのですが、上下は画面外に隠れてしまい、だいたい224ラインしか見えませんでした。
これが全部見える、という意味です。
また、1秒間の画面枚数が 60枚から 50枚に落ちます。
ゲームは画面書き換えを基準に動いていますから、全体にスローモーションになります。
(逆に言えば、全体がスローモーションになるからこそ、CPU 速度が多少落ちても問題はありません)
MSX や SG-1000 で使われたビデオチップ、TMS9918 は、縦方向解像度が 192 ラインでした。
これは、VRAM の構造上変えられない数字。
MSX は、PAL 版でも縦 192 だったようです。
しかし、Master System では、9918上位互換の独自チップを使っているため、縦方向に NTSC では 224、PAL では 240まで出せたようです。つまり、ファミコンと同等能力を持っています。
(MSX2 は VRAM 構造が変わり、212 まで出るようになった。これは NTSC / PAL とも同じだったようだ)
大抵、ゲーム機はリージョン管理というものがされていて、別の国のゲームは動きません。
だから、PAL 版を NTSC 本体で遊んだり、その逆はできない。
でも、先に書いた AMIGA はパソコンで、特にリージョン管理もありませんでした。
だから、NTSC 本体で PAL のソフトを遊ぶと一部が画面外で見えなかったり、PAL 本体で NTSC ゲームを遊ぶと画面外にゴミが出たりしました。
もっとも、その程度の問題は些細な事、と、画面の速度管理が高度に発達したのも AMIGA の頃から。
画面描き変え枚数に関係なくゲームが楽しめるように、内部的に細かな計算を駆使して、ゲーム速度が変わらない工夫などがあったようです。
(現在の PC でも、CPUやビデオカードの性能に関係なく遊べるように時間管理するのは基本テクニックになっています。)
さて、僕はその昔 ST-V (セガサターン)のゲームを作る会社でゲームを作っていたことがあります。
僕は経験していないのですが、別のラインで作ったゲームが好評で、サターン版を作ることになりました。
普通だと、プログラム一式を家庭用が得意な外注に出して、作ってもらいます。
でも、その時は外注が忙しく、自分たちでやることになった。
移植と言っても基本的に同じハードですから、すぐに対応できました。
でも、「ヨーロッパでも売るから PAL 版お願い」という話になって、おかしなことになった。
元々 PAL 版なんて考えてなかったんです。
業務用だと筐体ごと売っているので、ヨーロッパでも NTSC 周波数のモニタ込みで販売していて、言語などだけ変えればそのまま出せるのです。
画面解像度が高く、その分縦に圧縮して表示されてしまうのは…サターンには拡大・縮小機能があったので、適当な倍率をかけて表示することで対応しました。
224 ドットを 240ドットに引き延ばすので…15:14 ですね。14ラインごとに、同じラインを重複して描くことになる。
画面は非常に汚いのだけど「手間を考えるとやむなし」との判断。
それより大変なのは、ゲーム速度が変わってしまうことでした。
全体にスローモーションがかかったような感じ。NTSC の速度で「気持ちよく感じる」ように調整した動きは、全部間延びして気持ちよくありません。
作成したチームは、なんとか簡単に対応できないかと、こちらもグラフィックのように「数フレームごとに表示を飛ばす」とか試していたのだけど、結局あきらめて「スローモーション」のまま完成としました。
ただし、ゲーム上表示されていた「タイマー」だけは、1秒が1秒でなくなると気持ち悪いので、調整されて1秒ごとにカウントダウンします。
残り時間も調整したようですが、表示が2桁しかなかったため、面によっては上限の 99 で…
動きがスローモーションなのに制限時間は短かったりして、非常に厳しいゲームになったようです。
(もっとも、海外では日本よりも厳しいゲーム設定が好まれるため、「そのまま出してしまえ」と判断)
AMIGA のゲームのように最初から PAL 対応を考えていれば良いのですが、NTSC 用に調整したゲームを急に PAL 対応、というのは難しいのです。
#ヨーロッパの人は一般家庭へのテレビゲームの普及が遅かったのだが、これも原因の一つだったかもしれない。
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 【チューリップ】 SECAMはPALよりも画質が悪いです。SECAM映像を出力するゲーム機は殆どありません (2018-01-08 16:29:49)【あきよし】 情報ありがとうございます。…が、どの機種のことでしょう? 垂直帰線割り込みの意味であれば記事に書いた通りですが… (2014-08-08 05:24:41) 【とおり】 PALとNTSCについては単純に割り込み周期の違いで速度差がでてしまうのです.同期をとってないなら速度は同じですね. (2014-08-07 23:46:11) |
昨日書きましたが、MSX もファミコンも、NTSC 信号を元にしたクロックで動作しました。
MSX はそのまま、ファミコンは半分にしていますので、クロックだけで比べるとファミコンは半分の速度です。
このことを調べていたとき、周波数を根拠として「ファミコンは MSX と比較して遅かった」と記述されたページを多数見ました。
もちろん、CPU が違うので周波数で判断できない、と書いてあるページも多数あるのだけど。
僕はファミリーベーシックで 6502 のアセンブラを覚え、MSX でも Z80 のアセンブラを使いました。
でも、MSX はあまりに「遅い」ので驚いた記憶があります。
その時は Z80 の特性を知らず、Z80 で特に遅い命令を多用してしまったからだったのだけど、自分の中では今でもファミコンは MSX に速度で負けてない、という気持ちがあります。
多分、知らない人が勘違いする大きな理由の一つが、機械語命令には、命令ごとに違う「実行に必要なクロック数」がある、ということ。
最近の CPU では、みんな1クロックで実行するのが普通なので、周波数がそのまま速度に直結します。
もっとも、それでも1クロックで「何ができるか」が違うので、CPU の速度を周波数だけで表すことはできないのだけどね。
6502 や Z80 の時代はもっと激しいです。
命令ごとに、2クロックで終わるようなものから、1000クロック以上かかる命令まであるのですから。
これを考慮しなくては速度比較にはなりません。
プログラム中に非常に良く出てくる操作として、「レジスタとメモリ内容の足し算」があります。
例として、この命令の速度を比較してみましょう。
Z80 では、直接アドレスを指定したメモリと足し算する命令はありません。
そのため、2命令を組み合わせます。
LD HL,nn ; 10 (11)
ADD A,(HL) ; 7 (8)
nn は、2バイトの数値を意味しています。
; 以降に、実行に必要なクロック数を書きました。( ) の中は MSX の場合です。
MSX がなぜ遅いのか…という説明は後で書きます。
ここでは、MSX を比較対象として ( ) の中の数値を合計すると、19クロックで完了します。
6502 の足し算命令では、必ずキャリー(桁上がり)を足してしまうため、足し算の前にキャリーを消す必要がありました
また、計算用レジスタは1つしかないため、相手のメモリアドレスだけを指定します。
CLC ; 2
ADC nn ; 4
こちらは合計 6クロック…なのですが、もっと速くできます
6502 の場合、上に書いたように、計算用レジスタが1つしかありません。
そこで、メモリの先頭、8bit でアドレスを表現できる範囲までに限り、高速にアクセスできる方法が用意されていて、256byte をレジスタ代わりに使えるようになっていました。
(6502 では、256 byte ごとに「ページ」と呼んだため、ゼロページアドレッシング、と呼びます)
CLC ; 2
ADC n ; 3
n は1バイトの数値を意味しています。
こちらでは、1クロック減って合計 5クロックです。
ファミコンは半分の周波数で動いている、と考えても、MSX よりもファミコンの方が倍近く速いです。
上の例ではメモリと足し算しましたが、Z80 はメモリアクセスが遅かったため、できるだけメモリアクセスしないテクニックが重要でした。
では、 B レジスタから A レジスタにデータを渡してみましょう。
LD A,B ; 4 (5)
6502 では、レジスタが A X Y の3つしかないため、あまりレジスタ渡しは使いませんでした。
しかし、X から A に渡すのであれば
TXA ; 2
この場合、半分の周波数と考慮しても、ファミコンは MSX より速いです。
現実には 6502 では、ゼロページをレジスタのように使いました。
メモリ相手なので少し遅いのですが、256 本もレジスタがある、と考えるとプログラムの幅が広がります。
LDA n ; 3
メモリを使うにも関わらず、Z80 よりも少ないクロックで動作します。
とはいえ、周波数を考慮すると、この方法ではファミコンよりも MSX の方が速い。
メモリアクセスは遅いのです。
もっと単純に「A に 1 を入れる」を考えてみます。
Z80 では
LD A,#1 ; 7 (8)
6502 では、
LDA #1 ; 2
こちらは、ファミコンの方が圧倒的に速い。
Z80 では、先に挙げた LD A,B は 1バイトの命令でした。そのため、メモリアクセスは1回で済みます。
しかし、LD A,#1 は、 LD A という命令部分と、1 という数値部分の 2バイトに別れていて、2回のメモリアクセスが必要になります。
6502 の LDA #1 でも同様に2バイト命令なのですが、Z80 はメモリアクセスが非常に遅く、6502 と大きく差がつく原因になっています。
さらに、「A に 0 を入れる」。
同じじゃないの? と思われそうですが、Z80 では
SUB A ; 4 (5)
A から A を引いて A に入れる、です。結果は必ず 0 。
一見無意味な命令ですが、メモリアクセスがないので LD A,#0 より速いです。
(同様の意味で XOR A というのも良く使われました。速度は同じ)
6502 では、素直に
LDA #0 ; 2
MSX の方がほんのわずかに遅いのですが、ほぼ同等。
6502 には、インデックスレジスタが X と Y の2つありました。
Z80 にも、IX と IY の二つがあります。
ここで、「インデックスレジスタと数値を足したアドレスの内容を A に読み込む」をしてみましょう。
(インデックスレジスタ相対アドレッシング)
Z80 は、IX と IY は 16 bit で、そこに 8bit の固定値 o (8bitの符号付数値)を足せます。
6502 では、nn は 16bit アドレスで、そこに 8bit の X や Y を足せます。
Z80 では
LD A,(IX + o) ; 19 (21)
6502 では、
LDA nn,X ; 4
ただし、6502 ではページ境界(256byte 単位の区切り)を超えると、 5クロックになります。
(nn + X の結果、上位8bit が nn と違う値になると、追加の1クロックが発生)
こちらは、ファミコンの方が倍以上速い。
インデックスレジスタ相対アドレッシングは、Z80 で特に遅い命令の一つです。
(実は、この命令は 3byte もあり、メモリアクセスが多いのです。)
最初に書いた、僕が「Z80 が遅くて驚いた」理由は、はじめて作った機械語プログラムで、知らずにインデックスレジスタを多用してしまったため。
6502 では特に遅くないので、配列アクセスのための基本テクニックなのですよ。
(というか、インデックスレジスタとはそのためにあるものです)
配列アクセスは多数の敵を動かすゲームで使いたい機能なのだけど、Z80 でゲーム作るときには、絶対使っちゃダメな命令。
さて、機械語が並べられた説明ばかり続いて、そろそろ飽きられそうです。
ちょっと話を変えましょう。
CPU が命令を実行する際は、内部的には次の3つの動作が行われます。
1) メモリにアドレスを送る
2) メモリからデータを読み込む
3) 命令を実行する
これは、順番に行わなくてはなりません。
つまり、一般的に CPU が命令実行に必要な最低クロック数は 3。
ところが、Z80 では、命令を実行するための最低クロック数は 4(MSX の場合は 5)、6502 では 2 です。
<<以下、この節のみ、2014.7.31 に内容変更。
書き換え前の物は HTML コメントとして残っています>>
元はこの節で、Z80 が遅く、6502 が速い理由について内部構造を解説した…のですが、僕は回路知識が乏しいため、間違っていたようです。
書き換え前は、主に、
・Z80 は 4004 由来で内部バスが4bit である。
・Z80 には命令実行時に1クロック待つことができたが、MSX では回路の都合からこの機能を使っている。
・6502 は、命令実行中に次の命令を読み込んでいた
・6502 は、1クロックで2つの動作ができた
ことを説明し、Z80 はこれが理由で通常より1クロック遅れ、MSX ではさらにもう1クロック遅れるとしました。
一方、6502 では通常より1クロック速くなり、命令によっては追加のメモリアクセスがあるにも関わらず2クロック動作だった、と書いていました。
これに対し、Z80 の内部バス 4bit は ALU (演算回路) 4bit の間違いではないか、と指摘があり、再度調べたところその通りでした。
元の文章を書いた際の参考文献は、R800 (Z80 互換の 16bit CPU) の設計者のインタビュー記事(MSX マガジン永久保存版2収録)。
ここに、「Z80 は / 内部のバスなんかは 4bit だった / だから簡単な命令でも、4クロックで2回に分けて転送したりする」という証言があります。
これを見て、内部バスが 4bit なので余計なクロックが必要となっている、と理解しましたが、これが勘違いでした。
指摘後、詳細情報を調べるために手持ち資料を漁ったところ、Z80 設計者の嶋正利さんの自伝「マイクロコンピュータの誕生 わが青春の 4004」に詳細がありました。
信憑性は、もちろん後者の方がずっと上です。
嶋さんは世界初の CPU 、4004 の設計者でした。これは、日本の会社に在籍しながらインテルと協力して設計したものです。
嶋さんは 4004 完成後に日本に帰国、インテルは 8bit 化した 8008 を作りますが、4004 よりも遅く、周辺回路設計が難しく、ソフトウェアも作りにくい CPU でした。
この後、インテルはリコーに在籍していた嶋さんを「インテルに入社する」ように説得。
最終的にはリコーの人事部にまでインテルから直接交渉が入ります。
リコーの人事部は引き抜きに対して怒りながらも、4年間の休職が認められます。
(これは、4年以内ならいつでも戻ってこい、ということでもあります。神対応!)
ここで、嶋さんは 8080 を設計します。
設計の際には、周辺回路の作りやすさが重視されました。
自伝では、この部分で「遅さ」の理由が明らかにされています。
8080 でも、内部的には1クロックで2つの動作を行っていますが、「外部に対しては」わかりやすく、1クロックで1つの動作しか行わないようにしています。
また、外部にアクセスする際には、CPU の内部状態をデータバスに送出するようにしています。これにより、周辺 LSI はCPU が外部アクセスする「理由」を知ることができ、柔軟な回路設計が可能となるのです。
このため、メモリへのアクセスは「アドレス送信」「CPUステータス送信」「データへのアクセス」という3クロックが必要となります。
Z80 は、嶋さんが仲間と共にインテルをスピンオフし、設立されたザイログ社で作られた CPU です。
別会社なので、回路は完全に新規に作り直していますが、8080 の上位互換になるように設計されています。
この時に、内部回路の高速化によって、ALU は 4bit で十分になっています。
(4bit なのは 4004 由来ではありませんでした)
さらに回路設計をしやすくする工夫が加えられます。Z80 には、DRAM を使用する際に必ず必要な「リフレッシュ回路」が内蔵されているのです。
リフレッシュ回路は、命令実行時に動作します。
これは、命令実行時は CPU 内部で演算が行われていて、メモリは暇なためです。
一方、8080 には存在していなかった「CPU 動作とは関係のないメモリアクセス」が行われるため、命令の読み込みは通常のメモリアクセスよりも早めに切り上げる必要がありました。
また、MSX では、メモリは Z80 には直接接続されていません。
スロット、と呼ばれる仕組みを使い、64Kbyte しかない Z80 のメモリ空間を、1Mbyte に拡張しているのです。
その代償として、スロットへのクロックは、Z80 に供給されるものと比較して、最大で 80ns 遅延しました。
・Z80 では命令実行時のみリフレッシュ回路が働くため、メモリアクセスを通常より速く行わなくてはならない
・MSX ではメモリを直接接続していないため、拡張性と引き換えにアクセスが低速になっている
この2つのことから、MSX では「命令の読み込みが間に合わない」場合が生じます。
その対応として、命令読み込み時のみ、メモリアクセス時に CPU を 1クロックだけ停止させ、メモリのアクセス時間を稼いでいました。
これが、MSX の命令が Z80 標準よりさらに1クロック遅い理由です。
(なお、一部命令では命令部分がプリフィックス付の 2byte です。この場合、「命令」の読み込みを2回繰り返すため、2クロック遅くなります)
以上、Z80 が遅い理由は、
・周辺回路の設計しやすさを考慮し、高速性よりもわかりやすさを優先している。このため、メモリアクセスだけで3クロック。
・MSX では、メモリ空間が増大した代償としてメモリアクセスが遅れるため、命令読み込み時のみ1クロックの待ち時間が追加される。
でした。
6502 は、Z80 とは違い、メモリアクセスを最短時間で行います。
1クロックの間に、アドレスの送信とメモリアクセスを行うため、データの取得自体は1クロックです。
命令実行時は、Z80 はリフレッシュ回路を動かしていました。
しかし、6502 は「命令の次のアドレス内容」をすぐに読み込んでしまいます。
次の内容は、命令に使われるデータかもしれませんし、次の命令かもしれません。
これにより、 LDA #1 のような命令でも、たったの2クロックで終わらせることができます。
(実際には、命令読み込み、命令解釈&データ取得、命令実行の3クロックかかっているが、命令実行中には次の命令を読み込んでいるため、見た目上1クロック短くなる)
命令解釈と命令実行はわかれているようで、データが不要な CLC (クリアキャリー)のような命令でも、2クロックになります。
この際、命令解釈時点で得た「次のメモリ内容」は、そのまま捨てられ、再度同じアドレスを命令実行時に取得するようです。
このため、最低実行時間は2クロックです。
参考:hpcl6502
FPGAで実装された 6502 と、アクセスタイミングなどの説明。
互換品に過ぎないわけですが、6502 は回路構成が単純で作りやすいようで、同等の試みが世界中で行われています。
製作者も良く検討して作っているようなので、互換品とはいえ信頼できると思って参考にしています。
さて、先ほどは単純な機能でクロックを比較しましたが、これだと 6502 に有利な命令ばかり選んでいるのではないか、という気もします。
もう少し、Z80に有利な条件で見てみましょう。
Z80 はレジスタが多いですし、一部のレジスタでは 16bit 計算もできます。
また、ループ専用の命令もあります。
これらは 6502 にはないものです。
また、Z80 はメモリアクセスが遅いので、レジスタの多さを活かしてメモリアクセスがない題材を考えましょう。
そこで、1~100 の数字を全て足すプログラムを作ってみましょう。
答えは 5050 です。8bit には収まらないので、16bit 計算が必要です。
Z80だと次のようになります。
LD HL,#0 ; 10 (11)
LD DE,#1 ; 10 (11)
LD B,#100 ; 7 (8)
LOOP:
ADD HL,DE ; 11 (12)
INC DE ; 6 (7)
DJNZ LOOP ; 13 / 8 (14 / 9)
結果は HL に入ります。
ループごとに1つづつ値が変わる変数、として DE と B の2つがあり、無駄っぽく見えます。
でも、16bit 演算は 16bit のレジスタ同士でないとできないため、DE は必要で、16bit レジスタの INC / DEC ではフラグ変化がないため、B も必要です。
そして、DJNZ は B を暗黙に使用し、減算結果が 0 でない場合はジャンプします。
クロック数を2つ書いてあるのは、ジャンプするときは 14クロック、しない時は 9 クロックになるため。
LOOP: はラベル。アドレスを示す目印で命令ではありません。
LOOP 以前の部分の合計は MSX で 30 クロック。LOOP 以下は 33 クロックですが、100 回繰り返されるので、3300クロック。
ただし、最後の1回は 5 クロック短いので、3295クロック。
総計は 3325 クロックです。
6502 だと次のようになります。
LDA #0 ; 2
STA >0 ; 3
STA >1 ; 3
LDA #100 ; 2
STA >2 ; 3
LOOP:
CLC ; 2
LDA >0 ; 3
ADC >2 ; 3
STA >0 ; 3
LDA >1 ; 2
ADC #0 ; 2
STA >1 ; 3
DEC >2 ; 5
BNE LOOP ; 3 / 2
6502長げーよ。
レジスタが1個しかないため、ゼロページアドレッシングを使っています。 >0 は、ゼロページの 0 番地の意味。
最終結果は 16bit なので >0 と >1 に置き、ループ変数は「足す数」と同じで >2 に置きます。
6502 の加算命令は、常にキャリーを一緒に足すため、CLC でキャリークリアしてから開始。
足す数は 8bit しかないので、上位 8bit には #0 で 0 を指定しています。
LOOP 以前の部分が 13クロック。LOOP 後は 26クロックで、100回繰り返されるので 2600クロック。
ただし、最後の1回は1クロック短いので、2599クロック。
総計で、2625 クロックです。
ファミコンと MSX でいえば、ファミコンが5割ほど遅いです。
しかし、Z80 に一方的に有利な条件で考えた題材にしては、ファミコンは健闘しています。
実際にはファミコンと MSX は CPU としては同程度の速度だったように思います。
Dhrystone とか、BASIC で同じプログラムを走らせてみるとか、ベンチマーク比較はいろいろ見たのですが、CPU の性能と言うより「言語処理系の性能」が色濃く反映されてしまい、均一な速度指標が得られません。
ただ、リストによって 6502 の方が速かったり、Z80 の方が速かったりするのも事実。
(6502 を Z80 の半分の周波数にする形で比較した場合)
つまり、言語による差はあれど、CPU としてはだいたい同じだったのではないかと。
ウォズが 6502 を Apple I に使ったのは、欲しかった 6800 とよく似ているのにずっと安かったから。
ファミコンが 6502 を採用したのは、あまり使われてなくて解析されにくかったから…という理由もあるけど、「Z80 よりも小さな回路サイズなので、Z80 と同じサイズなら、別の機能も入れられる」ためだったらしい。
いずれにせよ、性能が他の CPU とほぼ同等なのに、6502 はコスト面で有利な CPU だったのでしょう。
ファミコンと MSX でいえば、CPU 性能よりも画面周り回路の違いが大きかったように思います。
どっちが良い、ではなくて、違いがはっきりしていて、一長一短あった。
当時は僕は両方持っていたので、同じゲームが両機種にあれば、より上手に作られている方を楽しんでいました。
グラディウスとか、ファミコンより MSX の方が、遥かに良移植だった。
もちろん、スクロールはファミコンの方が滑らかでしたけどね。
2014.8.3 追記
僕の書いたプログラムは、「同程度の性能であることの比較」ができれば十分、という意図だったのですが、もっと速く出来るというご意見を多数いただきました。
非常に面白かったため、解説も含めて別記事にしました。更なる改良もお待ちしております。
関連ページ
ファミコン・SG-1000の発売日(1983)【日記 15/07/15】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 【オールドプログラマ】 Z80と比べて遅いって…当時現役で仕事で使っていた人間なら全員鼻で笑いますね… (2016-06-04 12:47:36)【あきよし】 情報ありがとうございます。ファミコンで実際使われていた、という証言は重いです。この方法をありにして、別ページの方を書き変えました。ただ、ループ展開は制限させてもらっています(展開競争は虚しいので)。 (2014-08-04 10:16:58) 【名無し】 巨大テーブルはレジスタ間演算を高速にやりたい他のルーチンからも共用できるので、ある程度以上の大きさのプログラムでは非現実的なものではない筈です。ファミコンのプログラムで見掛けたこともありますし、http://wiki.nesdev.com/w/index.php/6502_assembly_optimisations なんかでもテクニックのひとつとして紹介されてますね。 (2014-08-03 17:01:28) 【あきよし】 巨大テーブル化。速度は速いですが、コスト・効率比が悪すぎて現実的に使われることは無いテクニックだと思います。そのため、比較としては NG。ただ、この発想は僕はすごく好きです。 (2014-08-03 16:45:27) 【あきよし】 みなさん、改良案ありがとうございます。別記事を書きましたので、今後はそちらに投稿していただけるとありがたいです。 (2014-08-03 16:42:43) 【名無し】 以上のコードでおよそ1120クロック程度です。 (2014-08-02 12:41:20) 【名無し】 記事のタイトルが「6502 は遅かったのか?」であり、コードサイズはかんけいないので ORG $C000;LDY #100;LDA #0;TAX;JMP SKIP;INCH:;INX;DEY;BEQ EXIT;SKIP:;CLC;LOOP:;ADC TABLE,Y;BCS INCH;DEY;BEQ EXIT;ADC TABLE,Y;BCS INCH;DEY;BEQ EXIT;ADC TABLE,Y;BCS INCH;DEY;BEQ EXIT;ADC TABLE,Y;BCS INCH;DEY;BEQ EXIT;ADC TABLE,Y;BCS INCH;DEY;BNE LOOP;EXIT:;STA >0;STX >1;;ORG $C100;TABLE:;DB $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F;DB $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F;DB $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F;DB $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F;DB $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F;DB $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F;DB $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F;DB $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F;DB $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F;DB $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F;DB $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF;DB $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF;DB $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF;DB $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF;DB $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF;DB $F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF (2014-08-02 12:40:15) 【名無し】 6502の高速版のコードサイズが28バイトなので、Z80で同程度のコードサイズが許されるならば若干のループ展開が可能になります。LD HL,0;LD BC,100;LOOP:;ADD HL,BC;DEC C;JR Z,EXIT;ADD HL,BC;DEC C;JR Z,EXIT;ADD HL,BC;DEC C;JR Z,EXIT;ADD HL,BC;DEC C;JR Z,EXIT;ADD HL,BC;DEC C;JP NZ,LOOP;EXIT: で27バイト、2582クロックなので、ファミコンには勝ったことになると思います。 (2014-08-01 18:25:49) 【名無し】 訂正: ジャンプに1wait足すのを忘れてました。11+11+100*(12+5+11)=2822クロックで、ファミコンには僅かに負けます。 (2014-07-31 21:44:23) 【名無し】 jr nz,loop を jp nz,loop にすると更に速くなります。11+11+100*(12+5+10)=2722クロックで、半分のクロック速度のファミコンの1395クロックよりは速いことになりますね。 (2014-07-31 21:39:19) 【m】 ループ内が短すぎてほとんどどうにもなりませんが、ld hl,0; ld bc,100; loop: add hl,bc; dec c; jr nz,loop のほうが少し速い(100から1まで足す,になりますが)。単純に総和を取るんじゃなくて公式 n*(n+1)/2 のほうで比べるとかすれば z80 のほうが速いかも (2014-07-31 21:19:15) 【名無し】 6502の高速版プログラムですが2+3+2+2+3+2+19*(3+3+2+5+2+2)+81*(3+2+5+3)-1+3+3=1395クロックが正しいようです。先の「1357クロック」は、おそらくはキャリーが発生した際のCLCを計算に入れなかったミスっぽい。 (2014-07-31 21:00:06) 【名無し】 Z80に花を持たせるにはメモリのブロック転送などが有効だと思います。Z80ではLDIRで済む程度の処理が6502では案外面倒なことになります。 (2014-07-31 16:59:55) 【名無し】 ご対応ありがとうございます。「Z80 版は、計算したところ残念ながら却って遅くなっていました」とのことですが、XOR A;LD H,A;LD B,100;LOOP:ADD A,B;JP NC,SKIP;INC H;SKIP:DJNZ LOOP;LD L,Aで3113クロックとなり、遅くなってはいないと思います。ちなみに6502版にロジックを合わせてXOR A;LD H,A;LD B,100;JP LOOP;INCH:INC H;DEC B;JR Z,EXIT;LOOP:ADD A,B;JR C,INCH;DJNZ LOOP;EXIT:LD L,Aとすると2900クロックで更に高速化できます。 (2014-07-31 16:51:25) 【あきよし】 ご意見ありがとうございます。参考に修正しました。 (2014-07-31 12:59:53) 【名無し】 LDA #100;STA >2;LDA #0;TAX;JMP SKIP;INCH:INX;DEC >2;BEQ EXIT;SKIP:CLC;LOOP:ADC >2;BCS INCH;DEC >2;BNE LOOP;EXIT:STA >0;STX >1 で1357クロックなので、クロック速度倍のZ80と比べてもいくらか速いと思います。 (2014-07-29 20:00:49) 【名無し】 6502、LDA #100;STA >2;LDA #0;TAX;CLC;LOOP:ADC >2;BCC SKIP;INX;CLC;SKIP:DEC >2;BNE LOOP;STA >0;STX >1 で1800くらいかな。 (2014-07-29 04:53:58) 【あきよし】 早期に書き変えたいと思いますが、次の週末かな…申し訳ない。 (2014-07-29 04:52:34) 【あきよし】 ご意見多数ありがとうございます。感謝いたします。特に、より高速なプログラムを示してくれたのは非常にありがたいです。(もう何十年も使ってなかったので勘が鈍ってます) (2014-07-29 04:51:32) 【名無し】 「1~100 の数字を全て足すプログラム」 Z80でも16bitレジスタを使わずに XOR A;LD H,A;LD B,100;LOOP:ADD A,B;JP NC,SKIP;INC H;SKIP:DJNZ LOOP;LD L,A 等としたほうが高速です。6502版は更に無駄が多すぎ。 (2014-07-29 01:38:48) 【名無し】 「0.5 クロック単位で作業ができるため、0.5クロック目で「アドレス送信」を行い、1クロック目で「データ読み込み」を行うことで、1クロックで読み込みが完了するのです。」タイミングチャート見てもそういうことにはなってないですね。http://www.mdawson.net/vic20chrome/cpu/mos_6500_mpu_preliminary_may_1976.pdf (2014-07-29 01:25:18) 【名無し】 「命令実行前に1クロック待つ」のは外部回路によるもので、Z80の機能ではないし同等のことは他のプロセッサでも可能です。 (2014-07-29 01:20:26) 【名無し】 Z80について「内部バスが 4bit しかない」というのはALUの間違いでは? Z80が「命令を実行するための最低クロック数は 4」である主な原因はM1サイクルの前半と後半でそれぞれ2クロック掛けて外部バスをアクセスしているためだと思います(それだけではないだろうが)。 (2014-07-29 01:17:49) 【名無し】 6502でLDA (nn,X)のアドレッシングはIndexed Indirectになるので「インデックスレジスタと数値を足したアドレスの内容を A に読み込む」とは動作が異なります。 (2014-07-29 01:13:01) 【名無し】 「A に 1 を入れる」のは、6502ではA9 01、Z80では3E 01で大して変わりありません。「ファミコンの方が圧倒的に速い。 1という数字が、命令の一部とはいえ、メモリに入っているためです」という説明は意味不明。 (2014-07-29 01:11:09) |
今日はスティーブ・ウォズニアックの誕生日(1950)。
いわずとしれた、Apple 創業者3人の1人ですね。
創業者と言っても、ウォズは一山当てようなんて気持ちは全くなく、安定した生活を望んでいた人でした。
当時はヒューレットパッカードの技術者で、その仕事を気に入っていました。会社を辞めて、失敗するかもしれない道に踏み出そうとは全く思ってなかった。
その一方、「二人のスティーブ」のもう片方であるジョブズは、コンピューターは金になりそうだと思ってました。
でも、ジョブズは金になりそうだ、という気持ちはあるけど、ウォズのような技術力は無い。
そこで、強烈にウォズを巻き込もうと画策します。
会社を辞めたくないウォズを散々説得し、ついには会社を辞めさせるのです。
話を、アップル創業より少し昔に戻しましょう。
ジョブズも、ウォズほどの技術力を持っていない、というだけで技術がわからないわけではありません。
彼らはホームブリュー・コンピュータークラブで知り合った友達でした。
ある時、ジョブズがATARI 社から仕事を貰います。
その頃 ATARI が売り出そうとしていた新ゲーム「ブレイクアウト」を、量産前に部品点数を減らし、安く作れるように改良する仕事でした。
ジョブズはこの仕事をウォズに丸投げし、ウォズは、この仕事を「やりすぎ」るほどやっています。
確かに劇的に部品点数は減ったのですが、その手腕が巧みすぎて、誰も論理を理解できないような回路が出来上がったのです。
これでは、何かあった際に改良することもできません。「もう少し回路を冗長にするように」という不本意な依頼を受け、再設計しています。
それでも、ブレイクアウトは発売されて大ヒット。
(日本に輸入された際に「ブロック崩し」と呼ばれるゲームです。画面上部に並ぶすべての物を消したら1面クリア、という概念は、後にインベーダーゲームを生み出すことになります)
ジョブズはアタリ社から 5000ドルの報酬をもらったようなのですが、ウォズには「あまりもらえなかった」と言って、「半分づつ山分け」と称して 350ドル渡しています。
…なんて友達思いのいい奴でしょう!
アップル社の前に、すでに「Apple I」があります。
これは、ヒューレットパッカードに在籍しながら設計し、ヒューレットパッカードに売り込んで断られ、ATARI に売り込んで断られた機械です。
この Apple I という機械がとにかく変わっていて、なんと 6502 なんていう、誰も知らないような CPU を使用していました。
ホームブリュー・コンピュータークラブではみんな 8080 を使っていて、8080 用のソフトは多数ありました。
でも、6502 を使ったのはウォズくらい。だから、ウォズは Apple I ようの BASIC からなにから、全部一人で作る必要がありました。
本当はウォズは、PDP-11 をベースにして 8bit として作られた、モトローラの 6800 を使いたかったのです。
命令セットが非常に美しく、技術者なら憧れる石(LSI)でした。
でも、エレクトロニクス製品の見本市で、6502 を見つけたんです。
6800 と似ているけど「なくてもいい便利な命令」をそぎ落としたような構造。
ちょっと命令が減って、ちょっとレジスタ幅が小さくなっただけで、値段はなんと7分の1でした。
それで、ウォズはこの CPU を使うことにして、あっという間に BASIC を自分で書きあげたんです。
回路設計もソフト作成も出来る、ウォズでないと選ばなかった選択肢でした。
誰も Apple I を販売ルートに乗せてくれないので、ジョブズは自分たちでやろうと考えました。
アタリ社のセールスマンだったロン・ウェインを加え、3人で「アップル・コンピューター」を設立します。
ただし、この時点では任意団体としての会社で、正式に法人化はしていません。
ウォズはヒューレットパッカードに在籍していて、「サイドビジネス」として参加しています。
Apple I の原価はおよそ220ドルで、ウォズは 300ドル程度で売れればよい、と考えていました。
でも、ジョブズは金儲けがしたかったので、卸価格を2倍と考え、小売店のマージンを 1/3 と考えます。
すると、およそ 660 ドル。数字のインパクトを求めて、666.66 ドルで販売することにします。
…これが思わぬ事態を引き起こします。
このころ、恐怖映画「オーメン」が封切りされ、獣の数字 666 というのがちょっとしたブームとなりました。
そして、Apple 社は「獣の数字で得体のしれない機械を売っている」と、苦情の電話が絶えずかかってくるようになったのです。
ジョブズは、これに対し「神聖な数字 777.77 と 111.11 の片方から、もう片方を引いたものだ!」と怒鳴り続けていたそうです。
#666 が獣の数字だ、というのは新約聖書の「ヨハネの黙示録」に書かれているのですが、意味はよくわかっていません。
何言ってるのかわからないから、みんなが意味をこじつけて好きなように解釈しているだけです。
777 と 111 が神聖だ、というのは多分ジョブズがでっちあげただけだけ。777 はスロットマシン的には大当たりですね(笑)
大儲け、というほどではありませんが、Apple I はそれなりに売れました。
ロン・ウェインはこの時点で期待外れだったと去り、代わりにマイク・マークラが参加します。
そして、その3人で法人化を行います。
ウォズも、ジョブズに説得されて会社を辞め、アップル社の後継製品作りに専念します。
ウォズは社員番号1番でした。「ジョブズが1番だと、調子に乗るから」がその理由。ジョブズは2番でした。
でも、自分がウォズより後、ということに納得がいかないジョブズは、後に自分の社員番号を「0番」にしています。
ジョブズは、「拡張性は最小限の、誰でも使えるコンピューター」を主張したそうですが、ウォズは「拡張性にあふれた、スロットが20くらいあるコンピューター」を作ると言い張ります。
結局、スロット8個で決着しますが、この拡張性が、後に他社が参入しても生き残っていけた決め手になりました。
Apple II は、非常に簡素なコンピューターでした。
その簡素さは、ATARI のブレイクアウトを改良した時の、ウォズの手腕を発揮したものです。
貧弱なのではなく、豪華なのに簡素なのです。
カラーが出るにも関わらず、メモリは白黒ビットマップ程度しか持っていません。
アナログジョイスティックが使えるにもかかわらず、特別な回路はもたずに、デジタル回路で処理します。
自由な音階を出せるのに、音を発生する回路はありません。
たった 8K の ROMには、BASIC とアセンブラと機械語モニタ、それに 16bit CPU エミュレーターまで持っています。
#もっとも、6502 は 16bit 演算が苦手なのでエミュレータを作り、BASIC は処理の一部を 16bit CPU として書くことでコードサイズを圧縮しています。
なので、コンパクトな代わりに速度は犠牲になっています。
後に発売されたディスクドライブも、普通なら必ず持つ「フロッピーディスクコントローラー」や、「現在のヘッド位置を知るためのセンサー」などを省略して安くするなど、Apple II は徹底して「簡素」なコンピューターでした。
Apple II はアメリカの 8bit パソコンを制し、一時代を築きました。
大きくなった Apple 社も、売り上げのほとんどを Apple II に頼っていました。
しかし、Apple II はジョブズとウォズの主張の折衷案として作られた妥協の産物でした。
…いや、実際にはウォズが好きなように作ったので、妥協したのは拡張スロットの数くらい。
ジョブズは「自分の考えるコンピューター」が作りたくて仕方がありません。
Lisa プロジェクトを開始します。
この時、Lisa は「16bit」「ディスプレイとディスクドライブを内蔵している」「キーボードはセパレート」「白黒グラフィック」「拡張性を無くして万人にわかりやすくする」というコンセプトを持つ…ごく普通のコンピューターでした。
この後、社を挙げて Apple III の開発が始まります。ディスクドライブと、一体的なデザインを持つ専用ディスプレイを持ち、Apple II の上位互換機でした。
ただ、経営陣が「他社に負けない機能」を求めたために仕様が肥大化しており、開発は難航します。事実、互換性は一部犠牲にされ、設計にも問題があり、後に大失敗となります。
ウォズはこの設計には一切参加していません。
さらに同じ頃、ジェフ・ラスキンも、当時の社長であったマイク・マークラの許可を得て「マッキントッシュ」プロジェクトを開始します。
16bit で、ディスプレイとディスクドライブを内蔵し、取り外し可能なキーボードをディスプレイカバーにして持ち運ぶことができる、白黒グラフィックの、拡張性の無いマシンでした。
マッキントッシュとは、姫リンゴのようなリンゴの品種。「小さくコンパクトに納める」ことが重要なコンセプトでした。
Apple II よりも安い価格を目指します。
ウォズは、こちらの「コンパクト化」には共感したようで、部分的に設計を手伝ったりしています。
Lisa とマッキントッシュは、コンセプトがかぶっていました。
そこでジョブズは、このプロジェクトをつぶしにかかります。
しかし、ラスキンもジョブズに負けず劣らずの頑固者で変人。簡単には圧力に屈しません。
その後、ジョブズはパロアルトを訪れ、Alto を知ります。
そして、「なぜ Xerox はこれを商品化しないのか? 商品化する気が無いならアップルがやる!」と宣言し、Lisa のコンセプトを「Alto の実現」方向に大きく変えます。
#Xerox は非常に優れたコンピューターを作りましたが「これが実現されたらオフィスから紙が不要となり、主力商品であるコピー機が売れなくなる」と考えて長い間研究段階に留めていました。
これでコンセプトは「かぶらなく」なったし、当面集中したい作業も出来たので、マッキントッシュプロジェクトは潰されずに済みました。
しかし、Lisa は失敗でした。
ジョブズらしいこだわりが細部まで活かされ、一切妥協せずに作られた素晴らしいマシンは、非常に高価なものだったのです。
Apple II は $1298 でした。ディスクドライブも $595 で追加できました。しかし、Lisa は 1万ドルでした。
余りに売れなかったため、後に8千ドルまで値下げされましたが、やはり売れませんでした。
ジョブズの「こだわりすぎ」が Lisa を売れないマシンにしてしまいました。
ジョブズは Lisa プロジェクトから追放されます。
ジョブズは、先日まで潰そうとしていたマッキントッシュプロジェクトに潜り込みます。
そして、ラスキンを追い出してプロジェクトを自分のものにするのです。
ラスキンはこれに怒り、アップル社を退社しています。
Lisa にかかった「開発費」はLisa プロジェクトの責任です。
マッキントッシュプロジェクトは、Lisa の資産だけを流用し、もっと安くマシンを作ることを目指しました。
今度こそうまくいくはずでした。
マッキントッシュが発表されると、熱狂的に迎え入れられました。
発表後数時間で750万ドル分の予約が入り、大学関係からむこう2年間で3500万ドルの予約が入ったと言います。
#初代Mac の価格は $2495 だったので、3千台の一般予約が入り、1万4千台の大学関係からの予約が入ったことになります。
しかし、実際に出荷が始まるとキャンセルが相次ぎます。
使い始めたユーザーが問題点を指摘しはじめ、購入しようとしていた人たちも考え方を変えるようになったのです。
マッキントッシュは、Lisa に次ぐ失敗作になりました。
にもかかわらず、ジョブズは「これからはマッキントッシュの時代だ。Apple II なんてもう時代遅れで、使っている奴は間抜けだ」と社内で吹聴して回ります。
ウォズは、これに反発するように…しかし表立った抗議もなく、ひっそりとアップル社を去っています。
この頃、アップル社の売り上げのほとんどは、ウォズが作った Apple II が生み出していました。
その後は汎用プログラマブルリモコンを作る会社 CL9 (クラウドナイン)を興しています。
これは、赤外線を利用するリモコン機器に対して、どんな命令でも出せる魔法のリモコン。
日本でもハル研がクロッサムとか作っていましたが、その元祖です。
現在でも「学習リモコン」というのがあるけど、当時は IR 規格(リモコン信号の統一規格)とかなかったので、自由な信号を学習して出せるだけでなく、手順を覚えさせたり出来るのはすごいことでした。
CL9 で作っていたリモコンは、6502 をベースとしたカスタム CPU を使っていたようです。
この会社も後に売却し、小学校の教師を無償でやったり、好きなことをして暮らしているようです。
金儲けにはあまり興味がないそうですが、彼自身アップル社の設立者の一人であり、お金は余るほど持っています。
人々、特に子供が楽しんでくれるのであれば、莫大な額をポンと寄付したりもします。
ジョークが好きで、ジョーク集の本を出したりもしています。「公式コンピュータージョーク集」。
日本語訳が家にあります。…ウォズの本だというので買ってみたけど、中身は結構ベタなアメリカンジョーク集。
(一応、コンピューターにまつわるものを集めたことになっていますが、無理やりなものも多いです。
一部はコンピューターマニアでないと理解できないもので、その部分はさすが)
ユーモア好きで、持っているお金を周囲の人の幸せのために惜しみなく使うその姿勢から、多くの人に慕われています。
彼がお気に入りのジョーク…というか、ネタは、アップルストアで社員割引を使って買い物をすること。
「社員番号は?」と聞かれて「1番」と答えるのが好きなのだとか。
アップル社は退社しているのですが、書類上はまだ社員で、給料ももらっているんだそうです。
余談になりますが、マッキントッシュが売れ始めるのは、ジョブズがマッキントッシュプロジェクトを外されてアップル社を去った後。
変なこだわり方をするジョブズがいなくなり、問題のある個所をやっと「問題だ」と言えるようになったら、すぐに良いコンピューターに改良されました。
ウォズもジョブズもいなくなった Apple の話は、またそのうち。
同じテーマの日記(最近の一覧)
関連ページ
IBM PC の発売日(1981)【日記 14/08/12】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |
今日は IBM PC の発売日(1981)。
IBM は、メインフレームと呼ばれる大型コンピューターを作っていました。
しかし、Apple II が状況を変えます。
Apple II はメインフレームに比べて非力でしたが、簡単なビジネス計算や給与計算を行うには十分な性能を持っていました。
そして、値段はメインフレームよりもはるかに安かったのです。
しかし、ビジネスの現場では IBM のブランドは信頼性がありました。
聞いたこともない新興企業「アップル」よりも、IBM 製の、同じような機械を欲しがる人が増えました。
そこで、IBM はパーソナルコンピューター事業に乗り出すことにします。
メインフレームが商売の中心、という考えは変わりません。それまではメインフレームに端末を接続して使用していたのが、「単体でも使用できるが、端末としても使える」コンピューターを作ることにしたのです。
お金のない会社は、最初はパソコンを買うかもしれません。
しかし、成長して事務処理などの需要が増したとき、それまで使い慣れたパソコンを「端末」として、同じ操作感覚でメインフレームのパワーを使えるとしたら、絶対にメインフレームを使ってくれるはずです。
将来のお客様のために、小さな市場を大切に育てる。…これが、IBM の経営陣の決定でした。
アップル社は、Apple II の性能では不足だ、と以前から考えていました。
後から雇われた経営陣は、Apple II が他社のパソコンに比べて「簡素」であることに不安をもっていたのです。
そして、明日にでも Apple II が他社のパソコンとの競争に敗れ、売れなくなるのではないかと思っていました。
そのため、他社のパソコンの機能を取り入れながら、Apple II との互換性を持った機械を作ろうとします。
この作業は…経営陣の要求は、つまり「てんこ盛りだけど、簡素を保つ」と言う要求で、非常に難航します。
IBM がいよいよパソコンの開発に着手したのは 1980 年の夏。
アップル経営陣はこの噂におそれ、以前から開発中だった Apple III の完成を急ぎ、同年秋に発売しています。
IBM に市場を奪われる前に、足場を固めておく必要がありました。
しかし、Apple III は II との互換性が悪く、設計も十分に練り込む時間がなかったため製造工程で問題が出ました。
出荷された後で、コネクタの接触不良などが多発したのです。
結局、Apple III は II を超えることができず、Apple III の販売は早期に終了します。
その後は Apple II を改良した後継機の販売に戻るのですが、「IBM が乗り出してくる」という噂だけで、アップル社はガタガタふるえていたのです。
IBM のパソコン…開発計画は「チェス計画」、開発する機械は、ACORN (どんぐり)と呼ばれました。
発案者はIBM 中間管理職のウィリアム・ロウ。彼はこの計画を上層部に進言し、認められます。
ただし、開発期間はたった1年。すでに Apple II によるパソコンのブームは起きていて、それ以上待っていては市場を奪われてしまう、という IBM 上層部の判断です。
ロウは、IBM は大企業病にかかっている、と感じていました。
会社が口をはさめば、どんなにうまくいきそうなプロジェクトでも失敗してしまいます。
そこで、彼はチェス計画を、独立事業単位(IBU)にしてもらうように社長に掛け合います。
IBM が大企業病であることは、会長も社長もわかっていました。
そのため、IBU という…今なら「社内ベンチャー」と呼ばれる制度を作り、自由な発想で研究を行えるようにしていました。
IBU に指定された計画は、IBM 社内にありながら、IBM に干渉されることはありません。
当時の IBM 会長、フランク・ケアリーの言葉によれば、IBU は「象にタップダンスを仕込んでくれるかもしれない」ものでした。
象とは、大きすぎて動きが緩慢な IBM のこと。
IBM の官僚主義は、多くのハッカーが嫌っていました。
しかし、会長や社長までもが嫌っていて、誰かが「タップダンスを仕込む」のを期待していたのです。
ロウは計画遂行のために、社内でも実力を持った13人の技術者を集めます。
リーダーはドン・エストリッジ。技術者としても、リーダーとしても十分な資質をもった人物でした。
彼らはロウが期待した通り、IBM の慣習にとらわれず、自由気ままにふるまいます。
IBM の官僚主義に縛られたエリートたちは、自由気ままにふるまう彼らを嫉妬と侮蔑を込めて「汚い1ダース」(13 をセットとする単位の意味)と呼びました。
しかし、彼らは自分たちのチームを「パン屋の1ダース」と呼んでいます。
#パン屋は、中世において特権を認められた職業の一つ。
町の人々全員の食を保証するため、店の数は競争が起きない程度に抑えられ、日々の生活が保障されました。
一方で、町の中全員の命を握ることになるため、嘘は絶対に許されず、パンの数をごまかしたりしたら死刑でした。
そのため、パン屋は「1ダース」のセットに、おまけの1個を付ける習慣を持っていました。
そして、開発が始まります。
IBM の慣習では、コンピューターの内部は全て IBM 製の部品で作ることになっていました。
しかし、メインフレーム用の部品はあっても、パーソナルコンピューター用の部品はありません。開発から始めていては、とても1年の期間では作れません。
そこで、CPU は外部から調達することになり、Intel の 8088 (16bit の 8086 を 8bit 化し、すでに安くなっていた 8bit 用の周辺 LSI などを使えるようにしたもの)が使用されます。
IBM のコンピューターの内部構造は企業秘密とするのが慣習でしたが、回路図や ROM に焼かれたプログラムまですべて公開する、オープンアーキテクチャが取られました。
当時のパソコンには、BASIC が付きものでした。これはマイクロソフトから調達するのが順当でした。
また、すでに人気のあった 8bit OS 、CP/M の16bit 版も付属させたいと考えていました。
IBM は、マイクロソフトに行き交渉を行います。
IBM は秘密主義で、契約事項は多項目にわたりました。ビル・ゲイツはこれほど一方的な契約書は始めてみましたが、ちょっと肩をすくめただけでサインをしました。
マイクロソフトは、BASIC だけでなく、FORTRAN、COBOL、PASCAL も提供することになります。
しかし、IBM が CP/M を作っていたデジタル・リサーチ社を訪れた時、社長で CP/M 製作者のゲイリー・キルドールは、趣味の自家用飛行機でフライトを楽しんでいました。
共同経営者の妻は、夫のいないうちに勝手なことはできない、と契約書へのサインを拒みました。
…ただ、キルドールは IBM が嫌いだったのではないかな、と思います。
そうでなければ、IBM の担当者が出直せば話は終わりです。しかし、彼はその後も IBM と契約しようとはしていません。
マイクロソフトがこのことを知るのは、BASIC 等の開発のための打合せをしていたときです。
当時のパソコンでは、BASIC は ROM に搭載するのが普通でした。しかし、IBM の意向も有り、IBM 用の各種言語は OS 上で動作させることになっていました。
ところが、まだ OS が決まらない、と担当者が打ち明けたのです。
マイクロソフトの人間は、CP/M を独自に 16bit 化した SCP-DOS (開発名は QDOS)の存在を知っていました。
小さな会社が発売していた 16bit マシン用に作られた OS で、あまり知られてはいません。
SCP-DOS を買い取って、マイクロソフト製品として IBM に提供するかどうか…
しかし、4つの言語を提供する約束もあり、さらに OS まで移植作業をするのは納期が厳しいです。
「このチャンスを絶対に逃すべきじゃない。IBMを踏み台にして大きくなるんだ。なんとしてもやるんだ」
とゲイツを説得したのは、副社長だった西和彦。
この言葉で腹をくくり、SCP-DOSの権利を買い取り、IBM PC 用に改造する作業が始まります。
同時に、IBM に「4つの言語に加え、OS も提供できる」と連絡を入れ、採用が決まります。
SCP-DOS の元となる QDOS を作成したティム・パターソンはマイクロソフトに社員として招かれ、改良作業は QDOS を一番よく知っている彼が行うことになりました。
ACORN は IBM PC として、1981年8月12日に発売になります。
アップルは、IBM が出してきた機械が、市販の部品を寄せ集めただけで驚くような機能がなかったことに安堵します。
これなら、恐れるに足りません。
そして、ウォールストリート・ジャーナルに、「ようこそ IBM」という、歴史に名を残す広告を打ちます。
「ようこそ、IBM。
コンピューター革命が起きて35年、もっとも刺激的で重要な市場にようこそ。
アメリカが作り上げたこの技術を世界に広めるべく努力し、責任を持って競争しようではありませんか。」
当時、アップル社長のマイク・マークラは、インタビューにこう答えています。
「IBM はパソコンのことも、パソコンの売り方も何もわかっていない。我々はパソコンを知っているし、ソフトウェアも豊富に持っている。パソコン市場でアップルはIBMを打ち負かすだろう」
しかし、IBM PC は大人気で、アップルはあっという間に打ち負かされます。
IBM PC は大成功をおさめ、ドン・エストリッジと彼らのチームは…左遷されます。
左遷の理由は2つありました。
大人気になってしまった製品を、「勝手気まま」に行動するチームに任せておくことはできません。
これからは、IBM らしくしっかりと管理していかなくてはならないのです。
そして、IBM PC は想定よりも高機能すぎ、メインフレームの販売はますます不振になったのです。
開発チームは、販売不振の責任を取らねばなりません。
この左遷の直後、ドン・エストリッジとチームメンバーの多くが乗る飛行機が墜落する、と言う事故が起き、メンバーのほとんどが死んでしまいました。
ドンはとてもおしゃれで、背広の胸ポケットに常に赤いバラを挿していたそうです。
そして、これを「パン屋の1ダース」のシンボルとしていました。
彼の棺は、赤いバラの花で飾られたそうです。
これで、IBM の一つの時代が終わりました。
残ったチームのメンバー2名も「もう、あのような素晴らしい仕事はできない」と失望し、IBM を退社してしまいます。
IBM は、IBM PC の後継機種を作り続けますが、徐々に互換機に市場を奪われ、10年前の 2004年には「IBM 互換機から撤退」するまで追い込まれます。
2016.8.12 追記
ここに書いたこと、1989年の書籍「林檎百科」、およびネット上で集めた情報で構成したのですが、間違いが多数あるとわかりました。
同じく1989年に邦訳が出た書籍「ブルーマジック」に詳細がありました。
Twitterでこの本が良書であると教わったのですが、早速古書を探して読みました。
事実と大きく違う点は、エストリッジは「左遷」にはなっていない、ということ。
彼は副社長に抜擢され、喜んで受け入れています。
副社長でありながら、IBM PC チームのリーダーではありました。
しかし、重役でもある責任上自由なふるまいは難しくなり、チームへの締め付けはきつくなります。
もう一つ、IBM PC 開発のきっかけは「メインフレーム不振」ではなく、パソコン参入の失敗でした。
IBM 5120 というパソコンを開発しながら、IBM 社内の「事務手続き」のために発売タイミングを完全に逸し、宣伝もしなかったために知られることなく在庫を抱えていたのです。
当時の IBM 重役陣には、AppleII の作り出したパソコン市場への参入、そして「君臨」が重要な責務で、IBM PC は 5120 の「遅れ」を取り戻す戦略製品でした。
だからこそ、たった1年という期間が設定され、その期間内の発売と普及が見込めるのであれば、あらゆる自由が許されたのでした。
いずれ…エストリッジの誕生日にでも、もう少し事実に近い人物像をお届けできれば、と思っています。
同じテーマの日記(最近の一覧)
関連ページ
ケン・トンプソンの誕生日(1943)【日記 16/02/04】
ニクラウス・ヴィルト 誕生日(1934)【日記 16/02/15】
スティーブ・ウォズニアックの誕生日(1950)【日記 14/08/11】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |