--- np2/lio/gpset.c 2004/02/20 15:20:30 1.5 +++ np2/lio/gpset.c 2005/05/20 13:59:47 1.13 @@ -4,47 +4,87 @@ typedef struct { - BYTE x[2]; - BYTE y[2]; - BYTE pal; + UINT8 x[2]; + UINT8 y[2]; + UINT8 pal; } GPSET; +typedef struct { + UINT8 x[2]; + UINT8 y[2]; +} GPOINT2; + -// ---- CLS +// ---- PSET -REG8 lio_gcls(LIOWORK lio) { +REG8 lio_gpset(GLIO lio) { + GPSET dat; + SINT16 x; SINT16 y; - lio_updaterange(lio); - for (y=lio->range.y1; y<=lio->range.y2; y++) { - lio_line(lio, lio->range.x1, lio->range.x2, y, lio->gcolor1.bgcolor); + lio_updatedraw(lio); + MEMR_READS(CPU_DS, CPU_BX, &dat, sizeof(dat)); + x = (SINT16)LOADINTELWORD(dat.x); + y = (SINT16)LOADINTELWORD(dat.y); + if (dat.pal == 0xff) { + if (CPU_AH == 1) { + dat.pal = lio->work.fgcolor; + } + else { + dat.pal = lio->work.bgcolor; + } } + lio_pset(lio, x, y, dat.pal); return(LIO_SUCCESS); } -// ---- PSET +// ---- GPOINT2 -REG8 lio_gpset(LIOWORK lio) { +REG8 lio_gpoint2(GLIO lio) { - GPSET dat; + GPOINT2 dat; SINT16 x; SINT16 y; + REG8 ret; + UINT32 addr; + UINT sft; + UINT pl; +const UINT8 *ptr; - lio_updaterange(lio); - i286_memstr_read(CPU_DS, CPU_BX, &dat, sizeof(dat)); - if (dat.pal >= lio->gcolor1.palmax) { - if (CPU_AH == 2) { - dat.pal = lio->gcolor1.bgcolor; + lio_updatedraw(lio); + MEMR_READS(CPU_DS, CPU_BX, &dat, sizeof(dat)); + x = (SINT16)LOADINTELWORD(dat.x); + y = (SINT16)LOADINTELWORD(dat.y); + if ((lio->draw.x1 > x) || (lio->draw.x2 < x) || + (lio->draw.y1 > y) || (lio->draw.y2 < y)) { + ret = 0xff; + } + else { + ret = 0; + addr = (x >> 3) + (y * 80); + if (lio->draw.flag & LIODRAW_UPPER) { + addr += 16000; + } + addr += lio->draw.base; + sft = (~x) & 7; + if (!(lio->draw.flag & LIODRAW_MONO)) { + for (pl=0; pl<3; pl++) { + ptr = mem + addr + lioplaneadrs[pl]; + ret += (((*ptr) >> sft) & 1) << pl; + } + if (lio->draw.flag & LIODRAW_4BPP) { + ptr = mem + addr + lioplaneadrs[3]; + ret += (((*ptr) >> sft) & 1) << 3; + } } else { - dat.pal = lio->gcolor1.fgcolor; + ptr = mem + addr + lioplaneadrs[lio->draw.flag & LIODRAW_PMASK]; + ret = ((*ptr) >> sft) & 1; } } - x = (SINT16)LOADINTELWORD(dat.x); - y = (SINT16)LOADINTELWORD(dat.y); - lio_pset(lio, x, y, dat.pal); + CPU_AL = ret; return(LIO_SUCCESS); }