その当時、コンピュータ系の技術誌
(多分、「インターフェース」だったと思います)に
再配置可能(リロケータブル)の「逆アセンブラー」
と言う記事が発表されました。
これは、メモリー内やファイルのデータを読み込んで
機械語から、もう少し人間が分かり易いアセンブラーの記述に
変換してくれる上、空きメモリーなら何処にでも配置出来るという
絶対アドレスが当たり前の当時では信じられないくらい高性能なアプリでした。
これも、Z80の拡張命令を活かして作られたものでした。
会社のシステムは、全てBASICで組まれていたので、
私がアセンブラーの知識を得なければならない理由は
無かったのですが、知っていれば近い将来、コンピュータで
工作機械を制御しなければならなくなった時、役に立つだろう、
ぐらいの軽い気持ちで、その記事のリストを「ソード電算機」の
パソコンに組み込まれていたアセンブラーで打ち込み始めました。
何故アセンブラーが標準で組み込まれてたのか、
今振り返って考えてみると、スーパーBASICも
そのアセンブラーで作成されていた為、
メンテナンスの意味も有って標準システムに組み込まれていたのでしょう。
ところが困ったことに記事はZ80用の洗練された
シンプルなアセンブラーで記述されていたのですが
ソード電算機のアセンブラーはインテルの
変な(私の個人的な偏見です)アセンブラーを
更に変更したやっかいな代物でした。
雑誌のリストのZ80用のアセンブラーを
ソード電算機のアセンブラーにすべて自分で翻訳しながら
打ち込まなければならなかったので大変でした。
仕事の合間を見ながら、1ヶ月近く掛かったような記憶があります。
こういう場合、雑誌のリストにも間違いが有り、
私の打ち込んだリストにも間違いが有って
動かないことが多いのですが
(私とマイコンの最初の出会いもそうでした)
奇跡的に最初から狙い通り動いたのです。
それを使って、スーパーBASICのあちこちを
逆アセンブラーを使って解釈したりしたので、
私のアセンブラーに対する知識が深まりました。
当時、8080用のアセンブラーを解説した本は何冊か出ていたのですが
Z80用のは、雑誌の特別号でZ80が取り上げられていた1冊だけだったので
実物の正確に動いてるスーパーBASICを逆アセンブルして
アセンブラーの教科書代わりにしてました。
私の人生で頻繁に起こる不思議なことなのですが、
アセンブラーにも自信を持ち、準備が出来たと思った頃、
上司は私が何をやってるのか分からなかったと思うのですが、
「お前、客先と協力して、コンピューターで
シリンダー(工作機械の一種)を
制御して見ないか?」と言う話を持ってきたのです。
準備が出来た時に、それを活かせる現実がやって来るという
私の「成功パターン」の一つです。
勿論、私は準備が出来てるので即答で「はい、やります!」と
返答しました。
そして、客先の私と同年代の若い技術者と力を合わせて
Z80を組み込んだシステムで、例のCP/M上のZ80アセンブラーで
ソフトウェア開発を始めました。
この時は、正規のZ80用のアセンブラーが使えたので
楽しくて仕方がありませんでした。
今日は、ここまでにします。
ここまで読んで頂いて、本当にありがとうございました。
- 前ページ
- 次ページ
その当時、パソコンのOSはその機種のハードウェアーに特化したものが
アセンブラーで組まれていました。
機種が変わる毎に毎回書き換える量が多く、大変な作業でした。
インテルの8080が大ヒットした頃、アメリカのゲイリー・キルドールと言う人が
OSの汎用の部分とプロッピーやディスプレイなどの
外部機器を制御する部分をハッキリと分けた、汎用のOSを作ったのです。
そうすれば自作のコンピューターでも外部機器を扱う部分を自分で作れば
立派なOSを組み込む事が出来るし、多くの出回っているアプリも
そのまま自作のパソコンでも使えると言うことになるという優れたOSでした。
「CP/M」と名付けられ、世界で初めてパソコン用の汎用OSとなりました。
この考え方は、WindowsやiOSなどの現在使われているすべてのOSに
継承されていると言っても過言では無いと思います。
それほど、画期的で革新的なOSでした。
その為、海外では爆発的に普及しました。
只、日本では漢字と言う問題が有ったので
世界で普及したほどには普及しませんでしたが、
私自身はよく使いました。
このCP/Mは、8080用のOSなのですが、Z80でも問題無く動作しました。
と言うのも、どちらも嶋さんの設計で、Z80は8080を知り尽くしてる嶋さんが、
8080の特許を避けて全て別の方法で設計したものだったからです。
そして、8080の命令は全てそのまま使えました。
その上、Z80には多数の拡張命令が組み込まれていました。
一般にZ80は8080の上位互換CPUと受け止められていて、
品質や性能にこだわる日本人には8080より好まれました。
その為、日本で使われるCPUは圧倒的にZ80が多かったのです。
インテル嫌いだった私は勿論Z80を愛用しました。
今日は、ここまでにしておきます。
ここまで読んで頂いて、本当にありがとうございました。
前回からアセンブラーの話に入ってしまって
続きをどうするか迷ったのですが
私がのめり込んでしまった内容なので、
サラッとだけでも書いておこうかと思います。
CPUに興味の無い人は読み飛ばして下さい。
更に詳しく知りたい人は、
検索すれば一杯詳しく解説したサイトが有るので
そちらの方を読んで下さい。
ここでは何となく雰囲気を味わって頂ければ
良いかと思います。
アセンブラーのソースを例えば下記のように書いたとします。
LD A,0
LD HL,LABEL0
LD DE,LABEL0+1
LD BC,5
LD (HL),A
LDIR
LABEL0:
何をしているのかというと
A という8ビットのレジスタに0をセットして
HLという16ビットのアドレスレジスタにこのコードが置かれる
次のアドレスをセットします。
そして、DEという16ビットのレジスタに、
更に1バイト後のアドレスをセットします。
そして、BCという16ビットのレジスタに、
5という値をセットします。
その上で、A という8ビットレジスタの値を
HLレジスタの指すメモリーに書き込みます。
その後、BCレジスタの値を-1として、
HL、DEレジスタをそれぞれ+1して、
次のアドレスを指すようにして
BCレジスタの値が0になるまで繰り返します。
そうなんです、CPUの中では本当に単純なことしかしてないのです。
その単純なことを本当に信じられないくらい積み上げて
いかにも複雑な判断をしているようにプログラムの力で
見せているだけなのです。
この当時は、8ビットのCPUがマイコンの主力だったので
メモリーの最大が64キロバイトに限られていた為、
OSもアセンブラーで書かれるのが普通でした。
アセンブラーでプログラミングする為には、
全体で何をやっているのかを見失わないように
コーディングする必要が有り、長時間集中力を保つ必要が有りました。
こんな作業は辛くて、苦しくて嫌だと感じるか、
面白いと感じるかは人それぞれですが、
私は、面白いと感じのめり込んでしまったのです。
私には、長時間強烈な集中力を保つ能力が有った、
と書けばかっこ良く聞こえるのですが、
実際の所、楽しくて楽しくて、夢中になってやっていたら
あっという間に長い時間が経っていた、と言うのが本当でした。^^;
その当時、私の上司も含め、周りの人達は何故か、
コンピューターを扱うと言うことを苦痛だと感じる人が
圧倒的に多かったのです。
それ故、私が真面目さ故、苦痛に耐えながら頑張っている、
いわゆる努力している、と私に取っては評価が高くなる方へ
「誤解」してくれていたのです。
上司にも「あんだけコンピュータにかじりついて画面を見ていて、
お前は、真面目やからなー。」とよく言われてましたが、当時は
その意味がよく分かってませんでした。
真面目だったのは間違い有りませんが、
苦痛に耐えて頑張って居た訳では無かったからです。
今日は、ここまでにします。
ここまで読んで頂いて、本当にありがとうございました。