Automatically connecting peripherals
Exploit specialized functions (e.g., UART, timers)
Attempt to connect directly to a device port without adding interface hardware (e.g., registers), try to share registers if possible but beware of unwanted interactions if a signal goes to more than one device
If out of ports, must force sharing by adding hardware to make a dedicated port sharable (e.g., adding registers and enable signals for the registers)
If still run out of ports, then most encode signals to increase bandwidth (e.g., use decoders)
If all else fails, then backup position is memory-mapped I/O, i.e., what we would have done if we had a bare microprocessor