a40d3a7e3135e90b840f4fccba963d4073de95f4
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

1) ; bulb - BlinkenArea ultimate logo board
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

2) ; version 1.1.0 date 2012-06-10
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

3) ; Copyright (C) 2011-2012 Stefan Schuermans <stefan@blinkenarea.org>
4) ; Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5) 
6) ; ATtiny2313A, clock frequency: 8 MHz (internal oscillator)
7) 
8) ; PA0: unused
9) ; PA1: unused
10) ; PA2: reset
11) ; PB0: column 0 output (output, low)
12) ; PB1: column 1 output (output, low)
13) ; PB2: column 2 output (output, low)
14) ; PB3: column 3 output (output, low)
15) ; PB4: column 4 output (output, low)
16) ; PB5: column 5 output (output, low)
17) ; PB6: column 6 output (output, low)
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

18) ; PB7: unused (input, pull-up enabled)
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

19) ; PD0: row 0 output (output, high)
20) ; PD1: row 1 output (output, high)
21) ; PD2: row 2 output (output, high)
22) ; PD3: row 3 output (output, high)
23) ; PD4: row 4 output (output, high)
24) ; PD5: row 5 output (output, high)
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

25) ; PD6: mode switch (input, pull-up enabled)
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

26) 
27) 
28) 
29) .INCLUDE        "tn2313def.inc"
30) 
31) 
32) 
33) ; IO pins
34) .equ    COL_PORT                =       PORTB   ; column outputs
35) .equ    ROW_PORT                =       PORTD   ; row outputs
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

36) .equ    MODE_SW_PIN             =       PIND
37) .equ    MODE_SW_BIT             =       6
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

38) 
39) 
40) 
41) ; general purpose registers
42) .def    TMP                     =       r16
43) .def    CNT                     =       r17
44) .def    DATA                    =       r18
45) 
46) 
47) 
48) .DSEG
49) .ORG    0x060
50) 
51) 
52) 
53) ; current frame
54) FRAME:                  .BYTE   42
55) 
56) 
57) 
58) .MACRO breqx
59)         brne    NE
60)         rjmp    @0
61) NE:
62) .ENDM
63) 
64) 
65) 
66) ; multiple rcalls in a row
67) ; parameters: label, N
68) .MACRO rcall_N
69) .IF @1 > 0
70)         rcall   @0
71)         rcall_N @0, @1 - 1
72) .ENDIF
73) .ENDM
74) 
75) 
76) 
77) ; check if to turn on pixel in subframe
78) ; parameter: grayscale value (1..15)
79) ; input: X = ptr to pixel data (0..7),
80) ;        DATA[7-1] = other pixels
81) ; output: X = ptr to pixel data of next pixel,
82) ;         DATA.7 = if _not_ to turn on pixel, DATA.[6-0] = old DATA[7-1]
83) ; changes: TMP, DATA, X
84) ; cycles: 4
85) .MACRO PIXEL
86)         ld      TMP,X+
87)         cpi     TMP,@0
88)         ror     DATA
89) .ENDM
90) 
91) 
92) 
93) ; output row (black/white)
94) ; parameter: grayscale value (1..15)
95) ; input: X = ptr to pixel data (0..15)
96) ; output: -
97) ; changes: TMP, DATA
98) ; cycles: 32
99) .MACRO ROW_BW
100)         PIXEL   @0                      ; pixel 0
101)         PIXEL   @0                      ; pixel 1
102)         PIXEL   @0                      ; pixel 2
103)         PIXEL   @0                      ; pixel 3
104)         PIXEL   @0                      ; pixel 4
105)         PIXEL   @0                      ; pixel 5
106)         PIXEL   @0                      ; pixel 6
107)         subi    XL,7                    ;   XH not there on ATtiny2313
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

108)         lsr     DATA                    ; ensure remaining bit stays high
109)                                         ;   (pull-up for unused pin)
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

