Hallo, habe eine PCI-Karte mit dem Baustein NM9835. Lieferumfang ist auch eine .exe für DOS. Gestartet, macht sie die Karte bekannt und versucht, sie Legacy zuzuordnen und gibt am Bildschirm die belegten Resourcen aus. Nun will ich die Karte in einem eigenen TurboPascal-Programm benutzen. Die Ports der Schnittstellen kann ich bereits im BIOS-Datenbereich 40:0 ermitteln. Was ich jetzt suche, ist eine Idee, auch den benutzten Interrupt herauszufinden. PCI-Vendor-ID etc. ist bekannt. Dankeschön - Michael
Unter DOS kann man die PCI-Konfiguration mit dem Interrupt 0x1a lesen. Ich habe das mal für eine I/O-Karte von KOLTER gemacht, allerding nur die Ports, vermutlich erlaubt aber eine andere Unterfunktion des Int auch das ermittlen weiterer Daten. Hier die originale KOLTER get_io_adr Funktion:
1 | /* Die folgende Funktion zeigt eine Mglichkeit auf, wie die
|
2 | I/O-Adresse einer KOLTER-Karte ermittelt werden kann.
|
3 | |
4 | Als bergabewert der Funktion ist die Device ID der
|
5 | entsprechenden Karte anzugeben (Beispiel: PCI-16/16 = 0x0010).
|
6 | |
7 | Der Rckgabewert der Funktion beinhaltet die I/O-Adresse
|
8 | der Karte oder 0, wenn keine Karte gefunden wurde bzw. keine
|
9 | Plug'n Play-Adresse vergeben wurde.
|
10 | |
11 | Wichtig:
|
12 | Bei der Einbindung dieser Funktion in ein Programm
|
13 | ist zu beachten, dass fr den Compiler der 386er
|
14 | Befehlssatz verwendet wird, da sonst Zugriffe
|
15 | auf erweiterten Register (ECX) nicht untersttzt werden.
|
16 | */
|
17 | |
18 | unsigned long get_io_adr(unsigned int Device) |
19 | |
20 | {
|
21 | |
22 | unsigned short slot_no; |
23 | unsigned long io_adr; |
24 | unsigned long ven_dev; |
25 | unsigned long K_ven_dev; |
26 | |
27 | io_adr = 0; |
28 | |
29 | K_ven_dev = Device; /* Device und VendorID |
30 | werden*/
|
31 | K_ven_dev = K_ven_dev << 16 | 0x1001; /* verknpft |
32 | */
|
33 | for (slot_no = 0;(slot_no <= 0x00F8) && (io_adr == 0);slot_no += 8) |
34 | {
|
35 | asm mov bx,slot_no |
36 | asm mov di,0x0000 /* Alle PCI-Einheiten werden |
37 | */
|
38 | asm mov ax,0xb10a /* nach der entsprechenden |
39 | */
|
40 | asm int 0x1a /* KOLTER-Karten durchsucht. |
41 | */
|
42 | asm mov ven_dev,ecx |
43 | if (K_ven_dev == ven_dev) /* Konnte die Karte gefunden |
44 | */
|
45 | { /* werden, so wird die ent- |
46 | */
|
47 | asm mov ax,0xb10a /* sprechende I/O-Adresse |
48 | */
|
49 | asm mov bx,slot_no /* ausgelesen. |
50 | */
|
51 | asm mov di,0x0010 |
52 | asm int 0x1a |
53 | asm mov io_adr,ecx |
54 | }
|
55 | }
|
56 | io_adr &= 0xFFFFFFF0; /* I/O-Adresse wird maskiert |
57 | */
|
58 | return(io_adr); /* Rckgabe der I/O-Adresse |
59 | */
|
60 | |
61 | }
|
ist vielleicht als erster Ansatz hilfreich. Gruß Ingo
Bist Du Dir wirklich sicher, daß die I/O-Adressen der auf Deiner Schnittstellenkarte vorhandenen Schnittstellen im BIOS-Datenbereich untergebracht werden? Das würde mich wundern ...
@Michael Hallo, wenn der Treiber dem Baustein ein Gerät zuordnet, hilft vielleicht das uralte DOS Diagnoseprogramm Syscheck unter http://www.syschk.com/ Gruss Frank
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.