2015年07月11日18時00分

食パンと戦闘機と宝箱とネコと16進数:IchigoJamプログラミング第8回

  • このエントリーをはてなブックマークに追加
  • Pocket

 焼かない食パンの半分にバター、残り半分にイチゴジャムを塗って、半分に折って食べるのがうまいよね。こんにちわ、お手持ちのIchigoJamはもう1.0.1にバージョンアップしましたか? 前回のエントリ―(祝IchigoJam Ver1.0リリース)で触れたように、バージョン1.0で追加されたPCG(Programmable Character Generator)機能について書くつもりだったのですが、その前にどうしても避けては通れない、キャラクターパターンと16進数とPOKE文の話を先に書いておきたいと思います。

バージョン1.0からのキャラクター

IchigoJam

 上の写真が、IchigoJam 1.0のキャラクター一覧になります。以前と比べるとずいぶんにぎやかになりました。1キャラを4分割したような“疑似グラフィック”、ハートやスペードなどのトランプのマーク、おにぎりや戦闘機、宝箱?のようなゲームに使えそうなキャラもあります。
 画面写真だと隣のキャラとくっついたりしてわかりにくいところもあるので、描き起こしてみたのが下の図です。

IchigoJam

 クリックで拡大します。最後の2行のキャラがおもしろいですね。おにぎり、ネコ、音符、戦闘機、UFO、階段、ドアなどがあります。最後(一番右下)のは“イチゴ”か! よく見るとダブっているキャラもありますね。理由はよくわからないのですが。
 下の写真は、以前にも掲載したバージョン0.9.7のときのキャラクター一覧です。

IchigoJam

 まだ、まんなかあたりと最後のほうのキャラがごっそりと抜けていますね。キャラクターが増えた以外にも表示のしかたが変わっていることに気づいたでしょうか? バージョン1.0のほうは横方向に詰めて表示させています。これはIchigoJamに表示できる文字数が変更になってしまったためです。
 0.9.7では、1画面36文字×27行(288×216ドット)だったのが、1.0では32文字×24行(256×192ドット)になりました。表示できる文字数が減ってしまったのですが、実は“昔のパソコンによくあった文字数”になったとも言えます。たとえば、MSXのSCREEN 1モードでは同じく32文字×24行でしたので、当時作ったゲームが移植しやすいかもしれません。
 そんなわけで、0.9.7のように横に余裕をもって表示させると1行に収まらなくなってしまうので、1.0のほうには詰め詰めに表示させているというワケです。

POKE命令と16進数の表わし方

 上の1.0のキャラクター一覧を表示させたプログラムが以下になります。

IchigoJam

 0.9.7のときは“PRINT CHR$(xx)”という命令でキャラクターを表示させていましたが、今回は“POKE xx,yy”という命令を使っています(210行)。あ、その上の190行は、左端の“0~9A~F”を表示しているだけですので無視しても結構です。
 一般にキャラクターコード(ASCIIコードとも言います)の0~31番は制御文字と言われて、画面にキャラクターを表示する以外の目的で使われます。IchigoJam 1.0も、いくつか制御文字として使われており、PRINT CHR$を使うと表示が乱れる可能性があります。
 一方、POKEはメモリーに直接数値を書き込む命令ですが、こちらを使うと制御文字ではなく、上の写真のように設定されたキャラクターをすべて表示できるのです。なんでそうなっているかというと、まぁ、IchigoJamはそういう仕様なんだというしかありません。

POKE命令の書式は

POKE 番地,データ

です。番地はデータを書き込むメモリーの場所のことで、IchigoJamでは#900番地~#BFF番地までが画面表示用のメモリー(いわゆるVRAM)に割り当てられています。この番地内に0~255のデータを書き込めば、自動的に対応する位置にキャラクターが描かれることになります。

 なお、前に“#”が書かれるとIchigoJamでは16進数として扱われます。たとえば、#0Fは10進数だと15、逆に10進数で74は16進数で#4Aという具合。VRAMの#900~#BFFは、10進数では2304~3071になりますね。ただ、習慣的にメモリーの番地は16進数で書くことになっていますので、以降もそれにそれにならいます。

 さて、1画面が32文字×24行のとき、座標(x,y)の位置は、次の式で番地に変換できます。

#900 + y*32 + x

たとえば、(12,14)なら #900+14*32+12 = #ACC番地です。

IchigoJam

 上のプログラムの210行では、IとJをFOR~NEXTで回しながら、次々と番地に指定しています。つまり、(0,0)から(15,15)まで1つずつ移動しながら、データも1つずつ増やしながら書き込んでいます。

 ところで、先に挙げた、キャラクター一覧を見ると、おにぎりのキャラの番号は、#EB(10進数だと235)であることがわかります。というわけで、
LOCATE 12,14 : PRINT CHR$(235)
は、
POKE #ACC , #EB
と同じ意味になります。

 ちょっと駆け足になりましたが、ここまではなんとなくご理解いただけたでしょうか? IchigoJamでは、256個あるキャラクターのうち、#E0~FFまでの32個のキャラクターのデザインを自由に変更できます。すみません、この続きはまた次回。


引き続き、当サイトではみなさんの作ったIchigoJamプログラムの投稿を受け付けていますので、よろしくお願いいたします。

投稿はこちら↓から
https://ssl2.asciimw.jp/weeklyascii/ichigojam/


●関連サイト
こどもパソコンIchigoJam
PCN プログラミング クラブ ネットワーク

 IchigoJamはアスキーストアでも売っています。

BASICでプログラミング! こどもパソコン IchigoJamをアスキーストアで購入
アスキーストアで購入

[an error occurred while processing this directive]

あわせて読みたい

follow us in feedly

最新のニュース

アスキーストア人気ランキング

特集

Comic

アクセスランキング

Like Ranking

BEST BUY

みんなが買っている最新アイテムはこれだ!