~rabbits/uxn

486e79c48db26f02bedeb0469a53e9f81fbabc80 — neauoire a month ago 7f34542
screen_talk should not peek at addr when drawing a single pixel
1 files changed, 7 insertions(+), 5 deletions(-)

M src/uxnemu.c
M src/uxnemu.c => src/uxnemu.c +7 -5
@@ 294,15 294,17 @@ screen_talk(Device *d, Uint8 b0, Uint8 w)
	if(w && b0 == 0xe) {
		Uint16 x = mempeek16(d->dat, 0x8);
		Uint16 y = mempeek16(d->dat, 0xa);
		Uint8 *addr = &d->mem[mempeek16(d->dat, 0xc)];
		Layer *layer = d->dat[0xe] >> 4 & 0x1 ? &ppu.fg : &ppu.bg;
		Uint8 mode = d->dat[0xe] >> 5;
		if(!mode)
			putpixel(&ppu, layer, x, y, d->dat[0xe] & 0x3);
		else if(mode-- & 0x1)
			puticn(&ppu, layer, x, y, addr, d->dat[0xe] & 0xf, mode & 0x2, mode & 0x4);
		else
			putchr(&ppu, layer, x, y, addr, d->dat[0xe] & 0xf, mode & 0x2, mode & 0x4);
		else {
			Uint8 *addr = &d->mem[mempeek16(d->dat, 0xc)];
			if(mode-- & 0x1)
				puticn(&ppu, layer, x, y, addr, d->dat[0xe] & 0xf, mode & 0x2, mode & 0x4);
			else
				putchr(&ppu, layer, x, y, addr, d->dat[0xe] & 0xf, mode & 0x2, mode & 0x4);
		}
		reqdraw = 1;
	}
}