[zxspectrum] Re: ZX Coding competition

  • From: Alfonso Martone <a.martone@xxxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Thu, 23 Oct 2003 13:57:39 +0200

> > Per quanto riguarda la conversione di un numero in virgola mobile
> > in intero bastano solo queste 2 istruzioni?

Oops. Scusate l'ennesimo messaggio, ma qualcosa non mi quadra...

Se io dallo Spectrum Basic faccio "LET a=60000", il numero e' intero 
ma viene memorizzato in floating point con mantissa 0 ed esponente 
"00/xx/xx/00", cioe' come "00 00 60 EA 00", dove $EA60 e' proprio 
60000!

Provare per credere (sullo Spectrum 16k o 48k, senza interfacce):

10 LET a=60000
20 FOR n=23756 TO 24000
30 PRINT n,PEEK n
40 IF PEEK (n-3)=96 THEN STOP
50 NEXT n

Vedete? Vedete? E' la versione binaria del programma Basic. Non ditemi 
che non vi accorgete di quel 60000, diventato CHR$ 14 (number) e i 
cinque bytes 0, 0, 96 ($60), 234 ($EA), 0.

A questo punto il mio programma che converte un float in un intero 
diventa qualcosa tipo:

         ld bc, (23770)
         ret

La conversione e' esatta, e vale per qualsiasi numero da 0 a 65535! 
:-)

Funziona anche se sostituite la riga 10 con qualcosa tipo:

10 LET a=60000.000

Allora? Cosa ho vinto? che ho vinto? Me lo merito un 48k ISSUE3 ancora 
nella scatola originale? =:-)

alf

Other related posts: