uint8_t frame[8][2];
/* x : +ve right ; columns ; (0,15)
 * y : +ve down  ; rows    ; (1,8)*/
int8_t x=1, y=3, py=3, cy=3, dx=-1, dy=1;

void spi_transfer(uint8_t data)
{
  SPDR = data;
  while(!bitRead(SPSR, SPIF));
}

void draw_frame() {
  for (int row=1; row<=8; row++)
  {
    /* Enable CS */
    bitClear(PORTB, 2);
    spi_transfer(row);
    spi_transfer(frame[row-1][0]);
    spi_transfer(row);
    spi_transfer(frame[row-1][1]);
    /* Disable CS */
    bitSet(PORTB, 2);
  }
}

void clear_frame() {
  for (int row=1; row<=8; row++)
  {
    frame[row-1][0] = frame[row-1][1] = 0x00; 
  }

  draw_frame();
}

void setup() {
  /* Initialize SPI */
  bitSet(SPCR, SPE); /* SPI Enable */
  bitSet(SPCR, MSTR); /* Master */

  /* Configure SPI CS pin (PB2) */
  bitSet(DDRB, 2);
  bitSet(PORTB, 2);

  /* Configure pin change interrupt on pins PD6 (PCINT22) and PD7 (PCINT23) */
  DDRD = 0x00; /* Configure pins as input */
  PORTD = 0xFF; /* Enable pull up  resistors */
  bitSet(PCICR, PCIE2); /* Enable PCINT[23:16] */
  bitSet(PCMSK2, PCINT22); /* Unmask pin change interrupt on PD6*/
  bitSet(PCMSK2, PCINT23); /* Unmask pin change interrupt on PD7 */

  /* Timer 1 Configuration */
  TCCR1A = 0x00; /* Normal operation */
  TCCR1B = 0x00; 
  /* f1 = f_clk/64 = 16M/64 */
  /* T1 = 64/16 us = 4 us */
  bitSet(TCCR1B, CS10); /* 64 prescaler */ 
  bitSet(TCCR1B, CS11);
}

void update_player_paddle() {
  if (!bitRead(PIND, 7)) /* Paddle up */ py -= 1;
  if (!bitRead(PIND, 6)) /* Paddle down */ py += 1;

  if (py < 1) py = 1;
  if (py > 6) py = 6;
}

ISR(PCINT2_vect) {
  /* Push button debouncing */
  /* 50 ms = 50,000 us, Count = 50,000/4 = 12,500 */
  TCNT1 = 53035; /* 65535 - 12,500 */
  bitSet(TIMSK1, TOIE1); /* Enable overflow interrupt */
}

ISR(TIMER1_OVF_vect) {
  update_player_paddle();

  bitClear(TIMSK1, TOIE1); /* Disable overflow interrupt */
}

uint8_t count = 0;

void loop() {
  if (x==1) {
    if ((y < py) || (y > py+2)) {
      /* "GAME OVER!" */
      while(1);
    }
  }

  clear_frame();
  if (y==1) dy=1; else if (y==8) dy=-1;
  if (x==1) dx=1; else if (x==14) dx=-1;

  y = y + dy;
  x = x + dx;

  /* Computer Paddle AI */ 
  if (x > 7) cy = y;
  if (cy < 1) cy = 1;
  if (cy > 6) cy = 6;

  /* Ball */ 
  bitSet(frame[y-1][x/8], x%8); 
  /* Player Paddle */
  bitSet(frame[py-1][0], 0);
  bitSet(frame[py][0], 0);
  bitSet(frame[py+1][0], 0);
  /* Computer Paddle*/
  bitSet(frame[cy-1][1], 7);
  bitSet(frame[cy][1], 7);
  bitSet(frame[cy+1][1], 7);

  draw_frame(); 

  // update_player_paddle();
  delay(100);
  // update_player_paddle();
  delay(100);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
m1:V+
m1:GND
m1:DIN
m1:CS
m1:CLK
m1:V+.2
m1:GND.2
m1:DOUT
m1:CS.2
m1:CLK.2