ＦＰＧＡで６８０９を作ってＯＳ９を動かす

# 目的
　ＦＰＧＡ上に６８０９を構築し、ＦＬＥＸっていうＯＳを動かした。
　公開されている情報を、組み合わせただけですけどね。
　次にどうするかと考えたて頃で、昔使っていたパソコンを思い出した。
　ＭＢ－Ｓ１ていう名称で日立製。勿論６８０９で動いていたのだが。
　当然ＢＡＳＩＣが動作するのだが、ＯＳ－９というＯＳも使えた。
　◆◆◆　そうだ、究極の８ビットＭＰＵでＯＳ－９を動かそう　◆◆◆
　マルチウインドが使えたが、８０文字x２５行の画面サイズでは使いどころが微妙だったけど。

# 経緯
　ＯＳ９といってもappleのＯＳでは有りません。まあ、判る方には判っている話ですが。
  マイクロウェアシステムにより６８０９のために開発されたリアルタイムオペレーティングシステム。
　６８０９用として、レベル１とレベル２が存在している。
　レベル１はメモリ６４ＫＢの制限が存在する。
　レベル２ではＭＭＵを使用して、６４ＫＢ以上のメモリが使用可能となっている。
　詳しく知り値ければＷｉＫｉ等を見てね。
　
  ＯＳ－９を動かす当たり、当選の如く市場調査。うんやはり先行事例は存在している。
　元々MULITICOMPと言う、ＦＰＧＡで数種類の８ビットＣＰＵを構築するプロジェクトが在って
　そのＦＰＧＡの構想を拡張したのが、MULUTICOMP6809という事になるのかな。
　「[MULTICOMP6809](https://github.com/nealcrook/multicomp6809)」
　６８０９上で各種ＯＳを動かしている。※ありゃ、FLEXもレパートリーに有るじゃないか。
　良く出来ているが、個々の説明がちと足りないと思う。探し方が足りないのかな。

　動作環境は前回の「[ＦＬＥＸ０９](https://github.com/hi631/FLEX09)」と同様。
　ＦＰＧＡへ書き込む回路と、ＳＤカードの登録内容が異なるだけ。
　モニターもブート方法を変更しただけ。※少しバージョンアップしている。

　構築に当たっては、MULTICOMP6809からＯＳ－９関連部分だけを切り出し、
　ソースをコンパイルして、ＳＤカードを作成したら...、動いてしまった。
　シミュレーターの出番は無し。
　これではこの文章の存在意義が無いので、少しだけ性能向上。
　　※ＯＳ－９と呼んでるが、実際は本家では無くＮｉｔｒＯＳ－９と言う分家。
　　　本家はどうなったのだろう。

# ハード
　ソースそのものはMULTICOMP6809と同一。但し、要らないと思われるファイルは削除。
　「[ＮｉｔｒＯＳ－９ハード](https://github.com/hi631/nitros09/tree/master/n6809)」
　Quartus II 13.0sp1を起動して、MicrocomputerPCB\MicrocomputerPCB.qpfを選択する。
　コンパイルし、ターゲットボードにロードする。
　　※使用しているＦＰＧＡが古いので、之で無いとコンパイルできない。
　ROMとしてCAMELFORTH_2KRAM.hexが選択されていた場合は、FORTHが起動し'OK'が表示されるので、'NITROS9'と入力すれば、ＯＳ－９が起動する。
![Image6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159764/31c2d274-ab73-8605-a745-b1c1f7fdfd98.jpeg)

# ＳＤカードの作成
　ＳＤカードの作成はLinux環境下で行う。※MINGW32で作成した。
　MULTICOMP6809用のカードは、複数ＯＳが起動可能に設定するようになっており、
　ＯＳ－９では、80MB(1048576 * 80/512 = 0x2.8000)以降の位置に書込む。
　作成はmulticomp6809のSDcard\create_sd_imageのスクリプトでイメージデータを作成する。
　問題点は 　ＯＳイメージが見当たら無い　って事。少々諦めていたが、
　multicomp6809\nitros09\nac_notes.txtに作り方が書かれていた。

　「[ＮｉｔｒＯＳ－９](https://github.com/n6il/nitros9)」をダウンロードし、
　'make dsk PORTS=mc09'   で　nitros9\level1\mc09　　に　NOS9_6809_L1_v030300_mc09_80d.dsk　が
　'make dsk PORTS=mc09l2' で　nitros9\level2\mc09l2　に　NOS9_6809_L2_v030300_mc09_80dxl.dsk　が
　作成される。※勿論此方もLinux環境で
　※念の為作成したDSKを「[上げておく](https://github.com/hi631/nitros09/tree/master/nitros09dsk)」。

　次にbin\create_sd_imageの190行当たりに書かれているが、ディレクトリを適切に設定、
　create_sd_imageの起動により、multicomp09_sd.imgが出来上がる。
　　※256byte/sectorのデータを512byte/sectorに伸長(二回書き)している。
　　※他のＯＳ登録部分がエラーとなるが無視。
　これをwin32diskimager等でＳＤカードに書込む。

# モニターからのブート
　別にMULTICOMP6809のCAMELFORTHが嫌いな訳ではないが、改定方法が不明。
　リセット即ＯＳ－９起動をやりたい場合、CAMELFORTHでは対処できない。
　そこで、前回作成のモニターにＯＳ－９ブート機能を追加した。
　モニター動作時に、'B'+RetでNITROS9が起動する。
　モニターを少し弄れば、リセット起動可能だろう。
  　「[ＮｉｔｒＯＳ－９モニター](https://github.com/hi631/nitros09/tree/master/moni09)」
　　※モニターのアセンブル方法はＦＬＥＸ０９と同様。

# ディスクデータの操作
ディスク交換は、Linuxでの操作が必要となるので、
　ディスクデータの操作の為に下記コマンドをモニターに追加。
　　Ux (xはドライブNo)
　　　カレントドライブをxに変更する
　　　モニターのR/Wコマンドはカレントドライブに対し行われる。
　　Ux Ly (yはモニターに記載のSDDRV_1-4の位置)
　　　'U1 L0'で、ドライブ1にSDカードの先頭エリアのディスクデータが、倍サイズに伸長して書き込まれる。
　　Ux Sy
　　　'U2 L3'で、ドライブ2の内容がSDカードの先頭から4番目のディスクエリアに、ハーフサイズに縮小して書き込まれる。
　※SDカードの先頭エリアには、720KBx4のデスクイメージを設定可能。DOSのCOPY /Bコマンドで作製可能。
　　U4 - U7 のコマンドで選択可能。R0001で街頭ドライブの先頭セクターが表示される。
　※個別にドライブの交換が可能だが、書いて見ると説明がしずらいし判り難い。判んなかったら使わないで。

# 動作保証について(2022/07/19追記)
　この記載を見られた方で、記載の通りにやったが動作しない、ハードは正常なので公開しているソフトがおかしい。無駄な時間を費やしたと、ブログに公開されている方がおりました。
　本記載では6809は30MHzで動作しており、拡張RAMには配線遅延等も含めアクセスが33ns以下の物が必要です。
　しかし、その方のハード構成を見ると55nsアクセスのRAMを使用しており、之では正常動作する訳が有りません。
　　※本例ではアクセス10nsのRAMを使用。
　　※CPUクロックを下げれば動くだろうが、SDへのアクセスを遅くする必要が有るかも。
　環境に合わせハード等を変更するのであれば、それがどの様な結果を及ぼすのか理解してください。
　それが理解出来ないのなら誤ったクレームを付けないで頂きたい、無知の恥をさらすだけですよ。
　本記載は完全な動作を保証している訳では有りませんが、少なくとも動作確認が得られたものをソースと共に公開しております。
　これは、追試を行う方への最低限の利便性を提供するためであり、自分なりの未来へのささやかな投資と考えています。
　また、記載が説明不足な事は承知していますが、此処は学校では無く、更に一から説明したら此処には書ききれないでしょう。
　詳細な動作はプログラム、回路図から読み取って下さい。不明な点は文句を言う前にググって調べるべきでしょう。
  
# 総括
　意外に簡単に出来たが、multicomp6809が上手く出来ていたという事だろう。
　伸長(二回書き)せずにデータを扱いたかったが何処なのか良く判らん。(レベル１はドライバが見つかったが)
　当然ですが、上記記載内容は全て無保証であり、各自の責任においてご利用願います。