Entschuldigung, hatte die letzten Tage viel zu tun, deswegen kommt die Antwort erst so spät. Ich habe aus BAR5 die Addresse 0xFBB00000 bekommen, diese konnte ich mittlerweile bestätigen, da man sich im Windows Gerätemanager die physische Addresse des HBA-Controllers anschauen kann ( Geräte Manager - > IDE ATA/ATAPI-Controller - > SATA-Controller auswählen -> Eigenschaften -> Ressourcen -> und da steht die physische Addresse des HBA ). Ich schreibe mein Hobby OS in Assembler und extrahiere CAP wie folgt:
mov esi, dword[ HBA_BAR5 ] ; in der Variablen HBA_BAR5 steht die physische Addresse des HBA, das heißt in esi steht nun 0xFBB00000
mov eax, dword[ esi ] ; Lade das CAP register nach eax
and eax, 0x1F ; Lösche die oberen Bits, behalte nur die Bits [ 04 : 00 ]
So bekomme ich NP heraus, also genauso wie von dir beschrieben. Das Register, welche ich im letzten Satz erwähnte war PI, d.h. Ports implemented:
0000 0000 0000 0000 0000 0000 0000 0011 = 0x00000003 = PI
Die Version habe ich noch nicht getestest, dies folgt aber in der nächsten Zeit. Vielleicht noch wichtig zu erwähnen ist, dass Port Multiplier unterstützt werden von meinem HBA, jedoch dachte ich das SATA-Festplatten direkt an den HBA angeschlossen sind und nicht durch einen Port Multiplier.