フォト
2025年3月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
無料ブログはココログ

« 2017年5月 | トップページ | 2017年7月 »

2017年6月の7件の記事

2017年6月27日 (火)

豊四季タイニーBASIC for Arduino STM32、ボード実装

「豊四季タイニーBASIC for Arduino STM32」
開発環境をブレッドボードからユニバーサル基板に移行しました。

Dscn6689

ジャンパーワイヤーから解放されてすっきりしました。

Dscn6693

現在、スクリーンエディタ部のクラスを再設計して汎用化し、差分実装にて
色々なデバイス(シリアルコンソール、液晶モジュール等)への対応を行っています。

スクリーンエディタ部分はライブラリ化して、Tiny BASIC以外のユーザーインタフェース
に利用出来るよう、思案中です^^

2017年6月15日 (木)

「豊四季 Tiny BASIC for Arduino STM32」 、v0.83に更新

現在手掛けている、Blue Pillを使った「豊四季 Tiny BASIC for Arduino STM32」、
SDカード対応してv0.83としました。

SDカードにプログラムのセーブ、ロード出来るようになりました。
やはり、名前を付けてファイルとして保存出来るのはいいですね。

03

動いている様子
FILESコマンドで、ワイルドカードが使えます。

amazonで入手出来る安価なSDカードモジュール3点は問題なく利用出来ました。

Dscn6664

06


トップの写真の画面表示は次のプログラムで行っています。

10 CLS
20 LDBMP "TT.BMP",MEM,0,0,32,32,1
30 LDBMP "TT.BMP",MEM+128,32,0,32,32
40 LDBMP "TT.BMP",MEM+256,64,0,32,32
50 LDBMP "TT.BMP",MEM+384,0,32,96,32
60 BITMAP 10,30,MEM,0,32,32,2
70 BITMAP 74,40,MEM,1,32,32,2
80 BITMAP 138,50,MEM,2,32,32,2
90 BITMAP 10,120,MEM+384,0,96,32,2

動作検証用なので、ちょっと面倒なことをやっています。
(最初から1つの画像にしておけば1行で表示できるのですが..)

次の画像ファイル"TT.BMP"から任意の部分を切り出してロードし、
2倍にして表示しています。

Tt

面白そうな機能、と思い実装してみたのですが
あまり使い道がなさそう...




2017年6月12日 (月)

Windows 10 のCreators Update 1703に失敗する..

自宅のWindows 10セカンドPCのアップデートを行ったところ、
起動しなくなってしまいました。

アップデートは、大型アップデート 「Creators Update 1703」というやつです。

なんとか、復旧してアップデート前に戻せたのですが、
何が問題か調査中...
う~ん、この現象、もはや家電と化したパソコンで発生するのは、
ちょと問題ですねぇ。Windows 10は今一好きになれない..

2017年6月 4日 (日)

豊四季Tiny BASIC、ビットマップファイルの利用を可能に..

安価なBlue Pillボードを使った豊四季Tiny BASIC、SDカードからビットマップファイルを
ロード出来るようになりました。



224x312のビットマップファイルから224x216サイズを
部分ロードして表示している様子です。
縦の切り出し位置を逐次変更することでスクロールしているように見えます。

ここで言っているビットマップファイルは
Windowsのモノクロビットマップ形式の画像ファイルです。

動画のプログラムソース

10 CLS
20 FOR Y=0 TO 312-216
30 LDBMP "CAT.BMP",GRAM,0,Y,GW,GH
40 NEXT Y
50 GOTO 20
画像はHelm42さんの猫絵を利用させて頂いています。
エラー処理等をもうちょっと、強化してからGitHubにて更新版を公開します。

2017年6月 3日 (土)

Arduino IDE添付のSDライブラリの修正

Arduio IDE 1.8.2に含まれているSDライブラリ、リソースの開放と再獲得が出来ない。
これでは、利用しているSDカードの抜き差しが自由に行えません。

そこでオリジナルのSDライブラリ
https://github.com/arduino-libraries/SD

をフォークして、自分で修正を施しました。
SD Library for Arduino
https://github.com/Tamakichi/SD

修正内容
1)SD.end()の追加
2)SD.begin()で直前に利用していたリソース開放を行うように修正
3)ファイル名に半角カタカタの利用が可能

大した修正ではないのですが、効果絶大SDカード使い勝手が良くなります。
これで抜き差ししても、SD.begin()を実行すればSDカードを再認識してくれます。

