Hi, > @@ -672,48 +678,71 @@ static void ati_mm_write(void *opaque, hwaddr addr, > case 0xf00 ... 0xfff: > /* read-only copy of PCI config space so ignore writes */ > break; > - case CUR_OFFSET: > - if (s->regs.cur_offset != (data & 0x87fffff0)) { > - s->regs.cur_offset = data & 0x87fffff0; > + case CUR_OFFSET ... CUR_OFFSET + 3: > + { > + uint32_t t = s->regs.cur_offset; > + > + ati_reg_write_offs(&t, addr - CUR_OFFSET, data, size); > + t &= 0x87fffff0; > + if (s->regs.cur_offset != t) { > + s->regs.cur_offset = t;
Repeated pattern. I'd suggest to add a "wmask" parameter to ati_reg_write_offs. Maybe also make it return true/false depending on whenever the value did change or not. cheers, Gerd