Dripです。
ますさん、こんにちは。VRAMの直接操作は初心者にとっては少し難しいテーマですね。
VRAMについて簡単に説明してみます。
VRAMの情報は、mref vram,66によって取得することができます。これによって得られた情報は、
画面の左下から右上に向かって、青、緑、赤、青、緑、赤...の順で色の情報が格納されています。
また、数値は1バイト単位なので、扱うためには配列参照を行うかpeekによって取り出すしかありません。
hirokiさんのサンプルは少し意味がわかりませんが、peekを使用する方法はpget,psetの方法より
約2倍程度しか高速化できません。究極なのは、VRAMに直接配列参照を行いビット演算を行うことです。
広域のメモリ操作命令を使用するのも有効です。これならば恐ろしい程の処理の高速化が期待できます。
しかしこの方法は、アルゴリズムによって限られた状況下でしか行えない事が多いです。
ビット演算による処理はケースバイケースによる少し難しいプログラムを書く必要があるので
今回は置いておくとして、VRAMを使用した最も基本的なサンプルを以下に用意しました。
尚、このサンプルはVRAMの意味を理解するためのサンプルであり、
強力な高速化アルゴリズムを表すものではありません。VRAMの研究材料にしてみてください。
x=32 //赤い点を打つ座標
y=24
screen 0,256,256 //コピー元ウィンドウ
color 255:pset x,y
mref vramA,66
screen 3,ginfo_winx,ginfo_winy //コピー先ウィンドウ
mref vramB,66
p=((ginfo_winy-1-y)*ginfo_winx+x)*3 //検出すべき座標を取得
//座標は、画面左下から右上に向かって
//青、緑、赤の順に1バイトずつ格納されている。
b=peek(vramA,p) //screen0に打った点の色を取り出す
g=peek(vramA,p+1)
r=peek(vramA,p+2)
poke vramB,p,b //screen3にscreen0に打った点と同じ位置に同じ色の点を打つ
poke vramB,p+1,g
poke vramB,p+2,r
redraw 1
少し難しいかもしれませんががんばってください。