Ultima mia versione del primo algoritmo (BCD -> BIN). Identico al
precedente ma usa RRCA (1 byte) invece di SRL A (2 byte).
LD D,A
AND 15 ; low
LD E,A
XOR D ; high x 16
RRCA ; high x 8
LD D,A
RRCA ; high x 4
RRCA ; high x 2
ADD A,D ; high x 10
ADD A,E ; high x 10 + low
2016-05-09 23:51 GMT-07:00 Paolo Ferraris <pieffe8@xxxxxxxxx>:
Algoritmo inverso. Purtroppo richede divisione per 10.
LD C,-1
LOOP:
INC C
SUB 10
JR C,LOOP
ADD A,10
LD B,A
LD A,C
ADD A,A
ADD A,A
ADD A,A
ADD A,A
ADD A,B
2016-05-09 23:29 GMT-07:00 Paolo Ferraris <pieffe8@xxxxxxxxx>:
Ancora meglio:
LD D,A
AND 15 ; low
LD E,A
XOR D ; high x 16
SRL A ; high x 8
LD D,A
SRL A ; high x 4
SRL A ; high x 2
ADD A,D ; high x 10
ADD A,E ; high x 10 + low
2016-05-09 23:16 GMT-07:00 Paolo Ferraris <pieffe8@xxxxxxxxx>:
Forse questo funziona?
LD D,A
AND 15 ; low
LD E,A
LD A,D
XOR E ; high x 16
SRL A ; high x 8
LD D,A
SRL A ; high x 4
SRL A ; high x 2
ADD A,D ; high x 10
ADD A,E ; high x 10 + low
Chiedo scusa, non ho a portata di mano l'assembler per provarlo.
2016-05-09 23:08 GMT-07:00 Paolo Ferraris <pieffe8@xxxxxxxxx>:
Hai ragione. Nella "divisione per 8" rimane un bit non cancellato.
2016-05-09 14:01 GMT-07:00 Enrico Maria Giordano <
e.m.giordano@xxxxxxxxxxxxxxx>:
Il 09/05/2016 22:58, Enrico Maria Giordano ha scritto:
Ok, allora a posto così. La routine, con l'ottimizzazione di Paolo
diventa:
BCDTOBIN
LD D,A
AND 15
LD E,A
LD A,D
SRL A
SRL A
SRL A
LD D,A
ADD A,A
ADD A,A
ADD A,D
ADD A,E
RET
Ho fatto un po' di prove e purtroppo no, non funziona. Ci vuole quella
originale.
EMG
--
EMAG Software Homepage: http://www.emagsoftware.it
The EMG Music page: http://www.emagsoftware.it/emgmusic
The EMG's ZX-Spectrum Page: http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: http://www.emagsoftware.it/tbosg