class KnightRider {
public:
	KnightRider();
	void run();
private:
	typedef unsigned char byte;
	typedef unsigned short word;
	void wait();
	volatile byte* p;
};

KnightRider::KnightRider(): p(reinterpret_cast<byte*>(0x1004)) {
}

void KnightRider::wait() {
	for (volatile word i(0); i<10000; ++i) 
		/*empty*/;
}

void KnightRider::run() {
	byte c1, c2;
	while (1) {
		c1=0x80;
		c2=0x01;
		for (byte i(0);i<4;i++) {
			wait();
			*p=c1|c2;
			c1>>=1;
			c2<<=1;
		}
	}
}

int main() {
	KnightRider kitt;
	kitt.run();
	return 0;		
}
