Direkte Hardwarezugriffe unter Windows NT und aufwärts funktionieren nur selten so wie man das aus DOS-Zeiten erwartet. Boote Deinen Rechner mal z.B. mit FreeDOS und führe Dein Programm dort aus. Die NTVDM (Dein "DOS-Prompt") unterstützt eine ganze Reihe Portzugriffe indem beim Portzugriff eine hochrangige
Exception generiert wird und eine Emulation den Rest erledigt. Damit landen Deine Portzugriffe aber natuerlich nicht direkt auf der Hardware sondern nur in der NTVDM (NT Virtual Dos Machine) - daher kein Ton aus dem Speaker und seltsame Polling-Werte. Ich vermute dass das Auslesen immer Dummywerte liefert (egal was man setzt, immer abwechselnd 0 und 1) weil manche DOS-Programme sonst einfach nur gar nichts machen würden weil sie auf den Timer warten. Und eine echte Emulation wäre nur aufwändig ohne echten Nutzen zu haben - ergo wird bei jedem Auslesen ein Bit geflippt und fertig.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet.
" (Henning Richter)