First post, by NewRisingSun
On most later PC-compatible systems, reading from an unmapped I/O port always returns $FF. I assume this is due to pull-up resistors basically removing anything that was previously put onto the bus. However, this is not true for all systems. My Tandy 1000 TX, for example, will just return the last byte that was put onto the bus --- either by writing to an unmapped I/O address, or by reading from a readable I/O address.
Open bus behavior matters, for example, when trying to differentiate OPL2 from OPL3. Yamaha and Creative documentation claims that the OPL2's index port will always return $06 when read from. This is not completely true --- bits 1 and 2 (together yielding $06) are actually open bus, and will only return $06 if the bus hardware has said pull-up resistors. On my Tandy 1000 TX, reading from $388 will only yield $06 if you first write a value with bits 1 and 2 set onto the bus!
I wonder how the original IBM PC, XT, AT, and PCjr behave when reading unmapped I/O ports, such as $3FF.