[zxspectrum] Re: Aiuto, il giochino mi va in crash!

  • From: Marcello Zaniboni <marcello.zaniboni@xxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Wed, 16 Nov 2005 10:30:53 +0100

> la funzione doubletrunc e` pericolosa, perche` presuppone che la
> scrittura di un double includa sempre il . decimale. Non credo che
> questo sia specificato nello standard ANSI. Anzi, se un numero e` molto
> grande - fai conto un milione - potresti ottenere qualcosa come 1E6
> o similare. Credo che
>     sprintf(output, "%.1f\0", value);
> faccia esattamente quello che chiedi dalla funzione doubletrunc. Se non
> funziona, ed il numero non viene scritto in formato esponenziale, penso
> che sia comunque piu` sicuro sostituire la riga
>     sprintf(output, "%f", value);
> nella funzione doubletrunc con
>     sprintf(output, "%f.0", value);

Quello che dici è vero; tuttavia anche io sono convinto che il
problema non sia in quella funzione. Sono stato costretto a scrivermi
quella funzione poiché z88dk non supporta %f.0 ma solo %f :-(
...comunque la metterò a posto.

> Comunque non credo che il problema sia li`, visto che il programma fa
> ancora in tempo a scrivere il numero troncato prima di crashare. Darei
> un'occhiata alla chiamata bit_fx(6), visto che le linee precedenti pare
> funzionare perfettamente, ma nessun suono e` prodotto.

Temo anche io e forse ne ho la prova definitiva: ho fatto questo test

    #include <sound.h>
    #include <stdio.h>

    #define N_EFFECTS 7
    #define N_TIMES 5

    int main() {
        int i, j;
        putchar(12);
        for (i = 0; i <= N_EFFECTS ; i++ )
            for (j = 0; j < N_TIMES ; j++) {
                printf("i=%d, j=%d\n", i, j);
                bit_fx(i);
            }
    }

...e l'ho compklato con
zcc +zx -O3 -zorg=36864 -create-app -vn -lndos -lm -o fx2 fx2.c

E il risultato è stato incredibile: di tanto in tanto il colore del
bordo cambia inaspettatamente. Segno che qualcosa in qualche area di
memoria strana è stato modificato dalla funzione bit_fx(int)! Solo che
è scritta interamente in LM :-(
Il sorgente è qui:

http://cvs.sourceforge.net/viewcvs.py/z88dk/z88dk/libsrc/games/bit_fx.asm?rev=1.2&view=log

Grazie e ciao,
Marcello

Other related posts: