
;CodeVisionAVR C Compiler V2.05.3 Standard
;(C) Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
;http://www.hpinfotech.com

;Chip type                : ATmega48
;Program type             : Application
;Clock frequency          : 12.000000 MHz
;Memory model             : Small
;Optimize for             : Size
;(s)printf features       : int
;(s)scanf features        : int, width
;External RAM size        : 0
;Data Stack size          : 128 byte(s)
;Heap size                : 0 byte(s)
;Promote 'char' to 'int'  : Yes
;'char' is unsigned       : Yes
;8 bit enums              : Yes
;Global 'const' stored in FLASH     : No
;Enhanced function parameter passing: Yes
;Enhanced core instructions         : On
;Smart register allocation          : On
;Automatic register allocation      : On

	#pragma AVRPART ADMIN PART_NAME ATmega48
	#pragma AVRPART MEMORY PROG_FLASH 4096
	#pragma AVRPART MEMORY EEPROM 256
	#pragma AVRPART MEMORY INT_SRAM SIZE 767
	#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x100

	.LISTMAC
	.EQU EERE=0x0
	.EQU EEWE=0x1
	.EQU EEMWE=0x2
	.EQU UDRE=0x5
	.EQU RXC=0x7
	.EQU EECR=0x1F
	.EQU EEDR=0x20
	.EQU EEARL=0x21
	.EQU EEARH=0x22
	.EQU SPSR=0x2D
	.EQU SPDR=0x2E
	.EQU SMCR=0x33
	.EQU MCUSR=0x34
	.EQU MCUCR=0x35
	.EQU WDTCSR=0x60
	.EQU UCSR0A=0xC0
	.EQU UDR0=0xC6
	.EQU SPL=0x3D
	.EQU SPH=0x3E
	.EQU SREG=0x3F
	.EQU GPIOR0=0x1E

	.DEF R0X0=R0
	.DEF R0X1=R1
	.DEF R0X2=R2
	.DEF R0X3=R3
	.DEF R0X4=R4
	.DEF R0X5=R5
	.DEF R0X6=R6
	.DEF R0X7=R7
	.DEF R0X8=R8
	.DEF R0X9=R9
	.DEF R0XA=R10
	.DEF R0XB=R11
	.DEF R0XC=R12
	.DEF R0XD=R13
	.DEF R0XE=R14
	.DEF R0XF=R15
	.DEF R0X10=R16
	.DEF R0X11=R17
	.DEF R0X12=R18
	.DEF R0X13=R19
	.DEF R0X14=R20
	.DEF R0X15=R21
	.DEF R0X16=R22
	.DEF R0X17=R23
	.DEF R0X18=R24
	.DEF R0X19=R25
	.DEF R0X1A=R26
	.DEF R0X1B=R27
	.DEF R0X1C=R28
	.DEF R0X1D=R29
	.DEF R0X1E=R30
	.DEF R0X1F=R31

	.EQU __SRAM_START=0x0100
	.EQU __SRAM_END=0x02FF
	.EQU __DSTACK_SIZE=0x0080
	.EQU __HEAP_SIZE=0x0000
	.EQU __CLEAR_SRAM_SIZE=__SRAM_END-__SRAM_START+1

	.MACRO __CPD1N
	CPI  R30,LOW(@0)
	LDI  R26,HIGH(@0)
	CPC  R31,R26
	LDI  R26,BYTE3(@0)
	CPC  R22,R26
	LDI  R26,BYTE4(@0)
	CPC  R23,R26
	.ENDM

	.MACRO __CPD2N
	CPI  R26,LOW(@0)
	LDI  R30,HIGH(@0)
	CPC  R27,R30
	LDI  R30,BYTE3(@0)
	CPC  R24,R30
	LDI  R30,BYTE4(@0)
	CPC  R25,R30
	.ENDM

	.MACRO __CPWRR
	CP   R@0,R@2
	CPC  R@1,R@3
	.ENDM

	.MACRO __CPWRN
	CPI  R@0,LOW(@2)
	LDI  R30,HIGH(@2)
	CPC  R@1,R30
	.ENDM

	.MACRO __ADDB1MN
	SUBI R30,LOW(-@0-(@1))
	.ENDM

	.MACRO __ADDB2MN
	SUBI R26,LOW(-@0-(@1))
	.ENDM

	.MACRO __ADDW1MN
	SUBI R30,LOW(-@0-(@1))
	SBCI R31,HIGH(-@0-(@1))
	.ENDM

	.MACRO __ADDW2MN
	SUBI R26,LOW(-@0-(@1))
	SBCI R27,HIGH(-@0-(@1))
	.ENDM

	.MACRO __ADDW1FN
	SUBI R30,LOW(-2*@0-(@1))
	SBCI R31,HIGH(-2*@0-(@1))
	.ENDM

	.MACRO __ADDD1FN
	SUBI R30,LOW(-2*@0-(@1))
	SBCI R31,HIGH(-2*@0-(@1))
	SBCI R22,BYTE3(-2*@0-(@1))
	.ENDM

	.MACRO __ADDD1N
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	SBCI R22,BYTE3(-@0)
	SBCI R23,BYTE4(-@0)
	.ENDM

	.MACRO __ADDD2N
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	SBCI R24,BYTE3(-@0)
	SBCI R25,BYTE4(-@0)
	.ENDM

	.MACRO __SUBD1N
	SUBI R30,LOW(@0)
	SBCI R31,HIGH(@0)
	SBCI R22,BYTE3(@0)
	SBCI R23,BYTE4(@0)
	.ENDM

	.MACRO __SUBD2N
	SUBI R26,LOW(@0)
	SBCI R27,HIGH(@0)
	SBCI R24,BYTE3(@0)
	SBCI R25,BYTE4(@0)
	.ENDM

	.MACRO __ANDBMNN
	LDS  R30,@0+(@1)
	ANDI R30,LOW(@2)
	STS  @0+(@1),R30
	.ENDM

	.MACRO __ANDWMNN
	LDS  R30,@0+(@1)
	ANDI R30,LOW(@2)
	STS  @0+(@1),R30
	LDS  R30,@0+(@1)+1
	ANDI R30,HIGH(@2)
	STS  @0+(@1)+1,R30
	.ENDM

	.MACRO __ANDD1N
	ANDI R30,LOW(@0)
	ANDI R31,HIGH(@0)
	ANDI R22,BYTE3(@0)
	ANDI R23,BYTE4(@0)
	.ENDM

	.MACRO __ANDD2N
	ANDI R26,LOW(@0)
	ANDI R27,HIGH(@0)
	ANDI R24,BYTE3(@0)
	ANDI R25,BYTE4(@0)
	.ENDM

	.MACRO __ORBMNN
	LDS  R30,@0+(@1)
	ORI  R30,LOW(@2)
	STS  @0+(@1),R30
	.ENDM

	.MACRO __ORWMNN
	LDS  R30,@0+(@1)
	ORI  R30,LOW(@2)
	STS  @0+(@1),R30
	LDS  R30,@0+(@1)+1
	ORI  R30,HIGH(@2)
	STS  @0+(@1)+1,R30
	.ENDM

	.MACRO __ORD1N
	ORI  R30,LOW(@0)
	ORI  R31,HIGH(@0)
	ORI  R22,BYTE3(@0)
	ORI  R23,BYTE4(@0)
	.ENDM

	.MACRO __ORD2N
	ORI  R26,LOW(@0)
	ORI  R27,HIGH(@0)
	ORI  R24,BYTE3(@0)
	ORI  R25,BYTE4(@0)
	.ENDM

	.MACRO __DELAY_USB
	LDI  R24,LOW(@0)
__DELAY_USB_LOOP:
	DEC  R24
	BRNE __DELAY_USB_LOOP
	.ENDM

	.MACRO __DELAY_USW
	LDI  R24,LOW(@0)
	LDI  R25,HIGH(@0)
