Kód: Vybrat vše
#include <stdlib.h>
#include <stdio.h>
#include <sys/io.h>
#define portC 0x37a
int main()
{
if (ioperm(portC, 1, 1))
fprintf(stderr, "\e[31;43m Nemáš oprávnění \e[0m\n"), exit(1);
outb(0, portC);
int dataC = inb(portC);
printf("%i\n", (256*(dataC-192)));
}
Podmínka zjišťuje oprávnění, jestli lze číst a zapisovat, outb zajišťuje nulování, pak se vstup přečte, printfem převede na desítkovou soustavu, odečte 192 (horní 4 bity nelze ovládat a nejsou k nim dráty) a, protože to budou horní 4 bity, vynásobí se to 256. Přestože jsou 3 ze 4 vstupů za invertorem, funguje to na jednom i druhým portu.
Jenže jsem se pokusil do toho nabastlit i čtení z datovýho portu, nevím, kde dělám chybu, sestaví se bez keců, ale hází mi po spuštění SIGSEGV, a to už od druhýho outb (kdy zbytek kódu je z předchozího) a vlastně u další "zdvojený" definice dataC:
Kód: Vybrat vše
#include <stdlib.h>
#include <stdio.h>
#include <sys/io.h>
#define portD 0x37c
#define portC 0x37a
int main()
{
if (ioperm(portD, 1, 1))
fprintf(stderr, "\e[31;43m Nemáš oprávnění \e[0m\n"), exit(1);
outb(0, portD);
outb(0, portC);
int dataD = inb(portD);
int dataC = inb(portC);
printf("%i\n", (dataD+256*(dataC-192)));
}