//
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;
}