__DELAY_USW_LOOP:
	SBIW R24,1
	BRNE __DELAY_USW_LOOP
	.ENDM

	.MACRO __GETD1S
	LDD  R30,Y+@0
	LDD  R31,Y+@0+1
	LDD  R22,Y+@0+2
	LDD  R23,Y+@0+3
	.ENDM

	.MACRO __GETD2S
	LDD  R26,Y+@0
	LDD  R27,Y+@0+1
	LDD  R24,Y+@0+2
	LDD  R25,Y+@0+3
	.ENDM

	.MACRO __PUTD1S
	STD  Y+@0,R30
	STD  Y+@0+1,R31
	STD  Y+@0+2,R22
	STD  Y+@0+3,R23
	.ENDM

	.MACRO __PUTD2S
	STD  Y+@0,R26
	STD  Y+@0+1,R27
	STD  Y+@0+2,R24
	STD  Y+@0+3,R25
	.ENDM

	.MACRO __PUTDZ2
	STD  Z+@0,R26
	STD  Z+@0+1,R27
	STD  Z+@0+2,R24
	STD  Z+@0+3,R25
	.ENDM

	.MACRO __CLRD1S
	STD  Y+@0,R30
	STD  Y+@0+1,R30
	STD  Y+@0+2,R30
	STD  Y+@0+3,R30
	.ENDM

	.MACRO __POINTB1MN
	LDI  R30,LOW(@0+(@1))
	.ENDM

	.MACRO __POINTW1MN
	LDI  R30,LOW(@0+(@1))
	LDI  R31,HIGH(@0+(@1))
	.ENDM

	.MACRO __POINTD1M
	LDI  R30,LOW(@0)
	LDI  R31,HIGH(@0)
	LDI  R22,BYTE3(@0)
	LDI  R23,BYTE4(@0)
	.ENDM

	.MACRO __POINTW1FN
	LDI  R30,LOW(2*@0+(@1))
	LDI  R31,HIGH(2*@0+(@1))
	.ENDM

	.MACRO __POINTD1FN
	LDI  R30,LOW(2*@0+(@1))
	LDI  R31,HIGH(2*@0+(@1))
	LDI  R22,BYTE3(2*@0+(@1))
	LDI  R23,BYTE4(2*@0+(@1))
	.ENDM

	.MACRO __POINTB2MN
	LDI  R26,LOW(@0+(@1))
	.ENDM

	.MACRO __POINTW2MN
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	.ENDM

	.MACRO __POINTW2FN
	LDI  R26,LOW(2*@0+(@1))
	LDI  R27,HIGH(2*@0+(@1))
	.ENDM

	.MACRO __POINTD2FN
	LDI  R26,LOW(2*@0+(@1))
	LDI  R27,HIGH(2*@0+(@1))
	LDI  R24,BYTE3(2*@0+(@1))
	LDI  R25,BYTE4(2*@0+(@1))
	.ENDM

	.MACRO __POINTBRM
	LDI  R@0,LOW(@1)
	.ENDM

	.MACRO __POINTWRM
	LDI  R@0,LOW(@2)
	LDI  R@1,HIGH(@2)
	.ENDM

	.MACRO __POINTBRMN
	LDI  R@0,LOW(@1+(@2))
	.ENDM

	.MACRO __POINTWRMN
	LDI  R@0,LOW(@2+(@3))
	LDI  R@1,HIGH(@2+(@3))
	.ENDM

	.MACRO __POINTWRFN
	LDI  R@0,LOW(@2*2+(@3))
	LDI  R@1,HIGH(@2*2+(@3))
	.ENDM

	.MACRO __GETD1N
	LDI  R30,LOW(@0)
	LDI  R31,HIGH(@0)
	LDI  R22,BYTE3(@0)
	LDI  R23,BYTE4(@0)
	.ENDM

	.MACRO __GETD2N
	LDI  R26,LOW(@0)
	LDI  R27,HIGH(@0)
	LDI  R24,BYTE3(@0)
	LDI  R25,BYTE4(@0)
	.ENDM

	.MACRO __GETB1MN
	LDS  R30,@0+(@1)
	.ENDM

	.MACRO __GETB1HMN
	LDS  R31,@0+(@1)
	.ENDM

	.MACRO __GETW1MN
	LDS  R30,@0+(@1)
	LDS  R31,@0+(@1)+1
	.ENDM

	.MACRO __GETD1MN
	LDS  R30,@0+(@1)
	LDS  R31,@0+(@1)+1
	LDS  R22,@0+(@1)+2
	LDS  R23,@0+(@1)+3
	.ENDM

	.MACRO __GETBRMN
	LDS  R@0,@1+(@2)
	.ENDM

	.MACRO __GETWRMN
	LDS  R@0,@2+(@3)
	LDS  R@1,@2+(@3)+1
	.ENDM

	.MACRO __GETWRZ
	LDD  R@0,Z+@2
	LDD  R@1,Z+@2+1
	.ENDM

	.MACRO __GETD2Z
	LDD  R26,Z+@0
	LDD  R27,Z+@0+1
	LDD  R24,Z+@0+2
	LDD  R25,Z+@0+3
	.ENDM

	.MACRO __GETB2MN
	LDS  R26,@0+(@1)
	.ENDM

	.MACRO __GETW2MN
	LDS  R26,@0+(@1)
	LDS  R27,@0+(@1)+1
	.ENDM

	.MACRO __GETD2MN
	LDS  R26,@0+(@1)
	LDS  R27,@0+(@1)+1
	LDS  R24,@0+(@1)+2
	LDS  R25,@0+(@1)+3
	.ENDM

	.MACRO __PUTB1MN
	STS  @0+(@1),R30
	.ENDM

	.MACRO __PUTW1MN
	STS  @0+(@1),R30
	STS  @0+(@1)+1,R31
	.ENDM

	.MACRO __PUTD1MN
	STS  @0+(@1),R30
	STS  @0+(@1)+1,R31
	STS  @0+(@1)+2,R22
	STS  @0+(@1)+3,R23
	.ENDM

	.MACRO __PUTB1EN
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	RCALL __EEPROMWRB
	.ENDM

	.MACRO __PUTW1EN
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	RCALL __EEPROMWRW
	.ENDM

	.MACRO __PUTD1EN
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	RCALL __EEPROMWRD
	.ENDM

	.MACRO __PUTBR0MN
	STS  @0+(@1),R0
	.ENDM

	.MACRO __PUTBMRN
	STS  @0+(@1),R@2
	.ENDM

	.MACRO __PUTWMRN
	STS  @0+(@1),R@2
	STS  @0+(@1)+1,R@3
	.ENDM

	.MACRO __PUTBZR
	STD  Z+@1,R@0
	.ENDM

	.MACRO __PUTWZR
	STD  Z+@2,R@0
	STD  Z+@2+1,R@1
	.ENDM

	.MACRO __GETW1R
	MOV  R30,R@0
	MOV  R31,R@1
	.ENDM

	.MACRO __GETW2R
	MOV  R26,R@0
	MOV  R27,R@1
	.ENDM

	.MACRO __GETWRN
	LDI  R@0,LOW(@2)
	LDI  R@1,HIGH(@2)
	.ENDM

	.MACRO __PUTW1R
	MOV  R@0,R30
	MOV  R@1,R31
	.ENDM

	.MACRO __PUTW2R
	MOV  R@0,R26
	MOV  R@1,R27
	.ENDM

	.MACRO __ADDWRN
	SUBI R@0,LOW(-@2)
	SBCI R@1,HIGH(-@2)
	.ENDM

	.MACRO __ADDWRR
	ADD  R@0,R@2
	ADC  R@1,R@3
	.ENDM

	.MACRO __SUBWRN
	SUBI R@0,LOW(@2)
	SBCI R@1,HIGH(@2)
	.ENDM

	.MACRO __SUBWRR
	SUB  R@0,R@2
	SBC  R@1,R@3
	.ENDM

	.MACRO __ANDWRN
	ANDI R@0,LOW(@2)
	ANDI R@1,HIGH(@2)
	.ENDM

	.MACRO __ANDWRR
	AND  R@0,R@2
	AND  R@1,R@3
	.ENDM

	.MACRO __ORWRN
	ORI  R@0,LOW(@2)
	ORI  R@1,HIGH(@2)
	.ENDM

	.MACRO __ORWRR
	OR   R@0,R@2
	OR   R@1,R@3
	.ENDM

	.MACRO __EORWRR
	EOR  R@0,R@2
	EOR  R@1,R@3
	.ENDM

	.MACRO __GETWRS
	LDD  R@0,Y+@2
	LDD  R@1,Y+@2+1
	.ENDM

	.MACRO __PUTBSR
	STD  Y+@1,R@0
	.ENDM

	.MACRO __PUTWSR
	STD  Y+@2,R@0
	STD  Y+@2+1,R@1
	.ENDM

	.MACRO __MOVEWRR
	MOV  R@0,R@2
	MOV  R@1,R@3
	.ENDM

	.MACRO __INWR
	IN   R@0,@2
	IN   R@1,@2+1
	.ENDM

	.MACRO __OUTWR
	OUT  @2+1,R@1
	OUT  @2,R@0
	.ENDM

	.MACRO __CALL1MN
	LDS  R30,@0+(@1)
	LDS  R31,@0+(@1)+1
	ICALL
	.ENDM

	.MACRO __CALL1FN
	LDI  R30,LOW(2*@0+(@1))
	LDI  R31,HIGH(2*@0+(@1))
	RCALL __GETW1PF
	ICALL
	.ENDM

	.MACRO __CALL2EN
	LDI  R26,LOW(@0+(@1))
	LDI  R27,HIGH(@0+(@1))
	RCALL __EEPROMRDW
	ICALL
	.ENDM

	.MACRO __GETW1STACK
	IN   R26,SPL
	IN   R27,SPH
	ADIW R26,@0+1
	LD   R30,X+
	LD   R31,X
	.ENDM

	.MACRO __GETD1STACK
	IN   R26,SPL
	IN   R27,SPH
	ADIW R26,@0+1
	LD   R30,X+
	LD   R31,X+
	LD   R22,X
	.ENDM

	.MACRO __NBST
	BST  R@0,@1
	IN   R30,SREG
	LDI  R31,0x40
	EOR  R30,R31
	OUT  SREG,R30
	.ENDM


	.MACRO __PUTB1SN
	LDD  R26,Y+@0
	LDD  R27,Y+@0+1
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X,R30
	.ENDM

	.MACRO __PUTW1SN
	LDD  R26,Y+@0
	LDD  R27,Y+@0+1
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1SN
	LDD  R26,Y+@0
	LDD  R27,Y+@0+1
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1SNS
	LDD  R26,Y+@0
	LDD  R27,Y+@0+1
	ADIW R26,@1
	ST   X,R30
	.ENDM

	.MACRO __PUTW1SNS
	LDD  R26,Y+@0
	LDD  R27,Y+@0+1
	ADIW R26,@1
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1SNS
	LDD  R26,Y+@0
	LDD  R27,Y+@0+1
	ADIW R26,@1
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1PMN
	LDS  R26,@0
	LDS  R27,@0+1
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X,R30
	.ENDM

	.MACRO __PUTW1PMN
	LDS  R26,@0
	LDS  R27,@0+1
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1PMN
	LDS  R26,@0
	LDS  R27,@0+1
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1PMNS
	LDS  R26,@0
	LDS  R27,@0+1
	ADIW R26,@1
	ST   X,R30
	.ENDM

	.MACRO __PUTW1PMNS
	LDS  R26,@0
	LDS  R27,@0+1
	ADIW R26,@1
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1PMNS
	LDS  R26,@0
	LDS  R27,@0+1
	ADIW R26,@1
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1RN
	MOVW R26,R@0
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X,R30
	.ENDM

	.MACRO __PUTW1RN
	MOVW R26,R@0
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1RN
	MOVW R26,R@0
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1RNS
	MOVW R26,R@0
	ADIW R26,@1
	ST   X,R30
	.ENDM

	.MACRO __PUTW1RNS
	MOVW R26,R@0
	ADIW R26,@1
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1RNS
	MOVW R26,R@0
	ADIW R26,@1
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1RON
	MOV  R26,R@0
	MOV  R27,R@1
	SUBI R26,LOW(-@2)
	SBCI R27,HIGH(-@2)
	ST   X,R30
	.ENDM

	.MACRO __PUTW1RON
	MOV  R26,R@0
	MOV  R27,R@1
	SUBI R26,LOW(-@2)
	SBCI R27,HIGH(-@2)
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1RON
	MOV  R26,R@0
	MOV  R27,R@1
	SUBI R26,LOW(-@2)
	SBCI R27,HIGH(-@2)
	RCALL __PUTDP1
	.ENDM

	.MACRO __PUTB1RONS
	MOV  R26,R@0
	MOV  R27,R@1
	ADIW R26,@2
	ST   X,R30
	.ENDM

	.MACRO __PUTW1RONS
	MOV  R26,R@0
	MOV  R27,R@1
	ADIW R26,@2
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1RONS
	MOV  R26,R@0
	MOV  R27,R@1
	ADIW R26,@2
	RCALL __PUTDP1
	.ENDM


	.MACRO __GETB1SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R30,Z
	.ENDM

	.MACRO __GETB1HSX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R31,Z
	.ENDM

	.MACRO __GETW1SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R0,Z+
	LD   R31,Z
	MOV  R30,R0
	.ENDM

	.MACRO __GETD1SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R0,Z+
	LD   R1,Z+
	LD   R22,Z+
	LD   R23,Z
	MOVW R30,R0
	.ENDM

	.MACRO __GETB2SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R26,X
	.ENDM

	.MACRO __GETW2SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R27,X
	MOV  R26,R0
	.ENDM

	.MACRO __GETD2SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R1,X+
	LD   R24,X+
	LD   R25,X
	MOVW R26,R0
	.ENDM

	.MACRO __GETBRSX
	MOVW R30,R28
	SUBI R30,LOW(-@1)
	SBCI R31,HIGH(-@1)
	LD   R@0,Z
	.ENDM

	.MACRO __GETWRSX
	MOVW R30,R28
	SUBI R30,LOW(-@2)
	SBCI R31,HIGH(-@2)
	LD   R@0,Z+
	LD   R@1,Z
	.ENDM

	.MACRO __GETBRSX2
	MOVW R26,R28
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	LD   R@0,X
	.ENDM

	.MACRO __GETWRSX2
	MOVW R26,R28
	SUBI R26,LOW(-@2)
	SBCI R27,HIGH(-@2)
	LD   R@0,X+
	LD   R@1,X
	.ENDM

	.MACRO __LSLW8SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	LD   R31,Z
	CLR  R30
	.ENDM

	.MACRO __PUTB1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X,R30
	.ENDM

	.MACRO __PUTW1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X+,R30
	ST   X+,R31
	ST   X+,R22
	ST   X,R23
	.ENDM

	.MACRO __CLRW1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X+,R30
	ST   X,R30
	.ENDM

	.MACRO __CLRD1SX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	ST   X+,R30
	ST   X+,R30
	ST   X+,R30
	ST   X,R30
	.ENDM

	.MACRO __PUTB2SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	ST   Z,R26
	.ENDM

	.MACRO __PUTW2SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	ST   Z+,R26
	ST   Z,R27
	.ENDM

	.MACRO __PUTD2SX
	MOVW R30,R28
	SUBI R30,LOW(-@0)
	SBCI R31,HIGH(-@0)
	ST   Z+,R26
	ST   Z+,R27
	ST   Z+,R24
	ST   Z,R25
	.ENDM

	.MACRO __PUTBSRX
	MOVW R30,R28
	SUBI R30,LOW(-@1)
	SBCI R31,HIGH(-@1)
	ST   Z,R@0
	.ENDM

	.MACRO __PUTWSRX
	MOVW R30,R28
	SUBI R30,LOW(-@2)
	SBCI R31,HIGH(-@2)
	ST   Z+,R@0
	ST   Z,R@1
	.ENDM

	.MACRO __PUTB1SNX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R27,X
	MOV  R26,R0
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X,R30
	.ENDM

	.MACRO __PUTW1SNX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R27,X
	MOV  R26,R0
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X+,R30
	ST   X,R31
	.ENDM

	.MACRO __PUTD1SNX
	MOVW R26,R28
	SUBI R26,LOW(-@0)
	SBCI R27,HIGH(-@0)
	LD   R0,X+
	LD   R27,X
	MOV  R26,R0
	SUBI R26,LOW(-@1)
	SBCI R27,HIGH(-@1)
	ST   X+,R30
	ST   X+,R31
	ST   X+,R22
	ST   X,R23
	.ENDM

	.MACRO __MULBRR
	MULS R@0,R@1
	MOVW R30,R0
	.ENDM

	.MACRO __MULBRRU
	MUL  R@0,R@1
	MOVW R30,R0
	.ENDM

	.MACRO __MULBRR0
	MULS R@0,R@1
	.ENDM

	.MACRO __MULBRRU0
	MUL  R@0,R@1
	.ENDM

	.MACRO __MULBNWRU
	LDI  R26,@2
	MUL  R26,R@0
	MOVW R30,R0
	MUL  R26,R@1
	ADD  R31,R0
	.ENDM

