/ «2003-11-01 (Sat) ^ 2003-11-03 (Mon)» ?
   西田 亙の本:GNU 開発ツール -- hello.c から a.out が誕生するまで --

Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール


2003-11-02 (Sun)

[Hard] 日立 HD63C09

始まりは日立 MB-S1

さて、8ビット CPU に何を選択するか?「ここはやはり、当時究極の8ビット CPU と謳われた 6809 しかるまい」と、考える。ちなみに、私自身は H8 はおろか、6809 も全く触った経験がない。大丈夫?いいの、いいの。インストラクションセットさえ手に入れば何とかなるはず。CPU の基本は、同じなのだから。

で、ひとしきりネット探索の度に出る。今回の漁も、手応え十分。始まりは、往年の名機、日立 MB-S1 を紹介するページだった。私は、最初に入ったお店が NEC 系列だったため、以来 NEC-PC どっぷりの生活を送り、富士通・日立の世界を全く知ることなく過ごしてしまった。BM・FM・MZ を横目に見ながら、いつも PC-8001 に向かっていたものだが、もう少し視野を広げておけばねぇ・・と後悔することしきり。

MB-S1 に刺激されて、日立パソコンを調べていると、「資料館・日立パソコンカタログライブラリ」なるサイトを見つける。お〜〜、懐かしのベーシックマスターだよ、工藤夕貴がセーラー服姿で MSX ぶら下げているよ。しばし、感涙にむせぶ。それにしても、ベーシックマスターJr のカタログ写真は怖いっす。家族全員、座布団のようなパソコン本体抱えてニッコリなんてねぇ。確かに、こういう時代もあったよなぁ・・と、思わず遠い目。

魂が行ってしまいそうになりながら、ふと我に返る。そうそう、MB-S1 のページに書かれた次の言葉に、私は反応したのだ。

そしてS1クラブ内で究極のMPUをさらに究極のものに変えるというプロジェクトが始まりました。
HD63C09への換装です。日立は恐らくこのCPUのためにS1を作ったのではないかと思うくらいS1にぴったりとはまる石でした。
(って当たり前)ディスクBASICの起動時に、ある小さなプログラムを動かすことによって、S1はさらに速いマシンに変身できました。

6309 とはこれいかに?そんな石、聞いたこともなかった。調べてみると、この HD63C09 は日立がモトローラ 6809 のセカンドソースとして製造したものであり、当時の FM-7 向けに 63C09 カードも発表され、その筋のマニアを随分喜ばせたらしい。ええなぁ、こんな楽しいことして・・。

もう少し調べていくと、実はこの 6309 には秘密のモードが存在したことを知る。それは、エミュレーションモードとネイティブモード。エミュレーションモードが本来の 6809 動作モード、ネイティブモードが拡張 6309 モードという訳。ネイティブモードでは、ブロック転送や32ビット演算が可能になり、スピードも数割り増しになったそうである。

つまり、日立の技術者はあろうことかセカンドソースと言いながら、改造 6809 を造ってしまったのである。「おお神よ、罪深き私達をお許しください」と経営者が言ったかどうかは知らないが、この拡張機能がデータシート上に記載されることはなかった。ごく一部の初期バージョンには記述されていたが、モトローラからのクレームにより削除されたらしい。以来、6309 はその正体を隠し、6809 として生きるよう命じられたのである。

しかし、マニアの力というのは恐ろしいもので、「どうもおかしな命令コードが存在する」という噂が広まり、とうとうその全容がパソコン通信などを通じて明らかになっていったのである。

「何て COOOOOOOOL なんだ。これぞ、日本のマイコン教育にふさわしい究極の8ビット CPU に違いない!」と直感した(あまりあてにならぬが)。そして、詳細な 6309 のデータシートを追い求めたが、先に述べたような経緯があるから、正式資料はネット上には存在しない。めげずに、Never give up の精神で探索を続けていくと、とうとう見つかった。

FOLDOC (Free On-Line Dictionary Of Computing)というサイトの中に、"Hitachi 6309" というそのものズバリの項目があった。確かに、"This information, surprisingly, was never published by Hitachi." とある。

Technical reference というリンクボタンをクリックしてほしい。「HD63B09EP Technical Reference Guide」という究極の資料を得ることが出来る。OK、これで 6309 プログラミングに必要な情報は全て揃った。それにしても、なんと美しい命令セットなのだ。いくつか、抜き出してみよう。

BOR A,1,7,$00

The  example would take the first (1) bit of register A (A) and OR it into the 7th (7) bit of memory
location $00 ($00) of the direct  page  (DP register value)
LDW #$100
LDX #$600
LDY #$700
TFM X+,Y+
  
