今回は、ビットシフトについて説明します。ビットシフトというのは、ビットをずらす(シフト)ことです。ずらすのは左右どちらでもできます。このビットシフト、何の役に立つのかというと、計算(乗算、除算)やゲームなどのマップデータ展開などに使うことができます。
また、LED看板やスクリーンセーバーなどでよみ見られる、文字が左右に流れていくテロップ表示などでも利用することができますし、IchigoJamの場合は、PCGを利用して左右に1ドットスクロールさせることもできます。
まず、以下の数字を右にずらしてみましょう。
`10110110
これは16進数ではB6、10進数なら182です。以下のように入力すると10進数で表示されます。
?`10110110
182
?#B6
182
IchigoJamで右にビットシフトするには >> を使います。>> の左側にビットシフトする値、右側に何回ビットシフトするかを指定します。
?`10110110 >> 1
91
1回右にシフトすると値は半分になります。182の半分、つまり91です。2回シフトすると4で割った値になります。確認してみましょう。なお、奇数の場合、小数点以下は全部切り捨てになります。
?`10110110 >> 2
45
ちなみに、IchigoJamの数値は16ビットなのですが、最上位ビットが1の場合は負数として扱われます。
?`1000000010110110
-32586
ここでビットシフトするとどうなるでしょうか。
?`1000000010110110 >> 1
16475
なんと、負数がいきなり正数になってしまいました。これは、右にビットシフトすると最上位ビットが0になるためです。つまり
1000000010110110
↓
0100000001011011
となったわけです。負数をビットシフトする場合は、注意して行う必要があります。また、正数でも左にビットソフトする場合、最上位ビットが1になると負数になってしまいます。
ということで、このビットシフトを利用して、PCGで1ドットスクロールを行ってみましょう。PCGは#700のメモリから文字の形状が入っているので、これを左にビットシフトさせてみます。
なお、PCGの場合は数値(16ビット)と違い8ビットになります。先にプログラムを見てみましょう。
10 CLP
20 FOR I=#900 TO #900+32*10
30 POKE I,#E0
40 NEXT
50 FOR I=#700 TO #707
60 A= PEEK(I)
70 B = A & #80 >> 7
80 A = A << 1
90 POKE I,A|B
100 NEXT
110 GOTO 50
60行目でPCGのデータを読み出しています。70行目は何をやっているかというと、エンドレスで同じ形状をスクロールさせるために、8ビット目を取りだし最下位ビットになるように調整しています。
80行目でビットシフトを行います。90行目でビットシフトした文字の形状を書き込みます。ここで論理和 (|) を使って、70行目で取り出した8ビット目とともに書き込みます。
これで、同じ文字の形状をエンドレスでスクロールさせることができるわけです。勉強のつもりで、文字の形状を右スクロールするように改良してみるとよいでしょう。
【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/
グーグル謹製だった位置ゲームのイングレス。数年前に申請したポータルが、今頃登録されました。申請は一年前どころじゃないので、やめてしまった人のところにも、ポータル登録したよメールが来ているはず。
まあ、家の周辺にたくさんポータルができたのはいいけど、プレイする人が減っていて、誰もポータルを壊しにこない(ハックしにもこない)。おかげで、ポータルを守った日数が180以上になり、豪華なメダルを取得できました。いいのか悪いのか……。
・InDesign JavaScript Reference
http://www.openspc2.org/reibun/InDesignCS6/ref/
・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936/
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/
・After Effects自動化サンプルプログラム 上巻、下巻
【画面の図が黒潰れになっていたのは修正されました】
https://www.amazon.co.jp/dp/4844397591/
https://www.amazon.co.jp/dp/4844397605/
・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591
・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/
・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/
・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/
・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/
・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/