;NAME DEFINITIONS FOR GLOBAL VARIABLES ALLOCATED TO REGISTERS
	.DEF _LastChar=R4

;GPIOR0 INITIALIZATION VALUE
	.EQU __GPIOR0_INIT=0x00

	.CSEG
	.ORG 0x00

;START OF CODE MARKER
__START_OF_CODE:

;INTERRUPT VECTORS
	RJMP __RESET
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP _adc_isr
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00
	RJMP 0x00

_tbl10_G100:
	.DB  0x10,0x27,0xE8,0x3,0x64,0x0,0xA,0x0
	.DB  0x1,0x0
_tbl16_G100:
	.DB  0x0,0x10,0x0,0x1,0x10,0x0,0x1,0x0

_0x3:
	.DB  0xC4,0x9
_0x4:
	.DB  0x88,0x13
_0x5:
	.DB  0x84,0x3
_0x0:
	.DB  0xD,0x48,0x56,0x5F,0x43,0x6F,0x6E,0x76
	.DB  0x65,0x72,0x74,0x65,0x72,0x3A,0x20,0x25
	.DB  0x64,0x0,0xD,0x56,0x5F,0x54,0x4F,0x5F
	.DB  0x50,0x57,0x4D,0x20,0x2A,0x20,0x31,0x30
	.DB  0x5E,0x33,0x20,0x3D,0x20,0x25,0x64,0x0
	.DB  0xD,0x41,0x44,0x43,0x5F,0x54,0x4F,0x5F
	.DB  0x56,0x20,0x2A,0x20,0x31,0x30,0x5E,0x33
	.DB  0x20,0x3D,0x20,0x25,0x64,0xD,0x0,0xD
	.DB  0x45,0x52,0x52,0x3A,0x20,0x49,0x6E,0x63
	.DB  0x6F,0x72,0x72,0x65,0x63,0x74,0x20,0x63
	.DB  0x6F,0x6D,0x6D,0x61,0x6E,0x64,0xD,0x0
	.DB  0xD,0x45,0x52,0x52,0x3A,0x20,0x49,0x6E
	.DB  0x63,0x6F,0x72,0x72,0x65,0x63,0x74,0x20
	.DB  0x61,0x64,0x64,0x72,0x65,0x73,0x73,0xD
	.DB  0x0,0x4D,0x65,0x61,0x73,0x75,0x72,0x65
	.DB  0x20,0x4D,0x49,0x4E,0x20,0x76,0x6F,0x6C
	.DB  0x74,0x61,0x67,0x65,0x20,0x0,0xD,0x45
	.DB  0x52,0x52,0x3A,0x20,0x49,0x6E,0x63,0x6F
	.DB  0x72,0x72,0x65,0x63,0x74,0x20,0x76,0x6F
	.DB  0x6C,0x74,0x61,0x67,0x65,0xD,0x0,0x4D
	.DB  0x65,0x61,0x73,0x75,0x72,0x65,0x20,0x4D
	.DB  0x41,0x58,0x20,0x76,0x6F,0x6C,0x74,0x61
	.DB  0x67,0x65,0x20,0x0,0x4D,0x65,0x61,0x73
	.DB  0x75,0x72,0x65,0x20,0x4D,0x45,0x44,0x49
	.DB  0x55,0x4D,0x20,0x76,0x6F,0x6C,0x74,0x61
	.DB  0x67,0x65,0x20,0x0,0x41,0x44,0x43,0x20
	.DB  0x3D,0x20,0x25,0x64,0x0,0xD,0x41,0x44
	.DB  0x43,0x5F,0x54,0x4F,0x5F,0x56,0x20,0x2A
	.DB  0x20,0x31,0x30,0x5E,0x33,0x20,0x3D,0x20
	.DB  0x25,0x64,0x0,0x41,0x44,0x44,0x52,0x20
	.DB  0x3D,0x20,0x25,0x64,0xD,0x0,0x48,0x56
	.DB  0x3D,0x25,0x64,0xD,0x0,0x48,0x56,0x20
	.DB  0x4F,0x46,0x46,0xD,0x0,0x48,0x56,0x20
	.DB  0x4F,0x4E,0xD,0x0,0x4F,0x43,0x52,0x31
	.DB  0x42,0x20,0x3D,0x20,0x25,0x64,0xD,0x0
_0x2040060:
	.DB  0x1
_0x2040000:
	.DB  0x2D,0x4E,0x41,0x4E,0x0,0x49,0x4E,0x46
	.DB  0x0

__GLOBAL_INI_TBL:
	.DW  0x01
	.DW  __seed_G102
	.DW  _0x2040060*2

_0xFFFFFFFF:
	.DW  0

__RESET:
	CLI
	CLR  R30
	OUT  EECR,R30
	OUT  MCUCR,R30

;DISABLE WATCHDOG
	LDI  R31,0x18
	WDR
	IN   R26,MCUSR
	CBR  R26,8
	OUT  MCUSR,R26
	STS  WDTCSR,R31
	STS  WDTCSR,R30

;CLEAR R2-R14
	LDI  R24,(14-2)+1
	LDI  R26,2
	CLR  R27
__CLEAR_REG:
	ST   X+,R30
	DEC  R24
	BRNE __CLEAR_REG

;CLEAR SRAM
	LDI  R24,LOW(__CLEAR_SRAM_SIZE)
	LDI  R25,HIGH(__CLEAR_SRAM_SIZE)
	LDI  R26,LOW(__SRAM_START)
	LDI  R27,HIGH(__SRAM_START)
__CLEAR_SRAM:
	ST   X+,R30
	SBIW R24,1
	BRNE __CLEAR_SRAM

;GLOBAL VARIABLES INITIALIZATION
	LDI  R30,LOW(__GLOBAL_INI_TBL*2)
	LDI  R31,HIGH(__GLOBAL_INI_TBL*2)
__GLOBAL_INI_NEXT:
	LPM  R24,Z+
	LPM  R25,Z+
	SBIW R24,0
	BREQ __GLOBAL_INI_END
	LPM  R26,Z+
	LPM  R27,Z+
	LPM  R0,Z+
	LPM  R1,Z+
	MOVW R22,R30
	MOVW R30,R0
__GLOBAL_INI_LOOP:
	LPM  R0,Z+
	ST   X+,R0
	SBIW R24,1
	BRNE __GLOBAL_INI_LOOP
	MOVW R30,R22
	RJMP __GLOBAL_INI_NEXT
__GLOBAL_INI_END:

;GPIOR0 INITIALIZATION
	LDI  R30,__GPIOR0_INIT
	OUT  GPIOR0,R30

;HARDWARE STACK POINTER INITIALIZATION
	LDI  R30,LOW(__SRAM_END-__HEAP_SIZE)
	OUT  SPL,R30
	LDI  R30,HIGH(__SRAM_END-__HEAP_SIZE)
	OUT  SPH,R30

;DATA STACK POINTER INITIALIZATION
	LDI  R28,LOW(__SRAM_START+__DSTACK_SIZE)
	LDI  R29,HIGH(__SRAM_START+__DSTACK_SIZE)

	RJMP _main

	.ESEG
	.ORG 0

	.DSEG
	.ORG 0x180

	.CSEG
;/*****************************************************
;Project : HV_ConverterR2b (Rewrited R2a)
;Version : 1.0
;Date    : 30.09.2017
;Author  : Sergey Abovyan
;
;Chip type               : ATmega48
;AVR Core Clock frequency: 12.000000 MHz
;Memory model            : Small
;External RAM size       : 0
;Data Stack size         : 128
;*****************************************************/
;
;#include <mega48.h>
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x01
	.EQU __sm_mask=0x0E
	.EQU __sm_adc_noise_red=0x02
	.EQU __sm_powerdown=0x04
	.EQU __sm_powersave=0x06
	.EQU __sm_standby=0x0C
	.SET power_ctrl_reg=smcr
	#endif
;
;// Standard Input/Output functions
;#include <stdio.h>
;#include <ctype.h>
;#include <stdlib.h>
;#include <math.h>
;#include <delay.h>
;
;typedef unsigned char u8;
;typedef unsigned int  u16;
;typedef unsigned long u32;
;
;#define PWM_EN	PORTD.5
;
;/***************************************************************************************/
;eeprom u8 MyAddress = 1;
;
;const u16 PWM_MAX = 2500;

	.DSEG
;const u16 PWM_MIN = 0;
;const u16 HV_MAX = 5000;
;const u16 HV_MIN = 900;
;
;eeprom u16 HV = HV_MIN;
;
;//default calibration values
;eeprom u16 HV_PHYS_MAX = 2591;
;eeprom u16 HV_PHYS_MIN = 861;
;eeprom float VOLTAGE_TO_PWM = (float)(PWM_MAX - PWM_MIN) / (float)(2591 - 861);
;eeprom float ADC_TO_VOLTAGE = 3.2827;
;
;/***************************************************************************************/
;// Declare your global variables here
;#define _ALTERNATE_PUTCHAR_
;void putch(char ch)
; 0000 0031 {

	.CSEG
_putch:
; 0000 0032 	PORTD.3 = 1;
	ST   -Y,R26
;	ch -> Y+0
	SBI  0xB,3
; 0000 0033   	UDR0 = ch;
	LD   R30,Y
	STS  198,R30
; 0000 0034   	while (!(UCSR0A & (1 << 6)));
_0x8:
	RCALL SUBOPT_0x0
	ANDI R30,LOW(0x40)
	BREQ _0x8
; 0000 0035   	UCSR0A |= (1 << 6);
	RCALL SUBOPT_0x0
	ORI  R30,0x40
	STS  192,R30
; 0000 0036   	PORTD.3 = 0;
	CBI  0xB,3
; 0000 0037 }
	RJMP _0x20A0001
;
;void putchar(char c)
; 0000 003A {
_putchar:
; 0000 003B 	if (c == '\r') {putch('\r'); putch('\n');}
	ST   -Y,R26
;	c -> Y+0
	LD   R26,Y
	CPI  R26,LOW(0xD)
	BRNE _0xD
	LDI  R26,LOW(13)
	RCALL _putch
	LDI  R26,LOW(10)
	RCALL _putch
; 0000 003C 	putch(c);
_0xD:
	LD   R26,Y
	RCALL _putch
; 0000 003D }
_0x20A0001:
	ADIW R28,1
	RET
