Autor Thema: [gelöst] inp() und outp()  (Gelesen 3083 mal)

Programm Noob

  • Gast
Gespeichert
« am: 29. October 2009, 20:26 »
Moin

Ich versuche den Systemlautsprecher(nicht die Soundkarte) zum laufen zu bringen.
Hier im Wiki ist auch ein schöner Artikel. dooch man benötikt die Funktionen inp() und outp() wie kann ich die implementieren? :?

Ich hoffe ihr könnt mir helfen?

Programm Noob
« Letzte Änderung: 11. November 2009, 00:15 von Programm Noob »

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #1 am: 29. October 2009, 20:47 »
In unserem Wiki gibt es ein direktes Beispiel für Inlineassembler:
http://lowlevel.brainsware.org/wiki/index.php/Inline-Assembler_mit_GCC

Und in der OS-Dev-Wiki gibt es sogar fertige Funktionen:
http://wiki.osdev.org/Inline_Assembly/Examples#I.2FO_access

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #2 am: 29. October 2009, 21:36 »
Ich merke, dass dir da Wissen fehlt. Weißt du überhaupt, was inp und outp machen? Les dir mal ein paar Tutorials durch und les' dich durch unser Wiki, am besten auch die "OS-Dev für Einsteiger"-Reihe, die ist wirklich exzellent.
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

Programm Noob

  • Gast
Gespeichert
« Antwort #3 am: 30. October 2009, 13:23 »
Moin

@XanClic Danke für die Links. Die beiden Funktionen gehen jetzt

@DerHartmut Ja ich weiß was die Funktionen machen, sie senden ein byte ein word oder ein dword an einen port bzw bekommen diese von einem Port.

Programm Noob

ehenkes_

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 31. October 2009, 15:36 »
inline uint32_t inportb(uint16_t port)
{
uint32_t ret_val;
__asm__ volatile ("inb %w1,%b0" : "=a"(ret_val) : "d"(port));
return ret_val;
}

inline void outportb(uint16_t port, uint32_t val)
{
    __asm__ volatile ("outb %b0,%w1" : : "a"(val), "d"(port));
}
als Beispiel.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #5 am: 31. October 2009, 15:44 »
Ich frage mich jetzt nur, wo der Sinn des Postens dieses Codes liegt, da ich ja bereits auf http://wiki.osdev.org/Inline_Assembly/Examples#I.2FO_access verwiesen hatte. :wink:

btw, der Returnwert von inportb ist nicht vom Typ uint32_t, sondern uint8_t. Dasselbe gilt für den Parameter "val" von outportb.

 

Einloggen