全国5万人が受講している「サイタ」

Access(アクセス)使い方講座・スクール

Access(アクセス)使い方講座・スクールを選ぶ

初回60分無料体験OK

まずは60分の体験レッスンからスタート。
無料で実際のレッスンを体感できます。

月々4,900円〜の低料金

先生ひとりじめの個人レッスンを、この価格でご提供。レッスンは全てプライベート形式の60分間です。

通わない月は0円

曜日と時間を選べるので、
無理なくマイペースに通えます。

詳しくはこちら

パソコン教室・IT資格マイクロソフトOffice(オフィス)使い方講座Access東京 AccessPro大親切スクール スクールブログ ポケコンの話(...

ポケコンの話(BASIC言語とマシン語)

自分の手元に常に電卓を置いているという人は多いと思います。数字を扱う仕事に携わっている人の中には、使い慣れた自分専用の電卓でないと不自由するという人もいるでしょう。
電卓とは少し違うのですが、私はポケットコンピューター(ポケコン)を電卓がわりに使っています。VBAなどで組んだシステムの計算結果に不整合があると思われるようなときに、計算途上のデータを拾いながら手計算しなければならないことがあります。そのようなとき、計算する値や式をそのまま表示に残しておけるポケコンが便利なのです。

ポケコンといってもご存じないという方が多いと思いますので、写真をアップしておきます。(古い物なのできれいな写真ではありません。ご容赦ください。)今ではめずらしいものかもしれませんね。といっても、完全に過去の代物というわけではなく、2013年現在、かつてのポケコンメーカーの雄SHARPから1機種が発売されているようです。PC-G850VSというものなのですが、見たところ、写真にアップしたPC-1260などが全盛だった1980年代前半よりも遅い時期に出たPC-E500系という関数電卓の流れを汲むスタイルのもので、見た目の趣が少し違うのが残念ですが、ミニフルキーボード+テンキー+カーソルキーというポケコンスタイルはそのままです。一見、電子辞書のようにも見えますが、キートップの小ささとテンキー付きのところが違いますね。

ポケコンは電卓のように早打ちすることはできませんが、写真のように「10-√2*(3+1.5^2)」などと計算式通りに入力して計算させることができます。電卓の場合は、計算順序を工夫したり、括弧内の計算に入る直前にそれまでの結果をメモリに一時記憶させたりする必要があって、計算そのものに気を遣わなければなりませんが、この点、ポケコンは式をそのまま入力すればよく、また、たとえ間違った値を入れても、答えを出したあとからでも入力式に戻れるため、計算に神経を使う必要がありません。

以下は、私のコンピュータープログラミングとの出合いについてのお話しです。

ポケコンにはBASICインタプリタが搭載されていて、BASIC言語で記述したプログラムを実行することができました。パソコンのOSが各社まちまちの仕様であるBASICから、CP-MやMS-DOSに移行しかけていた1980年代当初、アプリケーションソフトは豊富ではなく、また高価でした。当時の代表的なワープロソフト「松」は12万8千円だったと記憶しています。
そこで私も当時の多くのパソコンユーザーがそうであったように、自分に必要なソフトをBASICでプログラミングして調達するようになっていました。全文検索できるメモデータベースや英単語の練習帳(これはSHARP発行のポケコンソフトウェア集に掲載されました!)、一太郎の表割罫線の算出プログラムなど、どれも小規模なものでしたが、思いつくままにプログラムをしてはそれなりに便利に使っていました。

そのような時、ある依頼があって少し規模の大きい会計プログラムを作ることになりました。そのため当時最もメモリ容量の大きかったPC-1350という機種を購入して(といってもプログラムとデータ領域を合わせて16KBytes!)、数値と項目の入力だけ行えば4、5種類の帳票がプロッタプリンタで自動で作成される仕様のものを作りあげました。
この結果、それまでは帳簿の転記作業をすべて手作業で行っていた会計処理は格段に簡素化されて、提供先からはたいへん喜ばれたのでしたが、ただ一つ問題のあることが発覚しました。
そのプログラムでは金銭の入力画面を現在のExcelのようにマルチセル形式にして、一つ入力されるごとに自動で再計算される仕様としていたのですが、当時の非力なCPUとインタプリタ言語であるBASICの組み合せでは再計算に3秒ほども時間がかかったのです。一つの値を入れるごとに作業が数秒間止まることを余儀なくされ、その部分だけはどうしても使いにくいのでした。
問題の箇所は、FOR-NEXTという制御文によって十数回の計算のループを行うわずか1行の部分です。私はそのFOR-NEXTに囲まれた1行をマシン語に書き直せないか検討してみました。

マシン語というのはパソコンの演算装置であるCPU(ALU)が理解できる唯一の命令語のことですが、「PRINT」命令など人間のことばに近いBASIC言語などの「高級言語」は専用の翻訳エンジン(BASICインタプリタやコンパイラなど)によって中間言語、マシン語に変換されてCPUに送られるため実行速度が落ちるのです。そのため当時からゲームのプログラム、特にユーザー側の反応を即座に反映させる必要があるアクション系のゲームではマシン語でプログラミングされるものが多くありました。
ポケコン用のカーシミュレーションゲーム「走れ!セコイライン」というのがあって、これはポケットコンピューターのわずか縦幅8ドットの文字表示専用の液晶に道路を3Dイメージで表示して、そこを4ドットで構成された凸型の車を操作して(ことばで説明してもわからないですね、すみません)刻々と変形する/ \ の形の3D道路を高速で走り続けるというもので、とにかくマシン語でなければできない業だと関心したものでした。
そのようなこともあって、以前からいくらか親しんでいたマシン語に取り組むよい機会でもありましたので、当時出版されていたポケコンのマシン語関連の本を買い求めて、それから2週間、1行のBASIC言語を500語ほどのマシン語(ニーモニックと言います)に書き換える作業に取り組みました。

マシン語に取り組んだ者だけがわかるといってもよいことだと思いますが、BASIC言語をマシン語に書き換えるというのは、BASICとマシン語を媒介する複雑な変換作業があってその方法を理解するというようなこととはまったく違うことです。
具体的には次のようなことです。BASICでループ計算をするとき、そこで扱うのは「Zappi」などと命名されたいくつかの「変数」で、それらを正しくループ計算の構文の中に入れてやれば答えが得られます。
これに対してマシン語では変数「Zappi」が実際に格納されているメモリの番地を調べるところから始めなければなりません。番地がわかれば、それを今度はCPU内に複数あるレジスタという計算専用のメモリにセットして、ようやくレジスタ同士で演算を行うという運びとなります。
それだけではなく、マシン語プログラムの作成途中での計算結果などを確認するための、メモリ内容を表示させるプログラム(モニタ)といったものまで、自分で作らなくてはなりません。プログラムを作成する環境そのものから作っていく必要があるのです。
つまり何にせよBASICからマシン語に通じる道というものは存在しておらず、BASICで行ってきたことをマシン語にするということは、ハードウェアと直結しているマシン語の仕様にしたがって、まったく新たにそれを構築するということにほかなりません。これは片手間ではできない作業で、私もその2週間はほぼポケコンのハードウェアとマシン語の世界に没頭していたといえます。記憶では、最後にどうしてもうまく動作させられなかった部分の間違いを、なぜか眠っている間に気がついて、すぐに起き出してプログラムを完成させたのでした。
しかし、この体験のおかげて私はコンピューターというものがどういう仕組みで動いているのかをある程度理解することができました。BASICなどの高級言語では、どんなに複雑なプログラムであってもメモリやCPUなどのハードウェアを意識することはありませんが、マシン語ではハードウェアの構成を調べつくさなければプログラムが書けないからです。

さて、格闘のかいがあってくだんのFOR-NEXT文の箇所はCall命令一語に置き換えられ、BASICプログラムの中でそこだけマシン語が実行される仕様となりました。結果、3秒かかっていた計算は0.5秒ほどに短縮されて実用に耐えるものになりました。私としては、せっかくのマシン語なのでもっと瞬時に計算が終わってくれてもよいように思ったのでしたが、そこはなんと言っても非力なポケコンですから多くを望むわけにはいきません。
しかしたまに「DUMP」というプログラムリストを出力するマシン語命令を実行したときなどに、ポケコン用の小さなプリンタが狂ったような速さでリストを吐き出すのを見ると「これが本来のポケコンの実力なんだがなぁ」と、「走れ!セコイライン」を見たときと同じようにその威力を実感していました。BASICにも「LIST」命令というのがあるのですが、こちらの場合、プリンタは時々考え込んでいるかのように動きを止めて、実にのんびりとプログラムを印刷します。

ポケコンの話(BASIC言語とマシン語)

(2013年5月10日(金) 4:43)

前の記事

この記事を書いたコーチ

重要な操作を効率よくレクチャー。データベースの基礎~VBAまで

AccessPro大親切スクール
星加弘文 (Access)

渋谷・新宿・分倍河原・吉祥寺・笹塚・明大前・下高井戸・千歳烏山・調布・府中・下北沢・...

ブログ記事 ページ先頭へ