2022年6月22日水曜日

FPGAボードで6809を作ってNitros9を走らせてみました

安価なFPGAボードでOS-9互換と言われているNitros9を走らせてみました

FPGAで6809を作ってOS9を動かす」というサイトを見て、同じFPGAボードを入手してNitros9を走らせようとしてみました。

 目的は2つありまして、一つはOS-9互換と言われていますが、本当なのかどうかを所有しているOS-9Level1(FM-7用)とLevel2(FM77AV40用)と比較して確認してみたいことと、もう一つは普段使用している自作の6809/6802DualボードでNitros9を走らせたいので、その前準備のためということです。

入手したFPGAボードは下画像のものです。ALTERAのCyclone IIのEP2C5が載っています。他に購入したのは3.3Vで動作するSRAMのみで、あとは全て手持ちの部品で済ませました。


購入したFPGAカード

ネットの情報に従って、裏面のR1, R2, R9, R10は取り外してあります。

その裏面

基板も使いまわしなので余計な穴が開いていたりします...

3.3Vの512KB SRAMが載っていますが、もう一個載せられるようにスペースを空けてあります。


製作したボード

まず最初の試みとして慣れているFLEX9を動作させる方が簡単かと思って、同じ著者の「FPGAで6809を作ってFLEXを動かすぞ」という記事の通りにインストールしてみることにしましたが、うまくいきませんでした。

コンパイルはエラー無く終了し、書き込みも一瞬で無事に終了します。コンフィグROMへの書き込みもできましたが、RAMでもROMでも動作しないのです。

FPGAに書き込んだ6809がまず動作してメッセージが表示され、続いてSDカードに書き込んだFLEX9が読み込まれて走るはずですが、画面には何も表示されません。SDカードを読みに行く気配がないので、それ以前のFPGAに書き込んだプログラムの動作がダメなようです。

一部Verilogで書かれているので、VHDLならともかくVerilogの細かいところは良く分かりません。

これはあかんということで、FLEX9ではなくOS-9の方も試みたのですが、やはり画面には何も表示されず、SDカードを読みにいく以前の段階に問題があるという状態でした。


ハードが悪いのかそれともソフトのせいか

何しろ回路が手配線なのでハードのミスがあるかもしれず、悪いのは回路なのかFPGAデータなのか、それともSDカードに書き込んだファイルなのかが全く分からず、途方に暮れるばかりでした。

そんな時に「Multicomp Cyclone II-CでCP/Mが動いた」という記事を見つけました。これも同じFPGAボードを使用しており、かつSDカードに書き込むイメージファイルも既に用意されていましたので、FPGA用のプログラムをそのままコンパイルして書き込み、さらに用意されているイメージファイルをSDカードにそのまま書き込むことで、あっさりとCP/Mが動作しました。


Z80書き込み中


CP/M3.0起動直後


CP/M3.0動作中


ハードには問題がなかった

この結果、ハードには問題がないことが確認できましたので、あとはFPGAに書き込むプログラムとSDカードに書き込むイメージファイルの作成という事に注力することができます。

FLEXとOS-9を走らせる記事は、こうすればできますよという手順を詳細に解説したというものではなく、分かっている人には分かるという書き方ですので、私のような素人には引っかかる個所が多すぎます。

ということで、あちこちを修正しながらコンパイルして実行することを繰り返しましたが、やはりSDカードを読みに行く前段階の、FPGAに書き込んだプログラムが動作しない状態から脱却できません...(VHDファイルのセット、コンパイル、実行の手順を数百回も繰り返したおかげで、操作手順だけは目を瞑っていても出来るぐらいになってしまいました...)


オリジナルのファイルで動作させることができた

結局、ブログ中のファイルを諦めて、元々のファイルから始めることにしてGithubにある「nealcrook/multicomp6809」をダウンロードし、その中のMicrocomputerPCBフォルダ中のMicrocomputer.vhdから作成することにしました。これについても色々と試行錯誤をしましたが、何とか6809を立ち上げることができました。

これはシリアル出力に設定してコンパイルした場合の出力画面です。まずCamelForthが立ち上がり、Enterー>OK表示ー>NITROS9入力でNitros9が立ち上がり、日付の入力の後、dir /d0でドライブ0の内容が表示されています。


シリアル出力の場合

こちらはビデオ出力に設定してコンパイルした場合で、PS/2キーボードから操作できます。


ビデオ出力の場合

なお、シリアル出力とビデオ出力の切り替えですが、VHDファイルの該当部分を有効・無効化するだけではダメで、シリアル出力に設定した場合はブログの著者による数か所の変更が必要なようです。(元のmulticomp6809中のVHDファイルと比較すると変更部が分かります。)

SDカードに書き込むデータファイルですが、ブログに書かれていますようにLinux環境で行いましたが、書かれていますようにbin\create_sd_imageをそのまま実行してもエラーで止まってしまいますので、実行行を一行ずつ手作業で修正しながら行いました。どうも、著者はLinuxかMac環境のようで(ファイルの改行コードが0x0D,0x0Aでなく0x0Aになっていた)、それもあって私のWindows環境では難しかったのかもしれません。

蛇足ですが、FPGAは便利なものですね。コンパイルに1分程度かかりますが、その手間をかけるだけで同じボードがZ80や6809に変身するのですから。また、ROMに書き込めば電源スイッチONで即起動しますし。

しかし、一ヶ月以上の試行錯誤の結果として何とか動作したので良かったのですが、つくづく自分の知識の無さを痛感しました。未だに理解しきれていない部分が多いですし、おまけに、何故かQuartus IIの13.0sp1をLinuxにインストールできない状態が続いています。


この後は

この後は、まず手持ちのOS-9L1, L2とどの位の互換性があるのかを確認してみたいと思います。その次には、いよいよ自作のボードマイコンへのNitros9の移植に挑戦したいです。


2 件のコメント:

  1. えー「FPGAで6809を作ってOS9を動かす」の作者です。
    この書き込みをたまたま見かけましたが、動かなかったそうですが、ご苦労様です。既に別件で動いているようなので、今更言う必要も無いかも知れませんが、一応弁解の言葉として。

    RAMとしてAS6C4088-55を使っていますが、此奴のアクセスは55nsです。6809を30MHzで動かした場合、配線なども含め33ns以内のアクセスタイムが必要となり、動かないのは当然でしょう。例で使用しているIS61LV5128ALはアクセス10nsなので、これなら問題無く動作しています。

    まあ、落とし穴が之だけだったかどうかは保証出来ませんが。
    所詮、素人がなんたらかんたらやったら動いたってレベルなので。
    でも追試可能なように元のニュースソースと、頑張れば動く(動いているんだから)という情報の提示は今後もつづけて行くつもりです。

    返信削除
    返信
    1. まさか元になったブログの著者の方からコメントをいただけるとは思ってもいませんでした。ありがとうございます。
      ブログを拝見したことが製作の動機になりましたので、本当に感謝しております。
      ブログの通りでは動作させることができなかったのは私の知識不足のせいだったと考えております。
      特に有難かったことですが、COM使用とKB,Video使用の場合の切り替えは、hi631さまによる修正があって初めて実現できたと思っております。
      私の方はこれをとっかかりにして、自作のボードマイコンにNitros9を何とかして移植したいと考えております。
      これからも有益な情報を提供していただけますようお願いいたします。

      削除