
#define smart *(unsigned char volatile*) 0x2000 /* adresse de l'horloge */

void smart_access(void);	/* accès avec la clef */

void smart_read(int *);	/* lecture de l'horloge */

void smart_write(int *); /* écriture de l'horloge */

/* code d'accès à l'horloge */
const char smart_watch[]={0xC5,0x3A,0xA3,0x5C,0xC5,0x3A,0xA3,0x5C};


void
smart_access(void)	/* accès avec la clef */
	{
	int i,n;wait(1);
	for(i=0;i<=7;i++)
		for(n=0;n<=7;n++)
			smart=smart_watch[i]>>n;
	}

void
smart_read(int *c)	/* lecture de l'horloge */
	{
	int i,n;
	for(i=0;i<=8;i++)
	*(c+i)=0;
	smart_access();	/* accès par la clef */
	for(i=0;i<=7;i++) 
		for(n=0;n<=7;n++)
		*(c+i) = (*(c+i)|((smart & 1)<<8))>>1;
	}

void
smart_write(int *c)
	{
	int i,n;
	smart_access();	/* accès par la clef */
	for(i=0;i<=7;i++)
		for(n=0;n<=7;n++)
		smart=(*(c+i))>>n;
	}