From 4c4f2324736afc69381a37bda3c94a0882efdaf5 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Sun, 4 Sep 2016 18:47:39 +0000 Subject: [PATCH] XGA_DrawLineBresenham() does not properly sign extend values https://sourceforge.net/p/dosbox/patches/269/ patch by Tom B Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3992 --- src/hardware/vga_xga.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hardware/vga_xga.cpp b/src/hardware/vga_xga.cpp index 922a102d..2cd85059 100644 --- a/src/hardware/vga_xga.cpp +++ b/src/hardware/vga_xga.cpp @@ -352,11 +352,11 @@ void XGA_DrawLineBresenham(Bitu val) { // Probably a lot easier way to do this, but this works. dminor = (Bits)((Bit16s)xga.desty); - if(xga.desty&0x2000) dminor |= 0xffffe000; + if(xga.desty&0x2000) dminor |= ~0x1fff; dminor >>= 1; destxtmp=(Bits)((Bit16s)xga.destx); - if(xga.destx&0x2000) destxtmp |= 0xffffe000; + if(xga.destx&0x2000) destxtmp |= ~0x1fff; dmajor = -(destxtmp - (dminor << 1)) >> 1; @@ -374,7 +374,7 @@ void XGA_DrawLineBresenham(Bitu val) { sy = -1; } e = (Bits)((Bit16s)xga.ErrTerm); - if(xga.ErrTerm&0x2000) e |= 0xffffe000; + if(xga.ErrTerm&0x2000) e |= ~0x1fff; xat = xga.curx; yat = xga.cury;