連載:ハッカーの系譜①スティーブ・ウォズニアック (5/6) Apple IIを産んだ「ウォズの魔法使い」

牧野武文

June 15, 2015 08:00
by 牧野武文

結局、Apple Iは150台ほど売れ、利益は4万2000ドルだった。しかし、すぐにそっくりの製品が次々と出てくる。現在であれば、知的財産権を平気で侵害しているようなコピー製品もあった。

「Apple II」を彩るウォズのトリッキー

次にウォズが取り組んだのは、カラー表示が可能な「Apple II」の設計だ。HPを辞職することについてはかなり悩んだが、ジョブズの「会社を自分で作れるチャンスなんて、人生に1回あるかないかぐらいのことだ」という口説き文句で、HPを辞職しアップルの仕事に専念することにした。こうして生まれたのが「Apple II」で、シリーズの合計で500万台が売れるパーソナルコンピューター初のヒット商品となる。Apple IIは、ウォズがほぼ一人で設計したといってよく「ウォズのコンピューター」の集大成ともいえるマシンだ。テクノロジーに詳しい人々は、Apple IIのそこかしこに見られるトリッキーな設計を見て、ウォズのことを「ウィザード(魔法使い)」、あるいは映画『オズの魔法使い』をもじって「ウォズの魔法使い」と呼び始めた。

ウォズのコンピューター「Apple II」 Images By Computer History Museum

この「トリッキー」という言葉は、ウォズというハッカーを理解するうえで重要なポイントとなる。というのは、世間から見ればトリッキーな設計であっても、ウォズにとっては決して奇をてらったわけではなく、素直にシンプルで美しい設計をしただけなのだ。このウォズの見方と世間の見方のずれを説明するために、ウォズはよく「逆ポーランド記法」の話をする。普通の計算式は3+4のように、数、演算子、数の順で書いていく。逆ポーランド記法は34+のように数、数、演算子の順で書く。HPの科学電卓は、この逆ポーランド記法で入力する方式だった。

合理的な「逆ポーランド記法」

一般人から見ると、逆ポーランド記法は極めて奇妙な計算式の書き方のように見える。しかし、ウォズは計算式としては逆ポーランド記法の方が合理的だと語る。ここがウォズと世間の「ずれ」の部分だ。一般的には、3+4のような計算式が合理的であると思えるが、実は計算式としては合理的とはいいがたいのだ。計算をする際にしなければならないのは、計算に使う数字を記憶することと、演算モード(足し算か、かけ算か)を記憶して、演算を実行することだ。一般的な計算式では、最初の数を記憶して、次に演算モードを記憶し、それから残りの数を記憶するという手順になる。2つの種類の異なる記憶を交互にしなければならない。一方で、逆ポーランド記法では、数、数と記憶し、最後に演算モードを記憶すればいい。

また、2+3×4+7のような計算式は、人間にとってかなり複雑になる。というのは「かけ算とわり算は優先して行う」というルールを適用しなければならないからだ。実のところこのルールに合理性はなく、いわゆる決めごとだ。そのためこのルールを知らない小学生などは、2+3で5、5×4で20、20+7で31、という誤った答えを出してしまうこともある。

このような計算式を英語ではExpressionと呼び、正確に訳すと「表現式」となる。つまり、計算式は計算するための記述法ではなく、どのような計算をするかという構造を表現するための式なのだ。そのためには「かけ算とわり算は優先して行う」というルールを定めて、ひとかたまりとして見た方が理解しやすくなる。計算式の記述法は、計算のためではなく、計算の構造を理解しやすく見せるための記述法だ。しかし私たちは「その計算方法に慣れている」という理由で、実は不合理な計算式の記述法が、計算をするときでさえ合理的で便利なものだと思いこんでいるわけだ。

この感覚がよくわかるのが計算式での()の使用法である。3×(2+4)の計算を例に上げよう。Expression=表現式としては、3と2+4がそれぞれ1つの塊であり、しかも同じレベルの数値であり、それをかけ算するという「計算の構造」が理解しやすい。幅3cmの紙テープの切れ端が2本あり、それぞれ長さが2cm、4cmとなっている。面積の合計はいくらになるだろうか? というような問題を解くときは、長さを合計して、紙テープを長方形としてみなし、面積を計算するという「考え方」が表現式の中に表現されている。しかし、これは決して計算手順を示した式ではない。

逆ポーランド記法では、計算手順を合理的に示す。この例では 3×(2+4)は、324+×という記述になる。「3を記憶する」「2を記憶する」「4を記憶する」「最後の2つを+する」「最後の2つを×する」という手順だ。逆ポーランド記法では、演算が常に「最後の2つを○○する」となるのがポイントである。なお、逆ポーランド記法でも()を使っても構わないが、それは人間に計算構造をわかりやすくするためで、本質的には()を使わなくても記述することができる。

この逆ポーランド記法は、コンピューターとの相性がいい。コンピューターの記憶領域はスタックと呼ばれ、後入れ先だし方式になっている。冷蔵庫にモノをしまうように、奥からモノを詰めていき、最後に入れたモノがいちばん手前にくる。当然、一番手前にある最後に入れたモノが取り出しやすい。スタックがなぜこんな形式になっているかといえば、それが一番「単純」な動作で計算を実行できるからだ。計算機が実行する命令は、「スタックに入れる」と「スタックから取りだす」の2つだけでよくなる。メモリ上にスタックを作る場合、対象のアドレスを指定するポインター(目印)を、入れたら1つ後ろに移動させ、取りだしたら1つ前に移動すればいい。コンピューターの原理を最初に記述したチューリングマシンそのままにスタックは実現できるのだ。

現在ポイントがメモリ1にあって、324+×を計算していくとしよう。その動作は次のようになる。

(1)メモリ1に3を積む。ポインターを1つ後ろに動かして、ポインターは2になる

(2)ポインターが示すメモリ2に2を積む。ポインターを1つ後ろに動かして、ポインターは3になる

(3)ポインターが示すメモリ3に4を積む。ポインターを1つ後ろに動かして、ポインターは4になる

(4)+演算子がでてきたので、ポインターを1つ前に動かして、メモリ3の数字(4)を計算用メモリに入れる。もう一度、ポインターを1つ前に動かして、メモリ2の数字(2)を計算用メモリに入れる

(5)計算用メモリにある2つの数字を加える。答えは6になる

(6)答えの6をポインターが示すメモリ2に入れる。ポインターを1つ後ろに動かして、ポインターは3になる

(7)×演算子ができてきたので、ポインターを1つ前に動かして、メモリ2の数字(6)を計算用メモリに入れる。もう一度、ポインターを1つ前に動かして、メモリ1の数字(3)を計算用メモリに入れる

(8)計算用メモリにある2つの数字をかける。答えは18になる

(9)答えの18をポインターが示すメモリ1に入れる。ポインターを1つ後ろに動かして、ポインターは2になる

(10)計算式がなくなったので計算終了。スタックから最後の数字をとりだして、答えとする。18が答えになる

いかがだろうか。ポーランド記法であれば、最初はとにかくスタックメモリに数字を入力していき、演算子がでてきてから計算をすればいい。計算手順が非常にシンプルになるのだ。

「カラー表示」を生んだウォズの魔法

ウォズにとっては、このようなシンプルな構造こそが合理的で美しいものに感じられる。そして、そのシンプルな構造をなぞるように記述する逆ポーランド記法は最適な解だ。一方で、ウォズはそのようにエンジニアにとって合理的で美しいものが、一般の人にとって必ずしもそうではないことも理解していた。だからこそ、彼は、その間を埋める仕事こそ、エンジニアリング・デザインだと考えた。ウォズが作ったった歴史的名作のApple IIは、世界で初めて販売された個人向けPCキット「アルテア」がエンジニアだけに受けたのとは正反対に、ごくごく一般の人に受け入れられたのだ。
しかし、親しみやすいApple IIの技術の裏側を開けてみれば、ウォズの「合理的で美しい」設計をいたるところに見つけることができる。一見すると、逆ポーランド記法のように不思議な設計になっているので、多くの人は「ウォズの設計はトリッキー」「ウォズの魔法使い」という評価をしてしまう。だが、ウォズにとってはそれはトリックでもなんでもなく、ただ合理的で美しい設計をしただけである。

アップルが1978年に発売したApple IIは、世界初のパーソナルコンピューターと言っていいだろう。それだけでなく、カラー表示が可能な高解像度モードでは、280×192ドットに6色の表示が可能になったいた。このため当初は、Apple II向けに様々なゲームソフトが発売され、ゲームマシンとして人気を博した。ところが、面白いことにこの高解像度用のビデオメモリ(VRAM)は8Kバイトしか用意されていなかった。コストの問題、処理速度の問題から8Kを確保するのがやっとだったからだ。

しかし、この高解像度表示をするためには8Kのビデオメモリでは全く足りない。1ドットが6色なのだから、最低でも3ビットの情報量がないとならない計算になる。それが280×192ドットだから、3×280×192=161280ビット=20160バイト=19.7Kバイトは必要だ。それどころか、もしモノクロ表示しかできないとしても、1×280×192=53760ビット=6720バイト=6.6Kバイトである。もし凡庸なエンジニアが設計をしたとしたら、Apple IIはモノクロ表示のマシンとなっていただろう。あるいは、当時は非常に高価だったビデオメモリを大量に搭載したことで、個人には購入できない価格設定になり、おまけに画面表示も遅いイライラする駄作になったかもしれない。

いったいウォズは、この問題をどうやって解決したのだろうか。その方法は、まさにウォズの魔法使いと呼ぶしかないクレバーなものだった。それは補色を利用したものだ。補色というのは混ぜあわせると白になる色の組み合わせのこと(印刷の場合は混ぜあわせると黒になる)。ウォズはこの補色の組み合わせを2つ用意した。「紫・緑」と「青・橙」だ。紫と緑の場合、両方を点灯すれば、補色であるから遠目からは白に見える。両方を消灯すれば黒に見える。こうして隣り合った2ドットを一組と考えたのだ。そして、次のような横7ドットを1つの単位として考えた。

紫、緑、紫、緑、紫、緑、紫
青、橙、青、橙、青、橙、青

この7ドットのセットを選ぶと、なにもしなくても、この7ドットは必ずこのとおりに色が点灯するように回路が設計されていた。あとはこの7ドットのどれを点灯させるかを指定すればいい。白を表現したいときは、すべての1111111をビデオメモリに書きこみ、すべてを点灯させる。すると、補色同士が作用しあって、遠目からは白に見える。また、紫色に塗りたい場合は、1010101をビデオメモリに書きこめば、紫、黒、紫、黒、紫、黒、紫と点灯する。全面が紫に光るのではなく、1ドットおきになってしまうが、それでも遠目から見ればその7ドット全体が紫に点灯しているように見える。1ドット置きの点灯であるため、スクリーントーンのような感じで色が付き、Apple II独特の色表示となった。

では、なぜウォズが7ドットを1つの単位として考えたかというと、1バイト=8ビットを単位として扱いたかったからだ。8ビットの最初のビットは、0で(紫、緑)が、1で(青、橙)がセットされる選択のビットに使う。残りの7ビットは7ドットに対応し、0と1でそれぞれのドットを点灯させるかどうかを指定する。つまり、Apple IIの高解像度モードでは、横7ドットの6色表示をするのに1バイトのビデオメモリが必要になる。画面の横は280ドットだから、40バイトで横1列が表現できる。これが192列あるので、40×192=7680バイト=7.5Kバイトと、8Kバイトのビデオメモリで充分足りるのだ。

さらに、この8Kの領域は2つ用意されていた。つまり、ビデオメモリは2画面分用意されていたのだ。これはアニメーション表示を狙ったものだった。1画面を表示している間に、もう1画面分のビデオメモリに書きこみをし、ビデオメモリを切り替える。切り替えは一瞬でできるので、あたかも画面の中の要素が動いたかのように見える。当時の非力なCPUと、多くを搭載できないメモリの制約の中で、ウォズの魔は最大限の効果を発揮したと言える。

(敬称略/全6回)

BugBounty.jp

システムに内在するリスクをチェックセキュリティ診断(脆弱性診断)

提供会社:スプラウト

企業や組織のWebアプリケーション、各種サーバー、スマートフォンアプリケーション、IoTデバイスなどの特定の対象について、内外の攻撃の糸口となる脆弱性の有無を技術的に診断します。外部に公開す るシステムを安心かつ安全に維持するためには、定期的なセキュリティ診断が欠かせません。

BugBounty.jp

サイバー空間の最新動向を分析脅威リサーチ

提供会社:スプラウト

サイバー攻撃に関連した機密情報や個人情報が漏洩していないかをダークウェブも含めて調査し、もし重要な情報が発見された場合は、その対応策についてもサポートします。また、サイバー攻撃者のコミ ュニティ動向を分析し、特定の業種や企業を狙った攻撃ツールやターゲットリストが出回っていないかなどの特殊な脅威調査も請け負っています。

続・日本人マルウェア開発の実態を追うハッカーとセキュリティ技術者は「文明」と「文化」ぐらい異なる

December 31, 2018 18:41

by 『THE ZERO/ONE』編集部

前回の「日本人マルウェア開発者インタビュー」では、マルウェアの開発者が「生身の人間」であることを知った。 一般社会のステレオタイプは、マルウェア開発者が「反社会的である」「孤独である」という印象を植え付けてきた。しかし前回の取材を通して、実際の彼ら(彼女ら)を見てみると社会に順応し、きわめて組織的で…

中国でライドシェア殺人事件が発生

May 22, 2018 08:00

by 牧野武文

5月6日早朝、中国版ウーバーの「滴滴出行」(ディディチューシン)のライドシェアを利用した女性が、運転手に殺害されるという痛ましい事件が起きた。ほぼすべてのメディアが連日報道する大事件となった。各交通警察は、中国人民公安大学が制作した「ライドシェアを利用する女性のための安全防犯ガイドブック」を配布して…