目的
ガラクタ箱を漁っていると、HITAC10.LZHとマジックで書かれた媒体が出てきた。
何時作成したのか記憶にも無いが、なんと我が国初のミニコンピュータの名前ではないか。
そして調べたらなんと、1969年2月に発表されてから今年は生誕50周年ではないか。
◆◆◆ そうだ、HITAC10 生誕50周年を祝おうではないか ◆◆◆
HITAC10を得意(?!)のFPGAで再現してみようではないか。
まあ、急がないと50周年が過ぎてしまいそうですけれどもね。
画像は「コンピュータ博物館」より
経緯
投稿者は日立関連の会社に在籍したことが有ります。
入社後初めて扱ったコンピューターがHITAC10であり、それなりの思い入れが有ります。
しかし、やはり大昔の事であり覚えているはずもなく、まずはネット等で情報を収集。
1.日立評論1969年11月号:「超小形電子計算機 HITAC 10」に基本概念が記載されている。
※基本命令、動作周期等はこの資料を参考にしました。
2,「組み込みCPUの道具箱」の「ミニコンHITAC10」では、既にFFPGAでの作成例が有り、またかなり詳細な情報が記載されています。
※大部分は、このサイトの情報を参考にしましたが、二番煎じである本機の完成度はこのサイトよりも低いような気が...。
※このサイトで作製されているVHDL(hitac3s_14.v)は、礼儀として閲覧しておりません。
※HITAC10.LZHは、このサイトから過去にダウンロードしたものかも知れません。
3.「HITAC10 エミュレータ」を作られている方がいました。
※起動はさせましたが、テープの作り方が良く判りませんでした。
4.あまぞんで「システムプログラムの実際 (サイエンスライブラリ情報電算機 11) 」が売っていましたので購入しました。
※命令の説明部分は役に立ちましたが、アセンブラ表記が異なっており理解が大変。(まあ、作者の目的が違うが)
5.国会図書館に上記を含め何冊か関連本が有る事を確認。
※上記資料だけで一応動作したので行っていない。
何にしても情報が少ない、 会社に居た頃はそこらかしこに情報があふれていたのに。
大事なものでも平気で捨て去ってしまう、これは国民性なのか。
もしHITAC10の関係者がこれを見られたら、資料を公開してほしい。(まあ、いないだろうが)
開発のコンセプトなど
今回の目標は完成したHITAC10のemulatorを作ることではない。
その理由としては、情報不足に加え投稿者の技術レベルに起因し、又今回は時間的制約も有り、完全性を求めない(求めても実現できないだろう)。
では、なぜ行うのか。その理由としては
1.投稿者の知的欲求(自己満足を含むが)。そこに山が有るから登るのだ。
2.多少なりと次の世代への啓発が出来れば。
FPGAの例題として、LEDちかちかが推奨されているが、それ以降は極端に敷居が高く、無理と諦めてしまう可能性が高い。
こんなことが出来る、この程度のことはできる等を見せて、連続的な技術のステップアップを図る例となりたい。
前提条件
以下のハード・ソフトを予め準備の事。(購入先、金額は参考までに)
1. FPGA-board EP4CE6 Starter(EBAYで購入、5K\位)、別に之で無くともEP4CE6の乗ったボードで構わない。
2.Quartus Prime FPGAのプログラムを作成。(開発は Ver17.1)
開発手順
1.資料に記載されているメモリ(4KW)、レジスタ類を取り合えず定義。
2.基本周期が1,4u、3サブサイクルと書かれているので、0.47uを基本クロックとして作成。
3.動作はフェッチサイクルと実行サイクルより成るので、3+3=6ステートを基本とするシーケンサを構築。
4.フェッチサイクルでは、メモリより命令を読み出すようにシーケンサに追加。命令はインストラクションレジスタ入れておく。
5.実行サイクルでは、まず適当な(例えば加算)命令の処理をシーケンサに追加。
6.旨く行ったら、インストラクションレジスタをデコードして、徐々に命令を追加していく。
7.命令特有の処理は、その場に処理を書。似たような処理はフラグを立てて後で纏めて処理をする。
8.全ての命令の処理(case文のお化け)を書き終えたら完成です。
※勿論、作成途中にも、各命令の動作を簡単に確認しておくべき。
9.メモリに命令を書込んで、個々の命令の動作確認を地味に行う。
開発したプログラム(Verilog)を下記に格納しているので、もの好きな方は参照してみて。
「FPGA_HITAC10」
プログラムを実行中(只の基板の写真ですな)
デバッグ機能
行き当たりばったりの開発なので、デバック機能の確保は重要事項。(コンパイルの時間が...)
1.基本は「Signal Tap」頼り、思い通りにいかない場合は信号をトレースして、自分の頭の中と比較して間違いを探す。
※信号が見えなくなった場合は、LEDに出力するとか、(* KEEP )( Preserve *)等を使うと見えるかも。
2.メモリ作成時の設定により「In-System Memory Content Editor」活かす。これも結構便利。
※稼働中のメモリの書き換えをサポート。HEXファイルのロード/セーブも可能。
アセンブル結果でメモリを書き換えれば、コンパイルしなくても動作の再確認が可能。
※実行結果もメモリに書き込めば確認できる。メモリダンプツールが要らない。
3.プログラム内にブレーク/ステップ機能を記載。
※好きな所でいくらでも止められる。Signal Tapでレジスタも見放題。
4.LEDに実行中のレジスタを表示。
※実機にも付いているが、7SEGの方が分かり易い。
動作の概要説明
<テープリーダー機能>
1.本機はHITAC10本体に付随して、テープリーダー機能を有している。
2.本体からの要求に応じて、テープリーダー機能が動作する。
3.テープリーダーとの接続は簡易(独自)接続。(実機の接続はやけに複雑、上位機種のプロトコルなのだろう)
4.テープデーターとして、メモリ(12KB)にOML,MASSを連続して格納している。
※なお、OMLテープデータにはパリティが付いておらず読み取り中にHLT、原因が判るまで結構時間を取られた。
<メモリ>
1.HITAC10のコアメモリは基本で4KW(8KB)。0.47u(多分)でR/W可能だが、読むと壊れるので再書き込みサイクルが必要。
FPGAでは不要。
※コアメモリはバカ高い、軽自動車が買えるぐらいの値段だったと記憶している。
2.コアメモリ相当の4KW(16KB)と、テープデータ(12KB)をFPGAに実装。
<実行ステップ>
1.本機はリセット直後、IPLをコアメモリ部に転送し、PC=2番地からIPLを実行する。
2.IPLはテープリーダーに、テープ(OML)の読み込みを要求する。
3.テープリーダーはテープデータを読み取り、本体に送出する。
4.OMLの読み取りが完了すると、拡張機構ソフトの読み取りを始める。
5.読み取りが完了すると、PC=0x20番地にジャンプし、MASSテープの読み取りを開始する。
※この部分は本来は手動操作であり、HITAC10には無い機能。
6,MASSテープの先頭ブロックを読み取り後、PC=0x180にジャンプ。
7.テープリーダよりの割り込み待ちでループしている。
※割り込み信号の仕様が不明のため、割り込み信号を発生させていないもので。
※MASSソフトの起動に成功したという情報は何処にも無いので、先駆者も同様なのでしょう。
結果
努力の結果として下記の如く一応動作しているが、中途半端な仕上がりとなっている。
1.基本命令の動作確認。(入出力、割り込みを除く)
2.IPLの動作
3.OMLテープの読み込み、拡張機能ソフトの読み込み。
4.MASSテープの読み込みの途中で、割り込み待ちで無限ループ。
自己評価
FPGAで設計されたHITAC10は10年前にも存在したが、外付けハードのはんだ付けが必要で敷居が高い。
本機はその辺のFPGAボードで実行可能となっており、実施の敷居はかなり低いと思っている。
まあ、ハードの進歩によるものですけれどもね。
残念ながら、今回の作成は中途半端な状態で終わりそうな予感。これは、技術資料が公開されてないことにも起因する。
年寄りが過去を懐かしむだけでなく、未来の(わが子も含めた)技術者たちに何かを残す努力をすべきと思う。
手持ちの情報(恐らく紙)を公開する場所を作れないだろうか。情報が火葬場で焼却され消え去る前に。
過去の技術を伝承し将来につなげる為に、可能な限り公開すべきと考えるが、如何なものだろうか。
なお、もし追試する奇特な方がおられた場合、上記記載内容は無保証であり、各自の責任においてご利用願います。