The example would move 256 (LDW #$0100) bytes from #$600 (LDX #$0600) in memory to #$700
(LDY #$0700) in memory,  incrementing  the  value  of  each register (X and Y), and
decrementing the value of the W register each time a byte if moved.

これが8ビット CPU とは、とても思えない。まるで、ARM だよ。特に、ブロック転送命令 TFM は強力で、TFM r0-, r1- や TFM r0+, r1 などが可能になっている。後者を使えば、ちょっとした DMA 転送気分である。素敵すぎ。

後は、将来のために開発ツールが欲しいところだが、残念なことに binutils/GCC は今のところ 6809 には対応していない。が、Alan Dekok 氏のページから、6809 向けに修正した GCC が存在することを知る。これは Matthias Dorfel 氏が、GCC 2.7.2.1 に 6809 用のパッチを加えたものらしい。アセンブラー、リンカー、アーカイバイーは同氏が自作している、凄い!

さて、残る難関は「肝心のブツが手にはいるかどうか」である。いつもの入手経路を探すが、さすがにない。どこにもない。「諦めるしかないのか・・」と、ショボ〜〜ンとしていると、ひとつだけヒットした。

USBid.com は、HD63C09 のように製造中止(いわゆるディスコン)もしくは入手難になったデバイスを、専門に扱う会社らしい。最低注文量が 500 USドルというのが痛いが、気が付くといつのまにかユーザー登録を済ませている自分が怖い。

さて、検索を実行すると、ありましたよお兄さん!HD63C09 達が、「おいらに命の灯をともして頂戴」と、大勢でウィンクしてました。おじさん、困ったなぁ・・。見積もり依頼?もちろん、出しておきましたとも。

[Hard] カセットインターフェース

本日、トランジスタ技術・コピーサービス係より、依頼していた文献がどっさり届く。この中で一番古いものは、1977年7月号において編集部が執筆した「プログラム交換・標準化へのみちしるべ カンサス・シティ(KC)スタンダードについて」と題するもの。冒頭が泣けるので、少々引用させて頂く(原文のまま)。

自分の作ったプログラムを、他の人に使ってもらうことや、友人が作ったプログラムを自分のマイコンで
動かしてみることも、マイコン・マニヤにとって大きな喜びのひとつではないでしょうか。
プログラムを交換する場合、まっ先に頭に浮かぶのは、紙テープをその媒体として用いることです。
しかし、紙テープリーダやパンチャは、誰れでも持っているというような代物ではありませんので、
他のもっと身近な媒体に目を向ける必要があるでしょう。そこで考えられるのは、オーディオカセットを用いる方法です。
オーディオカセットは"モモエちゃんや淳子ちゃん" の声を正しく記録(録音)できるのですから、
コンピュータで使用する、"1" と "0" などは容易に憶えられるはずです。

26年前のマイコン野郎にとっては、紙テープリーダーやモモエちゃんが常識だった。もちろん、現在は違う。しかし、時代が移ろい変貌を遂げたところで、技術の基本が変わることはない。本日届いた70年代後半の文献は、どれを取っても私の知的好奇心を刺激する物ばかりだ。

当時は「カセットテープ」という貧弱な記録装置を用いて、データ転送をいかに高速かつ安定化させるかについて、涙ぐましい努力が続けられていた。1975年11 月、アメリカのカンサスシティで行われた会合で標準化されたカンサスシティ・スタンダード(周波数変調方式)を先駆けとして、トーンバースト方式、位相変調方式、エッジ間隔変調方式(サッポロシティ・スタンダード)、パルス幅変調方式、そしてこれらの亜種など、数え切れぬほどのプロトコルが誕生した。まさに、「カセットインターフェース戦国時代」と言っても良いだろう。

カセットはアナログの世界であるから、今の私にその全貌を理解することはかなわぬが、今回の候補としてはMZ-80 などにも採用されていたパルス幅変調(PWM)方式がふさわしいようだ。これは、先日紹介したインターフェース 1978年6月号で紹介されていた記事とほぼ同じものであり、ソフトウェアにその処理を任せる代わりに、ハードウェアを極限まで単純化する方式である。私のような人間にはピッタリだ。参考資料としては、トランジスタ技術 1982年2月号「MZ-80C/K における高速カセットインターフェースを解析する 小飼幸和氏」がお勧め。

ただし、入出力には若干の工夫が必要になる。カセットテープに矩形波を記録した時点で、その波形がたるんでしまうからである。この鈍った波形を鍛え直すためには、CR 微分回路とシュミットトリガーを組み合わせると良いのだそうである。このあたりの詳細は、トランジスタ技術 1980年11月号に掲載された千葉憲昭氏による「サッポロシティ・スタンダードのすべて」に詳しい。

よしよし、これで基本は固まった。後は実行あるのみだよ。う〜〜ん、でも昔のプロトコルそのままというのも、悔しい気がする。なんか、捻りがほしいよねぇ・・と自分なりに考える。

昔のテープレコーダーはモノラルが当たり前だったから、皆さんシングルチャネルで頑張っておられるけど、今はステレオ録音が当たり前だもんねぇ。おお、そうじゃ!Left にクロック信号、Right にデータ信号流して同期をとったら、どうじゃろ?

うむ、我ながら名案。Matsuyama City Standard はステレオ録音で行こう!(本当にピーヒョロできるのだろうか・・)。