フォト
2017年11月
      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    
無料ブログはココログ

« Propeller始めました(11) アセンブラでLチカ | トップページ | Propeller始めました(13) ステッピングモーターの制御 »

2015年12月12日 (土)

Propeller始めました(12) TV出力ドライバーライブラリの作成

取りあえず、今までの試作を元に、日本語テキスト表示を行うドライバーライブラリを
作成しました。今回、初めてアセンブラを一部利用して本格的なドライバを作成してみました。
CPUコア的には3コア利用しています。

Dscn4567

ドライバライブラリを使ったソースは下記の通りです。
お手軽に日本語表示出来ます(逆にそれしか出来なんだけど...)

spin言語がglue(のり)となって、部品を繋ぎ合わせてプログラミングが出来ます。
アセンブラ等のややこしいとろこは見えません。

Src

実装においては、アセンブラにて高速化を行ったつもりですが、
やはりSDカード上のフォントを検索して表示しているため、その部分がボトルネックとなり
思ったほど高速化出来ませんでした。

また、アセンブラのコーディングにおいてはスタックが使えない点と
メモリーが全部レジスタのため、からだが痒くなるような落ち着かない気分での
作業となりました。

その点を含め、今回の実装でプロペラののアセンブラプログラミングの流儀の
いくつかを学ぶことが出来ました。

アセンブラ命令語は、分かり易く強力な命令があります。
下記の例のように通常の命令に修飾子をつけて機能を付加できます。

01

上記のand命令のお尻に wznr を付けて zフラグ(演算結果が0の場合はセット)の
セット指定、nr(演算結果を設定にない)を付けて、代入せずzフラグだけの
結果を取得することができます。

通常のmov(値のセット)にも if_z等を付けて、zフラグがセットされている場合に
実行する等の条件を付けることができます。

プロペラのアセンブラプログラミングでは積極的に自己プログラム変更を行うのが
流儀のようです。プログラムを積極的に書き替える命令があります。

02

上記のmovd :arg ,#f_x は ラベル:arg rdlongdstの内容を書き換えることが出来る
命令文です。add :arg,d0 rdlongdstを変更して読み込みデータの格納アドレスを
インクリメントしています。
メモリー制約が厳しい(1コアのメモリは2kバイト)のでこのようなテクニックを使うのでしょうね。

 

« Propeller始めました(11) アセンブラでLチカ | トップページ | Propeller始めました(13) ステッピングモーターの制御 »

Propeller」カテゴリの記事

表示器制御関連」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/62855951

この記事へのトラックバック一覧です: Propeller始めました(12) TV出力ドライバーライブラリの作成:

« Propeller始めました(11) アセンブラでLチカ | トップページ | Propeller始めました(13) ステッピングモーターの制御 »