Browse Source

saved between 424 and 478 bytes in the LoL Shield driver, replaced bit

shifting with conditional branches in the framebuffer conversion routine
feature/2015
Christian Kroll 11 years ago
parent
commit
f4d9d55626
  1. 652
      src/borg_hw/borg_hw_lolshield.c

652
src/borg_hw/borg_hw_lolshield.c

@ -292,160 +292,158 @@ static void compose_cycle(uint8_t const cycle, uint8_t plane) {
uint8_t pins_h = sink_h = pgm_read_byte(&sink_h_cycle[cycle]); uint8_t pins_h = sink_h = pgm_read_byte(&sink_h_cycle[cycle]);
// convert framebuffer to LoL Shield cycles on Arduino Mega 1280/2560 // convert framebuffer to LoL Shield cycles on Arduino Mega 1280/2560
// (I could have done this with a lookup table, but that would be slower as
// non-constant bit shifts are quite expensive on AVR)
// NOTE: (0,0) is UPPER RIGHT in the Borgware realm // NOTE: (0,0) is UPPER RIGHT in the Borgware realm
if (plane < NUMPLANE) { if (plane < NUMPLANE) {
switch(cycle) { switch(cycle) {
case 0: case 0:
pins_b |= (0x02u & p[ 0]) << 6; // x= 1, y= 0, mapped pin D13 if (0x02u & p[ 0]) pins_b |= 0x80; // x= 1, y= 0, mapped pin D13
pins_b |= (0x02u & p[ 2]) << 5; // x= 1, y= 1, mapped pin D12 if (0x02u & p[ 2]) pins_b |= 0x40; // x= 1, y= 1, mapped pin D12
pins_b |= (0x02u & p[ 4]) << 4; // x= 1, y= 2, mapped pin D11 if (0x02u & p[ 4]) pins_b |= 0x20; // x= 1, y= 2, mapped pin D11
pins_b |= (0x02u & p[ 6]) << 3; // x= 1, y= 3, mapped pin D10 if (0x02u & p[ 6]) pins_b |= 0x10; // x= 1, y= 3, mapped pin D10
pins_e |= (0x02u & p[16]) << 2; // x= 1, y= 8, mapped pin D5 if (0x02u & p[ 8]) pins_h |= 0x40; // x= 1, y= 4, mapped pin D9
pins_h |= (0x02u & p[ 8]) << 5; // x= 1, y= 4, mapped pin D9 if (0x02u & p[10]) pins_h |= 0x20; // x= 1, y= 5, mapped pin D8
pins_h |= (0x02u & p[10]) << 4; // x= 1, y= 5, mapped pin D8 if (0x02u & p[12]) pins_h |= 0x10; // x= 1, y= 6, mapped pin D7
pins_h |= (0x02u & p[12]) << 3; // x= 1, y= 6, mapped pin D7 if (0x02u & p[14]) pins_h |= 0x08; // x= 1, y= 7, mapped pin D6
pins_h |= (0x02u & p[14]) << 2; // x= 1, y= 7, mapped pin D6 if (0x02u & p[16]) pins_e |= 0x08; // x= 1, y= 8, mapped pin D5
break; break;
case 1: case 1:
pins_b |= (0x08u & p[ 0]) << 4; // x= 3, y= 0, mapped pin D13 if (0x08u & p[ 0]) pins_b |= 0x80; // x= 3, y= 0, mapped pin D13
pins_b |= (0x08u & p[ 2]) << 3; // x= 3, y= 1, mapped pin D12 if (0x08u & p[ 2]) pins_b |= 0x40; // x= 3, y= 1, mapped pin D12
pins_b |= (0x08u & p[ 4]) << 2; // x= 3, y= 2, mapped pin D11 if (0x08u & p[ 4]) pins_b |= 0x20; // x= 3, y= 2, mapped pin D11
pins_b |= (0x08u & p[ 6]) << 1; // x= 3, y= 3, mapped pin D10 if (0x08u & p[ 6]) pins_b |= 0x10; // x= 3, y= 3, mapped pin D10
if (0x08u & p[ 8]) pins_h |= 0x40; // x= 3, y= 4, mapped pin D9
if (0x08u & p[10]) pins_h |= 0x20; // x= 3, y= 5, mapped pin D8
if (0x08u & p[12]) pins_h |= 0x10; // x= 3, y= 6, mapped pin D7
pins_e |= (0x08u & p[16]); // x= 3, y= 8, mapped pin D5 pins_e |= (0x08u & p[16]); // x= 3, y= 8, mapped pin D5
pins_h |= (0x08u & p[ 8]) << 3; // x= 3, y= 4, mapped pin D9
pins_h |= (0x08u & p[10]) << 2; // x= 3, y= 5, mapped pin D8
pins_h |= (0x08u & p[12]) << 1; // x= 3, y= 6, mapped pin D7
pins_h |= (0x08u & p[14]); // x= 3, y= 7, mapped pin D6 pins_h |= (0x08u & p[14]); // x= 3, y= 7, mapped pin D6
break; break;
case 2: case 2:
pins_b |= (0x20u & p[ 0]) << 2; // x= 5, y= 0, mapped pin D13 if (0x20u & p[ 0]) pins_b |= 0x80; // x= 5, y= 0, mapped pin D13
pins_b |= (0x20u & p[ 2]) << 1; // x= 5, y= 1, mapped pin D12 if (0x20u & p[ 2]) pins_b |= 0x40; // x= 5, y= 1, mapped pin D12
if (0x20u & p[ 6]) pins_b |= 0x10; // x= 5, y= 3, mapped pin D10
if (0x20u & p[ 8]) pins_h |= 0x40; // x= 5, y= 4, mapped pin D9
if (0x20u & p[12]) pins_h |= 0x10; // x= 5, y= 6, mapped pin D7
if (0x20u & p[14]) pins_h |= 0x08; // x= 5, y= 7, mapped pin D6
if (0x20u & p[16]) pins_e |= 0x08; // x= 5, y= 8, mapped pin D5
pins_b |= (0x20u & p[ 4]); // x= 5, y= 2, mapped pin D11 pins_b |= (0x20u & p[ 4]); // x= 5, y= 2, mapped pin D11
pins_b |= (0x20u & p[ 6]) >> 1; // x= 5, y= 3, mapped pin D10
pins_e |= (0x20u & p[16]) >> 2; // x= 5, y= 8, mapped pin D5
pins_h |= (0x20u & p[ 8]) << 1; // x= 5, y= 4, mapped pin D9
pins_h |= (0x20u & p[10]); // x= 5, y= 5, mapped pin D8 pins_h |= (0x20u & p[10]); // x= 5, y= 5, mapped pin D8
pins_h |= (0x20u & p[12]) >> 1; // x= 5, y= 6, mapped pin D7
pins_h |= (0x20u & p[14]) >> 2; // x= 5, y= 7, mapped pin D6
break; break;
case 3: case 3:
pins_b |= (0x20u & p[ 1]) << 2; // x=13, y= 0, mapped pin D13 if (0x01u & p[16]) pins_e |= 0x10; // x= 0, y= 8, mapped pin D2
pins_b |= (0x20u & p[ 3]) << 1; // x=13, y= 1, mapped pin D12 if (0x04u & p[16]) pins_e |= 0x20; // x= 2, y= 8, mapped pin D3
if (0x10u & p[16]) pins_g |= 0x20; // x= 4, y= 8, mapped pin D4
if (0x20u & p[ 1]) pins_b |= 0x80; // x=13, y= 0, mapped pin D13
if (0x20u & p[ 3]) pins_b |= 0x40; // x=13, y= 1, mapped pin D12
if (0x20u & p[ 7]) pins_b |= 0x10; // x=13, y= 3, mapped pin D10
if (0x20u & p[ 9]) pins_h |= 0x40; // x=13, y= 4, mapped pin D9
if (0x20u & p[13]) pins_h |= 0x10; // x=13, y= 6, mapped pin D7
if (0x20u & p[15]) pins_h |= 0x08; // x=13, y= 7, mapped pin D6
pins_b |= (0x20u & p[ 5]); // x=13, y= 2, mapped pin D11 pins_b |= (0x20u & p[ 5]); // x=13, y= 2, mapped pin D11
pins_b |= (0x20u & p[ 7]) >> 1; // x=13, y= 3, mapped pin D10
pins_e |= (0x01u & p[16]) << 4; // x= 0, y= 8, mapped pin D2
pins_e |= (0x04u & p[16]) << 3; // x= 2, y= 8, mapped pin D3
pins_g |= (0x10u & p[16]) << 1; // x= 4, y= 8, mapped pin D4
pins_h |= (0x20u & p[ 9]) << 1; // x=13, y= 4, mapped pin D9
pins_h |= (0x20u & p[11]); // x=13, y= 5, mapped pin D8 pins_h |= (0x20u & p[11]); // x=13, y= 5, mapped pin D8
pins_h |= (0x20u & p[13]) >> 1; // x=13, y= 6, mapped pin D7
pins_h |= (0x20u & p[15]) >> 2; // x=13, y= 7, mapped pin D6
break; break;
case 4: case 4:
pins_b |= (0x10u & p[ 1]) << 3; // x=12, y= 0, mapped pin D13 if (0x01u & p[14]) pins_e |= 0x10; // x= 0, y= 7, mapped pin D2
pins_b |= (0x10u & p[ 3]) << 2; // x=12, y= 1, mapped pin D12 if (0x04u & p[14]) pins_e |= 0x20; // x= 2, y= 7, mapped pin D3
pins_b |= (0x10u & p[ 5]) << 1; // x=12, y= 2, mapped pin D11 if (0x10u & p[ 1]) pins_b |= 0x80; // x=12, y= 0, mapped pin D13
if (0x10u & p[ 3]) pins_b |= 0x40; // x=12, y= 1, mapped pin D12
if (0x10u & p[ 5]) pins_b |= 0x20; // x=12, y= 2, mapped pin D11
if (0x10u & p[ 9]) pins_h |= 0x40; // x=12, y= 4, mapped pin D9
if (0x10u & p[11]) pins_h |= 0x20; // x=12, y= 5, mapped pin D8
if (0x10u & p[14]) pins_g |= 0x20; // x= 4, y= 7, mapped pin D4
if (0x20u & p[17]) pins_e |= 0x08; // x=13, y= 8, mapped pin D5
pins_b |= (0x10u & p[ 7]); // x=12, y= 3, mapped pin D10 pins_b |= (0x10u & p[ 7]); // x=12, y= 3, mapped pin D10
pins_e |= (0x01u & p[14]) << 4; // x= 0, y= 7, mapped pin D2
pins_e |= (0x04u & p[14]) << 3; // x= 2, y= 7, mapped pin D3
pins_e |= (0x20u & p[17]) >> 2; // x=13, y= 8, mapped pin D5
pins_g |= (0x10u & p[14]) << 1; // x= 4, y= 7, mapped pin D4
pins_h |= (0x10u & p[ 9]) << 2; // x=12, y= 4, mapped pin D9
pins_h |= (0x10u & p[11]) << 1; // x=12, y= 5, mapped pin D8
pins_h |= (0x10u & p[13]); // x=12, y= 6, mapped pin D7 pins_h |= (0x10u & p[13]); // x=12, y= 6, mapped pin D7
break; break;
case 5: case 5:
pins_b |= (0x08u & p[ 1]) << 4; // x=11, y= 0, mapped pin D13 if (0x01u & p[12]) pins_e |= 0x10; // x= 0, y= 6, mapped pin D2
pins_b |= (0x08u & p[ 3]) << 3; // x=11, y= 1, mapped pin D12 if (0x04u & p[12]) pins_e |= 0x20; // x= 2, y= 6, mapped pin D3
pins_b |= (0x08u & p[ 5]) << 2; // x=11, y= 2, mapped pin D11 if (0x08u & p[ 1]) pins_b |= 0x80; // x=11, y= 0, mapped pin D13
pins_b |= (0x08u & p[ 7]) << 1; // x=11, y= 3, mapped pin D10 if (0x08u & p[ 3]) pins_b |= 0x40; // x=11, y= 1, mapped pin D12
pins_e |= (0x01u & p[12]) << 4; // x= 0, y= 6, mapped pin D2 if (0x08u & p[ 5]) pins_b |= 0x20; // x=11, y= 2, mapped pin D11
pins_e |= (0x04u & p[12]) << 3; // x= 2, y= 6, mapped pin D3 if (0x08u & p[ 7]) pins_b |= 0x10; // x=11, y= 3, mapped pin D10
pins_e |= (0x10u & p[17]) >> 1; // x=12, y= 8, mapped pin D5 if (0x08u & p[ 9]) pins_h |= 0x40; // x=11, y= 4, mapped pin D9
pins_g |= (0x10u & p[12]) << 1; // x= 4, y= 6, mapped pin D4 if (0x08u & p[11]) pins_h |= 0x20; // x=11, y= 5, mapped pin D8
pins_h |= (0x08u & p[ 9]) << 3; // x=11, y= 4, mapped pin D9 if (0x10u & p[12]) pins_g |= 0x20; // x= 4, y= 6, mapped pin D4
pins_h |= (0x08u & p[11]) << 2; // x=11, y= 5, mapped pin D8 if (0x10u & p[15]) pins_h |= 0x08; // x=12, y= 7, mapped pin D6
pins_h |= (0x10u & p[15]) >> 1; // x=12, y= 7, mapped pin D6 if (0x10u & p[17]) pins_e |= 0x08; // x=12, y= 8, mapped pin D5
break; break;
case 6: case 6:
pins_b |= (0x04u & p[ 1]) << 5; // x=10, y= 0, mapped pin D13 if (0x01u & p[10]) pins_e |= 0x10; // x= 0, y= 5, mapped pin D2
pins_b |= (0x04u & p[ 3]) << 4; // x=10, y= 1, mapped pin D12 if (0x04u & p[ 1]) pins_b |= 0x80; // x=10, y= 0, mapped pin D13
pins_b |= (0x04u & p[ 5]) << 3; // x=10, y= 2, mapped pin D11 if (0x04u & p[ 3]) pins_b |= 0x40; // x=10, y= 1, mapped pin D12
pins_b |= (0x04u & p[ 7]) << 2; // x=10, y= 3, mapped pin D10 if (0x04u & p[ 5]) pins_b |= 0x20; // x=10, y= 2, mapped pin D11
pins_e |= (0x01u & p[10]) << 4; // x= 0, y= 5, mapped pin D2 if (0x04u & p[ 7]) pins_b |= 0x10; // x=10, y= 3, mapped pin D10
pins_e |= (0x04u & p[10]) << 3; // x= 2, y= 5, mapped pin D3 if (0x04u & p[ 9]) pins_h |= 0x40; // x=10, y= 4, mapped pin D9
if (0x04u & p[10]) pins_e |= 0x20; // x= 2, y= 5, mapped pin D3
if (0x08u & p[13]) pins_h |= 0x10; // x=11, y= 6, mapped pin D7
if (0x10u & p[10]) pins_g |= 0x20; // x= 4, y= 5, mapped pin D4
pins_e |= (0x08u & p[17]); // x=11, y= 8, mapped pin D5 pins_e |= (0x08u & p[17]); // x=11, y= 8, mapped pin D5
pins_g |= (0x10u & p[10]) << 1; // x= 4, y= 5, mapped pin D4
pins_h |= (0x04u & p[ 9]) << 4; // x=10, y= 4, mapped pin D9
pins_h |= (0x08u & p[13]) << 1; // x=11, y= 6, mapped pin D7
pins_h |= (0x08u & p[15]); // x=11, y= 7, mapped pin D6 pins_h |= (0x08u & p[15]); // x=11, y= 7, mapped pin D6
break; break;
case 7: case 7:
pins_b |= (0x02u & p[ 1]) << 6; // x= 9, y= 0, mapped pin D13 if (0x01u & p[ 8]) pins_e |= 0x10; // x= 0, y= 4, mapped pin D2
pins_b |= (0x02u & p[ 3]) << 5; // x= 9, y= 1, mapped pin D12 if (0x02u & p[ 1]) pins_b |= 0x80; // x= 9, y= 0, mapped pin D13
pins_b |= (0x02u & p[ 5]) << 4; // x= 9, y= 2, mapped pin D11 if (0x02u & p[ 3]) pins_b |= 0x40; // x= 9, y= 1, mapped pin D12
pins_b |= (0x02u & p[ 7]) << 3; // x= 9, y= 3, mapped pin D10 if (0x02u & p[ 5]) pins_b |= 0x20; // x= 9, y= 2, mapped pin D11
pins_e |= (0x01u & p[ 8]) << 4; // x= 0, y= 4, mapped pin D2 if (0x02u & p[ 7]) pins_b |= 0x10; // x= 9, y= 3, mapped pin D10
pins_e |= (0x04u & p[ 8]) << 3; // x= 2, y= 4, mapped pin D3 if (0x04u & p[ 8]) pins_e |= 0x20; // x= 2, y= 4, mapped pin D3
pins_e |= (0x04u & p[17]) << 1; // x=10, y= 8, mapped pin D5 if (0x04u & p[11]) pins_h |= 0x20; // x=10, y= 5, mapped pin D8
pins_g |= (0x10u & p[ 8]) << 1; // x= 4, y= 4, mapped pin D4 if (0x04u & p[13]) pins_h |= 0x10; // x=10, y= 6, mapped pin D7
pins_h |= (0x04u & p[11]) << 3; // x=10, y= 5, mapped pin D8 if (0x04u & p[15]) pins_h |= 0x08; // x=10, y= 7, mapped pin D6
pins_h |= (0x04u & p[13]) << 2; // x=10, y= 6, mapped pin D7 if (0x04u & p[17]) pins_e |= 0x08; // x=10, y= 8, mapped pin D5
pins_h |= (0x04u & p[15]) << 1; // x=10, y= 7, mapped pin D6 if (0x10u & p[ 8]) pins_g |= 0x20; // x= 4, y= 4, mapped pin D4
break; break;
case 8: case 8:
pins_b |= (0x01u & p[ 1]) << 7; // x= 8, y= 0, mapped pin D13 if (0x01u & p[ 1]) pins_b |= 0x80; // x= 8, y= 0, mapped pin D13
pins_b |= (0x01u & p[ 3]) << 6; // x= 8, y= 1, mapped pin D12 if (0x01u & p[ 3]) pins_b |= 0x40; // x= 8, y= 1, mapped pin D12
pins_b |= (0x01u & p[ 5]) << 5; // x= 8, y= 2, mapped pin D11 if (0x01u & p[ 5]) pins_b |= 0x20; // x= 8, y= 2, mapped pin D11
pins_e |= (0x01u & p[ 6]) << 4; // x= 0, y= 3, mapped pin D2 if (0x01u & p[ 6]) pins_e |= 0x10; // x= 0, y= 3, mapped pin D2
pins_e |= (0x02u & p[17]) << 2; // x= 9, y= 8, mapped pin D5 if (0x02u & p[ 9]) pins_h |= 0x40; // x= 9, y= 4, mapped pin D9
pins_e |= (0x04u & p[ 6]) << 3; // x= 2, y= 3, mapped pin D3 if (0x02u & p[11]) pins_h |= 0x20; // x= 9, y= 5, mapped pin D8
pins_g |= (0x10u & p[ 6]) << 1; // x= 4, y= 3, mapped pin D4 if (0x02u & p[13]) pins_h |= 0x10; // x= 9, y= 6, mapped pin D7
pins_h |= (0x02u & p[ 9]) << 5; // x= 9, y= 4, mapped pin D9 if (0x02u & p[15]) pins_h |= 0x08; // x= 9, y= 7, mapped pin D6
pins_h |= (0x02u & p[11]) << 4; // x= 9, y= 5, mapped pin D8 if (0x02u & p[17]) pins_e |= 0x08; // x= 9, y= 8, mapped pin D5
pins_h |= (0x02u & p[13]) << 3; // x= 9, y= 6, mapped pin D7 if (0x04u & p[ 6]) pins_e |= 0x20; // x= 2, y= 3, mapped pin D3
pins_h |= (0x02u & p[15]) << 2; // x= 9, y= 7, mapped pin D6 if (0x10u & p[ 6]) pins_g |= 0x20; // x= 4, y= 3, mapped pin D4
break; break;
case 9: case 9:
pins_b |= (0x01u & p[ 7]) << 4; // x= 8, y= 3, mapped pin D10 if (0x01u & p[ 4]) pins_e |= 0x10; // x= 0, y= 2, mapped pin D2
if (0x01u & p[ 7]) pins_b |= 0x10; // x= 8, y= 3, mapped pin D10
if (0x01u & p[ 9]) pins_h |= 0x40; // x= 8, y= 4, mapped pin D9
if (0x01u & p[11]) pins_h |= 0x20; // x= 8, y= 5, mapped pin D8
if (0x01u & p[13]) pins_h |= 0x10; // x= 8, y= 6, mapped pin D7
if (0x01u & p[15]) pins_h |= 0x08; // x= 8, y= 7, mapped pin D6
if (0x01u & p[17]) pins_e |= 0x08; // x= 8, y= 8, mapped pin D5
if (0x04u & p[ 4]) pins_e |= 0x20; // x= 2, y= 2, mapped pin D3
if (0x10u & p[ 4]) pins_g |= 0x20; // x= 4, y= 2, mapped pin D4
if (0x80u & p[ 2]) pins_b |= 0x40; // x= 7, y= 1, mapped pin D12
pins_b |= (0x80u & p[ 0]); // x= 7, y= 0, mapped pin D13 pins_b |= (0x80u & p[ 0]); // x= 7, y= 0, mapped pin D13
pins_b |= (0x80u & p[ 2]) >> 1; // x= 7, y= 1, mapped pin D12
pins_e |= (0x01u & p[ 4]) << 4; // x= 0, y= 2, mapped pin D2
pins_e |= (0x01u & p[17]) << 3; // x= 8, y= 8, mapped pin D5
pins_e |= (0x04u & p[ 4]) << 3; // x= 2, y= 2, mapped pin D3
pins_g |= (0x10u & p[ 4]) << 1; // x= 4, y= 2, mapped pin D4
pins_h |= (0x01u & p[ 9]) << 6; // x= 8, y= 4, mapped pin D9
pins_h |= (0x01u & p[11]) << 5; // x= 8, y= 5, mapped pin D8
pins_h |= (0x01u & p[13]) << 4; // x= 8, y= 6, mapped pin D7
pins_h |= (0x01u & p[15]) << 3; // x= 8, y= 7, mapped pin D6
break; break;
case 10: case 10:
pins_b |= (0x40u & p[ 0]) << 1; // x= 6, y= 0, mapped pin D13 if (0x01u & p[ 2]) pins_e |= 0x10; // x= 0, y= 1, mapped pin D2
pins_b |= (0x80u & p[ 4]) >> 2; // x= 7, y= 2, mapped pin D11 if (0x04u & p[ 2]) pins_e |= 0x20; // x= 2, y= 1, mapped pin D3
pins_b |= (0x80u & p[ 6]) >> 3; // x= 7, y= 3, mapped pin D10 if (0x10u & p[ 2]) pins_g |= 0x20; // x= 4, y= 1, mapped pin D4
pins_e |= (0x01u & p[ 2]) << 4; // x= 0, y= 1, mapped pin D2 if (0x40u & p[ 0]) pins_b |= 0x80; // x= 6, y= 0, mapped pin D13
pins_e |= (0x04u & p[ 2]) << 3; // x= 2, y= 1, mapped pin D3 if (0x80u & p[ 4]) pins_b |= 0x20; // x= 7, y= 2, mapped pin D11
pins_e |= (0x80u & p[16]) >> 4; // x= 7, y= 8, mapped pin D5 if (0x80u & p[ 6]) pins_b |= 0x10; // x= 7, y= 3, mapped pin D10
pins_g |= (0x10u & p[ 2]) << 1; // x= 4, y= 1, mapped pin D4 if (0x80u & p[ 8]) pins_h |= 0x40; // x= 7, y= 4, mapped pin D9
pins_h |= (0x80u & p[ 8]) >> 1; // x= 7, y= 4, mapped pin D9 if (0x80u & p[10]) pins_h |= 0x20; // x= 7, y= 5, mapped pin D8
pins_h |= (0x80u & p[10]) >> 2; // x= 7, y= 5, mapped pin D8 if (0x80u & p[12]) pins_h |= 0x10; // x= 7, y= 6, mapped pin D7
pins_h |= (0x80u & p[12]) >> 3; // x= 7, y= 6, mapped pin D7 if (0x80u & p[14]) pins_h |= 0x08; // x= 7, y= 7, mapped pin D6
pins_h |= (0x80u & p[14]) >> 4; // x= 7, y= 7, mapped pin D6 if (0x80u & p[16]) pins_e |= 0x08; // x= 7, y= 8, mapped pin D5
break; break;
case 11: case 11:
if (0x01u & p[ 0]) pins_e |= 0x10; // x= 0, y= 0, mapped pin D2
if (0x04u & p[ 0]) pins_e |= 0x20; // x= 2, y= 0, mapped pin D3
if (0x10u & p[ 0]) pins_g |= 0x20; // x= 4, y= 0, mapped pin D4
if (0x40u & p[ 4]) pins_b |= 0x20; // x= 6, y= 2, mapped pin D11
if (0x40u & p[ 6]) pins_b |= 0x10; // x= 6, y= 3, mapped pin D10
if (0x40u & p[10]) pins_h |= 0x20; // x= 6, y= 5, mapped pin D8
if (0x40u & p[12]) pins_h |= 0x10; // x= 6, y= 6, mapped pin D7
if (0x40u & p[14]) pins_h |= 0x08; // x= 6, y= 7, mapped pin D6
if (0x40u & p[16]) pins_e |= 0x08; // x= 6, y= 8, mapped pin D5
pins_b |= (0x40u & p[ 2]); // x= 6, y= 1, mapped pin D12 pins_b |= (0x40u & p[ 2]); // x= 6, y= 1, mapped pin D12
pins_b |= (0x40u & p[ 4]) >> 1; // x= 6, y= 2, mapped pin D11
pins_b |= (0x40u & p[ 6]) >> 2; // x= 6, y= 3, mapped pin D10
pins_e |= (0x01u & p[ 0]) << 4; // x= 0, y= 0, mapped pin D2
pins_e |= (0x04u & p[ 0]) << 3; // x= 2, y= 0, mapped pin D3
pins_e |= (0x40u & p[16]) >> 3; // x= 6, y= 8, mapped pin D5
pins_g |= (0x10u & p[ 0]) << 1; // x= 4, y= 0, mapped pin D4
pins_h |= (0x40u & p[ 8]); // x= 6, y= 4, mapped pin D9 pins_h |= (0x40u & p[ 8]); // x= 6, y= 4, mapped pin D9
pins_h |= (0x40u & p[10]) >> 1; // x= 6, y= 5, mapped pin D8
pins_h |= (0x40u & p[12]) >> 2; // x= 6, y= 6, mapped pin D7
pins_h |= (0x40u & p[14]) >> 3; // x= 6, y= 7, mapped pin D6
break; break;
} }
} }
@ -501,153 +499,153 @@ static void compose_cycle(uint8_t const cycle, uint8_t plane) {
if (plane < NUMPLANE) { if (plane < NUMPLANE) {
switch(cycle) { switch(cycle) {
case 0: case 0:
pins_b |= (0x02u & p[ 4]) << 6; // x= 1, y= 2, mapped pin D11 if (0x02u & p[ 0]) pins_c |= 0x80; // x= 1, y= 0, mapped pin D13
pins_b |= (0x02u & p[ 6]) << 5; // x= 1, y= 3, mapped pin D10 if (0x02u & p[ 2]) pins_d |= 0x40; // x= 1, y= 1, mapped pin D12
pins_b |= (0x02u & p[ 8]) << 4; // x= 1, y= 4, mapped pin D9 if (0x02u & p[ 4]) pins_b |= 0x80; // x= 1, y= 2, mapped pin D11
pins_b |= (0x02u & p[10]) << 3; // x= 1, y= 5, mapped pin D8 if (0x02u & p[ 6]) pins_b |= 0x40; // x= 1, y= 3, mapped pin D10
pins_c |= (0x02u & p[ 0]) << 6; // x= 1, y= 0, mapped pin D13 if (0x02u & p[ 8]) pins_b |= 0x20; // x= 1, y= 4, mapped pin D9
pins_c |= (0x02u & p[16]) << 5; // x= 1, y= 8, mapped pin D5 if (0x02u & p[10]) pins_b |= 0x10; // x= 1, y= 5, mapped pin D8
pins_d |= (0x02u & p[ 2]) << 5; // x= 1, y= 1, mapped pin D12 if (0x02u & p[12]) pins_e |= 0x40; // x= 1, y= 6, mapped pin D7
pins_d |= (0x02u & p[14]) << 6; // x= 1, y= 7, mapped pin D6 if (0x02u & p[14]) pins_d |= 0x80; // x= 1, y= 7, mapped pin D6
pins_e |= (0x02u & p[12]) << 5; // x= 1, y= 6, mapped pin D7 if (0x02u & p[16]) pins_c |= 0x40; // x= 1, y= 8, mapped pin D5
break; break;
case 1: case 1:
pins_b |= (0x08u & p[ 4]) << 4; // x= 3, y= 2, mapped pin D11 if (0x08u & p[ 0]) pins_c |= 0x80; // x= 3, y= 0, mapped pin D13
pins_b |= (0x08u & p[ 6]) << 3; // x= 3, y= 3, mapped pin D10 if (0x08u & p[ 2]) pins_d |= 0x40; // x= 3, y= 1, mapped pin D12
pins_b |= (0x08u & p[ 8]) << 2; // x= 3, y= 4, mapped pin D9 if (0x08u & p[ 4]) pins_b |= 0x80; // x= 3, y= 2, mapped pin D11
pins_b |= (0x08u & p[10]) << 1; // x= 3, y= 5, mapped pin D8 if (0x08u & p[ 6]) pins_b |= 0x40; // x= 3, y= 3, mapped pin D10
pins_c |= (0x08u & p[ 0]) << 4; // x= 3, y= 0, mapped pin D13 if (0x08u & p[ 8]) pins_b |= 0x20; // x= 3, y= 4, mapped pin D9
pins_c |= (0x08u & p[16]) << 3; // x= 3, y= 8, mapped pin D5 if (0x08u & p[10]) pins_b |= 0x10; // x= 3, y= 5, mapped pin D8
pins_d |= (0x08u & p[ 2]) << 3; // x= 3, y= 1, mapped pin D12 if (0x08u & p[12]) pins_e |= 0x40; // x= 3, y= 6, mapped pin D7
pins_d |= (0x08u & p[14]) << 4; // x= 3, y= 7, mapped pin D6 if (0x08u & p[14]) pins_d |= 0x80; // x= 3, y= 7, mapped pin D6
pins_e |= (0x08u & p[12]) << 3; // x= 3, y= 6, mapped pin D7 if (0x08u & p[16]) pins_c |= 0x40; // x= 3, y= 8, mapped pin D5
break; break;
case 2: case 2:
pins_b |= (0x20u & p[ 4]) << 2; // x= 5, y= 2, mapped pin D11 if (0x20u & p[ 0]) pins_c |= 0x80; // x= 5, y= 0, mapped pin D13
pins_b |= (0x20u & p[ 6]) << 1; // x= 5, y= 3, mapped pin D10 if (0x20u & p[ 2]) pins_d |= 0x40; // x= 5, y= 1, mapped pin D12
if (0x20u & p[ 4]) pins_b |= 0x80; // x= 5, y= 2, mapped pin D11
if (0x20u & p[ 6]) pins_b |= 0x40; // x= 5, y= 3, mapped pin D10
if (0x20u & p[10]) pins_b |= 0x10; // x= 5, y= 5, mapped pin D8
if (0x20u & p[12]) pins_e |= 0x40; // x= 5, y= 6, mapped pin D7
if (0x20u & p[14]) pins_d |= 0x80; // x= 5, y= 7, mapped pin D6
if (0x20u & p[16]) pins_c |= 0x40; // x= 5, y= 8, mapped pin D5
pins_b |= (0x20u & p[ 8]); // x= 5, y= 4, mapped pin D9 pins_b |= (0x20u & p[ 8]); // x= 5, y= 4, mapped pin D9
pins_b |= (0x20u & p[10]) >> 1; // x= 5, y= 5, mapped pin D8
pins_c |= (0x20u & p[ 0]) << 2; // x= 5, y= 0, mapped pin D13
pins_c |= (0x20u & p[16]) << 1; // x= 5, y= 8, mapped pin D5
pins_d |= (0x20u & p[ 2]) << 1; // x= 5, y= 1, mapped pin D12
pins_d |= (0x20u & p[14]) << 2; // x= 5, y= 7, mapped pin D6
pins_e |= (0x20u & p[12]) << 1; // x= 5, y= 6, mapped pin D7
break; break;
case 3: case 3:
pins_b |= (0x20u & p[ 5]) << 2; // x=13, y= 2, mapped pin D11 if (0x01u & p[16]) pins_d |= 0x02; // x= 0, y= 8, mapped pin D2
pins_b |= (0x20u & p[ 7]) << 1; // x=13, y= 3, mapped pin D10 if (0x04u & p[16]) pins_d |= 0x01; // x= 2, y= 8, mapped pin D3
if (0x20u & p[ 1]) pins_c |= 0x80; // x=13, y= 0, mapped pin D13
if (0x20u & p[ 3]) pins_d |= 0x40; // x=13, y= 1, mapped pin D12
if (0x20u & p[ 5]) pins_b |= 0x80; // x=13, y= 2, mapped pin D11
if (0x20u & p[ 7]) pins_b |= 0x40; // x=13, y= 3, mapped pin D10
if (0x20u & p[11]) pins_b |= 0x10; // x=13, y= 5, mapped pin D8
if (0x20u & p[13]) pins_e |= 0x40; // x=13, y= 6, mapped pin D7
if (0x20u & p[15]) pins_d |= 0x80; // x=13, y= 7, mapped pin D6
pins_b |= (0x20u & p[ 9]); // x=13, y= 4, mapped pin D9 pins_b |= (0x20u & p[ 9]); // x=13, y= 4, mapped pin D9
pins_b |= (0x20u & p[11]) >> 1; // x=13, y= 5, mapped pin D8
pins_c |= (0x20u & p[ 1]) << 2; // x=13, y= 0, mapped pin D13
pins_d |= (0x01u & p[16]) << 1; // x= 0, y= 8, mapped pin D2
pins_d |= (0x04u & p[16]) >> 2; // x= 2, y= 8, mapped pin D3
pins_d |= (0x10u & p[16]); // x= 4, y= 8, mapped pin D4 pins_d |= (0x10u & p[16]); // x= 4, y= 8, mapped pin D4
pins_d |= (0x20u & p[ 3]) << 1; // x=13, y= 1, mapped pin D12
pins_d |= (0x20u & p[15]) << 2; // x=13, y= 7, mapped pin D6
pins_e |= (0x20u & p[13]) << 1; // x=13, y= 6, mapped pin D7
break; break;
case 4: case 4:
pins_b |= (0x10u & p[ 5]) << 3; // x=12, y= 2, mapped pin D11 if (0x01u & p[14]) pins_d |= 0x02; // x= 0, y= 7, mapped pin D2
pins_b |= (0x10u & p[ 7]) << 2; // x=12, y= 3, mapped pin D10 if (0x04u & p[14]) pins_d |= 0x01; // x= 2, y= 7, mapped pin D3
pins_b |= (0x10u & p[ 9]) << 1; // x=12, y= 4, mapped pin D9 if (0x10u & p[ 1]) pins_c |= 0x80; // x=12, y= 0, mapped pin D13
if (0x10u & p[ 3]) pins_d |= 0x40; // x=12, y= 1, mapped pin D12
if (0x10u & p[ 5]) pins_b |= 0x80; // x=12, y= 2, mapped pin D11
if (0x10u & p[ 7]) pins_b |= 0x40; // x=12, y= 3, mapped pin D10
if (0x10u & p[ 9]) pins_b |= 0x20; // x=12, y= 4, mapped pin D9
if (0x10u & p[13]) pins_e |= 0x40; // x=12, y= 6, mapped pin D7
if (0x20u & p[17]) pins_c |= 0x40; // x=13, y= 8, mapped pin D5
pins_b |= (0x10u & p[11]); // x=12, y= 5, mapped pin D8 pins_b |= (0x10u & p[11]); // x=12, y= 5, mapped pin D8
pins_c |= (0x10u & p[ 1]) << 3; // x=12, y= 0, mapped pin D13
pins_c |= (0x20u & p[17]) << 1; // x=13, y= 8, mapped pin D5
pins_d |= (0x01u & p[14]) << 1; // x= 0, y= 7, mapped pin D2
pins_d |= (0x04u & p[14]) >> 2; // x= 2, y= 7, mapped pin D3
pins_d |= (0x10u & p[ 3]) << 2; // x=12, y= 1, mapped pin D12
pins_d |= (0x10u & p[14]); // x= 4, y= 7, mapped pin D4 pins_d |= (0x10u & p[14]); // x= 4, y= 7, mapped pin D4
pins_e |= (0x10u & p[13]) << 2; // x=12, y= 6, mapped pin D7
break; break;
case 5: case 5:
pins_b |= (0x08u & p[ 5]) << 4; // x=11, y= 2, mapped pin D11 if (0x01u & p[12]) pins_d |= 0x02; // x= 0, y= 6, mapped pin D2
pins_b |= (0x08u & p[ 7]) << 3; // x=11, y= 3, mapped pin D10 if (0x04u & p[12]) pins_d |= 0x01; // x= 2, y= 6, mapped pin D3
pins_b |= (0x08u & p[ 9]) << 2; // x=11, y= 4, mapped pin D9 if (0x08u & p[ 1]) pins_c |= 0x80; // x=11, y= 0, mapped pin D13
pins_b |= (0x08u & p[11]) << 1; // x=11, y= 5, mapped pin D8 if (0x08u & p[ 3]) pins_d |= 0x40; // x=11, y= 1, mapped pin D12
pins_c |= (0x08u & p[ 1]) << 4; // x=11, y= 0, mapped pin D13 if (0x08u & p[ 5]) pins_b |= 0x80; // x=11, y= 2, mapped pin D11
pins_c |= (0x10u & p[17]) << 2; // x=12, y= 8, mapped pin D5 if (0x08u & p[ 7]) pins_b |= 0x40; // x=11, y= 3, mapped pin D10
pins_d |= (0x01u & p[12]) << 1; // x= 0, y= 6, mapped pin D2 if (0x08u & p[ 9]) pins_b |= 0x20; // x=11, y= 4, mapped pin D9
pins_d |= (0x04u & p[12]) >> 2; // x= 2, y= 6, mapped pin D3 if (0x08u & p[11]) pins_b |= 0x10; // x=11, y= 5, mapped pin D8
pins_d |= (0x08u & p[ 3]) << 3; // x=11, y= 1, mapped pin D12 if (0x10u & p[15]) pins_d |= 0x80; // x=12, y= 7, mapped pin D6
if (0x10u & p[17]) pins_c |= 0x40; // x=12, y= 8, mapped pin D5
pins_d |= (0x10u & p[12]); // x= 4, y= 6, mapped pin D4 pins_d |= (0x10u & p[12]); // x= 4, y= 6, mapped pin D4
pins_d |= (0x10u & p[15]) << 3; // x=12, y= 7, mapped pin D6
break; break;
case 6: case 6:
pins_b |= (0x04u & p[ 5]) << 5; // x=10, y= 2, mapped pin D11 if (0x01u & p[10]) pins_d |= 0x02; // x= 0, y= 5, mapped pin D2
pins_b |= (0x04u & p[ 7]) << 4; // x=10, y= 3, mapped pin D10 if (0x04u & p[ 1]) pins_c |= 0x80; // x=10, y= 0, mapped pin D13
pins_b |= (0x04u & p[ 9]) << 3; // x=10, y= 4, mapped pin D9 if (0x04u & p[ 3]) pins_d |= 0x40; // x=10, y= 1, mapped pin D12
pins_c |= (0x04u & p[ 1]) << 5; // x=10, y= 0, mapped pin D13 if (0x04u & p[ 5]) pins_b |= 0x80; // x=10, y= 2, mapped pin D11
pins_c |= (0x08u & p[17]) << 3; // x=11, y= 8, mapped pin D5 if (0x04u & p[ 7]) pins_b |= 0x40; // x=10, y= 3, mapped pin D10
pins_d |= (0x01u & p[10]) << 1; // x= 0, y= 5, mapped pin D2 if (0x04u & p[ 9]) pins_b |= 0x20; // x=10, y= 4, mapped pin D9
pins_d |= (0x04u & p[ 3]) << 4; // x=10, y= 1, mapped pin D12 if (0x04u & p[10]) pins_d |= 0x01; // x= 2, y= 5, mapped pin D3
pins_d |= (0x04u & p[10]) >> 2; // x= 2, y= 5, mapped pin D3 if (0x08u & p[13]) pins_e |= 0x40; // x=11, y= 6, mapped pin D7
pins_d |= (0x08u & p[15]) << 4; // x=11, y= 7, mapped pin D6 if (0x08u & p[15]) pins_d |= 0x80; // x=11, y= 7, mapped pin D6
if (0x08u & p[17]) pins_c |= 0x40; // x=11, y= 8, mapped pin D5
pins_d |= (0x10u & p[10]); // x= 4, y= 5, mapped pin D4 pins_d |= (0x10u & p[10]); // x= 4, y= 5, mapped pin D4
pins_e |= (0x08u & p[13]) << 3; // x=11, y= 6, mapped pin D7
break; break;
case 7: case 7:
pins_b |= (0x02u & p[ 5]) << 6; // x= 9, y= 2, mapped pin D11 if (0x01u & p[ 8]) pins_d |= 0x02; // x= 0, y= 4, mapped pin D2
pins_b |= (0x02u & p[ 7]) << 5; // x= 9, y= 3, mapped pin D10 if (0x02u & p[ 1]) pins_c |= 0x80; // x= 9, y= 0, mapped pin D13
pins_b |= (0x04u & p[11]) << 2; // x=10, y= 5, mapped pin D8 if (0x02u & p[ 3]) pins_d |= 0x40; // x= 9, y= 1, mapped pin D12
pins_c |= (0x02u & p[ 1]) << 6; // x= 9, y= 0, mapped pin D13 if (0x02u & p[ 5]) pins_b |= 0x80; // x= 9, y= 2, mapped pin D11
pins_c |= (0x04u & p[17]) << 4; // x=10, y= 8, mapped pin D5 if (0x02u & p[ 7]) pins_b |= 0x40; // x= 9, y= 3, mapped pin D10
pins_d |= (0x01u & p[ 8]) << 1; // x= 0, y= 4, mapped pin D2 if (0x04u & p[ 8]) pins_d |= 0x01; // x= 2, y= 4, mapped pin D3
pins_d |= (0x02u & p[ 3]) << 5; // x= 9, y= 1, mapped pin D12 if (0x04u & p[11]) pins_b |= 0x10; // x=10, y= 5, mapped pin D8
pins_d |= (0x04u & p[ 8]) >> 2; // x= 2, y= 4, mapped pin D3 if (0x04u & p[13]) pins_e |= 0x40; // x=10, y= 6, mapped pin D7
pins_d |= (0x04u & p[15]) << 5; // x=10, y= 7, mapped pin D6 if (0x04u & p[15]) pins_d |= 0x80; // x=10, y= 7, mapped pin D6
if (0x04u & p[17]) pins_c |= 0x40; // x=10, y= 8, mapped pin D5
pins_d |= (0x10u & p[ 8]); // x= 4, y= 4, mapped pin D4 pins_d |= (0x10u & p[ 8]); // x= 4, y= 4, mapped pin D4
pins_e |= (0x04u & p[13]) << 4; // x=10, y= 6, mapped pin D7
break; break;
case 8: case 8:
pins_b |= (0x01u & p[ 5]) << 7; // x= 8, y= 2, mapped pin D11 if (0x01u & p[ 1]) pins_c |= 0x80; // x= 8, y= 0, mapped pin D13
pins_b |= (0x02u & p[ 9]) << 4; // x= 9, y= 4, mapped pin D9 if (0x01u & p[ 3]) pins_d |= 0x40; // x= 8, y= 1, mapped pin D12
pins_b |= (0x02u & p[11]) << 3; // x= 9, y= 5, mapped pin D8 if (0x01u & p[ 5]) pins_b |= 0x80; // x= 8, y= 2, mapped pin D11
pins_c |= (0x01u & p[ 1]) << 7; // x= 8, y= 0, mapped pin D13 if (0x01u & p[ 6]) pins_d |= 0x02; // x= 0, y= 3, mapped pin D2
pins_c |= (0x02u & p[17]) << 5; // x= 9, y= 8, mapped pin D5 if (0x02u & p[ 9]) pins_b |= 0x20; // x= 9, y= 4, mapped pin D9
pins_d |= (0x01u & p[ 3]) << 6; // x= 8, y= 1, mapped pin D12 if (0x02u & p[11]) pins_b |= 0x10; // x= 9, y= 5, mapped pin D8
pins_d |= (0x01u & p[ 6]) << 1; // x= 0, y= 3, mapped pin D2 if (0x02u & p[13]) pins_e |= 0x40; // x= 9, y= 6, mapped pin D7
pins_d |= (0x02u & p[15]) << 6; // x= 9, y= 7, mapped pin D6 if (0x02u & p[15]) pins_d |= 0x80; // x= 9, y= 7, mapped pin D6
pins_d |= (0x04u & p[ 6]) >> 2; // x= 2, y= 3, mapped pin D3 if (0x02u & p[17]) pins_c |= 0x40; // x= 9, y= 8, mapped pin D5
if (0x04u & p[ 6]) pins_d |= 0x01; // x= 2, y= 3, mapped pin D3
pins_d |= (0x10u & p[ 6]); // x= 4, y= 3, mapped pin D4 pins_d |= (0x10u & p[ 6]); // x= 4, y= 3, mapped pin D4
pins_e |= (0x02u & p[13]) << 5; // x= 9, y= 6, mapped pin D7
break; break;
case 9: case 9:
pins_b |= (0x01u & p[ 7]) << 6; // x= 8, y= 3, mapped pin D10 if (0x01u & p[ 4]) pins_d |= 0x02; // x= 0, y= 2, mapped pin D2
pins_b |= (0x01u & p[ 9]) << 5; // x= 8, y= 4, mapped pin D9 if (0x01u & p[ 7]) pins_b |= 0x40; // x= 8, y= 3, mapped pin D10
pins_b |= (0x01u & p[11]) << 4; // x= 8, y= 5, mapped pin D8 if (0x01u & p[ 9]) pins_b |= 0x20; // x= 8, y= 4, mapped pin D9
pins_c |= (0x01u & p[17]) << 6; // x= 8, y= 8, mapped pin D5 if (0x01u & p[11]) pins_b |= 0x10; // x= 8, y= 5, mapped pin D8
if (0x01u & p[13]) pins_e |= 0x40; // x= 8, y= 6, mapped pin D7
if (0x01u & p[15]) pins_d |= 0x80; // x= 8, y= 7, mapped pin D6
if (0x01u & p[17]) pins_c |= 0x40; // x= 8, y= 8, mapped pin D5
if (0x04u & p[ 4]) pins_d |= 0x01; // x= 2, y= 2, mapped pin D3
if (0x80u & p[ 2]) pins_d |= 0x40; // x= 7, y= 1, mapped pin D12
pins_c |= (0x80u & p[ 0]); // x= 7, y= 0, mapped pin D13 pins_c |= (0x80u & p[ 0]); // x= 7, y= 0, mapped pin D13
pins_d |= (0x01u & p[ 4]) << 1; // x= 0, y= 2, mapped pin D2
pins_d |= (0x01u & p[15]) << 7; // x= 8, y= 7, mapped pin D6
pins_d |= (0x04u & p[ 4]) >> 2; // x= 2, y= 2, mapped pin D3
pins_d |= (0x10u & p[ 4]); // x= 4, y= 2, mapped pin D4 pins_d |= (0x10u & p[ 4]); // x= 4, y= 2, mapped pin D4
pins_d |= (0x80u & p[ 2]) >> 1; // x= 7, y= 1, mapped pin D12
pins_e |= (0x01u & p[13]) << 6; // x= 8, y= 6, mapped pin D7
break; break;
case 10: case 10:
if (0x01u & p[ 2]) pins_d |= 0x02; // x= 0, y= 1, mapped pin D2
if (0x04u & p[ 2]) pins_d |= 0x01; // x= 2, y= 1, mapped pin D3
if (0x40u & p[ 0]) pins_c |= 0x80; // x= 6, y= 0, mapped pin D13
if (0x80u & p[ 6]) pins_b |= 0x40; // x= 7, y= 3, mapped pin D10
if (0x80u & p[ 8]) pins_b |= 0x20; // x= 7, y= 4, mapped pin D9
if (0x80u & p[10]) pins_b |= 0x10; // x= 7, y= 5, mapped pin D8
if (0x80u & p[12]) pins_e |= 0x40; // x= 7, y= 6, mapped pin D7
if (0x80u & p[16]) pins_c |= 0x40; // x= 7, y= 8, mapped pin D5
pins_b |= (0x80u & p[ 4]); // x= 7, y= 2, mapped pin D11 pins_b |= (0x80u & p[ 4]); // x= 7, y= 2, mapped pin D11
pins_b |= (0x80u & p[ 6]) >> 1; // x= 7, y= 3, mapped pin D10
pins_b |= (0x80u & p[ 8]) >> 2; // x= 7, y= 4, mapped pin D9
pins_b |= (0x80u & p[10]) >> 3; // x= 7, y= 5, mapped pin D8
pins_c |= (0x40u & p[ 0]) << 1; // x= 6, y= 0, mapped pin D13
pins_c |= (0x80u & p[16]) >> 1; // x= 7, y= 8, mapped pin D5
pins_d |= (0x01u & p[ 2]) << 1; // x= 0, y= 1, mapped pin D2
pins_d |= (0x04u & p[ 2]) >> 2; // x= 2, y= 1, mapped pin D3
pins_d |= (0x10u & p[ 2]); // x= 4, y= 1, mapped pin D4 pins_d |= (0x10u & p[ 2]); // x= 4, y= 1, mapped pin D4
pins_d |= (0x80u & p[14]); // x= 7, y= 7, mapped pin D6 pins_d |= (0x80u & p[14]); // x= 7, y= 7, mapped pin D6
pins_e |= (0x80u & p[12]) >> 1; // x= 7, y= 6, mapped pin D7
break; break;
case 11: case 11:
pins_b |= (0x40u & p[ 4]) << 1; // x= 6, y= 2, mapped pin D11 if (0x01u & p[ 0]) pins_d |= 0x02; // x= 0, y= 0, mapped pin D2
if (0x04u & p[ 0]) pins_d |= 0x01; // x= 2, y= 0, mapped pin D3
if (0x40u & p[ 4]) pins_b |= 0x80; // x= 6, y= 2, mapped pin D11
if (0x40u & p[ 8]) pins_b |= 0x20; // x= 6, y= 4, mapped pin D9
if (0x40u & p[10]) pins_b |= 0x10; // x= 6, y= 5, mapped pin D8
if (0x40u & p[14]) pins_d |= 0x80; // x= 6, y= 7, mapped pin D6
pins_b |= (0x40u & p[ 6]); // x= 6, y= 3, mapped pin D10 pins_b |= (0x40u & p[ 6]); // x= 6, y= 3, mapped pin D10
pins_b |= (0x40u & p[ 8]) >> 1; // x= 6, y= 4, mapped pin D9
pins_b |= (0x40u & p[10]) >> 2; // x= 6, y= 5, mapped pin D8
pins_c |= (0x40u & p[16]); // x= 6, y= 8, mapped pin D5 pins_c |= (0x40u & p[16]); // x= 6, y= 8, mapped pin D5
pins_d |= (0x01u & p[ 0]) << 1; // x= 0, y= 0, mapped pin D2
pins_d |= (0x04u & p[ 0]) >> 2; // x= 2, y= 0, mapped pin D3
pins_d |= (0x10u & p[ 0]); // x= 4, y= 0, mapped pin D4 pins_d |= (0x10u & p[ 0]); // x= 4, y= 0, mapped pin D4
pins_d |= (0x40u & p[ 2]); // x= 6, y= 1, mapped pin D12 pins_d |= (0x40u & p[ 2]); // x= 6, y= 1, mapped pin D12
pins_d |= (0x40u & p[14]) << 1; // x= 6, y= 7, mapped pin D6
pins_e |= (0x40u & p[12]); // x= 6, y= 6, mapped pin D7 pins_e |= (0x40u & p[12]); // x= 6, y= 6, mapped pin D7
break; break;
} }
@ -689,160 +687,158 @@ static void compose_cycle(uint8_t const cycle, uint8_t plane) {
uint8_t pins_b = sink_b = pgm_read_byte(&sink_b_cycle[cycle]); uint8_t pins_b = sink_b = pgm_read_byte(&sink_b_cycle[cycle]);
// convert Borgware-2D framebuffer to LoL Shield cycles on Diavolino // convert Borgware-2D framebuffer to LoL Shield cycles on Diavolino
// (I could have done this with a lookup table, but that would be slower as
// non-constant bit shifts are quite expensive on AVR)
// NOTE: (0,0) is UPPER RIGHT in the Borgware realm // NOTE: (0,0) is UPPER RIGHT in the Borgware realm
if (plane < NUMPLANE) { if (plane < NUMPLANE) {
switch(cycle) { switch(cycle) {
case 0: case 0:
pins_b |= (0x02u & p[ 0]) << 4; // x= 1, y= 0, mapped pin D13 if (0x02u & p[ 0]) pins_b |= 0x20; // x= 1, y= 0, mapped pin D13
pins_b |= (0x02u & p[ 2]) << 3; // x= 1, y= 1, mapped pin D12 if (0x02u & p[ 2]) pins_b |= 0x10; // x= 1, y= 1, mapped pin D12
pins_b |= (0x02u & p[ 4]) << 2; // x= 1, y= 2, mapped pin D11 if (0x02u & p[ 4]) pins_b |= 0x08; // x= 1, y= 2, mapped pin D11
pins_b |= (0x02u & p[ 6]) << 1; // x= 1, y= 3, mapped pin D10 if (0x02u & p[ 6]) pins_b |= 0x04; // x= 1, y= 3, mapped pin D10
if (0x02u & p[10]) pins_b |= 0x01; // x= 1, y= 5, mapped pin D8
if (0x02u & p[12]) pins_d |= 0x80; // x= 1, y= 6, mapped pin D7
if (0x02u & p[14]) pins_d |= 0x40; // x= 1, y= 7, mapped pin D6
if (0x02u & p[16]) pins_d |= 0x20; // x= 1, y= 8, mapped pin D5
pins_b |= (0x02u & p[ 8]); // x= 1, y= 4, mapped pin D9 pins_b |= (0x02u & p[ 8]); // x= 1, y= 4, mapped pin D9
pins_b |= (0x02u & p[10]) >> 1; // x= 1, y= 5, mapped pin D8
pins_d |= (0x02u & p[12]) << 6; // x= 1, y= 6, mapped pin D7
pins_d |= (0x02u & p[14]) << 5; // x= 1, y= 7, mapped pin D6
pins_d |= (0x02u & p[16]) << 4; // x= 1, y= 8, mapped pin D5
break; break;
case 1: case 1:
pins_b |= (0x08u & p[ 0]) << 2; // x= 3, y= 0, mapped pin D13 if (0x08u & p[ 0]) pins_b |= 0x20; // x= 3, y= 0, mapped pin D13
pins_b |= (0x08u & p[ 2]) << 1; // x= 3, y= 1, mapped pin D12 if (0x08u & p[ 2]) pins_b |= 0x10; // x= 3, y= 1, mapped pin D12
if (0x08u & p[ 6]) pins_b |= 0x04; // x= 3, y= 3, mapped pin D10
if (0x08u & p[ 8]) pins_b |= 0x02; // x= 3, y= 4, mapped pin D9
if (0x08u & p[10]) pins_b |= 0x01; // x= 3, y= 5, mapped pin D8
if (0x08u & p[12]) pins_d |= 0x80; // x= 3, y= 6, mapped pin D7
if (0x08u & p[14]) pins_d |= 0x40; // x= 3, y= 7, mapped pin D6
if (0x08u & p[16]) pins_d |= 0x20; // x= 3, y= 8, mapped pin D5
pins_b |= (0x08u & p[ 4]); // x= 3, y= 2, mapped pin D11 pins_b |= (0x08u & p[ 4]); // x= 3, y= 2, mapped pin D11
pins_b |= (0x08u & p[ 6]) >> 1; // x= 3, y= 3, mapped pin D10
pins_b |= (0x08u & p[ 8]) >> 2; // x= 3, y= 4, mapped pin D9
pins_b |= (0x08u & p[10]) >> 3; // x= 3, y= 5, mapped pin D8
pins_d |= (0x08u & p[12]) << 4; // x= 3, y= 6, mapped pin D7
pins_d |= (0x08u & p[14]) << 3; // x= 3, y= 7, mapped pin D6
pins_d |= (0x08u & p[16]) << 2; // x= 3, y= 8, mapped pin D5
break; break;
case 2: case 2:
if (0x20u & p[ 2]) pins_b |= 0x10; // x= 5, y= 1, mapped pin D12
if (0x20u & p[ 4]) pins_b |= 0x08; // x= 5, y= 2, mapped pin D11
if (0x20u & p[ 6]) pins_b |= 0x04; // x= 5, y= 3, mapped pin D10
if (0x20u & p[ 8]) pins_b |= 0x02; // x= 5, y= 4, mapped pin D9
if (0x20u & p[10]) pins_b |= 0x01; // x= 5, y= 5, mapped pin D8
if (0x20u & p[12]) pins_d |= 0x80; // x= 5, y= 6, mapped pin D7
if (0x20u & p[14]) pins_d |= 0x40; // x= 5, y= 7, mapped pin D6
pins_b |= (0x20u & p[ 0]); // x= 5, y= 0, mapped pin D13 pins_b |= (0x20u & p[ 0]); // x= 5, y= 0, mapped pin D13
pins_b |= (0x20u & p[ 2]) >> 1; // x= 5, y= 1, mapped pin D12
pins_b |= (0x20u & p[ 4]) >> 2; // x= 5, y= 2, mapped pin D11
pins_b |= (0x20u & p[ 6]) >> 3; // x= 5, y= 3, mapped pin D10
pins_b |= (0x20u & p[ 8]) >> 4; // x= 5, y= 4, mapped pin D9
pins_b |= (0x20u & p[10]) >> 5; // x= 5, y= 5, mapped pin D8
pins_d |= (0x20u & p[12]) << 2; // x= 5, y= 6, mapped pin D7
pins_d |= (0x20u & p[14]) << 1; // x= 5, y= 7, mapped pin D6
pins_d |= (0x20u & p[16]); // x= 5, y= 8, mapped pin D5 pins_d |= (0x20u & p[16]); // x= 5, y= 8, mapped pin D5
break; break;
case 3: case 3:
if (0x01u & p[16]) pins_d |= 0x04; // x= 0, y= 8, mapped pin D2
if (0x04u & p[16]) pins_d |= 0x08; // x= 2, y= 8, mapped pin D3
if (0x20u & p[ 3]) pins_b |= 0x10; // x=13, y= 1, mapped pin D12
if (0x20u & p[ 5]) pins_b |= 0x08; // x=13, y= 2, mapped pin D11
if (0x20u & p[ 7]) pins_b |= 0x04; // x=13, y= 3, mapped pin D10
if (0x20u & p[ 9]) pins_b |= 0x02; // x=13, y= 4, mapped pin D9
if (0x20u & p[11]) pins_b |= 0x01; // x=13, y= 5, mapped pin D8
if (0x20u & p[13]) pins_d |= 0x80; // x=13, y= 6, mapped pin D7
if (0x20u & p[15]) pins_d |= 0x40; // x=13, y= 7, mapped pin D6
pins_b |= (0x20u & p[ 1]); // x=13, y= 0, mapped pin D13 pins_b |= (0x20u & p[ 1]); // x=13, y= 0, mapped pin D13
pins_b |= (0x20u & p[ 3]) >> 1; // x=13, y= 1, mapped pin D12
pins_b |= (0x20u & p[ 5]) >> 2; // x=13, y= 2, mapped pin D11
pins_b |= (0x20u & p[ 7]) >> 3; // x=13, y= 3, mapped pin D10
pins_b |= (0x20u & p[ 9]) >> 4; // x=13, y= 4, mapped pin D9
pins_b |= (0x20u & p[11]) >> 5; // x=13, y= 5, mapped pin D8
pins_d |= (0x01u & p[16]) << 2; // x= 0, y= 8, mapped pin D2
pins_d |= (0x04u & p[16]) << 1; // x= 2, y= 8, mapped pin D3
pins_d |= (0x10u & p[16]); // x= 4, y= 8, mapped pin D4 pins_d |= (0x10u & p[16]); // x= 4, y= 8, mapped pin D4
pins_d |= (0x20u & p[13]) << 2; // x=13, y= 6, mapped pin D7
pins_d |= (0x20u & p[15]) << 1; // x=13, y= 7, mapped pin D6
break; break;
case 4: case 4:
pins_b |= (0x10u & p[ 1]) << 1; // x=12, y= 0, mapped pin D13 if (0x01u & p[14]) pins_d |= 0x04; // x= 0, y= 7, mapped pin D2
if (0x04u & p[14]) pins_d |= 0x08; // x= 2, y= 7, mapped pin D3
if (0x10u & p[ 1]) pins_b |= 0x20; // x=12, y= 0, mapped pin D13
if (0x10u & p[ 5]) pins_b |= 0x08; // x=12, y= 2, mapped pin D11
if (0x10u & p[ 7]) pins_b |= 0x04; // x=12, y= 3, mapped pin D10
if (0x10u & p[ 9]) pins_b |= 0x02; // x=12, y= 4, mapped pin D9
if (0x10u & p[11]) pins_b |= 0x01; // x=12, y= 5, mapped pin D8
if (0x10u & p[13]) pins_d |= 0x80; // x=12, y= 6, mapped pin D7
pins_b |= (0x10u & p[ 3]); // x=12, y= 1, mapped pin D12 pins_b |= (0x10u & p[ 3]); // x=12, y= 1, mapped pin D12
pins_b |= (0x10u & p[ 5]) >> 1; // x=12, y= 2, mapped pin D11
pins_b |= (0x10u & p[ 7]) >> 2; // x=12, y= 3, mapped pin D10
pins_b |= (0x10u & p[ 9]) >> 3; // x=12, y= 4, mapped pin D9
pins_b |= (0x10u & p[11]) >> 4; // x=12, y= 5, mapped pin D8
pins_d |= (0x01u & p[14]) << 2; // x= 0, y= 7, mapped pin D2
pins_d |= (0x04u & p[14]) << 1; // x= 2, y= 7, mapped pin D3
pins_d |= (0x10u & p[13]) << 3; // x=12, y= 6, mapped pin D7
pins_d |= (0x10u & p[14]); // x= 4, y= 7, mapped pin D4 pins_d |= (0x10u & p[14]); // x= 4, y= 7, mapped pin D4
pins_d |= (0x20u & p[17]); // x=13, y= 8, mapped pin D5 pins_d |= (0x20u & p[17]); // x=13, y= 8, mapped pin D5
break; break;
case 5: case 5:
pins_b |= (0x08u & p[ 1]) << 2; // x=11, y= 0, mapped pin D13 if (0x01u & p[12]) pins_d |= 0x04; // x= 0, y= 6, mapped pin D2
pins_b |= (0x08u & p[ 3]) << 1; // x=11, y= 1, mapped pin D12 if (0x04u & p[12]) pins_d |= 0x08; // x= 2, y= 6, mapped pin D3
if (0x08u & p[ 1]) pins_b |= 0x20; // x=11, y= 0, mapped pin D13
if (0x08u & p[ 3]) pins_b |= 0x10; // x=11, y= 1, mapped pin D12
if (0x08u & p[ 7]) pins_b |= 0x04; // x=11, y= 3, mapped pin D10
if (0x08u & p[ 9]) pins_b |= 0x02; // x=11, y= 4, mapped pin D9
if (0x08u & p[11]) pins_b |= 0x01; // x=11, y= 5, mapped pin D8
if (0x10u & p[15]) pins_d |= 0x40; // x=12, y= 7, mapped pin D6
if (0x10u & p[17]) pins_d |= 0x20; // x=12, y= 8, mapped pin D5
pins_b |= (0x08u & p[ 5]); // x=11, y= 2, mapped pin D11 pins_b |= (0x08u & p[ 5]); // x=11, y= 2, mapped pin D11
pins_b |= (0x08u & p[ 7]) >> 1; // x=11, y= 3, mapped pin D10
pins_b |= (0x08u & p[ 9]) >> 2; // x=11, y= 4, mapped pin D9
pins_b |= (0x08u & p[11]) >> 3; // x=11, y= 5, mapped pin D8
pins_d |= (0x01u & p[12]) << 2; // x= 0, y= 6, mapped pin D2
pins_d |= (0x04u & p[12]) << 1; // x= 2, y= 6, mapped pin D3
pins_d |= (0x10u & p[12]); // x= 4, y= 6, mapped pin D4 pins_d |= (0x10u & p[12]); // x= 4, y= 6, mapped pin D4
pins_d |= (0x10u & p[15]) << 2; // x=12, y= 7, mapped pin D6
pins_d |= (0x10u & p[17]) << 1; // x=12, y= 8, mapped pin D5
break; break;
case 6: case 6:
pins_b |= (0x04u & p[ 1]) << 3; // x=10, y= 0, mapped pin D13 if (0x01u & p[10]) pins_d |= 0x04; // x= 0, y= 5, mapped pin D2
pins_b |= (0x04u & p[ 3]) << 2; // x=10, y= 1, mapped pin D12 if (0x04u & p[ 1]) pins_b |= 0x20; // x=10, y= 0, mapped pin D13
pins_b |= (0x04u & p[ 5]) << 1; // x=10, y= 2, mapped pin D11 if (0x04u & p[ 3]) pins_b |= 0x10; // x=10, y= 1, mapped pin D12
if (0x04u & p[ 5]) pins_b |= 0x08; // x=10, y= 2, mapped pin D11
if (0x04u & p[ 9]) pins_b |= 0x02; // x=10, y= 4, mapped pin D9
if (0x04u & p[10]) pins_d |= 0x08; // x= 2, y= 5, mapped pin D3
if (0x08u & p[13]) pins_d |= 0x80; // x=11, y= 6, mapped pin D7
if (0x08u & p[15]) pins_d |= 0x40; // x=11, y= 7, mapped pin D6
if (0x08u & p[17]) pins_d |= 0x20; // x=11, y= 8, mapped pin D5
pins_b |= (0x04u & p[ 7]); // x=10, y= 3, mapped pin D10 pins_b |= (0x04u & p[ 7]); // x=10, y= 3, mapped pin D10
pins_b |= (0x04u & p[ 9]) >> 1; // x=10, y= 4, mapped pin D9
pins_d |= (0x01u & p[10]) << 2; // x= 0, y= 5, mapped pin D2
pins_d |= (0x04u & p[10]) << 1; // x= 2, y= 5, mapped pin D3
pins_d |= (0x08u & p[13]) << 4; // x=11, y= 6, mapped pin D7
pins_d |= (0x08u & p[15]) << 3; // x=11, y= 7, mapped pin D6
pins_d |= (0x08u & p[17]) << 2; // x=11, y= 8, mapped pin D5
pins_d |= (0x10u & p[10]); // x= 4, y= 5, mapped pin D4 pins_d |= (0x10u & p[10]); // x= 4, y= 5, mapped pin D4
break; break;
case 7: case 7:
pins_b |= (0x02u & p[ 1]) << 4; // x= 9, y= 0, mapped pin D13 if (0x01u & p[ 8]) pins_d |= 0x04; // x= 0, y= 4, mapped pin D2
pins_b |= (0x02u & p[ 3]) << 3; // x= 9, y= 1, mapped pin D12 if (0x02u & p[ 1]) pins_b |= 0x20; // x= 9, y= 0, mapped pin D13
pins_b |= (0x02u & p[ 5]) << 2; // x= 9, y= 2, mapped pin D11 if (0x02u & p[ 3]) pins_b |= 0x10; // x= 9, y= 1, mapped pin D12
pins_b |= (0x02u & p[ 7]) << 1; // x= 9, y= 3, mapped pin D10 if (0x02u & p[ 5]) pins_b |= 0x08; // x= 9, y= 2, mapped pin D11
pins_b |= (0x04u & p[11]) >> 2; // x=10, y= 5, mapped pin D8 if (0x02u & p[ 7]) pins_b |= 0x04; // x= 9, y= 3, mapped pin D10
pins_d |= (0x01u & p[ 8]) << 2; // x= 0, y= 4, mapped pin D2 if (0x04u & p[ 8]) pins_d |= 0x08; // x= 2, y= 4, mapped pin D3
pins_d |= (0x04u & p[ 8]) << 1; // x= 2, y= 4, mapped pin D3 if (0x04u & p[11]) pins_b |= 0x01; // x=10, y= 5, mapped pin D8
pins_d |= (0x04u & p[13]) << 5; // x=10, y= 6, mapped pin D7 if (0x04u & p[13]) pins_d |= 0x80; // x=10, y= 6, mapped pin D7
pins_d |= (0x04u & p[15]) << 4; // x=10, y= 7, mapped pin D6 if (0x04u & p[15]) pins_d |= 0x40; // x=10, y= 7, mapped pin D6
pins_d |= (0x04u & p[17]) << 3; // x=10, y= 8, mapped pin D5 if (0x04u & p[17]) pins_d |= 0x20; // x=10, y= 8, mapped pin D5
pins_d |= (0x10u & p[ 8]); // x= 4, y= 4, mapped pin D4 pins_d |= (0x10u & p[ 8]); // x= 4, y= 4, mapped pin D4
break; break;
case 8: case 8:
pins_b |= (0x01u & p[ 1]) << 5; // x= 8, y= 0, mapped pin D13 if (0x01u & p[ 1]) pins_b |= 0x20; // x= 8, y= 0, mapped pin D13
pins_b |= (0x01u & p[ 3]) << 4; // x= 8, y= 1, mapped pin D12 if (0x01u & p[ 3]) pins_b |= 0x10; // x= 8, y= 1, mapped pin D12
pins_b |= (0x01u & p[ 5]) << 3; // x= 8, y= 2, mapped pin D11 if (0x01u & p[ 5]) pins_b |= 0x08; // x= 8, y= 2, mapped pin D11
if (0x01u & p[ 6]) pins_d |= 0x04; // x= 0, y= 3, mapped pin D2
if (0x02u & p[11]) pins_b |= 0x01; // x= 9, y= 5, mapped pin D8
if (0x02u & p[13]) pins_d |= 0x80; // x= 9, y= 6, mapped pin D7
if (0x02u & p[15]) pins_d |= 0x40; // x= 9, y= 7, mapped pin D6
if (0x02u & p[17]) pins_d |= 0x20; // x= 9, y= 8, mapped pin D5
if (0x04u & p[ 6]) pins_d |= 0x08; // x= 2, y= 3, mapped pin D3
pins_b |= (0x02u & p[ 9]); // x= 9, y= 4, mapped pin D9 pins_b |= (0x02u & p[ 9]); // x= 9, y= 4, mapped pin D9
pins_b |= (0x02u & p[11]) >> 1; // x= 9, y= 5, mapped pin D8
pins_d |= (0x01u & p[ 6]) << 2; // x= 0, y= 3, mapped pin D2
pins_d |= (0x02u & p[13]) << 6; // x= 9, y= 6, mapped pin D7
pins_d |= (0x02u & p[15]) << 5; // x= 9, y= 7, mapped pin D6
pins_d |= (0x02u & p[17]) << 4; // x= 9, y= 8, mapped pin D5
pins_d |= (0x04u & p[ 6]) << 1; // x= 2, y= 3, mapped pin D3
pins_d |= (0x10u & p[ 6]); // x= 4, y= 3, mapped pin D4 pins_d |= (0x10u & p[ 6]); // x= 4, y= 3, mapped pin D4
break; break;
case 9: case 9:
pins_b |= (0x01u & p[ 7]) << 2; // x= 8, y= 3, mapped pin D10 if (0x01u & p[ 4]) pins_d |= 0x04; // x= 0, y= 2, mapped pin D2
pins_b |= (0x01u & p[ 9]) << 1; // x= 8, y= 4, mapped pin D9 if (0x01u & p[ 7]) pins_b |= 0x04; // x= 8, y= 3, mapped pin D10
if (0x01u & p[ 9]) pins_b |= 0x02; // x= 8, y= 4, mapped pin D9
if (0x01u & p[13]) pins_d |= 0x80; // x= 8, y= 6, mapped pin D7
if (0x01u & p[15]) pins_d |= 0x40; // x= 8, y= 7, mapped pin D6
if (0x01u & p[17]) pins_d |= 0x20; // x= 8, y= 8, mapped pin D5
if (0x04u & p[ 4]) pins_d |= 0x08; // x= 2, y= 2, mapped pin D3
if (0x80u & p[ 0]) pins_b |= 0x20; // x= 7, y= 0, mapped pin D13
if (0x80u & p[ 2]) pins_b |= 0x10; // x= 7, y= 1, mapped pin D12
pins_b |= (0x01u & p[11]); // x= 8, y= 5, mapped pin D8 pins_b |= (0x01u & p[11]); // x= 8, y= 5, mapped pin D8
pins_b |= (0x80u & p[ 0]) >> 2; // x= 7, y= 0, mapped pin D13
pins_b |= (0x80u & p[ 2]) >> 3; // x= 7, y= 1, mapped pin D12
pins_d |= (0x01u & p[ 4]) << 2; // x= 0, y= 2, mapped pin D2
pins_d |= (0x01u & p[13]) << 7; // x= 8, y= 6, mapped pin D7
pins_d |= (0x01u & p[15]) << 6; // x= 8, y= 7, mapped pin D6
pins_d |= (0x01u & p[17]) << 5; // x= 8, y= 8, mapped pin D5
pins_d |= (0x04u & p[ 4]) << 1; // x= 2, y= 2, mapped pin D3
pins_d |= (0x10u & p[ 4]); // x= 4, y= 2, mapped pin D4 pins_d |= (0x10u & p[ 4]); // x= 4, y= 2, mapped pin D4
break; break;
case 10: case 10:
pins_b |= (0x40u & p[ 0]) >> 1; // x= 6, y= 0, mapped pin D13 if (0x01u & p[ 2]) pins_d |= 0x04; // x= 0, y= 1, mapped pin D2
pins_b |= (0x80u & p[ 4]) >> 4; // x= 7, y= 2, mapped pin D11 if (0x04u & p[ 2]) pins_d |= 0x08; // x= 2, y= 1, mapped pin D3
pins_b |= (0x80u & p[ 6]) >> 5; // x= 7, y= 3, mapped pin D10 if (0x40u & p[ 0]) pins_b |= 0x20; // x= 6, y= 0, mapped pin D13
pins_b |= (0x80u & p[ 8]) >> 6; // x= 7, y= 4, mapped pin D9 if (0x80u & p[ 4]) pins_b |= 0x08; // x= 7, y= 2, mapped pin D11
pins_b |= (0x80u & p[10]) >> 7; // x= 7, y= 5, mapped pin D8 if (0x80u & p[ 6]) pins_b |= 0x04; // x= 7, y= 3, mapped pin D10
pins_d |= (0x01u & p[ 2]) << 2; // x= 0, y= 1, mapped pin D2 if (0x80u & p[ 8]) pins_b |= 0x02; // x= 7, y= 4, mapped pin D9
pins_d |= (0x04u & p[ 2]) << 1; // x= 2, y= 1, mapped pin D3 if (0x80u & p[10]) pins_b |= 0x01; // x= 7, y= 5, mapped pin D8
if (0x80u & p[14]) pins_d |= 0x40; // x= 7, y= 7, mapped pin D6
if (0x80u & p[16]) pins_d |= 0x20; // x= 7, y= 8, mapped pin D5
pins_d |= (0x10u & p[ 2]); // x= 4, y= 1, mapped pin D4 pins_d |= (0x10u & p[ 2]); // x= 4, y= 1, mapped pin D4
pins_d |= (0x80u & p[12]); // x= 7, y= 6, mapped pin D7 pins_d |= (0x80u & p[12]); // x= 7, y= 6, mapped pin D7
pins_d |= (0x80u & p[14]) >> 1; // x= 7, y= 7, mapped pin D6
pins_d |= (0x80u & p[16]) >> 2; // x= 7, y= 8, mapped pin D5
break; break;
case 11: case 11:
pins_b |= (0x40u & p[ 2]) >> 2; // x= 6, y= 1, mapped pin D12 if (0x01u & p[ 0]) pins_d |= 0x04; // x= 0, y= 0, mapped pin D2
pins_b |= (0x40u & p[ 4]) >> 3; // x= 6, y= 2, mapped pin D11 if (0x04u & p[ 0]) pins_d |= 0x08; // x= 2, y= 0, mapped pin D3
pins_b |= (0x40u & p[ 6]) >> 4; // x= 6, y= 3, mapped pin D10 if (0x40u & p[ 2]) pins_b |= 0x10; // x= 6, y= 1, mapped pin D12
pins_b |= (0x40u & p[ 8]) >> 5; // x= 6, y= 4, mapped pin D9 if (0x40u & p[ 4]) pins_b |= 0x08; // x= 6, y= 2, mapped pin D11
pins_b |= (0x40u & p[10]) >> 6; // x= 6, y= 5, mapped pin D8 if (0x40u & p[ 6]) pins_b |= 0x04; // x= 6, y= 3, mapped pin D10
pins_d |= (0x01u & p[ 0]) << 2; // x= 0, y= 0, mapped pin D2 if (0x40u & p[ 8]) pins_b |= 0x02; // x= 6, y= 4, mapped pin D9
pins_d |= (0x04u & p[ 0]) << 1; // x= 2, y= 0, mapped pin D3 if (0x40u & p[10]) pins_b |= 0x01; // x= 6, y= 5, mapped pin D8
if (0x40u & p[12]) pins_d |= 0x80; // x= 6, y= 6, mapped pin D7
if (0x40u & p[16]) pins_d |= 0x20; // x= 6, y= 8, mapped pin D5
pins_d |= (0x10u & p[ 0]); // x= 4, y= 0, mapped pin D4 pins_d |= (0x10u & p[ 0]); // x= 4, y= 0, mapped pin D4
pins_d |= (0x40u & p[12]) << 1; // x= 6, y= 6, mapped pin D7
pins_d |= (0x40u & p[14]); // x= 6, y= 7, mapped pin D6 pins_d |= (0x40u & p[14]); // x= 6, y= 7, mapped pin D6
pins_d |= (0x40u & p[16]) >> 1; // x= 6, y= 8, mapped pin D5
break; break;
} }
} }

Loading…
Cancel
Save