24Fermer26
vinceLe 12/03/2017 à 15:08
Bon, c'est "crade" mais ça marche :
#define waitsync 1 #define start 2 #define receiving 3 #define escape 4 #define done 5 #define init_value 0 #define packet_pending 9 #define packet_done 10 unsigned char state; unsigned char buf[255]; unsigned char position; unsigned char checksum; SER(){ unsigned char input; DisableIRQ(4); POKE(0x10,0xFD80); input=serdat; if (state==waitsync){ if(input==0x7e){ state=start; }else{ return 0; } } if (state==start){ if(input!=0x7e){ state=receiving; position=0; //checksum=init_value; //goto rx ? }else{ //return 0;//packet waiting } } //rx: ? if (state==receiving){ if(input==0x7d) { state=escape; return 0; } if(input==0x7e) { /*if (checksum==0){ return();//packet done }else{ return();//cheksum error }*/ //state=done; state=start; return 0; }else{ if(position<255){ buf[position++]=input; //update checksum }else{ return 0;//overflow } } } if (state==escape){ state=receiving; if(input==0x5E || input==0x5D){ input=input^0x20; } if(position<255){ buf[position++]=input; }else{ return 0;//overflow } } EnableIRQ(4); }
Conctrètement, j'ai fait un programme test :
un boucle while qui fait y++
on met buf[0] dans x
un carré est affiché à x, y
si on appuie une touche, on envoie 0x7e, y, 0x7e

quand les deux consoles démarrent, le carré reste collé à gauche, dès que l'une appuie sur une touche, le carré de la console réceptrice s'aligne en x avec la position y de la console émettrice

et pour tester les collisions : si on maintient appuyé les deux consoles, on a bien les deux carrés qui se déplacent en diagonale.

il n'y a pas de checksum pour le moment et je ne suis pas sûr que pour un truc à 2 consoles ça serve à qqch...

par contre j'ai trouvé un soucis : mes prises microjack ne font pas toujours contact avec la console :/