LoginSignup
0
2

More than 3 years have passed since last update.

[祝]ベーシックマスター レベル3 生誕40周年

Posted at

目的

 DOSを探してガラクタ箱を漁っていると、MB6890.ZIPがひよっこり出てきた。
 なんだろうと思い起すと、なんと!ベーシックマスター レベル3のROM(BASIC)ではないか。
 そしてなんと、来年はレベル3が1980年5月に発売されてから来年5月で生誕40周年ではないか。
 ◆◆◆ そうだ、ベーシックマスター レベル3 生誕40周年を祝おうではないか ◆◆◆
 ささやかな祝福ではあるが、ベーシックマスター レベル3をFPGAで再現してみよう。
 まあ、40周年は今から約半年後ですけどね。

経緯

 投稿者は日立関連の会社に在籍したことが有り、それなりの思い入れが有ります。
  ※他社製の機器を購入申請すると、却下率が高かったという事情も有る。
  ※レベル3に通信アダプタ(自社製)を接続し、遠隔(リモート)監視システムを構築した。
 しかし、なにせ大昔の事であり詳細を覚えているはずもなく、まずは情報を収集。
 1.国会図書館に出向き、月刊I/Oの別冊『ベーシックマスター活用研究』に記載の回路図をコピー。
  ※回路図は入手したが、ロジックが複雑で、根気が続かず詳細分析は断念。
 2.「日立 ベーシックマスター レベル3 マーク5 / S1」で機能等を再確認。
  ※上記以外は断片的で、かろうじて残っているという状態か。

 <未来技術遺産登録について>
  2015年9月1日に国立科学博物館の定めた重要科学技術史資料(通称:未来技術遺産)の第00206号として、登録されている。
  しかし技術資料も保管せず、筐体(あえてガラクタといおう)を保管してなにをしたいのか、何の役に立つというのだろうか。
  目的が良く判らない。
  むしろコンセプト、回路図、ROM等を収集/公開して次の世代に、多少なりと技術を伝承すべきと思うがどうだろう。
  過去の技術者の自己満足の世界ではなかろうか。こんな事をしているから諸外国に置いて行かれるのだろうね。
  もしベーシックマスターの関係者がこれを見られたら、技術を公開してほしい。(まあ、いないだろうが)

コンセプトなど

 今回の目標は完ぺきなMB6890のemulatorを作ることではない。
 その理由としては、単に投稿者の技術レベルが低い為であり、完全性は求めない(求められない)。

 ではなぜ行うのか。その理由は
 1.投稿者の知的欲求を満足させる(自己満足を含むが)。
 2.多少なりと次の世代への啓発を。
  FPGAの例題として、LEDちかちかが推奨されているが、それ以降は極端に敷居が高く、無理と諦めてしまっているのではないか。
  こんなことが出来る、この程度のことはできる等を見せて、連続的な技術のステップアップを図れるようにすべきであろう。

 現在のFPGAによる開発は下記のよう、昔に比べ格段に簡単になっている。
 その分、最先端は高度になっているともいえるが、昔に比べ出来る事は格段に多くなっている。
  レベル1 専用LSI/ICを配置/配線し、グルーロジック(周辺回路)のみをFPGAで構築。   <-------- 黎明期
  レベル2 専用LSI/ICをFPGAで(自分で)設計、メモリーは専用ICを配置/配線する。    <-------- 10年ぐらい前か
  レベル3 専用LSI/IC(モジュール)のVHDLを探してきて設置、全回路をFPGAで構成可能。 <-------- 現在のレベル
       ※ちなみに今回のemulatorは現時点では、DE10の5%のロジックと10%のメモリで構成出来ている。
        emulatorは32MHzで動作し、また規模は1/10程度の事より、DE10は実機の320倍の性能を有する事になる。(ほんとかいな)

前提条件

 以下のハード・ソフトを予め準備の事。(購入先、金額は参考までに)
 1. FPGA-board      DE10-nano(ソリトンウェーブで購入した 18k円)
 2. IO-board      MiSTer FPGA IO 5.6 Board for DE10 Nano(ebayで購入 6k円)。VGA出力部分のみ使用。
 3.Quartus Prime     FPGAのプログラムを作成。(開発は Ver17.1)

開発手順

 まず下記に示す順序で回路を構築。コンパイルエラーを潰していく。
 signaltapで信号確認しながら間違いを訂正していったら、一週間程度で初期画面が出た。(やったね)
 ※メモリが潤沢にあるのでsignaltapを使い放題。
 これが旨く行ったら、後は個別に機能をインプリメントすればいい。

<動作確認>
 1.DE10のハード動作を簡単なプログラム(例えばLチカ)で確認。
 2.VGAハードを接続し、簡単な表示プログラムを作成し、表示回路の動作確認。
 3.所持するL3(レベル3)ROM使える事をソフトemulatorで使える事を確認する。

 <回路設計>
 せっかくコピった回路図だが、詳細には分析しなかった(面倒くさい)。
 「日立 ベーシックマスター レベル3 マーク5 / S1の記載を参照し、機能を順にインプリメントした。
 ※そのため、本物と似ていない部分が有るような気がする。
 1.モジュール(6808,CRTC等)を集めプログラムに配置。
 2.メモリ類をalteraのライブラリを使用して定義、ROMはROMファイルと結びつける。
 3.L3のCS(チップセレクト)信号を作成し、各モジュールに配線。
 4.CPU(MPU)のアドレスバスを、各モジュールに配線。
 5.CPU(MPU)の出力データバスを、各モジュールに配線。
 6.CPU(MPU)の入力データバスに、各モジュールの出力をCSで選択して接続。
 7.L3(レベル3)で使用している、レジスタ類を定義、CSで選択してR/W接続。
 8.ROMを逆アセンブルし、プログラムの動作(特にスタートアップ)を確認。
 9.コンパイル結果をFPGAに書き込む。
 10.リセットスタートし、RESETベクターからの、ROMの読み取り動作をchipscopeで確認。
 11.メモリへのR/W、プッシュ/プル動作部分で、RAMの動作を確認。
 12.CRTCへのアクセス信号を参照し、CRTCの初期化を確認する。
 13.CRTCが0x400(VRAM戦闘)にアクセスした時に、メモリから0x48('H')が出力され、FONTROMからは対応するビットデータが出る事を確認。
  ※ここまで正常であれば、初期画面には'HITACHI....'と表示されるはず。

主要モジュール

 本emulatorはMultiCompの6809部分をベースにして構築している。
 ※webサイトが紹介出来ればいいのだが、既にサイトが閉鎖されているような気がする。
 ※MultiComp_MiSTerが技術的に同じような気がする。

 1.CPU(MPU) 6809
  MultiCompで使用されているものを利用。
 2.RAM
  alteraのライブラリを使用。
  2port.ramとして定義しているので、表示アクセスとの競合を考慮する必要はない。
 3.ROM
  alteraのライブラリにROMデータをバインド。
  ※L3BAS.HEXをROMフォルダに格納の事。
  ※ROMファイルがBINの場合はHEXに変換が必要。
 4.FONT
  alteraのライブラリにROMデータをバインド。
  ※ROMファイルがBINの場合はHEXに変換が必要。
 5.CRTC
  「BBC Micro for Altera DE1」に使用されているものを利用している。
  ※VGA出力とする為にインターレースは無効としている。また、表示位置補正の為にVSYNCの位置をずらしている。
  ※インターレースを無効とする為に「mc6845.vhd」に2か所改悪(----でコメントアウト&追記)。
   残光性のモニターが入手できるのであればコメントを取り外せば動くかな。
  ※インターレースを無効にしているので、インターレースを前提にしているソフトは動かない。
 6.キー入力
  キーボードレジスタ(0xffe0)にスキャンコード(0x80-0xfe)をセット後、入力無(0xff)をセットすることにより入力となる。
  PIAではなく単なるレジスタとして設計している。
  なお、本emulatorにはキーボードを付属していない。※色々な手段が考えられるが、ハード/ソフトの追加が必要でちょつと面倒。
  ではどうやって入力するかというと、jtag-usb接続を利用して、システムコンソールから入力する。
  ※Misterのロジックを使えばUSBからの入力が可能となるが、機構が良く判らない&コンパイル時間が長くなるのでやっていない。

動作方法

 1.ソースをQuartusでコンパイルする。
  ソースファイルの場所は
 2.output_filesフォルダに**.rbfが出来上がるのでDE10に書き込む。
 3.システムコンソールを起動する。(Quartus tools -> System.Debugging.tools -> System.Console)
 4.System.ConsoleのSystem.Explorer(左側)のscriptsフォルダに格納したスクリプトを実行(Execute.script)する。
  ※ダウンロードしたscriptsフォルダを予めコピーしておく。

 <スクリプトに関する解説>
 スクリプトはTCLコマンドで作成している。(attera方言が微妙)
 L3にキーコードを送る場合、スクリプトファイルに ss "キーデータ"と記載し実行すると、L3の画面に"キーデータ"が表示される。
 ※ssはスキャンコードを送る関数。
 ※最低限のキーしか定義していないので、未定義のキーも存在する。(必要なら追加してね)
reset.jpg 起動画面                      6809 EXTENDED BASICでの起動
line.jpg グラフィック表示の例(32Mhzにすると早いぞ)

L3ROMが無い場合は

 L3ROMを持っていないが、どうしても試して見たい場合はROMフォルダ内のEXT_BASIC.HEXをL3BAS.HEXにリネームしてコンパイルする。
 ※EXBAS.HEXは「6809 EXTENDED BASIC(Microsoft 8KBasic)」にL3用の入出力を追加したもの。(freeになっているはず)
 キー入力スクリプトは sn "キーデータ"と記載し、実行する
 ※snはアスキーコードで送る関数。


 FPGAで設計されたベーシックマスター レベル3は現存しない。(多分)
 ※10年位前に開発中の記述が散見されたが、開発資料などは見当たらない。
 これは、技術資料が公開されてないことに起因すると考える。(一部公開している会社も有るが)
 過去の技術を伝承し将来につなげる為に、可能な限り公開すべきと考えるが、如何なものだろうか。
 なお、もし追試する奇特な方がおられた場合、上記記載内容は無保証であり、各自の責任においてご利用願います。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2