Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Programm Noob am 29. October 2009, 20:26

Titel: [gelöst] inp() und outp()
Beitrag von: Programm Noob 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
Titel: Re: inp() und outp()
Beitrag von: XanClic 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
Titel: Re: inp() und outp()
Beitrag von: DerHartmut 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.
Titel: Re: inp() und outp()
Beitrag von: Programm Noob 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
Titel: Re: inp() und outp()
Beitrag von: ehenkes_ 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.
Titel: Re: inp() und outp()
Beitrag von: XanClic 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.