-> mapping to an 1/x like behaviour
[my-code/atmel.git] / beginners / rgb_moritz.asm
index bc3a72a..c3b3984 100644 (file)
@@ -21,6 +21,9 @@
 .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
@@ -107,6 +110,23 @@ mov green,tmp
 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
 
@@ -180,6 +200,23 @@ sbrc rgb_dir,2
 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
@@ -189,19 +226,19 @@ add rgb_upd_cnt,one
 
 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
 
@@ -214,3 +251,7 @@ add count,one
 
 reti
 
+; intensities
+INTENSITIES:
+.include "rgb_moritz_intensities.asm"
+