BGMPLAYの引数にマイナス値は使えないから、マイナスにならないようにすればいいんです。
65行目
IF A AND 1 THEN BGM=MAX(0,BGM-1)
とすると、マイナスにならなくなります。
66行目も、変数BGMの値が増えすぎないように
IF A AND 2 THEN BGM=MIN(42,BGM+1)
としましょう。
スプライトやBGの各個にサブルーチンを割り当てて自動管理できる、コールバックという機能でも使います。
ACLS
FOR I=0 TO 500
OBJ=SPSET(RND(10))
SPOFS OBJ,RND(384),RND(224)
SPFUNC OBJ,"FALL"
NEXT
DEF FALL
SPOFS CALLIDX OUT X,Y
Y=Y+2-240*(Y>240)
SPOFS CALLIDX,X,Y
END