// 
  Bit8u SUPPRESS_WRITER(const void *_data, const void *_mask, Bit16u xx, Bit32u yy)
  {
    // [bp+06] -> data
    // [bp+0A] -> mask
    // [bp+0E] -> xx
    // [bp+10] -> yy
    const Bit8u *data = (const Bit8u *)_data;
    const Bit8u *mask = (const Bit8u *)_mask;
    //^2066:000F
    Bit32u bp0a = 0;
    Bit8u bp04 = _4976_5254; // queued nibble
    Bit8u bp05 = _4976_524e; // current bit position
    Bit32u bp0e = 0;
    //^2066:0034
    while (!(bp0e >= yy)) {
      //^2066:0037
      Bit16u si = 0;
      //^2066:0039
      while (!(si >= xx)) {
        //^2066:003C
        Bit8u data_nibble = *data; // [bp-03]
        data++;
        Bit8u mask_nibble = *mask; // [bp-02]
        mask++;
        //^2066:0054
        if (mask_nibble != 0) {
          //^2066:005D
          __int8 bp01 = 0x07;
          //^2066:0061
          while (bp01 >= 0) {
            //^2066:0063
            if (((1 << bp01) & mask_nibble) != 0) {
              //^2066:0074
              bp04 <<= 1;
              //^2066:0077
              if (((1 << bp01) & data_nibble) != 0) {
                bp04 |= 1;
              }
              //^2066:008C
              bp0a++;
              //^2066:0094
              bp05 = bp05 + 1;
              //^2066:009C
              if (bp05 == 8) {
                //^2066:00A0
                Bit8u bp0f = bp04;
                if (FILE_WRITE(_4976_394e, 1, &bp0f) == 0)
                  return 1;
                //^2066:00C4
                bp05 = bp04 = 0;
              }
            }
            //^2066:00CC
            bp01--;
            //^2066:00CF
          }
        }
        //^2066:00D5
        si++;
        //^2066:00D6
      }
      //^2066:00DE
      data -= xx;
      bp0e++;
      //^2066:00EC
    }
    //^2066:0104
    _4976_5254 = bp04;
    _4976_524e = bp05;
    _4976_5258 += bp0a;
    return 0;
  }