1) Da kann ich dir nur grad sagen das deine Vermutung richtig ist, das man dies extra programmieren muss, ist eine OUT instruktion wenn ich mich richtig erinnere, aber hab hier auf der Arbeit grad meinen Code nicht zur Verfügung!
2) Codeschnipsel wird schwierig, ich bin mir nicht sicher ob das APM das noch konnte, oder ob man dafür schon ACPI braucht - dann wäre es auf jeden Fall eine extrem komplizierte Aufgabe.
3) Nun ja, was hat man davon alle Geräte zu kennen - du weisst welche Treiber dein System benutzen sollte. Gute Sachen zum Thema PCI hatte ein Freund von mir, kann den mal Fragen ob der die noch hat ...
4) Okay, das wird wohl ne längere Antwort. PCI ist erstmal ein sogenanntes Bussystem, welches die Aufgabe hat, die einzelnen Geräte (on-board oder auf den Steckkarten) mit der CPU und RAM über den Chipsatz zu verbinden. Es hat daher relativ ähnliche Aufgaben zum Ethernet zwischen verschiedenen PC's, und noch ein paar mehr, damit man z.B. sich alle Geräte auflisten lassen kann!
Bei DMA hingegen muss man erstmal zwischen DMA und Busmaster-DMA unterscheiden. DMA selber gibt es schon wesentlich länger als PCI, und war ein Chip den man programmieren konnte damit der Daten hin- und herkopiert ohne das man die CPU dafür benutzen muss. Für ältere Hardware, die damit noch arbeiten kann (z.B. der Floppycontroller den du ja scheinbar programmierst) sollte man damit auch arbeiten.
Busmaster-DMA sagt eigentlich mehr nur das das Busmaster-Gerät (z.B. ein Festplattencontroller, gab auch mal Grafikkarten zur Zeiten von der Voodoo 1 oder so die das gemacht haben) die "Kontrolle" über den PCI Bus übernimmt und sich selbstständig Daten aus dem RAM zieht, wenn ich mich richtig erinnere. Wieder sehr sinnvoll das zu Benutzen, da es die CPU entlastet, aber wie man das programmiert hängt von dem Gerät ab.