IchigoJamでのBASICプログラミング その1
IchigoJamでのBASICプログラミングは、コードを記述するメモリー領域が
1Kバイトしかないため、ちょっとしたプログラムを書くとすぐにメモリーオーバーとなります。
色々と工夫が必要です。
まず、実用的なプログラムとして1/60秒カウンタ TICK()関数を使って
時計を作成してみました。

10 CLS 20 H=18:M=48:S=0 30 ?"H=";:INPUT H 40 ?"M=";:INPUT M 50 ?"S=";:INPUT S 60 CLS:CLT:GOTO 100 80 T=TICK():IF T%60=0:GOTO 100 90 GOTO 80 100 S=S+1:IF S=60 S=0:M=M+1:IF M=60 THEN M=0:H=H+1:IF H=24 H=0 110 LC 0,0:? " " 120 IF H<10 ?"0"; 130 ?H;:?":"; 140 IF M<10 ?"0"; 150 ?M;:?":"; 160 IF S<10 ?"0"; 170 ?S 180 GOTO 80
IchigoJamは時計機能は無いのですが、TICK()関数でも
実測で24時間で5分程度のズレ(0.34%のずれ)の時計が出来ました。
この程度のズレなら、ラーメンタイマーやプレゼンテーションタイマーに使えます。
(効果音は当然チャルメラ♪)
CPU NXP LPC1114のデーターシートを見ると内部クロック(CR発振回路)のずれは1%
と明記しています。水晶振動子で外部から正確なクロックを与えたらもっと精度が
上がるかもしれません。
「取りあえず使えそうだ、実用には時刻を大きく表示したい!」ということで、
キャラクタ文字で数字を作成しようと試みると、
0〜5までの文字で"Out of memory"が発生しました。
これは想像以上に厳しい。
そこで、1文字3x5のパターンをビットデータに置き換えて配列に格納することにしました。
1文字3x5=15ビット(2バイト)なので1文字は配列の1変数に格納できます。
取りあえず、文字の表示の確認。実行結果は下記の通り。見た目はいい感じです。

10 CLS 30 [0]=31599:[1]=4681:[2]=29671:[3]=29647:[4]=23497 40 [5]=31183:[6]=31215:[7]=29257:[8]=31727:[9]=31695 50 [10]=1040:[11]=0:[20]=32:[21]=1 100 N=0:P=0:Q=0 210 X=P:Y=Q:GOSUB 500 220 N=N+1:IF N=10 N=0 230 P=P+4:IF P>35 P=0:Q=Q+6:IF Q >20 ?:END 240 GOTO 210 500 B=12 510 D=[N]>>B&7:GOSUB 600:IF B>=0 GOTO 510 520 RETURN 600 LC X,Y:?CHR$([20+(D&4>0)]);CHR$([20+(D&2>0)]);CHR$([20+(D&1>0)]); 610 Y=Y+1:B=B-3 620 RETURN
プログラムは、こんなにも短く出来きました。
(ソース見ても何やってるか分からない状態でが..)
しかし、処理時間がかかり過ぎて実用的でないです。
実際の動作の様子の通りです。
これでは、秒刻みの時計はちょっと無理そうです。
う〜ん、遅い。昔の8ビットパソコンに比べても2桁遅い気がします。
まあ、1チップでNTSCのビデオ信号生成までやってるので、これは仕方がないですね。
分刻みの時計ならいけるかも。
制約が大きい分、かなりの工夫が必要となります。
テクニックとアイデアを駆使せねばなりません。
つぎは、「ブレゼンハムのアルゴリズム」を使って整数演算だけで円を書いてみます。
« ReadyNAS上に電子書籍閲覧サーバーを試しに作ってみました | トップページ | IchigoJamとArduinoとの連携(1) »
「IchigoJam」カテゴリの記事
- Ichigojam Rが届きました(2021.02.05)
- β版 IchigoJam Rを予約注文しました(2021.01.23)
- IchigoJamのファームウェア 1.4.1が正式に公開されました(2019.12.10)
- 「ichigoツール」をGithubにて公開しました(2019.11.09)
- ichigojamのファームウェアを1.4b13にアップデートしました(2019.11.06)
« ReadyNAS上に電子書籍閲覧サーバーを試しに作ってみました | トップページ | IchigoJamとArduinoとの連携(1) »

コメント