mirror of https://github.com/xemu-project/xemu.git
ati-vga: Fix indexed access to video memory
Coverity (CID 1399700) found that this was wrong so instead of trying to do it by hand use existing access functions that should work better. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Message-id: 20190318223842.427CB7456B2@zero.eik.bme.hu Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
ab8789987f
commit
339534d402
|
@ -235,12 +235,9 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr, unsigned int size)
|
|||
case MM_DATA ... MM_DATA + 3:
|
||||
/* indexed access to regs or memory */
|
||||
if (s->regs.mm_index & BIT(31)) {
|
||||
if (s->regs.mm_index <= s->vga.vram_size - size) {
|
||||
int i = size - 1;
|
||||
while (i >= 0) {
|
||||
val <<= 8;
|
||||
val |= s->vga.vram_ptr[s->regs.mm_index + i--];
|
||||
}
|
||||
uint32_t idx = s->regs.mm_index & ~BIT(31);
|
||||
if (idx <= s->vga.vram_size - size) {
|
||||
val = ldn_le_p(s->vga.vram_ptr + idx, size);
|
||||
}
|
||||
} else {
|
||||
val = ati_mm_read(s, s->regs.mm_index + addr - MM_DATA, size);
|
||||
|
@ -434,12 +431,9 @@ static void ati_mm_write(void *opaque, hwaddr addr,
|
|||
case MM_DATA ... MM_DATA + 3:
|
||||
/* indexed access to regs or memory */
|
||||
if (s->regs.mm_index & BIT(31)) {
|
||||
if (s->regs.mm_index <= s->vga.vram_size - size) {
|
||||
int i = 0;
|
||||
while (i < size) {
|
||||
s->vga.vram_ptr[s->regs.mm_index + i] = data & 0xff;
|
||||
data >>= 8;
|
||||
}
|
||||
uint32_t idx = s->regs.mm_index & ~BIT(31);
|
||||
if (idx <= s->vga.vram_size - size) {
|
||||
stn_le_p(s->vga.vram_ptr + idx, size, data);
|
||||
}
|
||||
} else {
|
||||
ati_mm_write(s, s->regs.mm_index + addr - MM_DATA, data, size);
|
||||
|
|
Loading…
Reference in New Issue