That's one example where it's a breeze to not only read the joystick on Amiga but also read it with high precision timing. Gaming with joysticks was an afterthought on PCs as even gameport was usually on an add-on board. Gaming was a central concept on Amiga/Atari machines so more relevant. It all adds up-- joystick I/O, timer IRQs, etc. not just for me, for everyone. Don't worry, "I have not yet begun to fight." Just going to finish up this point before addressing other points. A gameport uses analog joysticks and requires 1ms+ worse case read-time to get status of joystick directions. This at 1 Khz would use up all the CPU time whereas on Amiga, it would hardly effect system performance even if performed with high precision timing. Typical games with fast motion require 1Khz+ sampling of joystick motion. Joystick ports can also be used for general purpose parallel I/O especially on older platforms like Atari/C64.
I though I’d set the record straight on the PC joystick port:
(For some reason this seems to be a big issue in this thread)
The target audience of the IBM PC/AT was never the gaming market…
That being said, the 15pin analog joystick port standard was created:
Reading the button state of the joystick was simple and fast - it simply required one logic operation. This seems rational as the state of the button can only be in the ON or OFF position. The 3rd position is known as "broken".
They (the engineers) should have just expanded on that idea and created a digital joystick – like C=, Atari, etc.
BUT…
Instead, they created an Analog joystick and along the way somebody got a big bonus by saving $0.03 per machine by eliminating hardware. I believe he later went on to design the o-rings for the space shuttle Challenger.
Anyway, to read the joystick the programmer would write some value to port 0x201, run the CPU in a time wasting LOOP and then read back the contents of 0x201, and then work some magic with the values returned to determine the position of the X and Y axis.
If that’s not cheesy enough, you also had to disable the interrupts and poll several times to get an accurate reading.
Finally, as the PCs progressed from 4.7mhz to 33mhz to 66mhz, etc. the CPU cycles that were wasted looping to read the joystick were increasingly more significant.
Lets face it, constantly calibrating the trim on your flight stick just sucked. The part I really personally hated was that if you depressed turbo button (to slow the game play down) Chuck Yeager would typically do an uncontrollable barrel roll right into a barn.
Eventually, PC sound cards came along with MIDI interfaces. The MIDI interface connected to the outside world via the same 15-pin joystick port.
Again, someone probably got huge bonus – but this time they disserved it. The idea was to simply forget about the joystick port and to send the data over MIDI.
Genius!
By the time the Pentium came out, MIDI joystick was the standard until it was later replaced by USB.
Anyway, my main machine is a 2GHZ Mac mini with 9400n GFX, 4GB ram and an XBOX-360 wireless controller.
I have no idea about the technical aspects required to read the numerous axes and buttons on the 360 controllers, or how much CPU overhead is involved. I just know there are too many f’n buttons.