今回も動画からですが、物凄い地味な動画からです。とは言え、内容的には大きな成果ではあります。
地味な割にじっくり見てもらいたい部分があるので、ダウンロード推奨です。
お馴染みのBASIC9を読み込んで起動させ、time.bsという数行の簡単なBASICプログラムを走らせてます。一見ただ画面の左端を数字がカウントアップしてるだけの5秒位の動きですが、
---------------------------
1 POKE &H0219,0:POKE &H0218,0
10 POKE &H8000,0
20 PRINT PEEK(&H0218)*256+PEEK(&H0219)
30 GOTO 20
----------------------------
10 POKE &H8000,0
20 PRINT PEEK(&H0218)*256+PEEK(&H0219)
30 GOTO 20
----------------------------
中身はこんな感じです。メモリの0x0218と0x0219に0を書き込んで後は繰り返し読み出して表示しているだけです。これESP32からおよそ100ミリ秒のタイマー割り込みを受けて。1秒毎にカウントアップするようになってます。
動画編集ソフトのAvidemuxで1から2に変わる境目が 1:14.333 2から3に変わる境目が1.15.366 なんで おおよそ 1秒で1カウントアップする感じになってます。
でそれを踏まえて、アスキー文字でマンデルブロ図形を表示するプログラムの開始と終了の時間差を出して 130秒前後 の結果が出ました。
このタイマーの元ネタは JR2XZY ブログ の シリアル通信速度自動設定編 に出てくるPICの出力を見てたら、GPIOピンが一本空いてるのに気が付いて、見たらおおよそ100ミリ秒のパルス出てるのを見付けて、タイマーモドキに使えない?って考えて 実機のSBCのFIRQに送ってイロイロやっては見たけど 結局動かず。FIRQの処理中に次のパルスが来て無限ループしてるからかとか考えて、FIRQの処理中はパルス止める手段を加えないと無理かななんて思っていたんですよ で、エミュレータの中ならその辺はどうとでもなるかなとやってみたんですが 特に パルス止める処理とか必要なかったです。上に出てるBASICプログラムの10行にある 0x8000番地に0書き込んでるのは、リセット直後はFIRQの割り込みパルスを無視させてるの解除するためのポートなんですが、今は機能してません。このポート自体 開放して無効にしてます。 実機のSBCに今回改良したBASIC9をROM焼きして動くかはまた後日やることにします。
このタイマーの元ネタは JR2XZY ブログ の シリアル通信速度自動設定編 に出てくるPICの出力を見てたら、GPIOピンが一本空いてるのに気が付いて、見たらおおよそ100ミリ秒のパルス出てるのを見付けて、タイマーモドキに使えない?って考えて 実機のSBCのFIRQに送ってイロイロやっては見たけど 結局動かず。FIRQの処理中に次のパルスが来て無限ループしてるからかとか考えて、FIRQの処理中はパルス止める手段を加えないと無理かななんて思っていたんですよ で、エミュレータの中ならその辺はどうとでもなるかなとやってみたんですが 特に パルス止める処理とか必要なかったです。上に出てるBASICプログラムの10行にある 0x8000番地に0書き込んでるのは、リセット直後はFIRQの割り込みパルスを無視させてるの解除するためのポートなんですが、今は機能してません。このポート自体 開放して無効にしてます。 実機のSBCに今回改良したBASIC9をROM焼きして動くかはまた後日やることにします。
で、動画の終わりくらいにちょろっと出てくるのが マンデルブロ図形くらいだと地味すぎるんで matrixの文字の雨 を BASICでできないかとやってみたわけです。 遅いBASICでは期待したほどスムーズじゃなかったので別動画に撮り直して5倍速に加工したものが
BASIC9,ExBasROMに共通の内部仕様なんだが、PRINT文で一文字だけ出力しても即時に送られるわけではなく、改行コードが来るか、バッファが溢れるかで送出を始める仕様なようで、しかもその際に勝手に改行コードを付加しているようでエスケープシーケンスの塊を送ってる最中に間に勝手に改行コードなんて入れられると意味が違って解釈され画面が乱れてしまう。tek4010へのグラフ表示のときにも引っかかった問題で今回もハマってます。もともとラインプリンタとの共用ルーチンだった名残でこうなっているんだと思うんだが 深く掘り下げるのには 自分では能力不足だから諦めた。長話になってきたのでこの辺で切り上げる。この次の機会には、今回のエミュづくりで見付けた 自分のやらかしのバグの話やBASICに潜んでたバグについて書こうと思う。
コメント
コメントを投稿