アバンダンウェアで懐かしい過去の時代にタイムスリップしてみる

皆さんはアバンダンウェア(Abandonware)という用語をご存知でしょうか?
wikipedia:アバンダンウェアにあるように、

著作権者が既に販売をやめたりサポートしていないソフトウェア、あるいは様々な理由により、誰が著作権者であるか不明なソフトウェアを指すために用いられる語である。

ということで、既に商品としての価値が無くなっていたり、著作者が既に不明になっていたりしているような非常に古いソフトウェアを指す用語です。*1

  • コンピュータ技術の進歩はあまりも急速なため、通常多くの国で認められている著作権の消滅期限より遥かに前に、商業的な価値がなくなる可能性が高い
  • ソフトウェアはインターネットなどを通して簡単にコピーが出回ってしまう

ということから、コンピューターソフトウェア固有の現象と思われます。もちろん、

この用語は法的な意味を持たない。すなわち「アバンダンウェア」と呼ばれているソフトウェアの複製物を、著作権者の許諾なしに取得することが法的に許されているわけではない。著作権者がその著作権を放棄するなどの理由により著作権が消滅しない限り、全てのアバンダンウェアは著作権の保護期間が経過するまで、著作権の対象となる。

ということで、アバンダンウェアの配布やダウンロードを行うことは限りなく黒に近い違法行為であると考えられ、決して声を大にして他人に勧められる行為ではないことは確かなのですが、まあ、個人で楽しむだけなら許容されるのではないでしょうか。(その点、くれぐれも個人の判断で行っていただきますようお願いします。)ここでは、アバンダンウェアを使って、私が始めてプログラミングを勉強した頃の時代(年齢がばれますが)にタイムスリップしてみたいと思います。

MSXパソコンのシミュレータで遊ぶ

私が始めてパソコンと呼ばれるものでプログラミングをしたのは小学校の中学年の頃だったと思います。今は亡き私の祖父*2が趣味で電子音楽の制御に使っていたYAMAHAMSXパソコン(おそらくCX5という機種だったと思う)を譲ってもらったのがきっかけでした。当時は私は英単語もまったく読めませんでしたし、ブラインドタッチもできなかったのですが、雑誌*3などに載っていたBASICのプログラムリストを必死に打ち込んでゲームを作成したのを覚えています。以下の動画の中に私の打ち込んだ雑誌のゲームもあってすごく懐かしいです。

幸運なことに、現在では非常に優秀なMSXエミュレーターをフリーで簡単に入手することができます。
MSX エミュレータ|エミュポータル
こうしたエミュレータを使うと、BASICやマシン語などで実際にプログラムを作成してみることができます。
たとえば、

のように順番に円を描くプログラムはBASIC言語で以下のように記述すれば簡単にできます。(今では信じられないことですが、変数名は大文字小文字を区別なしの英数字2文字まで、GOTO先も行番号指定のみでラベル名が使えせんでした。当然ローカル変数というものはないです。)

なお、以下の雑誌には公式MSXエミュレーターだけでなく、MSX用のOSであるMSX-DOSMS-DOSではない!)やZ80のマクロアセンブラやCコンパイラが付属しているので、いろいろと楽しめます。MSXプログラミングの参考書などはヤフオクなどで今でも結構出回っています。

MSX MAGAZINE永久保存版3

MSX MAGAZINE永久保存版3


もし、私に天才的なプログラミングの才能があれば、すごい面白いゲームを作成して雑誌に投稿していたりしていたのでしょうが、MSXに関しては当時は結局そこまで使いこなすことはなく、結局ゲーム機*4として終わりましたね。
Z80マシン語などはJavaプログラマーでも教養として有用なので、時間のあるときに一度勉強しておくのも良いでしょうね。
はじめて読むマシン語―ほんとうのコンピュータと出逢うために

はじめて読むマシン語―ほんとうのコンピュータと出逢うために

Turbo Pascal*5OOPに初めて出会った時の感動を再度味わう

