［祝］ＨＩＴＡＣ１０ 生誕５０周年

#目的
　ガラクタ箱を漁っていると、HITAC10.LZHとマジックで書かれた媒体が出てきた。
　何時作成したのか記憶にも無いが、なんと我が国初のミニコンピュータの名前ではないか。
　そして調べたらなんと、1969年2月に発表されてから今年は生誕５０周年ではないか。
　◆◆◆　そうだ、ＨＩＴＡＣ１０ 生誕５０周年を祝おうではないか　◆◆◆
　ＨＩＴＡＣ１０を得意(?!)のＦＰＧＡで再現してみようではないか。
　まあ、急がないと５０周年が過ぎてしまいそうですけれどもね。
![0001_01_l.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159764/847ef12d-8afd-d7c7-25f0-b5dcec444210.jpeg)　画像は「[コンピュータ博物館](http://museum.ipsj.or.jp/computer/mini/0001.html)」より

#経緯
　投稿者は日立関連の会社に在籍したことが有ります。
　入社後初めて扱ったコンピューターがＨＩＴＡＣ１０であり、それなりの思い入れが有ります。
　しかし、やはり大昔の事であり覚えているはずもなく、まずはネット等で情報を収集。
　1.日立評論1969年11月号:「[超小形電子計算機 HITAC 10](https://www.hitachihyoron.com/jp/pdf/1969/11/1969_11_06.pdf)」に基本概念が記載されている。
　　※基本命令、動作周期等はこの資料を参考にしました。
　2,「組み込みＣＰＵの道具箱」の「[ミニコンＨＩＴＡＣ１０](http://bitcraft.web.fc2.com/embedded/hitac10/hitac10.html)」では、既にＦＦＰＧＡでの作成例が有り、またかなり詳細な情報が記載されています。
　　※大部分は、このサイトの情報を参考にしましたが、二番煎じである本機の完成度はこのサイトよりも低いような気が...。
　　※このサイトで作製されているVHDL(hitac3s_14.v)は、礼儀として閲覧しておりません。
　　※HITAC10.LZHは、このサイトから過去にダウンロードしたものかも知れません。
　3.「[HITAC10 エミュレータ](http://yees.g.dgdg.jp/workshop.html#____11)」を作られている方がいました。
　　※起動はさせましたが、テープの作り方が良く判りませんでした。
　4.あまぞんで「システムプログラムの実際 (サイエンスライブラリ情報電算機 11) 」が売っていましたので購入しました。
　　※命令の説明部分は役に立ちましたが、アセンブラ表記が異なっており理解が大変。(まあ、作者の目的が違うが)
　5.国会図書館に上記を含め何冊か関連本が有る事を確認。
　　※上記資料だけで一応動作したので行っていない。
　
　何にしても情報が少ない、　会社に居た頃はそこらかしこに情報があふれていたのに。
　大事なものでも平気で捨て去ってしまう、これは国民性なのか。
　もしＨＩＴＡＣ１０の関係者がこれを見られたら、資料を公開してほしい。(まあ、いないだろうが)

#開発のコンセプトなど
　今回の目標は完成した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)を下記に格納しているので、もの好きな方は参照してみて。
　　「[ＦＰＧＡ＿ＨＩＴＡＣ１０](https://github.com/hi631/FPGA_HITAC10)」
![H10_holt.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159764/bb35803d-20f8-cfdc-d76a-e4ba0c8ee3ab.jpeg)　プログラムを実行中(只の基板の写真ですな)

#デバッグ機能

　行き当たりばったりの開発なので、デバック機能の確保は重要事項。(コンパイルの時間が...)
　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可能だが、読むと壊れるので再書き込みサイクルが必要。
　　ＦＰＧＡでは不要。
　　※コアメモリはバカ高い、軽自動車が買えるぐらいの値段だったと記憶している。
　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.ＩＰＬの動作
　3.ＯＭＬテープの読み込み、拡張機能ソフトの読み込み。
　4.ＭＡＳＳテープの読み込みの途中で、割り込み待ちで無限ループ。

#自己評価
　FPGAで設計されたHITAC10は10年前にも存在したが、外付けハードのはんだ付けが必要で敷居が高い。
　本機はその辺のFPGAボードで実行可能となっており、実施の敷居はかなり低いと思っている。
　まあ、ハードの進歩によるものですけれどもね。

　残念ながら、今回の作成は中途半端な状態で終わりそうな予感。これは、技術資料が公開されてないことにも起因する。
　年寄りが過去を懐かしむだけでなく、未来の(わが子も含めた)技術者たちに何かを残す努力をすべきと思う。
　手持ちの情報(恐らく紙)を公開する場所を作れないだろうか。情報が火葬場で焼却され消え去る前に。
　過去の技術を伝承し将来につなげる為に、可能な限り公開すべきと考えるが、如何なものだろうか。
　なお、もし追試する奇特な方がおられた場合、上記記載内容は無保証であり、各自の責任においてご利用願います。