MSXユーザーのみなさん、お久しぶりです。
今回はメモリについて簡単に説明したいと思います。
メモリに文字を入力して何かキーを押すと書き込んだ内容を表示するアプリです。
試しにFULLMSXを入力してベリファイしてみました。
メモリはMSXパソコンの場合は0000hからFFFFhまでありますが
空いている場所の調べ方があるのですが煩雑になるので通例として、
アプリが使っているメモリとワークエリアがないC000hを開始番地にしています。
プログラムはFULLMSXの文字数をLEN(れんぐす)で調べL=7が入ります。
次にF,U,L,L…とC000hからC007hまでFOR命令で1文字ずつデータを入れます。
入れた内容が入っているかを確認するため(ベリファイ)を210行でしています。
POKEでメモリに書き込み、VPEEKでメモリの内容を表示します。
これでVPOKE、VPEEKにすればVRAMで同様のことができたりします。
プログラムの都合で文字データはC001hから入りC000hはデータは空です。
わかりやすいようにベリファイを加えてBASICなどでは文字列という定義ですが
文字列や文字はなく00~ffh、すなわち0~255の数字をコードに変換しています。
メモリのワークエリアはこんなふうに1バイトごとに使われています。
またこのベリファイ部分を応用すれば参照するメモリ領域にデータがあるかどうかを
調べる方法にもできますね。
ワークエリアのアドレスは例えばFD9Ah~FD9Fhのように6バイトとかにして
キリ番(??0h)を使うので~Fh以内ににすることが多いです。
今考えるとファミコンは99機までとか10進数で構成されているように思っていましたが、
そんなことはなく理論上16進数は可能ということがMSXパソコンでわかりましたね。
ビットをフルに使えば0~15まで計算することができます。
4×4で16ですから4x3で12(0~11)で3ビットで11をキャリーにすればできなくないかな。
いろいろと考えると面白いと思います。