110)         com     DATA
111)         out     COL_PORT,DATA
112) .ENDM
113) 
114) 
115) 
116) ; wait n * 64 cycles
117) ; parameter: n
118) ; input: -
119) ; output: -
120) ; changes: TMP
121) ; cycles: n * 64
122) .MACRO WAIT64_N
123) .IF @0 > 0
124)         rcall           WAIT64
125)         WAIT64_N        @0 - 1
126) .ENDIF
127) .ENDM
128) 
129) 
130) 
131) ; output row for grayscale (black/white) and wait
132) ; parameter: grayscale value (1..15)
133) ; input: X = ptr to pixel data (0..15)
134) ; output: -
135) ; changes: TMP, DATA
136) ; cycles: 32 + (grayscale - 1) * 64
137) .MACRO ROW_BW_WAIT
138)         ROW_BW          @0
139)         WAIT64_N        @0 - 1
140) .ENDM
141) 
142) 
143) 
144) ; turn off row (with same timing as ROW_BW)
145) ; input: -
146) ; output: -
147) ; changes: TMP
148) ; cycles: 32
149) .MACRO ROW_OFF
150)         ldi     TMP,10
151) ROW_OFF_LOOP:
152)         dec     TMP
153)         brne    ROW_OFF_LOOP
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

154)         ldi     TMP,0x80                ; ensure remaining bit stays high
155)                                         ;   (pull-up for unused pin)
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

156)         out     COL_PORT,TMP
157) .ENDM
158) 
159) 
160) 
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

161) ; play an animation N times (mode 0) or infinitely (mode 1)
162) ; parameters: animation function, N
163) .MACRO PL_ANIM
164) PL_ANIM_LOOP:
165)         rcall_N @0, @1 - 1
166)         sbic    MODE_SW_PIN,MODE_SW_BIT
167)         rjmp    PL_ANIM_LOOP
168) .ENDM
169) 
170) 
171) 
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

172) .CSEG
173) .ORG    0x000
174)         rjmp    ENTRY                   ; RESET
175)         reti                            ; INT0
176)         reti                            ; INT1
177)         reti                            ; TIMER1_CAPT
178)         reti                            ; TIMER1_COMPA
179)         reti                            ; TIMER1_OVF
180)         reti                            ; TIMER0_OVF
181)         reti                            ; USART0_RX
182)         reti                            ; USART0_UDRE
183)         reti                            ; USART0_TX
184)         reti                            ; ANALOG_COMP
185)         reti                            ; PC_INT0
186)         reti                            ; TIMER1_COMPB
187)         reti                            ; TIMER0_COMPA
188)         reti                            ; TIMER0_COMPB
189)         reti                            ; USI_START
190)         reti                            ; USI_OVERFLOW
191)         reti                            ; EE_READY
192)         reti                            ; WDT
193)         reti                            ; PC_INT1
194)         reti                            ; PC_INT2
195) 
196) 
197) 
198) ; code entry point
199) ENTRY:
200) ; set system clock prescaler to 1:1
201)         ldi     TMP,1<<CLKPCE
202)         out     CLKPR,TMP
203)         ldi     TMP,0
204)         out     CLKPR,TMP
205) ; initialize output ports
206)         ldi     TMP,0x00                ; PA[01] to output, low
207)         out     PORTA,TMP
208)         ldi     TMP,0x03
209)         out     DDRA,TMP
210)         ldi     TMP,0x80                ; PB[0-6] to output, low - PB7 to input, pull-up enabled
211)         out     PORTB,TMP
212)         ldi     TMP,0x7F
213)         out     DDRB,TMP
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

214)         ldi     TMP,0x7F                ; PD[0-5] to output, high - PD6 to input, pull-up enabled
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

215)         out     PORTD,TMP
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

216)         ldi     TMP,0x3F
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