;
;char LastChar;
;u16 GetWORD()
; 0000 0041 {
_GetWORD:
; 0000 0042   	u16 word = 0;
; 0000 0043   	while(1)
	RCALL __SAVELOCR2
;	word -> R16,R17
	__GETWRN 16,17,0
_0xE:
; 0000 0044 	{
; 0000 0045     	LastChar = getchar();
	RCALL _getchar
	MOV  R4,R30
; 0000 0046     	if (isdigit(LastChar))
	MOV  R26,R4
	RCALL _isdigit
	CPI  R30,0
	BREQ _0x11
; 0000 0047 		{
; 0000 0048 			#asm("wdr")
	wdr
; 0000 0049       		word *= 10;
	__MULBNWRU 16,17,10
	MOVW R16,R30
; 0000 004A       		word += LastChar - '0';
	MOV  R30,R4
	RCALL SUBOPT_0x1
	SBIW R30,48
	__ADDWRR 16,17,30,31
; 0000 004B     	}
; 0000 004C     	else break;
	RJMP _0x12
_0x11:
	RJMP _0x10
; 0000 004D   	};
_0x12:
	RJMP _0xE
_0x10:
; 0000 004E 
; 0000 004F   	return word;
	MOVW R30,R16
	RCALL __LOADLOCR2P
	RET
; 0000 0050 }
;
;void init(void)
; 0000 0053 {
_init:
; 0000 0054 	// Input/Output Ports initialization
; 0000 0055 	// Port B initialization
; 0000 0056 	PORTB=0x00;
	LDI  R30,LOW(0)
	OUT  0x5,R30
; 0000 0057 	DDRB=0x04;
	LDI  R30,LOW(4)
	OUT  0x4,R30
; 0000 0058 
; 0000 0059 	// Port C initialization
; 0000 005A 	PORTC=0x00;
	LDI  R30,LOW(0)
	OUT  0x8,R30
; 0000 005B 	DDRC=0x00;
	OUT  0x7,R30
; 0000 005C 
; 0000 005D 	// Port D initialization
; 0000 005E 	PORTD=0x20;
	LDI  R30,LOW(32)
	OUT  0xB,R30
; 0000 005F 	DDRD=0x2A;
	LDI  R30,LOW(42)
	OUT  0xA,R30
; 0000 0060 
; 0000 0061 	// Timer/Counter 0 initialization
; 0000 0062 	// Clock source: System Clock
; 0000 0063 	// Clock value: Timer 0 Stopped
; 0000 0064 	// Mode: Normal top=0xFF
; 0000 0065 	// OC0A output: Disconnected
; 0000 0066 	// OC0B output: Disconnected
; 0000 0067 	TCCR0A=0x00;
	LDI  R30,LOW(0)
	OUT  0x24,R30
; 0000 0068 	TCCR0B=0x00;
	OUT  0x25,R30
; 0000 0069 	TCNT0=0x00;
	OUT  0x26,R30
; 0000 006A 	OCR0A=0x00;
	OUT  0x27,R30
; 0000 006B 	OCR0B=0x00;
	OUT  0x28,R30
; 0000 006C 
; 0000 006D 	// Timer/Counter 1 initialization
; 0000 006E 	// Clock source: System Clock
; 0000 006F 	// Clock value: 12000.000 kHz
; 0000 0070 	// Mode: Fast PWM top=OCR1A
; 0000 0071 	// OC1A output: Discon.
; 0000 0072 	// OC1B output: Discon.
; 0000 0073 	// Noise Canceler: Off
; 0000 0074 	// Input Capture on Falling Edge
; 0000 0075 	// Timer1 Overflow Interrupt: Off
; 0000 0076 	// Input Capture Interrupt: Off
; 0000 0077 	// Compare A Match Interrupt: Off
; 0000 0078 	// Compare B Match Interrupt: Off
; 0000 0079 	TCCR1A=0x33;    //Set OC1B on compare match, clear OC1B at TOP. WG11=1 WG10=1
	LDI  R30,LOW(51)
	STS  128,R30
; 0000 007A 	TCCR1B=0x19;    //No prescaling, WG13=1 WG12=1
	LDI  R30,LOW(25)
	STS  129,R30
; 0000 007B 	TCNT1H=0x00;
	LDI  R30,LOW(0)
	STS  133,R30
; 0000 007C 	TCNT1L=0x00;
	STS  132,R30
; 0000 007D 	ICR1H=0x00;
	STS  135,R30
; 0000 007E 	ICR1L=0x00;
	STS  134,R30
; 0000 007F 	OCR1AH=(u8)(PWM_MAX >> 8);
	LDI  R30,LOW(9)
	STS  137,R30
; 0000 0080 	OCR1AL=(u8)PWM_MAX;
	LDI  R30,LOW(196)
	STS  136,R30
; 0000 0081 	OCR1BH=0;
	LDI  R30,LOW(0)
	STS  139,R30
; 0000 0082 	OCR1BL=0;
	STS  138,R30
; 0000 0083 	//4.8kHz PWM 50%
; 0000 0084 
; 0000 0085 	// Timer/Counter 2 initialization
; 0000 0086 	// Clock source: System Clock
; 0000 0087 	// Clock value: Timer2 Stopped
; 0000 0088 	// Mode: Normal top=0xFF
; 0000 0089 	// OC2A output: Disconnected
; 0000 008A 	// OC2B output: Disconnected
; 0000 008B 	ASSR=0x00;
	STS  182,R30
; 0000 008C 	TCCR2A=0x00;
	STS  176,R30
; 0000 008D 	TCCR2B=0x00;
	STS  177,R30
; 0000 008E 	TCNT2=0x00;
	STS  178,R30
; 0000 008F 	OCR2A=0x00;
	STS  179,R30
; 0000 0090 	OCR2B=0x00;
	STS  180,R30
; 0000 0091 
; 0000 0092 	// External Interrupt(s) initialization
; 0000 0093 	// INT0: Off
; 0000 0094 	// INT1: Off
; 0000 0095 	// Interrupt on any change on pins PCINT0-7: Off
; 0000 0096 	// Interrupt on any change on pins PCINT8-14: Off
; 0000 0097 	// Interrupt on any change on pins PCINT16-23: Off
; 0000 0098 	EICRA=0x00;
	STS  105,R30
; 0000 0099 	EIMSK=0x00;
	OUT  0x1D,R30
; 0000 009A 	PCICR=0x00;
	STS  104,R30
; 0000 009B 
; 0000 009C 	// Timer/Counter 0 Interrupt(s) initialization
; 0000 009D 	TIMSK0=0x00;
	STS  110,R30
; 0000 009E 
; 0000 009F 	// Timer/Counter 1 Interrupt(s) initialization
; 0000 00A0 	TIMSK1=0x00;
	STS  111,R30
; 0000 00A1 
; 0000 00A2 	// Timer/Counter 2 Interrupt(s) initialization
; 0000 00A3 	TIMSK2=0x00;
	STS  112,R30
; 0000 00A4 
; 0000 00A5 	// USART initialization
; 0000 00A6 	// Communication Parameters: 8 Data, 1 Stop, No Parity
; 0000 00A7 	// USART Receiver: On
; 0000 00A8 	// USART Transmitter: On
; 0000 00A9 	// USART0 Mode: Asynchronous
; 0000 00AA 	// USART Baud Rate: 9600
; 0000 00AB 	UCSR0A=0x00;
	STS  192,R30
; 0000 00AC 	UCSR0B=0x18;
	LDI  R30,LOW(24)
	STS  193,R30
; 0000 00AD 	UCSR0C=0x06;
	LDI  R30,LOW(6)
	STS  194,R30
; 0000 00AE 	UBRR0H=0x00;
	LDI  R30,LOW(0)
	STS  197,R30
; 0000 00AF 	UBRR0L=0x4D;
	LDI  R30,LOW(77)
	STS  196,R30
; 0000 00B0 
; 0000 00B1 	// Analog Comparator initialization
; 0000 00B2 	// Analog Comparator: Off
; 0000 00B3 	// Analog Comparator Input Capture by Timer/Counter 1: Off
; 0000 00B4 	ACSR=0x80;
	LDI  R30,LOW(128)
	OUT  0x30,R30
; 0000 00B5 	ADCSRB=0x00;
	LDI  R30,LOW(0)
	STS  123,R30
; 0000 00B6 	DIDR1=0x00;
	STS  127,R30
; 0000 00B7 
; 0000 00B8 	// ADC initialization
; 0000 00B9 	// Digital buffer disabled on ADC1
; 0000 00BA 	DIDR0=0x02;
	LDI  R30,LOW(2)
	STS  126,R30
; 0000 00BB 	// ADC Enabled, Auto Trigger disabled, ADC Interrupt enabled, Prescaler 128 - 97kHz
; 0000 00BC 	ADCSRA=0x8F;
	LDI  R30,LOW(143)
	STS  122,R30
; 0000 00BD 	// Internal 1.1V Voltage Reference with external capacitor at AREF pin
; 0000 00BE 	// ADC1 selected at MUX
; 0000 00BF 	ADMUX= 0xC1;
	LDI  R30,LOW(193)
	STS  124,R30
; 0000 00C0 
; 0000 00C1 	// SPI initialization
; 0000 00C2 	// SPI disabled
; 0000 00C3 	SPCR=0x00;
	LDI  R30,LOW(0)
	OUT  0x2C,R30
; 0000 00C4 
; 0000 00C5 	// TWI initialization
; 0000 00C6 	// TWI disabled
; 0000 00C7 	TWCR=0x00;
	STS  188,R30
; 0000 00C8 
; 0000 00C9 	// Watchdog Timer initialization
; 0000 00CA 	// Watchdog Timer Prescaler: OSC/2k
; 0000 00CB 	// Watchdog Timer interrupt: Off
; 0000 00CC 	#pragma optsize-
; 0000 00CD 	#asm("wdr")
	wdr
; 0000 00CE 	WDTCSR=0x38;
	LDI  R30,LOW(56)
	STS  96,R30
; 0000 00CF 	WDTCSR=0x28;
	LDI  R30,LOW(40)
	STS  96,R30
; 0000 00D0 	#ifdef _OPTIMIZE_SIZE_
; 0000 00D1 	#pragma optsize+
; 0000 00D2 	#endif
; 0000 00D3 }
	RET
;
;/***************************************************************************************/
;volatile u32 adc_averaging_index = 0;
;volatile u32 adc_sum = 0;
;volatile u16 adc_averaged = 0;
;volatile u8  adc_completed = 0;
;volatile u8  calibration = 0;
;//7211 Hz
;#define AVERAGING 721 //0.1sec
;
;/***************************************************************************************/
;void SetOCR1B(u16 OCR1B)
; 0000 00E0 {
_SetOCR1B:
; 0000 00E1 	OCR1BH=(u8)(OCR1B >> 8);
	RCALL SUBOPT_0x2
;	OCR1B -> Y+0
	LDD  R30,Y+1
	STS  139,R30
; 0000 00E2 	OCR1BL=(u8)(OCR1B);
	LD   R30,Y
	STS  138,R30
; 0000 00E3 }
	ADIW R28,2
	RET
;/***************************************************************************************/
;void SetHV(u16 V)
; 0000 00E6 {
_SetHV:
; 0000 00E7 	u16 OCR1B = (u16)((float)(V - HV_PHYS_MIN) * VOLTAGE_TO_PWM);
; 0000 00E8     SetOCR1B(OCR1B);
	RCALL SUBOPT_0x2
	RCALL __SAVELOCR2
;	V -> Y+2
;	OCR1B -> R16,R17
	LDI  R26,LOW(_HV_PHYS_MIN)
	LDI  R27,HIGH(_HV_PHYS_MIN)
	RCALL __EEPROMRDW
	LDD  R26,Y+2
	LDD  R27,Y+2+1
	RCALL __SWAPW12
	SUB  R30,R26
	SBC  R31,R27
	RCALL SUBOPT_0x3
	PUSH R23
	PUSH R22
	PUSH R31
	PUSH R30
	RCALL SUBOPT_0x4
	POP  R26
	POP  R27
	POP  R24
	POP  R25
	RCALL __MULF12
	RCALL __CFD1U
	MOVW R16,R30
	MOVW R26,R16
	RCALL _SetOCR1B
; 0000 00E9 	#asm("cli")
	cli
; 0000 00EA 	adc_sum = 0;
	RCALL SUBOPT_0x5
; 0000 00EB 	adc_averaging_index = 0;
; 0000 00EC 	adc_averaged = 0;
; 0000 00ED 	adc_completed = 0;
; 0000 00EE 	#asm("sei")
	sei
; 0000 00EF }
	RCALL __LOADLOCR2
	ADIW R28,4
	RET
