It makes quite the difference when those are the primary systems the newer machine is designed to use. Luckily this motherboard I dug out was 2004-era so it still has quite a bit of legacy I/O aboard it (PS/2, serial, parallel, ATA) so even ignoring the USB, PCI, and ACPI/power management I could still demonstrate a proof-of-concept operating system with some workarounds. Using a modern-era motherboard and target system would change that significantly.Brendan wrote:I don't really see much difference between an OS that doesn't support things like USB and ACPI (that was designed for newer machines) and an OS that doesn't support things like USB and ACPI (that was designed for older machines).
I prefer to do my odds and ends experimentation on older hardware because there is no contesting the fact that the older hardware was much more simple; one didn't have to make cache considerations, for example, because there was no cache. Newer hardware and devices throw a lot into the mix that depending on your perspective and your skill set can make things much easier or much more of a nightmare quickly.
That depends again, on your perspective. From a configuration and detection perspective, you are undoubtedly correct, but in terms of the physical-level complexity, ISA was much simpler; simply using the 286 bus timings as a local bus. In fact, SCAT chipsets for 386-based machines simply generated ISA by making adjustments to the T-states of the bus signaling; it wasn't even true bus "translation". By virtue of this, there isn't much in the way of an ISA interface layer other than some pretty hairy logic for determining what device was in which slot and what its memory spans were. But the raw transactions were quite simple. I know that the hardware for PCI/PCIe ideally makes transfers equally transparent to the software level, but it's one evil for another.Brendan wrote:PCI is probably easier to support than ISA (especially for things like figuring out which devices are present and which IO-ports, IRQs and memory areas they use); and if you want to avoid complexity I'd seriously consider not supporting ISA.
That will cause a chicken-and-egg problem. Unless ACPI systems also hold some sort of legacy 8259-compatible interrupt handling somewhere (or unless I've completely got the notions of ACPI wrong), I won't be able to configure interrupts until I can parse the necessary tables and get into the IOAPIC configurations. Granted that even includes keyboard servicing, it'll be hard to make my operating system anything more than a microcontroller program on 'roids.Brendan wrote:For ACPI, it is an ugly mess (from an OS developer's perspective). However; you can ignore it completely and the system will be just like a older computer. For example, when the user presses the power button, your OS won't be given a chance make sure everything is in a sane state (and avoid things like file system corruption or lost data) - just like on old computers the power just unexpectedly disappears.
...
I'd (mostly) forget about ACPI's AML until after the OS works.
Do you have any idea how to workaround that or design a minimal ACPI system that would serve for detection purposes?