メモリとは記憶(memory)のこと、人間の頭はどう記憶しているかよく分かりませんが、コンピューターは明確に0か1かで記憶します。
何を使って0か1かを記憶するか、いろんな方法が使われて来ました。磁力があるかないか、穴が空いているかどうか、電圧が高いか低いか、色が黒か白か、音が鳴っているかどうか、光っているかどうか、などなど。パンチカード、フロッピーディスク、MOなど、かつての記憶装置を調べてみるのもおもしろいです。
メモリは、一般的に記憶する速度が速いほど高くなります。なのでコンピューターは少量の速くて高いメモリと多量の遅くて安いメモリを使い分けています。その代表的なものにRAM(ラム)とHDD/SSD(ハードディスク、エスエスディー)などのストレージがあります。現在、32GB(ギガバイト)のRAMは1万円ちょっとですが、その10倍以上の容量がある500GBのHDDが3000円です。RAMが机、ストレージが本棚のイメージです。(スマホだとRAMが4GB、ストレージが128GBあたりが多いです)
コンピューターのメモリを探検してみます。IchigoJamのRAMは4KB(キロバイト)とコンパクト。4GBの約100万分の1のサイズです。4KB=4096byte=32768bit(ビット)、32768コの0か1かを高速に記憶します。現代のコンピューターはこの記憶を8コ、8bitをひとまとめとした1byte(バイト)単位で使うようにできています。1byte毎の位置を表すのがアドレスです。HELPコマンドでどのアドレスに何があるかを示す、メモリマップを表示しましょう。
HELP #000 CHAR #700 PCG #800 VAR #900 VRAM #C00 LIST
ハッシュ(#)で始まる数は16進法で表現されたアドレス(メモリ上の位置)です。IchigoJamでは#700以上のアドレスがRAMになっています。#900のVRAMとはビデオRAM、画面に表示するキャラクターコードの記憶として使っています。記憶を見るコマンドPEEKを使ってみましょう。
?PEEK(#900) 73
73が画面左上はじのキャラクターコードです。起動したばかりの時、IchigoJamの"I"が表示されているはずです。確認してみましょう。
?CHR$(73) I
逆にキャラクターコード73がどんな文字かを見ても確認できます。
?ASC("I") 73
画面にいたずらしてみましょう。記憶するコマンドPOKEを使います。
POKE#900,255
Iがイチゴに変わってしまいました。
?BIN$(PEEK(#900))
数を2進法表現にするBIN$を使うと、8bitがぜんぶ1、つまり128+64+32+16+8+4+2+1=255を意味する11111111が表示されます。
POKE#900,ASC("i")
ASCコマンドを使えば、好きな文字をかんたんに書くことができますね。
POKE#BFF,255
自動改行によってPRINT/?コマンドでは表示することができない画面右下はじも、POKEコマンドなら書けちゃいます!
なぜ#BFFなのか?ヒントは、IchigoJamの画面サイズ、幅が32、高さが24なので・・・
?32*24 768 ?HEX$(#900+768-1) BFF
#BFFの次、#C00からはプログラムが記憶される領域となるので、不用意に記憶を書き込んで壊してしまわないように注意です。いろいろ書き込んで、IchigoJamがフリーズしてしまったら、電源を入れ直しすればOKです。
IchigoJamでは1文字を1byteで表し、キャラクターコード0か34(")で終わる連続した文字を文字列としてみなしています。下記はダブルクォートをつけずに、INPUTコマンドで文字列を入力させ、その文字列を画面内あちこちにランダムに表示するプログラムになっています。
10 CLS 20 LC 0,0:INPUT A 30 COPY#800,#901,LEN(#900) 40 LC RND(32),RND(22):?STR$(#800) 50 GOTO 40
このプログラムは配列と変数を記憶している領域#800を使っているので、確認してみましょう。
?[0] 25417 ?CHR$([0]) I ?CHR$([0]>>8) c
変数1つは2byte使っています。理由は下記の通りです。
- 1byteだと0から255、または-128から127までと狭くて不自由
- 4byte使うと変数として使うRAM量が倍増し、PCGが使えず残念
- または配列と変数の数が半減し不自由
- コンピューターの限界とその限界を突破する工夫を体験してもらうため
*PCG = プログラマブル キャラクター ジェネレーター、キャラクターパターンの変更
Enjoy メモリ探検!
今年もはじまりました、クリスマスまでのおたのしみ
「IchigoJam Advent Calendar 2020」
2020年のIchigoJamに関する思い出など、どうぞ気軽にご参加ください!