217)         out     DDRD,TMP
218) ; initialize stack pointer
219)         ldi     TMP,RAMEND
220)         out     SPL,TMP
221) ; enable watchdog (64ms)
222)         wdr
223)         ldi     TMP,1<<WDCE|1<<WDE
224)         out     WDTCR,TMP
225)         ldi     TMP,1<<WDE|1<<WDP1
226)         out     WDTCR,TMP
227)         wdr
228) ; disable analog comparator
229)         ldi     TMP,1<<ACD
230)         out     ACSR,TMP
231) ; jump to main program
232)         rjmp    MAIN
233) 
234) 
235) 
236) ; wait 64 cycles
237) ; input: -
238) ; output: -
239) ; changes: TMP
240) ; cycles: 64 (including rcall and ret)
241) WAIT64:
242)         ldi     TMP,19
243) WAIT64_LOOP:
244)         dec     TMP
245)         brne    WAIT64_LOOP
246) ; done
247)         ret
248) 
249) 
250) 
251) ; output row (grayscales)
252) ; input: X = ptr to pixel data (0..15)
253) ; output: -
254) ; changes: TMP, DATA
255) ; cycles: 7269 (including rcall and ret)
256) ROW_GRAY:
257)         ROW_BW_WAIT     1
258)         ROW_BW_WAIT     2
259)         ROW_BW_WAIT     3
260)         ROW_BW_WAIT     4
261)         ROW_BW_WAIT     5
262)         ROW_BW_WAIT     6
263)         ROW_BW_WAIT     7
264)         ROW_BW_WAIT     8
265)         ROW_BW_WAIT     9
266)         ROW_BW_WAIT     10
267)         ROW_BW_WAIT     11
268)         ROW_BW_WAIT     12
269)         ROW_BW_WAIT     13
270)         ROW_BW_WAIT     14
271)         ROW_BW_WAIT     15
272)         ROW_OFF
273) ; done
274)         ret
275) 
276) 
277) 
278) ; output a frame
279) ; input: FRAME = pixel data (0..15)
280) ; output: -
281) ; changes: TMP, CNT, DATA, X
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

282) ; cycles: 43682 (including rcall and ret)
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

283) ; time: 5.5ms
284) OUT_FRAME:
285)         wdr
286)         ldi     XL,low(FRAME)           ; ptr to pixel data
287)                                         ;   XH not there on ATtiny2313
288)         ldi     CNT,0x01                ; bitmask loop over rows
289) OUT_FRAME_LOOP:
290)         mov     TMP,CNT                 ; select row
291)         com     TMP
292)         andi    TMP,0x3F
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

293)         ori     TMP,0x40                ; ensure bit 6 stays high
294)                                         ;   (pull-up for switch input)
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