それからしばらく、プログラミングからは遠ざかっていたのですが、私が再びプログラミングの面白さに目覚めたのは大学の授業でPascal言語を習ったことがきっかけでした。*6学校では構造化型言語ということで学び、初めて関数、手続き、ポインターなどの基本概念を学んだのですが、より深く勉強しようと自分で購入したTurbo Pascal6というパッケージには、Turbo Visionと呼ばれるアプリケーションフレームワークが付属していました。それに付属していたユーザーズガイドのなかにあるオブジェクト指向プログラミング入門というのが非常に分かりやすいく書かれていたと記憶しています。残念ながら、そのマニュアルは紛失してしまったのですが、英語版であれば、以下からダウンロードできます。
E-Book | Turbo Pascal 5.5 Object Oriented Programming Guide
今でこそアメリカなど海外ではオブジェクト指向プログラミングは常識として浸透しているみたいですが、当時(20年前)は一般のPC環境でようやく利用されるようになった頃であり、多くのプログラムはオブジェクト指向言語を使って書かれていませんでした。このマニュアルを読むと、オブジェクト指向という考え方*7がいかに画期的ですばらしいものなのかという作者の意気込みが感じられます。オブジェクト指向プログラミングの威力を最もはっきりと感じるのは、やはり、マウスやウィンドウ、メニューバーを使うようなGUIのプログラミングを行う時です。当時はWindowsのようなグラフィカル環境はまだ一般的ではありませんでしたが、この製品に付属していたTurbo Visionというアプリケーションフレームワークを利用することで、MS-DOS上で簡単に「GUI」っぽいアプリケーションを開発することが可能でした。

ここで、非常に感激したことは、Turbo Pascalの提供するIDE環境そのものがTurbo Visionというフレームワーク上に構築されていたという事実ですね。実際、上記のサンプルアプリケーションの画面とIDEの画面は非常に似通っていました。

MSXのBASICでは「円を描く」「線を引く」という一個一個の基本的な処理を呼び出してプログラミングしていたものが、TWindowをNewしてデスクトップに貼り付けることで、自分からひとりでにリサイズやドラッグなどのイベントに反応するウィンドウが画面に表示されるようになるのです。「なんと効率的で再利用性の高いプログラミング技術があるのだろう!」私は心の底から感動したのを覚えています。実際、自分のような平凡な人間が少ないコードの記述で見栄えと操作性のよいアプリケーションを作成できてしまうのですから、当時としては実際すごいことでした。自分は当時完全に独学でOOPを勉強した*8ので、OOPのすごさを実感として分かったといえるレベルになるまでに2〜3年はかかったような気がしますが。なお、Turbo Pascalは完全に16ビットのDOSコンパイラなので、64ビットWindows環境では仮想環境上でないと動作しません。しかし、現在でもFree PascalというフリーのコンパイラーがOSSとして開発されています。Turbo VisionについてもFree Pascal上に移植されています。
Free Pascal - Advanced open source Pascal compiler for Pascal and Object Pascal - Home Page

ちょっと思ったこと

ちょうど私の世代(団塊ジュニア世代)というのは、以上のような手続き指向の環境からオブジェクト指向の環境への移行をまさにリアルタイムに肌で体験することができた幸運な世代であったのかもしれないと思いました。それより古い世代だとCOBOLFORTRAN、BASICといった手続き型全盛の時代になってしまいますし、JavaWindows以降の世代では、オブジェクト指向は日常既に空気のようなあたりまえの存在になってしまっており、そのありがたみをまったく感じなくなってしまっていますから。オブジェクト指向の存在意義がよく分からないという人は、ここで紹介したようなアバンダンウェアを使って、オブジェクト指向が登場してきた時代にタイムスリップしてみることで、「あ、そういうことだったのか」という気になるかもしれませんね。よくオブジェクト指向の入門書で書かれているように「哺乳類を継承して犬や猫になる」という抽象的な説明を何度も聞くより、Turbo Visionでウィンドウを開くプログラムを作ってみるのがOOPの威力を感じるのに非常によい手段だと思います。まさに百聞は一見にしかずということで。*9

*1:一般にAbandonwareというと多くはROMデータとして違法に出回っている昔のゲームのことを指すことが多いようです。古いゲームは現在でも商業的な価値が高いものが多いため、特に問題が大きいと思われます。

*2:文字通りコンピュータおじいちゃんという感じの人でした。80歳を超えて亡くなるまでパソコンやデジタル家電に興味を持っていました。このgeekな趣味は隔世遺伝で私に受け継がれているようです。

*3:コードリストが入手したくてオークションなどしばらく探していたのですが、今ではなかなか出品されないですね。

*4:当時みんなが持っていたファミコンは勉強しなくなるからという理由で買ってもらえなかった。

*5:Turbo Pascalは以下のようなサイトでダウンロードできます。http://vetusware.com/

*6:私は情報専門の学科は卒業していませんが、プログラミングの授業としてPascal言語は必修科目でした。

*7:当時はGoFデザインパターンも知られていない時代だったので、継承を多用しすぎるなど現代のオブジェクト指向プログラミングのベストプラクティスから考えると不適切な設計もありましたが。

*8:当時はヒープとか動的変数割り当てといった基本的なことをよく理解していなかった。

*9:Turbo Pascalの少し後に登場したVBだとあまりにもブラックボックス化されてしまったため、オブジェクト指向がちょっと見えにくくなってしまっています。