2014年09月04日

MSX on DE0

他人様のFPGAばかりの話で恐縮ですが、OneChip MSXがDE0に移植されています。
ロシア語のページですがここです。
僕もOneChip MSXの実機は持っていますが、HRA!さんのページのものをベースにI2C接続のRTCやEEPROMの制御回路を追加し、
画面モードや時計が電源を切っても保持されるようにしています。(USBポートをI2Cに使用)
僕の8801互換機は最初はOneChip MSXのハードウェアを使って開発を始めましたが、OneChip MSXの
特徴として不揮発メモリはFPGAイニシャライズ用シリアルフラッシュだけ、というのがあります。
初期化フラッシュは4Mbitあるのですが、FPGAの初期化には約半分の容量しか使用しません。
(実際には、無圧縮の状態では半分を若干超えるのですが圧縮して半分に収まる)
残りの半分の容量にBIOS等が入っており、FPGAがフラッシュからSDRAMにコピーするのですが、
このコピー動作はCPUが行っています。つまり、Z80のコードでフラッシュからSDRAMにコピー
しています。(僕の8801互換機はハードウェアで処理)
この部分のZ80コードにはソースがついておりません。上記HRA!さんのところはもともとMSX2だったものを
MSX2+にしたり、その他いろいろ機能が追加になっている関係でBIOSデータも増えており、
そのままではFlashの空き容量では不足するらしく、圧縮して収めてあり、Z80コードで
展開しながらSDRAMにコピーしているようです。
ロシア語の方はMSX3のロゴが出ますが、恐らく同様にMSX2+相当になっているようです。
ただ、OneChipMSXのFPGAデータが圧縮してフラッシュの半分に収まるのに対し、
DE0のFPGAはゲート数が1.5倍ほどありますので圧縮してもFlashの半分には収まりません。
HRA!さんのBIOSデータはFlashの約半分のサイズですので、ロシア語の方はさらに
BIOSデータを圧縮してあるのでしょうか。

僕の8801も98の方も、BIOSコードはFPGA初期化用フラッシュではなく、パラレルフラッシュに
置くようにしています。(ただ、98の方のフォントを除いて起動時にSDRAMにコピーするのは
同じですが。)
これは、パラレルFlashは4MB有るのでFPGAイニシャル用の8倍の容量があり、アドレスの重複を
回避すれば複数のPCのBIOSをパラレルFlashに焼いておき、FPGAの初期化はJTAGから行えば
いちいち初期化Flashを焼き直さなくても機能の切換えが出来るというメリットがあります。
(Flashの書き換えには数十秒、JTAGでの初期化は1~2秒。それにFlashには書き換え寿命もあり)
また、フォントは98と88で同じものを共有しています。(88用フォントを98で使用)
その為、MSXもBIOSをパラレルFlash側に移したいというのが希望です。
その為にはBIOSデータを初期化FlashからSDRAMに展開するコードを解析して
展開後のデータを吸出し、Flashに書かなくてはなりません。

現時点ではDIPスイッチの設定はスライドスイッチに割り当てていますが、
最終的にはI2C EEPROMに移したいと考えています。これも、
アドレス重複を避けて他機種で1個のEEPROMで共有する予定です。
まぁDE0のスライドスイッチは大きいので簡単に切換えできますが
OneChip MSXのDIPスイッチは指先では切換えできないような大きさなので
機種を変える度にスイッチを切り替えるのは面倒だ、という意図で、
実際にOneChip版8801はDIPスイッチは一切使用せず、手抜きで
RTLでの決め打ちになっています。
posted by プー at 21:34| Comment(0) | 雑記 | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください