[zxspectrum] Re: ZX Coding competition

  • From: Alfonso Martone <a.martone@xxxxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Fri, 24 Oct 2003 00:04:32 +0200

> > esponente "00/xx/xx/00", cioe' come "00 00 60 EA 00", dove $EA60
> > e' proprio 60000!
>
> No, fermo, aspetta li'...
> Questa cosa funziona solo con gli interi.

Esatto... con tutti e 65536 interi :-)
Mettendo 60000.5 si ottengono valori diversi (e ci mancherebbe!).

"123456" non si puo' convertire in un intero "z80" (a 16 bit) per cui 
la soluzione dovrebbe essere qualcosa tipo FP-TO-INT e ritorno.

Ecco un'altra soluzione (la pizza mi ha ispirato):

    rst $28
    defb $34                  ; stk-data
    defb 142,64,230,102,102   ; number (indovin qual est this number!)
    defb $38                  ; end-calc
    call $2da2                ; fp-to-bc
    ret nc                    ; torna subito se conversione ok
    ld bc, 0                  ; altrimenti restituisci zero
    ret

Urka, siamo a 16 bytes tondi tondi (compreso lo stacking dei cinque 
byte del numero floating point)!!! E ora indovina di che numero si 
tratta! (quello originale in floating-point, dico!).

Il disassemblato della routine fp-to-bc ($2da2) contiene qualche 
spunto simpatico - la conversione e' uguale a INT (x+.5) ...!


> > La conversione e' esatta, e vale per qualsiasi numero da 0 a
> > 65535!
> No, mi sa che vale per ogni numero da -32768 a 32767

Li' avevo fatto "LET a=60000" e mi ritrovo la coppia $EA/$60, quindi 
deve valere per i numeri positivi...!

alf

Other related posts: