2023年04月10日の日記です


素人プログラマから見たX68k  2023-04-10 10:48:18  コンピュータ

先の話の続き


当時の状況を記そう。

当時、ホビープログラマが最初に使う言語は BASIC だった。


8bit 機では、OS は存在して無くて、起動すると ROM に入っている BASIC が動き始める、というのが普通だった。

シャープ製マシンは ROM に入ってなかったけど、本体を買うと BASIC が付属している点は変わらない。


16bit でも BASIC が付属しているのは当たり前だった。

PC98 は、PC88 の BASIC 互換マシンとして作られた。当然 ROM BASIC もあるし、DISK BASIC 、DOS BASIC もある。


X68k にも、X-BASIC が付属した。


今となっては、当時の BASIC の環境は忘れられかけている。


文法は、今でも残っているね。BASIC という言語自体は残っている。

でも、「環境」としては、今と全然違う。


BASIC は OS と、エディタと、デバッガと、実行環境が混然一体となったものだった。


ソースコードをエディットしている最中に、命令の動作詳細を知りたくなったとする。


その時は、その場で命令を実行してみることができる。

実行して、動作を確認して、納得したらソースコードに組み込む。


プログラムが出来たら全体を実行してみるが、途中でエラーで止まってしまったとしよう。


原因調査のため、止まったあたりのソースコードを表示する。

どうも、そこで使われている変数の内容がおかしい気がする。


その場で、変数の内容を表示する命令を打ち込むと、命令が実行され、変数の内容が表示される。


こうやってデバッグを進めることができる。




この環境、プログラムに不慣れな初心者にとって、めちゃくちゃ使いやすかった。


ただ、非常に大きな欠点があって、プログラムの実行速度が遅かった。


いつでもコマンドを実行できる、というのは、コマンドを解釈して実行する機構があるためだ。

そして、プログラムはこれを連続して動かしている。文法解釈をいちいち行いながら動くので、遅いのだ。


一応、BASIC コンパイラというものもあった。

先に書いたように、BASIC はエディタとデバッガと実行環境を総合したような環境で、この環境自体が大きい。


完成したプログラムを BASIC コンパイラに通すと、OS から起動できる実行形式のプログラムを生成してくれる。

この際、速度も改善する。


でも、そもそも BASIC って、初心者にはわかりやすい反面、コンパイラで速度を上げたりしにくい構造だったのね。

PC98 の DOS BASIC の場合、コンパイラを通しても速度は3倍程度にしかならなかった。




X68k の X-BASIC は、当時の他のコンピューターの BASIC とは、文法面から少し異なっていた。


とはいえ、BASIC ではある。先に書いたような、エディタとデバッガと実行環境が統合されたような、初心者でも使いやすい環境は実現されていた。


この、「少し異なる文法」がミソだ。

当時は、パソコンユーザーにはまだ C言語はあまり普及していない。

しかし、X-BASIC の文法は、C言語に非常に近いものだったのだ。


そして、SHARP 純正の C 言語が発売される。

このセットには、X-BASIC のプログラムを C に変換するプログラムが含まれていた。

もちろん、Cコンパイルすれば、機械語の実行ファイルになる。


これは素晴らしい「BASIC コンパイラ」だった。


先に、BASIC は文法を解釈しながら実行する、と書いた。

それに対し、C 言語は、文法解釈を先に行い、結果として「CPU が直接理解できる」機械語プログラムのファイルを生成する。(この作業をコンパイルと呼ぶ)


結果として、プログラムの実行時には、余計な動作が一切入らない。

このため、非常に高速に動くのだ。


PC98 の BASIC コンパイラのような3倍程度ではなかった。

ちゃんと速度を測ったことは無いけど、超高速。機械語として動作するからね。


初心者が気軽にプログラムを作り始め、最終的に十分な速度で動作するプログラムを作れたんだ。

これは、他のパソコンにはない環境だった。




さて、実行速度が速ければプログラムが組めるようになるか、というと、そんなことは無い。


ゲームを作りたいと思ったら、キャラクターを表示しないといけない。


PC98 の BASIC でも、画面に描いたキャラクターを動かすくらいのことはできた。

でも、全てをグラフィックとして扱う必要があった。

キャラクターを描いて、消して、少しずれたところにまた描いて、の繰り返しだ。これで動いて見える。


ただ、「消して」のところで、背景も消える。

「描いて」のところでも、キャラクターを含む矩形全体を描くので、キャラクターの周囲が四角く消えてしまう。


背景があるような華やかなゲームを作るのは、BASIC では事実上無理だった。


じゃぁ、一念発起して機械語を勉強してみようか…とすると、急に高い壁が立ちはだかる。

詳細を書くと長くなるので、過去に書いた記事を紹介しておこう。

当時のパソコンは、一般的に横8ドットをまとめて扱う


BASIC でキャラクターを扱うときは、このことを気にしないでいいようになっている。

でも、機械語だと知らないとダメだ。

適当にグラフィックを扱うと、周囲のドットを破壊してしまうので、それを解消するプログラムが必要だった。


とにかく、ゲームを作りたくてキャラクタを動かそうとすると、それだけでも大変だった。


これ、ゲームに限った話ではない。

ちょっとグラフィックを扱うツールを作ろうと思ったら、マウスカーソルとか、選択範囲とかでグラフィック表示が必要だ。


しかし、処理対象のグラフィックを壊すわけにはいかない。

一旦グラフィックをメモリに退避したり、いろいろ複雑なプログラムを作る必要がある。


もっというと、これは PC98 に限った事情だが、画面を構成する情報を「設定」出来ても「読出し」できないものがあった。

画面を構成する、4096色中 16色のパレットは、設定専用で読み出せないのだ。


ということは、「現在表示している画面を加工して、セーブ」という操作はできない。

グラフィックを加工するフィルタを作りたければ、それだけで、ファイルの読み込み、グラフィック圧縮フォーマットの展開、画像加工、グラフィックの圧縮、ファイルの書き出し、までをセットで作る必要がある。


初心者が何かしようと思っても、余りにも壁が高い。

それが当時の、普通のパソコン環境だった。




X68k には、こうした制約がなかった。


キャラクターを動かしたいなら、スプライトを使えば良い。

動かす際に、以前描いたものを消す、というような操作は必要ないし、背景を壊す心配もない。

周囲だって、適切に「透明」として背景を見せてくれる。


グラフィックを扱いたいなら、1ドットは1ワード(16bit) に対応していた。

1ドットを構成するメモリが、他のドットと共有されることは無い。


さらに、グラフィックを複数重ね合わせることもできたので、グラフィックの範囲指定などで枠を表示しても、グラフィックを壊さない。


こちらも詳細は過去の記事に譲ろう

とにかく画面関係が豊富で、扱う際に何かに気をつけないといけない、というような制約が少なかった。

(全くないとは言わない)


先に書いたように、グラフィックを加工するプログラムを作りたい、とする。


画像の読み込みと書き出しは、すでに存在しているプログラムに任せることができた。

操作パレットや範囲指定の枠表示などは、表示中のグラフィックに影響を与えないように描けた。


グラフィックの操作は、1ドット単位でメモリの読み書きを行えばよいだけ。


あとは、処理の中心となる「加工」部分をどう作るか。

このアイディアだけに集中すればよい。


初心者でも、自分が作りたいプログラムを作りやすい環境だったんだ。




もう一つ、OPM ドライバの話を書いておこう。これは大発明だったと思う。


また BASIC の話に戻ってしまうのだが、日本のパソコンのBASICは、音楽演奏機能が充実していた。


これ不思議で、海外のパソコンには見られないんだよね。過去に調べたことがある

ともかく、日本ではパソコンの楽しみの一つに音楽演奏があり、パソコン用の、文字の組み合わせで楽譜を表現する「MML」と呼ばれる記法が出来上がっていた。


当時の MML を使った演奏は、BASIC の中に組み込まれていたのだけど、演奏中は他の動作が止まるのが普通だった。

非力な CPU では、そうしないと演奏のテンポとかを保証できなかったからだろう。


ところが、X68k の MML 機能はそうではなかったんだ。

演奏を開始すると、演奏を続けたままプログラムの動作を続行してしまう。

これにより、ゲームに BGM が付けられた。


最初は BASIC の中だけの機能だったのだけど、すぐに音楽機能は「OPM ドライバ」という名前で切り離され、OS 標準機能の一部になった。


これにより、「全ての」プログラムが、気軽に BGM をつけられるようになったんだ。


これもまた、素人がゲームを作る上では強力な、超強力な機能だった。




他の PC でゲームを作ろうと思ったら、速度を確保することが難しく、キャラクターを表示することが難しく、BGM をつけることも難しい。


この問題が、最初から解決していたのが X68k という環境だ。


だから、素人でも作品を作れたし発表できた。


ゲームに限らず、自分が興味を持つ分野だけを、集中して取り組めた。

それ以外の部分は、すでにあるものを使えばいい。


大根おろしPRO68k」とか、当時有名な PDS だった。

今でもインパクトで覚えている人が多いようだ。


内容見ると、超くだらない。白い四角をマウスで動かして、画面中央の「おろし金」にこすりつけると、四角が小さくなって白い点々が増える。ただそれだけ。

でも、おろし金のギザギザと、白い点々と、四角い「大根」はちゃんと重ね合わせ処理が行われているのね。

X68k だから別画面に描いているだけだと思う。でも、PC98 でこれを作ろうと思ったら大変な処理になる。


こうした「思いつきの冗談」みたいなものでも、すぐにプログラムが組めてしまう。




そして、もう一つ。重要なピースがある。

X68k は、市販ソフトがほとんどなかった、ということだ。


パソコンを使って何かをしようと思ったら、普通はそれができるソフトを探すだろう。

でも、X68k には市販ソフトがなかった。探すことすらできなかった。


じゃぁ、自分で作るしかない。

仕方がないからやるだけだし、自分用だから多少出来が悪くても構わない。


先ほど書いたように、BASIC でもそれなりのものが作れてしまうのが、X68k だった。

とにかくプログラムを作ってみて、目的を達成する。


そして、自分が困っているのだから、こんなプログラムでも使う人がいるかもしれない、と、当時流行し始めたパソコン通信にアップロードする。

もしくは、雑誌 Oh! X に投稿する。ディスクマガジン電脳倶楽部に投稿する。


X68k にはとにかくソフトがなかった。多少出来が悪くても、動くだけでありがたい。

電脳倶楽部の編集長も、「動いているプログラムは良いプログラム」と言っていた。

多少出来が悪くたって、ないよりはある方がずっといいのだ。


そうか。出来が悪くても、ある方が良いのか。

これが、X68k の当時のユーザーの認識だったと思う。


だから、自分が何か作ったら、出来が悪くても、恥ずかしげもなく公表する。

そういうソフトを見た人は、そのレベルでいいんだ、と、また出来の悪いソフトでも公表する。


この、とにかく公表するし、みんながそれをありがたがる、という構図は、現代でもなかなか見られない。


これが、良いスパイラルを産む。


公表して、みんなにありがたがられた人は、また何か作ったら公表しようと思う。

次の作品へのモチベーションになる。


そうして作品を作り続ける。作り続けるうちに、技術も上がり、もっと良いものを作れるようになる。


X68k のソフトウェア環境は、こうしてユーザーたち自身の手で作られていった。


これが、「無いものは作る」と呼ばれる文化の正体だ。


決して、技術力の高い人間が、なんでも作ってきた、というような文化ではない。

仕方がないから出来の悪いものでも作り、公開し、泥臭く環境を整えていった文化だ。


結果として、すごい人を育てる良い環境になった。

でも、最初からすごかったわけではない。




最後に、今の初心者が X68kZ を使ったら、同じように上達できるか? ということについて。


当時「使いやすかった」と言われる環境だから、今から自分も何か作ってみたい、という人は少なからずいるようだ。


しかし、ここまで読んでくれた人には、答が分かると思う。


「プログラムを作りやすい」というのは、あくまでも当時の他のパソコンに比較しての話。

今なら、何も古いマシンのエミュレータを使う必要はない。

Unity とかを始めて見るのがいいだろう。初心者の内は Scratch でもいい。


どちらも、他の人に作品を公表しやすい環境だ。

X68k がそうであったように、出来が悪くても恥ずかしげもなく公表し、評価をもらえることが大切だと思う。


プログラムに限らない。絵でも音楽でも、今は昔に比べてずっと公表しやすい。


ただ、なんでも有難がられた X68k と違い、今はソフトも情報もあふれている。

出来が悪いと容赦なく叩かれるし、ちょっと初心者に厳しい環境かもしれない、とは思う。




同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

素人プログラマから見たX68k【日記 23/04/10】

続 X68000Z【日記 23/04/10】

別年同日の日記

06年 バス

20年 続・テレワーク


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -