--- np2/lio/gput1.c 2004/03/04 17:36:06 1.11 +++ np2/lio/gput1.c 2004/06/04 16:54:57 1.15 @@ -509,8 +509,8 @@ REG8 lio_gget(GLIO lio) { if (leng < (size + 4)) { return(LIO_ILLEGALFUNC); } - i286_memword_write(seg, off, (REG16)x2); - i286_memword_write(seg, off+2, (REG16)y2); + MEML_WRITE16(seg, off, (REG16)x2); + MEML_WRITE16(seg, off+2, (REG16)y2); off += 4; gt.addr = (x >> 3) + (y * 80); if (lio->draw.flag & LIODRAW_UPPER) { @@ -554,8 +554,8 @@ REG8 lio_gput1(GLIO lio) { lput.seg = LOADINTELWORD(dat.seg); lput.mode = dat.mode; leng = LOADINTELWORD(dat.leng); - lput.width = i286_memword_read(lput.seg, lput.off - 4); - lput.height = i286_memword_read(lput.seg, lput.off - 2); + lput.width = MEML_READ16(lput.seg, lput.off - 4); + lput.height = MEML_READ16(lput.seg, lput.off - 2); size = ((lput.width + 7) >> 3) * lput.height; if (leng < (size + 4)) { return(LIO_ILLEGALFUNC); @@ -594,26 +594,51 @@ REG8 lio_gput2(GLIO lio) { GPUT2 dat; LIOPUT lput; UINT16 jis; + int pat; REG16 size; lio_updatedraw(lio); MEML_READSTR(CPU_DS, CPU_BX, &dat, sizeof(dat)); lput.x = (SINT16)LOADINTELWORD(dat.x); lput.y = (SINT16)LOADINTELWORD(dat.y); + lput.off = 0x104e; + lput.seg = CPU_DS; jis = LOADINTELWORD(dat.chr); - if (jis & 0xff00) { - lput.off = 0x104e; - lput.seg = CPU_DS; - if (jis < 0x200) { // 1/4ANK + pat = 0; + if (jis < 0x200) { + if (jis < 0x80) { + if (jis == 0x7c) { + pat = 1; + } + else if (jis == 0x7e) { + pat = 2; + } + else { + jis += 0x2900; + } + } + else if (jis < 0x100) { + if ((jis - 0x20) & 0x40) { + pat = (jis & 0x3f) + 3; + } + else { + jis += 0x2980; + } + } + else { jis &= 0xff; } + } + if (!pat) { size = bios0x18_14(lput.seg, 0x104c, jis); - lput.width = (size & 0xff00) >> (8 - 3); - lput.height = (size & 0xff) << 3; } else { - return(0); + MEML_WRITESTR(lput.seg, lput.off, mem + (LIO_SEGMENT << 4) + + LIO_FONT + ((pat - 1) << 4), 0x10); + size = 0x0102; } + lput.width = (size & 0xff00) >> (8 - 3); + lput.height = (size & 0xff) << 3; lput.mode = dat.mode; lput.sw = 0; if (dat.colorsw) {