;/***************************************************************************************/
;u16 PerformADC()
; 0000 00F2 {
_PerformADC:
; 0000 00F3 	#asm("cli")
	cli
; 0000 00F4 	adc_sum = 0;
	RCALL SUBOPT_0x5
; 0000 00F5 	adc_averaging_index = 0;
; 0000 00F6 	adc_averaged = 0;
; 0000 00F7 	adc_completed = 0;
; 0000 00F8 	#asm("sei")
	sei
; 0000 00F9 	while(!adc_completed);
_0x13:
	LDS  R30,_adc_completed
	CPI  R30,0
	BREQ _0x13
; 0000 00FA 	return adc_averaged;
	RCALL SUBOPT_0x6
	RET
; 0000 00FB }
;/***************************************************************************************/
;interrupt [ADC_INT] void adc_isr(void)
; 0000 00FE {
_adc_isr:
	ST   -Y,R0
	ST   -Y,R1
	ST   -Y,R15
	ST   -Y,R22
	ST   -Y,R23
	ST   -Y,R24
	ST   -Y,R25
	ST   -Y,R26
	ST   -Y,R27
	ST   -Y,R30
	ST   -Y,R31
	IN   R30,SREG
	ST   -Y,R30
; 0000 00FF 	u16 HV_measured;
; 0000 0100 	u16 OCR1B;
; 0000 0101 	u16 adc_data = ADCW;
; 0000 0102 	adc_sum += adc_data;
	RCALL __SAVELOCR6
;	HV_measured -> R16,R17
;	OCR1B -> R18,R19
;	adc_data -> R20,R21
	LDS  R30,120
	LDS  R31,120+1
	MOVW R20,R30
	MOVW R30,R20
	RCALL SUBOPT_0x7
	RCALL SUBOPT_0x8
	RCALL __ADDD12
	STS  _adc_sum,R30
	STS  _adc_sum+1,R31
	STS  _adc_sum+2,R22
	STS  _adc_sum+3,R23
; 0000 0103 
; 0000 0104 	if(++adc_averaging_index >= AVERAGING)
	LDI  R26,LOW(_adc_averaging_index)
	LDI  R27,HIGH(_adc_averaging_index)
	RCALL __GETD1P_INC
	__SUBD1N -1
	RCALL __PUTDP1_DEC
	__CPD1N 0x2D1
	BRSH PC+2
	RJMP _0x16
; 0000 0105 	{
; 0000 0106 		adc_averaged = adc_sum / AVERAGING;
	RCALL SUBOPT_0x7
	__GETD1N 0x2D1
	RCALL __DIVD21U
	STS  _adc_averaged,R30
	STS  _adc_averaged+1,R31
; 0000 0107 		adc_sum = 0;
	LDI  R30,LOW(0)
	STS  _adc_sum,R30
	STS  _adc_sum+1,R30
	STS  _adc_sum+2,R30
	STS  _adc_sum+3,R30
; 0000 0108 		adc_averaging_index = 0;
	STS  _adc_averaging_index,R30
	STS  _adc_averaging_index+1,R30
	STS  _adc_averaging_index+2,R30
	STS  _adc_averaging_index+3,R30
; 0000 0109 		adc_completed = 1;
	LDI  R30,LOW(1)
	STS  _adc_completed,R30
; 0000 010A 
; 0000 010B 		if(!calibration)
	LDS  R30,_calibration
	CPI  R30,0
	BRNE _0x17
; 0000 010C 		{
; 0000 010D 			HV_measured = (u16)((float)adc_averaged * ADC_TO_VOLTAGE);
	RCALL SUBOPT_0x6
	RCALL SUBOPT_0x3
	PUSH R23
	PUSH R22
	PUSH R31
	PUSH R30
	RCALL SUBOPT_0x9
	POP  R26
	POP  R27
	POP  R24
	POP  R25
	RCALL SUBOPT_0xA
	MOVW R16,R30
; 0000 010E        		OCR1B = (((u16)OCR1BH) << 8) + OCR1BL;
	LDS  R30,139
	MOV  R31,R30
	LDI  R30,0
	MOVW R26,R30
	LDS  R30,138
	RCALL SUBOPT_0x1
	ADD  R30,R26
	ADC  R31,R27
	MOVW R18,R30
; 0000 010F 
; 0000 0110 			if(HV > HV_measured && OCR1B < PWM_MAX) OCR1B++;
	RCALL SUBOPT_0xB
	CP   R16,R30
	CPC  R17,R31
	BRSH _0x19
	__CPWRN 18,19,2500
	BRLO _0x1A
_0x19:
	RJMP _0x18
_0x1A:
	__ADDWRN 18,19,1
; 0000 0111 			else if(HV < HV_measured && OCR1B > 0) OCR1B--;
	RJMP _0x1B
_0x18:
	RCALL SUBOPT_0xB
	CP   R30,R16
	CPC  R31,R17
	BRSH _0x1D
	CLR  R0
	CP   R0,R18
	CPC  R0,R19
	BRLO _0x1E
_0x1D:
	RJMP _0x1C
_0x1E:
	__SUBWRN 18,19,1
; 0000 0112 			SetOCR1B(OCR1B);
_0x1C:
_0x1B:
	MOVW R26,R18
	RCALL _SetOCR1B
; 0000 0113 			//printf("\rADC = %d  V = %d  OCR1B = %d", adc_averaged, HV_measured, OCR1B);
; 0000 0114 		}
; 0000 0115 	}
_0x17:
; 0000 0116   	ADCSRA |= 0x40;
_0x16:
	RCALL SUBOPT_0xC
; 0000 0117 }
	RCALL __LOADLOCR6
	ADIW R28,6
	LD   R30,Y+
	OUT  SREG,R30
	LD   R31,Y+
	LD   R30,Y+
	LD   R27,Y+
	LD   R26,Y+
	LD   R25,Y+
	LD   R24,Y+
	LD   R23,Y+
	LD   R22,Y+
	LD   R15,Y+
	LD   R1,Y+
	LD   R0,Y+
	RETI
