;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; http://www.telesys.ru/wwwboards/mcontrol/297/messages/141922.shtml
;
;Converts unsigned integer value of bin_h:bin_l to ASCII string.
;Only upper registers can be used, bin_h/asc4 and bin_l/asc5
;variable pairs must share common register each.
;26 words, 183(bin=59999)/32(bin=0) clocks with rcall.
;No registers used ;)
;
;.def asc1 =r16
;.def asc2 =r17
;.def asc3 =r18
;
;.def asc4 =r19
;.def bin_h =r19
;
;.def asc5 =r20
;.def bin_l =r20
;
;ldi bin_h,high(59999) ;Just for test
;ldi bin_l,low(59999) ;
;ldi bin_h,0x04 ;Just for test
;ldi bin_l,0xE2 ;
; rcall itoa ;
;nop ;
;
itoa:
;;;;;;;;;;;;;
ldi asc1,'0'-1 ;Will be ASCII '0' after 1st increment
sub10k:
inc asc1 ;'0','1','2','3','4','5','6'
subi bin_l,low(10000)
sbci bin_h,high(10000)
brsh sub10k
subi bin_l,low(-10000)
sbci bin_h,high(-10000)
;
ldi asc2,'0'-1
sub1k:
inc asc2 ;'0','1','2','3','4','5','6','7','8','9'
subi bin_l,low(1000)
sbci bin_h,high(1000)
brsh sub1k
subi bin_l,low(-1000)
sbci bin_h,high(-1000)
;
ldi asc3,'0'-1
sub100:
inc asc3 ;'0','1','2','3','4','5','6','7','8','9'
subi bin_l,low(100)
sbci bin_h,high(100)
brsh sub100
subi bin_l,low(-100)
;
ldi asc4,'0'-1 ;Re-use bin_h as ASC4
sub10:
inc asc4 ;'0','1','2','3','4','5','6','7','8','9'
subi bin_l,10 ;Re-use bin_l as ASC5
brsh sub10
subi asc5,-('0'+10) ;Correct negative value and convert it to ASCII
;
nop
;ret