// Convert "cell arrange" address to normal address.
// (c) Copyright 2007, Grazvydas "notaz" Ignotas

// 64 x32 x16 x8 x4 x4
static unsigned int cell_map(int celln)
{
  int col, row;

  switch ((celln >> 12) & 7) { // 0-0x8000
    case 0: // x32 cells
    case 1:
    case 2:
    case 3:
      col = celln >> 8;
      row = celln & 0xff;
      break;
    case 4: // x16
    case 5:
      col  = celln >> 7;
      row  = celln & 0x7f;
      row |= 0x10000 >> 8;
      break;
    case 6: // x8
      col  = celln >> 6;
      row  = celln & 0x3f;
      row |= 0x18000 >> 8;
      break;
    case 7: // x4
      col  = celln >> 5;
      row  = celln & 0x1f;
      row |= (celln & 0x7800) >> 6;
      break;
    default: // never happens, only here to make compiler happy
      col = row = 0;
      break;
  }

  return (col & 0x3f) + row*64;
}