;/***************************************************************************************/
;void main(void)
; 0000 011A {
_main:
; 0000 011B 	char cmd;
; 0000 011C 	u16 temp;
; 0000 011D 	u16 hv_min, hv_max, hv_med, adc;
; 0000 011E 
; 0000 011F    	init();
	SBIW R28,6
;	cmd -> R17
;	temp -> R18,R19
;	hv_min -> R20,R21
;	hv_max -> Y+4
;	hv_med -> Y+2
;	adc -> Y+0
	RCALL _init
; 0000 0120     delay_ms(2000);
	LDI  R26,LOW(2000)
	LDI  R27,HIGH(2000)
	RCALL _delay_ms
; 0000 0121 
; 0000 0122 	printf("\rHV_Converter: %d", MyAddress);
	__POINTW1FN _0x0,0
	RCALL SUBOPT_0xD
	RCALL SUBOPT_0xE
	CLR  R31
	CLR  R22
	CLR  R23
	RCALL SUBOPT_0xF
; 0000 0123 	printf("\rV_TO_PWM * 10^3 = %d", (u16)(VOLTAGE_TO_PWM * (float)1000));
	RCALL SUBOPT_0x10
	RCALL SUBOPT_0x11
	RCALL SUBOPT_0x12
; 0000 0124 	printf("\rADC_TO_V * 10^3 = %d\r", (u16)(ADC_TO_VOLTAGE * (float)1000));
	__POINTW1FN _0x0,40
	RCALL SUBOPT_0xD
	RCALL SUBOPT_0x9
	RCALL SUBOPT_0x11
	RCALL SUBOPT_0x12
; 0000 0125 
; 0000 0126 	SetHV(HV);
	RCALL SUBOPT_0xB
	MOVW R26,R30
	RCALL _SetHV
; 0000 0127 	PWM_EN = 1;
	SBI  0xB,5
; 0000 0128 
; 0000 0129     #asm("sei")
	sei
; 0000 012A     ADCSRA |= 0x40;
	RCALL SUBOPT_0xC
; 0000 012B 
; 0000 012C 	while (1)
_0x21:
; 0000 012D 	{
; 0000 012E 		#asm("wdr");
	wdr
; 0000 012F 
; 0000 0130 		if(UCSR0A & 0x80)
	RCALL SUBOPT_0x0
	ANDI R30,LOW(0x80)
	BRNE PC+2
	RJMP _0x24
; 0000 0131 		{
; 0000 0132 			cmd = toupper(getchar());
	RCALL _getchar
	MOV  R26,R30
	RCALL _toupper
	MOV  R17,R30
; 0000 0133 			if(cmd != 'C' && cmd != 'A' && cmd != 'V' && cmd != 'H' && cmd != 'S' && cmd != 'G' && cmd != 'P')
	CPI  R17,67
	BREQ _0x26
	CPI  R17,65
	BREQ _0x26
	CPI  R17,86
	BREQ _0x26
	CPI  R17,72
	BREQ _0x26
	CPI  R17,83
	BREQ _0x26
	CPI  R17,71
	BREQ _0x26
	CPI  R17,80
	BRNE _0x27
_0x26:
	RJMP _0x25
_0x27:
; 0000 0134 			{
; 0000 0135 				printf("\rERR: Incorrect command\r");
	__POINTW1FN _0x0,63
	RCALL SUBOPT_0x13
; 0000 0136 				continue;
	RJMP _0x21
; 0000 0137 			}
; 0000 0138 
; 0000 0139 			temp = GetWORD();
_0x25:
	RCALL SUBOPT_0x14
; 0000 013A 			if(temp != MyAddress && temp != 253)
	RCALL SUBOPT_0xE
	MOVW R26,R18
	RCALL SUBOPT_0x1
	CP   R30,R26
	CPC  R31,R27
	BREQ _0x29
	LDI  R30,LOW(253)
	LDI  R31,HIGH(253)
	CP   R30,R18
	CPC  R31,R19
	BRNE _0x2A
_0x29:
	RJMP _0x28
_0x2A:
; 0000 013B 			{
; 0000 013C 				printf("\rERR: Incorrect address\r");
	__POINTW1FN _0x0,88
	RCALL SUBOPT_0x13
; 0000 013D 				continue;
	RJMP _0x21
; 0000 013E 			}
; 0000 013F 
; 0000 0140 			switch(cmd)
_0x28:
	MOV  R30,R17
	RCALL SUBOPT_0x1
; 0000 0141 			{
; 0000 0142 				case 'C': //Calibrate
	CPI  R30,LOW(0x43)
	LDI  R26,HIGH(0x43)
	CPC  R31,R26
	BREQ PC+2
	RJMP _0x2E
; 0000 0143 					calibration = 1;
	LDI  R30,LOW(1)
	RCALL SUBOPT_0x15
; 0000 0144 					SetOCR1B(PWM_MIN);
	LDI  R26,LOW(0)
	LDI  R27,HIGH(0)
	RCALL _SetOCR1B
; 0000 0145 					printf("Measure MIN voltage ");
	__POINTW1FN _0x0,113
	RCALL SUBOPT_0x13
; 0000 0146 					#asm("wdr")
	wdr
; 0000 0147 					hv_min = GetWORD();
	RCALL _GetWORD
	MOVW R20,R30
; 0000 0148 					if(!hv_min || (hv_min > 5000))
	MOV  R0,R20
	OR   R0,R21
	BREQ _0x30
	__CPWRN 20,21,5001
	BRLO _0x2F
_0x30:
; 0000 0149 					{
; 0000 014A 					 	printf("\rERR: Incorrect voltage\r");
	RCALL SUBOPT_0x16
; 0000 014B 						calibration = 0;
	RCALL SUBOPT_0x17
; 0000 014C 						continue;
	RJMP _0x21
; 0000 014D 					}
; 0000 014E 
; 0000 014F 					SetOCR1B(PWM_MAX);
_0x2F:
	LDI  R26,LOW(2500)
	LDI  R27,HIGH(2500)
	RCALL _SetOCR1B
; 0000 0150 					printf("Measure MAX voltage ");
	__POINTW1FN _0x0,159
	RCALL SUBOPT_0x13
; 0000 0151 					#asm("wdr")
	wdr
; 0000 0152 					hv_max = GetWORD();
	RCALL _GetWORD
	STD  Y+4,R30
	STD  Y+4+1,R31
; 0000 0153 					if(!hv_max || (hv_max >= 5000))
	RCALL SUBOPT_0x18
	SBIW R30,0
	BREQ _0x33
	LDD  R26,Y+4
	LDD  R27,Y+4+1
	CPI  R26,LOW(0x1388)
	LDI  R30,HIGH(0x1388)
	CPC  R27,R30
	BRLO _0x32
_0x33:
; 0000 0154 					{
; 0000 0155 					 	printf("\rERR: Incorrect voltage\r");
	RCALL SUBOPT_0x16
; 0000 0156 						calibration = 0;
	RCALL SUBOPT_0x17
; 0000 0157 						continue;
	RJMP _0x21
; 0000 0158 					}
; 0000 0159 
; 0000 015A 					SetOCR1B((PWM_MAX + PWM_MIN)/2);
_0x32:
	LDI  R26,LOW(1250)
	LDI  R27,HIGH(1250)
	RCALL _SetOCR1B
; 0000 015B 					printf("Measure MEDIUM voltage ");
	__POINTW1FN _0x0,180
	RCALL SUBOPT_0x13
; 0000 015C 					#asm("wdr")
	wdr
; 0000 015D 					hv_med = GetWORD();
	RCALL _GetWORD
	STD  Y+2,R30
	STD  Y+2+1,R31
; 0000 015E 					if(!hv_med || (hv_med < hv_min) || (hv_med > hv_max))
	SBIW R30,0
	BREQ _0x36
	LDD  R26,Y+2
	LDD  R27,Y+2+1
	CP   R26,R20
	CPC  R27,R21
	BRLO _0x36
	RCALL SUBOPT_0x18
	LDD  R26,Y+2
	LDD  R27,Y+2+1
	CP   R30,R26
	CPC  R31,R27
	BRSH _0x35
_0x36:
; 0000 015F 					{
; 0000 0160 					 	printf("\rERR: Incorrect voltage\r");
	RCALL SUBOPT_0x16
; 0000 0161 						calibration = 0;
	RCALL SUBOPT_0x17
; 0000 0162 						continue;
	RJMP _0x21
; 0000 0163 					}
; 0000 0164 					#asm("wdr")
_0x35:
	wdr
; 0000 0165                     adc = PerformADC();
	RCALL _PerformADC
	ST   Y,R30
	STD  Y+1,R31
; 0000 0166 					printf("ADC = %d", adc);
	__POINTW1FN _0x0,204
	RCALL SUBOPT_0xD
	LDD  R30,Y+2
	LDD  R31,Y+2+1
	RCALL SUBOPT_0x8
	RCALL SUBOPT_0xF
; 0000 0167 
; 0000 0168 					HV_PHYS_MIN = hv_min;
	MOVW R30,R20
	LDI  R26,LOW(_HV_PHYS_MIN)
	LDI  R27,HIGH(_HV_PHYS_MIN)
	RCALL __EEPROMWRW
; 0000 0169 					HV_PHYS_MAX = hv_max;
	RCALL SUBOPT_0x18
	LDI  R26,LOW(_HV_PHYS_MAX)
	LDI  R27,HIGH(_HV_PHYS_MAX)
	RCALL __EEPROMWRW
; 0000 016A                     VOLTAGE_TO_PWM = (float)(PWM_MAX - PWM_MIN) / (float)(hv_max - hv_min);
	RCALL SUBOPT_0x18
	SUB  R30,R20
	SBC  R31,R21
	RCALL SUBOPT_0x3
	__GETD2N 0x451C4000
	RCALL __DIVF21
	LDI  R26,LOW(_VOLTAGE_TO_PWM)
	LDI  R27,HIGH(_VOLTAGE_TO_PWM)
	RCALL __EEPROMWRD
; 0000 016B 					printf("\rV_TO_PWM * 10^3 = %d", (u16)(VOLTAGE_TO_PWM * (float)1000));
	RCALL SUBOPT_0x10
	RCALL SUBOPT_0x11
	RCALL SUBOPT_0x12
; 0000 016C 
; 0000 016D 					ADC_TO_VOLTAGE = (float)hv_med / (float)adc;
	LDD  R30,Y+2
	LDD  R31,Y+2+1
	RCALL SUBOPT_0x3
	MOVW R26,R30
	MOVW R24,R22
	LD   R30,Y
	LDD  R31,Y+1
	RCALL SUBOPT_0x3
	RCALL __DIVF21
	LDI  R26,LOW(_ADC_TO_VOLTAGE)
	LDI  R27,HIGH(_ADC_TO_VOLTAGE)
	RCALL __EEPROMWRD
; 0000 016E                     printf("\rADC_TO_V * 10^3 = %d", (u16)(ADC_TO_VOLTAGE * (float)1000));
	__POINTW1FN _0x0,213
	RCALL SUBOPT_0xD
	RCALL SUBOPT_0x9
	RCALL SUBOPT_0x11
	RCALL SUBOPT_0x12
; 0000 016F 
; 0000 0170 					calibration = 0;
	RCALL SUBOPT_0x17
; 0000 0171 					SetHV(HV);
	RCALL SUBOPT_0xB
	MOVW R26,R30
	RCALL _SetHV
; 0000 0172 					printf("\r");
	__POINTW1FN _0x0,61
	RCALL SUBOPT_0x13
; 0000 0173 					break;
	RJMP _0x2D
; 0000 0174 
; 0000 0175 				case 'A':
_0x2E:
	CPI  R30,LOW(0x41)
	LDI  R26,HIGH(0x41)
	CPC  R31,R26
	BRNE _0x38
; 0000 0176 					if(LastChar == ' ')
	LDI  R30,LOW(32)
	CP   R30,R4
	BRNE _0x39
; 0000 0177 					{
; 0000 0178 						temp = GetWORD();
	RCALL SUBOPT_0x14
; 0000 0179 						if(temp && temp < 253) MyAddress = temp;
	MOV  R0,R18
	OR   R0,R19
	BREQ _0x3B
	__CPWRN 18,19,253
	BRLO _0x3C
_0x3B:
	RJMP _0x3A
_0x3C:
	MOV  R30,R18
	LDI  R26,LOW(_MyAddress)
	LDI  R27,HIGH(_MyAddress)
	RCALL __EEPROMWRB
; 0000 017A 					}
_0x3A:
; 0000 017B 
; 0000 017C                     printf("ADDR = %d\r", MyAddress);
_0x39:
	__POINTW1FN _0x0,235
	RCALL SUBOPT_0xD
	RCALL SUBOPT_0xE
	CLR  R31
	CLR  R22
	CLR  R23
	RJMP _0x49
; 0000 017D 					break;
; 0000 017E 
; 0000 017F 				case 'V':
_0x38:
	CPI  R30,LOW(0x56)
	LDI  R26,HIGH(0x56)
	CPC  R31,R26
	BRNE _0x3D
; 0000 0180            			temp = GetWORD();
	RCALL SUBOPT_0x14
; 0000 0181                     if(temp > HV_MAX) temp = HV_MAX;
	__CPWRN 18,19,5001
	BRLO _0x3E
	__GETWRN 18,19,5000
; 0000 0182 					if(temp < HV_MIN) temp = HV_MIN;
_0x3E:
	__CPWRN 18,19,900
	BRSH _0x3F
	__GETWRN 18,19,900
; 0000 0183     				HV = temp;
_0x3F:
	MOVW R30,R18
	LDI  R26,LOW(_HV)
	LDI  R27,HIGH(_HV)
	RCALL __EEPROMWRW
; 0000 0184 					SetHV(temp);
	MOVW R26,R18
	RCALL _SetHV
; 0000 0185 					printf("HV=%d\r", HV);
	RCALL SUBOPT_0x19
	RJMP _0x4A
; 0000 0186 					break;
; 0000 0187 
; 0000 0188 				case 'H':
_0x3D:
	CPI  R30,LOW(0x48)
	LDI  R26,HIGH(0x48)
	CPC  R31,R26
	BRNE _0x40
; 0000 0189 					printf("HV=%d\r", HV);
	RCALL SUBOPT_0x19
	RJMP _0x4A
; 0000 018A 					break;
; 0000 018B 
; 0000 018C 				case 'S':
_0x40:
	CPI  R30,LOW(0x53)
	LDI  R26,HIGH(0x53)
	CPC  R31,R26
	BRNE _0x41
; 0000 018D 					PWM_EN = 0;
	CBI  0xB,5
; 0000 018E 					printf("HV OFF\r");
	__POINTW1FN _0x0,253
	RCALL SUBOPT_0x13
; 0000 018F 					break;
	RJMP _0x2D
; 0000 0190 
; 0000 0191 				case 'G':
_0x41:
	CPI  R30,LOW(0x47)
	LDI  R26,HIGH(0x47)
	CPC  R31,R26
	BRNE _0x44
; 0000 0192 					PWM_EN = 1;
	SBI  0xB,5
; 0000 0193 					printf("HV ON\r");
	__POINTW1FN _0x0,261
	RCALL SUBOPT_0x13
; 0000 0194 					break;
	RJMP _0x2D
; 0000 0195 
; 0000 0196 				case 'P': //Set PWM
_0x44:
	CPI  R30,LOW(0x50)
	LDI  R26,HIGH(0x50)
	CPC  R31,R26
	BRNE _0x2D
; 0000 0197 					calibration = 1;
	LDI  R30,LOW(1)
	RCALL SUBOPT_0x15
; 0000 0198 					temp = GetWORD();
	RCALL SUBOPT_0x14
; 0000 0199 					SetOCR1B(temp);
	MOVW R26,R18
	RCALL _SetOCR1B
; 0000 019A 					printf("OCR1B = %d\r", temp);
	__POINTW1FN _0x0,268
	RCALL SUBOPT_0xD
	MOVW R30,R18
_0x4A:
	CLR  R22
	CLR  R23
_0x49:
	RCALL __PUTPARD1
	LDI  R24,4
	RCALL _printf
	ADIW R28,6
; 0000 019B 					break;
; 0000 019C 
; 0000 019D 			}
_0x2D:
; 0000 019E 		}
; 0000 019F 	}
_0x24:
	RJMP _0x21
; 0000 01A0 }
_0x48:
	RJMP _0x48
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x01
	.EQU __sm_mask=0x0E
	.EQU __sm_adc_noise_red=0x02
	.EQU __sm_powerdown=0x04
	.EQU __sm_powersave=0x06
	.EQU __sm_standby=0x0C
	.SET power_ctrl_reg=smcr
	#endif

	.CSEG
_getchar:
_0x2000003:
	RCALL SUBOPT_0x0
	ANDI R30,LOW(0x80)
	BREQ _0x2000003
	LDS  R30,198
	RET
_put_usart_G100:
	RCALL SUBOPT_0x2
	LDD  R26,Y+2
	RCALL _putchar
	LD   R26,Y
	LDD  R27,Y+1
	LD   R30,X+
	LD   R31,X+
	ADIW R30,1
	ST   -X,R31
	ST   -X,R30
	ADIW R28,3
	RET
__print_G100:
	RCALL SUBOPT_0x2
	SBIW R28,4
	RCALL __SAVELOCR6
	LDI  R17,0
	LDD  R26,Y+10
	LDD  R27,Y+10+1
	LDI  R30,LOW(0)
	LDI  R31,HIGH(0)
	ST   X+,R30
	ST   X,R31
_0x2000019:
	LDD  R30,Y+16
	LDD  R31,Y+16+1
	ADIW R30,1
	STD  Y+16,R30
	STD  Y+16+1,R31
	RCALL SUBOPT_0x1A
	BRNE PC+2
	RJMP _0x200001B
	MOV  R30,R17
	CPI  R30,0
	BRNE _0x200001F
	CPI  R19,37
	BRNE _0x2000020
	LDI  R17,LOW(1)
	RJMP _0x2000021
_0x2000020:
	RCALL SUBOPT_0x1B
_0x2000021:
	RJMP _0x200001E
_0x200001F:
	CPI  R30,LOW(0x1)
	BRNE _0x2000022
	CPI  R19,37
	BRNE _0x2000023
	RCALL SUBOPT_0x1B
	RJMP _0x20000AD
_0x2000023:
	LDI  R17,LOW(2)
	LDI  R18,LOW(0)
	LDI  R16,LOW(0)
	CPI  R19,43
	BRNE _0x2000024
	LDI  R18,LOW(43)
	RJMP _0x200001E
_0x2000024:
	CPI  R19,32
	BRNE _0x2000025
	LDI  R18,LOW(32)
	RJMP _0x200001E
_0x2000025:
	RJMP _0x2000026
_0x2000022:
	CPI  R30,LOW(0x2)
	BRNE _0x2000027
_0x2000026:
	CPI  R19,48
	BRNE _0x2000028
	ORI  R16,LOW(16)
	LDI  R17,LOW(5)
	RJMP _0x200001E
_0x2000028:
	RJMP _0x2000029
_0x2000027:
	CPI  R30,LOW(0x5)
	BREQ PC+2
	RJMP _0x200001E
_0x2000029:
	MOV  R30,R19
	CPI  R30,LOW(0x63)
	BRNE _0x200002E
	RCALL SUBOPT_0x1C
	RCALL SUBOPT_0x1D
	RCALL SUBOPT_0x1C
	LDD  R26,Z+4
	ST   -Y,R26
	RCALL SUBOPT_0x1E
	RJMP _0x200002F
_0x200002E:
	CPI  R30,LOW(0x73)
	BRNE _0x2000031
	RCALL SUBOPT_0x1F
	RCALL SUBOPT_0x20
