※個人の感想ですスマートフォン用の表示で見る※個人の感想ですこの広告は、90日以上更新していないブログに表示しています。2015-10-13(続)IchigoJamで32x16ドットマトリクスLEDを制御するIchigoJamはじめに前回の記事では結局BASICでは、IchigoJamのBASICからでは速度的につらかった。本気でやるときは機械語でよろしくすべし。いうことになったので、今回、機械語でよろしくすべく色々やってみたことをここに記す。www.facebook.comどこをマシン語で?前回記事のBASICソースで言うところの内側16回ループのところ。ここは16クロック分のデータを出力するところ。BASICで言うところの仮想アドレス#700からのマシン語ルーチンで実現するようにした。外側の16回ループは16ライン分のループで、こちらはBASIC側で回している。eに相当する3つの値を渡したいところ。[35])をマシン語ルーチン側から参照するようにした。プログラムBASIC側のプログラム。省メモリ対策として空白なし、マルチステートメント化、16進は短く10進表現にといったことをしているので見にくくなっている。fori=0to15:[32]=i:[33]=[i]:[34]=[i+16]:u=usr(#700,0):next:goto26010行目、このプログラムで使用するポート0〜5にとりあえず0出力させている。端子が他の用途に使われていたかもしれないので、念のための初期化のつもり。-->「先頭のOUTn,0、有効です」との見解をIchigoJam作者福野さんからいただきました。20〜210行目、16クロック分を出力するためのマシン語ルーチン。アドレス#700からの配置。220〜230行目、前回記事の110〜120行目に相当。240〜250行目、同じく前回記事の130〜140行目に相当。260行目、16ライン分のループ。マシン語ルーチンへは3つの16ビット値を渡す必要がありBASICの配列[32]、[33]、[34]を使用している。16行表示したら先頭行に戻るべくgotoしている。マシン語ルーチン側のプログラム。これをbin2pokeしたものが、上記BASICソースの20〜210行めのpokeとなる。*/}GPIO1のポート0〜3、8〜9を使う。BASICの配列[32]、[33]、[34]へは、関数の第2パラメータをベースに、配列格納領域の先頭0x800を加算し、さらに[0]〜[31]を飛ばすべくちょっと足し算している。結果、変数arrayが[32]を指すところから始まる。マクロGPIO1()はポート1_nのnをパラメータとして、アドレス部でマスクを実現する方法を使ってアクセスしている。書き込み値を0xfffとしているがマスクとANDするのでどれか1ビットしか操作されない。今回の「機械語でよろしくすべし」を実現するために、CソースコードからBASICのpoke文に変換するスクリプトとドライブするMakefileを以下で公開している。読者になる検索リンクはてなブログブログをはじめる(無料)お知らせ最新記事ロードバイクの乗り始めに何を買ったのか(5)ロードバイクの乗り始めに何を買ったのか(4)ロードバイクの乗り始めに何を買ったのか(3)ロードバイクの乗り始めに何を買ったのか(2)ロードバイクの乗り始めに何を買ったのか月別アーカイブはてなブログをはじめよう!rohiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。