FPGA(DE10-nano)でwindows95/98を動かしてみた

#目的
　過去に「Next186_SoC」を「Papilio」というボードで、DOSの起動に挑戦した事が有る。
　FPGAに書き込み、ガラクタ箱から過去のパソコンソフトを取り出しインストール。
　x86なのでDOSまでしか動作させられなかったが、ここまで出来る事に少し感動した。
　ここまで出来るのであれば、windowsも動かしてみたいのが人情。
　いろいろ調べると「MiSTer」というprojectが引っ掛かり、windows95が動作すると記されているではないか。
　◆◆◆　そうだ、これを使ってFPGAでwinddowsを動かそう　◆◆◆
　ちっとも役には立ちそうにない、過去へのノスタルジーだとしても。


#経緯
　「[MiSTer](https://github.com/MiSTer-devel/Main_MiSTer/wiki)は2017年頃から開発された、DE10-nanoをベースとした汎用エミュレータシステムらしい。
　前からx86系のFPGA化は随時調べていたが、なぜか今までは「MiSTer」が引っ掛からなかった。
　ご存じの方には今更ではありますが追試を行い、素人でもここまで出来る事を確認した。
　1.まず必要となる前提ハードを調達。
　2.次に必要になるソフトを確認。(ガラクタ箱をがさごそ)
　3.DE10のSDカードにソフトをコピーして、電源ON。(おっ、こいつ動いたぞ)
　※先に言っておきますが、windows95は動作がとろい、windows98は輪をかけてとろい。忍耐力が試させられますぞ。


#前提条件
　以下のハード・ソフトを予め準備の事。(購入先、金額は参考)
　1. FPGA-board 　　　　　DE10-nano(ソリトンウェーブで購入した 18k円)
　2. SDRAM-board　　　　SDRAM XS v1.1 for MiSTer FPGA DE10-NANO Board(ebayで購入 2k円)
　　※MiSTer FPGA IO 5.6 Board for DE10 Nano も購入したが取り合えず要らなかった。
　3.OTG HUB 　　　　　　　キーボード・マウスを接続する。(ルートアール 2k円)
　4.キーボード・マウス　　パソコンで使っているもの
　5. MiSTerソフト 　　　　　[MiSTer](https://github.com/MiSTer-devel)からダウンロード
　　　　　　　　　　　　　※以下で参照しているファイル名などは追試時点のもの、最新版の方が宜しいかと。
　6.DOS,Windowsソフト　　過去のソフト等を漁る。
　　　　　　　　　　　　　※手元には無い場合、探せばフリーのDOS等も有ります。
　7.VMWARE　　　　　　　windows95/98のインストールをパソコン上で行う場合
　8.Quartus Prime　　　　　FPGAのプログラム変更を行いたい場合(すごく時間がかかる)


#ハードウェアの設定と動作確認
　1.DE10-nanoに電源とHDMIケーブルを接続。
　2.DE10-nano付属のSDカードでボードの動作を確認。
　3.[SD-Installer-Win64_MiSTer](https://github.com/MiSTer-devel/SD-Installer-Win64_MiSTer)でSDカードを作成。
　　※release_20190627.rarを解凍し、MiSTer SD Card Utility.exeを起動。
　　※8/16GBのカードで動作を確認。サイズは自動判断していると思われる。
　4.SDカードを装着し電源ON、メニュー画面が出れば動作正常。
　5.DE10-nanoにSDRAMを装着する。
　6.[MemTest_MiSTer](https://github.com/MiSTer-devel/MemTest_MiSTer)のreleases/memtest_20180313.rbfをSDカードのルートにコピー。
　7.DE10-nanoにOTG.HUB経由でキーボード・マウスを接続。
　8.HDMIにMiSTerの画面が出れはセットアップ正常。
  
　セットアップ画面(youtube)
　[DE10-Nano - MiSTer Absolute Beginner Setup](https://www.youtube.com/watch?v=DdKHZwcm8Tc)

#biosの起動
　1.[ao486_MiSTer](https://github.com/MiSTer-devel/ao486_MiSTer)のreleases/ao486_20190719.rbfをSDカードのルートにコピー
　2.SDカードのルートに ao486フォルダを作成。
　3.SDカードのao486フォルダに、releases/biosに有る boot0.rom boot1.rom をコピー
　4.SDカードを装着し電源ON、メニュー画面が出たらao486を選択しEnterしてbiosの起動を確認する。


#DOSの起動
　1.DOSのフロッピーからFDイメージ(****.img)を作成する。(フロッピードライブ動くかな...)
　2.FDイメージをSDカードのao486フォルダにコピー。
　3.SDカードを装着し電源ON、メニュー画面が出たらao486を選択(Enter)してbios起動迄進める。
　4.「windows」キー(CTRLの右側)と「F12」キーを同時に押し、メニューを表示させる。
　5.Mount FloopyでFDイメージを選択。Systemメニューを再表示させ、一旦Save settingsを選択しておく。
　6.Systemメニューを再表示させrebootを選択するとFDイメージを読み込み再起動する。
　　※拡張メモリが32MBも有るのでHIMEMのTESTに時間がかかる。
　　　EMM386でエラーが発生する場合は、config.sysのEMM386を削除するかオプション(I=E000-EFFF)を追加する。
　
　MISTer起動(youtube)
　[MISTer FPGA DE10 Nano - Part 2 ao486 DOS Setup](https://www.youtube.com/watch?v=v8WYNmkepCA)
![mistre.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159764/290462d3-3152-835e-672a-914fdf67bd9d.jpeg)　　　DE10にIO 5.6 BoardとSDRAMを装着した状態　　　　　　　　　　　　　　　Ao486の起動

#windows95システムディスクの作成
　ao486上でもセットアップ可能と思われるが、処理にすごく時間がかかるので、VMWARE(パソコン)上で行う。
　1.ディスクの管理を起動、操作->VHDの作成で、1GB程度のVHDディスク(95sys.vhd)を容量固定で作成する。
　2.ディスクの管理を起動、操作->VHDの作成で、1GB程度のVHDディスク(95cd.vhd)を容量固定で作成する。
　3.vmwareを起動、新規仮想マシンの作成を選択。
　4.後でOSをインストール->次へ->windows95を選択->次へ->マシン名と場所を適当に->次へ->ディスク容量の指定を適当に(これは使わない)->次へ->完了と操作
　5.仮想マシン設定の編集を選択。先ほど作成したディスクは削除。
　6.ハードディスクを追加、95sys.vhdを指定する。
　7.ハードディスクを追加、95cd.vhdを指定する。
　6.CD/DVDを追加、windows95のセットアップCDのイメージを指定する。
　7.フロッピーを追加、windows95のセットアップCDのイメージを指定する。
　8.仮想マシンを再生する。CDがマウントされたドライブ(追試環境ではS:だった)を覚えておく。
　9.CDがマウントされた後でバッチ処理が停止する。(停止しない場合はCTRL+Cで強制停止)
　10.fdiskを起動し、95sys.vhdをc:、95cdをd:としてマウントする。
　11.formatを起動し、c:とd:をフォーマットする。
　12.cdがマウントされたドライブに移動(ここではS:)。win95ディレクトリに移動。(cd win95)
　13.セットアップを起動(setup)。
　14.画面指示に従ってセットアップを実行。
　15.セットアップが完了後に、cdの内容をd:(95cd.vhd)に全てコピー
　　※ao486で稼働時にEMM386でエラーが発生する場合は、config.sysのEMM386を削除する。

#windows95の実行
　1.95sys.vhdと95cd.vhdをSDカードのao486フォルダにコピー
　2.SDカードを装着し電源ON、メニュー画面が出たらao486を選択(Enter)してbios起動迄進める。
　3.「windows」キーと「F12」キーの同時押しでメニューを表示。
　4.PrimardHDDに95sys.vhd、SecondaryHDDに95cd.vhdを設定、Boot orderをHDDに設定する。
　5.右矢印でSystemメニューを表示させ、Save settingsを選択してから、Rebootを実行。
　6.windos95が起動する。
　7.稼働するハードウェアが異なるのでプラグアンドプレィが起動ので、ドライバーを当てる操作を行う。
　　インストール時とCDの位置が異なる場合は変更する。(S:->D:)
　※初期画面はVGA(640x480)だが、ドライバをSVGA(800x600)にすると画面を広げることは可能である。
　　しかし、数秒毎に画面が息継ぎを起こすようにぶれて、かなり使いづらい。
![win95.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159764/fed18451-9326-a105-85db-d13bfa2e4119.jpeg)　Windows95の起動画面　　　　　　　　　　　　　　　　　　　ディスクトップ画面

#windows98システムディスクの作成
　#windows95システムディスクの作成とほぼ同様。但しFDが2枚となり、セットアップ途中での交換が必要となる。

#windows98の実行
　#windows95の実行とほぼ同様。

　起動画面(youtube)
　[MiSTer (FPGA) ao486: Booting into Windows98](https://www.youtube.com/watch?v=cdMd4kKhCh0)
![win95.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159764/ba420cd5-1c63-84c4-46c7-d6d2b398abfb.jpeg)　Windows98の起動画面　　　　　　　　　　　　　　　　　　　ディスクトップ画面

#NESゲームの実行
　どうしてもNESゲームを実行したい場合は
　1.[NES_MiSTer](https://github.com/MiSTer-devel/NES_MiSTer)をダウンロードする。
　2.releasesフォルダに有るNES_20190719.rbfをSDカードのルートにコピー。
　3.SDカードのルートにNESフォルダを作成し、所有している\*\*.nesを格納。
　4.SDカードを装着し電源ON、メニュー画面からNESを選択。
　5.「windows」キーと「F12」キーの同時押しでメニューを表示させLoadで\*\*.nesを選択。
　6.右矢印でSystemメニューを表示させ、Save settingsを選択してから、Rebootを実行、メニューから再度NESを選択する。


#プログラムの変更
　コンパイルを行うと、使用しているaltera_16550_uartにライセンス(58k円也)が必要と言われます。
　ライセンスが無いと悲しいことに、rbfが作成されないので実行できないのです。
　これを回避するには「syste.qsys」を起動してシステムから「uart」を削除する(無くとも取り合えず動く)。
　これだけではエラーが出るので、「a0486.sv」の335行当たりに有るuart関連をコメントアウトすると作成可能となります。
　ただし、ao486のコンパイルには約50分を要したので、根性のない身にはかなり厳しい。


<BR>
　MiSTerはDOS/Windows以外にアーケード系のゲームも(ROMが有れば)実行可能なマルチエミュレーターなので、xeviousの画面をトリニトロンで見てみたいような気もしますが、先立つものが必要となり、実現はなかなか難しいでしょうね。
　なお、もし追試する奇特な方がおられた場合、上記記載内容は無保証であり、各自の責任においてご利用願います。