On my TRS-80 I wrote a little machine-language program (not assembly, but machine language--encoded that crap myself) that would look at the position of my joystick and report the result to a batch file.
It was one of the joysticks that you could unlock the springs so it would stay in a position.
Anyway, Upper-left started my BBS, upper-right booted into the OS, lower-left booted into..hmm, I forget what the other two did, but with the fairly long boot times it was great. I could be sitting there playing a game then just flip the joystick to the upper-left, hit the reset button and walk away and a few minutes later it was fully booted into the BBS.
Honestly at this point I can't remember if it was my TRS-80 or my first (pre-hard disk) PC. I did most of my hand assembling on the TRS-80, so I think that's what it was.
By the way, to get a joystick value you actually set a bit to charge up a capacitor, then you time how long it takes the bit to reset. The reset is based on the cap discharging through a rheostat (variable resistor)--the amount of resistance is set by the joystick position, so less resistance and it discharges faster.
You just sit there and tie up the CPU doing loops until the bits reset... Fun stuff.