アセンブラで付き合ったプロセッサたち
Z80, 8086, V30, 80286, 80386..Pentium ファミリー, H8/300, H32(TRON チップ), SPARC
主に 80 系統です。お陰で頭の中はリトルエンディアンです。ビックエンディ
アンな並びを見ると少し思考が乱れてしまいます。それぞれの CPU の感想
はまた別の機会にでも触れます。ほんの半年ほどバラックで組み立てたマシン
で付き合っただけのマシンで触っただけと言うのも有ります。
Z80
言わずと知れた Zilog の 8 bit プロセッサです。こいつは PC-8001 で
機械語でいじっていました。紙の上でコーディングして
手で機械命令に変換し、手で 16 進数を打ち込みました。今の様に当たり前に
コンパイラが有って、当たり前の様にデバッカがあった世の中ではなかったのです。でも、
そのおかげか機械命令レベルの感覚というのはこのとき養われたような気がします。
Z80 はその当時 6809 なんかと比較され何かとスピード競争していました(って
アーキテクチャがぜんぜん違うのに...)。確かに 6809 に比べると見劣りするところも
有ったのですが、Z80 の場合はとにかく圧倒的に楽にコンピュータ回路が作れる
所と(D-RAM インターフェースや割り込みまわりは楽だった) セカンドソース
(今じゃ考えられないけど互換チップです)が多く出回っていました。今でも
時代の要請にこたえつつ生き延びるプロセッサになっています。
機械命令レベルで見ると、8 ビットレジスタの数が多かったところと、インデックス
アドレッシング(ちょっと使いづらい面もあったが命令自己書き換えで克服していた)
が強力でした。他には条件分岐命令が豊富という特徴もありました(今じゃ条件分岐命令
なんて命令セットの片隅に追いやられるほどなのに)。
8086, V30, 80286, 80386..Pentium ファミリー
今の PC/AT やかつての PC-9801/9821 を支えてきたプロセッサの源流です。
まずカルチャショックだったのがニーモニック表記入力(要するに簡易アッセンブラ)
でプログラム出来たことです(PC-9801 の DISK-BASIC での話)。とにかく楽でした。
それに乗算、除算命令がありこれで本格的な 3D CG (といってもワイヤーフレーム
ですが)が出来るぞと喜んだものです。えっ?整数の乗算や除算ではないかって、
そうです整数です。固定小数点方式で拡大縮小、3D - 2D 投影、回転を計算する
のです。回転には sin, cos が要るのでは?これはテーブルから引いてくる方法で
実現するのです。その当時の 3D CG ゲームとしては PC-9801F についていた
フライトシミュレータ(といっても運動方程式を解くのではなく、まるで UFO の
ような運動をするシミュレータでしたが)、と VALIANT でした(i8086 - uPD7220
の絶妙なコンビネーションが光っていました)。
やれ、セグメクントどうのとか言われましたが(実際巨大なデータを相手にする
とたちまち苦しくなった)、あの当時のシステムに 80286 ほどのメモリ管理機能
(ディスクリプタ)を実現したら、ディスクリプタテーブルがメモリを圧迫しただ
ろうし、ページング機構も手軽に実装できる状態では無かったです。手軽に
16 bit の性能を提供しよという Intel の意図は正解だったと思っています。
今でこそ、ディスクリプタやページングの時間的ペナルティは語られませんが、
あの当時ハートウエア技術では、ディスクリプタやページングに 1-2 クロック
を費やす羽目になります(深いパイプラインも作れなかったのでもろに余計に
時間が掛かるようになります。アドレス変換キャッシュなんてのは適当な規模
では作れなかったですし...)。
使ってきたコンピュータ
PC-8001 ROM BASIC は V1.1:
結構この機械にはお世話になりました。今思い出すと
いろいろなことを学びました。プログラミングはほとんどが BASIC でした。
でも、やはり高速なプログラムに憧れ Z80 の機械語で直接組むようにもな
りました。そう、21 00 F3 3E EC 77 ... っていう感じですね。
あぁ、忘れちゃったなぁこの後も、続くのだけれど...
この当時の改造は、回路図とにらめっこしてタイミング計算して、クロック
x MHz までは行けるとか、メモリのウエイトを外してもなんとかなりそう
とか、いろいろと計算したり、オシロスコープでデバイスの実力を測定して
慎重にしたものです。使っていた PC-8001 も M1 サイクル に入って
いたウエイトを外して使っていました。今のクロックアップ改造の記事を見
ていると少し物足りなく感じます。もう少し、理論的なアタックをしている
人はいないのかなーと思います。
shmoo plot とか、タイミング的な考察とか、波形観測の結果を元に試して
みるとか(もっとも、100-200Mhz のバスを見ようとすると、結構値の張る
オシロが要りますね)
あと、盛んに i810 チップセット何かでは新しい機能として紹介されている
UMA アーキテクチャですが、既に PC-8001 は UMA アーキテクチャ
だったのですよね。DMA でメインメモリから CRTC のラインメモリの方に
転送しながら表示していました。DMA 転送アドレスを設定し直して、
ワークエリアを表示する様にすると、リアルタイムにメモリの書き換
えの様子が分ったりして面白かったです。そのうち出ないかな、i810 の
レジスタを書き換えて、リアルタイムに書き変わるメモリの様子をモニタに
映し出してスクリーンセーバーしてしまうソフト。そういえば MZ-80 vs PC-8001
といった比較をするとき、この DMA 転送があるために PC-8001 は遅
いとか言われてましたっけ。
PC-9801F 8086/V30 最後には 8087 も追加
このマシンもお世話になりました。そうそう、この当時の BIOS 書き換え
は EP-ROM をライターとイレーサーを使って書き換えたものです。
しかも、メーカーがバージョンアップするということは、殆どありません
でした。つまり、(やっちゃいけないと言われてはいますが)逆アセンブル
して、サイズやチェックサムが合うようにアセンブルして、バイナリ
エディタ(と言ってもテキストベースのデバッカだ)で修正して、祈るような
気持ちで ROM を焼いてと言うことをしていました。ROM ライタ(もちろん、
自分で作るんですよ...)
そういやこのころは、「相性問題」なんて言葉はありませんでした。
機器の組み合わせが圧倒的に少なかったせいもありましたが、動作不良
の原因はたいてい突き止められていたものです。大体が「タイミング
早すぎ・遅すぎ」、「割り込み許可、禁止の不徹底」、「バス競合」、
「制御シーケンスの問題」、「チップのバク」、「ソフトのバク」など
ちゃんと分ったものです。
PC-H98model90 i486DX4 ODP を乗せた
いまや、伝説として語り継がれる Hyper98 です(そのうち色々 H98 に
ついては書こうかなと思っています)。Hyper98 はいろいろな改造が
紹介されているのですが、結局改造せずに今の今まで来てしまいました。
Hyper98 使っていたころが一番脂ぎったプログラム書いていた時期でした。
ファイルを丸ごと仮想ドライブとして扱うドライバとか(Linux だと
ループバック・ファイル・システムとか言っているのかな)
PACKED-EXE 圧縮、PK-ZIP 圧縮-EXE、LZEXE 圧縮-EXE、DIET 圧縮-EXE 等を
展開するツールを作って、symdeb で逆アセンブルしてました。この
うちいくつかは既に展開ツールとしてオンラインソフトになっていたもの
もありました。でも展開後に実行できる EXE ができる可能性が低かったり
して、結局自分で作りました。
PC-9821/Xa12
この NEC 機が最後の 98 機となりました。もともとは Pentium 166MHz だった
のですが IDT C6 200MHz (Winchip と名乗りだした頃のやつ)に乗せ換えて
使っていました(あまり意味なさそうだが)。Delphi, C++Builder をいじり
出したのもこのマシンです。
内蔵の ATA ディスクが遅くて、SCSI ドライブを何台も外付けした煩い
構成でした。内蔵の ATA ディスクのインターフェースに問題が有って、
信号レベルが CMOS な為にドライブによっては書き込みデーターが化ける、
4.3 Gbyte リミットがあるなど困った問題もありました。
最後の頃は Free-BSD を入れてみたりもしました。(移植に尽力した方々
には申し訳ないのだけど)実用にならなかった印象が強いです。
AT 互換機 TX97-XE / IDT C6 200MHz
一番初めに使い出した AT 互換機が TX97-XE / IDT C6 200MHz のマシンでした。
既に退役済みです。C6 なので実数演算とか、Final Reality とか 3D デモやらせると
悲しい気分になります。IDT 系の CPU はこの頃から既に 実数演算の実力はクロック半分
でした。Windows 2000 が出たあたりで AMD K6-2+ (400MHz-500MHz で動作)
に変更し使い続けました。
TX97-XE はかなり安定していたマザーボードで問題が起きても大抵は、
追加パーツ側の問題ということで片付きました。この頃の AT 互換機が
一番パーツを入れ替えて次々と拡張していく面白みがあった様に思います。
殆ど職場のサブマシンだったので主に(良いことではないけど)事務と
Solaris マシンの遠隔操作用でした。vi も emacs も嫌いで、PC 上の
Wz Editor, Tera term, XServer で肩身の狭い思いで開発してました。
肩身は狭かったのだけど、この頃かなぁ、UNIX Workstation が全てにおいて
優れた開発環境ではなくなってきたという印象を持ち始めたのは。
Pentium 系の方がクロック周波数で上を行くようになってきたし、
IDE や CAD も徐々に Windows 版のほうが高機能になってきたし、
情報収集のためのブラウザも PC 版の方が良くなってきた。メーラーだって
(嫌われてはいたけど) HTML メールを直接扱える PC ほうが明らかに優れた
表現力を提供してくれたし。
現在のマシンは?
別のマシンを使っています。でも、とりあえず現役なので思い出話を
するのは早すぎ...