目的
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が起動する。
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はドライバが見つかったが)
当然ですが、上記記載内容は全て無保証であり、各自の責任においてご利用願います。