Merge branch 'master' into publiceng

This commit is contained in:
Christian Kroll 2014-06-20 08:21:14 +02:00
commit 928b301dc4
1 changed files with 378 additions and 384 deletions

View File

@ -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
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[ 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
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
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_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
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
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_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
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
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_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
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
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_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
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
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[ 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;
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:
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[ 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
break;
}
}
@ -495,159 +493,157 @@ 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
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
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;
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
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_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
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
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_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
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
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
pins_d |= (0x10u & p[15]) << 3; // x=12, y= 7, mapped pin D6
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
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
pins_e |= (0x08u & p[13]) << 3; // x=11, y= 6, mapped pin D7
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
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
pins_e |= (0x04u & p[13]) << 4; // x=10, y= 6, mapped pin D7
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
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
pins_e |= (0x02u & p[13]) << 5; // x= 9, y= 6, mapped pin D7
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
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 |= (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
break;
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[ 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
break;
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[ 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
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
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
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;
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
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
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;
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[ 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
break;
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[ 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
break;
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[ 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
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
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_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
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
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_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
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
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
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_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
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
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_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
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
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
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;
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
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[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
break;
}
}