--- np2/lio/gline.c 2004/02/21 04:48:35 1.6 +++ np2/lio/gline.c 2004/02/21 20:48:52 1.9 @@ -30,7 +30,7 @@ typedef struct { } LINEPT; -static void gline(const _LIOWORK *lio, const LINEPT *lp) { +static void gline(const _GLIO *lio, const LINEPT *lp) { int x1; int y1; @@ -132,6 +132,9 @@ static void gline(const _LIOWORK *lio, c pat = (UINT16)((lp->pat >> d1) | (lp->pat << (16 - d1))); csrw = (y1 * 40) + (x1 >> 4) + ((x1 & 0xf) << 20); + if (lio->draw.flag & LIODRAW_UPPER) { + csrw += 16000 >> 1; + } gdcsub_setvectl(&vect, x1, y1, x2, y2); if (!(lio->draw.flag & LIODRAW_MONO)) { gdcsub_vectl(csrw + 0x4000, &vect, pat, @@ -140,7 +143,7 @@ static void gline(const _LIOWORK *lio, c (REG8)((lp->pal & 2)?GDCOPE_SET:GDCOPE_CLEAR)); gdcsub_vectl(csrw + 0xc000, &vect, pat, (REG8)((lp->pal & 4)?GDCOPE_SET:GDCOPE_CLEAR)); - if (lio->palmode == 2) { + if (lio->draw.flag & LIODRAW_4BPP) { gdcsub_vectl(csrw, &vect, pat, (REG8)((lp->pal & 8)?GDCOPE_SET:GDCOPE_CLEAR)); } @@ -155,7 +158,7 @@ static void gline(const _LIOWORK *lio, c // ---- -static void nor_linebox(const _LIOWORK *lio, SINT16 x1, SINT16 y1, +static void nor_linebox(const _GLIO *lio, SINT16 x1, SINT16 y1, SINT16 x2, SINT16 y2, REG8 pal) { lio_line(lio, x1, x2, y1, pal); @@ -168,7 +171,7 @@ static void nor_linebox(const _LIOWORK * } } -static void nor_lineboxfill(const _LIOWORK *lio, SINT16 x1, SINT16 y1, +static void nor_lineboxfill(const _GLIO *lio, SINT16 x1, SINT16 y1, SINT16 x2, SINT16 y2, REG8 pal) { for (; y1<=y2; y1++) { @@ -179,7 +182,7 @@ static void nor_lineboxfill(const _LIOWO // ---- -REG8 lio_gline(LIOWORK lio) { +REG8 lio_gline(GLIO lio) { GLINE dat; LINEPT lp; @@ -191,7 +194,7 @@ REG8 lio_gline(LIOWORK lio) { lio_updatedraw(lio); i286_memstr_read(CPU_DS, CPU_BX, &dat, sizeof(dat)); if (dat.pal == 0xff) { - lp.pal = lio->mem.fgcolor; + lp.pal = lio->work.fgcolor; } else { lp.pal = dat.pal; @@ -203,6 +206,7 @@ REG8 lio_gline(LIOWORK lio) { lp.y1 = (SINT16)LOADINTELWORD(dat.y1); lp.x2 = (SINT16)LOADINTELWORD(dat.x2); lp.y2 = (SINT16)LOADINTELWORD(dat.y2); + TRACEOUT(("line %d %d %d %d", lp.x1, lp.y1, lp.x2, lp.y2)); if (dat.sw) { lp.pat = (GDCPATREVERSE(dat.style[0]) << 8) + GDCPATREVERSE(dat.style[1]); @@ -210,10 +214,8 @@ REG8 lio_gline(LIOWORK lio) { else { lp.pat = 0xffff; } - - if (dat.pal == 0xff) { - dat.pal = lio->mem.fgcolor; + dat.pal = lio->work.fgcolor; } else if (dat.pal >= lio->draw.palmax) { return(5);