SDライブラリは豊四季Tiny BASICでも利用しています。
この修正で、ファイル名に半角カタカナが使えるようになりました。
抜き差ししても、SDカードを再認識出来ました。

01

関連記事
・SDライブラリのマルチメディアカード(MMC)対応
  https://nuneno.cocolog-nifty.com/blog/2017/07/sdmmc-f37a.html

IchigoJamに関しての不満

FacebookのIchigoJam-FANにて、
開発者さんが「IchigoJamの拡張版にほしいもの大募集!」とのことで、

RENUMコマンドの不具合の対応をお願いしたのですが、
「ラベルを使え!」との回答。
この回答にはちょと「カチン」ときました。たま吉さん的には..
RENUMコマンドは、行番号の付け替えを行うコマンドで、
N-BASIC、MSX-BASIC等のBASIC言語では古くからあるコマンドです。
IchigoJamのコマンドでは、次のプログラムを

1 CLS
5 A=0
6 PRINT "Hello!"
10 A=A+1
20 IF A<10 GOTO 6
30 END

RENUMコマンドで
RENUM  100, 10

と実行して行番号の付け替えを行うと、
結果は
100 CLS
110 A=0
120 PRINT "Hello!"
130 A=A+1
140 IF A<10 GOTO 6
150 END

となり、GOTO文の飛び先が元のままのため、
プログラムを実行すると動かなくなります。
これは、明らかに問題(欠陥)なのです。

なぜ対応して頂け無いのかを質問すると、
「優先度が低い、実装方式が中間コードを使っていないため、難しい」との回答でした。
さらに、
「ラベルを使わない理由がなんかあるのか!」
とのなんか、角の立つような嫌な回答..
まあ、「つまらんことに突っ込むな」的な意味の回答なんだろうなぁ
不具合の対応よりも、機能拡張の方が優先度が高いらしい..

利用者、お金を払って企業が販売している製品を購入した私からすると、
中身の実装方法なんて全然関係ないし、
昔のBASICのGOTO文といったら、行番号指定が定番、
利用者としては当然、行番号を使おうが、ラベルを使おうが自由ななず..

なんか一気に使う気が無くなった。
荒探しをすると、色々とありそれ含めて見守ってきたですが、
今まで更新のたびに不具合等を見つけて連絡してきたがそれもやめよう..

もう一点、不満な点
IchigoJamはとにかく遅い。本来のLPC1114は、もっとパフォーマンスがもう少し良いはず。
STM32F103C8T6のTiny BASICと比べると1万回ループ、ライフゲームの1世代表示等
で比べると100分の1以下の性能。本来なら2~3分の1程度はでるはず。
この当たりは改善の余地があるので、根本的に実装を見直していただきたい。

2017年6月 1日 (木)

豊四季 Tiny BASIC for Arduino STM32の動作テスト(4) - 文字の拡大表示

現在取り組んでいる「豊四季 Tiny BASIC for Arduino STM32」の動作確認の続きです。

内蔵しているRTCから時刻を取得して、拡大文字で時間を表示するデモです。


プログラムソース

10 CLS
20 GETTIME H,M,S
30 @(0)=H/10:@(1)=H%10
40 @(2)=10
50 @(3)=M/10:@(4)=M%10
60 @(5)=10
70 @(6)=S/10:@(7)=S%10
80 FOR I=0 TO 7
90 BITMAP I*24+10,20,FNT,@(I)+ASC("0"),6,8,4
100 NEXT I
110 GOTO 20

GETTIMEコマンドで時刻を取得して、
BITMAPコマンドを使って、6x8ドットの文字を4倍に拡大して表示しています。
処理的には単純です。

内蔵しているRTCは外付けのボタン電池でバックアップをしており、
電源を切っても時刻を刻んでくれます。

Dscn6653

一ヶ月か1っヶ月半前に時刻をセットしたのですが、7分もずれています。
あまり精度は良く無いです。

ここで、1回ループ当たりの処理にかかる時間をTICK()関数で測定したのですが、
値は0でした。
TICK()関数、現時点の仕様は0.1秒刻みなのですが、これだと役に立たないっぽい。
長期の時間測定はRTCを使えば良いので、TICK()は1ミリ秒刻みにして
処理時間計測に利用出来るように修正します。

« 2017年5月 | トップページ | 2017年7月 »