IchigoJamでメモリの様子を見て見ましょう。(IchigoJam webでもOKです)
CLS:?"A"
画面を消して、画面の先頭に「A」と表示させます。
?PEEK(#900) A
メモリのアドレス#900番地(16進法、10進法では2304番目)をPEEKコマンドで見ると、65が書かれています。(参考、16しんすうをつくるHEX$(ヘックス) - IchdigoJamプリント)
?CHR$(65) A
キャラクターコード65は、「A」です。
カーソルで、AをBに変えてメモリの状態がどうなるかやってみましょう。
なぜ#900なのか?HELPコマンドを使ってみましょう。
#000 CHAR #700 PCG #800 VAR #900 VRAM #C00 LIST
IchigoJam BASICでは、メモリをキャラクターの定義(CHAR)、書き換え可能なキャラクター(PCG)、変数(VAR)、画面(VRAM)、プログラム(LIST)の順に使うことにしました。#900は、VRAMの先頭、左上を示します。
POKE#900,65,66,67,68,69
逆にPOKEコマンドで書き込んでみます。画面左上に「ABCDE」と5つの文字が表示されます。
#900ではなく、#910にするとどうなるでしょう?画面一番下に表示するにはアドレスをいくつに設定するといいでしょう?
座標を変数XとYで設定して、キャラクターコード65のAを表示する方法
X=10:Y=15 POKE#900+X+Y*32,65
BASICのコマンド、?(=PRINT)は、LC(=LOCATE)などで指定されたカーソル位置のVRAMに書き込んでいるわけです。POKEコマンドはそれを直接実行するので高速です!
RESET
RESETコマンドで再起動して、メモリ(RAM)の状態を見るモニタープログラムを打ち込んでみましょう。
10 ?HEX$(A,4);" ";:FORI=0TO7:?HEX$(PEEK(A+I),2);" ";:NEXT:?
アドレスを変数Aで指定して実行
A=#900:RUN 0900 49 63 68 69 67 6F 4A 61
先頭の4桁の16進法はアドレスで、#900が#49、#901が#63、#902が#69・・・と、16進法でメモリの状態を表示されました。
?CHR$(#49,#63,#68,#69,#6F,#4A,#61) IchigoJa
まさに今の画面の状態ですね!
※0から255までの数がちょうど2桁で表現できて便利な16進法が歴史的にモニターとしてよく使われてますが、読み替えるのが面倒な場合、プログラムを ?PEEK(A+I);" "; と書き換えて10進法モニターにするのもいいでしょう!
POKE#900,#E0
左上に絵文字「←」が表示されます。キャラクターコード#E0から#FFは、PCG(プログラマブル・キャラクター・ジェネレーター)といって、自由にキャラクターパターンを書き換えられます。(参考、オリジナルキャラをつくるPCG - IchigoJamプリント)
A=#700:RUN 0700 18 38 78 FF FF 78 38 18
#700の#18から#707の#18まで、この8つの数が絵文字「←」のキャラクターパターンです
POKE#700,1,2,4,8,16,32,64,128
左矢印が斜め線に変わりました!
RUN 0700 01 02 04 08 10 20 40 80
メモリの状態を確認できます。
プログラムを実行していない時は、ぼーっとしているように見えるIchigoJamですが、#900から32x24コのメモリの値を見て、その数に対応するキャラクターパターンを#700から取得して、VIDEO1、VIDEO2のピンを通じてテレビに伝える仕事を、1秒間60回しています!
コンピューターの健気なかわいさ伝わりましたか?
A=#C00:RUN 0C00 0A 00 38 3F 48 45 58 24
アドレス#C00からの1024コ(=byte、1kbyte)は、プログラムが保存されている領域です。先頭の#0Aは、10進法で10。行番号10のプログラムがそのあとにキャラクターコードで書かれています。
POKE#C00,11 LIST 11 ?HEX$(A,4);" ";:FORI=0TO7:?HEX$(PEEK(A+I),2);" ";:NEXT:?
行番号が10から11に変わっています!
行番号が番号順ではなくすなど、おかしな状態になるとLIST表示ができなくなったり、フリーズしたりします。RESETすれば元通りになるので、ガシガシいじって壊して遊んでみることが、メモリをマスターする近道です。
Mac/Windows/Linuxなど、今良く使われているパソコンには勝手にメモリを書き換えて壊してしまったり、プライベートのデータが読めてしまわないように保護機能が付いていますが、本質的には同じものです。