aboutsummaryrefslogtreecommitdiffstats
path: root/avr-test2/ledcube.lst
diff options
context:
space:
mode:
Diffstat (limited to 'avr-test2/ledcube.lst')
-rw-r--r--avr-test2/ledcube.lst827
1 files changed, 827 insertions, 0 deletions
diff --git a/avr-test2/ledcube.lst b/avr-test2/ledcube.lst
new file mode 100644
index 0000000..3d7bf39
--- /dev/null
+++ b/avr-test2/ledcube.lst
@@ -0,0 +1,827 @@
+
+ledcube.elf: file format elf32-avr
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 .text 000003d2 00000000 00000000 00000074 2**1
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 1 .bss 00000088 00800060 00800060 00000446 2**0
+ ALLOC
+ 2 .stab 00003f90 00000000 00000000 00000448 2**2
+ CONTENTS, READONLY, DEBUGGING
+ 3 .stabstr 00002106 00000000 00000000 000043d8 2**0
+ CONTENTS, READONLY, DEBUGGING
+
+Disassembly of section .text:
+
+00000000 <__vectors>:
+ 0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end>
+ 2: 2c c0 rjmp .+88 ; 0x5c <__bad_interrupt>
+ 4: 2b c0 rjmp .+86 ; 0x5c <__bad_interrupt>
+ 6: 7f c0 rjmp .+254 ; 0x106 <__vector_3>
+ 8: 29 c0 rjmp .+82 ; 0x5c <__bad_interrupt>
+ a: 28 c0 rjmp .+80 ; 0x5c <__bad_interrupt>
+ c: 27 c0 rjmp .+78 ; 0x5c <__bad_interrupt>
+ e: 26 c0 rjmp .+76 ; 0x5c <__bad_interrupt>
+ 10: 25 c0 rjmp .+74 ; 0x5c <__bad_interrupt>
+ 12: 25 c0 rjmp .+74 ; 0x5e <__vector_9>
+ 14: 23 c0 rjmp .+70 ; 0x5c <__bad_interrupt>
+ 16: 22 c0 rjmp .+68 ; 0x5c <__bad_interrupt>
+ 18: 21 c0 rjmp .+66 ; 0x5c <__bad_interrupt>
+ 1a: 20 c0 rjmp .+64 ; 0x5c <__bad_interrupt>
+ 1c: 1f c0 rjmp .+62 ; 0x5c <__bad_interrupt>
+ 1e: 1e c0 rjmp .+60 ; 0x5c <__bad_interrupt>
+ 20: 1d c0 rjmp .+58 ; 0x5c <__bad_interrupt>
+ 22: 1c c0 rjmp .+56 ; 0x5c <__bad_interrupt>
+ 24: 1b c0 rjmp .+54 ; 0x5c <__bad_interrupt>
+
+00000026 <__ctors_end>:
+ 26: 11 24 eor r1, r1
+ 28: 1f be out 0x3f, r1 ; 63
+ 2a: cf e5 ldi r28, 0x5F ; 95
+ 2c: d4 e0 ldi r29, 0x04 ; 4
+ 2e: de bf out 0x3e, r29 ; 62
+ 30: cd bf out 0x3d, r28 ; 61
+
+00000032 <__do_copy_data>:
+ 32: 10 e0 ldi r17, 0x00 ; 0
+ 34: a0 e6 ldi r26, 0x60 ; 96
+ 36: b0 e0 ldi r27, 0x00 ; 0
+ 38: e2 ed ldi r30, 0xD2 ; 210
+ 3a: f3 e0 ldi r31, 0x03 ; 3
+ 3c: 02 c0 rjmp .+4 ; 0x42 <.do_copy_data_start>
+
+0000003e <.do_copy_data_loop>:
+ 3e: 05 90 lpm r0, Z+
+ 40: 0d 92 st X+, r0
+
+00000042 <.do_copy_data_start>:
+ 42: a0 36 cpi r26, 0x60 ; 96
+ 44: b1 07 cpc r27, r17
+ 46: d9 f7 brne .-10 ; 0x3e <.do_copy_data_loop>
+
+00000048 <__do_clear_bss>:
+ 48: 10 e0 ldi r17, 0x00 ; 0
+ 4a: a0 e6 ldi r26, 0x60 ; 96
+ 4c: b0 e0 ldi r27, 0x00 ; 0
+ 4e: 01 c0 rjmp .+2 ; 0x52 <.do_clear_bss_start>
+
+00000050 <.do_clear_bss_loop>:
+ 50: 1d 92 st X+, r1
+
+00000052 <.do_clear_bss_start>:
+ 52: a8 3e cpi r26, 0xE8 ; 232
+ 54: b1 07 cpc r27, r17
+ 56: e1 f7 brne .-8 ; 0x50 <.do_clear_bss_loop>
+ 58: 06 d1 rcall .+524 ; 0x266 <main>
+ 5a: b9 c1 rjmp .+882 ; 0x3ce <_exit>
+
+0000005c <__bad_interrupt>:
+ 5c: d1 cf rjmp .-94 ; 0x0 <__vectors>
+
+0000005e <__vector_9>:
+//volatile uint32_t timer0_overflow_count = 0;
+volatile uint32_t timer0_millis = 0;
+//static uint8_t timer0_fract = 0;
+
+
+ISR(TIMER0_OVF_vect)
+ 5e: 1f 92 push r1
+ 60: 0f 92 push r0
+ 62: 0f b6 in r0, 0x3f ; 63
+ 64: 0f 92 push r0
+ 66: 11 24 eor r1, r1
+ 68: 2f 93 push r18
+ 6a: 3f 93 push r19
+ 6c: 4f 93 push r20
+ 6e: 5f 93 push r21
+ 70: 8f 93 push r24
+ 72: 9f 93 push r25
+{
+ // copy these to local variables so they can be stored in registers
+ // (volatile variables must be read from memory on every access)
+ uint32_t m = timer0_millis;
+ 74: 20 91 e3 00 lds r18, 0x00E3
+ 78: 30 91 e4 00 lds r19, 0x00E4
+ 7c: 40 91 e5 00 lds r20, 0x00E5
+ 80: 50 91 e6 00 lds r21, 0x00E6
+ //uint8_t f = timer0_fract;
+ static uint8_t timer0_fract = 0;
+
+ m += MILLIS_INC;
+ 84: 2f 5f subi r18, 0xFF ; 255
+ 86: 3f 4f sbci r19, 0xFF ; 255
+ 88: 4f 4f sbci r20, 0xFF ; 255
+ 8a: 5f 4f sbci r21, 0xFF ; 255
+ //f += FRACT_INC;
+ timer0_fract += FRACT_INC;
+ 8c: 90 91 e7 00 lds r25, 0x00E7
+ 90: 89 2f mov r24, r25
+ 92: 8d 5f subi r24, 0xFD ; 253
+ 94: 80 93 e7 00 sts 0x00E7, r24
+ //if (f >= FRACT_MAX) {
+ if (timer0_fract >= FRACT_MAX) {
+ 98: 8d 37 cpi r24, 0x7D ; 125
+ 9a: 38 f0 brcs .+14 ; 0xaa <__vector_9+0x4c>
+ //f -= FRACT_MAX;
+ timer0_fract -= FRACT_MAX;
+ 9c: 9a 57 subi r25, 0x7A ; 122
+ 9e: 90 93 e7 00 sts 0x00E7, r25
+ ++m;
+ a2: 2f 5f subi r18, 0xFF ; 255
+ a4: 3f 4f sbci r19, 0xFF ; 255
+ a6: 4f 4f sbci r20, 0xFF ; 255
+ a8: 5f 4f sbci r21, 0xFF ; 255
+ }
+
+ //timer0_fract = f;
+ timer0_millis = m;
+ aa: 20 93 e3 00 sts 0x00E3, r18
+ ae: 30 93 e4 00 sts 0x00E4, r19
+ b2: 40 93 e5 00 sts 0x00E5, r20
+ b6: 50 93 e6 00 sts 0x00E6, r21
+ //if (timer0_overflow_count & 0x1)
+ //if (m - last_time >= 5) {
+ //debounce_keys(); // called nearly each 2ms (0,002048s)
+ //last_time = m;
+ //}
+}
+ ba: 9f 91 pop r25
+ bc: 8f 91 pop r24
+ be: 5f 91 pop r21
+ c0: 4f 91 pop r20
+ c2: 3f 91 pop r19
+ c4: 2f 91 pop r18
+ c6: 0f 90 pop r0
+ c8: 0f be out 0x3f, r0 ; 63
+ ca: 0f 90 pop r0
+ cc: 1f 90 pop r1
+ ce: 18 95 reti
+
+000000d0 <_Z9clear_ledv>:
+ else {
+ cube[y][z] &= ~(((unsigned char)1) << x);
+ }
+}
+
+void clear_led()
+ d0: 20 e0 ldi r18, 0x00 ; 0
+ d2: 30 e0 ldi r19, 0x00 ; 0
+ d4: 14 c0 rjmp .+40 ; 0xfe <_Z9clear_ledv+0x2e>
+{
+ for (unsigned char z = 0; z < 8; ++z) {
+ for (unsigned char y = 0; y < 8; ++y) {
+ cube[y][z] = 0;
+ d6: fc 01 movw r30, r24
+ d8: 43 e0 ldi r20, 0x03 ; 3
+ da: ee 0f add r30, r30
+ dc: ff 1f adc r31, r31
+ de: 4a 95 dec r20
+ e0: e1 f7 brne .-8 ; 0xda <_Z9clear_ledv+0xa>
+ e2: e2 0f add r30, r18
+ e4: f3 1f adc r31, r19
+ e6: ee 59 subi r30, 0x9E ; 158
+ e8: ff 4f sbci r31, 0xFF ; 255
+ ea: 10 82 st Z, r1
+ ec: 01 96 adiw r24, 0x01 ; 1
+}
+
+void clear_led()
+{
+ for (unsigned char z = 0; z < 8; ++z) {
+ for (unsigned char y = 0; y < 8; ++y) {
+ ee: 88 30 cpi r24, 0x08 ; 8
+ f0: 91 05 cpc r25, r1
+ f2: 89 f7 brne .-30 ; 0xd6 <_Z9clear_ledv+0x6>
+ f4: 2f 5f subi r18, 0xFF ; 255
+ f6: 3f 4f sbci r19, 0xFF ; 255
+ }
+}
+
+void clear_led()
+{
+ for (unsigned char z = 0; z < 8; ++z) {
+ f8: 28 30 cpi r18, 0x08 ; 8
+ fa: 31 05 cpc r19, r1
+ fc: 19 f0 breq .+6 ; 0x104 <_Z9clear_ledv+0x34>
+ fe: 80 e0 ldi r24, 0x00 ; 0
+ 100: 90 e0 ldi r25, 0x00 ; 0
+ 102: e9 cf rjmp .-46 ; 0xd6 <_Z9clear_ledv+0x6>
+ 104: 08 95 ret
+
+00000106 <__vector_3>:
+
+/*****************************************************************************
+ * RENDER
+ *****************************************************************************/
+
+ISR(TIMER2_COMP_vect)
+ 106: 1f 92 push r1
+ 108: 0f 92 push r0
+ 10a: 0f b6 in r0, 0x3f ; 63
+ 10c: 0f 92 push r0
+ 10e: 11 24 eor r1, r1
+ 110: 2f 93 push r18
+ 112: 3f 93 push r19
+ 114: 4f 93 push r20
+ 116: 6f 93 push r22
+ 118: 7f 93 push r23
+ 11a: 8f 93 push r24
+ 11c: 9f 93 push r25
+ 11e: ef 93 push r30
+ 120: ff 93 push r31
+{
+ PORTD &= ~0x08; // layer down, should be done before latch
+ 122: 93 98 cbi 0x12, 3 ; 18
+ PORTD &= ~0x20; // latch low
+ 124: 95 98 cbi 0x12, 5 ; 18
+ unsigned char current_layer_ = current_layer;
+ 126: 40 91 60 00 lds r20, 0x0060
+ 12a: 20 e0 ldi r18, 0x00 ; 0
+ 12c: 30 e0 ldi r19, 0x00 ; 0
+ for (unsigned char j = 0; j < 8; ++j) {
+ unsigned char val = cube[j][current_layer_];
+ 12e: 64 2f mov r22, r20
+ 130: 70 e0 ldi r23, 0x00 ; 0
+ 132: f9 01 movw r30, r18
+ 134: 83 e0 ldi r24, 0x03 ; 3
+ 136: ee 0f add r30, r30
+ 138: ff 1f adc r31, r31
+ 13a: 8a 95 dec r24
+ 13c: e1 f7 brne .-8 ; 0x136 <__vector_3+0x30>
+ 13e: e6 0f add r30, r22
+ 140: f7 1f adc r31, r23
+ 142: ee 59 subi r30, 0x9E ; 158
+ 144: ff 4f sbci r31, 0xFF ; 255
+ 146: 90 81 ld r25, Z
+ PORTD &= ~0x10;
+ 148: 94 98 cbi 0x12, 4 ; 18
+ PORTC = val;
+ 14a: 95 bb out 0x15, r25 ; 21
+ PORTD = (PORTD & ~0xC0) | (val & 0xC0);
+ 14c: 82 b3 in r24, 0x12 ; 18
+ 14e: 90 7c andi r25, 0xC0 ; 192
+ 150: 8f 73 andi r24, 0x3F ; 63
+ 152: 98 2b or r25, r24
+ 154: 92 bb out 0x12, r25 ; 18
+ PORTD |= 0x10;
+ 156: 94 9a sbi 0x12, 4 ; 18
+ 158: 2f 5f subi r18, 0xFF ; 255
+ 15a: 3f 4f sbci r19, 0xFF ; 255
+ISR(TIMER2_COMP_vect)
+{
+ PORTD &= ~0x08; // layer down, should be done before latch
+ PORTD &= ~0x20; // latch low
+ unsigned char current_layer_ = current_layer;
+ for (unsigned char j = 0; j < 8; ++j) {
+ 15c: 28 30 cpi r18, 0x08 ; 8
+ 15e: 31 05 cpc r19, r1
+ 160: 41 f7 brne .-48 ; 0x132 <__vector_3+0x2c>
+ PORTD &= ~0x10;
+ PORTC = val;
+ PORTD = (PORTD & ~0xC0) | (val & 0xC0);
+ PORTD |= 0x10;
+ }
+ PORTB = (PORTB & ~0x07) | current_layer_;
+ 162: 88 b3 in r24, 0x18 ; 24
+ 164: 88 7f andi r24, 0xF8 ; 248
+ 166: 84 2b or r24, r20
+ 168: 88 bb out 0x18, r24 ; 24
+ PORTD |= 0x20;
+ 16a: 95 9a sbi 0x12, 5 ; 18
+ ++current_layer_;
+ current_layer = current_layer_ & 0x07;
+ 16c: 4f 5f subi r20, 0xFF ; 255
+ 16e: 47 70 andi r20, 0x07 ; 7
+ 170: 40 93 60 00 sts 0x0060, r20
+ PORTD |= 0x08; // layer, should be done in the end and must be after latch
+ 174: 93 9a sbi 0x12, 3 ; 18
+}
+ 176: ff 91 pop r31
+ 178: ef 91 pop r30
+ 17a: 9f 91 pop r25
+ 17c: 8f 91 pop r24
+ 17e: 7f 91 pop r23
+ 180: 6f 91 pop r22
+ 182: 4f 91 pop r20
+ 184: 3f 91 pop r19
+ 186: 2f 91 pop r18
+ 188: 0f 90 pop r0
+ 18a: 0f be out 0x3f, r0 ; 63
+ 18c: 0f 90 pop r0
+ 18e: 1f 90 pop r1
+ 190: 18 95 reti
+
+00000192 <rs232>:
+
+void tmp2cube (void);
+// Take input from a computer and load it onto the cube buffer
+void rs232(void)
+ 192: 40 e0 ldi r20, 0x00 ; 0
+ 194: 50 e0 ldi r21, 0x00 ; 0
+ 196: 20 e0 ldi r18, 0x00 ; 0
+ 198: 30 e0 ldi r19, 0x00 ; 0
+ // Should switch state every time the code
+ // is waiting for a byte to be received.
+ //LED_PORT ^= LED_RED;
+
+ // Wait until a byte has been received
+ while ( !(UCSRA & (1<<RXC)) );
+ 19a: 5f 9b sbis 0x0b, 7 ; 11
+ 19c: fe cf rjmp .-4 ; 0x19a <rs232+0x8>
+
+ // Load the received byte from rs232 into a buffer.
+ tempval = UDR;
+ 19e: 8c b1 in r24, 0x0c ; 12
+ 1a0: 90 e0 ldi r25, 0x00 ; 0
+ // are reset to 0. This way the x and y counters are
+ // always the same on the computer and in the cube.
+ // To send an 0xff byte, you have to send it twice!
+
+ // Go into sync escape mode
+ if (tempval == 0xff)
+ 1a2: 8f 3f cpi r24, 0xFF ; 255
+ 1a4: 91 05 cpc r25, r1
+ 1a6: 31 f4 brne .+12 ; 0x1b4 <rs232+0x22>
+ {
+ // Wait for the next byte
+ while ( !(UCSRA & (1<<RXC)) );
+ 1a8: 5f 9b sbis 0x0b, 7 ; 11
+ 1aa: fe cf rjmp .-4 ; 0x1a8 <rs232+0x16>
+ // Get the next byte
+ tempval = UDR;
+ 1ac: 8c b1 in r24, 0x0c ; 12
+ 1ae: 90 e0 ldi r25, 0x00 ; 0
+
+ // Sync signal is received.
+ // Reset x and y counters to 0.
+ if (tempval == 0x00)
+ 1b0: 00 97 sbiw r24, 0x00 ; 0
+ 1b2: 79 f3 breq .-34 ; 0x192 <rs232>
+ }
+
+ if (escape == 0)
+ {
+ // Load data into the current position in the buffer
+ fb[x][y] = tempval;
+ 1b4: fa 01 movw r30, r20
+ 1b6: 93 e0 ldi r25, 0x03 ; 3
+ 1b8: ee 0f add r30, r30
+ 1ba: ff 1f adc r31, r31
+ 1bc: 9a 95 dec r25
+ 1be: e1 f7 brne .-8 ; 0x1b8 <rs232+0x26>
+ 1c0: e2 0f add r30, r18
+ 1c2: f3 1f adc r31, r19
+ 1c4: ed 55 subi r30, 0x5D ; 93
+ 1c6: ff 4f sbci r31, 0xFF ; 255
+ 1c8: 80 83 st Z, r24
+
+ // Check if we have reached the limits of the buffer array.
+ if (y == 7)
+ 1ca: 27 30 cpi r18, 0x07 ; 7
+ 1cc: 31 05 cpc r19, r1
+ 1ce: 41 f4 brne .+16 ; 0x1e0 <rs232+0x4e>
+ {
+ if (x == 7)
+ 1d0: 47 30 cpi r20, 0x07 ; 7
+ 1d2: 51 05 cpc r21, r1
+ 1d4: 11 f4 brne .+4 ; 0x1da <rs232+0x48>
+ {
+ // All data is loaded. Reset both counters
+ y = 0;
+ x = 0;
+ // Copy the data onto the cube.
+ tmp2cube();
+ 1d6: f1 d0 rcall .+482 ; 0x3ba <_Z8tmp2cubev>
+ 1d8: dc cf rjmp .-72 ; 0x192 <rs232>
+ } else
+ {
+ // A layer is loaded, reset y and increment x.
+ x++;
+ 1da: 4f 5f subi r20, 0xFF ; 255
+ 1dc: 5f 4f sbci r21, 0xFF ; 255
+ 1de: db cf rjmp .-74 ; 0x196 <rs232+0x4>
+ y = 0;
+ }
+ } else
+ {
+ // We are in the middle of loading a layer. increment y.
+ y++;
+ 1e0: 2f 5f subi r18, 0xFF ; 255
+ 1e2: 3f 4f sbci r19, 0xFF ; 255
+ 1e4: da cf rjmp .-76 ; 0x19a <rs232+0x8>
+
+000001e6 <_Z7set_ledhhhb>:
+/*****************************************************************************
+ * ACCESSORS
+ *****************************************************************************/
+
+unsigned char inrange(int x, int y, int z);
+void set_led(unsigned char x, unsigned char y, unsigned char z, bool on)
+ 1e6: ef 92 push r14
+ 1e8: ff 92 push r15
+ 1ea: 0f 93 push r16
+ 1ec: 1f 93 push r17
+ 1ee: cf 93 push r28
+ 1f0: df 93 push r29
+ 1f2: f8 2e mov r15, r24
+ 1f4: e2 2e mov r14, r18
+{
+
+ if (!inrange(x, y, z)) {
+ 1f6: 06 2f mov r16, r22
+ 1f8: 10 e0 ldi r17, 0x00 ; 0
+ 1fa: c4 2f mov r28, r20
+ 1fc: d0 e0 ldi r29, 0x00 ; 0
+ 1fe: 90 e0 ldi r25, 0x00 ; 0
+ 200: b8 01 movw r22, r16
+ 202: ae 01 movw r20, r28
+ 204: c6 d0 rcall .+396 ; 0x392 <_Z7inrangeiii>
+ 206: 88 23 and r24, r24
+ 208: 39 f1 breq .+78 ; 0x258 <_Z7set_ledhhhb+0x72>
+ 20a: b8 01 movw r22, r16
+ 20c: 23 e0 ldi r18, 0x03 ; 3
+ 20e: 66 0f add r22, r22
+ 210: 77 1f adc r23, r23
+ 212: 2a 95 dec r18
+ 214: e1 f7 brne .-8 ; 0x20e <_Z7set_ledhhhb+0x28>
+ assert(x >= 0 && x <= 7);
+ assert(y >= 0 && y <= 7);
+ assert(z >= 0 && z <= 7);
+ */
+
+ if (on) {
+ 216: ee 20 and r14, r14
+ 218: 79 f0 breq .+30 ; 0x238 <_Z7set_ledhhhb+0x52>
+ cube[y][z] |= ((unsigned char)1) << x;
+ 21a: fb 01 movw r30, r22
+ 21c: ec 0f add r30, r28
+ 21e: fd 1f adc r31, r29
+ 220: ee 59 subi r30, 0x9E ; 158
+ 222: ff 4f sbci r31, 0xFF ; 255
+ 224: 20 81 ld r18, Z
+ 226: 81 e0 ldi r24, 0x01 ; 1
+ 228: 90 e0 ldi r25, 0x00 ; 0
+ 22a: 02 c0 rjmp .+4 ; 0x230 <_Z7set_ledhhhb+0x4a>
+ 22c: 88 0f add r24, r24
+ 22e: 99 1f adc r25, r25
+ 230: fa 94 dec r15
+ 232: e2 f7 brpl .-8 ; 0x22c <_Z7set_ledhhhb+0x46>
+ 234: 28 2b or r18, r24
+ 236: 0f c0 rjmp .+30 ; 0x256 <_Z7set_ledhhhb+0x70>
+ }
+ else {
+ cube[y][z] &= ~(((unsigned char)1) << x);
+ 238: fb 01 movw r30, r22
+ 23a: ec 0f add r30, r28
+ 23c: fd 1f adc r31, r29
+ 23e: ee 59 subi r30, 0x9E ; 158
+ 240: ff 4f sbci r31, 0xFF ; 255
+ 242: 20 81 ld r18, Z
+ 244: 81 e0 ldi r24, 0x01 ; 1
+ 246: 90 e0 ldi r25, 0x00 ; 0
+ 248: 02 c0 rjmp .+4 ; 0x24e <_Z7set_ledhhhb+0x68>
+ 24a: 88 0f add r24, r24
+ 24c: 99 1f adc r25, r25
+ 24e: fa 94 dec r15
+ 250: e2 f7 brpl .-8 ; 0x24a <_Z7set_ledhhhb+0x64>
+ 252: 80 95 com r24
+ 254: 28 23 and r18, r24
+ 256: 20 83 st Z, r18
+ }
+}
+ 258: df 91 pop r29
+ 25a: cf 91 pop r28
+ 25c: 1f 91 pop r17
+ 25e: 0f 91 pop r16
+ 260: ff 90 pop r15
+ 262: ef 90 pop r14
+ 264: 08 95 ret
+
+00000266 <main>:
+
+/*****************************************************************************
+ * MAIN
+ *****************************************************************************/
+
+int main()
+ 266: df 92 push r13
+ 268: ef 92 push r14
+ 26a: ff 92 push r15
+ 26c: 0f 93 push r16
+ 26e: 1f 93 push r17
+ * Initialisation
+ * =======================================================================
+ */
+
+ //*** init time management
+ TCNT0 = 0; // init timer count to 0
+ 270: 12 be out 0x32, r1 ; 50
+ TCCR0 |= 0x03; // prescaler: 64
+ 272: 83 b7 in r24, 0x33 ; 51
+ 274: 83 60 ori r24, 0x03 ; 3
+ 276: 83 bf out 0x33, r24 ; 51
+ TIMSK |= 0x01; // enable timer 0 overflow interrupt
+ 278: 89 b7 in r24, 0x39 ; 57
+ 27a: 81 60 ori r24, 0x01 ; 1
+ 27c: 89 bf out 0x39, r24 ; 57
+
+ // Timer 2
+ // Frame buffer interrupt
+ // 14745600/128/11 = 10472.72 interrupts per second
+ // 10472.72/8 = 1309 frames per second
+ OCR2 = 11; // interrupt at counter = 10
+ 27e: 8b e0 ldi r24, 0x0B ; 11
+ 280: 83 bd out 0x23, r24 ; 35
+ TCCR2 |= (1 << CS20) | (0 << CS21) | (1 << CS22); // Prescaler = 128.
+ 282: 85 b5 in r24, 0x25 ; 37
+ 284: 85 60 ori r24, 0x05 ; 5
+ 286: 85 bd out 0x25, r24 ; 37
+ TCCR2 |= (1 << WGM21); // CTC mode. Reset counter when OCR2 is reached.
+ 288: 85 b5 in r24, 0x25 ; 37
+ 28a: 88 60 ori r24, 0x08 ; 8
+ 28c: 85 bd out 0x25, r24 ; 37
+ TCNT2 = 0x00; // initial counter value = 0;
+ 28e: 14 bc out 0x24, r1 ; 36
+ TIMSK |= (1 << OCIE2); // Enable CTC interrupt
+ 290: 89 b7 in r24, 0x39 ; 57
+ 292: 80 68 ori r24, 0x80 ; 128
+ 294: 89 bf out 0x39, r24 ; 57
+
+ PORTD = 0;
+ 296: 12 ba out 0x12, r1 ; 18
+ PORTB = 0;
+ 298: 18 ba out 0x18, r1 ; 24
+ PORTC = 0;
+ 29a: 15 ba out 0x15, r1 ; 21
+ DDRD = 0xff;
+ 29c: 8f ef ldi r24, 0xFF ; 255
+ 29e: 81 bb out 0x11, r24 ; 17
+ DDRB = 0xff;
+ 2a0: 87 bb out 0x17, r24 ; 23
+ DDRC = 0xff;
+ 2a2: 84 bb out 0x14, r24 ; 20
+ ////UDR = 0x00; // send an empty byte to indicate powerup.
+
+#if 1
+#define BAUDRATE 38400
+#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)
+ UBRRH = (uint8_t)(BAUD_PRESCALLER>>8);
+ 2a4: 10 bc out 0x20, r1 ; 32
+ UBRRL = (uint8_t)(BAUD_PRESCALLER);
+ 2a6: 89 e1 ldi r24, 0x19 ; 25
+ 2a8: 89 b9 out 0x09, r24 ; 9
+ //UBRRH = (uint8_t)(0);
+ //UBRRL = (uint8_t)(0);
+ UCSRC = (1<<URSEL)|(3<<UCSZ0);
+ 2aa: 86 e8 ldi r24, 0x86 ; 134
+ 2ac: 80 bd out 0x20, r24 ; 32
+ UCSRB = (1<<RXEN)|(1<<TXEN);
+ 2ae: 88 e1 ldi r24, 0x18 ; 24
+ 2b0: 8a b9 out 0x0a, r24 ; 10
+#undef BAUDRATE
+#undef BAUD_PRESCALLER
+#endif
+
+ //*** set interupts
+ sei();
+ 2b2: 78 94 sei
+
+ //while (1) { delay(1000); UDR = 'a'; }
+ //while (1) { UDR = 'a'; }
+ //DDRD |= 0x02; while (1) { delay(1000); PORTD ^= 0x02; }
+
+ rs232();
+ 2b4: 6e df rcall .-292 ; 0x192 <rs232>
+ 2b6: 20 e0 ldi r18, 0x00 ; 0
+ return timer0_millis;
+}
+
+void delay(uint32_t ms)
+{
+ in_wait = true;
+ 2b8: ee 24 eor r14, r14
+ 2ba: e3 94 inc r14
+
+ //clear_led();
+ //delay_ms(1000);
+ for (unsigned char z = 0; z < 8; ++z) {
+ for (unsigned char y = 0; y < 8; ++y) {
+ cube[y][z] = 0xFF;
+ 2bc: dd 24 eor r13, r13
+ 2be: da 94 dec r13
+ 2c0: 14 c0 rjmp .+40 ; 0x2ea <main+0x84>
+
+ //while (1) { delay(1000); UDR = 'a'; }
+ //while (1) { UDR = 'a'; }
+ //DDRD |= 0x02; while (1) { delay(1000); PORTD ^= 0x02; }
+
+ rs232();
+ 2c2: 80 e0 ldi r24, 0x00 ; 0
+ 2c4: 90 e0 ldi r25, 0x00 ; 0
+
+ //clear_led();
+ //delay_ms(1000);
+ for (unsigned char z = 0; z < 8; ++z) {
+ for (unsigned char y = 0; y < 8; ++y) {
+ cube[y][z] = 0xFF;
+ 2c6: 42 2f mov r20, r18
+ 2c8: 50 e0 ldi r21, 0x00 ; 0
+ 2ca: fc 01 movw r30, r24
+ 2cc: 33 e0 ldi r19, 0x03 ; 3
+ 2ce: ee 0f add r30, r30
+ 2d0: ff 1f adc r31, r31
+ 2d2: 3a 95 dec r19
+ 2d4: e1 f7 brne .-8 ; 0x2ce <main+0x68>
+ 2d6: e4 0f add r30, r20
+ 2d8: f5 1f adc r31, r21
+ 2da: ee 59 subi r30, 0x9E ; 158
+ 2dc: ff 4f sbci r31, 0xFF ; 255
+ 2de: d0 82 st Z, r13
+ 2e0: 01 96 adiw r24, 0x01 ; 1
+ for (;;) {
+
+ //clear_led();
+ //delay_ms(1000);
+ for (unsigned char z = 0; z < 8; ++z) {
+ for (unsigned char y = 0; y < 8; ++y) {
+ 2e2: 88 30 cpi r24, 0x08 ; 8
+ 2e4: 91 05 cpc r25, r1
+ 2e6: 89 f7 brne .-30 ; 0x2ca <main+0x64>
+
+ for (;;) {
+
+ //clear_led();
+ //delay_ms(1000);
+ for (unsigned char z = 0; z < 8; ++z) {
+ 2e8: 2f 5f subi r18, 0xFF ; 255
+ 2ea: 28 30 cpi r18, 0x08 ; 8
+ 2ec: 50 f3 brcs .-44 ; 0x2c2 <main+0x5c>
+ return timer0_millis;
+}
+
+void delay(uint32_t ms)
+{
+ in_wait = true;
+ 2ee: e0 92 a2 00 sts 0x00A2, r14
+}
+*/
+
+inline uint32_t millis()
+{
+ return timer0_millis;
+ 2f2: 20 91 e3 00 lds r18, 0x00E3
+ 2f6: 30 91 e4 00 lds r19, 0x00E4
+ 2fa: 40 91 e5 00 lds r20, 0x00E5
+ 2fe: 50 91 e6 00 lds r21, 0x00E6
+ 302: 80 91 e3 00 lds r24, 0x00E3
+ 306: 90 91 e4 00 lds r25, 0x00E4
+ 30a: a0 91 e5 00 lds r26, 0x00E5
+ 30e: b0 91 e6 00 lds r27, 0x00E6
+
+void delay(uint32_t ms)
+{
+ in_wait = true;
+ uint32_t time1 = millis();
+ while ((millis()) - time1 < ms);
+ 312: 82 1b sub r24, r18
+ 314: 93 0b sbc r25, r19
+ 316: a4 0b sbc r26, r20
+ 318: b5 0b sbc r27, r21
+ 31a: 88 58 subi r24, 0x88 ; 136
+ 31c: 93 41 sbci r25, 0x13 ; 19
+ 31e: a0 40 sbci r26, 0x00 ; 0
+ 320: b0 40 sbci r27, 0x00 ; 0
+ 322: 78 f3 brcs .-34 ; 0x302 <main+0x9c>
+ in_wait = false;
+ 324: 10 92 a2 00 sts 0x00A2, r1
+ }
+ }
+ //continue;
+ delay(5000);
+
+ clear_led();
+ 328: d3 de rcall .-602 ; 0xd0 <_Z9clear_ledv>
+ 32a: ff 24 eor r15, r15
+ 32c: 30 c0 rjmp .+96 ; 0x38e <main+0x128>
+ for (char z = 0; z < 8; ++z) {
+ for (char y = 0; y < 8; ++y) {
+ for (char x = 0; x < 8; ++x) {
+ set_led(x, y, z, true);
+ 32e: 81 2f mov r24, r17
+ 330: 60 2f mov r22, r16
+ 332: 4f 2d mov r20, r15
+ 334: 21 e0 ldi r18, 0x01 ; 1
+ 336: 57 df rcall .-338 ; 0x1e6 <_Z7set_ledhhhb>
+ return timer0_millis;
+}
+
+void delay(uint32_t ms)
+{
+ in_wait = true;
+ 338: e0 92 a2 00 sts 0x00A2, r14
+}
+*/
+
+inline uint32_t millis()
+{
+ return timer0_millis;
+ 33c: 20 91 e3 00 lds r18, 0x00E3
+ 340: 30 91 e4 00 lds r19, 0x00E4
+ 344: 40 91 e5 00 lds r20, 0x00E5
+ 348: 50 91 e6 00 lds r21, 0x00E6
+ 34c: 80 91 e3 00 lds r24, 0x00E3
+ 350: 90 91 e4 00 lds r25, 0x00E4
+ 354: a0 91 e5 00 lds r26, 0x00E5
+ 358: b0 91 e6 00 lds r27, 0x00E6
+
+void delay(uint32_t ms)
+{
+ in_wait = true;
+ uint32_t time1 = millis();
+ while ((millis()) - time1 < ms);
+ 35c: 82 1b sub r24, r18
+ 35e: 93 0b sbc r25, r19
+ 360: a4 0b sbc r26, r20
+ 362: b5 0b sbc r27, r21
+ 364: 84 36 cpi r24, 0x64 ; 100
+ 366: 91 05 cpc r25, r1
+ 368: a1 05 cpc r26, r1
+ 36a: b1 05 cpc r27, r1
+ 36c: 78 f3 brcs .-34 ; 0x34c <main+0xe6>
+ in_wait = false;
+ 36e: 10 92 a2 00 sts 0x00A2, r1
+ delay(5000);
+
+ clear_led();
+ for (char z = 0; z < 8; ++z) {
+ for (char y = 0; y < 8; ++y) {
+ for (char x = 0; x < 8; ++x) {
+ 372: 1f 5f subi r17, 0xFF ; 255
+ 374: 18 30 cpi r17, 0x08 ; 8
+ 376: d9 f6 brne .-74 ; 0x32e <main+0xc8>
+ //continue;
+ delay(5000);
+
+ clear_led();
+ for (char z = 0; z < 8; ++z) {
+ for (char y = 0; y < 8; ++y) {
+ 378: 0f 5f subi r16, 0xFF ; 255
+ 37a: 08 30 cpi r16, 0x08 ; 8
+ 37c: 11 f0 breq .+4 ; 0x382 <main+0x11c>
+ 37e: 10 e0 ldi r17, 0x00 ; 0
+ 380: d6 cf rjmp .-84 ; 0x32e <main+0xc8>
+ }
+ //continue;
+ delay(5000);
+
+ clear_led();
+ for (char z = 0; z < 8; ++z) {
+ 382: f3 94 inc r15
+ 384: 88 e0 ldi r24, 0x08 ; 8
+ 386: f8 16 cp r15, r24
+ 388: 11 f4 brne .+4 ; 0x38e <main+0x128>
+ 38a: 20 e0 ldi r18, 0x00 ; 0
+ 38c: 9a cf rjmp .-204 ; 0x2c2 <main+0x5c>
+ 38e: 00 e0 ldi r16, 0x00 ; 0
+ 390: f6 cf rjmp .-20 ; 0x37e <main+0x118>
+
+00000392 <_Z7inrangeiii>:
+ 392: 08 97 sbiw r24, 0x08 ; 8
+ 394: 78 f4 brcc .+30 ; 0x3b4 <_Z7inrangeiii+0x22>
+ 396: 77 fd sbrc r23, 7
+ 398: 0d c0 rjmp .+26 ; 0x3b4 <_Z7inrangeiii+0x22>
+ 39a: 68 30 cpi r22, 0x08 ; 8
+ 39c: 71 05 cpc r23, r1
+ 39e: 54 f4 brge .+20 ; 0x3b4 <_Z7inrangeiii+0x22>
+ 3a0: 57 fd sbrc r21, 7
+ 3a2: 08 c0 rjmp .+16 ; 0x3b4 <_Z7inrangeiii+0x22>
+ 3a4: 90 e0 ldi r25, 0x00 ; 0
+ 3a6: 48 30 cpi r20, 0x08 ; 8
+ 3a8: 51 05 cpc r21, r1
+ 3aa: 0c f0 brlt .+2 ; 0x3ae <_Z7inrangeiii+0x1c>
+ 3ac: 91 e0 ldi r25, 0x01 ; 1
+ 3ae: 81 e0 ldi r24, 0x01 ; 1
+ 3b0: 98 27 eor r25, r24
+ 3b2: 01 c0 rjmp .+2 ; 0x3b6 <_Z7inrangeiii+0x24>
+ 3b4: 90 e0 ldi r25, 0x00 ; 0
+ 3b6: 89 2f mov r24, r25
+ 3b8: 08 95 ret
+
+000003ba <_Z8tmp2cubev>:
+ 3ba: a2 e6 ldi r26, 0x62 ; 98
+ 3bc: b0 e0 ldi r27, 0x00 ; 0
+ 3be: e3 ea ldi r30, 0xA3 ; 163
+ 3c0: f0 e0 ldi r31, 0x00 ; 0
+ 3c2: 80 e4 ldi r24, 0x40 ; 64
+ 3c4: 01 90 ld r0, Z+
+ 3c6: 0d 92 st X+, r0
+ 3c8: 81 50 subi r24, 0x01 ; 1
+ 3ca: e1 f7 brne .-8 ; 0x3c4 <_Z8tmp2cubev+0xa>
+ 3cc: 08 95 ret
+
+000003ce <_exit>:
+ 3ce: f8 94 cli
+
+000003d0 <__stop_program>:
+ 3d0: ff cf rjmp .-2 ; 0x3d0 <__stop_program>