I was going through a BASIC technical guide on the Wiki last night and discovered using logic conditioning within an IF statement is bad, so made some adjustments to your game:
600 IF NOT(INKEY(8)) THEN IF (TEST(x%-8,y%-6)<>9) THEN IF (TEST(x%-8,y%-14)<>9) THEN GOSUB 5000:frcount=2:x%=x%-vx%:GOSUB 5000
700 IF NOT(INKEY(1)) THEN IF (TEST(x%+32,y%-6)<>9) THEN IF (TEST(x%+32,y%-14)<>9) THEN GOSUB 5000:frcount=1:x%=x%+vx%:GOSUB 5000
800 IF NOT(INKEY(0)) THEN IF (TEST(x%,y%+2)<>9) THEN IF (TEST(x%+28,y%+2)<>9) THEN IF walk=1 THEN GOSUB 5000:y%=y%+vy%:GOSUB 5000
900 IF NOT(INKEY(2)) THEN IF (TEST(x%,y%-18)<>9) THEN IF (TEST(x%+20,y%-18)<>9) THEN GOSUB 5000:y%=y%-vy%:GOSUB 5000
I've replaced all the ANDs within the IF statements and made a nested IFs out of it all (as suggested in the guide) and tested this which is definitely faster than a single IF with all the conditioning in it.