_0x2000032:
	LDD  R26,Y+6
	LDD  R27,Y+6+1
	LD   R30,X+
	STD  Y+6,R26
	STD  Y+6+1,R27
	MOV  R19,R30
	CPI  R30,0
	BREQ _0x2000034
	RCALL SUBOPT_0x1B
	RJMP _0x2000032
_0x2000034:
	RJMP _0x200002F
_0x2000031:
	CPI  R30,LOW(0x70)
	BRNE _0x2000036
	RCALL SUBOPT_0x1F
	RCALL SUBOPT_0x20
_0x2000037:
	LDD  R30,Y+6
	LDD  R31,Y+6+1
	ADIW R30,1
	STD  Y+6,R30
	STD  Y+6+1,R31
	RCALL SUBOPT_0x1A
	BREQ _0x2000039
	RCALL SUBOPT_0x1B
	RJMP _0x2000037
_0x2000039:
	RJMP _0x200002F
_0x2000036:
	CPI  R30,LOW(0x64)
	BREQ _0x200003C
	CPI  R30,LOW(0x69)
	BRNE _0x200003D
_0x200003C:
	ORI  R16,LOW(1)
	RJMP _0x200003E
_0x200003D:
	CPI  R30,LOW(0x75)
	BRNE _0x200003F
_0x200003E:
	LDI  R30,LOW(_tbl10_G100*2)
	LDI  R31,HIGH(_tbl10_G100*2)
	RJMP _0x20000AE
_0x200003F:
	CPI  R30,LOW(0x58)
	BRNE _0x2000042
	ORI  R16,LOW(2)
	RJMP _0x2000043
_0x2000042:
	CPI  R30,LOW(0x78)
	BREQ PC+2
	RJMP _0x2000055
_0x2000043:
	LDI  R30,LOW(_tbl16_G100*2)
	LDI  R31,HIGH(_tbl16_G100*2)
_0x20000AE:
	STD  Y+6,R30
	STD  Y+6+1,R31
	SBRS R16,0
	RJMP _0x2000045
	RCALL SUBOPT_0x1F
	RCALL SUBOPT_0x21
	TST  R21
	BRPL _0x2000046
	MOVW R30,R20
	RCALL __ANEGW1
	MOVW R20,R30
	LDI  R18,LOW(45)
_0x2000046:
	CPI  R18,0
	BREQ _0x2000047
	ST   -Y,R18
	RCALL SUBOPT_0x1E
_0x2000047:
	RJMP _0x2000048
_0x2000045:
	RCALL SUBOPT_0x1F
	RCALL SUBOPT_0x21
_0x2000048:
_0x200004A:
	LDI  R19,LOW(48)
	LDD  R30,Y+6
	LDD  R31,Y+6+1
	RCALL __GETW1PF
	STD  Y+8,R30
	STD  Y+8+1,R31
	LDD  R30,Y+6
	LDD  R31,Y+6+1
	ADIW R30,2
	STD  Y+6,R30
	STD  Y+6+1,R31
_0x200004C:
	LDD  R30,Y+8
	LDD  R31,Y+8+1
	CP   R20,R30
	CPC  R21,R31
	BRLO _0x200004E
	SUBI R19,-LOW(1)
	LDD  R26,Y+8
	LDD  R27,Y+8+1
	__SUBWRR 20,21,26,27
	RJMP _0x200004C
_0x200004E:
	SBRC R16,4
	RJMP _0x2000050
	CPI  R19,49
	BRSH _0x2000050
	LDD  R26,Y+8
	LDD  R27,Y+8+1
	SBIW R26,1
	BRNE _0x200004F
_0x2000050:
	ORI  R16,LOW(16)
	CPI  R19,58
	BRLO _0x2000052
	SBRS R16,1
	RJMP _0x2000053
	SUBI R19,-LOW(7)
	RJMP _0x2000054
_0x2000053:
	SUBI R19,-LOW(39)
_0x2000054:
_0x2000052:
	RCALL SUBOPT_0x1B
_0x200004F:
	LDD  R26,Y+8
	LDD  R27,Y+8+1
	SBIW R26,2
	BRSH _0x200004A
_0x2000055:
_0x200002F:
_0x20000AD:
	LDI  R17,LOW(0)
_0x200001E:
	RJMP _0x2000019
_0x200001B:
	LDD  R26,Y+10
	LDD  R27,Y+10+1
	RCALL __GETW1P
	RCALL __LOADLOCR6
	ADIW R28,18
	RET
_printf:
	PUSH R15
	MOV  R15,R24
	SBIW R28,6
	RCALL __SAVELOCR2
	MOVW R26,R28
	ADIW R26,4
	RCALL __ADDW2R15
	MOVW R16,R26
	LDI  R30,LOW(0)
	STD  Y+4,R30
	STD  Y+4+1,R30
	STD  Y+6,R30
	STD  Y+6+1,R30
	MOVW R26,R28
	ADIW R26,8
	RCALL __ADDW2R15
	RCALL __GETW1P
	RCALL SUBOPT_0xD
	ST   -Y,R17
	ST   -Y,R16
	LDI  R30,LOW(_put_usart_G100)
	LDI  R31,HIGH(_put_usart_G100)
	RCALL SUBOPT_0xD
	MOVW R26,R28
	ADIW R26,8
	RCALL __print_G100
	RCALL __LOADLOCR2
	ADIW R28,8
	POP  R15
	RET

	.CSEG
_isdigit:
	ST   -Y,R26
    ldi  r30,1
    ld   r31,y+
    cpi  r31,'0'
    brlo isdigit0
    cpi  r31,'9'+1
    brlo isdigit1
isdigit0:
    clr  r30
isdigit1:
    ret
_toupper:
	ST   -Y,R26
    ld   r30,y+
    cpi  r30,'a'
    brlo toupper0
    cpi  r30,'z'+1
    brcc toupper0
    subi r30,32
toupper0:
    ret

	.CSEG

	.DSEG

	.CSEG

	.CSEG

	.CSEG

	.ESEG
_MyAddress:
	.DB  0x1
_HV:
	.DB  0x84,0x3
_HV_PHYS_MAX:
	.DB  0x1F,0xA
_HV_PHYS_MIN:
	.DB  0x5D,0x3
_VOLTAGE_TO_PWM:
	.DB  0x9A,0xF8,0xB8,0x3F
_ADC_TO_VOLTAGE:
	.DB  0xC2,0x17,0x52,0x40

	.DSEG
_adc_averaging_index:
	.BYTE 0x4
_adc_sum:
	.BYTE 0x4
_adc_averaged:
	.BYTE 0x2
_adc_completed:
	.BYTE 0x1
_calibration:
	.BYTE 0x1
__seed_G102:
	.BYTE 0x4

	.CSEG
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x0:
	LDS  R30,192
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x1:
	LDI  R31,0
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x2:
	ST   -Y,R27
	ST   -Y,R26
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 5 TIMES, CODE SIZE REDUCTION:6 WORDS
SUBOPT_0x3:
	CLR  R22
	CLR  R23
	RCALL __CDF1
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x4:
	LDI  R26,LOW(_VOLTAGE_TO_PWM)
	LDI  R27,HIGH(_VOLTAGE_TO_PWM)
	RCALL __EEPROMRDD
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:23 WORDS
SUBOPT_0x5:
	LDI  R30,LOW(0)
	STS  _adc_sum,R30
	STS  _adc_sum+1,R30
	STS  _adc_sum+2,R30
	STS  _adc_sum+3,R30
	STS  _adc_averaging_index,R30
	STS  _adc_averaging_index+1,R30
	STS  _adc_averaging_index+2,R30
	STS  _adc_averaging_index+3,R30
	STS  _adc_averaged,R30
	STS  _adc_averaged+1,R30
	STS  _adc_completed,R30
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x6:
	LDS  R30,_adc_averaged
	LDS  R31,_adc_averaged+1
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:5 WORDS
SUBOPT_0x7:
	LDS  R26,_adc_sum
	LDS  R27,_adc_sum+1
	LDS  R24,_adc_sum+2
	LDS  R25,_adc_sum+3
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 10 TIMES, CODE SIZE REDUCTION:7 WORDS
SUBOPT_0x8:
	CLR  R22
	CLR  R23
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x9:
	LDI  R26,LOW(_ADC_TO_VOLTAGE)
	LDI  R27,HIGH(_ADC_TO_VOLTAGE)
	RCALL __EEPROMRDD
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 5 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0xA:
	RCALL __MULF12
	RCALL __CFD1U
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:8 WORDS
SUBOPT_0xB:
	LDI  R26,LOW(_HV)
	LDI  R27,HIGH(_HV)
	RCALL __EEPROMRDW
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0xC:
	LDS  R30,122
	ORI  R30,0x40
	STS  122,R30
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 23 TIMES, CODE SIZE REDUCTION:20 WORDS
SUBOPT_0xD:
	ST   -Y,R31
	ST   -Y,R30
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0xE:
	LDI  R26,LOW(_MyAddress)
	LDI  R27,HIGH(_MyAddress)
	RCALL __EEPROMRDB
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:13 WORDS
SUBOPT_0xF:
	RCALL __PUTPARD1
	LDI  R24,4
	RCALL _printf
	ADIW R28,6
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x10:
	__POINTW1FN _0x0,18
	RCALL SUBOPT_0xD
	RJMP SUBOPT_0x4

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:10 WORDS
SUBOPT_0x11:
	__GETD2N 0x447A0000
	RJMP SUBOPT_0xA

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x12:
	RCALL SUBOPT_0x8
	RCALL SUBOPT_0x8
	RJMP SUBOPT_0xF

;OPTIMIZER ADDED SUBROUTINE, CALLED 11 TIMES, CODE SIZE REDUCTION:28 WORDS
SUBOPT_0x13:
	RCALL SUBOPT_0xD
	LDI  R24,0
	RCALL _printf
	ADIW R28,2
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x14:
	RCALL _GetWORD
	MOVW R18,R30
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:3 WORDS
SUBOPT_0x15:
	STS  _calibration,R30
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x16:
	__POINTW1FN _0x0,134
	RJMP SUBOPT_0x13

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x17:
	LDI  R30,LOW(0)
	RJMP SUBOPT_0x15

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x18:
	LDD  R30,Y+4
	LDD  R31,Y+4+1
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x19:
	__POINTW1FN _0x0,246
	RCALL SUBOPT_0xD
	RJMP SUBOPT_0xB

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x1A:
	SBIW R30,1
	LPM  R30,Z
	MOV  R19,R30
	CPI  R30,0
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 5 TIMES, CODE SIZE REDUCTION:18 WORDS
SUBOPT_0x1B:
	ST   -Y,R19
	LDD  R26,Y+11
	LDD  R27,Y+11+1
	LDD  R30,Y+13
	LDD  R31,Y+13+1
	ICALL
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:3 WORDS
SUBOPT_0x1C:
	LDD  R30,Y+14
	LDD  R31,Y+14+1
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 5 TIMES, CODE SIZE REDUCTION:6 WORDS
SUBOPT_0x1D:
	SBIW R30,4
	STD  Y+14,R30
	STD  Y+14+1,R31
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x1E:
	LDD  R26,Y+11
	LDD  R27,Y+11+1
	LDD  R30,Y+13
	LDD  R31,Y+13+1
	ICALL
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x1F:
	RCALL SUBOPT_0x1C
	RJMP SUBOPT_0x1D

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:3 WORDS
SUBOPT_0x20:
	LDD  R26,Y+14
	LDD  R27,Y+14+1
	ADIW R26,4
	RCALL __GETW1P
	STD  Y+6,R30
	STD  Y+6+1,R31
	RET

;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x21:
	LDD  R26,Y+14
	LDD  R27,Y+14+1
	ADIW R26,4
	LD   R20,X+
	LD   R21,X
	RET


	.CSEG
_delay_ms:
	adiw r26,0
	breq __delay_ms1
__delay_ms0:
	__DELAY_USW 0xBB8
	wdr
	sbiw r26,1
	brne __delay_ms0
__delay_ms1:
	ret

__ROUND_REPACK:
	TST  R21
	BRPL __REPACK
	CPI  R21,0x80
	BRNE __ROUND_REPACK0
	SBRS R30,0
	RJMP __REPACK
__ROUND_REPACK0:
	ADIW R30,1
	ADC  R22,R25
	ADC  R23,R25
	BRVS __REPACK1

