--- xmil/vram/makemix.c 2004/08/08 16:39:04 1.2 +++ xmil/vram/makemix.c 2005/02/04 06:42:12 1.5 @@ -5,16 +5,18 @@ // 遅いのが嫌なら後でインラインにすればいい -void makemix_txt(UINT8 *dst, UINT align, const UINT8 *txt, UINT count) { +void makemix_mixtext(UINT8 *dst, UINT align, const UINT8 *txt, UINT count) { - REG8 dat; UINT32 datl; UINT32 datr; + REG8 dat; do { + datl = (*(UINT32 *)(dst + 0)) & 0x07070707; + datr = (*(UINT32 *)(dst + 4)) & 0x07070707; dat = txt[MAKETEXT_ROW * 0]; - datl = TO256COLL(dat, 3); - datr = TO256COLR(dat, 3); + datl |= TO256COLL(dat, 3); + datr |= TO256COLR(dat, 3); dat = txt[MAKETEXT_ROW * 1]; datl |= TO256COLL(dat, 4); datr |= TO256COLR(dat, 4); @@ -28,96 +30,115 @@ void makemix_txt(UINT8 *dst, UINT align, } while(--count); } -void makemix_mix(UINT8 *dst, UINT align, - const UINT8 *txt, const UINT8 *grp, UINT count) { +void makemix_mixgrph(UINT8 *dst, UINT align, const UINT8 *grp, UINT count) { - REG8 dat; + UINT pos; UINT32 datl; UINT32 datr; + REG8 dat; + pos = 0; do { - dat = txt[MAKETEXT_ROW * 0]; - datl = TO256COLL(dat, 3); - datr = TO256COLR(dat, 3); - dat = txt[MAKETEXT_ROW * 1]; - datl |= TO256COLL(dat, 4); - datr |= TO256COLR(dat, 4); - dat = txt[MAKETEXT_ROW * 2]; - datl |= TO256COLL(dat, 5); - datr |= TO256COLR(dat, 5); - dat = grp[GRAM_B]; + datl = (*(UINT32 *)(dst + 0)) & 0x38383838; + datr = (*(UINT32 *)(dst + 4)) & 0x38383838; + dat = grp[pos + GRAM_B]; datl |= TO256COLL(dat, 0); datr |= TO256COLR(dat, 0); - dat = grp[GRAM_R]; + dat = grp[pos + GRAM_R]; datl |= TO256COLL(dat, 1); datr |= TO256COLR(dat, 1); - dat = grp[GRAM_G]; + dat = grp[pos + GRAM_G]; datl |= TO256COLL(dat, 2); datr |= TO256COLR(dat, 2); *(UINT32 *)(dst + 0) = datl; *(UINT32 *)(dst + 4) = datr; - txt++; - grp++; + pos = (pos + GRAM_LINESTEP) & (GRAM_LINESTEP * 7); dst += align; } while(--count); } -void makemix_doubler(UINT8 *dst, UINT count, UINT32 skipline) { - do { - *(UINT32 *)(dst + SURFACE_WIDTH + 0) - = (*(UINT32 *)(dst + 0)) + skipline; - *(UINT32 *)(dst + SURFACE_WIDTH + 4) - = (*(UINT32 *)(dst + 4)) + skipline; - dst += SURFACE_WIDTH * 2; - } while(--count); -} +void makemix_settext(UINT8 *dst, UINT align, const UINT8 *txt, UINT count) { -void makemix_remcpy(UINT8 *dst, UINT pos, UINT count) { + REG8 dat; + UINT32 datl; + UINT32 datr; - count -= pos; - pos = pos * SURFACE_WIDTH; do { - *(UINT32 *)(dst + pos + 0) = *(UINT32 *)(dst + 0); - *(UINT32 *)(dst + pos + 4) = *(UINT32 *)(dst + 4); - dst += SURFACE_WIDTH; + dat = txt[MAKETEXT_ROW * 0]; + datl = TO256COLL(dat, 3); + datr = TO256COLR(dat, 3); + dat = txt[MAKETEXT_ROW * 1]; + datl |= TO256COLL(dat, 4); + datr |= TO256COLR(dat, 4); + dat = txt[MAKETEXT_ROW * 2]; + datl |= TO256COLL(dat, 5); + datr |= TO256COLR(dat, 5); + *(UINT32 *)(dst + 0) = datl; + *(UINT32 *)(dst + 4) = datr; + txt++; + dst += align; } while(--count); } -void makemix_ul20(UINT8 *dst, UINT pos, UINT32 skipline) { +void makemix_ul20(UINT8 *dst, UINT pos) { UINT32 dat; - dat = (tram[TRAM_KNJ + pos] & TRAMKNJ_ULINE)?0x010101010:0x00000000; + dat = (TRAM_KNJ(pos) & TRAMKNJ_ULINE)?0x01010101:0x00000000; *(UINT32 *)(dst + (SURFACE_WIDTH * 0) + 0) = dat; *(UINT32 *)(dst + (SURFACE_WIDTH * 0) + 4) = dat; - *(UINT32 *)(dst + (SURFACE_WIDTH * 1) + 0) = dat + skipline; - *(UINT32 *)(dst + (SURFACE_WIDTH * 1) + 4) = dat + skipline; - *(UINT32 *)(dst + (SURFACE_WIDTH * 2) + 0) = 0x00000000; - *(UINT32 *)(dst + (SURFACE_WIDTH * 2) + 4) = 0x00000000; - *(UINT32 *)(dst + (SURFACE_WIDTH * 3) + 0) = skipline; - *(UINT32 *)(dst + (SURFACE_WIDTH * 3) + 4) = skipline; + *(UINT32 *)(dst + (SURFACE_WIDTH * 1) + 0) = dat; + *(UINT32 *)(dst + (SURFACE_WIDTH * 1) + 4) = dat; + *(UINT32 *)(dst + (SURFACE_WIDTH * 2) + 0) = 0; + *(UINT32 *)(dst + (SURFACE_WIDTH * 2) + 4) = 0; + *(UINT32 *)(dst + (SURFACE_WIDTH * 3) + 0) = 0; + *(UINT32 *)(dst + (SURFACE_WIDTH * 3) + 4) = 0; } -void makemix_ul10(UINT8 *dst, UINT pos, UINT32 skipline) { +void makemix_ul10(UINT8 *dst, UINT pos) { UINT32 dat; - dat = (tram[TRAM_KNJ + pos] & TRAMKNJ_ULINE)?0x010101010:0x00000000; + dat = (TRAM_KNJ(pos) & TRAMKNJ_ULINE)?0x01010101:0x00000000; *(UINT32 *)(dst + (SURFACE_WIDTH * 0) + 0) = dat; *(UINT32 *)(dst + (SURFACE_WIDTH * 0) + 4) = dat; - *(UINT32 *)(dst + (SURFACE_WIDTH * 1) + 0) = dat + skipline; - *(UINT32 *)(dst + (SURFACE_WIDTH * 1) + 4) = dat + skipline; +// *(UINT32 *)(dst + (SURFACE_WIDTH * 1) + 0) = dat; +// *(UINT32 *)(dst + (SURFACE_WIDTH * 1) + 4) = dat; *(UINT32 *)(dst + (SURFACE_WIDTH * 2) + 0) = dat; *(UINT32 *)(dst + (SURFACE_WIDTH * 2) + 4) = dat; - *(UINT32 *)(dst + (SURFACE_WIDTH * 3) + 0) = dat + skipline; - *(UINT32 *)(dst + (SURFACE_WIDTH * 3) + 4) = dat + skipline; +// *(UINT32 *)(dst + (SURFACE_WIDTH * 3) + 0) = dat; +// *(UINT32 *)(dst + (SURFACE_WIDTH * 3) + 4) = dat; *(UINT32 *)(dst + (SURFACE_WIDTH * 4) + 0) = 0; *(UINT32 *)(dst + (SURFACE_WIDTH * 4) + 4) = 0; - *(UINT32 *)(dst + (SURFACE_WIDTH * 5) + 0) = skipline; - *(UINT32 *)(dst + (SURFACE_WIDTH * 5) + 4) = skipline; +// *(UINT32 *)(dst + (SURFACE_WIDTH * 5) + 0) = 0; +// *(UINT32 *)(dst + (SURFACE_WIDTH * 5) + 4) = 0; *(UINT32 *)(dst + (SURFACE_WIDTH * 6) + 0) = 0; *(UINT32 *)(dst + (SURFACE_WIDTH * 6) + 4) = 0; - *(UINT32 *)(dst + (SURFACE_WIDTH * 7) + 0) = skipline; - *(UINT32 *)(dst + (SURFACE_WIDTH * 7) + 4) = skipline; +// *(UINT32 *)(dst + (SURFACE_WIDTH * 7) + 0) = 0; +// *(UINT32 *)(dst + (SURFACE_WIDTH * 7) + 4) = 0; } + + +void makemix_cpy200(UINT8 *dst, UINT pos, UINT count) { + + count -= pos; + pos = pos * SURFACE_WIDTH * 2; + do { + *(UINT32 *)(dst + pos + 0) = *(UINT32 *)(dst + 0); + *(UINT32 *)(dst + pos + 4) = *(UINT32 *)(dst + 4); + dst += SURFACE_WIDTH * 2; + } while(--count); +} + +void makemix_cpy400(UINT8 *dst, UINT pos, UINT count) { + + count -= pos; + pos = pos * SURFACE_WIDTH; + do { + *(UINT32 *)(dst + pos + 0) = *(UINT32 *)(dst + 0); + *(UINT32 *)(dst + pos + 4) = *(UINT32 *)(dst + 4); + dst += SURFACE_WIDTH; + } while(--count); +} +