
Rester à discuter... ça marche sur Handy/MacOSX, mais les tests sur la Lynx de Coopy en .O et .LNX flashé, ça freeze quand c'est trop sollicité.
Attention, les multiplications d'int 16bits peuvent se faire en signé ou non signé, avec accumulation ou non (le résultat de 32 bits est déposé et ajouté dans un registre, ce qui peut être pratique). Pour activer le mode signé + accumulation, avant vos opérations :
sprsys = _sprsys |= 0xc0;
Attention, les divisions sont toujours en mode non signé

Astuce : si vous avez des décalages de 8 bits ou des mutliplications de 256 avant division, il est intéressant de positionner votre dépôt d'int un byte plus loin

int matha at 0xfc52, mathb at 0xfc54, mathc at 0xfc56, mathe at 0xfc60, mathf at 0xfc62, mathakku at 0xfc6c; int MUL(a, b) int a; int b; { // multiplication toute bête, le dépôt dans mathb active la multiplication matha = a; mathb = b; while(PEEK(0xfc92) & 0x80) {} // on attend que Suzy a fini, me demande si WAITSUZY; est pas mieux return mathe; // normalement on a un long, mais on retourne un int, vu la déclaration de mathe } uchar s; int DIV(e, c) int e; int c; { // division toute simple s = 0; if (c & 0x8000) { mathc = -c; s++; } else { mathc = c; } // on n'insère que des positifs if (e & 0x8000) { mathe = -e; s++; } else { mathe = e; } mathe = e; mathf = 0x0000; while(PEEK(0xfc92) & 0x80) {} if (s & 1) { return -matha; } // on récupère un négatif si l'un OU l'autre est négatif return matha; } void AKKU_Reset() { POKE(0xfc6c, 0); POKE(0xfc6e, 0); } // à appeler avant, pour nettoyer le registre void AKKU_MUL(a, b) int a; int b; { // multiplication et accumulation, il faut que le bit 6 de sprsys soit aussi enclenché matha = a; mathb = b; while(PEEK(0xfc92) & 0x80) {} } int AKKU_Get() { return mathakku; } // on récupère la somme
Important : contrairement à mes habitudes de Atari ST, les poids forts et faibles des int et long sont organisés comme chez Mister Intel.
Il y a plus d'explications dans les docs-dev : lynx9.html et hardware.html.
Un grand merci à _Dbug_ de Next qui m'a ouvert les neunoeils concernant le mode division sans négatifs, et mon erreur poids faible/fort.