__REPACK:
	LDI  R21,0x80
	EOR  R21,R23
	BRNE __REPACK0
	PUSH R21
	RJMP __ZERORES
__REPACK0:
	CPI  R21,0xFF
	BREQ __REPACK1
	LSL  R22
	LSL  R0
	ROR  R21
	ROR  R22
	MOV  R23,R21
	RET
__REPACK1:
	PUSH R21
	TST  R0
	BRMI __REPACK2
	RJMP __MAXRES
__REPACK2:
	RJMP __MINRES

__UNPACK:
	LDI  R21,0x80
	MOV  R1,R25
	AND  R1,R21
	LSL  R24
	ROL  R25
	EOR  R25,R21
	LSL  R21
	ROR  R24

__UNPACK1:
	LDI  R21,0x80
	MOV  R0,R23
	AND  R0,R21
	LSL  R22
	ROL  R23
	EOR  R23,R21
	LSL  R21
	ROR  R22
	RET

__CFD1U:
	SET
	RJMP __CFD1U0
__CFD1:
	CLT
__CFD1U0:
	PUSH R21
	RCALL __UNPACK1
	CPI  R23,0x80
	BRLO __CFD10
	CPI  R23,0xFF
	BRCC __CFD10
	RJMP __ZERORES
__CFD10:
	LDI  R21,22
	SUB  R21,R23
	BRPL __CFD11
	NEG  R21
	CPI  R21,8
	BRTC __CFD19
	CPI  R21,9
__CFD19:
	BRLO __CFD17
	SER  R30
	SER  R31
	SER  R22
	LDI  R23,0x7F
	BLD  R23,7
	RJMP __CFD15
__CFD17:
	CLR  R23
	TST  R21
	BREQ __CFD15
__CFD18:
	LSL  R30
	ROL  R31
	ROL  R22
	ROL  R23
	DEC  R21
	BRNE __CFD18
	RJMP __CFD15
__CFD11:
	CLR  R23
__CFD12:
	CPI  R21,8
	BRLO __CFD13
	MOV  R30,R31
	MOV  R31,R22
	MOV  R22,R23
	SUBI R21,8
	RJMP __CFD12
__CFD13:
	TST  R21
	BREQ __CFD15
__CFD14:
	LSR  R23
	ROR  R22
	ROR  R31
	ROR  R30
	DEC  R21
	BRNE __CFD14
__CFD15:
	TST  R0
	BRPL __CFD16
	RCALL __ANEGD1
__CFD16:
	POP  R21
	RET

__CDF1U:
	SET
	RJMP __CDF1U0
__CDF1:
	CLT
__CDF1U0:
	SBIW R30,0
	SBCI R22,0
	SBCI R23,0
	BREQ __CDF10
	CLR  R0
	BRTS __CDF11
	TST  R23
	BRPL __CDF11
	COM  R0
	RCALL __ANEGD1
__CDF11:
	MOV  R1,R23
	LDI  R23,30
	TST  R1
__CDF12:
	BRMI __CDF13
	DEC  R23
	LSL  R30
	ROL  R31
	ROL  R22
	ROL  R1
	RJMP __CDF12
__CDF13:
	MOV  R30,R31
	MOV  R31,R22
	MOV  R22,R1
	PUSH R21
	RCALL __REPACK
	POP  R21
__CDF10:
	RET

__ZERORES:
	CLR  R30
	CLR  R31
	CLR  R22
	CLR  R23
	POP  R21
	RET

__MINRES:
	SER  R30
	SER  R31
	LDI  R22,0x7F
	SER  R23
	POP  R21
	RET

__MAXRES:
	SER  R30
	SER  R31
	LDI  R22,0x7F
	LDI  R23,0x7F
	POP  R21
	RET

__MULF12:
	PUSH R21
	RCALL __UNPACK
	CPI  R23,0x80
	BREQ __ZERORES
	CPI  R25,0x80
	BREQ __ZERORES
	EOR  R0,R1
	SEC
	ADC  R23,R25
	BRVC __MULF124
	BRLT __ZERORES
__MULF125:
	TST  R0
	BRMI __MINRES
	RJMP __MAXRES
__MULF124:
	PUSH R0
	PUSH R17
	PUSH R18
	PUSH R19
	PUSH R20
	CLR  R17
	CLR  R18
	CLR  R25
	MUL  R22,R24
	MOVW R20,R0
	MUL  R24,R31
	MOV  R19,R0
	ADD  R20,R1
	ADC  R21,R25
	MUL  R22,R27
	ADD  R19,R0
	ADC  R20,R1
	ADC  R21,R25
	MUL  R24,R30
	RCALL __MULF126
	MUL  R27,R31
	RCALL __MULF126
	MUL  R22,R26
	RCALL __MULF126
	MUL  R27,R30
	RCALL __MULF127
	MUL  R26,R31
	RCALL __MULF127
	MUL  R26,R30
	ADD  R17,R1
	ADC  R18,R25
	ADC  R19,R25
	ADC  R20,R25
	ADC  R21,R25
	MOV  R30,R19
	MOV  R31,R20
	MOV  R22,R21
	MOV  R21,R18
	POP  R20
	POP  R19
	POP  R18
	POP  R17
	POP  R0
	TST  R22
	BRMI __MULF122
	LSL  R21
	ROL  R30
	ROL  R31
	ROL  R22
	RJMP __MULF123
__MULF122:
	INC  R23
	BRVS __MULF125
__MULF123:
	RCALL __ROUND_REPACK
	POP  R21
	RET

__MULF127:
	ADD  R17,R0
	ADC  R18,R1
	ADC  R19,R25
	RJMP __MULF128
__MULF126:
	ADD  R18,R0
	ADC  R19,R1
__MULF128:
	ADC  R20,R25
	ADC  R21,R25
	RET

__DIVF21:
	PUSH R21
	RCALL __UNPACK
	CPI  R23,0x80
	BRNE __DIVF210
	TST  R1
__DIVF211:
	BRPL __DIVF219
	RJMP __MINRES
__DIVF219:
	RJMP __MAXRES
__DIVF210:
	CPI  R25,0x80
	BRNE __DIVF218
__DIVF217:
	RJMP __ZERORES
__DIVF218:
	EOR  R0,R1
	SEC
	SBC  R25,R23
	BRVC __DIVF216
	BRLT __DIVF217
	TST  R0
	RJMP __DIVF211
__DIVF216:
	MOV  R23,R25
	PUSH R17
	PUSH R18
	PUSH R19
	PUSH R20
	CLR  R1
	CLR  R17
	CLR  R18
	CLR  R19
	CLR  R20
	CLR  R21
	LDI  R25,32
__DIVF212:
	CP   R26,R30
	CPC  R27,R31
	CPC  R24,R22
	CPC  R20,R17
	BRLO __DIVF213
	SUB  R26,R30
	SBC  R27,R31
	SBC  R24,R22
	SBC  R20,R17
	SEC
	RJMP __DIVF214
__DIVF213:
	CLC
__DIVF214:
	ROL  R21
	ROL  R18
	ROL  R19
	ROL  R1
	ROL  R26
	ROL  R27
	ROL  R24
	ROL  R20
	DEC  R25
	BRNE __DIVF212
	MOVW R30,R18
	MOV  R22,R1
	POP  R20
	POP  R19
	POP  R18
	POP  R17
	TST  R22
	BRMI __DIVF215
	LSL  R21
	ROL  R30
	ROL  R31
	ROL  R22
	DEC  R23
	BRVS __DIVF217
__DIVF215:
	RCALL __ROUND_REPACK
	POP  R21
	RET

__ADDW2R15:
	CLR  R0
	ADD  R26,R15
	ADC  R27,R0
	RET

__ADDD12:
	ADD  R30,R26
	ADC  R31,R27
	ADC  R22,R24
	ADC  R23,R25
	RET

__ANEGW1:
	NEG  R31
	NEG  R30
	SBCI R31,0
	RET

__ANEGD1:
	COM  R31
	COM  R22
	COM  R23
	NEG  R30
	SBCI R31,-1
	SBCI R22,-1
	SBCI R23,-1
	RET

__CWD1:
	MOV  R22,R31
	ADD  R22,R22
	SBC  R22,R22
	MOV  R23,R22
	RET

__DIVD21U:
	PUSH R19
	PUSH R20
	PUSH R21
	CLR  R0
	CLR  R1
	CLR  R20
	CLR  R21
	LDI  R19,32
__DIVD21U1:
	LSL  R26
	ROL  R27
	ROL  R24
	ROL  R25
	ROL  R0
	ROL  R1
	ROL  R20
	ROL  R21
	SUB  R0,R30
	SBC  R1,R31
	SBC  R20,R22
	SBC  R21,R23
	BRCC __DIVD21U2
	ADD  R0,R30
	ADC  R1,R31
	ADC  R20,R22
	ADC  R21,R23
	RJMP __DIVD21U3
__DIVD21U2:
	SBR  R26,1
__DIVD21U3:
	DEC  R19
	BRNE __DIVD21U1
	MOVW R30,R26
	MOVW R22,R24
	MOVW R26,R0
	MOVW R24,R20
	POP  R21
	POP  R20
	POP  R19
	RET

__GETW1P:
	LD   R30,X+
	LD   R31,X
	SBIW R26,1
	RET

__GETD1P_INC:
	LD   R30,X+
	LD   R31,X+
	LD   R22,X+
	LD   R23,X+
	RET

__PUTDP1_DEC:
	ST   -X,R23
	ST   -X,R22
	ST   -X,R31
	ST   -X,R30
	RET

__GETW1PF:
	LPM  R0,Z+
	LPM  R31,Z
	MOV  R30,R0
	RET

__PUTPARD1:
	ST   -Y,R23
	ST   -Y,R22
	ST   -Y,R31
	ST   -Y,R30
	RET

__SWAPW12:
	MOV  R1,R27
	MOV  R27,R31
	MOV  R31,R1

__SWAPB12:
	MOV  R1,R26
	MOV  R26,R30
	MOV  R30,R1
	RET

__EEPROMRDD:
	ADIW R26,2
	RCALL __EEPROMRDW
	MOVW R22,R30
	SBIW R26,2

__EEPROMRDW:
	ADIW R26,1
	RCALL __EEPROMRDB
	MOV  R31,R30
	SBIW R26,1

__EEPROMRDB:
	SBIC EECR,EEWE
	RJMP __EEPROMRDB
	PUSH R31
	IN   R31,SREG
	CLI
	OUT  EEARL,R26
	SBI  EECR,EERE
	IN   R30,EEDR
	OUT  SREG,R31
	POP  R31
	RET

__EEPROMWRD:
	RCALL __EEPROMWRW
	ADIW R26,2
	MOVW R0,R30
	MOVW R30,R22
	RCALL __EEPROMWRW
	MOVW R30,R0
	SBIW R26,2
	RET

__EEPROMWRW:
	RCALL __EEPROMWRB
	ADIW R26,1
	PUSH R30
	MOV  R30,R31
	RCALL __EEPROMWRB
	POP  R30
	SBIW R26,1
	RET

__EEPROMWRB:
	SBIS EECR,EEWE
	RJMP __EEPROMWRB1
	WDR
	RJMP __EEPROMWRB
__EEPROMWRB1:
	IN   R25,SREG
	CLI
	OUT  EEARL,R26
	SBI  EECR,EERE
	IN   R24,EEDR
	CP   R30,R24
	BREQ __EEPROMWRB0
	OUT  EEDR,R30
	SBI  EECR,EEMWE
	SBI  EECR,EEWE
__EEPROMWRB0:
	OUT  SREG,R25
	RET

__SAVELOCR6:
	ST   -Y,R21
__SAVELOCR5:
	ST   -Y,R20
__SAVELOCR4:
	ST   -Y,R19
__SAVELOCR3:
	ST   -Y,R18
__SAVELOCR2:
	ST   -Y,R17
	ST   -Y,R16
	RET

__LOADLOCR6:
	LDD  R21,Y+5
__LOADLOCR5:
	LDD  R20,Y+4
__LOADLOCR4:
	LDD  R19,Y+3
__LOADLOCR3:
	LDD  R18,Y+2
__LOADLOCR2:
	LDD  R17,Y+1
	LD   R16,Y
	RET

__LOADLOCR2P:
	LD   R16,Y+
	LD   R17,Y+
	RET

;END OF CODE MARKER
__END_OF_CODE:
