M5Stickでプログラム!その2

先日のM5Stick PC-8001エミュレータのツイートに、こんな返信があった。

 

これに返信する形で、私も冗談でPC-1350の画面を表示させたりして遊んでいたw

f:id:PocketGriffon:20210923222132j:plain

この画像はでっちあげで作ったものだが、実際にPC-1350エミュレータで動かした結果を元に、VRAMのドット情報をM5Stick上で再現したものだ。

 

利用したエミュレータは、私がSC61860(PC-1350のCPU)を覚えるために作ったものだ。CPUを覚えるためにCPUのエミュレータを作るというのは順番が逆な気もするが、そんな状態でもエミュレータというモノは作れてしまう(^^)

 

f:id:PocketGriffon:20210923222132j:plain

↑PC-1350の実ドットサイズ(150x32ドット)で表示した時。

 

このサイズだとさすがに文字を読むのも大変だ。これじゃあ見られないよなぁ…と思ったが、画面の両端が余っているのはもったいない。でも150ドットを240ドットに拡大したらキレイなドットにならないのは想像に難しくないだろう。

 

f:id:PocketGriffon:20210923222315j:plain

横を1.6倍すると同時に、縦方向も1.6倍してみた。これはLovyanGFXのpushRotateZoomを利用して、とてもお手軽に拡大させていただいた!(^^)

そしたら……おおお……意外にも読めちゃうじゃないのさ!

あおさんの楽しいノリもあるので、ここは移植してみるしかないかな!

 

PC-1350エミュレータの移植

移植元となったのは昨年の12月に作っていたPC-1350エミュレータで、このブログにも経緯を含めて事細かく書いてあるので、ぜひ参照して欲しい。

 

今読み返してみると、デバッガもアセンブラも作ってるね…。どんだけSC61860に対して恐怖心を持って挑んでんだw 結局、Hello World+αくらいで挫折っぽくなってるけど(^^;;

 

エミュレータ全体の構成としては、逆アセンブラ、ダンプ、デバッガなどがゴテゴテくっついているが、CPUエミュレーション部分のプログラムは極めてシンプルに作られていた。コメントその他を含めた行数で1000行に満たない。CPUのエミュレーションとしては破格の小ささかも??

 

結局、M5Stickに移植するに辺り、元々あった初期化部分を書き直し、メモリ周り、表示周りを追加するだけで動いてしまった。書いたコード量としては150行程度だが、すでにこれまで移植したエミュレータがあったので、そちらからソースをコピペしただけだ(^^;;

 

画面表示系は上のジョーク投稿の時にすでに書いてしまっていたので、そういう意味では「移植するぞ」と思ってから書いたコードは、ほぼ無いかも知れない…汗

 

 

動画も撮ったので、ぜひご覧になっていただきたい。

これでも相当ウェイトを入れている状態だ。

 

2MHzの6809を2つ駆動しても余裕のあるM5系のCPUなので、768KHzで動くSC61860のエミュレーションは余裕しゃくしゃくだ。贅沢にもCPUエミュレーションと画面描画で1コアずつ使ったが、どちらのコアもdelayを入れまくってる!(^^;

 

 

そういえば「M5で昔のC言語ソースコードを利用しようとすると、デバッグでprintfが使えないので苦労する」みたいなお話をDMで頂いた。そうか、普段からC++のみしか使ってない方は「extern "C"」を存じてないのか…と目からウロコ(^^;;

 

私はこんな感じの関数を *.inoに定義して使っている。ソースコードが汚いのは気にしないで欲しい(T-T) ここに載せるためだけに一部書き換えたりしてるので、もしも動かなかったら適宜直していただきたい(^^;;

f:id:PocketGriffon:20210923233955j:plain

これでC言語からメモリ確保(xmalloc)とデバッグ表示(sioprintf)が使えるようになる。

あれ?今見るとbzeroではなくmemset使ってる…うむむ…(-_-;;

 

今まで移植したエミュレータもはっきり言えば需要があるとは思っていないが、今回のPC-1350エミュレータは、さらに需要がない気がしてならない(^^;;

でもまぁ困ったことに自己満足度は高い(^-^;;

 

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