Thank you!
Excellent! Thanks very much for your efforts; three separate alternatives, each with appropriate instructions, is very thorough! :-)
As for your point about detecting CS + Cursor keys in BASIC… I think it should be straightforward enough (and works fine in emulators). I've just looked at the listing, and I'm interested to see that in the Interface II version you're testing for G=IN 61438, whereas in the other two versions you're testing for INKEY$="5", "6", "7" and "8" (or q, a, o, p). I'm not sure why you have that distinction between IN and INKEY$ in the different versions.
Anyway, regardless of that, the shifted cursor keys (and the dedicated cursor keys on + keyboards) just produce the ASCII codes for cursor movement, i.e. Left = 8, Right = 9, Down = 10, Up = 11. So the amendments to the Cursor version of your listing – where you have LET G$=INKEY$ – in lines 2–5 would be:
• IF G$="5" OR CODE G$=8 THEN … REM left
• IF G$="6" OR CODE G$=10 THEN … REM down
• IF G$="7" OR CODE G$=11 THEN … REM up
• IF G$="8" OR CODE G$=9 THEN … REM right
I've made those changes to a snapshot of my copy here, for testing purposes, and I can confirm that it works fine (tested in an emulator). The game now responds properly to the cursor keys with and without shift, so it should also work properly with the arrow keys on a + keyboard if you added these four small changes.
Anyway, that's my last remaining suggestion. :-) Many thanks again for your work.