.include "output\tn13def.inc"
;================================================================================================================



;================================================================================================================

;*******************************		 		****************************

.def   	Temp=R16
.def   	Temp1=R17
.def   	Temp2=R18
.def	Temp3=R19
.def	countsht=R20



.dseg
;********************************										**********************************
;********************************		    		**********************************
;********************************			  " "		**********************************
stroka:		.byte 4
stolbik:	.byte 1
.cseg
;***************************   ************************
.org 0
	rjmp RESET   
	rjmp INT_0				; External Interrupt 0
	rjmp PCI0				; External Interrupt Request 0
	rjmp OVF0				; Timer/Counter0 Overflow
	rjmp ERDY				; EEPROM Ready
	rjmp AnaComp				; Analog Comparator
	rjmp OC0A				; Timer/Counter Compare Match A
	rjmp OC0B				; Timer/Counter Compare Match B
	rjmp WDT					; Watchdog Time-out
	rjmp ADCC				; ADC Conversion Complete
  
	;RESET:
	INT_0:
	PCI0:
	OVF0:
	ERDY:
	AnaComp:
	;OC0A:
	OC0B:
	WDT:
	ADCC:
reti	

;**********************     *********************
;**********************               TIMER0_OVF                   *********************
OC0A:		in R15,SREG
			ldi Temp,0 
			out TCNT0,Temp				;  
				rcall effects

exitoc0a:
			out SREG,R15
		reti
		


		
   
RESET:

							;***********************	 	**********************
				ldi countsht,0
				ldi Temp,1
				sts stroka,Temp
				ldi Temp,2
				sts stroka+1,Temp
				ldi Temp,3
				sts stroka+2,Temp
				ldi Temp,4
				sts stroka+3,Temp
				ldi Temp,1
				sts stolbik,Temp
							
ldi Temp,0b11111111			; 
out DDRB,Temp
		  
ldi Temp,0 
out TCNT0,Temp				;  

ldi Temp,0b00001000 			;    / 0
out TIMSK0,Temp

ldi Temp,0b00001000 			;    
out TIFR0,Temp

ldi Temp,0b00000010 			;  "  "
out TCCR0A,Temp

ldi Temp,0b00000100 			;  = CK/256
out TCCR0B,Temp

ldi Temp,RamEnd     			;  
out SPL,Temp

ldi Temp,255					;  
out OCR0A,Temp

ldi Temp1,0b00000000
sei

;****************************									****************************
;****************************         		****************************
;****************************									****************************

			
main:							
				rcall shifting
				
				cbi PORTB,1			;     
				sbi PORTB,1
				cbi PORTB,1
				rcall dealey
			rjmp main
		
		
dealey: 		ldi Temp,255
dealey0:		dec Temp
				brne dealey0
				ldi Temp,255
dealey1:		dec Temp
				brne dealey1
			ret
;+++++++++++++++++++++++++++	  	+++++++++++++++++++++++
;0 - , 1 - , 2 - 

shifting:		lds Temp,stolbik
				inc countsht
				rcall  shift
				
				lds Temp,stroka
				inc countsht
				rcall  shift

				lds Temp,stroka+1
				inc countsht
				rcall  shift

				lds Temp,stroka+2
				inc countsht
				rcall  shift
				
				lds Temp,stroka+3
				inc countsht
				rcall  shift
				
				lds Temp,stolbik
				sbrc Temp,7			;   7   =0
				rjmp init
				lsl Temp
exitsht:		sts stolbik,Temp
				ldi countsht,0
			ret
				

				
shift:			ldi Temp1,8			;  

shift1:			sbrc Temp,7			;   7   =0
				sbi	PORTB,0			;    PB 0
				sbrs Temp,7			;   7   =1
				cbi PORTB,0			;    PB 0
		
				cbi PORTB,2			;  
				sbi PORTB,2			;  
				cbi PORTB,2
		
				lsl Temp				;   
				dec Temp1			; - 
				brne shift1			;  0 - 
			ret
			
init:			ldi Temp,1
			rjmp exitsht
;================================================================================


;+++++++++++++++++++++++++++++++	 	+++++++++++++++++++++++++++++
;

effects:		lds Temp3,stroka+3
				inc Temp3
				sts stroka+3,Temp3
				
				lds Temp3,stroka
				inc Temp3
				sts stroka,Temp3
				
				lds Temp3,stroka+1
				inc Temp3
				sts stroka+1,Temp3
				
				lds Temp3,stroka+2
				inc Temp3
				sts stroka+2,Temp3
			ret 