295)         out     ROW_PORT,TMP
296)         rcall   ROW_GRAY                ; display row
297)         subi    XL,-7                   ; ptr to next row
298)                                         ;   XH not there on ATtiny2313
299)         lsl     CNT                     ; bitmask loop over rows
300)         cpi     CNT,0x40
301)         brne    OUT_FRAME_LOOP
302) ; done
303)         ret
304) 
305) 
306) 
307) ; output a frame for some time
308) ; input: FRAME = pixel data (0..15)
309) ;        TMP = time to show frame (1..255, in 5.5 ms steps)
310) ; output: -
311) ; changes: X, TMP
312) ; time: TMP * 5.5 ms
313) OUT_FRAME_TIME:
314) ; output frame
315)         push    TMP
316)         push    CNT
317)         push    DATA
318)         rcall   OUT_FRAME               ; 5.5 ms
319)         pop     DATA
320)         pop     CNT
321)         pop     TMP
322) ; loop
323)         dec     TMP
324)         brne    OUT_FRAME_TIME
325) ; done
326)         ret
327) 
328) 
329) 
330) ; clear frame
331) ; input: -
332) ; output: -
333) ; changes: X, FRAME, TMP
334) ; time: short
335) CLEAR:
336)         ldi     XL,low(FRAME)           ; ptr to pixel data
337)                                         ;   XH not there on ATtiny2313
338)         clr     TMP
339) CLEAR_LOOP:
340)         st      X+,TMP                  ; clear pixel
341)         cpi     XL,low(FRAME)+42        ; bottom of loop
342)                                         ;   XH not there on ATtiny2313
343)         brne    CLEAR_LOOP
344) ; done
345)         ret
346) 
347) 
348) 
349) ; set frame to solid color
350) ; input: DATA = value (0..15)
351) ; output: -
352) ; changes: X, FRAME
353) ; time: short
354) SET_COLOR:
355)         ldi     XL,low(FRAME)           ; ptr to pixel data
356)                                         ;   XH not there on ATtiny2313
357) SET_COLOR_LOOP:
358)         st      X+,DATA                 ; set pixel value
359)         cpi     XL,low(FRAME)+42        ; bottom of loop
360)                                         ;   XH not there on ATtiny2313
361)         brne    SET_COLOR_LOOP
362) ; done
363)         ret
364) 
365) 
366) 
367) ; set pixel
368) ; input: CNT = pixel number (0..41, nothing is done for 42..255)
369) ;        DATA = value (0..15)
370) ; output: -
371) ; changes: X, FRAME, TMP
372) ; time: short
373) SET_PIXEL:
374)         cpi     CNT,42                  ; invalid pixel number -> done
375)         brsh    SET_PIXEL_END
376)         ldi     XL,low(FRAME)           ; ptr to pixel (base + offset)
377)         add     XL,CNT                  ;   XH not there on ATtiny2313
378)         st      X,DATA                  ; set pixel
379) SET_PIXEL_END:
380) ; done
381)         ret
382) 
383) 
384) 
385) ; draw worm
386) ; input: CNT = head of worm (0..55)
387) ; output: -
388) ; changes: X, FRAME, TMP, DATA
389) ; time: short
390) DRAW_WORM:
391)         cpi     CNT,56                  ; invalid head pos -> done
392)         brsh    DRAW_WORM_END
393)         ldi     XL,low(FRAME)+1         ; ptr to before head
394)         add     XL,CNT                  ;   XH not there on ATtiny2313
395)         ldi     DATA,15                 ; head is full on
396)         cpi     CNT,42                  ; head pos in frame -> go
397)         brlo    DRAW_WORM_LOOP
398)         mov     TMP,CNT                 ; TMP := invisible pixels
399)         subi    TMP,41
400)         sub     XL,TMP                  ; skip invisible pixels
401)         sub     DATA,TMP                ;   XH not there on ATtiny2313
402) DRAW_WORM_LOOP:
403)         st      -X,DATA                 ; set pixel, go back
404)         cpi     XL,low(FRAME)           ; 1st pixel -> done
405)         breq    DRAW_WORM_END           ;   XH not there on ATtiny2313
406)         dec     DATA                    ; next pixel darker
407)         brne    DRAW_WORM_LOOP          ; loop
408) DRAW_WORM_END:
409) ; done
410)         ret
411) 
412) 
413) 
414) ; draw backwards worm
415) ; input: CNT = tail of worm (0..55)
416) ; output: -
417) ; changes: X, FRAME, TMP, DATA
418) ; time: short
419) DRAW_BW_WORM:
420)         cpi     CNT,56                  ; invalid tail pos -> done
421)         brsh    DRAW_BW_WORM_END
422)         ldi     XL,low(FRAME)+1         ; ptr to before tail
423)         add     XL,CNT                  ;   XH not there on ATtiny2313
424)         ldi     DATA,1                  ; tail is minimum on
425)         cpi     CNT,42                  ; tail pos in frame -> go
426)         brlo    DRAW_BW_WORM_LOOP
427)         mov     TMP,CNT                 ; TMP := invisible pixels
428)         subi    TMP,41
429)         sub     XL,TMP                  ; skip invisible pixels
430)         add     DATA,TMP                ;   XH not there on ATtiny2313
431) DRAW_BW_WORM_LOOP:
432)         st      -X,DATA                 ; set pixel, go back
433)         cpi     XL,low(FRAME)           ; 1st pixel -> done
434)         breq    DRAW_BW_WORM_END        ;   XH not there on ATtiny2313
435)         inc     DATA                    ; next pixel brighter
436)         cpi     DATA,16                 ; loop
437)         brne    DRAW_BW_WORM_LOOP
438) DRAW_BW_WORM_END:
439) ; done
440)         ret
441) 
442) 
443) 
444) ; blink animation
445) ; input: -
446) ; output: -
447) ; changes: X, FRAME, CNT, DATA, TMP
448) ANIM_BLINK:
449) ; off
450)         ldi     DATA,0                  ; minimum color
451)         rcall   SET_COLOR               ; paint
452)         ldi     TMP,100                 ; show frame 550 ms
453)         rcall   OUT_FRAME_TIME
454) ; on
455)         ldi     DATA,15                 ; maximum color
456)         rcall   SET_COLOR               ; paint
457)         ldi     TMP,100                 ; show frame 550 ms
458)         rcall   OUT_FRAME_TIME
459) ; done
460)         ret
461) 
462) 
463) 
464) ; fade up and down animation
465) ; input: -
466) ; output: -
467) ; changes: X, FRAME, CNT, DATA, TMP
468) ANIM_FADE:
469) ; fade up
470)         ldi     DATA,0                  ; start dark
471) ANIM_FADE_UP:
472)         rcall   SET_COLOR               ; paint
473)         ldi     TMP,10                  ; show frame 55 ms
474)         rcall   OUT_FRAME_TIME
475)         inc     DATA                    ; fade up
476)         cpi     DATA,15                 ; loop until almost full on
477)         brne    ANIM_FADE_UP
478) ; fade down
479) ANIM_FADE_DOWN:
480)         rcall   SET_COLOR               ; paint
481)         ldi     TMP,10                  ; show frame 55 ms
482)         rcall   OUT_FRAME_TIME
483)         dec     DATA                    ; fade up
484)         cpi     DATA,255                ; loop until full off
485)         brne    ANIM_FADE_DOWN
486) ; done
487)         ret
488) 
489) 
490) 
491) ; flicker animation
492) ; input: -
493) ; output: -
494) ; changes: X, FRAME, CNT, DATA, TMP
495) ANIM_FLICKER:
496) ; even pixels
497)         rcall   CLEAR                   ; clear
498)         ldi     DATA,15                 ; even pixels to maximum
499)         ldi     CNT,0
500) ANIM_FLICKER_EVEN:
501)         rcall   SET_PIXEL
502)         subi    CNT,-2                  ; move two pixels
503)         cpi     CNT,42                  ; loop
504)         brlo    ANIM_FLICKER_EVEN
505)         ldi     TMP,40                  ; show frame 220 ms
506)         rcall   OUT_FRAME_TIME
507) ; odd pixels
508)         rcall   CLEAR                   ; clear
509)         ldi     DATA,15                 ; odd pixels to maximum
510)         ldi     CNT,1
511) ANIM_FLICKER_ODD:
512)         rcall   SET_PIXEL
513)         subi    CNT,-2                  ; move two pixels
514)         cpi     CNT,42                  ; loop
515)         brlo    ANIM_FLICKER_ODD
516)         ldi     TMP,40                  ; show frame 220 ms
517)         rcall   OUT_FRAME_TIME
518) ; done
519)         ret
520) 
521) 
522) 
523) ; wobble animation
524) ; input: -
525) ; output: -
526) ; changes: X, FRAME, CNT, DATA, TMP
527) ANIM_WOBBLE:
528) ; even pixels up, odd pixels down
529)         ldi     DATA,0                  ; even pixels start dark
530) ANIM_WOBBLE_UP:
531)         ldi     CNT,0
532) ANIM_WOBBLE_UP_DRAW:
533)         rcall   SET_PIXEL
534)         inc     CNT                     ; next pixel
535)         ldi     TMP,0x0F                ; invert color
536)         eor     DATA,TMP
537)         cpi     CNT,42                  ; loop
538)         brlo    ANIM_WOBBLE_UP_DRAW
539)         ldi     TMP,10                  ; show frame 55 ms
540)         rcall   OUT_FRAME_TIME
541)         inc     DATA                    ; next color: brighter
542)         cpi     DATA,16
543)         brlo    ANIM_WOBBLE_UP
544) ; even pixels down, odd pixels up
545)         ldi     DATA,15                 ; even pixels start full
546) ANIM_WOBBLE_DOWN:
547)         ldi     CNT,0
548) ANIM_WOBBLE_DOWN_DRAW:
549)         rcall   SET_PIXEL
550)         inc     CNT                     ; next pixel
551)         ldi     TMP,0x0F                ; invert color
552)         eor     DATA,TMP
553)         cpi     CNT,42                  ; loop
554)         brlo    ANIM_WOBBLE_DOWN_DRAW
555)         ldi     TMP,10                  ; show frame 55 ms
556)         rcall   OUT_FRAME_TIME
557)         dec     DATA                    ; next color: darker
558)         cpi     DATA,16
559)         brlo    ANIM_WOBBLE_DOWN
560) ; done
561)         ret
562) 
563) 
564) 
565) ; run animation
566) ; input: -
567) ; output: -
568) ; changes: X, FRAME, CNT, DATA, TMP
569) ANIM_RUN:
570)         ldi     CNT,255                 ; start before 1st pixel
571) ANIM_RUN_LOOP:
572)         rcall   CLEAR                   ; clear
573)         ldi     DATA,15                 ; current pixel full on
574)         rcall   SET_PIXEL
575)         ldi     TMP,10                  ; show frame 55 ms
576)         rcall   OUT_FRAME_TIME
577)         inc     CNT                     ; next pixel
578)         cpi     CNT,43                  ; loop until after last pixel
579)         brne    ANIM_RUN_LOOP
580) ; done
581)         ret
582) 
583) 
584) 
585) ; backwards run animation
586) ; input: -
587) ; output: -
588) ; changes: X, FRAME, CNT, DATA, TMP
589) ANIM_BW_RUN:
590)         ldi     CNT,42                  ; start after last pixel
591) ANIM_BW_RUN_LOOP:
592)         rcall   CLEAR                   ; clear
593)         ldi     DATA,15                 ; current pixel full on
594)         rcall   SET_PIXEL
595)         ldi     TMP,10                  ; show frame 55 ms
596)         rcall   OUT_FRAME_TIME
597)         dec     CNT                     ; previous pixel
598)         cpi     CNT,255                 ; loop until before 1st pixel
599)         brne    ANIM_BW_RUN_LOOP
600) ; done
601)         ret
602) 
603) 
604) 
605) ; worm animation
606) ; input: -
607) ; output: -
608) ; changes: X, FRAME, CNT, DATA, TMP
609) ANIM_WORM:
610)         ldi     CNT,255                 ; worm starts before 1st pixel
611) ANIM_WORM_LOOP:
612)         rcall   CLEAR                   ; draw worm
613)         rcall   DRAW_WORM
614)         ldi     TMP,10                  ; show frame 55 ms
615)         rcall   OUT_FRAME_TIME
616)         inc     CNT                     ; advance worm
617)         cpi     CNT,57                  ; loop until has exits
618)         brne    ANIM_WORM_LOOP
619) ; done
620)         ret
621) 
622) 
623) 
624) ; backwards worm animation
625) ; input: -
626) ; output: -
627) ; changes: X, FRAME, CNT, DATA, TMP
628) ANIM_BW_WORM:
629)         ldi     CNT,56                  ; worm starts behind frame
630)                                         ;   head not yet visible
631) ANIM_BW_WORM_LOOP:
632)         rcall   CLEAR                   ; draw backwards worm
633)         rcall   DRAW_BW_WORM
634)         ldi     TMP,10                  ; show frame 55 ms
635)         rcall   OUT_FRAME_TIME
636)         dec     CNT                     ; advance worm backwards
637)         cpi     CNT,254                 ; loop until worm has exited
638)         brne    ANIM_BW_WORM_LOOP
639) ; done
640)         ret
641) 
642) 
643) 
644) ; main program
645) MAIN:
646)         wdr
647) 
648) ; initialization
649) 
650) MAIN_LOOP:
651)         wdr
652) 
653) ; main loop
654) 
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

655)         PL_ANIM ANIM_BLINK,3
656)         PL_ANIM ANIM_WORM,3
657)         PL_ANIM ANIM_FLICKER,10
658)         PL_ANIM ANIM_BW_RUN,3
659)         PL_ANIM ANIM_FADE,2
660)         PL_ANIM ANIM_BW_WORM,3
661)         PL_ANIM ANIM_WOBBLE,5
662)         PL_ANIM ANIM_RUN,3
Stefan Schuermans version 1.0.0

Stefan Schuermans authored 12 years ago

663) 
664) ; bottom of main loop
Stefan Schuermans change firmware to match ne...

Stefan Schuermans authored 12 years ago

665)