#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/io.h>

#define IOBASE_DEFAULT			(0x381)

unsigned short iobase = IOBASE_DEFAULT;

void setecindex(unsigned short index)
{
	unsigned char hi = index>>8;
	unsigned char lo = index;

	outb(hi, iobase);
	outb(lo, iobase+1);
}

unsigned char readecdata(unsigned short index)
{
	unsigned char data;
	setecindex(index);
	data = inb(iobase+2);
	return data;
}

void writeecdata(unsigned short index, unsigned char data)
{
	setecindex(index);
	outb(data, iobase+2);
}

int main(int argc, char **argv)
{
	unsigned char val;

	if (iopl(3) < 0){
		perror("iop(3)");
		exit(1);
	}

	val = readecdata(0xfc2a);
	val ^= (1<<2);
	writeecdata(0xfc2a, val);

	return 0;
}
