「リモートメッセージディスプレイ」とりあえず完成

bluetoothで液晶を制御して描画できるデバイスです。
当初、液晶描画用コマンド、画面保存コマンドを考えていましたが、都度コマンドを作るのは面倒なので、プリミティブな処理関数とLispライクなスクリプトエンジン載せました。
bluetoothのシリアルポートターミナルでスクリプトコードを書いて実行や電源投入後自動的にSDカードに保存したスクリプトコードをロードして実行できます。

★ランダムに円を書くスクリプトを実行

スクリプトはこんな感じです。


( progn
 ( setq @c 2 )
 ( concurrent
  ( progn ( locate 0 0 ) ( puts ( timestamp ) ) ( if ( keyup ) ( setq @c ( clip ( getnumtp ) 1 30 ) ) ( nop ) ) )
  ( while 1 ( progna ( circle ( rands 240 ) ( rands 320 ) @c ( rand ) 0 ) ) )
 )
)

BMP選択メニューを表示して、BMP表示するスクリプトを実行

スクリプトはこんな感じになります。

( progn
 ( setq @b 0 )
 ( setq @c ( filelistbs "*.BMP" 16 ) )
 ( while ( progn ( clrscr 0xffff ) ( data 1 ) )
  ( switch
   ( menubox "↑" ( load @b ) ( load ( + @b 1 ) ) ( load ( + @b 2 ) ) ( load ( + @b 3 ) ) "↓" )
   ( if ( > @b 0 ) ( setq @b ( - @b 1 ) ) ( nop ) )
   ( progn ( loadbmp 0 0 ( load @b ) ) ( while ( == ( touchy ) -1 ) ( nop ) ) )
   ( progn ( loadbmp 0 0 ( load ( + @b 1 ) ) ) ( while ( == ( touchy ) -1 ) ( nop ) ) )
   ( progn ( loadbmp 0 0 ( load ( + @b 2 ) ) ) ( while ( == ( touchy ) -1 ) ( nop ) ) )
   ( progn ( loadbmp 0 0 ( load ( + @b 3 ) ) ) ( while ( == ( touchy ) -1 ) ( nop ) ) )
   ( if ( < @b ( - @c 4 ) ) ( setq @b ( + @b 1 ) ) ( nop ) )
   ( nop )
  )
 )
)

関数は119個あります。ファイル操作、演算、制御、メモリ管理等のPC環境でも実行できる汎用的な関数は84個、PIC24Fのハードウェアを制御する関数は35個。内部で関数コードを128個としているので、もうすぐ枯渇します。