Stimmt, diese Macken hat die neue Dimmerkorrektur-Funktion dann leider, naja, werde mir das heute Nachmittag nochmal angucken. Im Moment habe ich aber auch noch genug Speicher um die Tabelle drin zu haben.
Zu der Baumarktfunktion: Die grundsätzliche Idee hierbei war, dass man die Operation die auf die daten ausgeführt wird nicht mehr 3-mal drinhatt und per Bedingung auswählt, welche man ausführt, sondern durch ein bisschen Pointer-Arithmetik die Adresse abhängig vom aktuellen Fade gesetzt wird und man dann die Datenoperation entsprechend nur noch 1-mal drinhatt. Ich bin mir aber leider nicht sicher, ob das ganze so noch funktioniert. Außerdem habe ich (um noch ein paar Bytes rauszupressen) die rjmp/br** _Baumarkt_Ende Konstrukte durch entsprechende direkte Sprungbefehle nach _RGB_Output ersetzt, aber das ist ja eine Kleinigkeit. Weil der Beitrag wundeschön lang werden würde, wenn ich das einfach so reinposte, habe ich es in den Anhang getan.
Bezüglich _Key_Select: Das habe ich ganz übersehen, dass man das ja auch explizit setzen kann. Danke, nochmal 10Byte weniger.
Edit: Eine andere Stelle, wo ich nochmal ein paar Byte herausholen konnte war bei _pgm_select, und zwar indem ich eine Sprungtabelle verwendet habe. Wie bei meinem restlichen Code gilt auch hier: Ich weiß nicht, ob es funktioniert, aber hier ist der code (zero ist das nicht benutzte R27-DMX register, im ganzen Programm auf 0 gesetzt, sparrt ein paar Byte):
_pgm_select:
cpi temp0,6 ; teste ob zu groß
brlo _main ; wenn ja, weg hier
ldi ZL, low(_j_table) ; setze Adresse
ldi ZH, high(_j_table)
add ZL,temp0 ; addiere die entsprechende Position
adc ZH,zero ; überlauf
push ZL ; ablegen
push ZH
ret ; und da hin springen
_j_table:
rjmp _Lightning
rjmp _Fixed_Colour
rjmp _Baumarkt
rjmp _Blob
rjmp _Fire
rjmp _Random_Fade
Alles anzeigen