.include <m8def.inc>


#define tempHighByte	0x100
#define tempLowByte		0x101
#define tempInt			0x102
#define tempFract		0x103
#define decSign			0x104
#define decDigit3		0x105
#define decDigit2		0x106
#define decDigit1		0x107
#define decPoint		0x108
#define decDigit0		0x109


	ldi		r16, High(RAMEND)
	out		SPH, r16
	ldi		r16, Low(RAMEND)
	out		SPL, r16

_mainloop:	
	rcall	_convert_temperature
	rjmp	_mainloop


_convert_temperature:
	lds		r24, tempLowByte
	lds		r25, tempHighByte
	lsl		r24
	rol		r25
	lsl		r24
	rol		r25
	lsl		r24
	rol		r25
	lsl		r24
	rol		r25
	sts		tempInt,r25
	sts		tempFract,r24
	ldi		r16,0
	sbrs	r25,7
	rjmp	_value_positive
	com		r24
	com		r25
	adiw	r25:r24, 1
	ldi		r16, '-'
_value_positive:
	sts		decSign, r16
	mov		r16,r25
	rcall	_bin2bcd
	ori		r16, 0x30
	ori		r17, 0x30
	ori		r18, 0x30
	sts		decDigit3, r18
	sts		decDigit2, r17
	sts		decDigit1, r16
	ldi		r16, 0
	sbrc	r24, 7
	ldi		r16, 5
	ori		r16, 0x30
	sts		decDigit0, r16
	ldi		r16, ','
	sts		decPoint, r16
	ret

_bin2bcd:
   ldi      r17, -1
   ldi      r18, -1
_calc_hundreds:
   inc      r18
   subi   r16,100
   brbc   sreg_c,_calc_hundreds
   subi   r16, -100
_calc_tens:
   inc      r17
   subi   r16,10
   brbc   sreg_c,_calc_tens
   subi   r16, -10
   ret
