SHARP68000でプログラミング言語Cを存分に楽しむ
プロフィール 「パソコンでプログラミング」の補足
大学の卒業研究で、大型電子計算機の一利用者としてプログラミング三昧の生活。有限要素法による構造解析の精度を上げるため、有効な手法を組み込もうとFORTRANのプログラム改造に夢中になっていました。
大きな行列式を用いるため、プログラム実行時に割り当てられるメモリの容量が制約になっていました。メモリは使えるだけ・いくらでも欲しい…とは、当時から痛切な思いでした。
社会人となり数年のうちに職場のOA化が進み、程なくパソコンが普及し始めました。
8ビット・パソコンを研究室で使ったこともありましたが、使えるメモリはわずかです。16ビット・パソコンならより多くのメモリを搭載して駆使できます。
国内でもNECのPC、FUJITSUのFM、SHARPのMZ、共通規格のMSXなど、通信・家電各社が8ビット・16ビットで様々なCPUを搭載したパソコンを世に送り出していました。
パソコン雑誌も機種ごとに様々。
その中で見つけたのがSHARPの68000。12MBまで拡張できるメモリは群を抜いて、プログラミングを楽しむのに好適でした。
CPUの仕組み、ハードウェアの詳しい解説、それを制御するプログラムの作り方。BASICとC言語にも触れていますが、究極はアセンブラとか。68000らしい楽しみ方です。
68000のOS「Human68K」のファンクション・コール、ハードウェアを制御するIOCSコールの技術資料。アセンブラでプログラミングする際の座右の書。
68000向けの月刊誌Oh!X(ソフトバンク)に連載されたマシン語講座の単行本化と、その続編。実際に自分でプログラムを作ってみて会得するのが常道なのですが、この本はマシン語の読み物として楽しみました。C言語を覚えてパソコンのプログラムを全部マシン語で開発することはありませんでしたが、ハードウェアを直接制御する奥の手でした。
プログラマのココロをくすぐるモトローラのマイクロプロセッサMC68000の技術資料。この“夢がいっぱい詰まっている石”でプログラムを楽しめたのは幸せでした。
浮動小数点演算コ・プロセッサMC68881の技術資料。実数の計算が重い処理だった頃の強力な助っ人。68000では拡張ボードのプロセッサでした。
68000の後継機種68030を手に入れて、プログラムの実行速度に目を見張った頃、飽くことなき性能向上を体現したのが『040turbo』。MC68040を68030に搭載するドータ・ボードです。自作のハードで一般に市販されていません。そのメイキング・ストーリーを読みたくなったのは後に、満開製作所の『060turbo』を手に入れてから。製造元のSHARPは68000シリーズを打ち切り、お家芸の液晶でDOS/VノートパソコンをWindowsの世に送りました。
68000シリーズのWINDOWシステム(の一つ)。最初のバージョンは、画面の書き込みが観察できるほど低速度でした。プログラムはイベント・ドリブン型のマルチタスク、ファンクション・コールはAライン・エミュレータ(当時の68系Macとそっくり同じだったそう)。リソースは全てOSの管理の下にあるべく、直接石を叩くようなお行儀の悪い(?)プログラムはご法度です。
68000シリーズのパソコンは大学のマイコンクラブでも人気だったようです。同好の志が集まって日々プログラムの腕を競い、互いに技術を高め合う様を(好き勝手に)想像しました。仲間と共に趣味のパソコン三昧、ちょっと羨ましいかも。
パソコンでプログラミングといえばBASICが一般的でしたが、ソース・コードが何百行にも及ぶ長大なプログラムになると、読み解きにくくなります。
アセンブラ(マシン語)は、なおさらです。
そんな折、出逢ったのが『プログラミング言語C』でした。巷間で囁かれる“プログラマー35歳定年説(?)”の年齢に届く頃でした。
大規模なシステム・プログラムでも、小さな処理単位にプログラムを分けて関数化し、変数も局所化することで、プログラムが効率的に開発できます。“構造化プログラミング”なるもの、プログラミングのパラダイム・シフトを眼の当たりにしました。大学でフローチャートからFORTRANプログラムを学んだ者にとって、隔世の感です。
これがこの世界の最先端なんや…
BASICやFORTRANのように習ってすぐ使えるという訳ではありませんが、C言語の仕様は簡潔で強力でした。
特に興味深かったのが、C言語の鬼門ともいわれる“ポインタ”。メモリのアドレスを格納する変数です。CPUとメモリの間でデータをやり取りするコンピュータの仕組みをイメージしない(できない)と、その使い方は??? です。
そこを克服してポインタが自在に使いこなせるようになれば、まさに鬼に金棒、パソコンのプログラミングは俄然面白くなります。なにせ(使い方を誤ると)、パソコンを容易に暴走・クラッシュできるのですから…
C言語の開発者の著書『K&R』
初学者には、読みやすくありません(?)。読書百遍意自ら通ず、でしょうか。
私は4回通読して得心しました。
『K&R』に掲載された例題の解答集
かなり後になって手に入れました。気にかかっていたところが解消されました。
初級向けの「落とし穴」、中級向けの「FAQ」、上級向けの「エキスパート」といったふうの参考図書の並び。
読み物として面白かった。
SHARP68000には有志の手によりGNU C コンパイラが移植されていました。当時の68系CPUのコンピュータではおそらく最高性能のコンパイラでしょう。そのソース・プログラムのコメントの訳出。天才プログラマの発想は、私の理解をはるかに超えています。最適化も然ることながら構文解析に長けていて、-WallオプションをつけてWarning(警告メッセージ) が一切出ないプログラムが記述できれば(巷間では、プログラマとして)“その筋”だそうです。(謎)
定冠詞『THE』がつくCライブラリ、その解説とソース・コード。C言語の標準化に貢献したP.J.PLAUGERの著作、真打登場です。多大なソース・コードをこつこつ打ち込んで、入出力関数のテキスト・モードでの復帰/改行文字コードの処理を足して、スタートアップ・ルーチンを加えて自家製ライブラリに仕立てました。同書のテストプログラムとPlum-Hallサンプラー(Validation Suites)を通しました。
浮動小数点表現は一般的なIEEE754規格、数学関数(三角関数とか)は多項式の近似式が用いられています。実装の見本です。なお、原書と訳書のソース・コードの一部に違いがありました。
プログラムに関連したエッセイも興味深く、また面白い。『THE STANDARD C LIBRARY』の補足もあります。
全くの門外漢ですが、C言語のソースもあって初等整数論をながめるには好著とみました。語り口調なのも面白い。
プログラムの参考に。
Cライブラリの数学関数が近似式で実装されているところに興味を覚えて。
著者の考案した浮動小数点表現URRがごく簡単に紹介されています。同じビット数でIEEE754より仮数部の有効桁が多くとれ、精度を求める計算に有利な点などが特長とか。詳しい解説はインターネットでみられます。Cライブラリに実装できたら(?)と、ちょっと想像してみたり。
プログラムの素材を書店で探していて見つけたもの。特別な関心があったとか、この知識を応用して実用的な何かをつくるという目標があった訳ではありません。こういったものに触発されて、なおアイデアが浮かばないのはプログラマとして既に定年なのでしょうね?
パソコンが(WindowsのようなGUIが一般的になる前の)MS-DOS、(68000の)Human68Kといったシングル・ユーザ、シングル・タスクのOS上でプログラミングしていた頃のお話です。遠い過去の記憶で、思い違いしているかもしれません。