Return to Snippet

Revision: 17768
at September 14, 2009 05:21 by gfazioli


Initial Code
***************************************************************************************
* (20-Feb-1995) --- ValueToStringDec(buffer, value, optlen) (A0/D0/D1)
***************************************************************************************
_LVOValueToStringDec
movem.l d2-d7,-(sp)
tst.l d1 * Decido lunghezza della stringa??
bne.s ConLen * Usa l'altra routine di conversione.
moveq #10,d5 ; 10
moveq #"0",d2 ; fast Code "0" $30
tst.l d0 ; Vediamo se è negativo
bpl.s CDD_PL
move.b #"-",(a0)+ ; Se Neg metti un meno nel buffer
neg.l d0 ; E trasforma POS
CDD_PL cmp.l d5,d0 ; vediamo se è <10
bhi.s CDD_BHI ; NO
bne.s CDD_BNE ; <>10?
move.w #"10",(a0)+ ; Metti 10 ed esci
move.b #0,(a0)
movem.l (sp)+,d2-d7
rts
CDD_BNE add.b d2,d0 ; Salva il numero
move.b d0,(a0)+ ; visto che è <10
move.b #0,(a0) ; azzera ed esci
movem.l (sp)+,d2-d7 *
rts
;--------------------------------------------------------------------------------------
CDD_BHI lea Tables+4(pc),a1
CDD_GT cmp.l (a1)+,d0
bge.s CDD_GT
subq.l #8,a1
move.l d0,d3
DCC_LX move.l (a1),d1
bne.s DCC_CT
move.b d1,(a0)+
movem.l (sp)+,d2-d7
rts
;--------------------------------------------------------------------------------------
DCC_CT moveq #-1,d4
DCC_LP move.l d3,d5
addq.w #1,d4
sub.l d1,d3
bcc.s DCC_LP
DC_LAS add.b d2,d4
move.b d4,(a0)+
move.l d5,d3
subq.w #4,a1
bra.s DCC_LX
;--------------------------------------------------------------------------------------
***************************************************************************************
* (20-Feb-1995) --- ConLen (Vedi sopra) Stessi INPUTS di ValueToStringDec()
***************************************************************************************
ConLen move.l a2,-(sp)
move.l a0,a2 * Routine che converte con la lunghezza fissa
moveq #0,d5 * D5 for len Count
moveq #10,d6
move.l d1,d7 * numero di caratteri finali
sub.b d7,d6
move.l d6,d7
subq.b #2,d1
move.l d1,d6
asl.l #2,d7
ConvDec_NoZero
lea ConvDec_Table(pc),a0 * Table of TEN (10)
lea (a0,d7.w),a0
move.l a2,a1
moveq #0,d5
tst.l d0
bpl.s ConvDec_Plus
moveq #1,d5 * Len+1 because there is "-"
move.b #"-",(a1)+ * Set Sign Char
neg.l d0 * Lo rende positivo
ConvDec_Plus
move.l d6,d4 * Loop for ....
moveq #"0",d7 * For Fasting CODE
ConvDec_ReStart
moveq #0,d3 * Ending Number
move.l (a0)+,d2 * 10xxx.. in d2
move.l d2,d1 * and save it in d1
ConvDec_Ctrl
cmp.l d2,d0
bmi.s ConvDec_Save
add.l d1,d2
addq.b #1,d3
bra.s ConvDec_Ctrl
ConvDec_Save
add.b d7,d3
move.b d3,(a1)+
addq.b #1,d5 * Count for Len
sub.l d1,d2
sub.l d2,d0
dbf d4,ConvDec_ReStart
add.b d7,d0
move.b d0,(a1)+
addq.b #1,d5
move.l d5,4(sp) * D1=Len
move.l (sp)+,a2
movem.l (sp)+,d2-d7
rts
;--------------------------------------------------------------------------------------
; Tavole di conversione decimale.
;--------------------------------------------------------------------------------------
dc.l 0
D2V_TableDec
dc.l 1
Tables dc.l 10
dc.l 100
dc.l 1000
dc.l 10000
dc.l 100000
dc.l 1000000
dc.l 10000000
dc.l 100000000
dc.l 1000000000
ConvDec_Table
dc.l 1000000000
dc.l 100000000
dc.l 10000000
dc.l 1000000
dc.l 100000
dc.l 10000
dc.l 1000
dc.l 100
dc.l 10
dc.l 1

Initial URL
http://www.undolog.com

Initial Description


Initial Title
ValueToStringDec

Initial Tags


Initial Language
Assembler