10
6

More than 1 year has passed since last update.

FPGAで6809を作ってOS9を動かす

Last updated at Posted at 2021-05-11

目的

 FPGA上に6809を構築し、FLEXっていうOSを動かした。
 公開されている情報を、組み合わせただけですけどね。
 次にどうするかと考えたて頃で、昔使っていたパソコンを思い出した。
 MB-S1ていう名称で日立製。勿論6809で動いていたのだが。
 当然BASICが動作するのだが、OS-9というOSも使えた。
 ◆◆◆ そうだ、究極の8ビットMPUでOS-9を動かそう ◆◆◆
 マルチウインドが使えたが、80文字x25行の画面サイズでは使いどころが微妙だったけど。

経緯

 OS9といってもappleのOSでは有りません。まあ、判る方には判っている話ですが。
マイクロウェアシステムにより6809のために開発されたリアルタイムオペレーティングシステム。
 6809用として、レベル1とレベル2が存在している。
 レベル1はメモリ64KBの制限が存在する。
 レベル2ではMMUを使用して、64KB以上のメモリが使用可能となっている。
 詳しく知り値ければWiKi等を見てね。
 
OS-9を動かす当たり、当選の如く市場調査。うんやはり先行事例は存在している。
 元々MULITICOMPと言う、FPGAで数種類の8ビットCPUを構築するプロジェクトが在って
 そのFPGAの構想を拡張したのが、MULUTICOMP6809という事になるのかな。
 「MULTICOMP6809
 6809上で各種OSを動かしている。※ありゃ、FLEXもレパートリーに有るじゃないか。
 良く出来ているが、個々の説明がちと足りないと思う。探し方が足りないのかな。

 動作環境は前回の「FLEX09」と同様。
 FPGAへ書き込む回路と、SDカードの登録内容が異なるだけ。
 モニターもブート方法を変更しただけ。※少しバージョンアップしている。

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

ハード

 ソースそのものはMULTICOMP6809と同一。但し、要らないと思われるファイルは削除。
 「NitrOS-9ハード
 Quartus II 13.0sp1を起動して、MicrocomputerPCB\MicrocomputerPCB.qpfを選択する。
 コンパイルし、ターゲットボードにロードする。
  ※使用しているFPGAが古いので、之で無いとコンパイルできない。
 ROMとしてCAMELFORTH_2KRAM.hexが選択されていた場合は、FORTHが起動し'OK'が表示されるので、'NITROS9'と入力すれば、OS-9が起動する。
Image6.jpg

SDカードの作成

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

 「NitrOS-9」をダウンロードし、
 '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を「上げておく」。

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

モニターからのブート

 別にMULTICOMP6809のCAMELFORTHが嫌いな訳ではないが、改定方法が不明。
 リセット即OS-9起動をやりたい場合、CAMELFORTHでは対処できない。
 そこで、前回作成のモニターにOS-9ブート機能を追加した。
 モニター動作時に、'B'+RetでNITROS9が起動する。
 モニターを少し弄れば、リセット起動可能だろう。
 「NitrOS-9モニター
  ※モニターのアセンブル方法はFLEX09と同様。

ディスクデータの操作

ディスク交換は、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が上手く出来ていたという事だろう。
 伸長(二回書き)せずにデータを扱いたかったが何処なのか良く判らん。(レベル1はドライバが見つかったが)
 当然ですが、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

10
6
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
10
6