www.mikrocontroller.net

Forum: PC-Programmierung IRQ einer PCI->COM-Karte unter DOS ermitteln


Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ingo H. (putzlowitsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
/*  Die folgende Funktion zeigt eine M”glichkeit auf, wie die
    I/O-Adresse einer KOLTER-Karte ermittelt werden kann.

    Als šbergabewert der Funktion ist die Device ID der
    entsprechenden Karte anzugeben (Beispiel: PCI-16/16 = 0x0010).

    Der Rckgabewert der Funktion beinhaltet die I/O-Adresse
    der Karte oder 0, wenn keine Karte gefunden wurde bzw. keine
    Plug'n Play-Adresse vergeben wurde. 

    Wichtig:
    Bei der Einbindung dieser Funktion in ein Programm
    ist zu beachten, dass fr den Compiler der 386er
    Befehlssatz verwendet wird, da sonst Zugriffe
    auf erweiterten Register (ECX) nicht untersttzt werden.
*/

unsigned long get_io_adr(unsigned int Device)

{

unsigned short slot_no;
unsigned long io_adr;
unsigned long ven_dev;
unsigned long K_ven_dev;

io_adr = 0;

K_ven_dev = Device;                       /* Device und VendorID
werden*/
K_ven_dev = K_ven_dev << 16 | 0x1001;     /* verknpft                
*/
for (slot_no = 0;(slot_no <= 0x00F8) && (io_adr == 0);slot_no += 8)
  {
  asm mov bx,slot_no
        asm mov di,0x0000                 /* Alle PCI-Einheiten werden
*/
        asm mov ax,0xb10a                 /* nach der entsprechenden  
*/
        asm int 0x1a                      /* KOLTER-Karten durchsucht.
*/
  asm mov ven_dev,ecx
        if (K_ven_dev == ven_dev)         /* Konnte die Karte gefunden
*/
                {                         /* werden, so wird die ent- 
*/
                asm mov ax,0xb10a         /* sprechende I/O-Adresse   
*/
                asm mov bx,slot_no        /* ausgelesen.              
*/
    asm mov di,0x0010
    asm int 0x1a
    asm mov io_adr,ecx
    }
  }
io_adr &= 0xFFFFFFF0;                     /* I/O-Adresse wird maskiert
*/
return(io_adr);                           /* Rckgabe der I/O-Adresse 
*/

}

ist vielleicht als erster Ansatz hilfreich.

Gruß
Ingo

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ...

Autor: Frankieboy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.