2 ms·
Lack of standards for self-describing hardware and negotiating bus resources meant that when setting up old-school PCs you had[1] to manually point drivers to t
by mananaysiempre 3y ago
Lack of standards for self-describing hardware and negotiating bus resources meant that when setting up old-school PCs you had[1] to manually point drivers to their devices’ I/O ports and interrupt lines (interrupt requests, or IRQs) [2] and occasionally resolve conflicts by reconfiguring jumpers on the devices themselves (the most familliar such jumper is probably the master/slave one on IDE drives, obsoleted by those twists in the ribbon cables).
All of this still needs to be solved in a modern system, but for the most part the hardware, firmware, and OS will sort things out by themselves—even if some of the details of that process are liable to give you nightmares[3,4]. The iMac, for its part, solved this by not having any expandability at all (ISA or PCI), so the settings could be burned into the firmware.
[1] See e.g. https://tldp.org/HOWTO/Plug-and-Play-HOWTO.html https://tldp.org/HOWTO/Plug-and-Play-HOWTO.html
[2] I don’t think this was ever a problem for address ranges for memory-mapped I/O, UMA issues excepted,—perhaps because MMIO didn’t really become popular until PCI won and ACPI appeared?
[3] https://wiki.osdev.org/I/O_APIC#IO_APIC_Inputs https://wiki.osdev.org/I/O_APIC#IO_APIC_Inputs
[4] https://forum.osdev.org/viewtopic.php?f=1&t=29558 https://forum.osdev.org/viewtopic.php?f=1&t=29558