diff --git a/src/borg_hw/borg_hw_lolshield.c b/src/borg_hw/borg_hw_lolshield.c index 9329891..c37beaa 100644 --- a/src/borg_hw/borg_hw_lolshield.c +++ b/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]); // 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 if (plane < NUMPLANE) { switch(cycle) { case 0: - pins_b |= (0x02u & p[ 0]) << 6; // x= 1, y= 0, mapped pin D13 - pins_b |= (0x02u & p[ 2]) << 5; // x= 1, y= 1, mapped pin D12 - pins_b |= (0x02u & p[ 4]) << 4; // x= 1, y= 2, mapped pin D11 - pins_b |= (0x02u & p[ 6]) << 3; // x= 1, y= 3, mapped pin D10 - pins_e |= (0x02u & p[16]) << 2; // x= 1, y= 8, mapped pin D5 - pins_h |= (0x02u & p[ 8]) << 5; // x= 1, y= 4, mapped pin D9 - pins_h |= (0x02u & p[10]) << 4; // x= 1, y= 5, mapped pin D8 - pins_h |= (0x02u & p[12]) << 3; // x= 1, y= 6, mapped pin D7 - pins_h |= (0x02u & p[14]) << 2; // x= 1, y= 7, mapped pin D6 + if (0x02u & p[ 0]) pins_b |= 0x80; // x= 1, y= 0, mapped pin D13 + if (0x02u & p[ 2]) pins_b |= 0x40; // x= 1, y= 1, mapped pin D12 + if (0x02u & p[ 4]) pins_b |= 0x20; // x= 1, y= 2, mapped pin D11 + if (0x02u & p[ 6]) pins_b |= 0x10; // x= 1, y= 3, mapped pin D10 + if (0x02u & p[ 8]) pins_h |= 0x40; // x= 1, y= 4, mapped pin D9 + if (0x02u & p[10]) pins_h |= 0x20; // x= 1, y= 5, mapped pin D8 + if (0x02u & p[12]) pins_h |= 0x10; // x= 1, y= 6, mapped pin D7 + if (0x02u & p[14]) pins_h |= 0x08; // x= 1, y= 7, mapped pin D6 + if (0x02u & p[16]) pins_e |= 0x08; // x= 1, y= 8, mapped pin D5 break; case 1: - pins_b |= (0x08u & p[ 0]) << 4; // x= 3, y= 0, mapped pin D13 - pins_b |= (0x08u & p[ 2]) << 3; // x= 3, y= 1, mapped pin D12 - pins_b |= (0x08u & p[ 4]) << 2; // x= 3, y= 2, mapped pin D11 - pins_b |= (0x08u & p[ 6]) << 1; // x= 3, y= 3, mapped pin D10 - 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 + if (0x08u & p[ 0]) pins_b |= 0x80; // x= 3, y= 0, mapped pin D13 + if (0x08u & p[ 2]) pins_b |= 0x40; // x= 3, y= 1, mapped pin D12 + if (0x08u & p[ 4]) pins_b |= 0x20; // x= 3, y= 2, mapped pin D11 + 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_h |= (0x08u & p[14]); // x= 3, y= 7, mapped pin D6 break; case 2: - pins_b |= (0x20u & p[ 0]) << 2; // 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]); // 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[12]) >> 1; // x= 5, y= 6, mapped pin D7 - pins_h |= (0x20u & p[14]) >> 2; // x= 5, y= 7, mapped pin D6 + if (0x20u & p[ 0]) pins_b |= 0x80; // x= 5, y= 0, mapped pin D13 + 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_h |= (0x20u & p[10]); // x= 5, y= 5, mapped pin D8 break; case 3: - pins_b |= (0x20u & p[ 1]) << 2; // 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]); // 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[13]) >> 1; // x=13, y= 6, mapped pin D7 - pins_h |= (0x20u & p[15]) >> 2; // x=13, y= 7, mapped pin D6 + if (0x01u & p[16]) pins_e |= 0x10; // x= 0, y= 8, mapped pin D2 + 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_h |= (0x20u & p[11]); // x=13, y= 5, mapped pin D8 break; case 4: - pins_b |= (0x10u & p[ 1]) << 3; // x=12, y= 0, mapped pin D13 - pins_b |= (0x10u & p[ 3]) << 2; // 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]); // 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 + if (0x01u & p[14]) pins_e |= 0x10; // x= 0, y= 7, mapped pin D2 + if (0x04u & p[14]) pins_e |= 0x20; // x= 2, y= 7, mapped pin D3 + 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_h |= (0x10u & p[13]); // x=12, y= 6, mapped pin D7 break; case 5: - pins_b |= (0x08u & p[ 1]) << 4; // x=11, y= 0, mapped pin D13 - pins_b |= (0x08u & p[ 3]) << 3; // x=11, y= 1, mapped pin D12 - pins_b |= (0x08u & p[ 5]) << 2; // x=11, y= 2, mapped pin D11 - pins_b |= (0x08u & p[ 7]) << 1; // x=11, y= 3, mapped pin D10 - pins_e |= (0x01u & p[12]) << 4; // x= 0, y= 6, mapped pin D2 - pins_e |= (0x04u & p[12]) << 3; // x= 2, y= 6, mapped pin D3 - pins_e |= (0x10u & p[17]) >> 1; // x=12, y= 8, mapped pin D5 - pins_g |= (0x10u & p[12]) << 1; // x= 4, y= 6, mapped pin D4 - pins_h |= (0x08u & p[ 9]) << 3; // x=11, y= 4, mapped pin D9 - pins_h |= (0x08u & p[11]) << 2; // x=11, y= 5, mapped pin D8 - pins_h |= (0x10u & p[15]) >> 1; // x=12, y= 7, mapped pin D6 + if (0x01u & p[12]) pins_e |= 0x10; // x= 0, y= 6, mapped pin D2 + if (0x04u & p[12]) pins_e |= 0x20; // x= 2, y= 6, mapped pin D3 + if (0x08u & p[ 1]) pins_b |= 0x80; // x=11, y= 0, mapped pin D13 + if (0x08u & p[ 3]) pins_b |= 0x40; // x=11, y= 1, mapped pin D12 + if (0x08u & p[ 5]) pins_b |= 0x20; // x=11, y= 2, mapped pin D11 + if (0x08u & p[ 7]) pins_b |= 0x10; // x=11, y= 3, mapped pin D10 + if (0x08u & p[ 9]) pins_h |= 0x40; // x=11, y= 4, mapped pin D9 + if (0x08u & p[11]) pins_h |= 0x20; // x=11, y= 5, mapped pin D8 + if (0x10u & p[12]) pins_g |= 0x20; // x= 4, y= 6, mapped pin D4 + if (0x10u & p[15]) pins_h |= 0x08; // x=12, y= 7, mapped pin D6 + if (0x10u & p[17]) pins_e |= 0x08; // x=12, y= 8, mapped pin D5 break; case 6: - pins_b |= (0x04u & p[ 1]) << 5; // x=10, y= 0, mapped pin D13 - pins_b |= (0x04u & p[ 3]) << 4; // x=10, y= 1, mapped pin D12 - pins_b |= (0x04u & p[ 5]) << 3; // x=10, y= 2, mapped pin D11 - pins_b |= (0x04u & p[ 7]) << 2; // x=10, y= 3, mapped pin D10 - pins_e |= (0x01u & p[10]) << 4; // x= 0, y= 5, mapped pin D2 - pins_e |= (0x04u & p[10]) << 3; // x= 2, y= 5, mapped pin D3 - 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 + if (0x01u & p[10]) pins_e |= 0x10; // x= 0, y= 5, mapped pin D2 + if (0x04u & p[ 1]) pins_b |= 0x80; // x=10, y= 0, mapped pin D13 + if (0x04u & p[ 3]) pins_b |= 0x40; // x=10, y= 1, mapped pin D12 + if (0x04u & p[ 5]) pins_b |= 0x20; // x=10, y= 2, mapped pin D11 + if (0x04u & p[ 7]) pins_b |= 0x10; // x=10, y= 3, mapped pin D10 + 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_h |= (0x08u & p[15]); // x=11, y= 7, mapped pin D6 break; case 7: - pins_b |= (0x02u & p[ 1]) << 6; // x= 9, y= 0, mapped pin D13 - pins_b |= (0x02u & p[ 3]) << 5; // x= 9, y= 1, mapped pin D12 - pins_b |= (0x02u & p[ 5]) << 4; // x= 9, y= 2, mapped pin D11 - pins_b |= (0x02u & p[ 7]) << 3; // x= 9, y= 3, mapped pin D10 - pins_e |= (0x01u & p[ 8]) << 4; // x= 0, y= 4, mapped pin D2 - pins_e |= (0x04u & p[ 8]) << 3; // x= 2, y= 4, mapped pin D3 - pins_e |= (0x04u & p[17]) << 1; // x=10, y= 8, mapped pin D5 - pins_g |= (0x10u & p[ 8]) << 1; // x= 4, y= 4, mapped pin D4 - pins_h |= (0x04u & p[11]) << 3; // x=10, y= 5, mapped pin D8 - pins_h |= (0x04u & p[13]) << 2; // x=10, y= 6, mapped pin D7 - pins_h |= (0x04u & p[15]) << 1; // x=10, y= 7, mapped pin D6 + if (0x01u & p[ 8]) pins_e |= 0x10; // x= 0, y= 4, mapped pin D2 + if (0x02u & p[ 1]) pins_b |= 0x80; // x= 9, y= 0, mapped pin D13 + if (0x02u & p[ 3]) pins_b |= 0x40; // x= 9, y= 1, mapped pin D12 + if (0x02u & p[ 5]) pins_b |= 0x20; // x= 9, y= 2, mapped pin D11 + if (0x02u & p[ 7]) pins_b |= 0x10; // x= 9, y= 3, mapped pin D10 + if (0x04u & p[ 8]) pins_e |= 0x20; // x= 2, y= 4, mapped pin D3 + if (0x04u & p[11]) pins_h |= 0x20; // x=10, y= 5, mapped pin D8 + if (0x04u & p[13]) pins_h |= 0x10; // x=10, y= 6, mapped pin D7 + if (0x04u & p[15]) pins_h |= 0x08; // x=10, y= 7, mapped pin D6 + if (0x04u & p[17]) pins_e |= 0x08; // x=10, y= 8, mapped pin D5 + if (0x10u & p[ 8]) pins_g |= 0x20; // x= 4, y= 4, mapped pin D4 break; case 8: - pins_b |= (0x01u & p[ 1]) << 7; // x= 8, y= 0, mapped pin D13 - pins_b |= (0x01u & p[ 3]) << 6; // x= 8, y= 1, mapped pin D12 - pins_b |= (0x01u & p[ 5]) << 5; // x= 8, y= 2, mapped pin D11 - pins_e |= (0x01u & p[ 6]) << 4; // x= 0, y= 3, mapped pin D2 - pins_e |= (0x02u & p[17]) << 2; // x= 9, y= 8, mapped pin D5 - pins_e |= (0x04u & p[ 6]) << 3; // x= 2, y= 3, mapped pin D3 - pins_g |= (0x10u & p[ 6]) << 1; // x= 4, y= 3, mapped pin D4 - pins_h |= (0x02u & p[ 9]) << 5; // x= 9, y= 4, mapped pin D9 - pins_h |= (0x02u & p[11]) << 4; // x= 9, y= 5, mapped pin D8 - pins_h |= (0x02u & p[13]) << 3; // x= 9, y= 6, mapped pin D7 - pins_h |= (0x02u & p[15]) << 2; // x= 9, y= 7, mapped pin D6 + if (0x01u & p[ 1]) pins_b |= 0x80; // x= 8, y= 0, mapped pin D13 + if (0x01u & p[ 3]) pins_b |= 0x40; // x= 8, y= 1, mapped pin D12 + if (0x01u & p[ 5]) pins_b |= 0x20; // x= 8, y= 2, mapped pin D11 + if (0x01u & p[ 6]) pins_e |= 0x10; // x= 0, y= 3, mapped pin D2 + if (0x02u & p[ 9]) pins_h |= 0x40; // x= 9, y= 4, mapped pin D9 + if (0x02u & p[11]) pins_h |= 0x20; // x= 9, y= 5, mapped pin D8 + if (0x02u & p[13]) pins_h |= 0x10; // x= 9, y= 6, mapped pin D7 + if (0x02u & p[15]) pins_h |= 0x08; // x= 9, y= 7, mapped pin D6 + if (0x02u & p[17]) pins_e |= 0x08; // x= 9, y= 8, mapped pin D5 + if (0x04u & p[ 6]) pins_e |= 0x20; // x= 2, y= 3, mapped pin D3 + if (0x10u & p[ 6]) pins_g |= 0x20; // x= 4, y= 3, mapped pin D4 break; case 9: - pins_b |= (0x01u & p[ 7]) << 4; // x= 8, y= 3, mapped pin D10 - 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 + 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 break; case 10: - pins_b |= (0x40u & p[ 0]) << 1; // x= 6, y= 0, mapped pin D13 - pins_b |= (0x80u & p[ 4]) >> 2; // x= 7, y= 2, mapped pin D11 - pins_b |= (0x80u & p[ 6]) >> 3; // x= 7, y= 3, mapped pin D10 - pins_e |= (0x01u & p[ 2]) << 4; // x= 0, y= 1, mapped pin D2 - pins_e |= (0x04u & p[ 2]) << 3; // x= 2, y= 1, mapped pin D3 - pins_e |= (0x80u & p[16]) >> 4; // x= 7, y= 8, mapped pin D5 - pins_g |= (0x10u & p[ 2]) << 1; // x= 4, y= 1, mapped pin D4 - pins_h |= (0x80u & p[ 8]) >> 1; // x= 7, y= 4, mapped pin D9 - pins_h |= (0x80u & p[10]) >> 2; // x= 7, y= 5, mapped pin D8 - pins_h |= (0x80u & p[12]) >> 3; // x= 7, y= 6, mapped pin D7 - pins_h |= (0x80u & p[14]) >> 4; // x= 7, y= 7, mapped pin D6 + if (0x01u & p[ 2]) pins_e |= 0x10; // x= 0, y= 1, mapped pin D2 + if (0x04u & p[ 2]) pins_e |= 0x20; // x= 2, y= 1, mapped pin D3 + if (0x10u & p[ 2]) pins_g |= 0x20; // x= 4, y= 1, mapped pin D4 + if (0x40u & p[ 0]) pins_b |= 0x80; // x= 6, y= 0, mapped pin D13 + if (0x80u & p[ 4]) pins_b |= 0x20; // x= 7, y= 2, mapped pin D11 + if (0x80u & p[ 6]) pins_b |= 0x10; // x= 7, y= 3, mapped pin D10 + if (0x80u & p[ 8]) pins_h |= 0x40; // x= 7, y= 4, mapped pin D9 + if (0x80u & p[10]) pins_h |= 0x20; // x= 7, y= 5, mapped pin D8 + if (0x80u & p[12]) pins_h |= 0x10; // x= 7, y= 6, mapped pin D7 + if (0x80u & p[14]) pins_h |= 0x08; // x= 7, y= 7, mapped pin D6 + if (0x80u & p[16]) pins_e |= 0x08; // x= 7, y= 8, mapped pin D5 break; case 11: - 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[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 + 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_h |= (0x40u & p[ 8]); // x= 6, y= 4, mapped pin D9 break; } } @@ -495,160 +493,158 @@ static void compose_cycle(uint8_t const cycle, uint8_t plane) { uint8_t pins_e = sink_e = pgm_read_byte(&sink_e_cycle[cycle]); // convert Borgware-2D framebuffer to LoL Shield cycles on Arduino Leonardo - // (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 if (plane < NUMPLANE) { switch(cycle) { case 0: - pins_b |= (0x02u & p[ 4]) << 6; // x= 1, y= 2, mapped pin D11 - pins_b |= (0x02u & p[ 6]) << 5; // x= 1, y= 3, mapped pin D10 - pins_b |= (0x02u & p[ 8]) << 4; // x= 1, y= 4, mapped pin D9 - pins_b |= (0x02u & p[10]) << 3; // x= 1, y= 5, mapped pin D8 - pins_c |= (0x02u & p[ 0]) << 6; // x= 1, y= 0, mapped pin D13 - pins_c |= (0x02u & p[16]) << 5; // x= 1, y= 8, mapped pin D5 - pins_d |= (0x02u & p[ 2]) << 5; // x= 1, y= 1, mapped pin D12 - pins_d |= (0x02u & p[14]) << 6; // x= 1, y= 7, mapped pin D6 - pins_e |= (0x02u & p[12]) << 5; // x= 1, y= 6, mapped pin D7 + if (0x02u & p[ 0]) pins_c |= 0x80; // x= 1, y= 0, mapped pin D13 + if (0x02u & p[ 2]) pins_d |= 0x40; // x= 1, y= 1, mapped pin D12 + if (0x02u & p[ 4]) pins_b |= 0x80; // x= 1, y= 2, mapped pin D11 + if (0x02u & p[ 6]) pins_b |= 0x40; // x= 1, y= 3, mapped pin D10 + if (0x02u & p[ 8]) pins_b |= 0x20; // x= 1, y= 4, mapped pin D9 + if (0x02u & p[10]) pins_b |= 0x10; // x= 1, y= 5, mapped pin D8 + if (0x02u & p[12]) pins_e |= 0x40; // x= 1, y= 6, mapped pin D7 + if (0x02u & p[14]) pins_d |= 0x80; // x= 1, y= 7, mapped pin D6 + if (0x02u & p[16]) pins_c |= 0x40; // x= 1, y= 8, mapped pin D5 break; case 1: - pins_b |= (0x08u & p[ 4]) << 4; // x= 3, y= 2, mapped pin D11 - pins_b |= (0x08u & p[ 6]) << 3; // 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]) << 1; // x= 3, y= 5, mapped pin D8 - pins_c |= (0x08u & p[ 0]) << 4; // x= 3, y= 0, mapped pin D13 - pins_c |= (0x08u & p[16]) << 3; // x= 3, y= 8, mapped pin D5 - pins_d |= (0x08u & p[ 2]) << 3; // x= 3, y= 1, mapped pin D12 - pins_d |= (0x08u & p[14]) << 4; // x= 3, y= 7, mapped pin D6 - pins_e |= (0x08u & p[12]) << 3; // x= 3, y= 6, mapped pin D7 + if (0x08u & p[ 0]) pins_c |= 0x80; // x= 3, y= 0, mapped pin D13 + if (0x08u & p[ 2]) pins_d |= 0x40; // x= 3, y= 1, mapped pin D12 + if (0x08u & p[ 4]) pins_b |= 0x80; // x= 3, y= 2, mapped pin D11 + if (0x08u & p[ 6]) pins_b |= 0x40; // x= 3, y= 3, mapped pin D10 + if (0x08u & p[ 8]) pins_b |= 0x20; // x= 3, y= 4, mapped pin D9 + if (0x08u & p[10]) pins_b |= 0x10; // x= 3, y= 5, mapped pin D8 + if (0x08u & p[12]) pins_e |= 0x40; // x= 3, y= 6, mapped pin D7 + if (0x08u & p[14]) pins_d |= 0x80; // x= 3, y= 7, mapped pin D6 + if (0x08u & p[16]) pins_c |= 0x40; // x= 3, y= 8, mapped pin D5 break; case 2: - pins_b |= (0x20u & p[ 4]) << 2; // x= 5, y= 2, mapped pin D11 - pins_b |= (0x20u & p[ 6]) << 1; // x= 5, y= 3, mapped pin D10 - 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 + if (0x20u & p[ 0]) pins_c |= 0x80; // x= 5, y= 0, mapped pin D13 + 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 break; case 3: - pins_b |= (0x20u & p[ 5]) << 2; // x=13, y= 2, mapped pin D11 - pins_b |= (0x20u & p[ 7]) << 1; // x=13, y= 3, mapped pin D10 - 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 |= (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 + if (0x01u & p[16]) pins_d |= 0x02; // x= 0, y= 8, mapped pin D2 + 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_d |= (0x10u & p[16]); // x= 4, y= 8, mapped pin D4 break; case 4: - pins_b |= (0x10u & p[ 5]) << 3; // 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]) << 1; // x=12, y= 4, mapped pin D9 - 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_e |= (0x10u & p[13]) << 2; // x=12, y= 6, mapped pin D7 + if (0x01u & p[14]) pins_d |= 0x02; // x= 0, y= 7, mapped pin D2 + if (0x04u & p[14]) pins_d |= 0x01; // x= 2, y= 7, mapped pin D3 + 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_d |= (0x10u & p[14]); // x= 4, y= 7, mapped pin D4 break; case 5: - pins_b |= (0x08u & p[ 5]) << 4; // x=11, y= 2, mapped pin D11 - pins_b |= (0x08u & p[ 7]) << 3; // 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]) << 1; // x=11, y= 5, mapped pin D8 - pins_c |= (0x08u & p[ 1]) << 4; // x=11, y= 0, mapped pin D13 - pins_c |= (0x10u & p[17]) << 2; // x=12, y= 8, mapped pin D5 - pins_d |= (0x01u & p[12]) << 1; // x= 0, y= 6, mapped pin D2 - pins_d |= (0x04u & p[12]) >> 2; // x= 2, y= 6, mapped pin D3 - pins_d |= (0x08u & p[ 3]) << 3; // x=11, y= 1, mapped pin D12 - 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 + if (0x01u & p[12]) pins_d |= 0x02; // x= 0, y= 6, mapped pin D2 + if (0x04u & p[12]) pins_d |= 0x01; // x= 2, y= 6, mapped pin D3 + if (0x08u & p[ 1]) pins_c |= 0x80; // x=11, y= 0, mapped pin D13 + if (0x08u & p[ 3]) pins_d |= 0x40; // x=11, y= 1, mapped pin D12 + if (0x08u & p[ 5]) pins_b |= 0x80; // x=11, y= 2, mapped pin D11 + if (0x08u & p[ 7]) pins_b |= 0x40; // x=11, y= 3, mapped pin D10 + if (0x08u & p[ 9]) pins_b |= 0x20; // x=11, y= 4, mapped pin D9 + if (0x08u & p[11]) pins_b |= 0x10; // x=11, y= 5, mapped pin D8 + 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 break; case 6: - pins_b |= (0x04u & p[ 5]) << 5; // x=10, y= 2, mapped pin D11 - pins_b |= (0x04u & p[ 7]) << 4; // x=10, y= 3, mapped pin D10 - pins_b |= (0x04u & p[ 9]) << 3; // x=10, y= 4, mapped pin D9 - pins_c |= (0x04u & p[ 1]) << 5; // x=10, y= 0, mapped pin D13 - pins_c |= (0x08u & p[17]) << 3; // x=11, y= 8, mapped pin D5 - pins_d |= (0x01u & p[10]) << 1; // x= 0, y= 5, mapped pin D2 - pins_d |= (0x04u & p[ 3]) << 4; // x=10, y= 1, mapped pin D12 - pins_d |= (0x04u & p[10]) >> 2; // x= 2, y= 5, mapped pin D3 - pins_d |= (0x08u & p[15]) << 4; // x=11, y= 7, mapped pin D6 - 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 + if (0x01u & p[10]) pins_d |= 0x02; // x= 0, y= 5, mapped pin D2 + if (0x04u & p[ 1]) pins_c |= 0x80; // x=10, y= 0, mapped pin D13 + if (0x04u & p[ 3]) pins_d |= 0x40; // x=10, y= 1, mapped pin D12 + if (0x04u & p[ 5]) pins_b |= 0x80; // x=10, y= 2, mapped pin D11 + if (0x04u & p[ 7]) pins_b |= 0x40; // x=10, y= 3, mapped pin D10 + if (0x04u & p[ 9]) pins_b |= 0x20; // x=10, y= 4, mapped pin D9 + if (0x04u & p[10]) pins_d |= 0x01; // x= 2, y= 5, mapped pin D3 + if (0x08u & p[13]) pins_e |= 0x40; // x=11, y= 6, mapped pin D7 + 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 break; case 7: - pins_b |= (0x02u & p[ 5]) << 6; // x= 9, y= 2, mapped pin D11 - pins_b |= (0x02u & p[ 7]) << 5; // x= 9, y= 3, mapped pin D10 - pins_b |= (0x04u & p[11]) << 2; // x=10, y= 5, mapped pin D8 - pins_c |= (0x02u & p[ 1]) << 6; // x= 9, y= 0, mapped pin D13 - pins_c |= (0x04u & p[17]) << 4; // x=10, y= 8, mapped pin D5 - pins_d |= (0x01u & p[ 8]) << 1; // x= 0, y= 4, mapped pin D2 - pins_d |= (0x02u & p[ 3]) << 5; // x= 9, y= 1, mapped pin D12 - pins_d |= (0x04u & p[ 8]) >> 2; // x= 2, y= 4, mapped pin D3 - pins_d |= (0x04u & p[15]) << 5; // x=10, y= 7, mapped pin D6 - 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 + if (0x01u & p[ 8]) pins_d |= 0x02; // x= 0, y= 4, mapped pin D2 + if (0x02u & p[ 1]) pins_c |= 0x80; // x= 9, y= 0, mapped pin D13 + if (0x02u & p[ 3]) pins_d |= 0x40; // x= 9, y= 1, mapped pin D12 + if (0x02u & p[ 5]) pins_b |= 0x80; // x= 9, y= 2, mapped pin D11 + if (0x02u & p[ 7]) pins_b |= 0x40; // x= 9, y= 3, mapped pin D10 + if (0x04u & p[ 8]) pins_d |= 0x01; // x= 2, y= 4, mapped pin D3 + if (0x04u & p[11]) pins_b |= 0x10; // x=10, y= 5, mapped pin D8 + if (0x04u & p[13]) pins_e |= 0x40; // x=10, y= 6, mapped pin D7 + 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 break; case 8: - pins_b |= (0x01u & p[ 5]) << 7; // x= 8, y= 2, mapped pin D11 - pins_b |= (0x02u & p[ 9]) << 4; // x= 9, y= 4, mapped pin D9 - pins_b |= (0x02u & p[11]) << 3; // x= 9, y= 5, mapped pin D8 - pins_c |= (0x01u & p[ 1]) << 7; // x= 8, y= 0, mapped pin D13 - pins_c |= (0x02u & p[17]) << 5; // x= 9, y= 8, mapped pin D5 - pins_d |= (0x01u & p[ 3]) << 6; // x= 8, y= 1, mapped pin D12 - pins_d |= (0x01u & p[ 6]) << 1; // x= 0, y= 3, mapped pin D2 - pins_d |= (0x02u & p[15]) << 6; // x= 9, y= 7, mapped pin D6 - pins_d |= (0x04u & p[ 6]) >> 2; // x= 2, y= 3, mapped pin D3 - 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 + if (0x01u & p[ 1]) pins_c |= 0x80; // x= 8, y= 0, mapped pin D13 + if (0x01u & p[ 3]) pins_d |= 0x40; // x= 8, y= 1, mapped pin D12 + if (0x01u & p[ 5]) pins_b |= 0x80; // x= 8, y= 2, mapped pin D11 + if (0x01u & p[ 6]) pins_d |= 0x02; // x= 0, y= 3, mapped pin D2 + if (0x02u & p[ 9]) pins_b |= 0x20; // x= 9, y= 4, mapped pin D9 + if (0x02u & p[11]) pins_b |= 0x10; // x= 9, y= 5, mapped pin D8 + if (0x02u & p[13]) pins_e |= 0x40; // x= 9, y= 6, mapped pin D7 + if (0x02u & p[15]) pins_d |= 0x80; // x= 9, y= 7, mapped pin D6 + 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 break; case 9: - pins_b |= (0x01u & p[ 7]) << 6; // x= 8, y= 3, mapped pin D10 - pins_b |= (0x01u & p[ 9]) << 5; // x= 8, y= 4, mapped pin D9 - pins_b |= (0x01u & p[11]) << 4; // x= 8, y= 5, mapped pin D8 - pins_c |= (0x01u & p[17]) << 6; // x= 8, y= 8, mapped pin D5 - 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 |= (0x80u & p[ 2]) >> 1; // x= 7, y= 1, mapped pin D12 - pins_e |= (0x01u & p[13]) << 6; // x= 8, y= 6, mapped pin D7 + if (0x01u & p[ 4]) pins_d |= 0x02; // x= 0, y= 2, mapped pin D2 + if (0x01u & p[ 7]) pins_b |= 0x40; // x= 8, y= 3, mapped pin D10 + if (0x01u & p[ 9]) pins_b |= 0x20; // x= 8, y= 4, mapped pin D9 + 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_d |= (0x10u & p[ 4]); // x= 4, y= 2, mapped pin D4 break; case 10: - 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 |= (0x80u & p[14]); // x= 7, y= 7, mapped pin D6 - pins_e |= (0x80u & p[12]) >> 1; // x= 7, y= 6, mapped pin D7 + 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_d |= (0x10u & p[ 2]); // x= 4, y= 1, mapped pin D4 + pins_d |= (0x80u & p[14]); // x= 7, y= 7, mapped pin D6 break; case 11: - pins_b |= (0x40u & p[ 4]) << 1; // x= 6, y= 2, mapped pin D11 - 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_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 |= (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 + 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_c |= (0x40u & p[16]); // x= 6, y= 8, mapped pin D5 + 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_e |= (0x40u & p[12]); // x= 6, y= 6, mapped pin D7 break; } } @@ -689,160 +685,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]); // 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 if (plane < NUMPLANE) { switch(cycle) { case 0: - pins_b |= (0x02u & p[ 0]) << 4; // x= 1, y= 0, mapped pin D13 - pins_b |= (0x02u & p[ 2]) << 3; // x= 1, y= 1, mapped pin D12 - pins_b |= (0x02u & p[ 4]) << 2; // x= 1, y= 2, mapped pin D11 - pins_b |= (0x02u & p[ 6]) << 1; // x= 1, y= 3, mapped pin D10 - 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 + if (0x02u & p[ 0]) pins_b |= 0x20; // x= 1, y= 0, mapped pin D13 + if (0x02u & p[ 2]) pins_b |= 0x10; // x= 1, y= 1, mapped pin D12 + if (0x02u & p[ 4]) pins_b |= 0x08; // x= 1, y= 2, mapped pin D11 + 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 break; case 1: - pins_b |= (0x08u & p[ 0]) << 2; // x= 3, y= 0, mapped pin D13 - pins_b |= (0x08u & p[ 2]) << 1; // x= 3, y= 1, mapped pin D12 - 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 + if (0x08u & p[ 0]) pins_b |= 0x20; // x= 3, y= 0, mapped pin D13 + 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 break; case 2: - 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 + 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_d |= (0x20u & p[16]); // x= 5, y= 8, mapped pin D5 break; case 3: - 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 |= (0x20u & p[13]) << 2; // x=13, y= 6, mapped pin D7 - pins_d |= (0x20u & p[15]) << 1; // x=13, y= 7, mapped pin D6 + 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_d |= (0x10u & p[16]); // x= 4, y= 8, mapped pin D4 break; case 4: - pins_b |= (0x10u & p[ 1]) << 1; // x=12, y= 0, mapped pin D13 - 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 |= (0x20u & p[17]); // x=13, y= 8, mapped pin D5 + 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_d |= (0x10u & p[14]); // x= 4, y= 7, mapped pin D4 + pins_d |= (0x20u & p[17]); // x=13, y= 8, mapped pin D5 break; case 5: - pins_b |= (0x08u & p[ 1]) << 2; // x=11, y= 0, mapped pin D13 - pins_b |= (0x08u & p[ 3]) << 1; // x=11, y= 1, mapped pin D12 - 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[15]) << 2; // x=12, y= 7, mapped pin D6 - pins_d |= (0x10u & p[17]) << 1; // x=12, y= 8, mapped pin D5 + if (0x01u & p[12]) pins_d |= 0x04; // x= 0, y= 6, mapped pin D2 + 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_d |= (0x10u & p[12]); // x= 4, y= 6, mapped pin D4 break; case 6: - pins_b |= (0x04u & p[ 1]) << 3; // x=10, y= 0, mapped pin D13 - pins_b |= (0x04u & p[ 3]) << 2; // x=10, y= 1, mapped pin D12 - pins_b |= (0x04u & p[ 5]) << 1; // x=10, y= 2, mapped pin D11 - 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 + if (0x01u & p[10]) pins_d |= 0x04; // x= 0, y= 5, mapped pin D2 + if (0x04u & p[ 1]) pins_b |= 0x20; // x=10, y= 0, mapped pin D13 + 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_d |= (0x10u & p[10]); // x= 4, y= 5, mapped pin D4 break; case 7: - pins_b |= (0x02u & p[ 1]) << 4; // x= 9, y= 0, mapped pin D13 - pins_b |= (0x02u & p[ 3]) << 3; // x= 9, y= 1, mapped pin D12 - pins_b |= (0x02u & p[ 5]) << 2; // x= 9, y= 2, mapped pin D11 - pins_b |= (0x02u & p[ 7]) << 1; // x= 9, y= 3, mapped pin D10 - pins_b |= (0x04u & p[11]) >> 2; // x=10, y= 5, mapped pin D8 - pins_d |= (0x01u & p[ 8]) << 2; // x= 0, y= 4, mapped pin D2 - pins_d |= (0x04u & p[ 8]) << 1; // x= 2, y= 4, mapped pin D3 - pins_d |= (0x04u & p[13]) << 5; // x=10, y= 6, mapped pin D7 - pins_d |= (0x04u & p[15]) << 4; // x=10, y= 7, mapped pin D6 - pins_d |= (0x04u & p[17]) << 3; // x=10, y= 8, mapped pin D5 - pins_d |= (0x10u & p[ 8]); // x= 4, y= 4, mapped pin D4 + if (0x01u & p[ 8]) pins_d |= 0x04; // x= 0, y= 4, mapped pin D2 + if (0x02u & p[ 1]) pins_b |= 0x20; // x= 9, y= 0, mapped pin D13 + if (0x02u & p[ 3]) pins_b |= 0x10; // x= 9, y= 1, mapped pin D12 + if (0x02u & p[ 5]) pins_b |= 0x08; // x= 9, y= 2, mapped pin D11 + if (0x02u & p[ 7]) pins_b |= 0x04; // x= 9, y= 3, mapped pin D10 + if (0x04u & p[ 8]) pins_d |= 0x08; // x= 2, y= 4, mapped pin D3 + if (0x04u & p[11]) pins_b |= 0x01; // x=10, y= 5, mapped pin D8 + if (0x04u & p[13]) pins_d |= 0x80; // x=10, y= 6, mapped pin D7 + if (0x04u & p[15]) pins_d |= 0x40; // x=10, y= 7, mapped pin D6 + 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 break; case 8: - pins_b |= (0x01u & p[ 1]) << 5; // x= 8, y= 0, mapped pin D13 - pins_b |= (0x01u & p[ 3]) << 4; // x= 8, y= 1, mapped pin D12 - pins_b |= (0x01u & p[ 5]) << 3; // x= 8, y= 2, mapped pin D11 - 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 + if (0x01u & p[ 1]) pins_b |= 0x20; // x= 8, y= 0, mapped pin D13 + if (0x01u & p[ 3]) pins_b |= 0x10; // x= 8, y= 1, mapped pin D12 + 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_d |= (0x10u & p[ 6]); // x= 4, y= 3, mapped pin D4 break; case 9: - pins_b |= (0x01u & p[ 7]) << 2; // x= 8, y= 3, mapped pin D10 - pins_b |= (0x01u & p[ 9]) << 1; // x= 8, y= 4, mapped pin D9 - 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 + if (0x01u & p[ 4]) pins_d |= 0x04; // x= 0, y= 2, mapped pin D2 + 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_d |= (0x10u & p[ 4]); // x= 4, y= 2, mapped pin D4 break; case 10: - pins_b |= (0x40u & p[ 0]) >> 1; // x= 6, y= 0, mapped pin D13 - pins_b |= (0x80u & p[ 4]) >> 4; // x= 7, y= 2, mapped pin D11 - pins_b |= (0x80u & p[ 6]) >> 5; // x= 7, y= 3, mapped pin D10 - pins_b |= (0x80u & p[ 8]) >> 6; // x= 7, y= 4, mapped pin D9 - pins_b |= (0x80u & p[10]) >> 7; // x= 7, y= 5, mapped pin D8 - pins_d |= (0x01u & p[ 2]) << 2; // x= 0, y= 1, mapped pin D2 - pins_d |= (0x04u & p[ 2]) << 1; // x= 2, y= 1, mapped pin D3 - 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[14]) >> 1; // x= 7, y= 7, mapped pin D6 - pins_d |= (0x80u & p[16]) >> 2; // x= 7, y= 8, mapped pin D5 + if (0x01u & p[ 2]) pins_d |= 0x04; // x= 0, y= 1, mapped pin D2 + if (0x04u & p[ 2]) pins_d |= 0x08; // x= 2, y= 1, mapped pin D3 + if (0x40u & p[ 0]) pins_b |= 0x20; // x= 6, y= 0, mapped pin D13 + if (0x80u & p[ 4]) pins_b |= 0x08; // x= 7, y= 2, mapped pin D11 + if (0x80u & p[ 6]) pins_b |= 0x04; // x= 7, y= 3, mapped pin D10 + if (0x80u & p[ 8]) pins_b |= 0x02; // x= 7, y= 4, mapped pin D9 + 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 |= (0x80u & p[12]); // x= 7, y= 6, mapped pin D7 break; case 11: - pins_b |= (0x40u & p[ 2]) >> 2; // x= 6, y= 1, mapped pin D12 - pins_b |= (0x40u & p[ 4]) >> 3; // x= 6, y= 2, mapped pin D11 - pins_b |= (0x40u & p[ 6]) >> 4; // x= 6, y= 3, mapped pin D10 - pins_b |= (0x40u & p[ 8]) >> 5; // x= 6, y= 4, mapped pin D9 - pins_b |= (0x40u & p[10]) >> 6; // x= 6, y= 5, mapped pin D8 - pins_d |= (0x01u & p[ 0]) << 2; // x= 0, y= 0, mapped pin D2 - pins_d |= (0x04u & p[ 0]) << 1; // x= 2, y= 0, mapped pin D3 - 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[16]) >> 1; // x= 6, y= 8, mapped pin D5 + if (0x01u & p[ 0]) pins_d |= 0x04; // x= 0, y= 0, mapped pin D2 + if (0x04u & p[ 0]) pins_d |= 0x08; // x= 2, y= 0, mapped pin D3 + if (0x40u & p[ 2]) pins_b |= 0x10; // x= 6, y= 1, mapped pin D12 + if (0x40u & p[ 4]) pins_b |= 0x08; // x= 6, y= 2, mapped pin D11 + if (0x40u & p[ 6]) pins_b |= 0x04; // x= 6, y= 3, mapped pin D10 + if (0x40u & p[ 8]) pins_b |= 0x02; // x= 6, y= 4, mapped pin D9 + 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 |= (0x40u & p[14]); // x= 6, y= 7, mapped pin D6 break; } }