.def rgb_level = r21
.def rgb_dir = r22
.def rgb_upd_cnt = r23
+.def r_map = r24
+.def g_map = r25
+.def b_map = r26
.equ pin_red = 0x01
.equ pin_green = 0x02
.equ pin_blue = 0x04
ldi tmp,mid
mov blue,tmp
+; initial mapping intensities of intensities
+ldi ZL,low(INTENSITIES*2)
+ldi ZH,high(INTENSITIES*2)
+add ZL,red
+adc ZH,zero
+lpm r_map,Z
+ldi ZL,low(INTENSITIES*2)
+ldi ZH,high(INTENSITIES*2)
+add ZL,green
+adc ZH,zero
+lpm g_map,Z
+ldi ZL,low(INTENSITIES*2)
+ldi ZH,high(INTENSITIES*2)
+add ZL,blue
+adc ZH,zero
+lpm b_map,Z
+
; rgb propagation init
ldi rgb_dir,0x04
sub blue,two
add blue,one
+; update mapping
+ldi ZL,low(INTENSITIES*2)
+ldi ZH,high(INTENSITIES*2)
+add ZL,red
+adc ZH,zero
+lpm r_map,Z
+ldi ZL,low(INTENSITIES*2)
+ldi ZH,high(INTENSITIES*2)
+add ZL,green
+adc ZH,zero
+lpm g_map,Z
+ldi ZL,low(INTENSITIES*2)
+ldi ZH,high(INTENSITIES*2)
+add ZL,blue
+adc ZH,zero
+lpm b_map,Z
+
; power on the leds
POWER_LEDS:
mov rgb_level,zero
CHECK_RED:
-cp count,red
+cp count,r_map
brne CHECK_GREEN
ori rgb_level,pin_red
CHECK_GREEN:
-cp count,green
+cp count,g_map
brne CHECK_BLUE
ori rgb_level,pin_green
CHECK_BLUE:
-cp count,blue
+cp count,b_map
brne SET_PORTS
ori rgb_level,pin_blue
reti
+; intensities
+INTENSITIES:
+.include "rgb_moritz_intensities.asm"
+