今回はX68000のC言語の話をしようと思う。
ぶっちゃけ、1980年代後半のPC市場に於いては、何度か話したが、今と違って「プログラミングはまずはC言語で」と言うような雰囲気は無かった。
1つは、ライバルとしてのPascalの存在が大きかった。
歴史的に言うと、C言語は16bitアーキテクチャで開発された言語で、なくはないけど、8bitで始まったPC環境では、あまりC言語処理系が移植されなかった事が挙げられる。言い方を変えると、C言語の能力を活かすには16bit以上のアーキテクチャが望まれていたんだ。
その点、Pascalは仮想マシンベースと言う事もあり、Apple IIを始めとして、黎明期の8bitパソコンにも言語処理系が移植され、既に実績があった。
そして当然、BASICの存在がある。往年のパソコンだと「取り敢えずはBASIC」であり、PC用スクリプト言語の位置は確固としたモンだった。誰が何やるにしてもBASICがまずはプライマリ・チョイスであり、ここで脱落すればプログラミング自体を諦める、と言うのが当時の雰囲気だったんだ。
そんな中、SHARPはX68000で16bitパソコンとして、新参のC言語を推していく。なかなか先見の明があったと言うか、やっぱ「目の付け所がSHARPでしょ」だったんだよな。
そういうX68000とC言語のマリアージュは良く聞く話だ。でもちと気になっていた。
と言うのも、当時の基準から言うと、C言語の言語処理系(コンパイラ)自体が結構デカかったんじゃないか問題だ。つまり、フロッピーディスクでプログラムを供給するとしても「フロッピーの枚数が結構必要なのでは・・・?」と思ったんだな。
「それが何か?」とか言う人もいるだろう。「ハードディスクにインストールすりゃあエエじゃん」と。うん、正しい。
正しいが別の問題がある。ぶっちゃけ、80年代後半だと、ハードディスクは高価な周辺機器で、ポピュラーなブツじゃなかったんだよ。ウソ、って思うかもしれんけどホントの話だ。今だと笑っちゃうだろうけど、20Mbの容量で30万円近く、とかしたんじゃねーの?40Mbだともっと値が張る。
そしてSHARP X68000は当時はメチャ高級パソコンで、値段から言うとPC-9801よりも高かったと思う。だからこそ好事家の機械だったんだよな。
SHARP自体は任天堂と色々と業務提携してた筈(※1)なんだけど値段設定に付いては学ばなかったようだ。事実、X68000は登場時に、その価格設定のマズさで人々の食いつきが悪かったわけだ(※2)。
そんな高額なマシンにハードディスク装備・・・・・・クラクラしてくるし、そうそう消費者の財布は緩まないだろう。
日本でハードディスクが割に「当たり前になった」のは90年代に入ってから、早くてもNECがPC-9821にHDDを搭載した頃、フツーに考えてもWindows 95搭載機が当たり前になってから、だ。それまでは通常、HDD標準搭載、ってのはまず無かったんだよ。
事実、NECはPC-9801を開発した後、海外展開を考えていた。IBM-PCの基本スペックがめっちゃ低いトコに殴り込んでいって、一瞬、IBM-PCのお株を奪うかも?と思われたんだよな。
ところがそれは性交成功しなかった。何故ならPC-9801はHDD搭載を考えてなかったから、だ。IBM-PCはそれを考慮していた。結果我らが98は米国のセールスで「性能がIBM-PCを上回ってても」惨敗したんだ。
当時の米国製PCもすべからくIBM-PCに大敗したのは、HDD搭載を考えてなかったマシンばっかだったからだ。ハッキリ言っちゃえば初代Macintoshもそれで負けた、潰された、と言って良い。それくらいHDD搭載前提、ってのは大きかったんだけど、日本ではそこがあんま分かってなかったんだよな。
このテの商売って鶏が先か卵が先か、ってような話で「普及すれば」部品単価は下がるんだけど、普及するかどうか分からないブツではバクチが打てない、ってのは事実なんだよ。日本は特に、当時は贅沢税(※3)の関係もあって、国が「これは不急不要じゃね?贅沢じゃね?」と思うモノに課税してた事もあって、なかなかPCパーツの価格を下げようとする動きを取るのがムズかった、って背景もあったんだよな。そして国会議員がITオンチっつーのは今も昔も変わらん(※4)のだ。
ちなみに、日本だとFM-TOWNSみたいにHDDが無くてもCD-ROMがあればイイじゃない!と言うマシンまで出てくる始末だった(※5)。
とまぁ、80年代から90年代初頭にかけて、PCにHDDを積む、ってのはなかなか厄介だったんだよ。X68000は律儀にHDD搭載モデルも出してるんだけど、タダでさえ高いX68000、HDD搭載モデルだと10万円以上高くなるんだよな。だからあんま売れなかったんじゃねーの?
そもそも、98のゲームはHDDにインストールする前提のゲームが出てるわけなんだが、X68000だとフロッピー9枚組でプレイさせるゲーム、とかヘーキで販売するような機械だからな(笑)。っつー事はさ、HDD搭載機の実売数とか、PC-9801のそれより低い、って考えてまぁイイんじゃねーのかなぁ。
まぁ、恐らく、ホンマに「X68000でプログラミングしたい!」って層は、HDD内蔵モデルを買ったか、あるいは外部HDDを購入してた、かしたんだろ。ゲーマーはそれらを買わなかった、と。
多分そんなトコなんじゃないか。
さて、SHARPが販売したC言語のコンパイラ、「C Compiler Pro 68k」。これは3枚組のフロッピーディスクで提供されていた。
3枚組のフロッピーディスクで提供されてたから、と言って3枚で済むたぁ限らない。当時のPC-9801みたいなDOS機でも「フロッピーのソフトからフロッピーにインストールする」って事はしばしばあって、結果フロッピーの枚数が増える、って事は良くあったんだ。
だから当時のフロッピーのディスク容量から言うとC Compiler Pro 68kも、確かめてはいないけど、フロッピーにインストールすると枚数増えるんじゃねーの?4枚組とか5枚組に。大変だ。
C言語だとライブラリをインクルードする前提なんで、フロッピー増えるとコンパイル時のスワッピングが大変になるでしょ。よって今回は取り敢えずHuman 68kと合わせてHDDへとインストールしてみる事にした(※6)。
X68000用純正Cコンパイラは通称XCと呼ぶらしい。ここではBINにはリンカやアセンブラ等のC言語用の下位ツール、本体のCコンパイラであるCC、studio.h等のオマジナイ類のinclude、X68000用ライブラリであるLib、そして何故かBASICやそれに纏わるツールも同梱されている(X68000のBASICの特徴である、Basic->Cトランスレータの為?)。
ちとX68000でC言語で書いたソースをコンパイルしてみよう。
開発ツールとしては前回紹介したEDを使うのがセオリーの模様だ。
COMMAND.Xを起動して
ed hello.c
としてエディタを立ち上げよう。
手始めにしょーもない、いわゆるHello Worldプログラムを書いてみる。
こんなカンジだ。
#include <stdio.h>int main(void) {puts("Hello, X68000!");return 0;}
まずはEsc-hで保存する。
次にこの状態でEsc-cしてコマンドプロンプトを呼び出す。
EDを開いたままEsc-cすると、エディタ下部にHumand68k:と言うコマンドプロンプトが現れる。
ここでこのように打つ。
cc "hello.c"
Cコンパイラによるコンパイルコマンドは由緒正しいccなので、cc ファイル名 でソースファイルは実行形式へとコンパイルされる。
コンパイルの実行画面は次のようになる。
結構面白いのが、この程度のプログラムだと現在は爆足でコンパイルは終わる。
しかし、当時の環境だとこの程度のプログラムをコンパイルして実行形式を作るにせよ、やたら時間がかかると言う事だ。当時CPUやメモリの非力な環境を実感するだろう。
さて、何かキーを叩いてエディタに戻り、またEsc-cして今度は次のように打ってみる。
hello
XCが面白いトコは、実行形式の名前をソースファイルの名前から勝手に生成する辺りだ。従ってhello.cからは実行形式hello.Xが作られる。
さて、Returnキーを叩いて実行してみよう。
これでX68000でHello Worldプログラムが書けて実行出来た。
なお、ANSI Cの制定は1989年。
従って、時期的にはC Compiler Pro 68KはANSI C準拠かどうかは登場時から考えるとビミョーなトコロだろう。
実装的にはK&R Cのモノの可能性が高い。
※1: ファミコン開発者の亡くなった上村雅之氏は元々SHARPの技術者だし、ゲームボーイなんかでもSHARPが液晶やCPUと言う部品を供給している。
※2: 任天堂はファミコンを売っても殆ど儲けの出ない価格設定にしていたが、反面、ソフト側で儲けるようにしてた、と言うのは有名な話だ。
言い換えると、SHARPはやはりソフト作りのノウハウが無かったのでこういう戦略が取れなかった、と言う事でもあるし、大方のハード屋はAppleを除くとそういう欠点を抱えている。
※3: 正確には物品税。かつては国が「贅沢品」と分類したモノにガンガン課税していった。
※4: 言い換えると日本では、政治家、と言う奴はITも分からんようなバカがなろうとする職業らしい・・・そんなトンマな立候補者達から国会議員を選ばなアカン我々の気苦労は並大抵ではない。
そして、最近では、ITオンチに経済オンチしかいねぇ、ってのまでバレてきてる。
※5: これは現代では特異なアイディアに思えるが、世界的に見ても実は支持されたアイディアではあった。
第一に「ハードディスクにインストールする」スタイルだと、そのソフトの「コピー」を黙認しなければならない、と言う面がある。これに難色を示すメーカー(特にゲーム屋)が多かった事。今でもこの辺は「ネット経由のアクティヴェーション」と言う技術で無限にコピーを産み出す事を阻止しよう、とメーカー側は頑張っているが、正直言ってユーザー側には不利益(っつーか面倒)以外の何物でもない。
第二に「CD-ROMによるソフト供給」だと、当時では事実上「コピーが不可能」と言う意味になっていた。当時のHDDだと多くて100Mbにも到達しないのがフツーで、CD-ROMの「700Mb」と言うのはまさしく「大容量」で、HDDにコピーは不可能と言って良かったのだ。今みたいにGBやTBレベルのHDDがフツーになって「CDやDVDのリッピングはラクな方」になる、なんて当時は誰も予想してなかった。
第三にHDDはあくまでオプションの1つ、と言うのが当時の意識で、固定した内蔵HDDより、例えば着脱可能なフロッピーの延長線上にあるZip-driveとかMO-driveの方がエエんちゃうの?と言う意識があって、HDDが「標準化する」とは誰も予想してなかったのだ。あくまでHDDは「Alternativeの1つ」と言う意識しかなかった。
※6: なお、PC-9801辺りの当初のMS-DOS(3.3辺り?)と違ってHuman 68KはHDDへのインストールを前提に作られている。
ただし、X68000はちとおかしな設計になっていて、周辺機器である記憶媒体の読み込み順序がセオリーに従っていない。
通常、と言うかMacintosh以降のセオリーから言うと、ディスク等の記憶装置は「外部から順次読み込みを試し」、内蔵HDDの読み込みは最後になされる、と言う事になっている。これは現在のWindows機のBIOSのデフォルト動作でもある。
じゃないと、内蔵HDDの読み込みに障害が出た場合、フロッピーないしは外部のディスクから緊急としてOSを立ち上げてエラー対処するなりデータ救出するなり、が不可能となるから、だ。
だから外部機器から順次読み込むような設定になってるのだが、X68000はそういうセオリーに則って無く、原則OSを積んだHDDから何が何でも最初に読み込もうとする。これはハッキリ言っておかしな設計だ。
X68000の場合、読み込み先を任意に切り替えるキーがキーボードに装備されていて、それをOPT.1キーと言う。マシン起動時にこれを押しておくと読み込み先を任意に変えられる、と言う親切なんだか何なんだか良く分からん設計になっている。
なお、このキーは当然、現在の標準キーボードには見られない、X68000独特のキーだ(他にもフツーのパソコンで見られないキーがチラホラある)。
※7: この辺が当時Cコンパイラが一部に嫌われていた理由でもあり、Pascalが有利だった面だ。Pascalはファイルを一回走査しただけで実行形式が作れるが、C言語はファイルを何度も走査しなければ実行形式が作れない。これがボディブローのように効いてくるんだ。
また、C言語のコンパイルに時間がかかるような環境では、(Pascalを除く)他のプログラミング言語では、非効率なプログラムしか書けなかった、と言うのが良く分かるだろう。
今は富豪の時代なんだ。