PEEKとPOKE
PEEK(ピーク)およびPOKE(ポーク)は、プログラミングにおいて特定のメモリセルの情報にアクセスするためのコマンドです。これらのコマンドは主に、
BASICという高水準
プログラミング言語で広く知られていますが、
PascalやCOMALなど他の言語でも同様の機能を持っています。PEEKとPOKEは、
C言語におけるポインタの役割を果たすことが多く、低水準のメモリ管理を実現しています。
使われ方
PEEKとPOKEは、初期の
パーソナルコンピュータにおいて、さまざまな目的で利用されました。特に、ハードウェアレジスタにアクセスしたり変更したりするために用いられ、その結果、ゲームプログラムを操作しユーザーが
チートできるようなことも可能となりました。例えば、無制限のライフを得るためにゲームプログラムに調整を加えるといった行為です。このようにして、PEEKとPOKEはプログラミングの知識があるユーザーにとって強力なツールとなっていました。
今日では、
BASICのような言語を使用して低水準でメモリを操作することは少なくなり、PEEKやPOKEの概念は現代のプログラミングからは時代遅れと見なされています。しかし、言語の中で使われる「peek」や「poke」という単語は、今でもメモリアクセスの一環としてコミュニケーションで使用されることがあります。
PEEKとPOKEの文法
PEEKおよびPOKEは、直接モードまたは間接モードで呼び出すことができます。引数にはメモリアドレスや値が含まれ、これらは有効なアドレスおよび値に対応している必要があります。有効なアドレスはコンピュータの
アドレス空間内で、値は通常0から最大符号なし数の範囲に収まる必要があります。
メモリとハードウェアレジスタ
POKEまたはPEEKされるアドレスは、通常のメモリセルだけでなく、I/Oユニットやビデオグラフィックスチップなどに関連したハードウェアレジスタも参照できます。このような操作により、
デバッグツールやシミュレーションツールを実装できるため、高度なプログラミングを行う際に非常に有用です。
多くの8ビットゲームでは、特定のメモリアドレスを変更することで、無敵や無限ライフなどの
チートが可能でした。これには主にPOKEコマンドが使用され、
コモドール64や
ZX Spectrumなどでは、実行中のプログラムを一時停止させてPOKEを入力し再開することができました。このような改造はゲームに大きな影響を持っていましたが、最近のゲームでは
メモリ保護のため難しくなっています。
16ビットマシンにおけるPEEKとPOKE
初期の
BASICが動作する8ビットマシンでは、PEEKとPOKEの値は0から255の範囲でしたが、16ビットマシンでは2回実行することでより大きい整数値を扱う必要があり、特別なコマンドが公式に用意されるようになりました。
その他の関連情報
異なる
BASIC言語では、PEEKやPOKEに相当するコマンドの名称が異なる場合があります。たとえば、North Star
BASICではEXAMやFILLと名付けられるなど、仕様が変わることがあります。また、BBC
BASICでは
疑問符を使用して同様の操作を行うなど、多様性があります。これにより、PEEKやPOKEはプログラミングにおいて、言語や用途に応じて異なる役割を果たすことがあります。
結論
PEEKおよびPOKEは、初期のプログラミングにおいて重要な役割を果たしてきましたが、現代の進化した
プログラミング言語ではあまり使われなくなっています。しかし、これらのコマンドは依然として歴史的な重要性を持ち、多くのプログラマにとって懐かしい存在となっています。