SPNOの部分はカーソルで使用中のスプライトの管理番号をセットして使う部分を想定していました
変数にセットして使うか直接書き込むかは自由にしてください。
まぁ、元々セットしているカーソル用スプライトの管理番号が0なので動きはしますが、ちゃんと統一させておかないと後で苦労します。
それと、コンソールの値を取得してスプライトを変更する記述はループの中に入れておかないと動作しません。
17行目と18行目の間に処理を移動させましょう。
あと、すでにXとYはスプライトの座標用に使用しているので
SPOFS 0 OUT CSR_X,CSR_Yの1文は不要なのと
座標用の変数と被らないようにコンソール判定の変数を変えておきましょう
CX=X DIV WIDTH()
CY=Y DIV WIDTH()
IF CHKCHR(CX,CY)==0 THEN (以下略)
とまぁ、こんな感じで修正してみてください
CHKCHR(X,Y)でコンソールに表示中の文字コードが取得できます
SPOFS SPNO OUT CSR_X,CSR_Y
スプライトの座標とコンソール文字の座標は単位が異なるので
X=CSR_X DIV 8
Y=CSR_Y DIV 8
このようにして座標を設定します
あとは
IF CHR$(CHKCHR(X,Y))=="■" THEN スプライトの絵を変える処理
みたいな感じにすると表示に合わせてカーソルを変えられます