今回も動画からですが、物凄い地味な動画からです。とは言え、内容的には大きな成果ではあります。 地味な割にじっくり見てもらいたい部分があるので、 ダウンロード推奨 です。 お馴染みの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 ---------------------------- 中身はこんな感じです。メモリの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書き込んでるのは、リセット直後...
まずは、動画を上げてみる。これはシリアル接続での実際の使い方の参考例動画で 全部で10分ほどです。音も字幕による解説も何も入れてません。googleの都合で、画質を落とされるので、端末の文字などをくっきり見たい方は 4shared で 上げているので、22メガ程のサイズですがダウンロードしてローカルで再生してみてください。 おおまかな流れとしては、SDの中身をDIRコマンドで一覧したり。LOADコマンドでGAME09インタプリタをロードして、GAME09にはリセットベクタなどの情報は含まれないのでVSETでスタートアドレス(0x9000)を設定して。一度 起動させます。そのまま CTRL+D で コマンドプロンプトに一度戻ります。 そこで GAME用のソースファイル MAZE.GB をLOADコマンドで読み込み。テキストデータの従来のGAMEプログラムソースはGAMEインタプリタの扱うメモリ空間に直接与えても受け付けてくれませんのでそれ用に変換した言わばGame source Binaryということで拡張子にGBを付けて区別してます。同様にBASICのソースもメモリ上では中間コードに変換して保持されるので従来のBAS形式では受け付けてくれません。GAMEの.gbファイルは簡単なpythonプログラムで変換できるのですが、BASICの中間コードの変換はかなり面倒なので、端末上のコピペ転送で一度読ませて、BASIC自体に変換させて保存する方法で間に合わせてます。 さて maze.gbファイルの読み込みが済んだら。そのままGOコマンドで戻るとソースエリアをクリアされて消えるので、VSETで0x9003(GAME09のホットスタート番地)を設定してGOコマンドで戻ります。0と打ってリスト表示を確認して、#=1で実行。適当に数回ループさせて CTRL+D で コマンドプロンプトに戻ります。CTRL+CだとGAMEインタプリタに戻ります。次にLOADでsieve.gb lifegame.gb othello.gb と読み込んでは実行の流れを繰り返してます。CTRL+D は キー入力部で判読してるので 数値入力待ちのときに打てば強制的にプログラムを終了してコマンドプロンプトに戻ってこれます。GAMEインタプリタでの動作の後は同じものをコンパイルしたオブジ...