; attiny 45
; glowing orb
; 


.include "tn45def.inc"

.equ led1 = PB3
.equ led2 = PB4
.equ led3 = PB0
.equ led4 = PB1

.def temp = R17
.def temp1 = R18
.def temp2 = R19
.def temp3 = R20
.def temp4 = R21
.def temp5 = R22
.def temp6 = R22


.cseg
.org 0
rjmp reset


delay:

   mov temp3, temp5
   delay_loop:
      mov temp4, temp2
      delay_loop1:
         dec temp4
	 brne delay_loop1
      dec temp3
      brne delay_loop
 ret

delay2:

   ldi temp, 15
   delay_loop2:
      ldi temp1, 255
      delay_loop3:
         dec temp1
	 brne delay_loop3
      dec temp
      brne delay_loop2
 ret




delay3:

   ldi temp, 37
   delay_loop4:
      ldi temp1, 8
      delay_loop5:
         dec temp4
	 brne delay_loop1
      dec temp3
      brne delay_loop
 ret


delay4:
   
   
   mov temp3, temp5
   delay_loop6:
      mov temp4, temp2
      delay_loop7:
         dec temp4
	 brne delay_loop7
      dec temp3
      brne delay_loop6

 ret



delay_half_sec:

   ldi temp, 255
   delay_half_sec_loop:
      ldi temp1, 255
      delay_half_sec_loop2:
         dec temp1
	 brne delay_half_sec_loop2
      dec temp
      brne delay_half_sec_loop
 ret

leds_on:
	sbi PORTB, led1
	sbi PORTB, led2
	sbi PORTB, led3
	sbi PORTB, led4
ret

leds_off:
	cbi PORTB, led1
	cbi PORTB, led2
	cbi PORTB, led3
	cbi PORTB, led4
ret
;
; main program
;
reset:
   ;        
        
   ; set stack pointer to top of RAM
   ;
   ldi temp, high(RAMEND)
   out SPH, temp
   ldi temp, low(RAMEND)
   out SPL, temp

   cbi PORTB, led1
   sbi DDRB, led1

   cbi PORTB, led2
   sbi DDRB, led2

   cbi PORTB, led3
   sbi DDRB, led3

   cbi PORTB, led4
   sbi DDRB, led4
   ;
   ; start main loop
   ;
   
loop:

        rcall fade_on
        rcall fade_on_2
        rcall on_half_sec
        rcall fade_off_2
	rcall fade_off

rjmp loop



cycle:

	rcall leds_on
	rcall delay
	rcall leds_off
	rcall delay2
ret

cycle2:

	rcall leds_on
	rcall delay3
	rcall leds_off
	rcall delay4
ret

on_half_sec:
	rcall leds_on
        ;rcall delay_half_sec
        ;rcall delay_half_sec
        ;rcall delay_half_sec
        ;rcall delay_half_sec
        ;rcall delay_half_sec
        ;rcall delay_half_sec
        rcall delay_half_sec
        rcall delay_half_sec
        rcall delay_half_sec
        rcall delay_half_sec
        rcall leds_off
ret


fade_off:

        ldi temp5, 16
        ldi temp2, 255
        

                 
       fade_off_loop2:

                rcall cycle
		rcall cycle

      	;dec temp5
        ;brne fade_off_loop
        ;ldi temp5, 10
        ;ldi temp2, 120


       dec temp2
       brne fade_off_loop2                  

ret

fade_on:

        ldi temp5, 16
        ldi temp2, 1

                 
       fade_on_loop2:

		rcall cycle
                rcall cycle

      		inc temp2
                cpi temp2, 255
       brne fade_on_loop2                  

ret



fade_on_2:

        ldi temp5, 255
        ldi temp2, 15
  
	fade_on_loop_4:	  
        rcall cycle2
        dec temp5
        cpi temp5, 1
        brne fade_on_loop_4

ret


fade_off_2:

        ldi temp5, 1
        ldi temp2, 15

        ;rcall cycle2         
	fade_off_loop_4:	  
        rcall cycle2
        inc temp5
        cpi temp5, 255
        brne fade_off_loop_4

ret
