;************************************************************************* ;* * ;* Convert unsigned 32bit to ASCII * ;* * ;* Author: Peter Dannegger * ;* danni@specs.de * ;* * ;************************************************************************* ; ;input: R31, R30, R29, R28 = 32 bit value 0 ... 4294967295 ;output: R25, R24, R23, R22, R21, R20, R19, R18, R17, R16 = 10 digits (ASCII) ; bin32_ascii: ldi r25, -1 + '0' _bcd1: inc r25 subi r29, byte2(1000000000) ;-1000,000,000 until overflow sbci r30, byte3(1000000000) sbci r31, byte4(1000000000) brcc _bcd1 ldi r24, 10 + '0' _bcd2: dec r24 subi r29, byte2(-100000000) ;+100,000,000 until no overflow sbci r30, byte3(-100000000) sbci r31, byte4(-100000000) brcs _bcd2 ldi r23, -1 + '0' _bcd3: inc r23 subi r28, byte1(10000000) ;-10,000,000 sbci r29, byte2(10000000) sbci r30, byte3(10000000) sbci r31, 0 brcc _bcd3 ldi r22, 10 + '0' _bcd4: dec r22 subi r28, byte1(-1000000) ;+1,000,000 sbci r29, byte2(-1000000) sbci r30, byte3(-1000000) brcs _bcd4 ldi r21, -1 + '0' _bcd5: inc r21 subi r28, byte1(100000) ;-100,000 sbci r29, byte2(100000) sbci r30, byte3(100000) brcc _bcd5 ldi r20, 10 + '0' _bcd6: dec r20 subi r28, byte1(-10000) ;+10,000 sbci r29, byte2(-10000) sbci r30, byte3(-10000) brcs _bcd6 ldi r19, -1 + '0' _bcd7: inc r19 subi r30, low(1000) ;-1000 sbci r31, high(1000) brcc _bcd7 ldi r18, 10 + '0' _bcd8: dec r18 subi r30, low(-100) ;+100 sbci r31, high(-100) brcs _bcd8 ldi r17, -1 + '0' _bcd9: inc r17 subi r30, 10 ;-10 brcc _bcd9 mov r16, r30 subi r16, -10 - '0' ret ;-------------------------------------------------------------------------