M5Stackを手に入れて以来、主に移植ではあるけれどいろんなエミュレータを動かしてきた。
エミュレータが好きというよりは、作ったものはエミュレータが圧倒的に多いというだけの話なんだけど(^^;;
CP/M-86エミュレータ
作者様がいることなので、ちゃんと書いておこうと思うが、今回移植したプログラムは、V20-MBCというワンボードマイコンのエミュレータとなっている。
ある時、キットの状態で手に入れて、長い期間ドハマリした(^^)
ここのブログでもV20-MBCで検索するとたくさん記事が出てくるはずだ。
去年のちょうど今ころ、持病を悪化させて4週間ほど入院したのをきっかけに、V20-MBCから離れてしまった。
このV20-MBCにMS-DOSを移植してみようと考えつつ、テストを簡単にするためにV20-MBC自体のエミュレータを開発していた。これも途中で開発が止まってしまっている…汗
今回は、この時開発をしていたV20-MBCエミュレータのソースをM5Stackに移植した!
なんとなくだけど、M5Stackで負荷の高いプログラムを動かしてみたかった!
そのためには(手元にある)8ビットマシンのエミュレータでは荷が軽く、16ビットマシンのおでましとなったワケだ!(^^)
さすがにV20(8086)ならばパワー不足で困っちゃうんだろう!
速度が遅くなるサマを見てやるぜ(^-^)
別の話として、手元に高性能8ビットマシンのエミュレータ、16ビットマシンも含めて作り置きをしておこう…と思った(^-^;;
性能評価
まずはいきなり結果から(^-^)
時間がかかる処理って何があるんだろう…と思ってディスクの中を探ってみたら、ちょうどよいベンチマーク的なマンデルブロ集合があった。
文字が小さくて申し訳ないが、30行目のコメントに「2分43秒」と書かれている。
これがV20-MBCで実行した時間だ。
ネットで調べてみたら、ベンチマークを掲載してくれてるページがあった!
さっそく移植したエミュレータでも実行をしてみたところ、結果は2分06秒となった!
あれ??V20-MBC実機よりも速いじゃん!(-_-;;
実際にM5Stack上で使ってみると、ホントにV20で動いてるCP/M-86な感じがする。なにかするとぐっと待たされる感覚が当時を思い出していいね!
元々のV20-MBCパッケージに含まれていたプログラムは、あらかた動いたような記憶があるけれど、一部結果が違うアプリもありV20エミュレータ自体の信頼性がイマイチだ(^^;; 特にコンパイラ系はダメかも。
デバッガであるDDT86もちゃんと動く。写真は撮り忘れてしまったけど、トレース機能もちゃんと動く。
CP/M-86エミュレータの移植
今回移植に使ったプログラムは、MacOSX上で動いていたコンソール上で動くモノだ。コンソール用という事でMacOSXに依存している部分は無く、ソースは無変更でLinuxでも、おそらくWindowsのCygwinとかWindows Subsystemでも動くはずだ。
移植したCP/M-86の内部構造は、CP/M80とほぼ同じになっている。
画面制御部分などはソースが共通だ(^^;
CPUがZ80からV20(8088)に変わったくらい??
まずはシリアルを端末として見立てた状態でCP/M-86を起動させた。この方法でデバッグを十分に済ませたのちに画面表示系を作った。CP/M80と構造が同じということで、簡単に動くと思っていたのだが、ちょっとハマってしまった…。
CP/M86で扱うディスクサイズが大きくなった事から、一気にメモリに読み込んでおく事が困難になった。そのため、最低限の情報のみメモリに読み込んでおき、状況に応じてこまめに読んでいく手法を取った。
そしたら…SDカードを読みに行くタイミングでいくつかの問題が起きた。全然意識していなかったが、SDカードとLCD更新がバッティングするっぽい。そうなの??
この辺りで問題が起きたが、なんとか安定して運用が出来るようになった。
キーボードを繋げて操作していると、とても懐かしい感覚になる!
こんな小さな16ビットマシンを操作できるなんて…とピュアに思ったが、目の前にあるM5Stackは32ビットマシンだった(^^;;
重たい処理でひーひー言わせちゃうぜ!と思ったが、ベタ移植しただけで実機の速度を上回ってしまった。やっぱり速いなM5Stack!
でも実を言えば、今以上の高速化を出来る要素が何も無い。8088という事でメモリ空間は1024KBに広がった。そのサイズは内部RAMには入り切らないため、PSRAMへ逃さざるを得なかった。
これは…ちょっとジレンマかも。規模が小さいといろんな工夫が出来て楽しいけれど役不足感、規模が大きくなると工夫できる余地がほとんど残されない(^^;; ぐぬぬ…どっちが楽しいんだコレは!(もっと素直に楽しめw)
CP/M-86を使った感覚はCP/M80とそっくり。速度も大して変わらない。
となると、CP/M-86じゃなくても…という感覚に襲われる(^^;;
今回は(も)CP/M-86が移植できた…という自己満足で終わってしまった!(T-T)
さて、ここ2週間ほどM5Stackを集中して使っていたが、一旦離れようと思う。
とは言ってもM5Stackを使わなくなるわけではない。ほとんどの事をコンソールで済ませる私が、これほどまで画面に出力するのを楽しめたことは珍しい(^^)
この先も画面出力が必要なプログラムでは、積極的に使っていくと思う!
ではまた次回!(^-^)ノ