Yes, rather nice. But in your default condition the connecting rod crashes against the inside of the cylinder. I suspect that your engineering son passed criticism!
Fixed for +/- keydown and original width of cylinder
Update: Added spark at top of stroke
PS _Keydown is best to use as supplement to single key press picked up by INKEY$ or _KEYHIT My tests of _keydown are getting stuck when trying -/+ AND _KEYCLEAR wont do anything for _Keydown