M5Stackでプログラム その7

M5Stackを手に入れて以来、主に移植ではあるけれどいろんなエミュレータを動かしてきた。

エミュレータが好きというよりは、作ったものはエミュレータが圧倒的に多いというだけの話なんだけど(^^;;

 

CP/M-86エミュレータ

作者様がいることなので、ちゃんと書いておこうと思うが、今回移植したプログラムは、V20-MBCというワンボードマイコンエミュレータとなっている。

f:id:PocketGriffon:20210913155115j:plain

ある時、キットの状態で手に入れて、長い期間ドハマリした(^^)

ここのブログでもV20-MBCで検索するとたくさん記事が出てくるはずだ。

V20-MBC の検索結果 - レトロパソコンであそぼう!

去年のちょうど今ころ、持病を悪化させて4週間ほど入院したのをきっかけに、V20-MBCから離れてしまった。

 

このV20-MBCMS-DOSを移植してみようと考えつつ、テストを簡単にするためにV20-MBC自体のエミュレータを開発していた。これも途中で開発が止まってしまっている…汗

今回は、この時開発をしていたV20-MBCエミュレータのソースをM5Stackに移植した!

 

なんとなくだけど、M5Stackで負荷の高いプログラムを動かしてみたかった!

そのためには(手元にある)8ビットマシンのエミュレータでは荷が軽く、16ビットマシンのおでましとなったワケだ!(^^)

さすがにV20(8086)ならばパワー不足で困っちゃうんだろう!

速度が遅くなるサマを見てやるぜ(^-^)

 

別の話として、手元に高性能8ビットマシンのエミュレータ、16ビットマシンも含めて作り置きをしておこう…と思った(^-^;;

 

性能評価

まずはいきなり結果から(^-^)

時間がかかる処理って何があるんだろう…と思ってディスクの中を探ってみたら、ちょうどよいベンチマーク的なマンデルブロ集合があった。

f:id:PocketGriffon:20210913161744j:plain

文字が小さくて申し訳ないが、30行目のコメントに「2分43秒」と書かれている。

これがV20-MBCで実行した時間だ。

ネットで調べてみたら、ベンチマークを掲載してくれてるページがあった!

Retro PC Gallery

 

さっそく移植したエミュレータでも実行をしてみたところ、結果は2分06秒となった!

あれ??V20-MBC実機よりも速いじゃん!(-_-;;

実際にM5Stack上で使ってみると、ホントにV20で動いてるCP/M-86な感じがする。なにかするとぐっと待たされる感覚が当時を思い出していいね!

 

f:id:PocketGriffon:20210913163459j:plain

元々のV20-MBCパッケージに含まれていたプログラムは、あらかた動いたような記憶があるけれど、一部結果が違うアプリもありV20エミュレータ自体の信頼性がイマイチだ(^^;; 特にコンパイラ系はダメかも。

 

f:id:PocketGriffon:20210913163611j:plain

デバッガであるDDT86もちゃんと動く。写真は撮り忘れてしまったけど、トレース機能もちゃんと動く。

 

CP/M-86エミュレータの移植

今回移植に使ったプログラムは、MacOSX上で動いていたコンソール上で動くモノだ。コンソール用という事でMacOSXに依存している部分は無く、ソースは無変更でLinuxでも、おそらくWindowsCygwinとかWindows Subsystemでも動くはずだ。

 

移植したCP/M-86の内部構造は、CP/M80とほぼ同じになっている。

画面制御部分などはソースが共通だ(^^;

CPUがZ80からV20(8088)に変わったくらい??

f:id:PocketGriffon:20210913164153j:plain

まずはシリアルを端末として見立てた状態でCP/M-86を起動させた。この方法でデバッグを十分に済ませたのちに画面表示系を作った。CP/M80と構造が同じということで、簡単に動くと思っていたのだが、ちょっとハマってしまった…。

 

CP/M86で扱うディスクサイズが大きくなった事から、一気にメモリに読み込んでおく事が困難になった。そのため、最低限の情報のみメモリに読み込んでおき、状況に応じてこまめに読んでいく手法を取った。

 

そしたら…SDカードを読みに行くタイミングでいくつかの問題が起きた。全然意識していなかったが、SDカードとLCD更新がバッティングするっぽい。そうなの??

この辺りで問題が起きたが、なんとか安定して運用が出来るようになった。

 

f:id:PocketGriffon:20210913170127j:plain

キーボードを繋げて操作していると、とても懐かしい感覚になる!

こんな小さな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を使わなくなるわけではない。ほとんどの事をコンソールで済ませる私が、これほどまで画面に出力するのを楽しめたことは珍しい(^^)

この先も画面出力が必要なプログラムでは、積極的に使っていくと思う!

 

ではまた次回!(^-^)ノ