SMART Response XEでプログラミングを続けてる!
でもそろそろ区切りをつけようと思っているので、取り組んだことをご紹介。
XEのCPUであるAVRは、8bit長レジスタ構成になっていて16MHz駆動らしい。
そして多くの命令が1クロックで実行できるっぽい。
ということは、ざっくりとZ80で換算したら64MHzくらいの速度になるんだろうか?
もっともAVRの命令自体がRISCなので、Z80の1命令=AVRの1命令とはならない。
その辺りを鑑みたとしても、感覚的な速度は意外と速い。
SMART Response XEでどんなものが動くんだろうか?
思いつく いくつかの実験を繰り返した。
Bad Apple!!
私と言えばBad Apple!!??
そういうつもりでは無いのだが、大容量データ、データ転送速度、圧縮データの展開速度、画面更新などをまとめて試すには良い題材なのだ!(^^)
SMART Response XEでBad Apple!!
— PocketGriffon (@GriffonPocket) 2021年11月18日
容量と根性の関係で100フレームしか入らなかった!しかも遅い…(・・;)
うーんイマイチでしたね…#SMARTResponseXE pic.twitter.com/tpq9vDq9ll
絵のデータについては最初から全部入れるのを諦めていた。
PC-1600Kのサイズ(64x32ドット)ですら全データで884KBもあるシロモノなのだ!それよりも画面サイズの大きなXEで、かつFLASHメモリは128KBしかない。
試してみたところ、配列を格納しているデータサイズが32KBを超えたところでエラーになってしまうようだ。アドレッシングの問題かも知れないが、どうもそういう仕様なのだと思う。32KBに分割したデータをいくつか持てば良いのだろうけれども、そのデータをアクセスするプログラムコードはちょっと面倒になる。
結局、32KBに収まるだけのデータ(100枚)で気持ちが萎えてしまった(^^;
「FLASHに置いてあるデータから読み出す」→「圧縮データを2ビット1ドットのデータに展開する(ランレングス圧縮されている)」→「2ビット1ドットのデータを、8ビット3ドットのLCDデータに変換しつつ転送」という面倒な事をやっているにも関わらず、それなりの速度で動く。立派にアニメーションして見えた。
結構速いよ、AVR!(^-^)
8色表示+三角形描画
当初の予定では、立方体(ポリゴン)を描画してグルグル回そうと考えていた。
フラットシェーディングにしようと思っていたので、色は多い方が良いだろう…と思い、4色のデータをタイリングする事で中間色っぽく表示させてみた。
……それっぽく見えない!?(^-^;
拡大してよーくみてみると、タイリングになっていることがわかるはずだ。
これを利用して、正面を向いている面(面の法線ベクトルの向きで判断)は白、横に向くごとに色を黒くしていけば、それっぽく見えるはずだ!
この上に2次元の三角形を描画するプログラムを載せてみる。
三角形を描画してくれるような便利な関数は存在しないので、自前で書いている。
昔書いたコードを利用しているのだが、日付を見たら2003年になっていた。
そしてこの上に3次元計算をするコードを載せていくわけだが…
これも同じく2003年に書いたコードを流用してみたのだが、ARMが載ったマシンを対象としたプログラムだったため、一部レジスタが32bitである事を期待したコードになっていた。これを8bitレジスタのマシンに移植するのは…うむむ結構骨が折れる(T-T)
結局、計算精度の問題、巨大な除算テーブルが乗せられないなどがあり、うまく移植する事が出来なかった。
仕方ないので三角形を回して終了となったw
SMART Response XEで三角形表示!
— PocketGriffon (@GriffonPocket) 2021年11月19日
何気に背景が8色っぽくなってるのも良い感じ!(^^)
本当はポリゴンで立方体を表示させてぐるぐる回そうと思ったけど、途中で面倒になってやめてしまった(^_^;)#SMARTResponseXE pic.twitter.com/RbazZIpK5V
試しに三角形を3枚表示するようにもしてみたが、意外にも速度が出てる。
やっぱりAVR速いよね?!
リクエストされたと解釈してトライフォースを回してみた!(^^)
— PocketGriffon (@GriffonPocket) 2021年11月19日
縦横比が違うのか綺麗な三角形にならないなぁ…(・・;) pic.twitter.com/9Qwbyzsk2t
PC-8001エミュレータ(未完)
やっぱチャレンジしてみないとなぁ…と思い、途中までコードを書いていた。
結果的にいえばメモリが足りず動かす事が出来なかった(T-T)
ROMや動かそうとするゲームプログラムなどはFLASHへ置くようにしていたのだが、PC-8001のRAM自体が16KB必要なこと、これを部分的に分割して持つようになど省メモリ化をしてみたのだが……
無理と判断する決定打となったのが、エミュレータのプログラムが入らない事!(T-T)
データは頑張ったら省メモリ化する事が出来そうだけど、プログラムコードを小さくするのは並大抵ではない…。ビルドも最後まで通らずあえなく撃沈(T^T)
コレで終わり?!
なんとなく一連のやってみたい事が終わってしまった…(^^;;
まとまった動くものを作りたいというよりは「このハードでこんな事したらどうなるんだろ?」的な実験ばかりしているので、最終的に残る成果がない(-_-;
せっかくなので日本人らしく花札こいこいとか麻雀とかのソフトの1本でも作ってみたいところだが…その辺りのやる気スイッチが入るのは当面先になりそうだ(T^T)
ではまた次回!(^-^)ノ